Releases: moongioh/harness-scope
Release list
0.1.4 — the tool was pointed at itself
Source release — PyPI and npm still serve 0.1.3.
pip install hscope/npx -y hscopegive
you 0.1.3 until this is uploaded. To run 0.1.4 today, use this tag from source
(docs/RUN-FROM-SOURCE.md).
Two rules were reporting things that were not true, and a third was reporting a number that could
not be false. All three were found by pointing HarnessScope at the workspace that builds it — and
not believing its top finding.
Fixed
- A paged read is not a re-read. The duplicate key was
(agent_id, path), so reading a large
file in chunks (offset=501) was indistinguishable from reading it twice, and R8 charged every
new chunk as tokens the context already held. 692,292 of 854,334 reported waste tokens (81%)
were that. The key now carries the span. R13 (dead-context) goes up as a result: reads that
were wrongly deduped had been excluded from its analysis, so it had been under-reporting. - R6 no longer reads today's disk to judge a past session. Plan status came from the
status:
frontmatter at judge time, so approving a plan rewrote the verdicts of sessions that had already
ended: 21fail-severity violations vanished from a three-week-old session that had not changed
by a byte — and, the other way, sessions that really did implement under a proposed plan were
absolved the moment it was approved. The status now comes from the session's own transcript, and
a status the transcript never showed is not judged at all: the harness records a read's
length, not its content, so inferring one from disk was the bug itself.
Changed
- R1, R2 and R6 ship disabled, each carrying its measured false-positive rate in a new
first-classprecisionfield. They answer semantic questions — is this a domain question? was
this fan-out warranted? — with syntactic tests, and 84% of R2's violations were turns invoking a
command whose whole job is to fan out. A proxy that does not track the concept cannot be tuned
into one. Off is not the point; off, and here is why, with the number is the point. - R8 is a
meter: its opportunities are its violations by construction, so "0% compliance"
was an identity, not a finding. It reports its quantity and no ratio. - A first run now judges with 10 rules, all of them things a transcript can actually settle.
hscope onboardnames the rest out loud: disabled, so not judged at all.
A finding you cannot reproduce from the raw records is a claim, not a measurement. hscope doctor
already enforced that on the parser; this release turns the same standard on the rules.
docs/MULTI-AGENT.md
carries the query that catches it.
verify_all 20/20 on Windows, macOS and Linux. doctor holds every invariant over 289 sessions
spanning Claude Code 2.1.165 … 2.1.207 (29 harness versions).
0.1.3 - live observation
hscope --watch keeps the circuit live while a session runs — and withholds judgment on the turn that is still running. It observes only: no hook in your session, nothing is blocked, and a violation on screen is one a human has to act on.
Added
hscope --watch(andhscope ingest --watch): 2s mtime scan → hash only the files that moved → re-judge only those sessions. The viewer polls/api/metaand refreshes itself, silently. Without--watch, no polling at all.- A turn in flight is shown, not judged — no terminal
stop_reasonand the transcript was written to within 15 min. Judging it would fire the verification gate on the very turn about to run the check, and its streamed token usage is not final until the last record lands. It is judged the moment the turn ends — or once its liveness window lapses, if you interrupt it. A verdict deferred must not become a verdict skipped. verify_watch— 24 assertions, including the mutation case: with the in-flight guard off, the false verdicts really do fire.verify_allis now 20 harnesses.
Fixed
- A half-written last line of a live transcript counts as
truncated_tail, notbad_lines— it is the normal state of a running session. Damage on any other line (and a broken last line in a file that did end in a newline) still counts.
Verified against
hscope doctor holds every invariant over a 289-session corpus spanning Claude Code 2.1.165 … 2.1.207 (29 harness versions).
On PyPI and npm this follows 0.1.1 — 0.1.2 was cut in the repo but never uploaded, so its discovery-metadata pass ships here.
hscope 0.1.1
MCP Registry release: io.github.moongioh/hscope is live on registry.modelcontextprotocol.io. Ownership markers only (npm mcpName, README mcp-name); no functional change. Install: pip install hscope / npx -y hscope.
hscope 0.1.0
First public release.
Turn-level governance observability for Claude Code sessions — parse your transcripts into SQLite locally, judge them against your own workspace rules (de-domained archetype library + hscope compile), and see the harness as a circuit: gate lane, round trips, token loss, rule health. MCP server included (8 read tools + 2 write tools gated behind HSCOPE_MCP_WRITE=1). No LLM inside the tool; nothing leaves your machine.
pip install hscope # or: pipx install hscope · npx -y hscope
hscope # zero-config: scan → ingest → judge → doctor → viewer
hscope demo --serve # see it on a synthetic corpus without giving it your transcriptsTranscript invariants (hscope doctor, 9 invariants) verified against transcripts produced by Claude Code up to 2.1.206 (Windows; the 3-OS CI matrix covers parser/rule behavior, not transcript generation). If a harness update breaks the format, doctor names the invariant instead of judging silently.
Full changelog: CHANGELOG.md