v0.4.4Telegram remote-control for Claude Code

Page Claude Code
from anywhere.

Every state change, every permission prompt, every completion — mirrored to Telegram in real time. Reply to inject prompts. Approve commands without touching your laptop.

$curl -fsSL aipager.run/install | sh
MIT licensedPython · pipx · brewStays on your machine
~/work/dev — claude
>
? for shortcuts⏵⏵ accept edits on
9:41
5G
a
aipager · devbot · online
Today
Message
Live demo

Pick a moment. Watch it cross over.

Every Claude Code hook becomes a Telegram event, and every Telegram reply lands back in your session. Try one — or type your own prompt into the chat.

Scenarios

Yours

Type anything into the Telegram input on the right — it'll inject as a prompt and flow into the terminal.

dev — claudelive
>
? for shortcuts⏵⏵ accept edits on
9:41
5G
a
aipager · devbot · online
Today
Multi-session

Run a whole team of agents.
From one chat.

Launch parallel Claude sessions with /new, each with its own context and model. Tap a name to switch. Prefix any message with the session name to DM it without switching.

/new jim/jim ship the docstap john to switch/kill tim
9:41
5G
a
aipager · jimbusy
Today
switched → jim
⚙️jim · Editing
Edit:src/server/handlers.ts:142
Edit:src/server/handlers.ts:201
Message
jim
john
tim
⏹ stop
☠ kill
Templates
Commands
How it works

No scraping. No cloud.
Just hooks.

aipager is a small Python daemon on your machine. It hooks into Claude Code's native event API, runs your sessions under dtach for persistence, and pushes events to a Telegram bot you own.

01 — INTERCEPT

Native Claude Code hooks

When Claude reads a file, edits, runs a tool, or asks permission, Claude Code fires a hook. aipager listens. Nothing is scraped from your terminal.

PreToolUse → relay
PostToolUse → status
Notification → permission
Stop → idle
02 — PERSIST

Sessions survive your laptop closing

Every session runs inside dtach — a tiny terminal multiplexer. SSH drops, lid closes, network blinks: the session keeps running. You re-attach instantly.

runtime dtach socket
recover aipager attach
model sonnet · opus · haiku
03 — RELAY

Your bot. Your chat. Your tokens.

You create the bot with @BotFather, paste the token, pick a chat ID. aipager talks to Telegram from your machine. Code, prompts, and outputs never touch a third party.

transport Telegram Bot API
auth your bot token
observers read-only mirrors

Reply-to-inject

Reply to any bot message and your text becomes the next prompt. Steer the session without opening your laptop.

Inline permission keyboard

Dangerous commands surface as Allow / Deny buttons. Decide once, the session resumes.

Persistent reply keyboard

Three tiers — sessions, commands, models — always one tap away at the bottom of the chat.

Smart notifications

Context warnings, stall alerts, completion pings — only what matters, throttled to not spam.

Templates

Save prompts you reuse — code reviews, commit messages, test diffs — and fire them with a tap.

Observer bots

Add a second read-only bot to a team chat or log channel. Same events, separate audience.

Install

From zero to your pocket
in three commands.

Python ≥ 3.10. macOS, Linux, WSL. The installer fetches dtach for you if it isn't present.

$curl -fsSL aipager.run/install | sh

One-shot installer. Detects your platform and uses the best available method (uv → pipx → brew). Pulls dtach if missing.

Need a different shell? fish and zsh users can aipager completion install after the first run.

Already running? aipager update picks up the latest release without touching your config.

01 — CONFIGUREaipager config

Interactive wizard. Paste your bot token, pick a chat, aipager patches ~/.claude/settings.json for you.

02 — STARTaipager start

Daemon launches. Telegram says hello. Open Claude Code and run normally — every event mirrors.

03 — RUN AS A SERVICEaipager service install

Optional. Adds a launchd / systemd unit so the daemon comes back after a reboot.

FAQ

Common questions.

Claude's mobile and web apps connect to Anthropic's hosted assistant. aipager mirrors a Claude Code session running on your own machine — with your repo, your tools, your environment. It's not a chat client; it's a remote control for the CLI.
No. The daemon runs locally and talks directly to the Telegram Bot API using your bot token. File contents, prompts, and outputs are only sent to the chat IDs you configure. There is no aipager server in the middle.
dtach is a tiny terminal-multiplexer (~30KB). It lets Claude Code keep running after you close your terminal or lose SSH, so a Telegram approval an hour later still goes to a live session. The installer fetches it for you if you don't have it.
Telegram bots are dead-simple to spin up (one BotFather conversation), support inline keyboards, work everywhere, and don't require a workspace or org. Slack and Discord support are tracked in the issues — PRs welcome.
Yes. Add an observer bot to a group chat as a read-only mirror — your teammates see status and outputs without being able to inject prompts. Or create separate bots for separate humans.
Whatever Claude Code supports — currently sonnet, opus, haiku, and the opusplan alias. Switch per-session from the Models tier of the persistent keyboard.
The keyboard has ⏹ stop (graceful) and ☠ kill (hard) buttons, plus /kill <name> from any chat. Sessions also surface a stall warning if they go silent for too long.
Get started

Your terminal, in your pocket. In under a minute.

$curl -fsSL aipager.run/install | sh