cursor-agent and grok both speak ACP, so the client unlocks two of the three
remaining providers and should come before either driver.
Blocked: neither CLI is installed on the development machine. A transport written against nothing is unverifiable code, which is why the drivers are currently registered-but-unimplemented rather than sketched.
What exists already
packages/drivers/src/conformance.ts— the spec every driver must pass. A new driver is done when./buddy harness:doctor --conformance --driver <kind>is green.packages/drivers/src/cli-driver.ts—cursorandgrokare registered and probe honestly today ("not installed", or "installed but the driver is not implemented yet"). They must never reportreadyuntil they can actually run a turn, or a session starts and dies on its first turn.packages/drivers/src/codex.ts— the closest reference. It is written against the protocol schema the CLI generates for itself rather than against guesswork.
Watch for
Both findings from the codex driver are likely to recur:
- Terminal-event coalescing. Codex signals a failed turn twice — an
errornotification, then a failedturn/completed. Emitting on arrival ends the turn twice. The conformance suite catches this ("exactly one terminal event"). - Wire enum spelling. Codex rejected
onRequestwhere it wantedon-request, and only after a thread had already started. Pin the exact strings in a test.
Done when
harness:doctor --conformance is green for the driver against the real CLI, and
a turn with a tool call produces session.provider-bound, tool.call.began,
tool.call.ended, turn.completed in the log.