$ claude, but reachable
Claude Code lives in a terminal. Close the laptop and the agent is alone in a room. hotline wires the session to your messaging apps, so it can ping you when it's done, ask permission when it's blocked, and take your next instruction from wherever you are.
Permission request
psql -f migrate_007.sql
An agent that can only talk while you watch it type has no autonomy. Real autonomy needs two things. The agent must be able to reach you: a ping when the job lands, a question when it hits a wall. And you must be able to reach it: a follow-up from the couch, a course correction from the train.
The permission relay is the piece that makes it work. Claude Code's permission prompts land in your DMs with See more / Allow / Deny buttons, or as text you answer with yes <code>. The session stops asking a locked terminal and starts asking you.
Hosted agent-texting products bundle three things and rent them back to you: the harness, the model, the channel. hotline splits the bundle.
Claude Code, running on your machine, with your files, your tools, your MCP servers. hotline is one more MCP server in the list.
The model layer stays yours. Claude subscription, API key, or any third-party endpoint that speaks the Anthropic API schema.
Whichever app you live in. Telegram, Signal, and Discord today. Same tools, same access model on every one.
Run several providers on one channel and the thread follows you. Ask on Signal over lunch, tap a button on Telegram on the walk home, read the result on Discord at your desk. Every message in both directions is appended to a transcript, so the assistant recalls the conversation across session restarts.
When a transport lacks a feature, the adapter degrades it, never the agent. Signal has no inline buttons, so buttons render as numbered text options and your reply routes back the same way.
The official Claude Code Telegram plugin is good. If Telegram is your whole answer, use it.
hotline exists for everywhere it can't go. Signal has no bot API; talking to it means an unofficial client and linking a secondary device, which an official product structurally can't ship. Self-hosted open source can. That, plus multiple transports on one session, is the pitch.
# install (Go 1.26+)
$ go install github.com/1broseidon/hotline@latest
# drop a bot token in the channel's .env
$ mkdir -p ~/.claude/channels/tele-go
$ printf 'TELEGRAM_BOT_TOKEN=123456789:AA…\n' > ~/.claude/channels/tele-go/.env
# register it in .mcp.json, then start Claude Code with the channel flag
$ claude --dangerously-load-development-channels server:hotline
# DM your bot, approve the pairing code from your terminal
$ hotline pair a3f21c
Full walkthrough, including the .mcp.json block, in the quickstart.
One static Go binary. No daemon of its own, no account, no cloud relay. State lives in a directory you own, permissions are files you can read, and nobody talks to your agent without your say-so. Pairing approval happens only from your terminal, because a chat message asking for access is exactly what a prompt injection looks like.
It speaks Claude Code's experimental claude/channel protocol, and the site says so plainly: what that means and what can break.