pochi
Multi-model AI agent Telegram bot for multi-folder workspaces.
Run AI coding agents (Claude Code, Codex, OpenCode, Pi, etc.) from Telegram with workspace-based organization. Each folder gets its own Telegram topic, enabling parallel work across multiple projects from a single bot.
features
- multi-engine: supports multiple AI agent backends (Claude, Codex, OpenCode, Pi) via auto-discovery
- workspace mode: organize multiple folders under one Telegram group with topic-based isolation
- stateless resume: continue a thread in chat or pick up in the terminal with
claude --resume <token> - progress updates: real-time streaming of commands, tools, file changes, and elapsed time
- ralph wiggum loops: iterative Claude prompting where it reviews its own work until complete
- folder management: clone repos, create folders (with or without git), or add existing directories from Telegram
- robust rendering: markdown output with quality-of-life tweaks for Telegram
requirements
uvfor installation (curl -LsSf https://astral.sh/uv/install.sh | sh)- python 3.14+ (uv can install it:
uv python install 3.14) claudeCLI on PATH (npm install -g @anthropic-ai/claude-code)- a Telegram bot token (from @BotFather)
- a Telegram group with forum/topics enabled
install
uv python install 3.14
uv tool install -U pochi
# or try it with
uvx pochi@latest
quick start
-
create a Telegram bot via @BotFather and save the token
-
create a Telegram group with topics enabled:
- create a new group
- go to group settings → Topics → enable
- add your bot to the group as admin
-
get the group ID: the easiest way is to add @RawDataBot to the group temporarily, it will show the chat ID (remove it after)
-
initialize a workspace:
mkdir my-workspace && cd my-workspace pochi init # or non-interactive: pochi init --bot-token "123:ABC" --group-id -100123456789
-
run pochi:
pochi
-
add folders from the General topic in Telegram:
/clone backend git@github.com:user/backend.git /create frontend /create knowledge-vault --no-git /add existing ~/dev/my-project
each folder gets its own topic. switch to a folder's topic to work on it.
workspace config
config lives at .pochi/workspace.toml:
[workspace]
name = "my-workspace"
telegram_group_id = -100123456789
bot_token = "123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
default_engine = "claude" # Optional, defaults to "claude"
[folders.backend]
path = "backend"
topic_id = 123
origin = "git@github.com:user/backend.git"
[folders.frontend]
path = "frontend"
topic_id = 456
[folders.knowledge-vault]
path = "vault"
topic_id = 789
description = "Team knowledge base"
[workers.ralph]
enabled = false
default_max_iterations = 3
# Per-engine configuration sections
[claude]
model = "opus"
allowed_tools = ["Bash", "Read", "Edit", "Write"]
Folders can be git repos or plain directories. The type is auto-detected based on .git presence.
commands
CLI
pochi init [folder] # initialize workspace (prompts for bot token + group ID)
pochi # run the bot
pochi info # show workspace info
pochi --version # show version
pochi --debug # enable debug logging
pochi --no-final-notify # edit progress message instead of sending new final message
Telegram (General topic)
| command | description |
|---|---|
/clone <name> <url> [path] |
clone a git repo and create a topic |
/create <name> [--no-git] |
create a new folder (with git init by default) |
/add <name> <path> |
add an existing folder to the workspace |
/list |
list all folders in the workspace |
/remove <name> |
remove folder from workspace (keeps files) |
/status |
show workspace status |
/engine |
show current default engine and available engines |
/engine <name> |
set default engine for new conversations |
/help |
show available commands |
Telegram (folder topics)
| command | description |
|---|---|
/ralph <prompt> [--max-iterations N] |
start iterative Claude loop |
/cancel |
cancel the current run or ralph loop |
or just send a message to chat with your AI agent!
ralph wiggum loops
ralph loops run Claude iteratively, asking it to review its own work after each iteration. Claude signals completion by responding with RALPH_COMPLETE: <summary>.
/ralph-loop implement user authentication with tests --max-iterations 5
enable always-on ralph mode in config:
[workers.ralph]
enabled = true
default_max_iterations = 3
resume tokens
every response includes a resume line:
`claude --resume abc123`
- reply to a message with a resume line to continue that thread
- copy the command to resume interactively in your terminal
- resume tokens are scoped to topics:
topic:123:abc123
notes
- the bot only responds to messages in the configured group
- run only one pochi instance per bot token
- run
claudeonce interactively in each folder to trust the directory
acknowledgments
Built on top of takopi.
license
MIT
Metadata
Release files for pochi 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| pochi-0.1.3.tar.gz | 79.8 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pochi-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 185.0 kB
Release files / pochi-0.1.3.tar.gz
| Download URL | pochi-0.1.3.tar.gz |
|---|---|
| Size | 79.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cf8bca561deded6285d668b9b19c8cc0eb0bb15b1ce8d9ff03a5d6c2b674de01
|
|
BLAKE2b-256 checksum How to use checksums |
0c0b97a11966c4d184845df2128bf885a0e914d85919bb9bed569e1b17df6bb3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 7, 2026.
Transparency logRelease files / pochi-0.1.3-py3-none-any.whl
| Download URL | pochi-0.1.3-py3-none-any.whl |
|---|---|
| Size | 105.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
989d08e1231aa2155dd667b4b438aa0f9b9e72bc07040aa3dce37ba3f4f6be7e
|
|
BLAKE2b-256 checksum How to use checksums |
d27d8905fbdc94eceb641421bba8a899fccb30b88feab83cea089b56a0619683
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 7, 2026.
Transparency logSecurity for pochi 0.1.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for pochi-0.1.3.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 7, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.