Repo doctrine
Two pillars
Multi-harness SSOT keeps protocols and stderr one place. HITL keeps shared-state mutations behind an explicit human OK — not a buried --execute flag.
Main selling point — stderr baseline. On by default in every toolkit. Claude / Cursor / OpenCode2 install steps live in the monorepo README. HITL is the other pillar (docs/hitl.md).
Canonical markdown: docs/hitl.md · docs/multi-harness-ssot.md · OpenSpec change 2026-08-20-multi-harness-ssot
Pillars
| Pillar | Doc | Purpose |
|---|---|---|
| HITL | docs/hitl.md | After a plan whose natural next step mutates shared state, ask and wait. The approval question is the product. |
| Multi-harness SSOT | docs/multi-harness-ssot.md | One protocol markdown contract. One stderr detector. N thin entries per harness — not a Cursor-vs-Claude dichotomy. |
HITL rules
- Applies repo-wide to every toolkit, command, skill, and agent — not only make-no-mistakes.
- Shared-state examples: gh pr merge / create mode, force-with-lease on published history, tracker → Done, worktree delete, prod ops, regenerating base-anchored artifacts for the open PR set.
- Local measure / edit / test may proceed without per-action approval until that boundary.
- Do not bury the obvious follow-through behind --execute or end with “run these yourself” when the user asked for the outcome.
- Never offer --admin / --force / merge-past-red as menu options. If blocked, the block is the finding.
HITL ask surface
- Claude CodeAskUserQuestion
- CursorAskQuestion (fixed-choice); if unavailable: numbered options in main chat + explicit reply (silence ≠ yes)
- Background sub-agentEmit pause JSON; orchestrator asks (AskUserQuestion / AskQuestion) and relays — sub-agent must not ask directly
Two orthogonal SSOTs
| SSOT | Location | Purpose |
|---|---|---|
| Protocol | toolkits/<name>/references/<cmd-or-domain>/ (+ templates/) | HOW for commands and skills — harness-agnostic markdown |
| Runtime stderr | shared/hooks/stderr/ (vendored into every toolkit) | Block shell stderr discards — one detect.py, N wire-ups |
Protocol rules
- Entry thin (≤ ~120 lines): Claude commands/*.md, Cursor skills/*/SKILL.md when / must surface it.
- Body lives in references/. No second protocol body per harness.
- Harness notes go under references/.../adapters/ or entry footnotes.
Runtime stderr rules
- Canonical tree: shared/hooks/stderr/ (detect.py + adapters + tests).
- Every toolkit Claude hooks/hooks.json registers PreToolUse Bash → claude adapter.
- OpenCode: register hooks/stderr/adapters/opencode-plugin.ts. Cursor: beforeShellExecution. Antigravity/Codex: detect.py --command.
- Opt-out: MNM_DISABLE_STDERR_HOOK=1, stderr-hooks.json preserve_stderr:false, or disable the OpenCode plugin.
- Done criterion: a session with only toolkit T installed still blocks 2>/dev/null.
Harness wire-up matrix (stderr)
- Claude CodePlugin hooks/hooks.json → PreToolUse Bash → claude-pre-bash.sh
- CursorbeforeShellExecution → cursor-before-shell.sh
- OpenCode V2File plugin opencode-plugin.ts in opencode config
- Antigravity / Codex / Kiro / Grokpre-exec: python3 detect.py --command "$CMD"
Pilot
HITL: /merge-advisor and /implement hard STOP gates in make-no-mistakes. SSOT: /implement → references/implement/* + templates/bilingual-issue-brief.md; fat commands across the monorepo use thin-entry → references/<cmd>/protocol.md.
This site is published for toolkits.chimeranext.dev. Until DNS + GitHub Pages custom domain are live, the same build also serves on GitHub Pages (project URL).