Multi-model AI agent Telegram bot for multi-folder workspaces.
Project description
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
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pochi-0.1.3.tar.gz.
File metadata
- Download URL: pochi-0.1.3.tar.gz
- Upload date:
- Size: 79.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf8bca561deded6285d668b9b19c8cc0eb0bb15b1ce8d9ff03a5d6c2b674de01
|
|
| MD5 |
67e00cbceef6c946f260c2e9497c8cb6
|
|
| BLAKE2b-256 |
0c0b97a11966c4d184845df2128bf885a0e914d85919bb9bed569e1b17df6bb3
|
Provenance
The following attestation bundles were made for pochi-0.1.3.tar.gz:
Publisher:
release.yml on asianviking/pochi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pochi-0.1.3.tar.gz -
Subject digest:
cf8bca561deded6285d668b9b19c8cc0eb0bb15b1ce8d9ff03a5d6c2b674de01 - Sigstore transparency entry: 802263533
- Sigstore integration time:
-
Permalink:
asianviking/pochi@1a11595b2f5156f707c4e54296a7bb22994c2b82 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/asianviking
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1a11595b2f5156f707c4e54296a7bb22994c2b82 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pochi-0.1.3-py3-none-any.whl.
File metadata
- Download URL: pochi-0.1.3-py3-none-any.whl
- Upload date:
- Size: 105.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
989d08e1231aa2155dd667b4b438aa0f9b9e72bc07040aa3dce37ba3f4f6be7e
|
|
| MD5 |
fad6d63dbbd06b02c9bc0bf90055041f
|
|
| BLAKE2b-256 |
d27d8905fbdc94eceb641421bba8a899fccb30b88feab83cea089b56a0619683
|
Provenance
The following attestation bundles were made for pochi-0.1.3-py3-none-any.whl:
Publisher:
release.yml on asianviking/pochi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pochi-0.1.3-py3-none-any.whl -
Subject digest:
989d08e1231aa2155dd667b4b438aa0f9b9e72bc07040aa3dce37ba3f4f6be7e - Sigstore transparency entry: 802263613
- Sigstore integration time:
-
Permalink:
asianviking/pochi@1a11595b2f5156f707c4e54296a7bb22994c2b82 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/asianviking
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1a11595b2f5156f707c4e54296a7bb22994c2b82 -
Trigger Event:
push
-
Statement type: