leghorn 0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
leghorn-0.1/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ dist/
2
+ __pycache__/
3
+ *.pyc
4
+ node_modules/
leghorn-0.1/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 George M. Howard
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
leghorn-0.1/PKG-INFO ADDED
@@ -0,0 +1,135 @@
1
+ Metadata-Version: 2.4
2
+ Name: leghorn
3
+ Version: 0.1
4
+ Summary: Full-screen live view of every Claude Code session, its git state, and your GitHub CI
5
+ Project-URL: Homepage, https://github.com/gmhoward9289-ops/leghorn
6
+ Project-URL: Issues, https://github.com/gmhoward9289-ops/leghorn/issues
7
+ Author-email: "George M. Howard" <dev@swamplink.com>
8
+ License: MIT
9
+ License-File: LICENSE
10
+ Keywords: ci,claude,claude-code,dashboard,git,monitoring,tui
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console :: Curses
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: MacOS :: MacOS X
16
+ Classifier: Operating System :: POSIX :: Linux
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: System :: Monitoring
21
+ Requires-Python: >=3.9
22
+ Description-Content-Type: text/markdown
23
+
24
+ # leghorn
25
+
26
+ [![ci](https://github.com/gmhoward9289-ops/leghorn/actions/workflows/ci.yml/badge.svg)](https://github.com/gmhoward9289-ops/leghorn/actions/workflows/ci.yml)
27
+
28
+ A full-screen live dashboard you leave open on a second monitor while many
29
+ Claude Code sessions work: every live session joined to its worktree and
30
+ **real git state**, your **GitHub CI and open PRs** with failures pinned until
31
+ they go green, and a commit feed across every repo, newest first.
32
+
33
+ ```
34
+ leghorn 20 sessions · 2 shared · 1 uncommitted · 3 ci red sort:attention filter:all 15:26:53
35
+ ╭─ SESSIONS ───────────────────────────────────────────────╮ ╭─ COMMITS ──────────────────────────╮
36
+ │◉ leghorn-fea my-mcp-server Needs Input 72% │ │ 9m tools fix/build-cwd │
37
+ │● session-a3 api-refactor Idle 58% │ │ fix(api): resolve paths agai…│
38
+ │● session-d8 web-frontend ~2 ↑1 Processing 50% │ │ 25m web-frontend origin/ci/pub │
39
+ ╰──────────────────────────────────────────────────────────╯ │ Automate publishing on relea…│
40
+ ╭─ GITHUB ─────────────────────────────────────────────────╮ │ 29m api-refactor │
41
+ │ 17h ✗ my-mcp-server Required PR Sections (fix/fields) │ │ Add an in-program help panel │
42
+ │ 17h ✗ my-mcp-server #593 Add field selection ← sections │ │ 41m tools │
43
+ │ 17h ◍ tools Graph Update (queued 17h) │ │ Add a LOCAL MODELS panel │
44
+ │ 23m ✓ web-frontend ci (ci/npm-and-tap-publish) │ │ 1h api-refactor origin/feat/rel │
45
+ │ 24m ✓ web-frontend #18 Automate publishing APPROVED │ │ teach release_check to diff │
46
+ ╰──────────────────────────────────────────────────────────╯ ╰────────────────────────────────────╯
47
+ q quit r refresh s sort f filter g git tab pane enter detail ? help
48
+ ```
49
+
50
+ Sessions that share a working tree are marked contested (◉) — two sessions in
51
+ one checkout silently destroy each other's uncommitted work, and seeing it
52
+ happen is the first step to not doing it. The GitHub pane ranks by what it
53
+ costs to ignore: running first, then red (a failure must not scroll away),
54
+ then stuck-in-queue, then everything else by freshness.
55
+
56
+ Two files, stdlib only, Python 3.9+. macOS and Linux (curses). Read-only by
57
+ construction: it runs `gh`, read-only git plumbing, and (if present)
58
+ `claudectl`, and never writes to a tree, a registry or a session. Every data
59
+ source is optional — missing pieces degrade to a labelled gap, never an error.
60
+
61
+ ## Install
62
+
63
+ Homebrew (macOS and Linux):
64
+
65
+ ```bash
66
+ brew install gmhoward9289-ops/tap/leghorn
67
+ ```
68
+
69
+ npm:
70
+
71
+ ```bash
72
+ npm install -g leghorn
73
+ ```
74
+
75
+ pipx / pip:
76
+
77
+ ```bash
78
+ pipx install leghorn
79
+ ```
80
+
81
+ Debian and Ubuntu, from the signed apt repo — this also gets you `apt upgrade`:
82
+
83
+ ```bash
84
+ curl -fsSL https://gmhoward9289-ops.github.io/leghorn/leghorn-archive-keyring.asc | sudo gpg --dearmor -o /usr/share/keyrings/leghorn-archive-keyring.gpg
85
+ 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
86
+ sudo apt update
87
+ sudo apt install leghorn
88
+ ```
89
+
90
+ Or grab `leghorn_<version>_all.deb` from the
91
+ [latest release](https://github.com/gmhoward9289-ops/leghorn/releases/latest)
92
+ and `sudo apt install ./leghorn_<version>_all.deb`.
93
+
94
+ ## What it needs
95
+
96
+ - **git** — for the per-tree state and the commit feed.
97
+ - **gh** (authenticated) — for the GITHUB pane. Unauthenticated, the pane says
98
+ "cannot see github" rather than pretending nothing is happening; an empty
99
+ feed and a feed that cannot see are different facts.
100
+ - **claudectl** (optional) — session status and context columns. Without it
101
+ you still get names, trees, branches and git state.
102
+
103
+ Clones are discovered under `~/GitHub` (override: `LEGHORN_ROOT`).
104
+
105
+ ## Usage
106
+
107
+ ```bash
108
+ leghorn # three panes, refreshing every 5s
109
+ leghorn -i 2 # ...every 2s
110
+ leghorn --no-github # hide the GitHub pane (no gh calls at all)
111
+ leghorn --no-commits # hide the commit feed
112
+ leghorn --github-interval 120 # slower gh sweeps
113
+ ```
114
+
115
+ Keys: `q` quit · `r` refresh (including a gh sweep) · `s`/`f` cycle
116
+ sort/filter · `tab` cycle panes · `j`/`k` move · `enter` detail ·
117
+ `?` help — which explains what each screen and symbol *means*, not just the
118
+ keys.
119
+
120
+ The data layer is also a command of its own:
121
+
122
+ ```bash
123
+ python3 -m ccboard # one table of sessions, for a hook or a pipe
124
+ python3 -m ccboard --github # the CI/PR feed as plain text
125
+ python3 -m ccboard --json # records, for piping somewhere else
126
+ ```
127
+
128
+ ## Name
129
+
130
+ The Leghorn is the chicken breed that spots everything first and is never
131
+ quiet about it.
132
+
133
+ ## License
134
+
135
+ MIT
leghorn-0.1/README.md ADDED
@@ -0,0 +1,112 @@
1
+ # leghorn
2
+
3
+ [![ci](https://github.com/gmhoward9289-ops/leghorn/actions/workflows/ci.yml/badge.svg)](https://github.com/gmhoward9289-ops/leghorn/actions/workflows/ci.yml)
4
+
5
+ A full-screen live dashboard you leave open on a second monitor while many
6
+ Claude Code sessions work: every live session joined to its worktree and
7
+ **real git state**, your **GitHub CI and open PRs** with failures pinned until
8
+ they go green, and a commit feed across every repo, newest first.
9
+
10
+ ```
11
+ leghorn 20 sessions · 2 shared · 1 uncommitted · 3 ci red sort:attention filter:all 15:26:53
12
+ ╭─ SESSIONS ───────────────────────────────────────────────╮ ╭─ COMMITS ──────────────────────────╮
13
+ │◉ leghorn-fea my-mcp-server Needs Input 72% │ │ 9m tools fix/build-cwd │
14
+ │● session-a3 api-refactor Idle 58% │ │ fix(api): resolve paths agai…│
15
+ │● session-d8 web-frontend ~2 ↑1 Processing 50% │ │ 25m web-frontend origin/ci/pub │
16
+ ╰──────────────────────────────────────────────────────────╯ │ Automate publishing on relea…│
17
+ ╭─ GITHUB ─────────────────────────────────────────────────╮ │ 29m api-refactor │
18
+ │ 17h ✗ my-mcp-server Required PR Sections (fix/fields) │ │ Add an in-program help panel │
19
+ │ 17h ✗ my-mcp-server #593 Add field selection ← sections │ │ 41m tools │
20
+ │ 17h ◍ tools Graph Update (queued 17h) │ │ Add a LOCAL MODELS panel │
21
+ │ 23m ✓ web-frontend ci (ci/npm-and-tap-publish) │ │ 1h api-refactor origin/feat/rel │
22
+ │ 24m ✓ web-frontend #18 Automate publishing APPROVED │ │ teach release_check to diff │
23
+ ╰──────────────────────────────────────────────────────────╯ ╰────────────────────────────────────╯
24
+ q quit r refresh s sort f filter g git tab pane enter detail ? help
25
+ ```
26
+
27
+ Sessions that share a working tree are marked contested (◉) — two sessions in
28
+ one checkout silently destroy each other's uncommitted work, and seeing it
29
+ happen is the first step to not doing it. The GitHub pane ranks by what it
30
+ costs to ignore: running first, then red (a failure must not scroll away),
31
+ then stuck-in-queue, then everything else by freshness.
32
+
33
+ Two files, stdlib only, Python 3.9+. macOS and Linux (curses). Read-only by
34
+ construction: it runs `gh`, read-only git plumbing, and (if present)
35
+ `claudectl`, and never writes to a tree, a registry or a session. Every data
36
+ source is optional — missing pieces degrade to a labelled gap, never an error.
37
+
38
+ ## Install
39
+
40
+ Homebrew (macOS and Linux):
41
+
42
+ ```bash
43
+ brew install gmhoward9289-ops/tap/leghorn
44
+ ```
45
+
46
+ npm:
47
+
48
+ ```bash
49
+ npm install -g leghorn
50
+ ```
51
+
52
+ pipx / pip:
53
+
54
+ ```bash
55
+ pipx install leghorn
56
+ ```
57
+
58
+ Debian and Ubuntu, from the signed apt repo — this also gets you `apt upgrade`:
59
+
60
+ ```bash
61
+ curl -fsSL https://gmhoward9289-ops.github.io/leghorn/leghorn-archive-keyring.asc | sudo gpg --dearmor -o /usr/share/keyrings/leghorn-archive-keyring.gpg
62
+ 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
63
+ sudo apt update
64
+ sudo apt install leghorn
65
+ ```
66
+
67
+ Or grab `leghorn_<version>_all.deb` from the
68
+ [latest release](https://github.com/gmhoward9289-ops/leghorn/releases/latest)
69
+ and `sudo apt install ./leghorn_<version>_all.deb`.
70
+
71
+ ## What it needs
72
+
73
+ - **git** — for the per-tree state and the commit feed.
74
+ - **gh** (authenticated) — for the GITHUB pane. Unauthenticated, the pane says
75
+ "cannot see github" rather than pretending nothing is happening; an empty
76
+ feed and a feed that cannot see are different facts.
77
+ - **claudectl** (optional) — session status and context columns. Without it
78
+ you still get names, trees, branches and git state.
79
+
80
+ Clones are discovered under `~/GitHub` (override: `LEGHORN_ROOT`).
81
+
82
+ ## Usage
83
+
84
+ ```bash
85
+ leghorn # three panes, refreshing every 5s
86
+ leghorn -i 2 # ...every 2s
87
+ leghorn --no-github # hide the GitHub pane (no gh calls at all)
88
+ leghorn --no-commits # hide the commit feed
89
+ leghorn --github-interval 120 # slower gh sweeps
90
+ ```
91
+
92
+ Keys: `q` quit · `r` refresh (including a gh sweep) · `s`/`f` cycle
93
+ sort/filter · `tab` cycle panes · `j`/`k` move · `enter` detail ·
94
+ `?` help — which explains what each screen and symbol *means*, not just the
95
+ keys.
96
+
97
+ The data layer is also a command of its own:
98
+
99
+ ```bash
100
+ python3 -m ccboard # one table of sessions, for a hook or a pipe
101
+ python3 -m ccboard --github # the CI/PR feed as plain text
102
+ python3 -m ccboard --json # records, for piping somewhere else
103
+ ```
104
+
105
+ ## Name
106
+
107
+ The Leghorn is the chicken breed that spots everything first and is never
108
+ quiet about it.
109
+
110
+ ## License
111
+
112
+ MIT