Configuration
Who is this for? Someone with the tool installed, writing or changing
harnessimo.config.json.
When should I read it? When you want a key you have not used before. To choose which
check to turn on, the guide's table maps symptoms to sections.
Every section is optional, and a section that is absent is a check that does not run —
harnessimo doctor prints that list, and it is the honest answer to what a repository
enforces.
This page is generated from schema/harnessimo.config.schema.json. Editing it by hand is
pointless: npm run docs:sync regenerates it and a test fails when the two disagree.
docs
Turns on: proof
Proof markers: every claim in prose names the evidence that makes it true.
| Key | Type | What it does |
|---|---|---|
roots |
array of string | Directories to scan for Markdown. "." means the repository root, non-recursively. |
skip |
array of string | Directory names never descended into. |
maxDepth |
integer | How deep to descend below each root. Keeps a scan from wandering into a vendored tree. |
mustCarryProof |
array of string | Documents that must carry at least one marker in strict mode. Put the ones that make promises here. |
commands |
object | Marker prefix to the file that declares those commands, e.g. { "make": "Makefile", "task": "Taskfile.yml", "pnpm run": "package.json" }. |
migrations |
string or null | Directory backing migration:<prefix> markers. |
tracks
Turns on: tracks
Handoff-driven development: the index of live work tracks and the handoffs it points at.
| Key | Type | What it does |
|---|---|---|
file |
string | The index of live work tracks — one line per track, with a status and a next step. |
log |
string | Where a closed track's outcome is distilled. |
specsDir |
string | Where a lane's spec, tasks and handoff live, one directory per lane. |
taskFile |
string | The file inside a lane holding its task list, whose checked boxes the task gate reads. |
gateTasks |
boolean | Require a checked box in a live lane's task list to carry a proof marker. |
staleAfterDays |
integer | Days after which a live track line that nobody has refreshed is reported. A lane abandoned mid-flight keeps its status, its next step and the paths it declared, and none of that decays on its own. 0 (the default) turns the rule off. |
queue
Turns on: queue
The work queue. State moves only through a passing verification, and CI re-runs every claim.
| Key | Type | What it does |
|---|---|---|
file |
string | The queue itself: every item, its state, and the command that verifies it. |
timeoutMinutes |
number | A verification that runs longer than this is a failure with a stated cause, not a hang. |
terminalByKind |
object | Where an item lands when its verification passes, per kind. |
locked
Turns on: locked
The files that define or enforce the acceptance signal, which an agent commit may not touch.
| Key | Type | What it does |
|---|---|---|
paths |
array of string | Path prefixes. Empty means the check is off. |
baseline |
string | File naming the commit from which enforcement applies. |
agentTrailer |
string | The commit-message trailer that marks agent authorship. |
coldStart
Turns on: cold-start
Can a fresh clone install and verify itself using nothing but the repository?
| Key | Type | What it does |
|---|---|---|
requiredFiles |
array of string | Files a fresh clone must contain before anything is run — the ones the first command assumes. |
entryDocs |
array of string | Documents checked for paths that only resolve on one machine. |
commands |
array of string | The documented commands, run inside the fresh clone. |
cleanExit
Turns on: clean-exit
Clean state at session exit (lecture 12): no debris left behind, and progress written down.
| Key | Type | What it does |
|---|---|---|
scan |
array of string | Path prefixes whose changed files are read. Empty means the check is off. |
markers |
array or null | Strings that pass a build and mean the work is unfinished. Null uses the defaults. |
allow |
array of string | Path fragments exempted — typically the files that name the markers themselves. |
progressFile |
string | The file a session must update when it changed code. |
codePrefixes |
array of string | What counts as code for the progress rule. Empty means anything that is not Markdown. |
progressThreshold |
number | Changed lines below which the progress rule stays quiet, so a one-line fix is not told to write a progress note. Defaults to 50. |
requireCleanTree |
boolean | Also fail when the working tree has uncommitted changes. |
instructions
Turns on: instructions
The instruction file kept a router rather than a manual (lecture 04).
| Key | Type | What it does |
|---|---|---|
limits |
object | Path to maximum line count. |
boundaries
Lines the code may not cross: a pattern that must not appear in a particular part of the tree, and the reason it must not. Both repositories this package came from wrote this rule by hand, differently, because there was no way to declare it.
| Key | Type | What it does |
|---|---|---|
scan |
array of string | Directories to read. Everything under them is checked against the rules whose paths cover it. |
rules |
array of object | The boundaries themselves. An empty list is a check that finds nothing. |
thresholds
A scored metric has a declared floor, and a run below it is not finished. This check does not run the scoring: the project's own command writes a results file, and this reads it and compares. Floors only — a metric where lower is better is the same rule mirrored, and inventing a direction on zero real cases would be a guess.
| Key | Type | What it does |
|---|---|---|
results |
string | The file the scoring command writes: JSON of { metric: number }. |
floors |
string | The file declaring the lowest acceptable score for each metric. Put it in locked.paths: an agent that can lower its own pass mark grades itself. |
command |
string | The command that produces the results file. Named in the failure when the file is missing, and never run from here — the project owns its commands. |
release
Turns on: release
The version is a claim made on several surfaces: they must agree.
| Key | Type | What it does |
|---|---|---|
manifest |
string | Where the version being shipped is declared. Usually package.json. |
changelog |
string | The file describing each released version. |
tagPrefix |
string | What a tag for x.y.z looks like: "v" gives v1.2.3. |
tokens
The read guard: a re-read of a file that has not changed is refused, and what a session cost is reported. Enforcement while the work happens, not a check on whether it is finished.
| Key | Type | What it does |
|---|---|---|
windowMinutes |
integer | How long a read is remembered. Past this, the same file may be read again — a session that ran longer is not one piece of work. Defaults to 20. |
statePath |
string | Where the per-session state is kept. It describes one run, so it belongs outside git. |
autonomy
How much of this repository's work is watched while it happens. A floor, not a setting: harnessimo check runs at this level or higher, and --autonomy can only raise it. Each level adds the checks that supervision at the level below could no longer catch.
| Key | Type | What it does |
|---|---|---|
level |
"watched" | "reviewed" | "unattended" |
watched — a person is reading each step; the fast checks. reviewed — nobody watched the steps but a person will read the diff; adds re-verification and the locked-surface check. unattended — nobody looked at all; adds clean exit and cold start. |