Repository navigation
Agent Client Protocol Python SDK 1.0.0 is the first stable 1.x release.
Highlights
- Stable ACP v1 bindings now track
schema-v1.23.0, with the missing v1 protocol methods, stablesession/resumeandsession/closerouting, and request cancellation via$/cancel_request. - Experimental ACP v2 bindings and runtime track
schema-v2.0.0-alpha.5, with protocol negotiation and support over stdio, Streamable HTTP, and WebSocket. - More robust transport handling: malformed and non-object JSON-RPC frames, invalid response IDs, SSE UTF-8 boundaries, and error responses are handled consistently.
- Session snapshots isolate raw tool payloads, explicitly empty permission options are rejected, and subprocess shutdown bounds stdin closure.
- Package support extends to Python 3.15 (Python requirement:
>=3.10,<3.16), with dependency security updates.
Upgrading from 0.12.x
This is a major release with API changes. Review these before upgrading:
- The
acp.helpersmodule and its top-level builder exports have been removed. Construct generated models fromacp.schemadirectly; discriminator fields have defaults. For example, replacetext_block("Hello")withTextContentBlock(text="Hello")imported fromacp.schema. - Review v1 schema changes, including session notice capabilities, the stable tool-call
namefield,TerminalAuthMethodreplacingEnvVarAuthMethod, and stricter accepted elicitation content. See the quickstart. - Experimental v2 connection methods and handlers use expanded snake-case parameters, for example
connection.new_session(cwd="/workspace"). See the v2 guide. - Web transports use Starlette and
httpx2[http2]. Installagent-client-protocol[http]for those optional dependencies. See the web transport guide.
The stable SDK version does not change the experimental status of protocol v2 or the web transports.
pip install --upgrade agent-client-protocol==1.0.0What's Changed
- fix: handle UTF-8 split across SSE chunks by @Excelius-Wang in #135
- refactor(codegen): generate schema bindings directly by @PsiACE in #136
- refactor: remove schema helper API by @PsiACE in #137
- feat(schema): update to 1.21.0 by @PsiACE in #138
- refactor(codegen): separate v1 schema semantics by @PsiACE in #140
- feat(codegen): generate experimental v2 bindings by @PsiACE in #141
- feat(v2): add experimental runtime and negotiation by @PsiACE in #139
- refactor: simplify web transports with Starlette by @frostming in #142
- chore: migrate HTTP client dependency from httpx to httpx2 by @frostming in #143
- chore(deps): bump anyio from 4.14.1 to 4.14.2 in the uv group across 1 directory by @dependabot[bot] in #145
- feat(schema)!: bump ACP v1 schema to 1.23.0 by @PsiACE in #146
- feat(v2)!: bump ACP draft schema to 2.0.0-alpha.5 by @PsiACE in #147
- feat: complete missing v1 protocol methods by @frostming in #148
- refactor: derive routers from protocol metadata by @frostming in #149
- refactor(v2)!: expand parameters and derive routes from protocols by @frostming in #150
- chore(deps): bump urllib3 from 2.7.0 to 2.8.0 in the uv group across 1 directory by @dependabot[bot] in #164
- chore(deps): bump virtualenv from 20.36.1 to 21.7.13 in the uv group across 1 directory by @dependabot[bot] in #165
- fix: make the schema codegen host-independent by @PerryLink in #151
- fix: bound stdin closure during subprocess shutdown by @Oscar-Williams in #152
- fix: align AgentSideConnection.to_agent type with AgentFactory by @extreme-structure in #157
- fix: route stable session/resume and session/close by @monody0007 in #159
- fix(contrib): reject explicitly empty permission options by @monody0007 in #156
- fix(connection): support $/cancel_request request cancellation by @monody0007 in #158
- fix(ws): warn when the server ignores binary frames by @frostming in #166
- feat(http): serve v2 over Streamable HTTP and WebSocket by @odellus in #163
- fix(transport): ignore JSON-RPC frames that are not objects by @PerryLink in #153
- fix: isolate raw tool payloads in session snapshots by @ningyixi in #171
- fix(ws): ignore non-object JSON frames in client transport by @CHLIN0 in #169
- fix(connection): ignore responses whose id is not a RequestId by @PerryLink in #167
- fix(http): skip non-object JSON in SSE streams by @ningyixi in #172
- feat: support Python 3.15 by @daeho-ro in #173
- chore(deps): bump dev tooling for security advisories by @benbrandt in #178
- fix: align JSON-RPC error handling across transports by @PsiACE in #174
- chore(deps): bump the uv group across 1 directory with 2 updates by @dependabot[bot] in #180
- chore(deps): bump virtualenv from 21.14.12 to 21.14.13 in the uv group across 1 directory by @dependabot[bot] in #181
New Contributors
- @Excelius-Wang made their first contribution in #135
- @PerryLink made their first contribution in #151
- @Oscar-Williams made their first contribution in #152
- @extreme-structure made their first contribution in #157
- @monody0007 made their first contribution in #159
- @odellus made their first contribution in #163
- @ningyixi made their first contribution in #171
- @CHLIN0 made their first contribution in #169
- @daeho-ro made their first contribution in #173
- @benbrandt made their first contribution in #178
Full Changelog: 0.12.1...1.0.0