Two SDKs, one wire
Pick Claude or Gemini. Switch any time with bun run provider. Automatic ClaudeβGemini failover when Claude is over-quota. The hardest 80% of building an agent β reasoning loop, tools, context β is delegated to the SDK so we own ~5k lines of glue.
Multi-channel
Telegram, Slack (Socket Mode), and WhatsApp (Baileys, QR auth) baked in. Enable any combination. Images go through vision; WhatsApp voice notes are transcribed locally and the agent can reply in synthesized speech.
Personal, hardened
Per-thread message serialization, sandboxed allowed_paths, a Bash denylist, inbound rate limits, daily USD budget cap, startup circuit-breaker, daily backups. Designed for one person; built like it runs unattended.
From clone to a running bot in ~2 minutes
Setup
bash setup.sh
Interactive: pick provider, log in (auto-detected if you already are), wire up channels.
Link WhatsApp (optional)
# scan the QR shown in # the setup flow # from your phone: # Settings β Linked devices
Or set TELEGRAM_BOT_TOKEN / Slack tokens β any combination of channels.
Start
bun run start
Or install as a launchd service: bun run service install. Message your bot.
Why it's small
The whole codebase is ~5k lines of TypeScript. The hardest parts of building an agent β the reasoning loop, context compaction, the built-in tools (shell, read/write/edit, glob, grep, web fetch/search), model selection, retry logic β are delegated to the Claude Agent SDK or the Gemini CLI core.
We own the chat-side glue: channel adapters, SQLite, an MCP server with channel-specific tools (send_message, send_file, speak, Gmail/Calendar/Drive/β¦), and ~5 files of context engineering.
When Anthropic or Google ship a better model or improved tool use, we get it for free.
Read the architecture βββββββββββββββββββββ ββββββββββββββββββββββββββββ
β channel adapter β text ββΆ β handleMessage β
β Β· telegram β β Β· persist to sqlite β
β Β· slack β β Β· build prompt β
β Β· whatsapp β audio?βΆ β Β· gemini / claude SDK β
ββββββββββββββββββββ whisper β Β· send reply β
β² :9000 ββββββββββββββββββββββββββββ
β β
β speak() β β MCP
β kokoro β
β :9001 βΌ
ββ router.send βββ outbox drain ββ