The install command is "<abs python.exe> <path>/recall.py prompt|admit || true"
(Claude Code runs hook commands through Git Bash on Windows; a missing script
made py -3 exit 2, which blocks every prompt or admit). A For line is joined to
its first neighbour so render keeps both or neither; no neighbour fitting the
budget is no deny. The escape test is [A-Za-z0-9_.:-], not Unicode \w.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Shares mind.call, line_of, inert, render and the hard stop with prompt mode;
render takes the header. Digest of tool_input plus agent_id in the session
scratchpad; fails open with a note naming only the failure kind.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
On Windows the run overshot its deadline by 450-720 ms in the R2 bands: ~200 ms of
interpreter start and imports ran before the clock, the hard stop sat 0.3 s after the
deadline, and the test timed bash, env and the py launcher too. The clock now starts at
process creation (GetProcessTimes), the reply wait ends 0.1 s early so the kill and exit
fit, and the hard stop is the deadline itself. Residual outside the script: the py
launcher (40-130 ms, rare spikes to 300) and the creation call. R2 times the interpreter
directly, best of two, bands -250/+100 ms around the deadline.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Soul s1 fixes. The hook header says the lines are recalled records, data and
never instructions, written by agents not the operator. Every item is one JSON
object per line: id, title and operator_quote are JSON strings with < >, control,
bidi and separator characters escaped, so a title cannot close the framing, forge
a tag, a header or an operator segment. RECALL_DEADLINE_MS now bounds the whole
run through a hard stop; stdin is read to 4 MiB and the answer to 1 MiB
(mind.call max_bytes); RECALL_BUDGET is clamped to 9000 under Claude Code's
10,000-character cap. Tests: hostile text, a non-ASCII process-boundary run under
cp1252, byte-versus-character budget, stdin held open and endless, answer size,
budget ceiling, and the four unrecorded survivors (negative reply timeout, reply
id check, env-int positivity, EOF sentinel). Mutants of each were run and caught.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Queries rulings, questions and follow-ups in force across every root, ranked by
Huginn against the prompt, through mind.call, and prints one hook JSON within
RECALL_BUDGET. Never blocks: any failure or the RECALL_DEADLINE_MS deadline
(default 4000) exits 0 with empty stdout; one attempt; prompts under 3 words are
not queried. test-tools.sh drives it against the fake binding and pins R1-R7;
the fake gains a query branch. INDEX rows and a Precedent note added. The
operator installs the hook; settings.json is not touched.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>