open source · MIT · self-hosted

claudebot

Claude Code, from your phone.

$curl -fsSL claudebot.ve.ke/install.sh | bash
the itch

You live in Claude Code.
Then you walk away from your desk.

A build's running. Prod's on fire. An idea hits on the train. You want the real thing in your pocket — not a chatbot, the actual agent that edits your files and runs your tools.

the existing options

…all give up something.

Official Telegram plugin

Great & zero-config — but you're a peripheral on Anthropic's session loop. Fixed UX, can't add your own knobs.

claude-code-telegram

Runs on the Claude Agent SDK — exactly the layer you were trying to avoid. Couples you to a pre-1.0, fast-moving SDK.

Raw Anthropic API

Per-token bill, and it's not the real harness — no prompt cache, no telemetry, an abuse-filter magnet.

PTY / TUI scraping

Drive the interactive UI and screen-scrape ANSI. Brittle the moment the TUI changes. No structured events.

the insight

The harness is just a transport.

The real claude binary already speaks a headless stream-json protocol — the same transport the SDK uses, exposed on the CLI. Pipe text in, read JSON out.

Drive that directly and you get the real binary, on your own login, with you owning the whole conversation loop.

what it is

One warm claude per chat, over Telegram.

The real binary

The genuine claude — same tools, same login. Not the Agent SDK.

Your plan, $0 API

Rides your Pro/Max subscription. The OAuth token never leaves Claude Code.

You own the UX

Your bot process owns Telegram. Every knob is one message away.

the demo

Show, don't tell.

You message it like a coworker. It edits files, runs the suite, reports back — streaming, with photos & docs in, formatting out.

C
claudebot
● online · driving claude
ship the auth fix & run the tests
claudebotOn it — editing auth.py, running the suite…
claudebotDone. Fixed the token refresh race; 38 passed in 0.9s. Pushed to main.
/model opus
claudebotmodel set to opus · fresh session
how it works

It owns the loop.

Telegramyour phone
claudebotyour bot process
claude -p--output-format stream-json
your machinereal tools · your login

One persistent child per chat, kept warm. --resume across restarts. Replies stream back token-by-token. The token stays inside Claude Code.

the question everyone asks

“Is this allowed?”

The “no third-party harness” rule is about where the OAuth token goes — not at any non-Claude-Code client. claudebot never touches the token; it only pipes text into the genuine claude and reads JSON back.

  • Anthropic documents claude -p on subscription, ships claude setup-token, and gives it a dedicated credit.
  • The bright line: single-user, never extract the token, don't hammer 24/7.
  • Policy, not law — and the deck says so. Honesty is the pitch.
security posture

Treat it like a root shell.

By default Claude runs any tool, including Bash, without asking. So the defaults are paranoid — and that's a feature you can read:

  • Fail-closed allowlist · DM-only · empty = locked
  • Content-injection guard — attached/fetched content is data, not instructions
  • Secret hygiene — token stripped from the child env, state chmod 600
  • Bounded turn timeouts · one poller per host · smoke-gated updates
vs. the field

How it stacks up.

ApproachReal binaryNo API keyYou own UXAlways-alive
claudebot
Official pluginfixed
claude-code-telegramvia SDK
PTY scrapingbrittle
not a weekend hack

Built like it matters.

3
reference harnesses dissected before a line was written
20
security findings from a multi-agent audit — all fixed
54
tests, CI on py3.10–3.13, ruff-clean
bots per host — --instance, smoke-gated updates
the model

Free. MIT. No hosted version — on purpose.

It runs on your subscription, so there's nothing to host without sharing accounts. That's not a missing business model — it's why there's no per-token bill. The ask is a star and a sponsor, not a seat license.

try it

Claude Code,
from your phone.

$curl -fsSL claudebot.ve.ke/install.sh | bash

claudebot.ve.ke  ·  github.com/samuelkimanikamau/claudebot

1 / 13
claudebot · MIT
← → or space to navigate