Skip to main content

Command & Control Bot — manage AI coding agents from Telegram via tmux

Project description

CCBot — Command & Control Bot

CI PyPI Downloads Python Typed License Ruff

Control AI coding agents from your phone. CCBot bridges Telegram to tmux — monitor output, respond to prompts, and manage sessions without touching your computer. Supports Claude Code, Codex CLI, and Gemini CLI.

Why CCBot?

AI coding agents run in your terminal. When you step away — commuting, on the couch, or just away from your desk — the session keeps working, but you lose visibility and control.

CCBot fixes this. The key insight: it operates on tmux, not any agent's SDK. Your agent process stays exactly where it is, in a tmux window on your machine. CCBot reads its output and sends keystrokes to it. This means:

  • Desktop to phone, mid-conversation — your agent is working on a refactor? Walk away and keep monitoring from Telegram
  • Phone back to desktop, anytimetmux attach and you're back in the terminal with full scrollback
  • Multiple sessions in parallel — Each Telegram topic maps to a separate tmux window, each can run a different agent

Other Telegram bots wrap agent SDKs to create isolated API sessions that can't be resumed in your terminal. CCBot is different — it's a thin control layer over tmux, so the terminal remains the source of truth.

How It Works

graph LR
  subgraph phone["📱 Telegram Group"]
    T1["💬 Topic: api"]
    T2["💬 Topic: ui"]
    T3["💬 Topic: docs"]
  end

  subgraph machine["🖥️ Your Machine — tmux"]
    W1["⚡ window @0<br>claude ↻ running"]
    W2["⚡ window @1<br>codex ↻ running"]
    W3["⚡ window @2<br>gemini ↻ running"]
  end

  T1 -- "text →" --> W1
  W1 -. "← responses" .-> T1
  T2 -- "text →" --> W2
  W2 -. "← responses" .-> T2
  T3 -- "text →" --> W3
  W3 -. "← responses" .-> T3

  style phone fill:#e8f4fd,stroke:#0088cc,stroke-width:2px,color:#333
  style machine fill:#f0faf0,stroke:#2ea44f,stroke-width:2px,color:#333
  style T1 fill:#fff,stroke:#0088cc,stroke-width:1px,color:#333
  style T2 fill:#fff,stroke:#0088cc,stroke-width:1px,color:#333
  style T3 fill:#fff,stroke:#0088cc,stroke-width:1px,color:#333
  style W1 fill:#fff,stroke:#2ea44f,stroke-width:1px,color:#333
  style W2 fill:#fff,stroke:#2ea44f,stroke-width:1px,color:#333
  style W3 fill:#fff,stroke:#2ea44f,stroke-width:1px,color:#333

Each Telegram Forum topic binds to one tmux window running an agent CLI. Messages you type in the topic are sent as keystrokes to the tmux pane; the agent's output is parsed from session transcripts and delivered back as Telegram messages.

Features

Session control

  • Send messages and /commands directly to your agent (/clear, /compact, /cost, etc.)
  • Interactive prompts (AskUserQuestion, ExitPlanMode, Permission) rendered as inline keyboards
  • Terminal screenshots — capture the current pane as a PNG image
  • Sessions dashboard (/sessions) — overview of all sessions with status and kill buttons

Real-time monitoring

  • Assistant responses, thinking content, tool use/result pairs, and command output
  • Live status line showing what the agent is currently doing
  • MarkdownV2 formatting with automatic plain text fallback

Session management

  • Directory browser for creating new sessions from Telegram
  • Auto-sync: create a tmux window manually and the bot auto-creates a matching topic
  • Fresh/Continue/Resume recovery when a session dies
  • Message history with paginated browsing (/history)
  • Persistent state — bindings and read offsets survive restarts

Multi-provider support

  • Claude Code (default), OpenAI Codex CLI, and Google Gemini CLI
  • Per-topic provider selection — different topics can use different agents simultaneously
  • Auto-detects provider from externally created tmux windows
  • Provider-aware recovery (Continue/Resume buttons adapt to each provider's capabilities)

Extensibility

  • Auto-discovers agent skills and custom commands into the Telegram menu
  • Multi-instance support — run separate bots per Telegram group on the same machine
  • Configurable via environment variables

Quick Start

Prerequisites

  • Python 3.14+
  • tmux — installed and in PATH
  • At least one agent CLIclaude (default), codex, or gemini installed and authenticated

Install

# Recommended
uv tool install ccbot

# Alternatives
pipx install ccbot                   # pipx
brew install alexei-led/tap/ccbot    # Homebrew (macOS)

Configure

  1. Create a Telegram bot via @BotFather
  2. Enable Topics in your bot (BotFather > Bot Settings > Groups > Topics in Groups > Enable)
  3. Add the bot to a Telegram group that has Topics enabled
  4. Create ~/.ccbot/.env:
TELEGRAM_BOT_TOKEN=your_bot_token_here
ALLOWED_USERS=your_telegram_user_id

Get your user ID from @userinfobot on Telegram.

Install hooks (Claude Code only)

ccbot hook --install

This registers 5 Claude Code hooks (SessionStart, Notification, Stop, SubagentStart, SubagentStop) for automatic session tracking, instant interactive UI detection, and real-time status updates. Not needed for Codex or Gemini — those providers are auto-detected from running processes.

Run

ccbot

Open your Telegram group, create a new topic, send a message — a directory browser appears. Pick a project directory, choose your agent (Claude, Codex, or Gemini), and you're connected.

Documentation

See docs/guides.md for CLI reference, configuration, upgrading, multi-instance setup, session recovery, and more.

Acknowledgments

CCBot started as a fork of ccbot by six-ddc, who created the original Telegram-to-Claude-Code bridge. This project has since been rewritten and developed independently with multi-provider support, topic-based architecture, interactive UI, and a comprehensive test suite. Thanks to six-ddc for the initial idea and implementation.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ccbot-1.3.2.tar.gz (15.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ccbot-1.3.2-py3-none-any.whl (15.4 MB view details)

Uploaded Python 3

File details

Details for the file ccbot-1.3.2.tar.gz.

File metadata

  • Download URL: ccbot-1.3.2.tar.gz
  • Upload date:
  • Size: 15.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ccbot-1.3.2.tar.gz
Algorithm Hash digest
SHA256 ef1050d9f8bd195e4016692d6525090d143a674b19c69487eb1e0a7530fafac1
MD5 3ae9a66852ebb27e76064bd7d69aa380
BLAKE2b-256 df59be4f3edde6f120d7db2ecc065ee6e782a59ff91d495dc864502027efdaa0

See more details on using hashes here.

Provenance

The following attestation bundles were made for ccbot-1.3.2.tar.gz:

Publisher: release.yml on alexei-led/ccbot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ccbot-1.3.2-py3-none-any.whl.

File metadata

  • Download URL: ccbot-1.3.2-py3-none-any.whl
  • Upload date:
  • Size: 15.4 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ccbot-1.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d8155f9f897e665eaf29c59567e1402361185f415512c71e9317cac452fbe626
MD5 c736b4a6c1af1b25560cea5470bd4ba9
BLAKE2b-256 ed3204ff71fbe04acd7d412e3e09de48c21bd18c9fa1018c90751871091bb686

See more details on using hashes here.

Provenance

The following attestation bundles were made for ccbot-1.3.2-py3-none-any.whl:

Publisher: release.yml on alexei-led/ccbot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page