Skip to main content

Telegram remote-control daemon for Claude Code CLI sessions running in dtach

Project description

aipager

Telegram remote-control for Claude Code CLI sessions. Run Claude inside a detached terminal (dtach), drive it from your phone — read responses, send prompts, approve permission requests, switch sessions — without an SSH session staying open.

Install

Linux or macOS, any architecture. dtach is installed automatically via the dtach-bin dependency — no separate system package needed.

One-line install (recommended)

curl -fsSL https://raw.githubusercontent.com/dev-aly3n/aipager/main/install.sh | sh

This auto-detects uv / pipx / brew and uses whichever is already on your system. If none is present, it bootstraps uv (Astral's Python tool manager) and installs through it.

uv

uv tool install aipager     # if uv is already installed

— or to install uv first:

curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install aipager

uv bundles its own Python interpreter, so this works on any macOS / Linux version regardless of what system Python is doing.

pipx

pipx install aipager

Homebrew tap (macOS, Linuxbrew)

brew install dev-aly3n/tap/aipager

Pulls dtach from Homebrew's standard formula and installs aipager into a Homebrew-managed Python venv.

Heads-up: if you're on macOS Tahoe (26.x), the brew path may fail at pip install time with a pyexpat _XML_SetAllocTrackerActivationThreshold symbol error — that's a known Homebrew Python bottle issue unrelated to aipager. Use the uv path instead (it's not affected) until Homebrew rebuilds the bottles for Tahoe.

Configure

aipager config

Interactive wizard — asks for your Telegram bot token (from @BotFather) and chat ID, validates them, then patches ~/.claude/settings.json to wire the necessary hooks automatically. You never edit any file by hand.

Run

aipager start

The daemon stays in the foreground. Launch a Claude session in another terminal:

aipager session dev

This creates (or reattaches to) a dtach session named claude-dev running Claude Code. The aipager daemon discovers it within seconds and Telegram starts mirroring it. Re-run the same command to reattach later; detach with Ctrl-\.

If the dtach session was killed (machine reboot, etc.) but you want to pick up the Claude conversation from disk, add --resume:

aipager session dev --resume    # resume the last claude conversation in this cwd

You can also pass --resume <session-id> (or any other claude flag) through as trailing args:

aipager session dev -- --resume abc1234

Run as a service (survives logout)

aipager service install

On Linux this writes a systemd-user unit at ~/.config/systemd/user/aipager.service and starts it. On macOS it writes a launchd plist at ~/Library/LaunchAgents/com.aipager.daemon.plist and bootstraps it. Subcommands: start, stop, status, logs, uninstall.

What it does

  • Mirrors Claude Code session state to Telegram: busy/idle, tool calls, context %, cost, line counts
  • Lets you reply to messages to inject prompts back into the session
  • Surfaces permission prompts and AskUserQuestion dialogs as Telegram inline keyboards
  • Notifies on context warnings, compaction, session end, and stalls
  • Supports multiple concurrent sessions with one bot
  • Optional read-only observer bots

Developing locally

git clone <repo-url> aipager && cd aipager
python3 -m venv .venv && source .venv/bin/activate
pip install -e '.[dev]'
pytest -q

When iterating on code changes you'll generally want to also install dtach-bin from a local checkout — or pip install dtach-bin — so the runtime can find dtach on PATH.

Release process is in CONTRIBUTING.md.

License

MIT — see LICENSE.

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

aipager-0.3.7.tar.gz (63.4 kB view details)

Uploaded Source

Built Distribution

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

aipager-0.3.7-py3-none-any.whl (64.2 kB view details)

Uploaded Python 3

File details

Details for the file aipager-0.3.7.tar.gz.

File metadata

  • Download URL: aipager-0.3.7.tar.gz
  • Upload date:
  • Size: 63.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aipager-0.3.7.tar.gz
Algorithm Hash digest
SHA256 0ee13f972d433521c2091b5c520dce96c11002595de6e1fa6533f1f92e728be8
MD5 e6ee8734f1b7d7db62145acee6326a57
BLAKE2b-256 0e30d32bcf3c09a422b1754c7d41b0068a27ca83c50e23190c79965d42dfc4c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for aipager-0.3.7.tar.gz:

Publisher: publish.yml on dev-aly3n/aipager

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

File details

Details for the file aipager-0.3.7-py3-none-any.whl.

File metadata

  • Download URL: aipager-0.3.7-py3-none-any.whl
  • Upload date:
  • Size: 64.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aipager-0.3.7-py3-none-any.whl
Algorithm Hash digest
SHA256 cdafb350bb5b96bdb61cdf769a907bd609e5a0241fed56026d0cbc914deb14a2
MD5 8e56087bc870f15a03776189dd8dc82c
BLAKE2b-256 9ae7bed858b4cbc708d54e0e0381dae6a57d073bbb31bb7f3897b7c47a6b2b64

See more details on using hashes here.

Provenance

The following attestation bundles were made for aipager-0.3.7-py3-none-any.whl:

Publisher: publish.yml on dev-aly3n/aipager

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