Full-screen live view of every Claude Code session, its git state, and your GitHub CI
Project description
leghorn
A full-screen live dashboard you leave open on a second monitor while many Claude Code sessions work: every live session joined to its worktree and real git state, your GitHub CI and open PRs with failures pinned until they go green, and a commit feed across every repo, newest first.
leghorn 20 sessions · 2 shared · 1 uncommitted · 3 ci red sort:attention filter:all 15:26:53
╭─ SESSIONS ───────────────────────────────────────────────╮ ╭─ COMMITS ──────────────────────────╮
│◉ leghorn-fea my-mcp-server Needs Input 72% │ │ 9m tools fix/build-cwd │
│● session-a3 api-refactor Idle 58% │ │ fix(api): resolve paths agai…│
│● session-d8 web-frontend ~2 ↑1 Processing 50% │ │ 25m web-frontend origin/ci/pub │
╰──────────────────────────────────────────────────────────╯ │ Automate publishing on relea…│
╭─ GITHUB ─────────────────────────────────────────────────╮ │ 29m api-refactor │
│ 17h ✗ my-mcp-server Required PR Sections (fix/fields) │ │ Add an in-program help panel │
│ 17h ✗ my-mcp-server #593 Add field selection ← sections │ │ 41m tools │
│ 17h ◍ tools Graph Update (queued 17h) │ │ Add a LOCAL MODELS panel │
│ 23m ✓ web-frontend ci (ci/npm-and-tap-publish) │ │ 1h api-refactor origin/feat/rel │
│ 24m ✓ web-frontend #18 Automate publishing APPROVED │ │ teach release_check to diff │
╰──────────────────────────────────────────────────────────╯ ╰────────────────────────────────────╯
q quit r refresh s sort f filter g git tab pane enter detail ? help
Sessions that share a working tree are marked contested (◉) — two sessions in one checkout silently destroy each other's uncommitted work, and seeing it happen is the first step to not doing it. The GitHub pane ranks by what it costs to ignore: running first, then red (a failure must not scroll away), then stuck-in-queue, then everything else by freshness.
Two files, stdlib only, Python 3.9+. macOS and Linux (curses). Read-only by
construction: it runs gh, read-only git plumbing, and (if present)
claudectl, and never writes to a tree, a registry or a session. Every data
source is optional — missing pieces degrade to a labelled gap, never an error.
Install
Homebrew (macOS and Linux):
brew install gmhoward9289-ops/tap/leghorn
npm:
npm install -g leghorn
pipx / pip:
pipx install leghorn
Debian and Ubuntu, from the signed apt repo — this also gets you apt upgrade:
curl -fsSL https://gmhoward9289-ops.github.io/leghorn/leghorn-archive-keyring.asc | sudo gpg --dearmor -o /usr/share/keyrings/leghorn-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/leghorn-archive-keyring.gpg] https://gmhoward9289-ops.github.io/leghorn stable main" | sudo tee /etc/apt/sources.list.d/leghorn.list
sudo apt update
sudo apt install leghorn
Or grab leghorn_<version>_all.deb from the
latest release
and sudo apt install ./leghorn_<version>_all.deb.
What it needs
- git — for the per-tree state and the commit feed.
- gh (authenticated) — for the GITHUB pane. Unauthenticated, the pane says "cannot see github" rather than pretending nothing is happening; an empty feed and a feed that cannot see are different facts.
- claudectl (optional) — session status and context columns. Without it you still get names, trees, branches and git state.
Clones are discovered under ~/GitHub (override: LEGHORN_ROOT).
Usage
leghorn # three panes, refreshing every 5s
leghorn -i 2 # ...every 2s
leghorn --no-github # hide the GitHub pane (no gh calls at all)
leghorn --no-commits # hide the commit feed
leghorn --github-interval 120 # slower gh sweeps
Keys: q quit · r refresh (including a gh sweep) · s/f cycle
sort/filter · tab cycle panes · j/k move · enter detail ·
? help — which explains what each screen and symbol means, not just the
keys.
The data layer is also a command of its own:
python3 -m ccboard # one table of sessions, for a hook or a pipe
python3 -m ccboard --github # the CI/PR feed as plain text
python3 -m ccboard --json # records, for piping somewhere else
Name
The Leghorn is the chicken breed that spots everything first and is never quiet about it.
License
MIT
Project details
Release history Release notifications | RSS feed
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 leghorn-0.1.tar.gz.
File metadata
- Download URL: leghorn-0.1.tar.gz
- Upload date:
- Size: 34.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
139996d751f4007c96380749ba201ef8c679d5220190e4073b3652666bd757fe
|
|
| MD5 |
bf0038f6263ed38c53483618e226e19b
|
|
| BLAKE2b-256 |
163b892e91706779101dd36ea7b512122a5605a51c2f78ffd8ae7d743658de4d
|
Provenance
The following attestation bundles were made for leghorn-0.1.tar.gz:
Publisher:
release.yml on gmhoward9289-ops/leghorn
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
leghorn-0.1.tar.gz -
Subject digest:
139996d751f4007c96380749ba201ef8c679d5220190e4073b3652666bd757fe - Sigstore transparency entry: 2318757584
- Sigstore integration time:
-
Permalink:
gmhoward9289-ops/leghorn@13cc5e0fc7479a555d562f822767f2875de2557e -
Branch / Tag:
refs/tags/v0.1 - Owner: https://github.com/gmhoward9289-ops
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@13cc5e0fc7479a555d562f822767f2875de2557e -
Trigger Event:
push
-
Statement type:
File details
Details for the file leghorn-0.1-py3-none-any.whl.
File metadata
- Download URL: leghorn-0.1-py3-none-any.whl
- Upload date:
- Size: 28.4 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 |
8a5c8a4adcf547fa0189ac39cc723dbad5cc249bd0ceae66b79498cd69ed16e0
|
|
| MD5 |
0b1897da8c72430a2cd7888ca49dd335
|
|
| BLAKE2b-256 |
70ef9088baf3695ea54d7c54a71fbb143b1d0798d29ba79e2e18f647897545c2
|
Provenance
The following attestation bundles were made for leghorn-0.1-py3-none-any.whl:
Publisher:
release.yml on gmhoward9289-ops/leghorn
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
leghorn-0.1-py3-none-any.whl -
Subject digest:
8a5c8a4adcf547fa0189ac39cc723dbad5cc249bd0ceae66b79498cd69ed16e0 - Sigstore transparency entry: 2318757614
- Sigstore integration time:
-
Permalink:
gmhoward9289-ops/leghorn@13cc5e0fc7479a555d562f822767f2875de2557e -
Branch / Tag:
refs/tags/v0.1 - Owner: https://github.com/gmhoward9289-ops
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@13cc5e0fc7479a555d562f822767f2875de2557e -
Trigger Event:
push
-
Statement type: