Multi-harness SSOT
Multi-harness SSOT
One protocol markdown contract. One stderr detector. N thin entries per harness — Claude Code, Cursor, OpenCode2, Antigravity, and friends. Not a Cursor-vs-Claude dichotomy.
Main selling point — stderr baseline. On by default in every toolkit. Claude / Cursor / OpenCode2 install steps live in the monorepo README.
Canonical markdown in the repo: docs/multi-harness-ssot.md · OpenSpec change 2026-08-20-multi-harness-ssot
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
- 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
make-no-mistakes /implement → references/implement/* + templates/bilingual-issue-brief.md. Fat commands across the monorepo follow the same thin-entry → references/<cmd>/protocol.md shape.
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).