Historical Note: This post describes early agentchute mechanics (such as push-based wakes, watchdogs, or recipient-side service polling) that were deleted in the v0.8.0 pull-only redesign. For the current stable specification, see the AGENTCHUTE.md Protocol Specification.

May 20, 2026 · agentchute team

v0.1.2: doctor, watch, and the no-tmux path

v0.1.1 made agents remember who they owed. v0.1.2 makes the loop easier to inspect, easier to wire, and usable when there is no tmux pane to poke.

The previous release proved the protocol could carry its own release. Three agents shipped lifecycle hooks and a reply-obligation ledger through the same inboxes they were changing. That was the thesis test.

v0.1.2 is less dramatic and more useful. It answers the next operator questions: is this loop wired correctly? Why did the hook not run? What happens if the recipient is in a normal terminal instead of tmux? Can Claude Code get the same structured per-turn context that codex already gets?

Four-panel comic: (1) human writes instructions in a notebook; (2) hands them to a screen of agent characters; (3) the agents pass paper messages between themselves while the human sips coffee; (4) the agents deliver the finished result back to the human.
The full loop. v0.1.2 makes the third panel — agents coordinating through their own inboxes — work without tmux and inspectable when it doesn't.

The release is small on purpose: one diagnostic command, one recipient-side watcher, one Claude hook output mode, and a small status UX fix.

Doctor is the first stop

agentchute doctor is the diagnostic aggregator. It checks the loop scaffold, binary resolution, hook file presence, hook content, registration freshness, inbox state, pending-reply ledger state, and wake target health.

The important design choice is severity. Doctor reports BLOCKER, WARN, OK, and SKIP. Missing scaffold, unreadable registration, an invalid binary path, or a hook that runs agentchute check are blockers. Unread mail, pending replies, stale registration, and no wake method are warnings. Doctor diagnoses; gate still owns lifecycle blocking.

agentchute doctor --as claude-code
agentchute doctor --as codex --json

This is aimed at the failures that are obvious only after you have lost time: the binary exists in your terminal but not in the wrapper's PATH; a hook template accidentally drains mail by calling check; a tmux pane moved; a registration is stale because the wrapper restarted without booting.

Watch is the no-tmux fallback

The v0.1 reference wake adapter is still tmux send-keys. It is good when all agents live in panes on the same host. It is not the right answer for every terminal session.

agentchute watch is recipient-side polling. It looks at the recipient's own inbox and fires actions only for new mail that arrives after the watcher starts.

agentchute watch --as gemini-cli --notify
agentchute watch --as codex --print
agentchute watch --as claude-code --exec 'claude --continue'

The command is deliberately non-consuming. It does not archive. It does not quarantine. It does not wake peers. It does not pass message bodies to shell commands. --notify wakes the local human operator with macOS osascript or Linux notify-send. --exec is explicit operator-owned automation and receives only AGENTCHUTE_MSG_ID, AGENTCHUTE_FROM, and AGENTCHUTE_TASK.

The mailbox is still the durable part. Watch is just a local bell.

Claude gets structured context

v0.1.1 left one wrapper-specific mismatch in the open. Claude Code accepted plain-text UserPromptSubmit output, while codex used a structured hook JSON envelope. Plain text worked, but it meant the hook template and the spec were not symmetrical.

v0.1.2 adds pending --claude-hook UserPromptSubmit. The Claude template now emits the same nested hookSpecificOutput.additionalContext shape as codex. Existing plain-text setups still work, but the reference template now uses the structured path.

The tiny status fix matters

agentchute status no longer requires --as. With no agent identity, it prints the pool overview without updating anyone's last_seen. With --as, it keeps the old acting-agent behavior and refreshes that agent's registration timestamp.

That distinction sounds small, but it matters for diagnostics. Looking at the pool should not itself make the pool look healthier.

The release loop stayed honest

The v0.1.2 implementation followed the same pattern as v0.1.1. Claude Code took the Go queue. codex reviewed each commit as it landed. Gemini owned spec and docs edges. Every ask moved through agentchute inboxes.

The review loop found the kind of bugs diagnostics are supposed to catch: JSON output that reported a blocker but exited cleanly; hook sanity scans that caught the bare command but missed the templated one; watcher identity logic that needed to respect the protocol's delivery tuple instead of treating message_id as delivery-unique.

That is the shape we want. The tool reports how the loop is wired, and the loop reports when the tool is wired wrong.

What v0.1.2 is not

This is not a coordinator. It does not route work, rank agents, restart exhausted wrappers, or add Slack/email/pager notifications. It does not make watch a second inbox consumer. It keeps the same protocol boundary: per-recipient inboxes, recipient-owned consumption, optional best-effort wake.

The new commands are operator surfaces. doctor tells you what looks wrong. watch tells a local human or shell command that mail arrived. The agent still consumes the message through the normal flow.

Try v0.1.2

curl -fsSL https://raw.githubusercontent.com/agentchute/agentchute/main/install.sh | sh

Initialize a repo, install hooks, then check the wiring:

agentchute init --yes
agentchute boot --as claude-code --vendor anthropic
agentchute doctor --as claude-code

Run a no-tmux watcher beside a regular terminal session:

agentchute watch --as claude-code --notify

Repository: github.com/agentchute/agentchute · Release: v0.1.2 · MIT license · home