One assistant. Every subscription.
Talk to one assistant in Telegram. Bring the Claude, Grok, Codex, and Antigravity subscriptions you already pay for. Self-hosted, MIT.
Today
keep an eye on the deploy and tell me if anything breaks
session deploy-watch started
deploy-watch: health 200, replica caught up.
also ship the CSS if tests are green
landing-css is waiting on you — buttons below.
-
deploy-watchrunning
health 200, replica caught up
-
landing-csswaiting
Ship the CSS change to Pages?
-
digestidle
waiting on you
One DM is the assistant.
Plain text in the bot’s 1:1 chat is a turn of the orchestrator. It has a 60-second cap; longer work becomes a session. If the cap fires and the orchestrator has not spawned, ccc starts the session itself. /session skips the orchestrator.
Workers report only to the orchestrator. You get a short summary in the DM, not the transcript. If the orchestrator cannot post it, listen posts a short fallback — never only session done.
landing-css asks: Ship the CSS change to Pages?
1. Ship it
2. Not yet
Reply to the question in the DM.
The ping is the answer.
Silent progress
While the orchestrator runs, one progress message is edited in place with notifications off. When the turn ends, that message is deleted and the reply is the ping you get.
Owner vault
/secret add captures the next DM before any session sees it. Values never come back. Sessions inject via env or stdin; there is no secrets_get.
Watches cost nothing until they fire
A watch re-runs a command and wakes the session only when stdout changes. Polling with a wakeup is a full turn every time; don’t.
Every subscription. One place.
Add the Claude, Grok, Antigravity, and Codex accounts you already pay for. A session’s turns pick a healthy account of that engine. Failover stays inside the engine.
- Claude Codedefault
- Grok Buildgrok
- Antigravityagy
- Codexcodex
Headless bootstrap.
BotFather token, your Telegram user id, then install. ccc never opens a browser on the machine. Login URLs go to Telegram.
ccc config set bot_token <from @BotFather>
ccc config set chat_id <your Telegram user id>
ccc install
DM the bot. That chat is the orchestrator. Full path in the README.