---
title: The Agent Client Protocol
description: ACP is the host-agent contract that lets Nori run any compatible coding agent.
status: verified
sidebar:
  order: 2
---

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

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](/cli/guides/approvals/). Nori builds on the
official ACP Rust crate (`agent-client-protocol`).

## 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

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

- [Agents & harnesses](/cli/concepts/agents-and-harnesses/) — why Nori runs
  every agent out of process
- [Agents guide](/cli/guides/agents/) — register your own ACP agent in
  `config.toml`
- [Architecture](/cli/develop/architecture/) — where the ACP host sits in the
  three-layer workspace
