WhatsApp channel for Claude Code — messaging bridge using Baileys with built-in access control
Four tools with complete input schemas and descriptions. Naming is clear and action-oriented (reply, react, download_attachment, edit_message). Descriptions are adequate (80-180 chars) but lack explicit guidance on when to use each tool vs. alternatives. Parameter descriptions are present but sparse, most lack format constraints, ranges, or examples. No output schemas documented. Security gate (assertAllowedChat) is implemented but not surfaced in tool descriptions. Error handling is basic, no recovery guidance for LLMs.
Download a media attachment from a WhatsApp message to the local inbox. Use when the inbound <channel> meta shows attachment_file_id. Returns the local file path ready to Read.
Edit a message Claude previously sent. Useful for interim progress updates. Edits don't trigger push notifications — send a new reply when a long task completes so the user's device pings.
Add an emoji reaction to a WhatsApp message. Requires the message to be in recent history.
Reply on WhatsApp. Pass chat_id from the inbound message. Optionally pass reply_to (message_id) for threading, and files (absolute paths) to attach images or documents.
No output schemas documented. LLMs cannot infer what fields are returned or plan downstream operations. reply/react/edit_message/download_attachment all lack return type documentation.
Parameter descriptions lack format constraints and ranges. 'emoji' has no guidance on valid emoji format. 'files' lacks clarity on supported MIME types beyond 'images or documents'. 'text' has no length limit stated.
Error handling provides no recovery guidance. assertAllowedChat throws 'chat not allowlisted' but does not tell the LLM how to resolve (e.g., 'add via /whatsapp:access'). No categorization of retryable vs. fatal errors.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Tool descriptions do not explain when to use each tool vs. alternatives. 'reply' vs. 'edit_message' distinction is unclear, when should an LLM choose edit over a new reply? No guidance on prerequisites (e.g., 'message must be in recent history' for react).
Security gate (assertAllowedChat) is enforced in code but not documented in tool descriptions. LLMs are unaware that calls may fail due to access control, preventing graceful error handling.