Code for Breakfast

Free refills

beady-eye

Run a few coding agents on beads and two things go wrong. You lose sight of the overall goals and of what each agent is doing, and an agent waiting on a merge, a build or your answer is left with a hand-rolled polling script.

beady-eye draws your work as a tree, with the agent on each bead, and tells an agent when the bead it waits on moves.

  • See the whole of the work as a tree, so a goal stays in sight above the beads that serve it, in one project or across all of them.
  • See every agent live, beside the bead it is working on.
  • Run one watcher that follows every tracker, the cheap way for anything to hear that a bead changed.
  • Let an agent wait on your answer, your comment or another agent's work, and feed any script a line of JSON each time a bead changes.
  • Let an agent wait on a pull request, an issue or a release without polling GitHub.

beady-eye does the waiting, so your agents do the work. The command is bdi. It is open source, Apache-2.0, and Code For Breakfast runs its own agent fleet on it.

~$ brew install codeforbreakfast/tap/bdi

The tree of work, and who is on it

Every order in the kitchen, and which cook has it. The cook beside the order needs herdr.

Agents and scripts wait on beads without polling

Order up. Nobody hovers at the hatch.

One watcher on each machine follows every tracker you name, so a wait on a bead costs nothing more than naming the bead. An agent that needs a question answered, another agent's work or a pull request merged watches the bead and moves on. When the bead changes, beady-eye tells the agent what changed. Anything that can write to a bead can reach whoever watches it, and neither side needs to know the other exists. The bead is the address, and the tracker keeps the message after the listener has gone home. Here is what a listener can wait on.

How it works

One watcher on each machine, two ways the word gets out, and one way back.

SOURCES GITHUB THE CLOCK OTHER BEADS WRITERS PEOPLE with bd AGENTS with bd SCRIPTS AND CI with bd GATES bdi gates SHIPS WITH BEADY-EYE THE TRACKER ark-4 an agent claims it ark-0i5 gate on #12 closed ark-9 a person answers THE WAY BACK a person answers, defers or comments, with bdi bd BEADY-EYE BDI WATCH the watcher, one per machine, sees each change within a poll LISTENERS CLAUDE CODE the plugin tells the session THE VIEW bdi redraws the trees SCRIPTS a JSON line each time a bead changes
People, agents and scripts write to beads with bd, as they always have. bdi gates writes too. It reads GitHub, the clock and other beads, closes the gates that wait on them, and comments on the beads behind. The watcher sees the tracker move and passes the word to whoever is waiting on that bead. A person's answer goes back the same way, with bdi bd.

How to order

bdi shows you the work with no config. Telling your agents takes three more steps.

You need Linux or macOS, bd 1.1.0 or newer, and a tracker bd can open. bdi is one Rust binary. herdr is needed for the pane beside each bead, and the rest works without it. gh lets bdi gates settle gates on GitHub, and Node runs the Claude Code plugin.

  1. Install bdi and run it. Homebrew has a built binary for macOS and Linux. The other routes are in the comments.

    brew install codeforbreakfast/tap/bdi
    
    # or: cargo install beady-eye
    # or: herdr plugin install CodeForBreakfast/beady-eye
    # or: nix run github:CodeForBreakfast/beady-eye
    
    # then, in a repository beads tracks
    bdi
  2. Keep the watcher running. bdi watch and bdi gates run under whatever supervises your processes. This is the systemd user unit for the watcher from docs/configuration.md, with ExecStart pointed at where Homebrew puts bdi on Linux. which bdi prints yours. The same page has the unit for bdi gates and a launchd agent for macOS.

    # ~/.config/systemd/user/bdi-watch.service
    [Unit]
    Description=beady-eye watcher
    
    [Service]
    ExecStart=/home/linuxbrew/.linuxbrew/bin/bdi watch
    Restart=on-failure
    
    [Install]
    WantedBy=default.target
    
    # then
    systemctl --user enable --now bdi-watch
  3. Let it tell your Claude Code sessions. Install the plugin, pinned to its release, and start each session with the plugin's channel allowed. The flag is Claude Code's, not beady-eye's. Channels are a research preview there, and Claude Code delivers a plugin's messages only to a session started with that plugin named: with --channels for the plugins on Anthropic's own list, and with this flag for any other. A session started without it still has the watch tools and is never told of a change. Claude Code wants the flag on every session, so put it in whatever starts yours.

    claude plugin marketplace add CodeForBreakfast/beady-eye#plugin-v0.3.0
    claude plugin install beady-eye@beady-eye
    
    # start each session with the plugin's channel allowed
    claude --dangerously-load-development-channels plugin:beady-eye@beady-eye
  4. Give docs/agents.md to your agents. It tells each agent to write its session and its pane on the bead it works, and bdi draws the agent beside the bead from what it wrote. Fold its lines into whatever instructions your agents already follow.

The latest release has a binary for every platform. The README has the keys, the herdr key binding, Nix flakes, the config for several trackers, and what each listener is sent.

Cooked in the same kitchen

Code For Breakfast built this. It cooks for clients too.

Code For Breakfast Ltd is a UK software consultancy, based in Reading and working remote-first. The kitchen that made this ships well-tested software for clients, fast, and builds and operates real multi-agent AI systems.