checkout — done
Rewrote the Stripe webhook handler and added retry backoff. 24 tests passing.
for people who run coding agents
A run finishes, breaks, or freezes waiting on you — and you find out ten minutes later. Put all three on your iPhone and Apple Watch the moment they happen: tap Allow, Reply, or simply come back to the agent.
No account, no credit card, no configuration file to write.
It finds every agent you have, backs up each config, and merges the hooks in — it never replaces hooks you already have.
$ npx agentbuzz init
✓ Found Claude Code ~/.claude/settings.json
✓ Found Codex CLI ~/.codex/hooks.json
✓ Found Cursor ~/.cursor/hooks.json
· 2 hooks from other tools — these will be preserved
Open agentbuzz on your iPhone and enter this code:
3JHT-MNYJ
Waiting for your phone…
That is the whole of signup. The code is single-use, expires in ten minutes, and binds that machine to your phone.
Hooks are read at session start, so the restart matters. After that your phone buzzes when a run finishes, fails, or stops for permission — and stays quiet when it doesn’t.
Everything else stays silent. That is the feature.
Not "a turn ended" — a run that actually took long enough that you walked away. With a one-line summary of what changed, so you know whether to come back.
The agent is frozen waiting on a yes. This is the ping that saves the most time, and the one you can answer without going back to the desk.
Errors surface as errors, from real failure events — not inferred from a hopeful-sounding last message.
A naive hook fires every time the agent stops talking — a notification every twenty seconds. agentbuzz only speaks when a run crosses your threshold.
Default threshold is 90 seconds and you can change it. The dashboard shows the runs it deliberately swallowed, so silence never looks like something broken.
the part nothing else does
When your agent asks for permission, the notification carries the buttons. Tap Allow on your Watch and the run continues — your laptop stays shut, in your bag, across the room.
Tap Reply and dictate the next instruction instead. The agent picks it up and keeps going.
The summary is built locally, on your laptop, from a transcript that never moves. This is not a policy promise — it is the only architecture that works, because the hook hands us a file path, not a conversation.
Here is everything that is ever sent:
{
"project": "checkout",
"status": "blocked",
"title": "wants permission to use Bash",
"body": "npm run migrate:prod",
"duration": 372
}
No file contents. No diffs. No prompts. The local script is open source, so you can read exactly what it reads and exactly what it sends — or run it against your own ntfy server and never touch our infrastructure at all.
agentbuzz uninstall restores the backup and removes only what we added.init wires up whichever it finds, and Cursor works in the IDE as well as the CLI. Two differences worth knowing: Cursor has no hook meaning “waiting for you”, so it reports finished and failed runs but not permission prompts; and the 4 files changed · 12× Read detail line comes from reading Claude Code’s transcript, so Codex and Cursor show the duration alone. Anything else that can POST JSON can send into the same endpoint.