The Agent Client Protocol
The Agent Client Protocol (ACP) is the contract between a host (like Nori) and a coding agent. It’s what makes “any agent” possible.
The wire protocol
Section titled “The wire protocol”ACP is JSON-RPC spoken over standard input/output between the host and an
agent subprocess. The host sends requests — initialize, create or load a
session, prompt a turn — and the agent streams back session updates (message
chunks, tool calls, edits) as the turn runs. Permission flows the other way:
the agent asks the host before privileged actions, and Nori answers according
to your approval settings. Nori builds on the
official ACP Rust crate (agent-client-protocol).
The extension boundary
Section titled “The extension boundary”Because the boundary is a protocol — not a Rust API — an agent can be written
in any language and distributed any way (a local binary, npx, bunx,
pipx, or uvx) and still plug into Nori. There is deliberately no
in-process plugin system; the extension point is ACP itself.
Nori’s role
Section titled “Nori’s role”Nori is an ACP host: it launches agents, translates the wire protocol to
and from its internal session model, and renders the result. The host side
lives in a dedicated library crate, nori-acp-host — agent registry,
subprocess spawning, the JSON-RPC connection, and permission plumbing — with a
scriptable mock-acp-agent for conformance testing.
Next steps
Section titled “Next steps”- Agents & harnesses — why Nori runs every agent out of process
- Agents guide — register your own ACP agent in
config.toml - Architecture — where the ACP host sits in the three-layer workspace
this page as markdown: /cli/concepts/acp.md· index for agents: /llms.txt