{"id":50767589,"url":"https://github.com/arktnld/claude-code-whatsapp","last_synced_at":"2026-06-11T15:02:03.508Z","repository":{"id":355219373,"uuid":"1227246278","full_name":"arktnld/claude-code-whatsapp","owner":"arktnld","description":"WhatsApp bot for remote access to Claude Code","archived":false,"fork":false,"pushed_at":"2026-05-02T12:57:06.000Z","size":98,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-02T14:29:07.362Z","etag":null,"topics":["ai","ai-agent","anthropic","automation","chatbot","claude","claude-ai","claude-code","coding-assistant","developer-tools","golang","llm","python","remote-development","whatsapp","whatsapp-bot","whatsmeow"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arktnld.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-02T12:16:54.000Z","updated_at":"2026-05-02T12:57:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/arktnld/claude-code-whatsapp","commit_stats":null,"previous_names":["arktnld/claude-code-whatsapp"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/arktnld/claude-code-whatsapp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arktnld%2Fclaude-code-whatsapp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arktnld%2Fclaude-code-whatsapp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arktnld%2Fclaude-code-whatsapp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arktnld%2Fclaude-code-whatsapp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arktnld","download_url":"https://codeload.github.com/arktnld/claude-code-whatsapp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arktnld%2Fclaude-code-whatsapp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34204197,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-agent","anthropic","automation","chatbot","claude","claude-ai","claude-code","coding-assistant","developer-tools","golang","llm","python","remote-development","whatsapp","whatsapp-bot","whatsmeow"],"created_at":"2026-06-11T15:02:02.950Z","updated_at":"2026-06-11T15:02:03.500Z","avatar_url":"https://github.com/arktnld.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Claude Code WhatsApp\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Go 1.22+](https://img.shields.io/badge/Go-1.22+-00ADD8?logo=go\u0026logoColor=white)](https://go.dev/)\n[![Python 3.11+](https://img.shields.io/badge/Python-3.11+-3776AB?logo=python\u0026logoColor=white)](https://www.python.org/)\n[![Release](https://img.shields.io/badge/release-v1.0.0-blue)](https://github.com/arktnld/claude-code-whatsapp/releases)\n\nWhatsApp bot that connects to [Claude Code](https://claude.ai/code). Send a message and Claude reads, edits, and runs code in your projects.\n\n## How it works\n\nTwo processes running together:\n\n```\nYour WhatsApp  \u003c--\u003e  Bridge (Go)  \u003c--\u003e  Core (Python)  \u003c--\u003e  Claude Code\n                     whatsmeow          claude-agent-sdk\n                     port 8080          sessions/storage\n```\n\n- **Bridge** — connects to WhatsApp using [whatsmeow](https://github.com/tulir/whatsmeow). Receives and sends messages via HTTP/WebSocket.\n- **Core** — receives messages from the bridge, sends them to Claude Code SDK, and returns the response.\n\nOnly private (1:1) chats from phone numbers listed in `ALLOWED_PHONES` are processed. Group messages, broadcasts, and unknown numbers are silently ignored.\n\n## Requirements\n\n- **Go 1.22+** — to build the bridge\n- **Python 3.11+** with Poetry\n- **Claude Code CLI** — `npm install -g @anthropic-ai/claude-code` (must be logged in via `claude login`)\n- **A dedicated WhatsApp number** — don't use your personal number (ban risk)\n\n## Setup\n\n### 1. Clone and configure\n\n```bash\ngit clone https://github.com/arktnld/claude-code-whatsapp.git\ncd claude-code-whatsapp\n\ncp env.example .env\n```\n\nEdit `.env`:\n\n```bash\n# Phone numbers allowed to use the bot (comma-separated)\nALLOWED_PHONES=5511999999999\n\n# Root folder for your projects — Claude can only access files inside it\nAPPROVED_DIRECTORY=/home/user/projects\n```\n\n### 2. Install dependencies\n\n```bash\n# Python\nmake dev\n\n# Go (builds the bridge binary)\nmake build-bridge\n```\n\n### 3. Run the bridge (first terminal)\n\n```bash\nmake run-bridge\n```\n\nOn first run, a QR code appears in the terminal. On the dedicated phone:\n- **Settings \u003e Linked Devices \u003e Link a Device**\n- Scan the QR code\n\nAfter linking, the session is saved in `bridge/whatsapp.db`. Next time it connects automatically.\n\n### 4. Run the core (second terminal)\n\n```bash\nmake run-core\n```\n\nDone. Send a message to the linked number from a phone listed in `ALLOWED_PHONES`.\n\n## Usage\n\nSend any text message and Claude responds directly:\n\n```\nYou:  look at main.go and tell me what it does\nBot:  Working...\nBot:  main.go implements a WhatsApp bridge with 3 parts...\n\nYou:  add a /metrics endpoint that returns uptime\nBot:  Working...\nBot:  Added the endpoint. Here are the changes: ...\n\nYou:  run go build and check if it compiles\nBot:  Working...\nBot:  Compiled without errors.\n```\n\nAlso accepts **photos** (Claude Vision) and **documents** (reads the content).\n\n### Commands\n\nSend as a regular message (WhatsApp has no native command system):\n\n| Command | What it does |\n|---------|-------------|\n| `/start` | Shows welcome message and current directory |\n| `/new` | Resets session — Claude forgets previous context |\n| `/status` | Shows directory and active session info |\n| `/repo` | Lists projects in the approved directory |\n| `/repo name` | Switches to a different project |\n| `/stop` | Interrupts a running request |\n\n### Switching projects\n\n```\nYou:  /repo\nBot:  *Repos*\n      [git] api-backend/\n      [git] frontend/\n      [dir] scripts/\n      Use: /repo \u003cname\u003e\n\nYou:  /repo api-backend\nBot:  Switched to api-backend/ (git)\n\nYou:  any failing tests?\nBot:  Working...\nBot:  Ran pytest. 2 tests failing in test_auth.py...\n```\n\n## Configuration\n\nSee `env.example` for all variables. The most important ones:\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `ALLOWED_PHONES` | Authorized phone numbers (comma-separated) | required |\n| `APPROVED_DIRECTORY` | Project root folder | required |\n| `WHATSAPP_BRIDGE_URL` | Bridge HTTP URL | `http://localhost:8080` |\n| `CLAUDE_MAX_TURNS` | Max turns per conversation | `25` |\n| `CLAUDE_TIMEOUT_SECONDS` | Timeout per request | `300` |\n| `DEBUG` | Verbose logging | `false` |\n\n## Security\n\n- **Phone whitelist** — only numbers in `ALLOWED_PHONES` can interact. Unknown numbers are silently dropped (no response sent).\n- **Group/broadcast blocking** — the bridge ignores all group and broadcast messages at the protocol level.\n- **Directory sandbox** — Claude can only access files inside `APPROVED_DIRECTORY`.\n- **Dedicated number** — use a separate WhatsApp number, not your personal one.\n\n## Important notes\n\n- **Ban risk**: WhatsApp has no official bot API. The whatsmeow library reverse-engineers the protocol. Use a dedicated number, don't spam, keep delays between messages.\n- **Session expiry**: if WhatsApp disconnects, the bridge reconnects automatically. If it fails, delete `bridge/whatsapp.db` and scan the QR code again.\n\n## Credits\n\n- [claude-code-telegram](https://github.com/RichardAtCT/claude-code-telegram) — original project this is based on (MIT License)\n- [whatsmeow](https://github.com/tulir/whatsmeow) — Go WhatsApp Web API library\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farktnld%2Fclaude-code-whatsapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farktnld%2Fclaude-code-whatsapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farktnld%2Fclaude-code-whatsapp/lists"}