This directory defines a protocol-level conformance suite for ACP adapters and clients.
The initial goal is to lock down stable, high-value protocol behavior for core session lifecycle flows.
initializesession/newsession/promptsession/updatesession/cancel- baseline error semantics (
Invalid params, permission denied, unknown session)
- Adapter-specific UX behavior
- Harness-specific CLI flags
- Performance benchmarking
- Full coverage of unstable ACP methods
spec/v1.md: normative contract for the v1 conformance profilecases/*.json: data-driven case definitions consumed by a future runnerprofiles/*.json: profile files that declare required case idsrunner/run.ts: minimal executable draft runner
Case files are prefixed numerically to preserve stable execution ordering.
Draft contract and seed case corpus.
Current profile (acp-core-v1) includes 20 required cases.
Run against the default mock ACP adapter:
pnpm run conformance:runRun a single case:
pnpm run conformance:run -- --case acp.v1.initialize.handshakeRun against another adapter command:
pnpm run conformance:run -- \
--agent-command "npx -y @agentclientprotocol/codex-acp"Emit machine-readable JSON and write a report file:
pnpm run conformance:run -- \
--format json \
--report ./conformance-artifacts/report.json- The draft runner currently executes required case ids from the selected profile and prints a pass/fail matrix.
- Case/profile parsing is pure Node JSON parsing (no Python dependency).
- The runner is data-driven: it executes structured case
stepsandchecksfrom JSON instead of hard-codedcase id -> logicswitches.
Each case file can define:
permission_mode: optional override per case (approve-allordeny-all)steps: ordered operationsnew_sessionpromptprompt_backgroundawait_backgroundcancelsleep
checks: assertions evaluated after step executioninitialize_protocol_version_numbersaved_non_empty_stringsaved_error_presentsaved_stop_reason_inupdates_count_at_leastupdates_all_sessionupdates_text_includes
- Workflow file:
.github/workflows/conformance-nightly.yml Conformance (Mock Full)always runs the full profile on the local mock adapter and uploads a JSON report artifact.Conformance (Real Adapter Smoke)runs only when repository variableACPX_CONFORMANCE_REAL=1, using handshake smoke checks for selected real adapters.- Manual (
workflow_dispatch) runs can force real-adapter execution withrun_real_adapters=true. - Manual runs can enforce strict failures with
strict_real_adapters=true(disablescontinue-on-errorfor the real-adapter matrix).