Harden the autonomous orchestrator'''s deterministic seam against the failure modes an unsupervised loop can hit, and stop hook runtime logs from polluting end-user project repos. No new commands — count stays 14; this is engine/safety hardening, not new surface.
Added
- Two new
scripts/orchestrate.shsubcommands (seam now exposes eight):validate-stategatesorchestrator-state.jsonbefore routing (required fields + coarse type checks) and refuses a malformed ledger;screen-state-predicatere-runs the pinned predicate throughscreen-cmdon resume. Predicate extraction honors backslash-escaped quotes so a poisoned predicate cannot truncate screening at an interior\"and slip a destructive tail past the gate. - Independent verify hop.
next-hoproutes a high-impact accepted change to a freshverifyhop (pending_verify) before declaringDONEor entering the ship gate. Advisory to convergence — never auto-approves ship (stays human-gated). Backward-compatible. - Predicate pinning + overfit guard — the derived Success predicate is written verbatim into the ledger and reused every cycle/resume so "done" is reproducible; acceptance runs on a held-out set separate from the signal used to choose the change.
Changed
screen-cmddestructive-command coverage expanded beyondrm/curl|sh: now also refuses netcat exfil (nc/ncat/netcat), raw block-device writes (incl./dev/sd*,/dev/nvme*,/dev/mmcblk*,/dev/md*,/dev/dm-*,/dev/mapper/*), filesystem format (mkfs),find … -delete,shred, zero-truncate, recursive zero-modechmod(000/00/0), and curl/wget routed throughxargsinto an interpreter. Path-qualified invocations (/sbin/mkfs.ext4,/usr/bin/find) caught with the same optional-path-prefix anchor. Known-good commands (parser pipes, normalfind, leading-zero modes like0755, redirect to/dev/null) still pass.- Version 2.2.0 → 2.2.1 across all 3 plugin manifests, marketplace, and 5
SKILL.mdmirrors.
Fixed
- Hook runtime logs no longer pollute (or risk being committed into) project repos (#107). The hook
log()helper wrotehook-log.jsonlto aprocess.cwd()-relative.claude/hooks/.logs/— so every project running the hooks grew its own untracked log under the repo. Logs now go to a global, per-project-keyed path under~/.claude/hooks/.logs/{project}-{hash}/, matching the global session-state convention the same module already used. Fail-open, write-only; documented inguide/hooks.md.
Tests
orchestrator 154, hooks 107, regression 50 — all green.
Docs
guide/autoresearch-orchestrator.md— now documents the verify hop and the widenedscreen-cmdcoverage / escaped-quote re-screenguide/hooks.md— new "Runtime Logs" section (global location + sensitivity note)docs/system-architecture.md— eight-subcommand seam
Full changelog: docs/project-changelog.md