Releases: nguyenhx2/agent-harness-bootstrap
Release list
v1.19.1
harness-bootstrap
No change to the skill. The version moves with harness-view, which fixes a serve that could not
start on Windows and reworks the viewer's file panel, filters and dialogs.
spec-builder
No functional change. The version moves with harness-bootstrap.
Tools
Downloadable builds for Windows, macOS and Linux are attached to this release.
harness-view
Fixed
servestarts on Windows. It bound one hardcoded port and gave up. Windows reserves bands of
the ephemeral range for Hyper-V and WSL, and a bind inside one fails withos error 10013- an
ACCESS error, not an in-use error - so the default 7420 failed out of the box on a normal Windows
11 machine, with a message that read like a permissions problem, and left nothing listening. It
now falls back through a candidate list and prints the port it took. The browser is opened AFTER
the bind, since the port asked for is not always the port bound.- Reading and editing a file are one box. They were two, each claiming
flex: 1 1 autowith its
own minimum height, so an editor nobody had opened still reserved 140px and pushed the file's own
content below a band of empty space - and Edit then opened a second framed box under the first,
showing the same file twice. Now one box: the file's name, a Preview/Code switch and Edit floating
at its top right, and Edit swaps the body in place. The file loads on open. - A control that does not apply says so. A repository with no board simply had no
taskfilter,
and the Master plan button removed itself, so one repo showed a control and another showed a gap.
Both now appear disabled, with "not available for this project" on hover. - A long list uses the dialog it is in.
tools (44)scrolled inside a hardcoded 210px with
roughly 200px of dialog empty beneath it. - The completion popup lists its own triggers -
@anything,`a rule or agent,/a
command,docs/a file path - pinned, so the row explaining how to open the list is not itself
below the list it explains.
Changed
- The header carries a mark, the name Harness View, and one line saying what the tool is for.
harness-viewin bold monospace read as a command someone had pasted into the toolbar.
Install
unzip harness-bootstrap-v1.19.1.zip -d ~/.claude/skills/unzip spec-builder-v1.19.1.zip -d ~/.claude/skills/- Verify with
sha256sum -c SHA256SUMS
v1.19.0
harness-bootstrap
Added
- A bar for what earns a task, and a hook that holds it. Task creation was unbounded: nothing
said what earns a task, and executing one agreed piece of work could leave a board with a dozen
rows nobody approved..claude/rules/task-tracking.mdnow states it plainly - a task is work the
USER agreed to, tasks are few and large, executing a task never creates more, and no agent opens
one on its own, subagents included. The newguard-task-scopehook refuses to create a task file
whoserequested_by:is missing, is a bareuser, or is an agent name (an agent cannot approve
its own task), and one with fewer than two real acceptance criteria. Both hook flavours, six new
eval cases, and the eval is now 112/112 per flavour. /new-taskasks and waits. Unless your own message already asked for the task, the command
puts it to you withAskUserQuestionbefore writing anything - the same discipline
/harness-toggleuses for a protected control, where a confirmation counts only when you gave it
yourself. The hook records the claim; the asking is the gate.
Fixed
- The scanner a bootstrapped repo runs gained the per-folder
CLAUDE.mdsupport that shipped
in harness-view a version ago but never reached this scanner. A project withsrc/api/CLAUDE.md
now shows all its contracts in the graph, not just the root one. - The published "bytes the model must write" figure stopped tracking the size of rules this skill
SHIPS. It was estimated asmedian(shipped rule size) x 3, so improving a shipped rule inflated
the figure and dropped the reduction headline. It is now a declared per-rule size with the basis
stated, plus a measuredvars.json.
spec-builder
No functional change. The version moves with harness-bootstrap.
Tools
Downloadable builds for Windows, macOS and Linux are attached to this release.
harness-view
Added
assessreports a per-folder contract that governs a subtree and says almost nothing. A
nestedCLAUDE.mdapplies to every change under its directory, so an empty one is worse than
none: the folder reads as governed and whoever opens the file to learn how stops looking. Whether
the rules inside are right is not something a scanner can know, and it does not pretend to.
Install
unzip harness-bootstrap-v1.19.0.zip -d ~/.claude/skills/unzip spec-builder-v1.19.0.zip -d ~/.claude/skills/- Verify with
sha256sum -c SHA256SUMS
v1.18.2
harness-bootstrap
No change to the skill itself. The version moves with harness-view, which gained per-folder
instruction-file support, and with the landing page.
spec-builder
No functional change. The version moves with harness-bootstrap.
Tools
Downloadable builds for Windows, macOS and Linux are attached to this release.
harness-view
Added
-
Every
CLAUDE.md, not just the one at the root. A project can carry one per folder - Claude
Code reads the copy governing the directory being worked in - and this viewer treated it as a
single file at the top. A repo withsrc/CLAUDE.md,src/api/CLAUDE.mdanddocs/CLAUDE.md
showed one contract in the graph and obeyed four, which is worse than showing none: a viewer
whose whole job is "here is what governs this repository" is believed. Every copy is now its own
node, and every copy is editable.AGENTS.mdis treated the same way.The walk is capped at 8 levels and 200 files, skips dot-directories and vendored or build trees -
aCLAUDE.mdundernode_modulesbelongs to someone else's project - and does not follow
directory symlinks. The nested path is validated component by component before any path is built,
and the last component must be the file itself. -
Tool categories in the roster editor carry colour. The catalogue is 44 rows and every chip on it
was the same grey, which leaves the category unable to answer the question it exists for.
executeandagent- the two worth hesitating over while ticking boxes - now stand off the page.
Fixed
- A button's kind is set where the button is made.
ui-steps.jshad been inferring colour from the
sprite each button carried, so renaming an icon inui.jswould silently drain the colour out of
a panel in another file with nothing failing.
Install
unzip harness-bootstrap-v1.18.2.zip -d ~/.claude/skills/unzip spec-builder-v1.18.2.zip -d ~/.claude/skills/- Verify with
sha256sum -c SHA256SUMS
v1.18.1
harness-bootstrap
Fixed
- Updating to a new skill version no longer invents conflicts.
.gitattributeschecks this
repo's text out native, so a skill cloned on Windows holds CRLF while the same skill in WSL, in
CI, or unzipped from a release holds LF. Bootstrap from one and update from the other and every
text asset differed by one byte per line: a real 1.17.0 to 1.18.0 upgrade reported 14 conflicts,
seven of them fake - five.gitkeepfiles,.claude/.gitignoreandspawn-allowlist,
identical in every character. A reconciliation queue nobody can read is a reconciliation queue
nobody works, and taking a new version is the one moment when reading it matters most. The
scaffolder now forgives line endings and nothing else: a file you edited still conflicts, and a
binary asset is still compared byte for byte. - spec-builder ships 8 optional spec sections, not 9. The README was right and
docs/FLOWS.md,
the presentation outline and the deck in three languages were wrong. The number is now derived
from the manifest and checked on every surface that states it, in all three languages.
spec-builder
Fixed
- The published count of optional spec sections is 8, not 9, and it is now derived from
assets/manifest.jsonrather than remembered. A section is optional exactly when its entry
carries awhenflag; the core six plus the folder README are unconditional.
Tools
Downloadable builds for Windows, macOS and Linux are attached to this release.
harness-view
Added
- Instruction files are nodes.
AGENTS.md,CLAUDE.mdand the per-tool equivalents appear in
the leftmost column - they are the contract every seat reads, so they sit before the rules - and
they are editable in place. New edges show which seats a contract briefs, which rules it cites,
and thatCLAUDE.mdimportsAGENTS.md. Paths were researched rather than assumed, and the one
that could not be confirmed against a first-party source is marked unverified instead of
being claimed. - The routing tiers are visible. The Direct / Standard / Guarded table is parsed out of
whichever file states it and rendered as its own panel, and any seat the table names carries a
tier badge. Direct and Standard name nobody, so nobody is badged for them. - A step's table is edited in a grid, not by hand-aligning pipes. A real routing table is 17
rows; it used to arrive as a wall of|in a box four lines tall. Rows and columns can be added
and removed, and a one-cell edit produces a one-line diff, because each row is written back from
its original bytes unless its cells actually changed. @opens a picker over everything taggable - seats, rules, skills, commands and repository
paths - with no word typed, and inserts the citation this repo actually uses for whatever is
chosen. The three older triggers each required knowing which kind of thing you were citing,
which is fine once you know the harness and useless before you do.
Changed
- Skills have their own Flow column. Sharing the hooks column reads fine with two skills and falls
apart with twenty: a column of purple ran through the middle of six yellow hooks and the
enforcement layer - the part of the picture that says what can say no - could not be picked out. - Dialogs are 760px, 1040px for the roster editor, and resizable. Footer buttons carry one of
six colours so a destructive action is never one careless click from a confirm. - The edge animation runs at 0.22 px per frame instead of 0.7. At the old speed the eye tracked the
motion instead of the direction it was pointing.
Fixed
- A CRLF file made the instruction editor report itself unsaved forever: a textarea normalises to
LF, so the buffer never equalled the stored original. - Two tests passed only on an older checkout.
.gitattributesmarks*.mdas text, so a fresh
Windows clone gets CRLF fixtures and both compared them against LF literals.
Install
unzip harness-bootstrap-v1.18.1.zip -d ~/.claude/skills/unzip spec-builder-v1.18.1.zip -d ~/.claude/skills/- Verify with
sha256sum -c SHA256SUMS
v1.18.0
harness-bootstrap
Changed
-
Process is now proportional to the change. Until now every change ran the same route: through
the orchestrator, decomposed into tasks, with a reviewer pass after each agent. For a one-line
backend fix that meant a planning pass, a task file, a test agent and two reviewers before
anything landed - slow enough that people stop reaching for the harness on small work, which is
most work.AGENTS.mdnow carries a tier table, read before anything is dispatched:- Direct - one module, reversible, no contract, schema, auth, payment or infrastructure
touched. The owning agent is called straight. No orchestrator, no task file. - Standard - one domain, several files, or an FR behind it. Still the owning agent; a task
file only when the work has to survive a compacted session. - Guarded - two or more domains, or schema, auth, money, a public contract, a migration, a
deploy, or personal data. The orchestrator, and the full flow.
Choosing a heavier tier than the change needs is now stated to be a defect, not caution.
- Direct - one module, reversible, no contract, schema, auth, payment or infrastructure
-
The orchestrator hands back work it should not have taken. Its description and its dispatch
section both say so: a single-domain assignment off the Guarded list is named back to the seat
that owns it. Decomposing anyway is pure overhead - every sub-task is a dispatch, a brief, a board
row and a log entry. -
Gates run once, on the branch, not after every agent.
/review-changesis that boundary. A
reviewer dispatched after each agent re-reads the same files once per agent and reports the same
findings each time, which is most of what made a small change feel expensive. Security review
belongs to that boundary and to any moment you ask for it; it is no longer a per-task step, and
security-reviewer,code-reviewerandreviewereach say so in their own description. -
The orchestrator waits instead of checking. It no longer polls a running agent for progress,
and it no longer re-derives a finished agent's conclusion to satisfy itself that the work
happened. When the agent reports, the check is on the result and it is one call:git statusand
git diff --statanswer "did this land, in the files it said". The full diff is read for a
Guarded change, or when the stat disagrees with the report. -
The other half of that trust: dev agents report evidence, not status. Nobody re-runs their
work to find out whether it happened, so a bare "done" is no longer a result. The seat names the
files it changed, the criterion each change satisfies, the command whose output proves it, and -
explicitly - whatever it could not verify.
spec-builder
No functional change in this release. The version moves with harness-bootstrap: the two skills
always share one number.
Tools
Downloadable builds for Windows, macOS and Linux are attached to this release.
harness-view
Added
- A roster editor. A seat's
model,effort,toolsanddescriptioncan be edited from the
graph, with pickers backed by a reference of four vendors (Claude Code, OpenAI Codex, Gemini CLI,
Z.AI GLM). Every model and tool carries averifiedflag, and unverified entries are marked
wherever they appear. The reference is yours to change: additions, edits and deletions are stored
per repository in.claude/state/references.jsonand merged over the shipped seed, so an upgrade
never loses them and the shipped file is never written. A seed entry'sverifiedalways comes
from the seed - an override can correct a label, not promote or demote a claim. - The Command Steps panel became an editor. Autocomplete for agent names, rule files, hook names
and relative paths; steps can be inserted at any position; markdown inside a step renders, tables
included, and shows its source again when you edit it. - Frontmatter writes touch only the keys that changed. The body below the frontmatter is copied
through byte for byte; unknown keys, comments, blank lines and key order all survive, and CRLF
stays CRLF.
Changed
- Custom dialogs and toasts replace the browser's
alertandconfirm, with focus trapping,
focus restored on close, and an accessible name on every icon-only button. Every button carries an
icon. - Disabling a rule, hook or command no longer collapses the detail panel: the selection survives the
reload.
Install
unzip harness-bootstrap-v1.18.0.zip -d ~/.claude/skills/unzip spec-builder-v1.18.0.zip -d ~/.claude/skills/- Verify with
sha256sum -c SHA256SUMS
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
v1.16.0
harness-bootstrap
Fixed
- No change in this skill's assets. Released with the repo 1.16.0 landing-page rebuild.
spec-builder
Fixed
- No change in this skill. Released with the repo 1.16.0 landing-page rebuild.
Tools
Downloadable builds for Windows, macOS and Linux are attached to this release.
harness-view
Fixed
- No functional change in this tool. Released with the skills' 1.16.0 to keep the versions in step.
Install
unzip harness-bootstrap-v1.16.0.zip -d ~/.claude/skills/unzip spec-builder-v1.16.0.zip -d ~/.claude/skills/- Verify with
sha256sum -c SHA256SUMS
v1.15.1
harness-bootstrap
Fixed
- The Codex packaging of this skill is now verified against the real client:
codex plugin add harness-bootstrap@agent-harness-bootstrapinstalls it and the skill lands in the plugin cache. Three manifest defects found and fixed; see the root CHANGELOG.
spec-builder
Fixed
- The Codex packaging of this skill is now verified against the real client:
codex plugin add spec-builder@agent-harness-bootstrapinstalls it and the skill lands in the plugin cache. Three manifest defects found and fixed; see the root CHANGELOG.
Tools
Downloadable builds for Windows, macOS and Linux are attached to this release.
harness-view
Fixed
- No functional change in this tool. Released with the skills' 1.15.1 to keep the versions in step.
Install
unzip harness-bootstrap-v1.15.1.zip -d ~/.claude/skills/unzip spec-builder-v1.15.1.zip -d ~/.claude/skills/- Verify with
sha256sum -c SHA256SUMS
v1.15.0
harness-bootstrap
Added
- Ships as an Agent Plugins 1.1.0 package under
plugins/harness-bootstrap/, so it installs
in Cursor, Codex, VS Code, Copilot and Kiro as well as Claude Code. The package is generated
from this skill byscripts/build_plugins.pyand CI fails when the two drift apart.
spec-builder
Added
- Ships as an Agent Plugins 1.1.0 package under
plugins/spec-builder/, so it installs in
Cursor, Codex, VS Code, Copilot and Kiro as well as Claude Code. The package is generated
from this skill byscripts/build_plugins.pyand CI fails when the two drift apart.
Tools
Downloadable builds for Windows, macOS and Linux are attached to this release.
harness-view
Fixed
- No functional change in this tool. Released with the skills' 1.15.0 to keep the versions in
step.
Install
unzip harness-bootstrap-v1.15.0.zip -d ~/.claude/skills/unzip spec-builder-v1.15.0.zip -d ~/.claude/skills/- Verify with
sha256sum -c SHA256SUMS
v1.14.1
harness-bootstrap
Fixed
- No change in this skill's assets. Released with the repo 1.14.1 media fix so the versions
stay in step.
spec-builder
Fixed
- No functional change in this skill. Released with the repo 1.14.1 to keep the versions in
step.
Tools
Downloadable builds for Windows, macOS and Linux are attached to this release.
harness-view
Fixed
- No change to the binary's behaviour. The published SCREENSHOTS of its web UI carried a
stale version in the footer (v1.12.0 on the landing page and README while the release
was v1.14.0) - the same burned-into-pixels drift the clips had. Retaken from this
release's binary, with a provenance gate so a release can no longer ship them stale.
Install
unzip harness-bootstrap-v1.14.1.zip -d ~/.claude/skills/unzip spec-builder-v1.14.1.zip -d ~/.claude/skills/- Verify with
sha256sum -c SHA256SUMS