Remote control for Claude Code via Telegram. Handle permission prompts and idle states from your phone.
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Claude Code │────▶│ Telegram Bot │────▶│ Your Phone │
│ (in tmux) │◀────│ (on your Mac) │◀────│ (click button) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
- Message @BotFather
- Send
/newbot, follow prompts - Save the bot token
Send any message to your bot, then:
curl "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates"Find "chat":{"id": YOUR_CHAT_ID} in the response.
cp .env.example .env
# Edit .env with your valuespnpm install
pnpm dev # Development with hot reloadAdd to ~/.zshrc:
alias cc='tmux new-session -A -s claude -c "$(pwd)" claude'Now cc command automatically runs Claude Code in tmux.
| Command | Action |
|---|---|
/y |
Approve (send "y" + Enter) |
/n |
Deny (send "n" + Enter) |
/ping |
Check if bot is running |
| Any text | Send as input to terminal |
When receiving a permission request, tap:
- Approve - sends
y+ Enter - Deny - sends
n+ Enter - Skip - sends
s+ Enter - Escape - sends Escape key
# In your hook script
pnpm --prefix /path/to/claude-bot send "Permission required: $MESSAGE"Update ~/.claude/settings.json to trigger notifications:
{
"hooks": {
"PermissionRequest": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "pnpm --prefix /path/to/claude-bot send \"Claude needs permission\""
}
]
}
]
}
}| Script | Description |
|---|---|
pnpm dev |
Run with hot reload |
pnpm build |
Compile TypeScript |
pnpm start |
Run compiled version |
pnpm send |
Send message with buttons |