dsh-on-imessage
Manifest valid★ 4Chat with local DeepSeek Harness agents from iPhone iMessage: switch workspaces/sessions, start new sessions, and get replies in the Messages app — no extra apps, no servers, no cloud.
dsh-on-iMessage
Chat with your local DeepSeek Harness (dsh) agents from your iPhone, right inside the Messages app — no extra apps, no servers, no cloud.
中文版请阅读 README.zh.md.
Turn your Mac into a 24/7 dsh companion that lives in your iMessage threads. Send a message to your bridge account and your local dsh agent picks it up, switches workspaces/sessions, runs tools, and replies back — all without opening a terminal.
Why This Exists
- You already live in iMessage; dsh lives on your Mac.
- SSH from your phone is clunky. Web UIs need ports/VPNs. Telegram/WeChat need third-party platforms.
- iMessage is already on every iPhone, end-to-end encrypted, and works offline-first.
This bridge gives you a real chat experience: white bubbles from dsh, blue bubbles from you, one-to-one.
Features
- Chat with dsh from iMessage — send any message, get the agent's reply.
- Workspace switching —
dsh,dsh use stockKing,dsh use 2. - Session switching —
dsh sessions stockKing,dsh use stockKing 0. - New sessions —
dsh new <message>. - Web UI sync — when dsh web is running, messages go through its local API so your browser stays in sync.
- Safe by default — strict sender whitelist; nobody else can trigger your agent.
- Bilingual replies — follows your Mac's language (or
DSH_BRIDGE_LANG=en|zh). - Zero third-party services — everything stays on your Mac and Apple's iMessage.
Requirements
- macOS with Messages (iMessage) and a second Apple ID for the bridge account (recommended, avoids self-chat duplication).
- DeepSeek Harness installed (this is the
dshagent). - Python 3.9+ (stdlib only for the bridge).
Install
Option A — as a dsh plugin (recommended)
This repo is a standard DeepSeek Harness plugin bundle, so it can be installed with one command:
dsh plugin --profile web add github:yuunnn/dsh-on-imessage
Then set the required environment variables in the shell that starts dsh web:
export DSH_BUDDY="+861234567890" # your iPhone number
export DSH_AUTHORIZED_FROM="+861234567890" # sender whitelist
export DSH_BRIDGE_ACCOUNT="E:dsh@icloud.com" # the second Apple ID signed into Messages
Restart dsh web. The plugin starts bridge.py automatically when the dsh profile boots.
If pnpm asks to allow build scripts, add
dsh-on-imessage: trueto the profile'spnpm-workspace.yaml— this package has no build step, so this is usually not needed.
Option B — standalone daemon
Paste this into your Mac terminal:
curl -fsSL https://raw.githubusercontent.com/yuunnn/dsh-on-imessage/main/install.sh | bash
That's it. The installer clones this repo into ~/.dsh/bridges/imessage, starts the daemon, and prints the next steps, including signing in to a second Apple ID in Messages.
The installer only needs
gitandpython3. Everything else is already on your Mac.
DSH_BIN (optional): if your dsh CLI is not on PATH and not in the npx cache, set the environment variable to its entry point, e.g. export DSH_BIN="$HOME/deepseek-harness/apps/cli/lib/bin.js".
Setup
- Create a second Apple ID (e.g.
dsh@example.com) at appleid.apple.com. This becomes the "dsh persona". - Sign in to that account in Mac Messages (Messages > Settings > iMessage).
- Set the bridge configuration. The bridge reads these from the environment:
DSH_BUDDY= your iPhone number, e.g.+861234567890DSH_AUTHORIZED_FROM= your iPhone number (or the email you reply from)DSH_BRIDGE_ACCOUNT= the iMessage account the bridge listens on, e.g.E:dsh@icloud.com
- Restart the daemon:
pkill -f bridge.py; DSH_BUDDY="+861234567890" DSH_AUTHORIZED_FROM="+861234567890" DSH_BRIDGE_ACCOUNT="E:dsh@icloud.com" ~/.dsh/bridges/imessage/install.sh - Text your bridge account from your iPhone. It replies with
dshhelp.
Usage
| Command | Meaning |
|---|---|
| dsh | List workspaces |
| dsh use <id\|path\|name> | Switch workspace (latest session) |
| dsh use <id\|path\|name> <session#> | Switch workspace + specific session |
| dsh sessions [<workspace>] | List sessions |
| dsh new <message> | Start a new session |
| anything else | Continue the current session |
Workspaces are matched by index, full path, or basename — exact match wins, ambiguous matches list candidates.
Architecture
iPhone iMessage
│ (send to dsh@icloud.com)
▼
Mac Messages (chat.db + osascript)
│
▼
bridge.py (poll new messages)
│
├── dsh web API (127.0.0.1:3080) ──► dsh web UI stays in sync
└── dsh --profile headless --resume (fallback)
│
▼
reply via Messages back to iPhone
Security
- Sender whitelist: only
AUTHORIZED_FROMhandles are processed. - Account isolation: only messages addressed to the bridge account are processed.
- Local-only: no public servers, no telemetry, no cloud.
- You can keep using iMessage for personal memos; those go to a different thread and are ignored.
FAQ
Why a second Apple ID? iMessage treats messages between addresses of the same Apple ID as self-chat, which duplicates bubbles. A separate Apple ID gives a clean one-to-one conversation.
Do I need the dsh web UI running? No. The bridge falls back to the headless CLI if the web process is not listening.
Can other people trigger it? No. Only your whitelisted handle(s) can.
License
Apache-2.0. See LICENSE.
Similar plugins
by Yaya716
Persistent user-message tools for DeepSeek Harness Web: hover actions on user bubbles in the chat flow (copy, and edit-and-resend as a new message).
★ 0
JavaScript
Aug 15, 2026
dsh plugin --profile web add @local/dsh-msg-toolsby swarm-apps
Send files from your DeepSeek Harness agent straight to your phone, and reference what your phone sent back — no account, no public IP, end-to-end encrypted.
★ 3
↓ 128/wk
TypeScript
Aug 24, 2026
dsh plugin --profile web add dsh-swarmdropby PerryLink
Pushes DSH approval and question cards to IM channels (WeChat first) and answers them from chat, with a session console, per-channel security, and an open push service.
★ 0
Apache-2.0
TypeScript
Sep 13, 2026
dsh plugin --profile web add dsh-reachby MichengAI
DSH IM Connect — 将主流即时通讯平台接入本机 DeepSeek Harness · Connect major messaging platforms to local DeepSeek Harness agents
★ 17
Apache-2.0
JavaScript
Sep 14, 2026
dsh plugin --profile web add @michengai/dsh-im-connectby markelayan
Cross-session call center for DeepSeek Harness (DSH) agents: session_message delivery between sessions + a named contacts directory with name-only self-registration. File-based config, local-only, no
★ 0
MIT
JavaScript
Sep 9, 2026
dsh plugin --profile web add agents-in-the-loopby zexadev
Mobile client for the DeepSeek Harness — use the dsh on your dev machine from your Android or iOS phone, remotely across networks, peer-to-peer over iroh with no server to set up (falls back to a rela
★ 44
MIT
Rust
Sep 9, 2026
dsh plugin --profile web add dsh-plugin-tether