legbar: the whole fleet on one screen
Running several coding agents at once means holding two questions open simultaneously: what are the models doing, and what are the repos doing. roost answers the first — every live Claude Code session, its model, its context burn, whether it’s stuck waiting on a human. leghorn answers the second — CI runs and open PRs across every clone. Both views are true at once and neither contains the other, so watching a fleet meant watching two windows and joining them by eye.
legbar draws both lanes on one canvas:
legbar 5 sessions | 1 cursor | 1 need input | 15 ci red | 125k held | 18:37:00
SESSIONS CI / PRS
-------- --------
cc heron-ops-3c FB5 ###------- 32% needsinput dev X roost ci
cc swamp-ops-ad OP5 ###------- 25% working dev X roost #56 ci: skip winget~
cc heron-ops-16 FB5 #--------- 10% working dev X copilot-money~ Tests
cc claude-10 OP5 #--------- 8% idle Claude > leghorn release
cu c5468eb1 - - idle dev . leghorn #61 checks pending
One discovery layer feeds both panes, so they cannot disagree about what exists. Failures are pinned — a red build cannot scroll away while you’re watching a session in the other lane.
The row worth looking at is the Cursor one
Claude Code sessions announce themselves: a marker file per pid, a JSONL
transcript to read model and status from. Cursor agents write no session
marker and no claim — so a fleet dashboard that reads only Claude’s session
directory is blind to every Cursor agent running beside it. Including the
worst case: a Claude session and a Cursor agent editing the same working
copy, a collision that no single tool’s own UI will ever show you, because
each one only knows about itself. legbar reads both, marks Cursor rows cu,
and flags the contested tree.
That blind spot is the reason legbar exists as a third tool rather than a feature bolted onto either of the first two. The union is only trustworthy if discovery happens once, in one place, for everything.
Five releases from placeholder to program
When legbar’s repo opened on August 11, the demo was a placeholder GIF.
Five releases later — v0.1.1 through v0.2.1, all cut on the 16th — it counts
subagents for real, probes liveness without spawning a subprocess, shows
Cursor rows with model and context, loads each pane on its own thread so a
slow GitHub sweep can’t freeze the screen, and ships through six install
channels. pipx install legbar — Python 3.9+, standard library only, macOS,
Linux, Windows. --once renders a single frame for pipes and CI; --json
emits the joined state for anything downstream.
The demo GIFs in the README are the real program reading a staged fleet, and
demo/ documents how the stage is built and re-recorded. A faked demo GIF is
the first thing I’d distrust on someone else’s repo, so this one comes with
its own provenance.
Launch day: every channel had a gate, and none of them matched
legbar went public everywhere on the same day — a Discussions announcement, a Show HN, a post in r/ClaudeAI’s showcase megathread, and a PR adding it to awesome-tuis (#834). Each channel turned out to have its own mechanical gate, and no two were alike. HN’s gate is social: the author in the comments within the first hour. Reddit’s is format: a natively uploaded GIF outranks a link. The awesome-list’s is house style: one line, alphabetical order.
The sharpest one was awesome-claude-code, which takes no pull requests at all — recommendations go through a web-UI issue form, CLI submission is explicitly blocked, and a hard eligibility rule requires a project to be 14 days old with continued commits, or carry 100 stars. A brand-new project’s most natural promotion window is exactly the window that gate excludes, on purpose. Knowing the rule turns a rejection into a calendar entry: legbar becomes eligible around August 25.
The counterfactual is treating launch as one act: the same announcement pasted five places. Four of the five would have quietly underperformed — the HN post orphaned without its first comment, the Reddit post buried as a bare link, the awesome-claude-code PR auto-closed by a bot — and every one of those failures would have read as “nobody was interested” rather than “each gate has published rules, unread.”
From my swamp to yours.