Problem
There is no protocol version anywhere in the wire format. agent/initialize exchanges a name and an empty capabilities object, so a runtime cannot tell whether it is talking to an agent built against today's spec or one from six months ago. There is no safe way to ever make a breaking change.
Proposal
Both directions carry protocol_version, a MAJOR.MINOR string, deliberately decoupled from the package version.
- Runtime sends the highest version it speaks
- Agent responds with the version it will actually speak
- Differing major → runtime aborts with a clear error
- Differing minor → both operate at the lower minor
- Absence means
0.1 — every agent built against the current SDK keeps working
Acceptance criteria
See ECP-0001 phase 1. This is the only roadmap item with a closing window — it gets harder with every agent built against a versionless protocol.
Problem
There is no protocol version anywhere in the wire format.
agent/initializeexchanges a name and an empty capabilities object, so a runtime cannot tell whether it is talking to an agent built against today's spec or one from six months ago. There is no safe way to ever make a breaking change.Proposal
Both directions carry
protocol_version, aMAJOR.MINORstring, deliberately decoupled from the package version.0.1— every agent built against the current SDK keeps workingAcceptance criteria
protocol_versionin initialize params and result-32001, not a confusing failuredocs/spec.md, and schemas updatedSee ECP-0001 phase 1. This is the only roadmap item with a closing window — it gets harder with every agent built against a versionless protocol.