v0.6 — Harness Modernization
Harness modernization for current Claude Code (CLI 2.1.x). All 6 batches implemented and validated. Plan: ~/.claude/plans/claude_extensions/harness-modernization-20260527.md.
Existing installs: re-run install.sh to pick up the hook-wiring change (re-merges settings.json — moves auto-capture to SessionEnd, drops the removed ref-scorer hook — and cleans up symlinks from removed components).
Added
session-init.pyre-injects persisted context on session start/resume and after native compaction (source: "compact") — emits a recency-ordered summary of recentsession-progress.mdentries viaadditionalContext(stdout JSON, 4 KB cap, source-gated; diagnostics stay on stderr). Closes the write-only loop so persisted status returns to the model automatically instead of only being written to disk. NoUserPromptSubmitfallback needed (Batch 1 validated thatSessionStartre-fires on compaction).
Removed
- Context-compression subsystem — deleted
hooks/lib/compressor.py(4-tier Active→Compressed→Archived→Dropped rotation), the/compressskill, theref-scorer.pyPostToolUse hook +ref_scorer_mod.py, andhooks/lib/ref_tracker.py. An audit found the compressor had never fired in 29 sessions (nolast_compressionkey, noarchive.md, no## Compressed Contextsection) and its tiers were write-only; native context compaction now summarizes the live conversation. Removed theref-scorerentry fromsettings.json.referenceand ~125 associated tests. session-init.pyno longer computes active/stale counts or triggers compression — it incrementssession_countand logs a plain entry count.auto-capture.pyno longer writesscorestoref-cache.json(dead data with no remaining consumer).
Changed
README.mdstatusline example model labelSonnet 4.6 → Opus 4.7; README/DEVELOPER updated to drop the removed subsystem.auto-capturemoved from theStophook toSessionEnd— runs once at session teardown instead of after every response. Refactored into a reusablecapture(workdir)that resolves the project dir fromCLAUDE_PROJECT_DIR(fallback cwd) andchdirs before running git, fixing a non-project-CWD silent no-op; captures on all SessionEnd reasons (reason is logging-only, parsed best-effort so malformed/empty stdin never suppresses a capture).- Per-subagent model selection in the multi-agent skills —
/code-review,/security-audit,/critical-review, and/implement-batchnow spawn each subagent with an explicitmodel:opusfor the higher-stakes passes (architecture, correctness, injection/auth/crypto, implementers) andsonnetfor the rest. Review/audit agents never default tohaiku.CLAUDE_CODE_SUBAGENT_MODELoverrides these. Documented the mapping in DEVELOPER.md. - Shared review output-contract fragments — extracted the boilerplate that is identical verbatim between the
/code-reviewand/security-auditsubagent prompts (scope/context opening, findings-list-format line, closing instruction) intorules/review-output-contract.md; each skill inlines the fragments at<<shared:…>>markers. Audit found the field list, severity scale, rationalizations, and red flags are intentionally domain-specific (not duplicated), so they stay per-skill;/critical-reviewreviews plans and does not consume the fragments. Addedtests/test_review_contract.py.
Fixed
tests/test_fileutil.py— moved a module-level assignment below the deferred import to clear a long-standing ruff E402.