name: whatsapp-personal-channel description: Operate the local unofficial WhatsApp personal channel bridge for a personal account, limited to the allowlisted phone number or numbers in the bridge config. metadata: author: oneshotprompt version: "1.0"
Use this skill when the task is specifically about reading WhatsApp messages, replying to them, or carrying out a clear local machine action requested through the local bridge in tools/whatsapp-personal-channel.
This skill is for a single reply pass after a trigger has already fired. If the operator wants continuous waiting for new messages, the runtime should use the external listen command instead of implementing a loop inside the agent.
Workflow:
- Verify the bridge is running with
RunCommandusingfileName=nodeandarguments=tools/whatsapp-personal-channel/channel.mjs health. - Use the current trigger details from the task prompt when present, then read unread inbound messages with
RunCommandusingfileName=nodeandarguments=tools/whatsapp-personal-channel/channel.mjs list-unread --limit 10to confirm the sender and message body. - If more context is needed, read recent history for that sender with
RunCommandusingfileName=nodeandarguments=tools/whatsapp-personal-channel/channel.mjs list-recent --phone <digits> --limit 10. - If the inbound message requests a clear and safe local machine action, load the
command-executionskill and use the narrowest direct command needed to perform it. - After the action succeeds, send exactly one concise confirmation to that same sender with
RunCommandusingfileName=nodeandarguments=tools/whatsapp-personal-channel/channel.mjs send --phone <digits> --text "...". - If the request is ambiguous, risky, or the local command fails, send exactly one concise clarification or failure message to that same sender with
--phone <digits>. - Summarize what actually happened after the command sequence: no unread messages, waiting for bridge readiness, a local action that was completed, or the reply that was sent.
Guardrails:
- Do not attempt to message any number outside the bridge allowlist.
- The bridge already enforces
allowedPhoneNumbers; treat any allowlist error as a hard stop. - If the bridge is not ready, report that status instead of guessing.
- Always pass
--phone <digits>when usingsendorlist-recentso the reply is pinned to the correct sender. - Do not send more than one reply in a single run unless the task explicitly says to do so.
- Prefer short, direct replies because this runs against a personal WhatsApp account.
- Only execute local actions when the request is explicit and the command is safe to run with the tools already selected for the job.
- For destructive, risky, credentialed, or unclear requests, ask for confirmation instead of acting.
- Never claim a local action succeeded unless the exit code and command output confirm it.
- If
list-unreadreturns no messages but the current trigger clearly identifies the sender and request, you may still use that trigger context for this run. - Do not build your own polling or waiting loop inside the agent; let the CLI
listenmode handle continuous waiting.
Command behavior:
healthreturns JSON describing readiness and the current linked account name.list-unreadreturns JSON with unread inbound messages only from allowlisted numbers.list-recentreturns recent messages for the allowlisted number. Pass--phone <digits>to target the intended sender.sendsends a message only to an allowlisted number. Pass--phone <digits>so the reply always goes back to the intended sender.