Skip to main content

bund

PyPI Python Downloads MIT License

Your AI agent is waiting for you. Again.

this is fine

Telegram pings for coding agents.
Approve from your phone. Free. Zero dependencies.


The problem

distracted boyfriend

How it works

gru plan

Setup (2 minutes)

pip install bund

bund set --token <botfather-token>
bund set --chat auto
bund install        # Claude Code hooks
bund setup opencode # …or claudecode, codex, gemini — project prompt
bund test

bund install wires Claude Code's PermissionRequest and Stop hooks. bund setup <provider> drops a prompt into your project so any other agent uses bund ask for every question. On scripts, call bund ask directly — no install needed.

success kid

What you get

Button Does
✅ Approve Lets it run, once
❌ Deny Nope
♾ Approve all similar Never asks again for that kind of command

And a ping when the task is done:

fry

Now you know which one.

Sample message

🙄 Your AI intern wants to run Bash. Please supervise.

📁 my-project
npm run build

[ ✅ Approve ] [ ❌ Deny ]
[ ♾ Approve all similar: Bash(npm run *) ]

The joke is on top. The real command is always shown in full below it.

Works with any agent

bund ask is the universal protocol: any CLI, script, or agent asks a question, your phone answers.

bund ask "deploy to prod?" && echo let's go
# stdout: allow | deny | timeout
# exit:   0      1      2
import subprocess
r = subprocess.run(["bund", "ask", "run the migration?"], capture_output=True, text=True)
if r.stdout.strip() == "allow":
    ...

No config files to wire. If bund isn't configured, bund ask fails fast with exit code 2 instead of hanging your agent.

One command per project

Tell any agent to use bund for every question and approval, scoped to the current project:

bund setup opencode      # writes the prompt into ./AGENTS.md
bund setup claudecode    # writes the prompt into ./CLAUDE.md
bund setup codex         # AGENTS.md
bund setup gemini        # GEMINI.md
bund setup generic       # just prints it — paste anywhere
bund -setup opencode     # same thing, if you like dashes

bund setup opencode --print    # only print, don't write a file
bund setup opencode --dir ~/other-project   # write elsewhere

You get a ready-made instruction block (also printed to stdout):

### When to use it
Any moment you would otherwise block waiting for me:
- you need permission for an action (risky or unusual command, …)
- you need a decision or answer from me to continue
- you are done with the task and need confirmation before the next step

### Contract (strict)
- stdout is exactly one word: `allow`, `deny`, or `timeout`
- exit codes: `0` = allow, `1` = deny, `2` = timeout / bund missing
- `timeout` … → fall back to asking in the terminal. Never treat it as
  approval. Never hang forever.

Running it twice updates the block in place instead of duplicating it.

Safety

drake

  • Only your Telegram chat can approve anything
  • Every button works once (random request ids, no replaying old taps)
  • Dangerous commands (rm -rf, sudo, force pushes, curl | sh, …) get a serious warning and no "approve all" button
  • No answer? The agent falls back to the normal terminal prompt
  • bund can never block your work — any error means silent fallback
  • Token and chat id live in ~/.config/bund/config.json with chmod 600

Dependencies

buzz

Python 3.9+. Standard library only. That's it.

Cost

oprah

Tone

bund set --tone sarcasm   # default
bund set --tone plain     # for people who have no joy

Add your own lines in ~/.config/bund/templates.json.

Also

bund -m "build finished, come back"

Works with any script or agent.

is this a pigeon


Commands

bund set --token <token>        # botfather token
bund set --chat auto|<id>       # pick your chat
bund set --tone sarcasm|plain   # message tone
bund install                    # add Claude Code hooks
bund uninstall                  # remove only bund's hooks
bund setup <provider>           # project-scope prompt: use bund for every question
                               #   providers: opencode, claudecode, codex, gemini, cursor, generic
                               #   flags: --print (stdout only), --dir <path>
bund test                       # send a test message
bund ask "<question>"           # ask anything (allow|deny|timeout)
bund -m "<text>"                # send any message
bund hook                       # internal, called by hooks

Memes by memegen.link. If they don't load, that's on them, not us.
MIT License

Metadata

Release files for bund 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bund 0.4.0
File Size Uploaded
bund-0.4.0.tar.gz 24.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bund 0.4.0
File Interpreter ABI Platform
bund-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 47.0 kB

Release files / bund-0.4.0.tar.gz

Download URL bund-0.4.0.tar.gz
Size 24.7 kB
Tags Source
SHA-256 checksum
How to use checksums
2bc565a0d0d4cedb975f8c6abb81223a15b40adf3c476ac830c4fdbf13e1e53f
BLAKE2b-256 checksum
How to use checksums
d4139aa9b2f0bca64d3d1cf2744e72c00f0ec1a329b9347aa6f98e76d44d3cd3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.6

Release files / bund-0.4.0-py3-none-any.whl

Download URL bund-0.4.0-py3-none-any.whl
Size 22.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a63fc53e0a7fd1985d07d7ba3b6b95c132af8e09401d9994fd6b0238a0cec515
BLAKE2b-256 checksum
How to use checksums
1f6e0599ee27988efebaa69adb1f025ab7df4cc8d023cc9752582b27f6539d1d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.6

Release history Release notifications | RSS feed

1.5.0

2 release files

This release

0.4.0 This release

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page