Status: watching · Updated: 2026-07-10
The ACP v2 draft was published
2026-07-08. It is a consolidation release with real breaking changes, explicitly meant to be
adopted side by side with v1 (per-connection version negotiation, feature-flagged until
stabilization). Nothing is actionable for this codebase until the TypeScript SDK ships v2
codegen — the v2 schemas exist in the protocol repo (schema/v2/), but
@agentclientprotocol/sdk currently generates only v1 types. This item tracks readiness so
the migration is a planned train, not a scramble.
- The prompt no longer owns the turn.
session/promptreturns an acceptance ack ({}); turn progress and completion move tostate_updatenotifications (running/idle/requires_action), with the stop reason on the idle update. Turn completion logic in the engine and runner must be driven off notifications instead of the prompt response. Therequires_actionstate maps naturally onto the existing pause-for-auth/checkpoint machinery. - Updates become upserts with three-state patch semantics (omitted = unchanged,
null= cleared, value = replaced, chunks append).tool_callis removed (firsttool_call_updatecreates), message IDs become required, plans getplan_update+planId. The shared-types normalizer needs a v2 surface, and TypeScript modeling must preserve theundefinedvsnulldistinction the protocol now depends on. - The client fs/terminal surface is removed. Clients that want to offer file access or
command execution provide an MCP server via
mcpServersinstead. Our served client-method surface shrinks; the MCP injection machinery already exists to carry replacements. - Auth regrouped:
authenticate→auth/login,logout→auth/logout(mandatory),methodId+ requiredtypediscriminator on auth methods. - Session lifecycle baseline:
new/list/resume/close/prompt/cancel/updatebecome required as a set;session/loadis removed in favor ofsession/resume+replayFrom: {"type": "start"}; the modes API is removed in favor of config options (category: "mode"). - Extensibility by default: open enums everywhere with
_-prefixed implementation extensions; receivers must preserve unknown values. Strict normalization needs an open-enum mode for v2; a legitimate_-namespace opens up for implementation extensions. - Also: role-agnostic required
info/capabilitieson initialize, object capability markers, a structured diff format (changes[]+ optionalgit_patch), permission requests with requiredtitleand extensiblesubject, and mandatory JSON-RPC batch acceptance on stdio.
- Keep v1 fully working; add a parallel v2 surface selected per connection after
initialize, gated behind a feature flag until the draft stabilizes. - Point a second schema-drift tripwire at
schema/v2/schema.jsonwhen work starts. - Trigger to move this item to next:
@agentclientprotocol/sdkpublishing v2 types.
| Item | State | Why it matters here |
|---|---|---|
| Remote transport | Active, v1-additive | Foundation of remote execution; v2 adds stream resumability |
| MCP-over-ACP (`mcp/connect | message | disconnect`) |
| Elicitation (`elicitation/create | complete`) | Preview |
session/inject (queue & steer) |
Open RFD | Standard ACP form of mid-turn steering; until then the first-class Claude/Codex/Pi adapters expose the explicitly negotiated _session/steering extension |
| Subagents (discovery, delegation, parent/child sessions) | Open RFD | Standardizes territory this orchestrator occupies |
session/fork |
v2 unstable | The existing forkSession support maps directly onto it |
| Session rewind (truncate/edit history) | Open RFD | Relevant to checkpoint-restore semantics |