Code for Breakfast

beady-eye v0.26.0

Word from the kitchen: in beady-eye 0.26, the tail shows what the agent said, not the box it waits in

In beady-eye 0.26.0, the tail under the tree can cut Claude Code’s input box off the foot of a pane. Map the agent to the claude-code crop and the tail shows what the agent last said and when it finished, without the box, its meter or its mode line.

brew upgrade codeforbreakfast/tap/bdi
# or
cargo install beady-eye
The card reader’s agent has finished, and the first look at its pane spends the bottom of the tail on the order pad: the input box, the suggestion in it and the mode line. With the crop added to the config, the next look shows what the agent said, from the change to pence down to how long it cooked. t then hides the tail and brings it back.
Read the demo as text
spoon $ bdi

▾ spoon  ✓ 6s ago                                                               1/6  2 agents
  ├── ○ spoon-1  The caff takes card payments                                             1/4
  │   ├── ◐ .1       Wire the card reader to the till                          ◍ wK:p2 · idle
  │   ├── ○ .2       Print the VAT line on the receipt
  │   └── ✓ .3       Price the menu in pence
  └── ○ spoon-2  The tea timer forgets the second sugar                                   0/2
      └── ◐ .1       Count sugars per cup, not per order                    ◍ wK:p3 · working
  reading spoon, where bdi was started                     --all-projects reads every project
─────────────────────────────────────────── wK:p2 ───────────────────────────────────────────
    running 4 tests ... 4 passed
  ● All four pass, including the one for a 1p bacon roll
    refund. The change is on the card-reader branch,
    ready for a look.
  ✻ Cooked for 3m 12s
  ────────────────────────────────────────────────────────
  ❯ try a contactless tap next
  ────────────────────────────────────────────────────────
    ⏵⏵ accept edits on (shift+tab to cycle) · 41% context
a all   ? keys   / find   q quit

spoon $ tail -2 ~/.config/beady-eye/config.toml
[tail.crop]
claude = "claude-code"
spoon $ bdi

▾ spoon  ✓ 4s ago                                                               1/6  2 agents
  ├── ○ spoon-1  The caff takes card payments                                             1/4
  │   ├── ◐ .1       Wire the card reader to the till                          ◍ wK:p2 · idle
  │   ├── ○ .2       Print the VAT line on the receipt
  │   └── ✓ .3       Price the menu in pence
  └── ○ spoon-2  The tea timer forgets the second sugar                                   0/2
      └── ◐ .1       Count sugars per cup, not per order                    ◍ wK:p3 · working
  reading spoon, where bdi was started                     --all-projects reads every project
─────────────────────────────────────────── wK:p2 ───────────────────────────────────────────
  ● The reader sends the amount in pence now, so the till
    stops converting from pounds and back again.
    running 4 tests ... 4 passed
  ● All four pass, including the one for a 1p bacon roll
    refund. The change is on the card-reader branch,
    ready for a look.
  ✻ Cooked for 3m 12s
a all   ? keys   / find   q quit

[t]

▾ spoon  ✓ 8s ago                                                               1/6  2 agents
  ├── ○ spoon-1  The caff takes card payments                                             1/4
  │   ├── ◐ .1       Wire the card reader to the till                          ◍ wK:p2 · idle
  │   ├── ○ .2       Print the VAT line on the receipt
  │   └── ✓ .3       Price the menu in pence
  └── ○ spoon-2  The tea timer forgets the second sugar                                   0/2
      └── ◐ .1       Count sugars per cup, not per order                    ◍ wK:p3 · working
  reading spoon, where bdi was started                     --all-projects reads every project
a all   ? keys   / find   q quit

The crop goes under [tail.crop], keyed by the name herdr gives the agent in herdr agent list:

[tail.crop]
claude = "claude-code"

A pane whose agent has no entry is tailed as drawn, and so is a screen with nowhere to cut, such as one with a dialog where the box would be. The configuration reference has the table. Nothing else needs changing to upgrade.

A bigger plate, and a lid for it

The tail used to get six lines whatever the size of the screen. It now takes whatever rows the tree does not need, up to half the screen, and still gives rows up before the tree does. Press t to hide it and hand its rows to the tree. While it is hidden, bdi reads no pane at all. It is back at every start.

Two orders sent back and fixed

A gate with no open blocker now reads as ready. Before, every gate read as not ready. And a bead in progress under a seated bead is no longer called an orphan. A seat names its pane on the one bead that covers its work, so orphan-claim now fires only when neither the bead nor any bead above it has a pane.

Cheaper to run

On a busy tracker, the watcher skips most of its work when a read finds nothing new, and a board skips a push that moved nothing it shows. Every board stays as current as before. A board now spends a third or less of the CPU it did and holds over 40% less memory. The watcher spends about half the CPU, and its peak memory falls by about a third.

The pad stays in the kitchen. Only the plate goes out. 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.