Multimodal
Receive text, images, and audio. Reply with text and images. Audio transcription via OpenAI Whisper (optional).
AllosAgent is a self-hosted WhatsApp agent powered by Claude Code. No extra LLM API key. Runs on your machine. Multi-session. Multimodal.
Every WhatsApp bot needs the same plumbing: a webhook, a tunnel, a message queue, a model, a sender. And every model needs its own API key, billing, and rate limits.
AllosAgent plugs your WhatsApp into a Claude Code session running on your machine. The Claude Code CLI is the LLM — no extra API key. Self-chat by default. Multi-session when you need it. Multimodal in, multimodal out.
WhatsApp delivers your message to the API gateway (megaAPI by default, or any compatible backend).
Expose :3020 over HTTPS — localhost dev or self-hosted. Cloudflare Tunnel (Quick / named) by default; swap for ngrok, Tailscale Funnel, or your own reverse proxy.
webhook_server.py validates the phone whitelist and writes a JSONL line per session.
The Claude Code session reads each line via the Monitor tool, processes the message, and crafts a reply.
send_message.py sends the reply back through the gateway. Signature appended automatically. Loop guard built in.
Receive text, images, and audio. Reply with text and images. Audio transcription via OpenAI Whisper (optional).
One deployment can serve multiple WhatsApp instances. One Claude Code session per number.
Runs on your laptop, your VPS, your Raspberry Pi. Tokens never leave your machine. Your WhatsApp number is whitelisted at the webhook layer.
Run any LLM that plugs into the Claude Code harness — Claude (Sonnet/Opus), Kimi K2.5 Turbo, MiniMax 2.7, GLM 5, Qwen, and more. Same Monitor, same tools, same prompt; swap the brain without touching the agent.
python scripts/bootstrap.py runs the wizard, starts the webhook, opens the tunnel, registers the URL. Idempotent — re-run after every reboot.
Every line on GitHub. Contracts documented. Beads task graph. Built to be cloned and adapted.
$ git clone https://github.com/giovani-junior-dev/Allos.git allos
$ cd allos
$ python scripts/bootstrap.py
Wizard asks for your gateway base URL, instance, token, and WhatsApp number. Public URL printed at the end.
$ claude
Open it inside the allos directory. The Monitor tool inherits your working directory.
Read CLAUDE_PROMPT.md and run the step 2 prompt. SESSION: 1
Then send a WhatsApp message to your own number. AllosAgent replies within seconds.
Don't have Python, git, curl, or cloudflared yet? Open Claude Code in
an empty folder and paste the prompt in
INSTALL_PROMPT.md — Claude installs every dependency
(winget / brew / apt), clones the repo, and runs the bootstrap.
AllosAgent was built against
megaAPI,
but the host URL is a config field — not hardcoded. Any backend that
mirrors the contract in
docs/API_CONTRACT.md
drops in by changing one value.
To switch — even mid-project — re-run the wizard with
rm config.py && python -m whatsapp_agent.setup_config,
enter the new base URL, and run
python -m whatsapp_agent.update_webhooks.
Architecture, prerequisites, repo layout.
Zero-to-running on a fresh machine via Claude Code.
Slow path: gateway signup, named tunnel, multi-session.
The exact prompt that activates AllosAgent inside Claude Code.
Auth, endpoints, payloads. Required reading for clone authors.
Symptom → fix index. Cloudflared 404s, orphan monitors, signature loops.
docs/API_CONTRACT.md — same endpoints, same payloads, change one URL.CLAUDE.md and send_message.py.config.py is gitignored. The whitelist drops every message that isn't from your authorized number. The signature loop guard prevents echo replies. Tokens never leave your machine.CONTRIBUTING.md, pick an open bd ready ticket, open a PR. Beads tracks dependencies; merge once tests pass.MIT-licensed. Self-hosted. No telemetry. No newsletter.
Clone on GitHub