So the thing can be built and run without reading the harness. Eight targets, each one go command or verify.sh; make help lists them. README gains the four lines someone actually needs, and says a site root is a directory the binary is pointed at rather than something in this repo. make is recorded in toolchain.md as a convenience: the gate never invokes it, so a machine without make loses nothing but typing.
2.9 KiB
Toolchain and external contracts
What this harness was built against, and which of those are contracts it depends on rather than incidentals. Recorded because a failure long after the fact is otherwise indistinguishable from a bug in the harness itself. Update the version line when you deliberately move; leave the rest alone.
Verified working: 2026-07-28
| Thing | Version then | Harness depends on |
|---|---|---|
| Go | 1.26.1 (darwin/arm64) | go list -f, go vet, go build, go test -race, gofmt -l. All stable since 1.11 |
| git | 2.53.0 | status --porcelain -uall, rev-list <sha>..HEAD -- '*.go', rev-parse --verify, core.hooksPath (2.9+) |
| Claude Code | 2.1.119 | the four formats below |
| bash | macOS default (3.2-era) + BSD userland | verify.sh avoids bashisms and GNU-only flags; grep -L, wc -l, xargs, awk are POSIX use |
The four agent-tooling contracts
These are the ones most likely to move, and the ones whose breakage looks like a harness bug:
CLAUDE.mdis loaded automatically from the repo root on every request. If that stops being true, nothing enforces the constitution and the agent will behave like a stock assistant..claude/skills/<name>/SKILL.md— a Markdown file in a directory named for the skill, which fires on request content matching its description. The feature loop depends on firing without being invoked; if skills come to need explicit invocation, the loop silently stops applying..claude/commands/<name>.md— Markdown with a YAML frontmatterdescription:, invoked as/<name>,$ARGUMENTSsubstituted. Used by/verify,/audit,/leaf,/refresh-docs,/adr,/invariants..claude/settings.json— apermissionsobject withallow/ask/denyarrays ofTool(pattern)strings. Only a convenience: if the schema changes, the harness still works, you just get more prompts.
Not depended on
No CI service, no container registry, no language server, no linter binary, no package manager beyond
go mod. The Makefile is a convenience wrapper only: every target is one go or verify.sh command,
and the gate never invokes make, so a machine without it loses nothing but typing.
verify.sh runs offline with nothing but Go and git on PATH, which is deliberate — the gate must work
on a machine you have not configured for two years.
VERIFY_DOCKER=1 adds a container build step and needs docker; it is opt-in and off by default.
If something breaks after a long absence
Check in this order, cheapest first: go version and git --version against the table above; then
whether verify.sh fails in the documentation block (a harness-internal problem) or the go block (a
toolchain or code problem); then whether the agent is still reading CLAUDE.md at all — ask it to quote
a hard rule, and if it cannot, the problem is contract 1 and nothing downstream will behave.