dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
💬 Chat with your DeepSeek Harness agent from WeChat through the official WeChat ClawBot channel: native photo understanding, sending files both ways, reminders, long-term memory, and a "typing..." indicator while the bot is thinking.
English | 中文
Chat with the DeepSeek Harness (DSH) agent on your computer from WeChat. Clawbot is a DSH plugin and fully open source. It replies with the AI you use in DSH and does not upload your information. Away from your desk, you can still ask it to look through files, edit documents or run commands, and the results come back to the WeChat chat. It can also plan your days from the system calendar, create events for you, and set alarms that ring on your phone (macOS only).
It uses WeChat's official 微信ClawBot channel: just scan a QR code to log in.
After nearly two months of development and real-world use, wechat-clawbot has become steadily more stable and economical, and the stable release v1.0.0 came out on 10 October 2026.
同意 / 拒绝 (or yes / no)## 全天候秘书 section of your long-term memory file, memory.md. Edit it however you like: the 打开 memory.md button in the settings opens it.This feature is macOS only and off by default. To turn it on:
The first time, the plugin compiles a small background app, Clawbot-Calendar, on your Mac. This needs the Xcode command line tools (xcode-select --install if you don't have them).
xcode-select --install if you don't have them)0. Got an agent?
Copy the link to this page, or tell any agent wechat-clawbot, and ask it to install it into DSH. Or:
1. Install the plugin
dsh plugin --profile web add wechat-clawbotOr search for wechat-clawbot under Plugins → Add plugin in the DSH web sidebar. Restart DSH once afterwards.
2. Link your WeChat
npx -y -p wechat-clawbot clawbot loginA QR code appears in the terminal. Scan it with WeChat's "Scan" and confirm.
3. Start chatting
A new contact, 微信ClawBot, shows up in WeChat. Message it. The running DSH picks up the new link automatically and starts a conversation.
Other commands: clawbot status shows who is linked, clawbot logout unlinks (use the same npx -y -p wechat-clawbot prefix).
Open Plugins → wechat-clawbot → 微信 Bot in the DSH web sidebar. Most changes apply immediately and the WeChat connection stays up (the two switches marked below restart the WeChat listener for a few seconds):
memory.md; switching it off moves them out and keeps a copy, which comes back unchanged next time. 一键授权 (one-click authorization; press it at the Mac) asks for the calendar and reminders permissions that are still missing; 测试闹钟 (test alarm) sets an alarm about two minutes out; 打开 memory.md opens memory.md on the Mac.A few options (the session id, the working directory, whether to start with DSH) live in the - id: clawbot entry of ~/.dsh/profiles/web/cordis.patch.yml. Changing them restarts the WeChat listener automatically.
question to the same model: should this be remembered? To turn it off, add autoMemory: false to the clawbot entry in cordis.patch.yml. It takes effect on the next message.
~/.dsh/clawbot/.I sent a message and nothing happened: check that DSH is running, then open Plugins → wechat-clawbot: both components should say "running". If you just upgraded DSH, see the install & troubleshooting guide.
A reminder was late: reminders need the computer and DSH to be running. While the computer sleeps, they wait until it wakes.
An alarm did not ring: on the iPhone, check three things: it runs iOS 26.2 or later; Settings → your name → Find My → My Location is this iPhone; and in Settings → Apps → Reminders, Alarms under "Allow Reminders to Access" is on (if it isn't there yet, mark any reminder urgent by hand once and allow the prompt).
I want the bot on a different model: pin one in the 微信 Bot settings. Then switching models in the web UI no longer affects the bot.
More on installing, upgrading and troubleshooting: wechat-clawbot-INSTALL.md (in Chinese). It is written for an AI agent installing the plugin for you, and it works just as well for people.
If you also use Claude Code, the bot can check what a Claude Code session is doing or pass a message to one. A session that is already closed is resumed in the background first. This needs the claude CLI on the same machine.
The plugin also serves a small set of local HTTP routes for an MCP server, so Claude Code can in turn read and drive DSH sessions and send you a WeChat notification. The routes listen on localhost only and require a token. If you don't need them, turn off 开放 MCP 桥(Claude / Codex) in the 微信 Bot settings. Existing Claude MCP clients remain compatible.
The integration works in both directions:
DSH gets list_codex_projects, list_codex_sessions, read_codex_session, send_to_codex_session, and read_codex_progress. Projects are grouped by the conversations' working directories. Listings are paginated; use the returned full directory and conversation ID when selecting a target. Ambiguous names return candidates without sending anything.
clawbot-mcp stdio server exposes the configured DSH WeChat conversation,DSH session list/read/send tools, a notification tool, and progress publishing/query tools.
Build this checkout and register its MCP entry point on the same machine as DSH:
npm ci
npm run build
codex mcp add wechat-clawbot -- node /path/to/wechat-clawbot/lib/mcp-cli.js
node /path/to/wechat-clawbot/lib/mcp-cli.js --checkReplace /path/to/wechat-clawbot with your checkout. For an installed version containing this integration, clawbot-mcp is also a package executable. Reconnect the Codex client after adding the server. DSH must be running with the updated plugin and 开放 MCP 桥(Claude / Codex) enabled. The default origin is http://127.0.0.1:3080; set CLAWBOT_DSH_URL if DSH uses a different port. The token is read from $CLAWBOT_STATE_DIR/mcp-token or $DSH_HOME/clawbot/mcp-token (DSH_HOME defaults to ~/.dsh). Set CLAWBOT_MCP_TOKEN_FILE for another location. Pass these variables with codex mcp add --env KEY=VALUE as needed. Keep the token in its local file, not in command arguments or repository config.
Codex can read clawbot://wechat-session or call dsh_get_wechat_session to see the WeChat session. dsh_notify_wechat({text: "…"}) sends only to the QR-linked owner and records a [Codex 发给用户的] copy in DSH history; it does not start another bot turn. dsh_send_to_session drives a selected DSH conversation without automatically forwarding its replies to WeChat. Use the notification tool when you want a phone update. Both tools are marked as having outside effects, so with Codex's default approval settings it asks you before each call.
The default codexTransport: socket connects to an existing shared App Server using WebSocket over a Unix socket. The default socket is $CODEX_HOME/app-server-control/app-server-control.sock (CODEX_HOME defaults to ~/.codex). Set codexSocket to use a specific shared server's socket. Set codexBinary to select the CLI for standalone mode. These fields belong in the clawbot row of your local DSH cordis.patch.yml; changing them restarts the plugin. codexPeer is the switch in the settings card. It is off by default, and while it is off none of these tools is sent to the model; changing it also restarts the WeChat listener.
The server must be the one executing the selected conversations and support the documented Unix socket WebSocket transport. You can start a local shared service with codex app-server --listen unix:// or --listen unix:///path/to/rpc.sock. An already-running desktop/IDE client must expose or use that shared server for live steering; starting another daemon does not attach it to an unrelated client's running tasks. There is no silent fallback to a separate Codex runner if the shared server is unavailable.
Once connected, say, for example: "List Codex projects", "Show conversations in that project", then "Send 'run the tests' to this conversation". Active turns receive turn/steer with the current turn ID; idle conversations receive turn/start. Both keep the selected conversation's identity and permissions. Delivery is reported immediately; completion must be checked separately. An unloaded conversation requires the original client to be closed and explicit allowResume: true, even in socket mode: another server's live execution cannot be inferred from stored history.
notLoaded only means this server has not loaded the conversation. Use read_codex_session to read its saved history. Reads use summarized pages to avoid pulling large command outputs and tool results. If a response still hits the 8 MiB limit, reduce limit to 1. Reading history does not resume execution and may omit another client's unsaved messages.
A relayed message belongs to the conversation identified by the delivery result's threadId; it is not copied into other conversations open in the app. In a regular local CLI, /app opens the same saved conversation in the desktop app. Live execution on a shared server still requires the clients to connect to that same server. You can also open a known local conversation with codex://threads/; see the desktop deep-link reference and CLI command reference.
For background continuation of stored conversations, explicitly configure codexTransport: stdio. That launches an independent codex app-server --listen stdio:// using your existing Codex login/config. It cannot inspect another client's live execution. A stored, unloaded conversation will only resume after you close its original client and explicitly permit background continuation (allowResume: true). No model, sandbox, or approval policy is overridden. Command/file approval requests and user questions from this independent runner go to WeChat; unsupported permission grants are declined. Shared-server approvals remain with the existing Codex client. stdio mode is experimental: the approval prompts it forwards to WeChat do not yet show full details (exact changes, extra permissions), and they go to whoever is chatting with the bot at the time. Use it only when you are the bot's only allowed sender. The default socket mode is not affected.
In Codex, ask it to call dsh_report_codex_progress at meaningful milestones and at the end of the task, using the selected conversation's full ID:
{"threadId":"11111111-1111-4111-8111-111111111111","state":"running","summary":"Implementing the parser"}States are running, waiting, completed, failed, or interrupted. DSH can query read_codex_progress, and MCP clients can query dsh_read_codex_progress. Publishing a report does not send a phone notification; Codex can separately use dsh_notify_wechat when requested. App Server events also populate progress for subscribed conversations. notLoaded means live state is unknown, and a timestamped report is an observation, not a live heartbeat. Progress reports are held in memory (up to 200 conversations) and cleared when the plugin restarts.
The progress HTTP routes are POST /plugins/clawbot/mcp/codex/report and GET /plugins/clawbot/mcp/codex/progress?threadId=…. They use the same bearer token and live mcpBridge switch as the existing session/notification routes. The MCP client accepts loopback origins only and refuses redirects. No login data, conversation snapshots, preferences, project inventories, or local workspace indexes are bundled in the package. Protocol reference: Codex App Server.
npm install
npm run build # compile to lib/
node test/regression.mjs # offline regression checks: no model calls, no network, no WeChat
npm run test:codex # synthetic Codex RPC + loopback HTTP + real MCP stdio; no model or WeChat callssrc/ilink/ is the protocol layer ported from Tencent's MIT-licensed @tencent-weixin/openclaw-weixin; the rest is the DSH integration.
MIT. The ported iLink client is © Tencent, also under the MIT license; see NOTICE.