RichardAtCT / claude-code-telegram
- воскресенье, 22 февраля 2026 г. в 00:00:03
A powerful Telegram bot that provides remote access to Claude Code, enabling developers to interact with their projects from anywhere with full AI assistance and session persistence.
A Telegram bot that gives you remote access to Claude Code. Chat naturally with Claude about your projects from anywhere -- no terminal commands needed.
This bot connects Telegram to Claude Code, providing a conversational AI interface for your codebase:
You: Can you help me add error handling to src/api.py?
Bot: I'll analyze src/api.py and add error handling...
[Claude reads your code, suggests improvements, and can apply changes directly]
You: Looks good. Now run the tests to make sure nothing broke.
Bot: Running pytest...
All 47 tests passed. The error handling changes are working correctly.
Choose your preferred method:
# Using uv (recommended — installs in an isolated environment)
uv tool install git+https://github.com/RichardAtCT/claude-code-telegram@v1.3.0
# Or using pip
pip install git+https://github.com/RichardAtCT/claude-code-telegram@v1.3.0
# Track the latest stable release
pip install git+https://github.com/RichardAtCT/claude-code-telegram@latestgit clone https://github.com/RichardAtCT/claude-code-telegram.git
cd claude-code-telegram
make dev # requires PoetryNote: Always install from a tagged release (not
main) for stability. See Releases for available versions.
cp .env.example .env
# Edit .env with your settings:Minimum required:
TELEGRAM_BOT_TOKEN=1234567890:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
TELEGRAM_BOT_USERNAME=my_claude_bot
APPROVED_DIRECTORY=/Users/yourname/projects
ALLOWED_USERS=123456789 # Your Telegram user IDmake run # Production
make run-debug # With debug loggingMessage your bot on Telegram to get started.
Detailed setup: See docs/setup.md for Claude authentication options and troubleshooting.
The bot supports two interaction modes:
The default conversational mode. Just talk to Claude naturally -- no special commands required.
Commands: /start, /new, /status, /verbose, /repo
If ENABLE_PROJECT_THREADS=true: /sync_threads
You: What files are in this project?
Bot: Working... (3s)
📖 Read
📂 LS
💬 Let me describe the project structure
Bot: [Claude describes the project structure]
You: Add a retry decorator to the HTTP client
Bot: Working... (8s)
📖 Read: http_client.py
💬 I'll add a retry decorator with exponential backoff
✏️ Edit: http_client.py
💻 Bash: poetry run pytest tests/ -v
Bot: [Claude shows the changes and test results]
You: /verbose 0
Bot: Verbosity set to 0 (quiet)
Use /verbose 0|1|2 to control how much background activity is shown:
| Level | Shows |
|---|---|
| 0 (quiet) | Final response only (typing indicator stays active) |
| 1 (normal, default) | Tool names + reasoning snippets in real-time |
| 2 (detailed) | Tool names with inputs + longer reasoning text |
Claude Code already knows how to use gh CLI and git. Authenticate on your server with gh auth login, then work with repos conversationally:
You: List my repos related to monitoring
Bot: [Claude runs gh repo list, shows results]
You: Clone the uptime one
Bot: [Claude runs gh repo clone, clones into workspace]
You: /repo
Bot: 📦 uptime-monitor/ ◀
📁 other-project/
You: Show me the open issues
Bot: [Claude runs gh issue list]
You: Create a fix branch and push it
Bot: [Claude creates branch, commits, pushes]
Use /repo to list cloned repos in your workspace, or /repo <name> to switch directories (sessions auto-resume).
Set AGENTIC_MODE=false to enable the full 13-command terminal-like interface with directory navigation, inline keyboards, quick actions, git integration, and session export.
Commands: /start, /help, /new, /continue, /end, /status, /cd, /ls, /pwd, /projects, /export, /actions, /git
If ENABLE_PROJECT_THREADS=true: /sync_threads
You: /cd my-web-app
Bot: Directory changed to my-web-app/
You: /ls
Bot: src/ tests/ package.json README.md
You: /actions
Bot: [Run Tests] [Install Deps] [Format Code] [Run Linter]
Beyond direct chat, the bot can respond to external triggers:
Enable with ENABLE_API_SERVER=true and ENABLE_SCHEDULER=true. See docs/setup.md for configuration.
Conversational agentic mode (default) with natural language interaction
Classic terminal-like mode with 13 commands and inline keyboards
Full Claude Code integration with SDK (primary) and CLI (fallback)
Automatic session persistence per user/project directory
Multi-layer authentication (whitelist + optional token-based)
Rate limiting with token bucket algorithm
Directory sandboxing with path traversal prevention
File upload handling with archive extraction
Image/screenshot upload with analysis
Git integration with safe repository operations
Quick actions system with context-aware buttons
Session export in Markdown, HTML, and JSON formats
SQLite persistence with migrations
Usage and cost tracking
Audit logging and security event tracking
Event bus for decoupled message routing
Webhook API server (GitHub HMAC-SHA256, generic Bearer token auth)
Job scheduler with cron expressions and persistent storage
Notification service with per-chat rate limiting
Tunable verbose output showing Claude's tool usage and reasoning in real-time
Persistent typing indicator so users always know the bot is working
16 configurable tools with allowlist/disallowlist control (see docs/tools.md)
TELEGRAM_BOT_TOKEN=... # From @BotFather
TELEGRAM_BOT_USERNAME=... # Your bot's username
APPROVED_DIRECTORY=... # Base directory for project access
ALLOWED_USERS=123456789 # Comma-separated Telegram user IDs# Claude
ANTHROPIC_API_KEY=sk-ant-... # API key (optional if using CLI auth)
CLAUDE_MAX_COST_PER_USER=10.0 # Spending limit per user (USD)
CLAUDE_TIMEOUT_SECONDS=300 # Operation timeout
# Mode
AGENTIC_MODE=true # Agentic (default) or classic mode
VERBOSE_LEVEL=1 # 0=quiet, 1=normal (default), 2=detailed
# Rate Limiting
RATE_LIMIT_REQUESTS=10 # Requests per window
RATE_LIMIT_WINDOW=60 # Window in seconds
# Features (classic mode)
ENABLE_GIT_INTEGRATION=true
ENABLE_FILE_UPLOADS=true
ENABLE_QUICK_ACTIONS=true# Webhook API Server
ENABLE_API_SERVER=false # Enable FastAPI webhook server
API_SERVER_PORT=8080 # Server port
# Webhook Authentication
GITHUB_WEBHOOK_SECRET=... # GitHub HMAC-SHA256 secret
WEBHOOK_API_SECRET=... # Bearer token for generic providers
# Scheduler
ENABLE_SCHEDULER=false # Enable cron job scheduler
# Notifications
NOTIFICATION_CHAT_IDS=123,456 # Default chat IDs for proactive notifications# Enable strict topic routing by project
ENABLE_PROJECT_THREADS=true
# Mode: private (default) or group
PROJECT_THREADS_MODE=private
# YAML registry file (see config/projects.example.yaml)
PROJECTS_CONFIG_PATH=config/projects.yaml
# Required only when PROJECT_THREADS_MODE=group
PROJECT_THREADS_CHAT_ID=-1001234567890
# Minimum delay (seconds) between Telegram API calls during topic sync
# Set 0 to disable pacing
PROJECT_THREADS_SYNC_ACTION_INTERVAL_SECONDS=1.1In strict mode, only /start and /sync_threads work outside mapped project topics.
In private mode, /start auto-syncs project topics for your private bot chat.
To use topics with your bot, enable them in BotFather:
Bot Settings -> Threaded mode.
Full reference: See docs/configuration.md and
.env.example.
Message @userinfobot on Telegram -- it will reply with your user ID number.
Bot doesn't respond:
TELEGRAM_BOT_TOKEN is correctALLOWED_USERSmake run-debugClaude integration not working:
claude auth status or verify ANTHROPIC_API_KEYclaude --version and claude auth statusCLAUDE_ALLOWED_TOOLS includes necessary tools (see docs/tools.md for the full reference)High usage costs:
CLAUDE_MAX_COST_PER_USER to set spending limits/statusThis bot implements defense-in-depth security:
See SECURITY.md for details.
make dev # Install all dependencies
make test # Run tests with coverage
make lint # Black + isort + flake8 + mypy
make format # Auto-format code
make run-debug # Run with debug loggingThe version is defined once in pyproject.toml and read at runtime via importlib.metadata. To cut a release:
make bump-patch # 1.2.0 -> 1.2.1 (bug fixes)
make bump-minor # 1.2.0 -> 1.3.0 (new features)
make bump-major # 1.2.0 -> 2.0.0 (breaking changes)Each command commits, tags, and pushes automatically, triggering CI tests and a GitHub Release with auto-generated notes.
git checkout -b feature/amazing-featuremake test && make lintCode standards: Python 3.11+, Black formatting (88 chars), type hints required, pytest with >85% coverage.
MIT License -- see LICENSE.