v1.17.0
harness-bootstrap
Added
- The eight harness-management commands now ship with the plugin, not only into a bootstrapped
repo. Until nowharness-bootstrap/held a skill and nothing else, so/harness-tune,
/harness-toggle,/harness-update,/agent-permissions,/board-audit,/code-graph,
/docs-graphand/skill-wireexisted only after a bootstrap had written them into that
repo's.claude/commands/. Installing the plugin and typing/harness-tunefound nothing,
which read as the commands being broken rather than absent. They are now also in
harness-bootstrap/commands/, available anywhere as/harness-bootstrap:<name>. - The plugin copies are repo-agnostic where the scaffolded ones are substituted: they read the
deploy command, the destructive commands, the sensitive paths and the reviewer layout out of
settings.jsonand the roster and quote them back, rather than having intake's answers baked
in, and each one states plainly when the current directory has no.claude/. The delivery
commands stay scaffold-only on purpose - a/deploythat guesses is worse than no/deploy.
Changed
harness-toggle.pytoggles agent seats. A parked seat moves to.claude/disabled/agents/
and comes back byte-identically, exactly like a rule. Every seat is at least SOFT (--yes),
because the orchestrator's routing table still lists it and a parked seat leaves a dispatch
pointing at nothing;orchestrator,code-reviewer,security-reviewer,reviewerand
spec-guardianare HARD (the typed phrase), because only the orchestrator spawns and the review
seats are the code-review gate. Adding or retiring a seat is still/harness-update.
Both scanners already read.claude/disabled/agents/, so graph parity is unaffected - verified
byte-identical with a seat parked.
spec-builder
Fixed
- No change in this skill. Released with the repo 1.17.0 plugin-commands and viewer-editing work.
Tools
Downloadable builds for Windows, macOS and Linux are attached to this release.
harness-view
Added
- Command steps are editable. Selecting a command renders its numbered steps as a chain of
cards that can be reordered by dragging a step's number, switched off, and retitled, with one
Save writing everything at once and Revert discarding it. Nothing reaches disk until Save, so a
mis-drop costs a Revert rather than a file. POST /command, the write path behind it. It takes a bare command NAME and builds the path
itself, so the only file it can write is.claude/commands/<name>.md:.., a separator or a
drive letter fail the character check before a path exists. Same-origin gate asPOST /toggle,
512 KB cap, empty bodies refused.- Serialization is surgical: only the line spans the steps occupy are rewritten, and an unedited
step is written back as the bytes it arrived as. Three tests pin the consequences - every fixture
command re-serializes byte-identically when nothing was edited (line endings included),
switching a step off and back on restores the original, and reordering leaves a section's closing
prose at the end instead of dragging it up the page behind the step it was attached to.
Changed
- HARD-protected controls can be disabled from the page. They used to refuse with 403 and
offer no way forward, which meant the viewer could show a control it could never act on. The
request now takesconfirm_hard, and the page prompts for the phrasedisable <name>and sends
what was typed, byte for byte - nothing trimmed, nothing case-folded, so a near miss is refused
again. This is the same gate/harness-toggleapplies as--confirm; in the CLI the rule is
that the model must never compose the phrase, and in the browser there is no model in the loop
at all, so the human typing it is the gate. - Agent seats toggle.
kind: "agent"is accepted, the detail panel offers the control, and a
parked seat greys out in the graph. Every seat is at least SOFT and the sole spawner plus the
review seats are HARD - matchingharness-toggle.py, which gained the same tiers in this
release.
Install
unzip harness-bootstrap-v1.17.0.zip -d ~/.claude/skills/unzip spec-builder-v1.17.0.zip -d ~/.claude/skills/- Verify with
sha256sum -c SHA256SUMS