Claude Code,
in your pocket.
aipager mirrors your Claude Code sessions to Telegram — watch progress live, approve permissions, send the next prompt from anywhere. It runs on your machine. Nothing else in the middle.
When Claude asks, you tap.
Claude Code's multiple-choice questions land in Telegram as real buttons — one per option, checkboxes where the question allows several. Decisions stop waiting for you to get back to the desk.
Your leash, your length.
Every risky tool call waits for your tap — nothing runs behind your back.
Switch per session, any time — /perms in chat or one tap in the Mini App.
Run a fleet, not a window.
Sessions are first-class: each has its own status, model, working directory and cost. Start one in chat with /new, or from the Mini App dashboard the daemon serves right inside Telegram — same actions in both.
/status/resume/rename/diff/killOn by default (aipager miniapp status) — every request verified against Telegram's initData signature.
Small daemon, deep toolbox.
Keep talking — it queues
Messages reach Claude immediately, mid-turn included — exactly like typing into the terminal. Send five; each gets picked up at a natural boundary.
Voice notes work
Transcribed locally with Whisper and injected as your next prompt. Audio never leaves the machine.
Review the diff
/diffin chat, or the Mini App's viewer for every Write and Edit.
Drop files in
Send a file to the chat — it lands in the session's workspace and Claude gets the path. Screenshots, logs, CSVs.
Make the keyboard yours
Templates, commands and model switches — override any of it withkeyboard.json.
Bring the team
Group mode with per-user roles: every message runs with its sender's permissions, never whoever drove last. Denied tools are auto-rejected, and every decision is audited:
Tune the feed
/settings — message layout, formatting and language. Stall warnings and context alerts nudge you before a session needs rescuing.
A small daemon. No cloud.
Hooks, not scraping
Claude Code fires a hook at every step — a prompt picked up, a tool about to run, a turn finished. aipager listens on a local socket and turns each one into a Telegram update, live.
Sessions that survive
Every session runs under dtach, a tiny terminal multiplexer. Close the laptop, lose SSH — the session keeps working, and Telegram keeps you attached to it.
Nothing in the middle
The daemon talks straight to the Telegram Bot API with your own bot token. Code and prompts never touch a third-party server, and every approval lands in a local audit log.
Want the deep dive? Architecture, the full hook reference, and the security model are in the docs →
Three commands. That's the setup.
Install
Detects your platform and picks the best installer (uv → pipx → brew). Pulls dtach if it's missing.
Configure
A wizard asks for a bot token (one @BotFather chat away) and your Telegram chat, then wires the Claude Code hooks for you.
Start
Message your bot on Telegram. You're live — create a session and walk away from the desk.
uv tool install aipagerpipx install aipagerbrew install dev-aly3n/aipager/aipagerCommon questions.
How is this different from Claude's mobile apps?
Claude's apps talk to Anthropic's hosted assistant. aipager mirrors a Claude Code session running on your own machine — your repo, your tools, your environment. It's not a chat client; it's a remote control for the CLI.
Does my code leave my machine?
No. The daemon runs locally and talks directly to the Telegram Bot API with your own bot token. Prompts, file contents, and outputs only go to the chats you configure — there is no aipager server in the middle.
What's dtach and why do I need it?
A ~30 KB terminal multiplexer. It keeps Claude Code alive after your terminal closes or SSH drops, so an approval you send an hour later still reaches a live session. The installer fetches it if you don't have it.
Can my team use it?
Yes — team mode puts the bot in a group chat with per-user roles (owner, admin, user, read-only). Every message runs with its sender's permissions, rule-denied tools are auto-rejected, and every Allow or Deny is audited in-chat and on disk.
What if Claude goes off the rails while I'm away?
Permission prompts land as inline Allow / Deny buttons, /stop interrupts the current turn (and discards anything queued), and /kill ends a session outright. Buttons from an already-finished task refuse politely instead of hitting whatever runs now.
Stop babysitting the terminal.
Two minutes from install to your first session mirrored in Telegram.