Run your coding agents from anywhere
Untether is a free, open-source Telegram bridge for Claude Code, Codex CLI, OpenCode and Pi. Send a task by text or voice, review the plan, approve tool calls and answer questions from your phone while the agent works on your machine.
uv tool install -U untetherLatest release v0.36.0, 8 October 2026 · Release notes

Works with
- Claude Code
- Codex CLI
- OpenCode
- Pi
- Antigravity CLIComing soon
Gemini CLI and Amp still run but are deprecated and no longer supported. Antigravity CLI support is planned for v0.36.1.
Everything happens in the chat
Untether turns your agent's work into Telegram messages and buttons, so you can follow along and step in from wherever you are.
Watch it work
Tool calls, file edits and elapsed time stream into the chat while your agent works. When it finishes, the reply shows the model, the cost and the directory it ran in.
Read the progress guide
Approve the plan before any code changes
Available with: Claude CodeIn plan mode, Claude Code shows you its plan as formatted text with Approve and Deny buttons, and waits until you answer. When it needs a decision, its questions arrive with option buttons you can tap. Send /planmode to choose how much needs your approval.
Read the plan mode guide
Background agents report back
Available with: Claude CodeHand work to subagents, background commands or a monitor, then put your phone away. Claude Code's session stays open, a status message tracks each task's progress and elapsed time, and you get a message as each one finishes. Scheduled wake-ups report the same way, and with Loop mode on, Untether runs /loop schedules too.
Read about background tasks
Talk instead of typing
Record a voice note on a walk. Untether transcribes it through a Whisper-compatible service you choose, with a vocabulary hint so tool and project names come through, then sends the text to your agent.
Set up voice notes
Change settings without editing a file
Send /config for a menu of buttons covering the engine, model, permission mode, follow-up mode, scheduled triggers and cost budgets.
See every setting
Move files both ways
Upload a file into your repo, browse project folders with buttons, and get results back as Telegram documents.
Read the file transfer guide
Made for working away from your desk
Sessions, projects, schedules and costs stay under control from the chat. Everything works with every supported engine unless it carries an engine badge.
Sessions
- Steer or queue
- Available with:
Claude CodeA message sent mid-run waits for the current turn, or
/steerwrites it straight into the running session. - Background work stays visible
- Available with: Claude CodeWhen work goes to a background task or subagent, the session stays open and each result arrives as its own message.
- Resume anywhere
- Reply to any message to continue that session, or send
/continueto pick up one you started in your terminal. - Reply with context
- Reply to a message, or quote part of it, and your agent sees that text alongside your prompt.
- Three chat modes
- Assistant for an ongoing chat, workspace for a forum topic per project, or handoff for reply-to-continue.
- Export and stats
/exportsaves a transcript as Markdown or JSON./statsshows runs and time per engine.
Projects and schedules
- Safe unattended runs
- Available with: Claude CodeCron and webhook runs never wait on a button nobody can tap. Approval requests are denied and listed in the final message.
- Scheduled tasks
- Run work on a cron schedule or from a webhook, or delay a one-off task with
/at 30m. Each cron can pick its own model. - Loop mode
- Available with:
Claude CodeTurn on Loop mode and Untether runs
/loopschedules itself, within the iteration and time limits you set. - Many repos
- Register projects with
untether initand switch between them from Telegram. - Parallel branches
- Target a branch with
@branchand the task runs in its own git worktree. - Forum topics
- Map Telegram forum topics to projects and branches, one thread per task.
Costs and reliability
- Budgets
- Available with: Claude Code OpenCodeSet per-run and daily budgets. Turn on Stop at limit and new runs pause once the daily budget is reached. Other engines show token counts.
- Stall diagnostics
- When progress stops, Untether tells you what the agent is doing, so you know whether to wait or step in.
- Clear errors
- API outages, rate limits and billing errors arrive as plain messages with resume steps. Retries and safeguard stops show as their own rows.
- Context at a glance
- Available with: Claude Code PiCompaction gets its own row instead of looking like a stall. On Claude Code, the status line also shows how full the context window is.
- Auto-continue
- Available with: Claude CodeIf the agent exits before it handles a tool result, Untether resumes the session for you.
- Plugins
- Add your own engines, transports and commands. Claude Code plugins can detect Untether sessions through
UNTETHER_SESSION.
Runs on your machine, talks through your own bot
Untether runs beside your agents, on your laptop or a server you control. Your messages go to Telegram and straight back to that machine.
- Your phoneTelegram, by text or voice
- Telegram Bot APIYour own bot, which answers only the user IDs you allow
- Your machineUntether and your agent, working in your repo
What Untether reads
- Your Telegram messages to the bot
- Your agent's output, to stream progress
What Untether stores
- Config in
~/.untether/untether.toml - Sessions, stats and costs as JSON files in
~/.untether/, with no database - Delete
~/.untether/to remove it all
Where Untether connects
- The Telegram Bot API (
api.telegram.org) - Anthropic's usage endpoint, only for
/usageor the opt-in usage footer, with your Claude Code login - Your transcription service, only if you turn on voice notes
- URLs you set for webhooks or scheduled fetches, only if you configure them
- No Little Bear Apps servers
I was walking Normi and had an idea for a fix. By the time I got home and opened my laptop, I'd forgotten half of it. Untether started as a way to send tasks to Claude Code from my phone.
What's new in 0.36.0
Released
Live Claude sessions, steerable follow-ups and safer unattended runs
Claude Code sessions now stay live after an answer. Background agents report back in the chat, and you can steer a run while it's working. Unattended crons and webhooks no longer wait on a button nobody can tap, and Codex safe mode is now properly read-only. This release has six breaking changes, so please read Heads up before you upgrade.
Install Untether
You need macOS or Linux, a Telegram account and at least one supported agent. Untether is free and open source under the MIT licence.
Install the package
Untether installs as a command-line tool with uv, which also fetches a suitable Python if you don't have one.
uv tool install -U untetherNo uv yet?
curl -LsSf https://astral.sh/uv/install.sh | shinstalls it. Prefer pipx?pipx install untetherworks if you already have Python 3.12 or later.Run the setup wizard
Start Untether in a terminal. The wizard walks you through creating a Telegram bot with @BotFather, choosing a workflow and connecting your chat.
untetherSend your first task
Message your bot by text or voice. Your agent runs on your machine and replies in the chat.
Stuck on a step? The troubleshooting guide covers the common problems, or ask in Q&A on GitHub or report a bug.
Frequently asked questions
No answer here? Ask on GitHub, where you can also suggest a feature or report a bug.
What is Untether?
Untether is a Telegram bridge for AI coding agents. You send tasks by text or voice, watch progress as it happens and approve changes with buttons in the chat. It works with Claude Code, Codex CLI, OpenCode and Pi, and the engine compatibility table shows which features each one supports.
How is it different from Claude Code's Remote Control and Channels?
Both are good choices if Claude Code is the only agent you use. Untether runs Claude Code, Codex CLI, OpenCode and Pi from one Telegram chat. It runs as a background service that knows every project you register, so you can start a task in any of them, or on its own branch, from your phone. Each Remote Control server serves one directory. It drives each agent's own command-line tool, so it works with whatever that tool signs in with, a subscription or an API key. Remote Control needs a Claude subscription, and Channels also accepts a Console API key. Untether also transcribes voice notes, runs cron and webhook triggers with any engine, and on Claude Code and OpenCode can pause new runs once a daily cost budget is reached. The comparison page sets out the differences side by side, with sources.
Isn't this just SSH and tmux from my phone?
That works too, and plenty of people do it. Untether swaps a terminal on a small screen for a chat. Progress arrives as messages, approvals and questions are buttons, you can send a voice note instead of typing, and Telegram notifies you when the agent needs you. There's no VPN, SSH key or port forwarding to set up, because Untether fetches your messages from Telegram.
Does Untether send my code to Little Bear Apps?
No. Messages travel between Telegram and the agent on your machine. Little Bear Apps never sees your code, your messages or your agent's output.
Who can see my messages?
Telegram can. Chats with a bot are ordinary Telegram cloud chats, encrypted in transit but readable by Telegram on its servers, not end-to-end encrypted secret chats. Your agent's provider sees what the agent sends it, as it would in a terminal, and voice notes go to the transcription service you choose. Treat the bot like any other chat and don't paste production secrets into it.
What does it cost?
Untether is free and open source under the MIT licence. You pay for your agent's usage as normal, and the Telegram Bot API is free.
What do I need to run it?
Python 3.12 or later on macOS or Linux, a Telegram account with a bot token from @BotFather, and at least one supported agent installed. The install guide walks through it.
Who can use my bot?
Only the Telegram users you allow. Set allowed_user_ids in untether.toml and the bot ignores messages from anyone else. The security guide covers the rest.
Can I continue a session I started in my terminal?
Yes. Send /continue to pick up a session you started in your terminal. It works with Claude Code, Codex CLI, OpenCode and Pi. You can also reply to any bot message to resume that session. See the cross-environment resume guide.
Can I run several tasks at once?
Yes. Use forum topics or separate project chats to run tasks in parallel. Targeting a branch with @branch runs the task in its own git worktree, so tasks don't get in each other's way. The guides cover forum topics and worktrees.
Does every engine support every feature?
No. Live progress, resuming sessions, voice notes, files, projects and scheduled tasks work with all four supported engines. Plan approval, approval buttons, questions with option buttons, diff preview, background tasks and Loop mode are Claude Code only. The compatibility page lists every difference.
What happened to Gemini CLI and Amp support?
Both engines still ship with Untether and still run, but they are deprecated and no longer supported. They get no bug fixes or testing, and they may be removed in a future release. Google retired Gemini CLI for individual Google accounts on 18 June 2026 and replaced it with Antigravity CLI, and its own antigravity engine is planned for Untether v0.36.1. Amp refuses clients it considers out of date, and Untether doesn't track that update cadence, so a working setup can stop without notice. The status of every engine is on the compatibility page.
Can I cap what my agents spend?
Yes. Set per-run and daily budgets in the [cost_budget] section of untether.toml, then switch them on or off per chat from /config. Turn on Stop at limit and new runs pause once the daily budget is reached, until midnight, with a one-off Run anyway button. Untether also flags an unusually expensive run even with no budget set. See the cost budgets guide.
Can I add another agent?
Yes. The plugin system lets you add your own engines, transports and commands. Start with writing a plugin.