Skip to documentation
Documentation navigation

Documentation navigation

Documentation / build

Build 15: ACP child and host

Drive an ACP child or expose a Harness session as an ACP host with explicit wire, process, gate, and shutdown boundaries.

developer

ACP has two directions. acp/client drives a foreign child over a supervised stdio process; acp/agent exposes a host that answers ACP requests from a client. The protocol package is shared wire vocabulary, while launch owns adapter and model-proxy composition.

Child driving

Construct a stdio.Command, create an acp/client.Client with the handlers the child may call, and create a session with NewSession, LoadSession, or ResumeSession. Prompt permits one in-flight prompt per session. ACP client handlers validate session IDs, paths, terminal IDs, and offered permission options before calling host-owned handlers. Cancellation resolves as a protocol stop result; it is not an arbitrary transport error.

Host exposure

Create agent.Options with a host implementing the session catalog, live session, optional closer, deleter, compactor, authenticator, and runtime configuration interfaces. agent.New registers initialize, authentication, session lifecycle, prompt, permission, filesystem, and terminal handlers that the options advertise. The host owns the session and gate decisions; ACP translates protocol requests and notifications without handing the client a Harness controller.

Native and proxy

launch.Codex, launch.ClaudeCode, and launch.Gemini describe adapter-specific command and environment wiring. Gemini is an environment adapter only, not a proven ACP connector. launch.Dial manages a child and an optional model proxy; DialNative uses a native harness configuration. A caller must run ProbeCodexVersion explicitly before constructing a command that relies on a supported Codex version.

Lifecycle

Close an ACP client or agent connection only after prompts and gate responses have drained. The host close sequence marks the session closing, cancels in-flight work, resolves pending permission calls, waits for the prompt drain, invokes optional shutdown, and removes the live session. Durable deletion is a separate operation and is rejected while a session remains live. Launch closes the proxy and process in the reverse order of construction.

Errors and limits

The protocol layer bounds frames, messages, nesting depth, handler concurrency, and notify queues. Use typed errors for invalid frames, closed connections, unsupported configuration, missing host capabilities, authentication, duplicate sessions, and child exit. ACP is a wire and lifecycle bridge; it does not make an untrusted child trusted and it does not replace the host’s gate or Sandbox policy.

Runnable proof

stage-15-acp-foreign constructs a Codex ACP child profile with a forwarded MCP server, registers both live and restored foreign builders, and asserts that both are available with scoped services. Run it with node scripts/docs/run-examples.mjs. See the pinned ACP client, agent facade, and launch lifecycle.

← back to documentation