Code for Breakfast

beady-eye v0.33.0

What’s between you and the order: beady-eye 0.33 writes out one bead’s dependency tree

Name the dish and beady-eye 0.33.0 tells you what stands between you and it. bdi --beads <bead> writes that bead and everything it depends on, followed into other projects’ trackers. It lists the beads ready to start, the gates free to close, and every other unfinished bead with what it still waits on.

brew upgrade codeforbreakfast/tap/bdi
# or
cargo install beady-eye
The caff asks what stands between it and an oat flat white on the board. Two beads can start now, and one of them is the dairy’s. Then it asks what each other bead still waits on, and last, which of the sugar fix’s beads are ready.
Read the demo as text
spoon $ bdi --beads spoon-1.1 | jq -r '.ready[] | "\(.project)  \(.id)  \(.title)"'
dairy  dairy-4  Book the van for Friday mornings
spoon  spoon-1.3  Chalk a price for the oat flat white
spoon $ bdi --beads spoon-1.1 | jq -c '.waiting[] | {id, waits_on: [.unmet_dependencies[].id]}'
{"id":"dairy-7","waits_on":["dairy-4"]}
{"id":"spoon-1.1","waits_on":["dairy-7","spoon-1.3"]}
spoon $ bdi --beads --parent spoon-2 --brief | jq -c '.beads[] | {id, ready}'
{"id":"spoon-2.1","ready":true}
{"id":"spoon-2.2","ready":false}
spoon $

Start anywhere on the ticket

The oat flat white goes on the board once it has a price and the dairy delivers. The dairy delivers once its van is booked. So the caff could chalk the price now, and the dairy could book the van now, and nothing else on that ticket can start yet. One command says so, without opening either tracker:

bdi --beads spoon-1.1 | jq '.ready[].id'

Just the one table

bdi --beads now takes --label, --type, --assignee and --parent. Each keeps only the beads that match, in the plain listing, in --ready’s lists and in a bead’s tree. --parent keeps every bead beneath the one you name, at any depth. --brief leaves the descriptions out.

Every edge on the docket

Each bead now names its parent, and its new dependencies field lists every edge it has: the parent, finished blockers and non-blocking edges included, each with its type and the other bead’s project, id and status.

No phantom blockers

A blocker in a project the run did not read no longer counts as open. It is listed under the bead’s orphaned_dependencies instead, and the bead still reads as not ready.

Easier on the kitchen

When a tracker moves, bdi now reads only the beads that changed since its last read, not the whole tracker. A big tracker’s server sees far less load from a running bdi or its watcher.

None of this needs anything from you.

Order up.

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.