{"type":"meta","slug":"grok-wrapper","base_branch":"main","gate0_mode":"strict","preset":"cursor"}
{"type":"goal","text":"Add WRAPPER-CONTRACT grok.sh + adapter + presets/grok.json so harness can seat Grok"}
{"type":"methodology","text":"Contract-level TDD; model after ca.sh/codex.sh; no orchestrator changes; fail-closed"}
{"type":"intent","text":"Make Grok a first-class harness engine without touching seat resolution core"}
{"type":"direction","verbatim":"Wrapper + preset. Script name wrappers/grok.sh. Coder all tiers grok-composer-2.5-fast; reviewer/fixer grok-4.5. Probe then fail-closed auth; optional GROK.env only if present."}
{"type":"deferred","text":"Wire grok into anthropic-less ladder; ACP stdio; real token metering","reason":"User scoped wrapper+preset only; stream has no tokens today"}
{"type":"anchor","path":"docs/specs/2026-07-10-grok-wrapper-design.md","what":"spec"}
{"type":"anchor","path":"docs/plans/2026-07-10-grok-wrapper.md","what":"plan"}
{"type":"task","id":"t1","wave":1,"seat":"coder","tier":"medium","desc":"Read docs/plans/2026-07-10-grok-wrapper.md Task 1 (Dialect + normalize) for the full contract. Add grok dialect enum + normalizeGrok + fixture/tests. Acceptance: node --test lib/test/normalize-events.test.js. Commit only: spec/events.schema.json lib/normalize-events.js lib/test/fixtures/grok.jsonl lib/test/normalize-events.test.js.","requires_decision":null}
{"type":"task","id":"t2","wave":1,"seat":"coder","tier":"medium","desc":"Read docs/plans/2026-07-10-grok-wrapper.md Task 2 (wrappers/grok.sh) for the full contract. Implement grok.sh + mock session tests. Acceptance: bash wrappers/test/grok-session.sh. Commit only: wrappers/grok.sh wrappers/test/grok-session.sh.","requires_decision":null}
{"type":"task","id":"t3","wave":2,"seat":"coder","tier":"low","desc":"Read docs/plans/2026-07-10-grok-wrapper.md Task 3 (Adapter + preset) for the full contract. Register grok in adapters.json + create presets/grok.json. Acceptance: node presets/_validate.mjs. Commit only: presets/adapters.json presets/grok.json.","requires_decision":null}
