Kind of page: reference.
The analyst holds nothing between legs except what is on disk: "the file, not your recollection, is what the run trusts" (the contract). Each part links to its file's page.
Every leg is a new Claude session. step.sh writes the
leg's first message and launch.sh starts
claude with a new session id and auto memory switched off,
"no memory carried between legs". What carries the work is the startup
packet that AGENT.md and
CLAUDE.md name: the
head, the stage file, the last five diary entries, and
validate.py --open NN. Nothing else is read by default.
_head.md is the narrative of the argument, at most 3,000 words, read first at every leg and rewritten at every close and before every cut. done.sh keeps a leg open when the head runs over 3,200 words, and links.py fails the next launch when an id in it does not resolve.
The diary is the
record under the head. It is written only through
mem.py log, stamped with the time and the leg, in parts of
1,500 words. Each line has a kind: opened, dropped, merged, split, kept,
move, abductive, question, comparison, note, helper, minted, placed,
unplaced, pause, or one a stage file names. Rule 20: a diary written at
the close from memory "is not a diary." A leg reads its tail or greps it
by id; E1 computes over it.
Every call to mem.py and cite.py leaves a line in the read logs. Rule 1: where the analyst's account of its reading and the log disagree, the log is right. The verbs serve reading one page at a time, generated views and wiki pages included. The room notes written at A1 are the run's prior, queried one at a time and never read as a list.
After done.sh, close.sh asks five
questions in a fork of the leg's session, with tools disallowed: the
method question, the open distinctions, the last three rooms opened,
what changed and why, the next comparison. probe.py scores the
answers against the questions, the read log and the history files,; _probe/ keeps them. A miss
the head or the diary answers is a note; a miss neither answers is a
defect.
snap.py hashes
every file in out/ under a name, once.
close.sh takes one at every close; each categorization move
gets one too, so a reviewer can see the state before and after it (_snap/).
close.sh then publishes a checkpoint of the folder and the
transcript, committed once.
A long leg will compact unseen. CLAUDE.md tells the compactor what to keep. The hook after_compact.sh then has the analyst re-read the head and the stage file, read the diary's tail, reconcile the two, and log that it did.
pause.sh
writes .pause. At the next safe stop the analyst logs its
working hypothesis and the next room or item as a pause
line and closes with done.sh NN --pause, which refuses
without that line. The next leg (-p2) picks up from the
head and the diary.
At eleven interview points a leg ends with a brief, and interview.sh
opens a read-only fork of that session. Nothing said there enters the
run unless a reply file comes back, which the next leg reads before its
first write. interview.sh copies the fork's transcript
beside the run, and close.sh copies each leg's transcript
into _transcripts/.
Session files in the run's config folder are kept for 36,500 days (.claude/settings.json).
_probe/ and _transcripts/ are closed to the
analyst until stage E1, by the permission rules and the sandbox and not
only by the stage file. _snap/ holds hashes only and stays
open throughout. Until its stage is handed over, the analyst also has no
later stage file and no later shelf (stages/, shelves/).
Checked against: CONTRACT-aggregator.md, STANDING-INSTRUCTIONS.md ยง2, CLAUDE.md, AGENT.md, tools/mem.py, tools/done.sh, tools/probe.py, tools/snap.py, harness/*.sh, harness/protocol_guard.py, harness/settings.template.json, stages/STAGE-E1-formalizing-audit.md.