From acedatacloud-content
Operates the user's personal WeChat account via a self-hosted Wisdom service: check login status, list contacts/conversations, read and summarize history, search contacts, refresh local history DB, and send messages after explicit confirmation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/acedatacloud-content:personal-wechatWhen to use
Trigger for the user's personal WeChat account via their own Wisdom server: check status/account, list contacts, list recent conversations, read or summarize a chat, query local history, search contacts, or send a message. This acts on the user's real desktop WeChat, so writes are gated behind explicit confirmation.
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use the user's self-hosted **Wisdom** service to operate their personal WeChat
Use the user's self-hosted Wisdom service to operate their personal WeChat account. Wisdom runs on a Windows host with WeChat Desktop logged in and exposes an HTTP API.
Credentials are injected by the personalwechat BYOC connector:
PERSONALWECHAT_BASE_URL — Wisdom server base URL, e.g. http://82.156.126.14:8000.PERSONALWECHAT_API_TOKEN — Wisdom API_TOKEN. Secret — never echo, print, or log it.The helper sends the token as Authorization: Bearer ...; it never puts the
token in the URL. For queued UI operations such as search and send, the helper
submits the task and waits for /api/tasks/{id} before printing the final
result.
This is the user's real personal WeChat account. Read operations can run directly. Sending messages or files must be dry-run first, then performed only after the user explicitly approves the exact target and content.
The skill ships a stdlib-only helper. Run this resolver at the top of every
Bash block below — each Bash call is a fresh shell, and $SKILL_DIR points at
the LAST skill loaded this turn, so anchor on our own script:
WX="$SKILL_DIR/scripts/personal_wechat.py"; [ -f "$WX" ] || WX=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/personal_wechat.py' 2>/dev/null | head -1)
[ -f "$WX" ] || { echo "personal-wechat script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
Always start with status when the user asks to use WeChat:
python3 $WX status
Expected healthy shape:
{"auth":{"logged_in":true,"wechat_running":true,"page":"logged_in"}}
If logged_in=false, tell the user to open the Wisdom web UI / RDP and scan the
WeChat QR code. If the API returns 401, ask the user to reconnect the Personal
WeChat connector with the current Wisdom API token.
python3 $WX account
python3 $WX contacts --limit 50
Use the normal conversations endpoint first; it prefers WeChat DB when ready and falls back to Wisdom's app DB.
python3 $WX conversations --limit 20
For decrypted local WeChat history sessions:
python3 $WX conversations --history --limit 20
First list conversations, then use the id as conversation_id:
python3 $WX messages "34642176898@chatroom" --limit 50 --order asc
Read from Wisdom's decrypted WeChat local databases:
python3 $WX history --limit 50
python3 $WX history --talker "34642176898@chatroom" --limit 50
python3 $WX history --limit 20 --offset 20
Wisdom permits only SELECT and PRAGMA:
python3 $WX sql MicroMsg.db 'SELECT count(*) AS cnt FROM Session'
Use raw SQL only for diagnostics or targeted metadata queries. Do not dump large message tables unless the user explicitly asks.
If history looks stale, refresh the decrypted DB snapshot:
python3 $WX refresh-history
python3 $WX search "Alice"
Search drives the WeChat UI, so it may be slower than local DB history reads.
send dry-runs by default. It never sends unless --confirm is present, or
unless an AceDataCloud scheduled task pre-authorized this Skill and you use
--unattended-confirm.
python3 $WX send "Alice" "今晚 8 点开会吗?"
# -> {"dry_run": true, ...}
Show the dry-run output to the user and ask for explicit approval of the exact recipient and text. Only then run:
python3 $WX send "Alice" "今晚 8 点开会吗?" --confirm
Never add --confirm in the first attempt. Never infer consent from vague text.
The user must clearly approve sending this exact message.
When running inside an AceDataCloud scheduled task, the platform may pre-authorize specific Skills for unattended execution. If all of these are true:
AICHAT_UNATTENDED_MODE=trueAICHAT_ACTIVE_SKILL is personal-wechat or acedatacloud/personal-wechatAICHAT_ACTIVE_SKILL appears in AICHAT_UNATTENDED_ALLOWED_SKILLSthen the user has pre-authorized this Skill for that scheduled task. In that case, use:
python3 $WX send "Alice" "今晚 8 点开会吗?" --unattended-confirm
If the helper returns unattended_confirmation_denied, do not retry with
--confirm; report the dry-run and explain that the task needs this Skill to be
selected in its unattended authorization settings.
PERSONALWECHAT_API_TOKEN.PERSONALWECHAT_BASE_URL + API_TOKEN as full remote control of the user's WeChat.--confirm.--unattended-confirm only when the platform env says this Skill is pre-authorized.python3 $WX refresh-history once, then retry the read.The helper wraps these Wisdom endpoints:
GET /api/statusGET /api/auth/statusGET /api/accountGET /api/contacts?version=2.0GET /api/conversationsGET /api/conversations/historyGET /api/messagesGET /api/messages/historyPOST /api/messages/history/queryPOST /api/messages/history/refreshPOST /api/searchPOST /api/messages/send (only after --confirm or verified --unattended-confirm)npx claudepluginhub acedatacloud/skills --plugin acedatacloud-contentQueries local WeChat data (messages, contacts, groups) from the command line using a Rust daemon with SQLCipher decryption. Useful for searching chat history, checking unread messages, and exporting conversations.
Interacts with WeChat Official Account API to send customer service and template messages, manage templates, and list followers via CLI. Useful for customer engagement and notification workflows using App ID + App Secret authentication.
Sets up WeChat channel connection via QR code login. Checks existing credentials, supports re-login, logout, and full reset.