Skip to content

Releases: moongioh/harness-scope

0.1.4 — the tool was pointed at itself

Choose a tag to compare

@moongioh moongioh released this 13 Jul 07:31

Source release — PyPI and npm still serve 0.1.3. pip install hscope / npx -y hscope give
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: 21 fail-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-class precision field. 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 onboard names 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

Choose a tag to compare

@moongioh moongioh released this 13 Jul 05:35

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 (and hscope ingest --watch): 2s mtime scan → hash only the files that moved → re-judge only those sessions. The viewer polls /api/meta and refreshes itself, silently. Without --watch, no polling at all.
  • A turn in flight is shown, not judged — no terminal stop_reason and 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_all is now 20 harnesses.

Fixed

  • A half-written last line of a live transcript counts as truncated_tail, not bad_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

Choose a tag to compare

@moongioh moongioh released this 10 Jul 11:44

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

Choose a tag to compare

@moongioh moongioh released this 10 Jul 06:49

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 transcripts

Transcript 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