skiplevel 1.1.0__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.
@@ -0,0 +1,14 @@
1
+ __pycache__/
2
+ *.pyc
3
+ *.egg-info/
4
+ dist/
5
+ build/
6
+ .venv/
7
+ venv/
8
+ 360-review.html
9
+ 360-review.json
10
+ skiplevel-report.html
11
+ skiplevel-report.json
12
+ _autoscroll.html
13
+ .claude/
14
+ .repowise/
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Repowise
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.
@@ -0,0 +1,227 @@
1
+ Metadata-Version: 2.4
2
+ Name: skiplevel
3
+ Version: 1.1.0
4
+ Summary: Have a skip-level with your coding agents: The 360 Review, a two-sided performance review generated locally from your own transcripts.
5
+ Project-URL: Homepage, https://github.com/repowise-dev/skiplevel
6
+ Project-URL: Issues, https://github.com/repowise-dev/skiplevel/issues
7
+ Author: Repowise
8
+ License-Expression: MIT
9
+ License-File: LICENSE
10
+ Keywords: analytics,claude,claude-code,cli,codex,coding-agent,opencode,skiplevel
11
+ Classifier: Environment :: Console
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Software Development
19
+ Requires-Python: >=3.10
20
+ Requires-Dist: jinja2>=3.0
21
+ Description-Content-Type: text/markdown
22
+
23
+ <div align="center">
24
+
25
+ # skiplevel
26
+
27
+ **Have a skip-level with your coding agents.**
28
+
29
+ [![PyPI](https://img.shields.io/pypi/v/skiplevel?style=flat-square&logo=pypi&logoColor=white&label=pypi&color=6f54d6)](https://pypi.org/project/skiplevel/)
30
+ [![Python](https://img.shields.io/pypi/pyversions/skiplevel?style=flat-square&logo=python&logoColor=white&color=4c8bf5)](https://pypi.org/project/skiplevel/)
31
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](LICENSE)
32
+ [![Runs 100% local](https://img.shields.io/badge/runs-100%25_local-22c55e?style=flat-square)](#privacy)
33
+ [![Agents](https://img.shields.io/badge/agents-Claude_Code_·_Codex_·_opencode-f59e0b?style=flat-square)](#supported-agents)
34
+
35
+ <img src="https://raw.githubusercontent.com/repowise-dev/skiplevel/main/docs/hero.gif" alt="The 360 Review — a sample skiplevel report scrolling through the agent's scorecard" width="860">
36
+
37
+ </div>
38
+
39
+ You meet with the agent. The agent meets with you. Management hears both
40
+ sides. skiplevel turns the transcripts already sitting on your machine
41
+ into **The 360 Review**: a two-sided performance review between you and
42
+ your coding agents — Claude Code, Codex CLI, and opencode. HR regrets
43
+ scheduling the meeting.
44
+
45
+ ```
46
+ $ uvx skiplevel
47
+
48
+ skiplevel: scheduling a meeting with Claude Code + opencode's managers...
49
+ rifling through ~/.claude/projects ...
50
+ rifling through ~/.local/share/opencode ...
51
+ found 652 sessions (432 MB). Reading everything. Judging silently.
52
+ parsed 541 sessions across 31 days...
53
+ counted 52 'you're absolutely right's... oh no
54
+ tallied 34,849 tool calls and $4,062.61 in tokens...
55
+ found one file read 30 times in a single session. no further questions.
56
+ verdict: AGENT A- / YOU B. the committee has spoken.
57
+
58
+ Skip-level complete in 8.1s. The truth is in skiplevel-report.html
59
+ generated locally. nothing left your machine.
60
+ ```
61
+
62
+ One self-contained HTML file. Four themes: midnight (dark, default),
63
+ paper (printed HR document), terminal (green phosphor), and tabloid
64
+ (newsprint gossip). Switchable from a pill in the report, persistent,
65
+ and exports respect the active theme. Looks good in screenshots, which
66
+ is the point.
67
+
68
+ ## Quickstart
69
+
70
+ ```bash
71
+ uvx skiplevel # zero install, zero config
72
+ # or
73
+ pip install skiplevel
74
+ skiplevel
75
+ ```
76
+
77
+ Flags:
78
+
79
+ | flag | what it does |
80
+ |-------------|---------------------------------------------------------|
81
+ | `--harness H` | `auto` (default: review every agent with transcripts), `claude-code`, `codex`, or `opencode` |
82
+ | `--dir PATH` | transcripts root (default: each harness's own home) |
83
+ | `--out PATH` | output file (default `./skiplevel-report.html`) |
84
+ | `--json` | also dump the raw stats JSON next to the HTML |
85
+ | `--no-open` | do not open a browser |
86
+ | `--roast` | opt-in LLM roast via your own `claude` CLI (see below) |
87
+ | `--theme T` | initial theme: `midnight`, `paper`, `terminal`, `tabloid` |
88
+
89
+ ## Supported agents
90
+
91
+ | harness | where the diary lives |
92
+ |-------------|-------------------------------------------------------------|
93
+ | Claude Code | `~/.claude/projects/**/*.jsonl` |
94
+ | Codex CLI | `$CODEX_HOME/sessions/` and `archived_sessions/` rollout JSONL (default `~/.codex`) |
95
+ | opencode | `~/.local/share/opencode/opencode.db` (SQLite), or the older `storage/` JSON tree |
96
+
97
+ By default every harness with transcripts gets summoned into the same
98
+ meeting and one combined review. `--harness codex` (or `claude-code`,
99
+ `opencode`) reviews a single agent; `--dir` points at a non-standard
100
+ location, and the layout is sniffed automatically.
101
+
102
+ Notes per harness:
103
+
104
+ - **Codex CLI**: archived copies of active sessions are deduplicated,
105
+ forked-session token replays are not double-counted, and sessions
106
+ predating token telemetry (Sept 2025) parse fine with zero cost.
107
+ - **opencode**: child (subagent) sessions count toward tokens and tools
108
+ but not toward your prompt stats; opencode's own per-message cost is
109
+ used when present, otherwise the price table kicks in.
110
+
111
+ ## What gets covered in the meeting
112
+
113
+ **You** get graded on clarity, patience, civility, and trust calibration:
114
+ prompt lengths, a punch card of when you actually work, your late-night
115
+ ratio, interrupt rate, vocabulary (including your "fix" count and your
116
+ all-caps incidents), and the median seconds you give the agent before
117
+ demanding more.
118
+
119
+ **The agent** gets graded on efficiency, reliability, safety, and composure:
120
+ "you're absolutely right" counts, apology rates, files it read 4+ times in
121
+ one session (object permanence), retry storms (the same failing call, again,
122
+ with hope), sensitive file touches with timestamps, blast radius, and its
123
+ longest unsupervised tool-call chain.
124
+
125
+ **The relationship** gets the rest: apology asymmetry, a timeline of your
126
+ single longest session, an itemized Expense Report of Regret, compatibility
127
+ score, and yearbook superlatives.
128
+
129
+ Under the comedy there is a genuinely useful layer: sortable tables of
130
+ redundant reads, retry storms, sensitive file touches, per-session cost
131
+ trend, and top edited files. Real numbers, real receipts.
132
+
133
+ ## How the grading works
134
+
135
+ Two report cards — one for the agent, one for you — plus an archetype, a
136
+ compatibility score, and yearbook superlatives. None of it is vibes. Each
137
+ grade is a weighted average of four traits, each trait a number from 0 to 1
138
+ traced back to something you actually did:
139
+
140
+ | who | graded on (weights) |
141
+ |-------|--------------------------------------------------------------|
142
+ | agent | efficiency (35%), reliability (30%), composure (20%), safety (15%) |
143
+ | you | clarity (30%), patience (30%), civility (20%), trust (20%) |
144
+
145
+ Two opinions are baked into the math worth flagging up front: there's such a
146
+ thing as **too clear** (a 400-word prompt scores worse than an 80-word one),
147
+ and **too trusting** (accepting every edit unread isn't trust, it's absence —
148
+ the sweet spot is high, not maxed). Letter bands top out at A+ (≥0.93) and
149
+ bottom out at D; there is no F.
150
+
151
+ The full rubric — every formula, the six archetypes, the award thresholds, and
152
+ why cost is an honest estimate — is written up in
153
+ **[docs/scoring.md](docs/scoring.md)**. It is precise and it is not on your side.
154
+
155
+ ## Privacy
156
+
157
+ Everything runs locally. The report is one HTML file with zero external
158
+ requests: no CDN, no fonts, no analytics, no telemetry, no accounts.
159
+
160
+ Don't take our word for it: **grep the source for `requests` or `urllib`.
161
+ You will find nothing.** Then grep the generated HTML for `http`; you will
162
+ find two footer links (this repo and the Repowise team) and nothing else.
163
+
164
+ Roast mode is opt-in and sends **only aggregated numbers** (counts, ratios,
165
+ the top-ten word list) to your own Claude account through your own `claude`
166
+ CLI. No prompts, no code, no file paths leave your machine, ever.
167
+
168
+ ## Roast mode
169
+
170
+ ```bash
171
+ skiplevel --roast
172
+ ```
173
+
174
+ If the `claude` CLI is installed, the aggregated stats are sent to it with a
175
+ 60 second timeout, and three lines of the report (the manager's comment, the
176
+ agent's review of you, and the share-card verdict) are written fresh for your
177
+ specific numbers. On any failure it falls back silently to the built-in
178
+ copy. Default mode never calls any LLM and is fully deterministic.
179
+
180
+ ## Sharing
181
+
182
+ Built to be screenshotted. Every card grows copy and save buttons on
183
+ hover: copy puts a PNG straight on your clipboard, save downloads it.
184
+ The 1200x630 share card at the bottom has its own copy and save buttons,
185
+ plus a GIF export that plays the whole review as a three-panel story —
186
+ the two grades, then the agent's scorecard (its four traits and receipts),
187
+ then yours (your traits, archetype, and verdict) — looped in the current
188
+ theme (encoded in the page, no dependencies, nothing uploaded). Card export
189
+ uses an inline SVG foreignObject render, which works in Chromium and Firefox;
190
+ if your browser disagrees, the share card buttons are the reliable path.
191
+
192
+ ## How it works
193
+
194
+ - Streams every transcript line, never loads files into memory, skips
195
+ anything malformed (and counts it). A multi-GB transcript directory takes
196
+ seconds. opencode's SQLite database is opened strictly read-only.
197
+ - Harness-specific logic (scan paths, event normalization) lives behind a
198
+ small adapter interface: `adapters.py` (Claude Code + registry),
199
+ `adapter_codex.py`, `adapter_opencode.py`. Everything downstream is
200
+ harness-agnostic; tool names are normalized to one vocabulary so
201
+ "redundant reads" mean the same thing everywhere.
202
+ - Deduplicates token usage by API message id (Claude Code writes one line per
203
+ content block, repeating the same usage object, which would otherwise
204
+ overcount cost by roughly 2.6x). Codex cumulative token counters are
205
+ converted to per-turn deltas, and the cached share of input is split out
206
+ before pricing.
207
+ - Costs come from a hardcoded price table per model in `constants.py`, with
208
+ cache reads and writes priced separately (opencode's own recorded cost
209
+ wins when it has one). Flat-rate subscription usage is priced at API
210
+ rates, which is why the report calls it an estimate. Waste estimates
211
+ (re-reads, doomed retries) are labeled as estimates.
212
+ - The grading rubric — traits, weights, bands, archetypes, awards, and the
213
+ waste/cost estimates — is documented in [docs/scoring.md](docs/scoring.md).
214
+ - Schema notes from inspecting real transcripts live in
215
+ [docs/schema-notes.md](docs/schema-notes.md) (Claude Code),
216
+ [docs/schema-notes-codex.md](docs/schema-notes-codex.md), and
217
+ [docs/schema-notes-opencode.md](docs/schema-notes-opencode.md).
218
+
219
+ ## Roadmap
220
+
221
+ - Per-agent comparison reviews (which of your reports earned the promotion)
222
+ - Trend vs your last skip-level ("you interrupted 12% less this month. growth.")
223
+ - More harnesses (Gemini CLI, Copilot CLI)
224
+
225
+ ## License
226
+
227
+ MIT. Built by the [Repowise](https://github.com/repowise-dev/repowise) team.
@@ -0,0 +1,205 @@
1
+ <div align="center">
2
+
3
+ # skiplevel
4
+
5
+ **Have a skip-level with your coding agents.**
6
+
7
+ [![PyPI](https://img.shields.io/pypi/v/skiplevel?style=flat-square&logo=pypi&logoColor=white&label=pypi&color=6f54d6)](https://pypi.org/project/skiplevel/)
8
+ [![Python](https://img.shields.io/pypi/pyversions/skiplevel?style=flat-square&logo=python&logoColor=white&color=4c8bf5)](https://pypi.org/project/skiplevel/)
9
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](LICENSE)
10
+ [![Runs 100% local](https://img.shields.io/badge/runs-100%25_local-22c55e?style=flat-square)](#privacy)
11
+ [![Agents](https://img.shields.io/badge/agents-Claude_Code_·_Codex_·_opencode-f59e0b?style=flat-square)](#supported-agents)
12
+
13
+ <img src="https://raw.githubusercontent.com/repowise-dev/skiplevel/main/docs/hero.gif" alt="The 360 Review — a sample skiplevel report scrolling through the agent's scorecard" width="860">
14
+
15
+ </div>
16
+
17
+ You meet with the agent. The agent meets with you. Management hears both
18
+ sides. skiplevel turns the transcripts already sitting on your machine
19
+ into **The 360 Review**: a two-sided performance review between you and
20
+ your coding agents — Claude Code, Codex CLI, and opencode. HR regrets
21
+ scheduling the meeting.
22
+
23
+ ```
24
+ $ uvx skiplevel
25
+
26
+ skiplevel: scheduling a meeting with Claude Code + opencode's managers...
27
+ rifling through ~/.claude/projects ...
28
+ rifling through ~/.local/share/opencode ...
29
+ found 652 sessions (432 MB). Reading everything. Judging silently.
30
+ parsed 541 sessions across 31 days...
31
+ counted 52 'you're absolutely right's... oh no
32
+ tallied 34,849 tool calls and $4,062.61 in tokens...
33
+ found one file read 30 times in a single session. no further questions.
34
+ verdict: AGENT A- / YOU B. the committee has spoken.
35
+
36
+ Skip-level complete in 8.1s. The truth is in skiplevel-report.html
37
+ generated locally. nothing left your machine.
38
+ ```
39
+
40
+ One self-contained HTML file. Four themes: midnight (dark, default),
41
+ paper (printed HR document), terminal (green phosphor), and tabloid
42
+ (newsprint gossip). Switchable from a pill in the report, persistent,
43
+ and exports respect the active theme. Looks good in screenshots, which
44
+ is the point.
45
+
46
+ ## Quickstart
47
+
48
+ ```bash
49
+ uvx skiplevel # zero install, zero config
50
+ # or
51
+ pip install skiplevel
52
+ skiplevel
53
+ ```
54
+
55
+ Flags:
56
+
57
+ | flag | what it does |
58
+ |-------------|---------------------------------------------------------|
59
+ | `--harness H` | `auto` (default: review every agent with transcripts), `claude-code`, `codex`, or `opencode` |
60
+ | `--dir PATH` | transcripts root (default: each harness's own home) |
61
+ | `--out PATH` | output file (default `./skiplevel-report.html`) |
62
+ | `--json` | also dump the raw stats JSON next to the HTML |
63
+ | `--no-open` | do not open a browser |
64
+ | `--roast` | opt-in LLM roast via your own `claude` CLI (see below) |
65
+ | `--theme T` | initial theme: `midnight`, `paper`, `terminal`, `tabloid` |
66
+
67
+ ## Supported agents
68
+
69
+ | harness | where the diary lives |
70
+ |-------------|-------------------------------------------------------------|
71
+ | Claude Code | `~/.claude/projects/**/*.jsonl` |
72
+ | Codex CLI | `$CODEX_HOME/sessions/` and `archived_sessions/` rollout JSONL (default `~/.codex`) |
73
+ | opencode | `~/.local/share/opencode/opencode.db` (SQLite), or the older `storage/` JSON tree |
74
+
75
+ By default every harness with transcripts gets summoned into the same
76
+ meeting and one combined review. `--harness codex` (or `claude-code`,
77
+ `opencode`) reviews a single agent; `--dir` points at a non-standard
78
+ location, and the layout is sniffed automatically.
79
+
80
+ Notes per harness:
81
+
82
+ - **Codex CLI**: archived copies of active sessions are deduplicated,
83
+ forked-session token replays are not double-counted, and sessions
84
+ predating token telemetry (Sept 2025) parse fine with zero cost.
85
+ - **opencode**: child (subagent) sessions count toward tokens and tools
86
+ but not toward your prompt stats; opencode's own per-message cost is
87
+ used when present, otherwise the price table kicks in.
88
+
89
+ ## What gets covered in the meeting
90
+
91
+ **You** get graded on clarity, patience, civility, and trust calibration:
92
+ prompt lengths, a punch card of when you actually work, your late-night
93
+ ratio, interrupt rate, vocabulary (including your "fix" count and your
94
+ all-caps incidents), and the median seconds you give the agent before
95
+ demanding more.
96
+
97
+ **The agent** gets graded on efficiency, reliability, safety, and composure:
98
+ "you're absolutely right" counts, apology rates, files it read 4+ times in
99
+ one session (object permanence), retry storms (the same failing call, again,
100
+ with hope), sensitive file touches with timestamps, blast radius, and its
101
+ longest unsupervised tool-call chain.
102
+
103
+ **The relationship** gets the rest: apology asymmetry, a timeline of your
104
+ single longest session, an itemized Expense Report of Regret, compatibility
105
+ score, and yearbook superlatives.
106
+
107
+ Under the comedy there is a genuinely useful layer: sortable tables of
108
+ redundant reads, retry storms, sensitive file touches, per-session cost
109
+ trend, and top edited files. Real numbers, real receipts.
110
+
111
+ ## How the grading works
112
+
113
+ Two report cards — one for the agent, one for you — plus an archetype, a
114
+ compatibility score, and yearbook superlatives. None of it is vibes. Each
115
+ grade is a weighted average of four traits, each trait a number from 0 to 1
116
+ traced back to something you actually did:
117
+
118
+ | who | graded on (weights) |
119
+ |-------|--------------------------------------------------------------|
120
+ | agent | efficiency (35%), reliability (30%), composure (20%), safety (15%) |
121
+ | you | clarity (30%), patience (30%), civility (20%), trust (20%) |
122
+
123
+ Two opinions are baked into the math worth flagging up front: there's such a
124
+ thing as **too clear** (a 400-word prompt scores worse than an 80-word one),
125
+ and **too trusting** (accepting every edit unread isn't trust, it's absence —
126
+ the sweet spot is high, not maxed). Letter bands top out at A+ (≥0.93) and
127
+ bottom out at D; there is no F.
128
+
129
+ The full rubric — every formula, the six archetypes, the award thresholds, and
130
+ why cost is an honest estimate — is written up in
131
+ **[docs/scoring.md](docs/scoring.md)**. It is precise and it is not on your side.
132
+
133
+ ## Privacy
134
+
135
+ Everything runs locally. The report is one HTML file with zero external
136
+ requests: no CDN, no fonts, no analytics, no telemetry, no accounts.
137
+
138
+ Don't take our word for it: **grep the source for `requests` or `urllib`.
139
+ You will find nothing.** Then grep the generated HTML for `http`; you will
140
+ find two footer links (this repo and the Repowise team) and nothing else.
141
+
142
+ Roast mode is opt-in and sends **only aggregated numbers** (counts, ratios,
143
+ the top-ten word list) to your own Claude account through your own `claude`
144
+ CLI. No prompts, no code, no file paths leave your machine, ever.
145
+
146
+ ## Roast mode
147
+
148
+ ```bash
149
+ skiplevel --roast
150
+ ```
151
+
152
+ If the `claude` CLI is installed, the aggregated stats are sent to it with a
153
+ 60 second timeout, and three lines of the report (the manager's comment, the
154
+ agent's review of you, and the share-card verdict) are written fresh for your
155
+ specific numbers. On any failure it falls back silently to the built-in
156
+ copy. Default mode never calls any LLM and is fully deterministic.
157
+
158
+ ## Sharing
159
+
160
+ Built to be screenshotted. Every card grows copy and save buttons on
161
+ hover: copy puts a PNG straight on your clipboard, save downloads it.
162
+ The 1200x630 share card at the bottom has its own copy and save buttons,
163
+ plus a GIF export that plays the whole review as a three-panel story —
164
+ the two grades, then the agent's scorecard (its four traits and receipts),
165
+ then yours (your traits, archetype, and verdict) — looped in the current
166
+ theme (encoded in the page, no dependencies, nothing uploaded). Card export
167
+ uses an inline SVG foreignObject render, which works in Chromium and Firefox;
168
+ if your browser disagrees, the share card buttons are the reliable path.
169
+
170
+ ## How it works
171
+
172
+ - Streams every transcript line, never loads files into memory, skips
173
+ anything malformed (and counts it). A multi-GB transcript directory takes
174
+ seconds. opencode's SQLite database is opened strictly read-only.
175
+ - Harness-specific logic (scan paths, event normalization) lives behind a
176
+ small adapter interface: `adapters.py` (Claude Code + registry),
177
+ `adapter_codex.py`, `adapter_opencode.py`. Everything downstream is
178
+ harness-agnostic; tool names are normalized to one vocabulary so
179
+ "redundant reads" mean the same thing everywhere.
180
+ - Deduplicates token usage by API message id (Claude Code writes one line per
181
+ content block, repeating the same usage object, which would otherwise
182
+ overcount cost by roughly 2.6x). Codex cumulative token counters are
183
+ converted to per-turn deltas, and the cached share of input is split out
184
+ before pricing.
185
+ - Costs come from a hardcoded price table per model in `constants.py`, with
186
+ cache reads and writes priced separately (opencode's own recorded cost
187
+ wins when it has one). Flat-rate subscription usage is priced at API
188
+ rates, which is why the report calls it an estimate. Waste estimates
189
+ (re-reads, doomed retries) are labeled as estimates.
190
+ - The grading rubric — traits, weights, bands, archetypes, awards, and the
191
+ waste/cost estimates — is documented in [docs/scoring.md](docs/scoring.md).
192
+ - Schema notes from inspecting real transcripts live in
193
+ [docs/schema-notes.md](docs/schema-notes.md) (Claude Code),
194
+ [docs/schema-notes-codex.md](docs/schema-notes-codex.md), and
195
+ [docs/schema-notes-opencode.md](docs/schema-notes-opencode.md).
196
+
197
+ ## Roadmap
198
+
199
+ - Per-agent comparison reviews (which of your reports earned the promotion)
200
+ - Trend vs your last skip-level ("you interrupted 12% less this month. growth.")
201
+ - More harnesses (Gemini CLI, Copilot CLI)
202
+
203
+ ## License
204
+
205
+ MIT. Built by the [Repowise](https://github.com/repowise-dev/repowise) team.
@@ -0,0 +1,37 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "skiplevel"
7
+ version = "1.1.0"
8
+ description = "Have a skip-level with your coding agents: The 360 Review, a two-sided performance review generated locally from your own transcripts."
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ requires-python = ">=3.10"
12
+ authors = [{ name = "Repowise" }]
13
+ keywords = ["skiplevel", "claude", "claude-code", "codex", "opencode", "coding-agent", "analytics", "cli"]
14
+ classifiers = [
15
+ "Programming Language :: Python :: 3",
16
+ "Programming Language :: Python :: 3.10",
17
+ "Programming Language :: Python :: 3.11",
18
+ "Programming Language :: Python :: 3.12",
19
+ "Programming Language :: Python :: 3.13",
20
+ "Environment :: Console",
21
+ "Topic :: Software Development",
22
+ "Operating System :: OS Independent",
23
+ ]
24
+ dependencies = ["jinja2>=3.0"]
25
+
26
+ [project.urls]
27
+ Homepage = "https://github.com/repowise-dev/skiplevel"
28
+ Issues = "https://github.com/repowise-dev/skiplevel/issues"
29
+
30
+ [project.scripts]
31
+ skiplevel = "skiplevel.cli:main"
32
+
33
+ [tool.hatch.build.targets.wheel]
34
+ packages = ["skiplevel"]
35
+
36
+ [tool.hatch.build.targets.sdist]
37
+ include = ["skiplevel", "README.md", "LICENSE"]
@@ -0,0 +1,3 @@
1
+ """skiplevel: The 360 Review for you and your coding agent."""
2
+
3
+ __version__ = "1.1.0"