legbar
One screen for the whole fleet: live agent sessions beside GitHub CI, drawn from a single discovery layer so the two panes can never disagree.
roost answers what are the models doing. leghorn answers what are the
repos doing. Both are true at once and neither view contains the other — so
watching a fleet has 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
The short ambient loop below is the same program, idling — which is how it spends almost all of its time:
Both are real legbar, unmodified, reading a staged fleet — see demo/ for how it is built and how to re-record. The second contested row is the one worth looking at: a Claude session and a Cursor agent in the same working copy. Cursor writes no session marker and no claim, so a dashboard reading only Claude's session directory cannot see that collision at all.
What each lane shows
SESSIONS — every live agent on the machine. Claude Code sessions are joined
by pid against ~/.claude/sessions/<pid>.json, with model, context burn, and
status read from the session's own JSONL transcript. Cursor agents appear
too, marked cu — Cursor writes no session marker and no claim, so a fleet
view that only reads Claude's session directory is blind to every Cursor agent
running beside it.
CI / PRS — GitHub Actions runs and open pull requests across every clone, with failures pinned so a red build cannot scroll away.
Install
pipx install legbar
Python 3.9+, standard library only. Works on macOS, Linux and Windows.
Usage
legbar # the full-screen view
legbar --once # render one frame and exit (pipes, CI, screenshots)
legbar --json # the joined state, for piping somewhere else
legbar --no-git # skip git probing if it is ever slow
legbar --no-ci # skip the gh sweep (offline, or when it is slow)
In the full-screen view: q quit, g toggle git probing, r refresh now.
Configuration
Every override is LEGBAR_*. The older roost / leghorn / ccwork variable
names are still honoured, so an existing install keeps whatever it had
configured; the new name wins when both are set.
| Variable | Default | What it points at |
|---|---|---|
LEGBAR_REPOS_ROOT |
~/GitHub |
where the clones live |
LEGBAR_SESSIONS_DIR |
~/.claude/sessions |
live-session markers |
LEGBAR_PROJECTS_DIR |
~/.claude/projects |
session transcripts |
LEGBAR_CURSOR_HOME |
~/.cursor |
Cursor's agent transcripts |
LEGBAR_CURSOR_MAX_IDLE_SECS |
86400 |
how far back a Cursor agent counts as live |
LEGBAR_BACKENDS |
claude,cursor |
which discovery lanes run at all |
Two honest caveats
Cursor liveness is inferred, not probed. A Claude row means this process
exists (os.kill(pid, 0)). A Cursor row means this transcript moved
recently — Cursor writes no pid to join against. That is a weaker signal and
it is labelled as one; pid is None for Cursor rows rather than invented.
Cursor's project slugs are lossy. The slug joins path parts with -, and
- is legal inside a directory name, so c-Users-me-dev-heron-ops reads
equally as dev/heron/ops and dev/heron-ops. legbar resolves each segment
longest-first against what actually exists on disk. A slug that resolves
nowhere — another machine's checkout, a deleted clone — falls back to the
naive split rather than raising.
It is ASCII on purpose
Block-drawing characters mojibake in the Windows console, so the context bars,
the pane rules and the status glyphs are all plain ASCII. Same constraint
roost's sparklines and leghorn's tables are built around.
,__
_(o \__
/ \
| ====== |
| ====== |
\ ==== /
\______/
|| ||
^^ ^^
Read-only
legbar reads transcripts and registries, and runs git and gh in read-only
modes. It never writes to a repo.
The family
- roost —
topfor Claude Code: per-session context burn, models, and the subagents a session spawned. - leghorn — the repo lane on its own: sessions joined to worktrees and real git state, CI, and a commit feed.
- legbar — both lanes on one screen, over one discovery layer.
henhouse.py is that discovery layer: sessions, transcripts, git, GitHub, and
Cursor. It is a working CLI in its own right (python henhouse.py).
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file legbar-0.1.2.tar.gz.
File metadata
- Download URL: legbar-0.1.2.tar.gz
- Upload date:
- Size: 49.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e111b934ac989eb4d4587ec96a4caa6c602521a60d5427eb17553a244055626b
|
|
| MD5 |
ffcc55915c697293bfd863e86258d9c5
|
|
| BLAKE2b-256 |
8d94dd8f0161c121976cccd98337a02bf53c16457f975586c5346630e4a35169
|
Provenance
The following attestation bundles were made for legbar-0.1.2.tar.gz:
Publisher:
release.yml on gmhoward9289-ops/legbar
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
legbar-0.1.2.tar.gz -
Subject digest:
e111b934ac989eb4d4587ec96a4caa6c602521a60d5427eb17553a244055626b - Sigstore transparency entry: 2489176734
- Sigstore integration time:
-
Permalink:
gmhoward9289-ops/legbar@5da54faa317216219febc67fc4e07205083b1f18 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/gmhoward9289-ops
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@5da54faa317216219febc67fc4e07205083b1f18 -
Trigger Event:
push
-
Statement type:
File details
Details for the file legbar-0.1.2-py3-none-any.whl.
File metadata
- Download URL: legbar-0.1.2-py3-none-any.whl
- Upload date:
- Size: 36.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c10d46697eec5b93258c12728f580043ded22a84a3c3974739f08e5d57aec70e
|
|
| MD5 |
e1f427dd074fd0a10136ea490f6bce5e
|
|
| BLAKE2b-256 |
0ab86e8fdd067233ee52dcd3c74ee82e160797f7ff4f0dd75974c326d756198c
|
Provenance
The following attestation bundles were made for legbar-0.1.2-py3-none-any.whl:
Publisher:
release.yml on gmhoward9289-ops/legbar
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
legbar-0.1.2-py3-none-any.whl -
Subject digest:
c10d46697eec5b93258c12728f580043ded22a84a3c3974739f08e5d57aec70e - Sigstore transparency entry: 2489176826
- Sigstore integration time:
-
Permalink:
gmhoward9289-ops/legbar@5da54faa317216219febc67fc4e07205083b1f18 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/gmhoward9289-ops
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@5da54faa317216219febc67fc4e07205083b1f18 -
Trigger Event:
push
-
Statement type: