name: agentic-acp-protocol-flow description: > MANDATORY before editing ACPClient, ACPTransport, AgentInstance, ACP provider flow, tool-call parsing, permission requests, provider switch, reconnect, or ACP subprocess lifecycle in agentic.nvim.
Agentic ACP Protocol Flow
Use this skill for ACP runtime behavior. For schema facts, also load
agentic-acp-docs-and-schema.
Provider model
- External ACP CLI tools are spawned as subprocesses.
- The plugin does not install providers.
- All providers use the generic
ACPClientinacp_client.lua. - There are no per-provider adapter files. See ADR 0005.
- Add a provider with a
config_default.luaentry underacp_providersunless the provider deviates from ACP in a new way. - Provider quirks live in protected
ACPClientmethods, not adapter files.
Pipeline
provider subprocess
-> ACPTransport
-> ACPClient
-> SessionManager subscriber
-> MessageWriter / PermissionManager / TodoList / ChatHistory
Load references by edit target
references/client-lifecycle.md:ACPClient.state, ready listeners, sync vs async dispatch, reconnect, pending callback draining.references/transport-framing.md: stdio line framing, partial chunks, subprocess process-group termination.references/tool-calls-permissions.md:session/updaterouting, tool-call lifecycle, permission request normalization, provider quirks.references/provider-switch-options.md: provider switch replay, modes/models, thought level, config options.
Protected methods
Current extension points:
| Method | Behavior |
|---|---|
__handle_tool_call |
Builds ToolCallBlock, notifies subscriber |
__build_tool_call_message |
Parses ACP fields and quirk fallbacks |
__handle_tool_call_update |
Builds partial, notifies subscriber |
__handle_request_permission |
Sends permission result to provider |
__handle_session_update |
Routes by sessionUpdate type |
Only subclass or extend these when a real provider deviation requires it.
Provider quirks
Handle protocol deviations inline in __build_tool_call_message.
- OpenCode
rawInputfallback builds diffs whencontentis missing for edit tool calls. locationsfallback extractsfile_pathfromupdate.locations[0].path.- Unknown tool kinds log a warning so users can report the provider behavior.