Skip to main content

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

A recorded demo is coming. The frame above is real output, captured from a live fleet. The animated walkthrough its sibling tools ship (roost, leghorn) lands once the early bugs are shaken out — recording a tool while it is still moving produces a demo that is wrong by the time anyone watches it.

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

  • roosttop for 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

legbar-0.1.0.tar.gz (37.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

legbar-0.1.0-py3-none-any.whl (29.3 kB view details)

Uploaded Python 3

File details

Details for the file legbar-0.1.0.tar.gz.

File metadata

  • Download URL: legbar-0.1.0.tar.gz
  • Upload date:
  • Size: 37.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for legbar-0.1.0.tar.gz
Algorithm Hash digest
SHA256 db805d1afdd86acdf209905537046f370b9820dcdcedb44c8cb08d616360b279
MD5 efe2f6dd0a4887d33eeaab4d854d9ebe
BLAKE2b-256 a82757d3ca9fbfd2ef6771f5bf9b6c6f8e55f5fbe0d0b49aa74fdd8e393e684b

See more details on using hashes here.

Provenance

The following attestation bundles were made for legbar-0.1.0.tar.gz:

Publisher: release.yml on gmhoward9289-ops/legbar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file legbar-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: legbar-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 29.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for legbar-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 da91c6f42e8ff26a42b5996c5fe896ab9311c136e2dc01881a86a8bf34377fc9
MD5 ff46232d9ad679faaeb8d1f901d69b8e
BLAKE2b-256 3400e26ee72f3424317988d4058972765a6b3846bd5a65cf18e2c148711575a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for legbar-0.1.0-py3-none-any.whl:

Publisher: release.yml on gmhoward9289-ops/legbar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page