## Summary - publish `ExitPlanMode` Markdown through experimental ACP `plan_update` when the client advertises `clientCapabilities.plan` - keep `requestPermission` as the confirmation mechanism and retain `rawInput.plan` on the `switch_mode` tool call - fall back to the existing tool-call content for clients without plan support - serialize live plan publication through the permission path so `plan_update` and the referenced `tool_call` are delivered before `requestPermission` - use stable per-scope plan IDs so main-agent and subagent plans cannot overwrite each other - replay capable-client plans through `plan_update` without duplicating Markdown in tool content ## Testing - permission-first and stream-first event ordering - approve, reject, and cancel outcomes - capable-client Markdown payload and legacy fallback - empty plan suppression, replay, deduplication, and subagent plan IDs - `vitest run` (697 passed, 20 skipped) - `tsc --noEmit` - ESLint and Prettier on changed files
ACP adapter for the Claude Agent SDK
Use Claude Agent SDK from ACP-compatible clients!
This tool implements an ACP agent by using the official Claude Agent SDK, supporting:
- Context @-mentions
- Images
- Tool calls (with permission requests)
- Following
- Edit review
- TODO lists
- Nested subagent transcripts
- Interactive (and background) terminals
- Custom Slash commands
- Client MCP servers
Learn more about the Agent Client Protocol.
Nested subagent transcripts
ACP 1.2 has no standard subagent tool kind or nested-message relationship. Clients that can render
nested transcripts can opt in with clientCapabilities._meta["subagent-transcript"] = true.
The agent then forwards subagent text, thinking, and tool calls, relating nested updates to the
launching Agent/Task call through _meta.claudeCode.parentToolUseId. Agent/Task calls are marked
with _meta.claudeCode.subagent = true.
Clients that do not advertise the capability retain the legacy flattened behavior. In both modes, the normal Agent/Task tool result is preserved as the protocol-compatible fallback.
Contribution Policy
This project does not require a Contributor License Agreement (CLA). Instead, contributions are accepted under the following terms:
By contributing to this project, you agree that your contributions will be licensed under the Apache License, Version 2.0. You affirm that you have the legal right to submit your work, that you are not including code you do not have rights to, and that you understand contributions are made without requiring a Contributor License Agreement (CLA).