Install
$ agentstack add skill-nanocoai-nanoclaw-add-wechat ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Add WeChat Channel
Adds WeChat support via iLink Bot API — the first-party Tencent API for personal WeChat bots (different from WeCom / Official Account).
Why this is different from wechaty/PadLocal:
- Official Tencent API — no ToS violation, no ban risk
- Free — no PadLocal token required
- No public webhook URL needed — uses long-poll
- Works with any personal WeChat account
Prerequisites
- A personal WeChat account with the mobile app installed
- A phone to scan the QR code for login
- Node.js >= 20 (already required by NanoClaw)
Install
NanoClaw doesn't ship channels in trunk. This skill copies the WeChat adapter in from the channels branch.
Pre-flight (idempotent)
Skip to Credentials if all of these are already in place:
src/channels/wechat.tsexistssrc/channels/wechat-registration.test.tsexistssrc/channels/index.tscontainsimport './wechat.js';wechat-ilink-clientis listed inpackage.jsondependencies
Otherwise continue. Every step below is safe to re-run.
1. Fetch the channels branch
git fetch origin channels
2. Copy the adapter and its registration test
git show origin/channels:src/channels/wechat.ts > src/channels/wechat.ts
git show origin/channels:src/channels/wechat-registration.test.ts > src/channels/wechat-registration.test.ts
3. Append the self-registration import
Append to src/channels/index.ts (skip if the line is already present):
import './wechat.js';
4. Install the library (pinned)
pnpm install wechat-ilink-client@0.1.0
5. Build and validate
pnpm run build
pnpm exec vitest run src/channels/wechat-registration.test.ts
Both must be clean before proceeding. wechat-registration.test.ts is the one integration test: it imports the real channel barrel and asserts the registry contains wechat. It goes red if the import './wechat.js'; line is deleted or drifts, if the barrel fails to evaluate (so the channel genuinely would not register), or if wechat-ilink-client isn't installed (the import throws) — so it also implicitly verifies the dependency from step 4. Importing is safe: the adapter opens its long-poll connection only in setup() (at host startup), never at import.
End-to-end message delivery against a real WeChat account is verified manually once the service is running — see Credentials and Wire your first DM above.
Credentials
Unlike most channels, WeChat requires no pre-configured API keys. Auth happens via QR code scan from your phone.
1. Enable the channel
Add to .env:
WECHAT_ENABLED=true
Sync to container: mkdir -p data/env && cp .env data/env/env
2. Start the service and scan the QR
Restart NanoClaw.
Run from your NanoClaw project root:
source setup/lib/install-slug.sh
systemctl --user restart $(systemd_unit) # Linux
# or
launchctl kickstart -k gui/$(id -u)/$(launchd_label) # macOS
The adapter will print a QR URL to the logs and save it to data/wechat/qr.txt:
tail -f logs/nanoclaw.log | grep WeChat
# or
cat data/wechat/qr.txt
Open the URL in a browser (it renders a QR code), then:
- Open WeChat on your phone
- Use its built-in QR scanner (top-right "+" → Scan)
- Approve the authorization on your phone
- Auth credentials are saved to
data/wechat/auth.json— do not commit this file
The bot is now connected as your WeChat account.
Wire your first DM
A successful QR login alone isn't enough — the adapter still needs to be wired to an agent group before it can respond.
1. Trigger the first inbound message
Have a different WeChat account send a message to the bot account. This auto-creates a messaging_groups row with the sender's platform_id.
2. Run the wire script
pnpm exec tsx .claude/skills/add-wechat/scripts/wire-dm.ts
Interactive flow: the script lists all unwired WeChat messaging groups, asks which agent group to wire it to, and creates the messaging_group_agents row with sensible defaults (sender policy request_approval, session mode shared).
With request_approval, the next DM from the stranger fires an approval card to the admin — admin taps Approve/Deny, approved users are added as members and their queued message replays through the agent.
Non-interactive:
pnpm exec tsx .claude/skills/add-wechat/scripts/wire-dm.ts \
--platform-id wechat:wxid_xxxxx \
--agent-group ag-xxxxx \
--non-interactive
Flags:
--platform-id— wire a specific messaging group (default: most recent unwired)--agent-group— target agent group (default: prompt; or solo admin group in non-interactive)--sender-policy public|strict|request_approval— defaultrequest_approval(fires an admin approval card on unknown-sender DMs)--session-mode shared|per-thread— defaultshared
3. Test
Have the sender message the bot again — the agent should respond.
Operational notes
- Only one instance can use a given token at a time. Don't run multiple NanoClaw instances pointing to the same
data/wechat/auth.json. - Re-login on session expiry: if you see
WeChat: session expiredin logs, deletedata/wechat/auth.jsonand restart — you'll be asked to re-scan. - Sync cursor persistence:
data/wechat/sync-buf.txtholds the long-poll cursor. Deleting it replays recent history on next start; don't delete it in normal operation. - Account safety: this uses the official Tencent API, so account bans for bot automation aren't a risk. That said, don't spam — normal rate limits still apply.
Next Steps
If you're in the middle of /setup, return to the setup flow now.
Otherwise, restart the service to pick up the new channel and wiring.
Channel Info
- type:
wechat - terminology: WeChat has "contacts" (DMs) and "group chats" (rooms). Each DM or group is a separate messaging group.
- how-to-find-id: Send a message to the bot from the target account; the adapter auto-creates a messaging group and logs
WeChat inbound platformId=wechat:. Usewechat:for DMs,wechat:for rooms. - admin-user-id: The operator's WeChat user_id (for
init-first-agent.ts --admin-user-id) is saved todata/wechat/auth.jsonasoperatorUserIdafter the QR scan. Read it withcat data/wechat/auth.json | jq -r .operatorUserIdand prefix withwechat:(i.e.wechat:). - supports-threads: no (WeChat has no reply threads)
- typical-use: Long-poll — the adapter holds a persistent connection to Tencent's iLink API and receives messages in real time. No webhook URL needed.
- default-isolation:
sharedsession mode per messaging group (DM or room). Usestrictsender policy if you want only specific users to reach the agent;publicopens it to anyone who messages the bot. - post-install-wiring: Use the
wire-dm.tshelper (see the "Wire your first DM" section above) if running this skill standalone. If running as part ofbash nanoclaw.sh,init-first-agent.tshandles wiring — just pass theplatform-idandadmin-user-idcaptured above.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: nanocoai
- Source: nanocoai/nanoclaw
- License: MIT
- Homepage: https://nanoclaw.dev
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.