Problem
A docs-vs-code congruence review (2026-09-14) found that OpenCode, pi and Grok Build are not confirmed as production-supported. The code agrees and is honest about it:
packages/studyloop/src/studyloop/harnesses.py:23-25 — CORE_HARNESSES = ("kiro", "codex", "claude"), PREVIEW_HARNESSES = ("opencode", "pi", "grok"); the Harness(...) records for opencode/pi/grok carry production=False (lines 40–44).
docs/agent-install.md:13 — "complete integrations for OpenCode, pi, and Grok Build … shown as preview harnesses until their live release checks pass on the target environment."
The owner's target state is five core harnesses — Kiro CLI, Claude Code, Codex, Pi and OpenCode — fully wired in and documented as such. Grok Build stays preview until separately evidenced.
What "fully wired in" must mean (checkable, per harness)
For each of pi and opencode, produce the same evidence the three core harnesses already have:
- Install path —
studyloop install agents --tool <h> writes the persona/agent definition and registers both MCP servers (session-db, studyloop) in the harness's own config schema; studyloop doctor reports the harness healthy.
- Session launch —
studyloop study --agent <h> (PTY) and, where the harness supports it, the ACP path start a session, deliver the canonical persona, and the one-session authority / reconnect / cleanup behaviour matches the core three (tests/test_web_session_start_pty.py, ..._acp.py parity).
- Session export — the harness's transcript exporter lands rows in
sessions.db with the correct source (pi, opencode), and session-export --<h>-only works (agent_session_tools exporters + tests).
- Live release check — the harness-matrix live lane (
tests/acceptance/, wave 2a B2) passes for the harness on a real install, and the receipt is committed under docs/architecture/plan-integration/receipts/ or the acceptance evidence bundle (wave 2b B4).
- Study-plan-architect mode —
studyloop study --mode plan-architect --agent <h> resolves the persona (OpenCode already has a global study-plan-architect agent; confirm pi).
Then, and only then
- Move
pi and opencode into CORE_HARNESSES; set production=True; RELEASE_HARNESSES unchanged.
- Update
docs/agent-install.md §"Supported in the initial pre-release" (five core; Grok Build remains preview), the capability matrix, AGENTS.md's harness sentence, the installer's printed language, and openspec/specs/agent-adapters/spec.md + harness-session-memory/spec.md.
- Pin with a test that the documented core list equals
CORE_HARNESSES (there is a docs-contract test pattern in packages/agent-session-tools/tests/test_docs_semantic_layer_contract.py to copy).
Definition of done
Notes
Problem
A docs-vs-code congruence review (2026-09-14) found that OpenCode, pi and Grok Build are not confirmed as production-supported. The code agrees and is honest about it:
packages/studyloop/src/studyloop/harnesses.py:23-25—CORE_HARNESSES = ("kiro", "codex", "claude"),PREVIEW_HARNESSES = ("opencode", "pi", "grok"); theHarness(...)records for opencode/pi/grok carryproduction=False(lines 40–44).docs/agent-install.md:13— "complete integrations for OpenCode, pi, and Grok Build … shown as preview harnesses until their live release checks pass on the target environment."The owner's target state is five core harnesses — Kiro CLI, Claude Code, Codex, Pi and OpenCode — fully wired in and documented as such. Grok Build stays preview until separately evidenced.
What "fully wired in" must mean (checkable, per harness)
For each of
piandopencode, produce the same evidence the three core harnesses already have:studyloop install agents --tool <h>writes the persona/agent definition and registers both MCP servers (session-db,studyloop) in the harness's own config schema;studyloop doctorreports the harness healthy.studyloop study --agent <h>(PTY) and, where the harness supports it, the ACP path start a session, deliver the canonical persona, and the one-session authority / reconnect / cleanup behaviour matches the core three (tests/test_web_session_start_pty.py,..._acp.pyparity).sessions.dbwith the correctsource(pi,opencode), andsession-export --<h>-onlyworks (agent_session_toolsexporters + tests).tests/acceptance/, wave 2a B2) passes for the harness on a real install, and the receipt is committed underdocs/architecture/plan-integration/receipts/or the acceptance evidence bundle (wave 2b B4).studyloop study --mode plan-architect --agent <h>resolves the persona (OpenCode already has a globalstudy-plan-architectagent; confirm pi).Then, and only then
piandopencodeintoCORE_HARNESSES; setproduction=True;RELEASE_HARNESSESunchanged.docs/agent-install.md§"Supported in the initial pre-release" (five core; Grok Build remains preview), the capability matrix,AGENTS.md's harness sentence, the installer's printed language, andopenspec/specs/agent-adapters/spec.md+harness-session-memory/spec.md.CORE_HARNESSES(there is a docs-contract test pattern inpackages/agent-session-tools/tests/test_docs_semantic_layer_contract.pyto copy).Definition of done
piandopencode: items 1–5 above each have a passing test id or a committed receipt named in this issue.harnesses.pycore tuple =("kiro", "codex", "claude", "pi", "opencode");grokremains preview.just lint;just typecheck.Notes