scripts/hooks/
Deterministic gates
Test-edit denial, evidence-checking commit lint, decision gate, drift checks — all configured by one flat factory.yaml. Hooks stay byte-identical across adopters; upgrades are file copies. Hook reference →
.opencode/ · .claude/ · .codex/
Five agent roles
Defined once, generated per harness, separated by permissions the hooks enforce — not by politeness. One keeps a cited wiki of your codebase — Karpathy's LLM-wiki pattern, with the provenance enforced rather than hoped for.
scripts/selftest/
Break/fix proofs
The suite violates each rule on purpose and asserts the gate fires. factory-init won't claim success until it passes on your repo.
eval/
Agent evals that expire
Score agents on real tasks: a task is a red spec plus an oracle, and the pass rate is measured over N runs — a run only counts if the oracle passes untampered. Each baseline records what it was measured against, so when the oracle or instructions change it reports stale, not a false “no regression.” Eval reference →
workflows/
The graph, in plain text
A recipe is a graph you can read: nodes are roles, edges are code, findings pass a verifier before they count. workflow-lint enforces that shape — no agent spawned for plumbing an edge could do. One recipe, run natively by all three harnesses. Workflows →
factory report
Cost, without the vanity number
What the gates caught, enforced at zero model tokens, plus one clearly-labeled estimate. It refuses to print “tokens saved” — that compares this run to one that never happened. Cost & models →
factory metrics
The numbers that don’t flatter you
Whether the factory is real or installed theatre — gates armed versus inert, what they blocked, how often you route around the same one, how much work got reworked or reverted, and whether your commits cite evidence for what they claim. Most of it is read from git history, so it says something the day you install rather than after months of collecting events.
Enforcement is the factory real, or installed theatre?
gates installed 12
config-armed gates 8 armed, 4 inert
blocks caught 31 in window
commit-message-lint 22
test-edit-denial 9
same gate 3+ times in an hour 4 hour(s) — friction
Loop health is work converging, or circling?
reworked 58 of 117 files — changed in more than one commit
Every metric names the decision it informs; a number nobody acts on is noise wearing a lab coat. The uncomfortable ones are first-class — inert gates, repeat blocks, rework, stale baselines — for the same reason there is no “tokens saved” headline. And a gate that could block without recording it is reported too, because otherwise a silent gate reads as a quiet one.
Local only. The numbers are computed on your machine, from your repository, for you. Nothing is transmitted — no exporters to configure, no server, no daemon, no account. --json exports a versioned document if you want it somewhere else; --html writes a self-contained page that fetches nothing when you open it. Metrics reference →