Skip to content

Code From Anywhere — Telegram bridge for AI coding agents. Stream progress, approve actions, manage projects, and chat with AI with your voice.

License

Notifications You must be signed in to change notification settings

littlebearapps/untether

Untether

Telegram bridge for AI coding agents.
Send tasks by voice or text, stream progress live, and approve changes — from your phone, anywhere.

Works with Claude Code · Codex · OpenCode · Pi

CI PyPI Python License

Quick Start · Features · Engines · Commands · Contributing


Your AI coding agents need a terminal, but you don't need to sit at one. Untether runs on your machine and connects your agents to a Telegram bot. Send a task from your phone — by voice or text — and watch your agent work in real time. When it needs permission, tap a button. When it's done, read the result. No desk, no SSH, no screen sharing.


⚡ Quick start

uv tool install untether        # recommended
# or
pipx install untether            # alternative
untether                        # run setup wizard

The wizard creates a Telegram bot, picks your workflow, and connects your chat. Then send a message to your bot:

fix the failing tests in src/auth

That's it. Your agent runs on your machine, streams progress to Telegram, and you can reply to continue the conversation.

Tip: Already have a bot token? Pass it directly: untether --bot-token YOUR_TOKEN


🎯 Features

  • 📡 Progress streaming — watch your agent work in real time; see tool calls, file changes, and elapsed time as they happen
  • 🔐 Interactive permissions — approve plan transitions and clarifying questions with inline buttons; tools auto-execute, with progressive cooldown after "Pause & Outline Plan"
  • 📋 Plan mode — toggle per chat with /planmode; choose full manual approval, auto-approved transitions, or no plan phase
  • 📁 Projects and worktrees — register repos with untether init, target with /myproject @feat/thing, run branches in isolated worktrees in parallel
  • 💰 Cost and usage tracking — per-run and daily budgets, subscription usage in the footer, /usage for detailed breakdowns, optional auto-cancel
  • 🏷 Model and mode metadata — every completed message shows the model and permission mode (e.g. 🏷 sonnet · plan) across all engines
  • 🎙️ Voice notes — dictate tasks instead of typing; Untether transcribes via a configurable Whisper-compatible endpoint
  • 📎 File transfer — upload files to your repo or download results back
  • Scheduled tasks — cron expressions and webhook triggers
  • 💬 Forum topics — map Telegram topics to projects and branches
  • 📤 Session export/export for markdown or JSON transcripts
  • 🗂️ File browser/browse to navigate project files with inline buttons
  • 🧩 Plugin system — extend with custom engines, transports, and commands
  • 💬 Conversation modes — assistant (ongoing chat), workspace (forum topics per project), or handoff (reply-to-continue with terminal resume)

🔌 Supported engines

Engine Install What it's good at
Claude Code npm i -g @anthropic-ai/claude-code Complex refactors, architecture, long context
Codex npm i -g @openai/codex Fast edits, shell commands, quick fixes
OpenCode npm i -g opencode-ai@latest 75+ providers via Models.dev, local models
Pi npm i -g @mariozechner/pi-coding-agent Multi-provider auth, conversational

Note: Use your existing Claude or ChatGPT subscription — no extra API keys needed (unless you want API billing).


🤖 Commands

Command What it does
/cancel Stop the running agent
/agent Show or set the engine for this chat
/model Override the model for an engine
/planmode Toggle plan mode (on/auto/off)
/usage Show API costs for the current session
/export Export session transcript
/browse Browse project files
/new Clear stored sessions
/file put/get Transfer files
/topic Create or bind forum topics
/restart Gracefully restart Untether (drains active runs first)

Prefix any message with /<engine> to pick an engine for that task, or /<project> to target a repo:

/claude /myproject @feat/auth implement OAuth2


⚙️ Configuration

Untether reads ~/.untether/untether.toml. The setup wizard creates this for you, or configure manually:

default_engine = "codex"

[transports.telegram]
bot_token = "123456789:ABC..."
chat_id = 123456789
session_mode = "chat"

[projects.myapp]
path = "~/dev/myapp"
default_engine = "claude"

[cost_budget]
enabled = true
max_cost_per_run = 2.00
max_cost_per_day = 10.00

See the full configuration reference for all options.

Warning: Never commit your untether.toml — it contains your bot token. The default location (~/.untether/) keeps it outside your repos.


📦 Requirements

  • Python 3.12+uv python install 3.14
  • uvcurl -LsSf https://astral.sh/uv/install.sh | sh
  • At least one agent CLI on PATH: codex, claude, opencode, or pi

📖 Engine guides

Detailed setup and usage for each engine:


📚 Documentation

Full documentation is available in the docs/ directory.


🤝 Contributing

Found a bug? Got an idea? Open an issue — we'd love to hear from you.

Want to contribute code? See CONTRIBUTING.md for development setup, testing, and guidelines.


🙏 Acknowledgements

Untether is a fork of takopi by @banteg, which provided the original Telegram-to-Codex bridge. Untether extends it with interactive permission control, multi-engine support, plan mode, cost tracking, and many other features.


📄 Licence

MIT — Made by Little Bear Apps 🐶

About

Code From Anywhere — Telegram bridge for AI coding agents. Stream progress, approve actions, manage projects, and chat with AI with your voice.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors

Languages