You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of #113 ("Instant magic"). The Epic 1 "instant magic" deliverable — the conservative slice: a documented minimal interface, not yet data-driven descriptors (that's #E).
Why
#113's core goal: stop forever playing catchup on harness compatibility. Today a new harness must be wired across two dispatch mechanisms and a ~20-method HarnessAdapter trait, audited via docs/harness-parity.md. Once the in-session mechanism is gone (#B), the "two parity axes" framing collapses to one, and we can express compatibility as a minimal interface every harness must satisfy + optional capabilities that raise fidelity — and document the known mappings instead of treating every method as required.
Honest floor (must be reflected in the framing): three concerns are genuinely per-harness code, not documentable mappings — transcript parsing (claude -p stream-json vs Codex item.completed), native skill staging/rendering (.claude/skills Skill-tool list vs .agents/skills## Skills vs .opencode/skills<available_skills> XML), and write-guard hooks. So "any harness via docs alone" applies to the baseline, with fidelity as opt-in code.
Scope
Rewrite docs/harness-parity.md around one dispatch mechanism + a baseline/enhancement contract.
Define the minimum operating list (zero harness-specific code): (1) a headless exec command template (invoke with a prompt, capture stdout/stderr); (2) the agent writes outputs/final-message.md, or --no-stage inlines the skill into the prompt. This already yields llm_judge grading + the detect-stray-writes post-pass.
Define progressive enhancements, each a documented adapter capability with a default/fallback:
Audit the HarnessAdapter trait: annotate each method baseline-required vs optional-with-default, and add default impls so a baseline harness need not implement the optional ones.
Part of #113 ("Instant magic"). The Epic 1 "instant magic" deliverable — the conservative slice: a documented minimal interface, not yet data-driven descriptors (that's #E).
Why
#113's core goal: stop forever playing catchup on harness compatibility. Today a new harness must be wired across two dispatch mechanisms and a ~20-method
HarnessAdaptertrait, audited viadocs/harness-parity.md. Once the in-session mechanism is gone (#B), the "two parity axes" framing collapses to one, and we can express compatibility as a minimal interface every harness must satisfy + optional capabilities that raise fidelity — and document the known mappings instead of treating every method as required.Honest floor (must be reflected in the framing): three concerns are genuinely per-harness code, not documentable mappings — transcript parsing (
claude -pstream-json vs Codexitem.completed), native skill staging/rendering (.claude/skillsSkill-tool list vs.agents/skills## Skillsvs.opencode/skills<available_skills>XML), and write-guard hooks. So "any harness via docs alone" applies to the baseline, with fidelity as opt-in code.Scope
docs/harness-parity.mdaround one dispatch mechanism + a baseline/enhancement contract.outputs/final-message.md, or--no-stageinlines the skill into the prompt. This already yieldsllm_judgegrading + thedetect-stray-writespost-pass.transcript_check+ token/cost capture;--no-stageinlining);detect-stray-writesfallback).HarnessAdaptertrait: annotate each method baseline-required vs optional-with-default, and add default impls so a baseline harness need not implement the optional ones.Files
docs/harness-parity.md(rewrite),src/adapters/harness.rs(trait doc comments + default impls),README.md("Harnesses" intro).Acceptance criteria
--no-stagewithout writing a transcript parser.Dependencies
Depends on #B; benefits from #C landing first.
Filed from the #113 feasibility/breakdown plan.