> ## Documentation Index
> Fetch the complete documentation index at: https://checkfu.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom ACP harness

> A dependency-free ACP v1 harness image, with no Checkfu Runner driver.

Not an agent product — a harness. This is a dependency-free ACP v1 server packaged as an OCI image, showing the entire custom-harness boundary: ACP stays inside your image, while Checkfu owns admission, sandboxing, model routing, event persistence, and cleanup.

Source: `examples/custom-acp` in the repository. The index at
`examples/README.md` compares it with the other customer-shaped examples.

## Golden journeys

* Build and publish an immutable image
* Adopt the image as a HarnessProfile and request conformance
* Create, publish, and chat through an Agent on it

## Platform surfaces exercised

Harness profiles, conformance, Agents and Sessions — driven through the CLI and HTTP rather than the SDK.

## From the source

The ACP method surface a custom harness must answer, in plain JSON-RPC with no dependencies:

```js path=examples/custom-acp/server.mjs theme={"theme":{"light":"github-light","dark":"github-dark"}}
const handle = async (message) => {
	if (message.method === "initialize") {
		send({
			jsonrpc: "2.0",
			id: message.id,
			result: {
				protocolVersion: 1,
				agentCapabilities: { loadSession: false, mcpCapabilities: { http: true } },
				authMethods: [],
			},
		})
		return TURN_HANDLED
	}
	if (message.method === "session/new") {
		sessionMcpServers = message.params.mcpServers ?? []
		send({ jsonrpc: "2.0", id: message.id, result: { sessionId: "custom-acp-session" } })
		return TURN_HANDLED
	}
```

This block is quoted from the file, not retyped: `pnpm agent-docs:check` fails if it drifts.

## Honest gaps

**This example carries no test suite** — a Dockerfile, `server.mjs`, and a build-and-adopt walkthrough. There is no evidence here to audit the way the seven product examples are audited, and it records no honest-gaps section. Counts are deliberately not repeated here — they differ per tree, and `examples/README.md` carries them with the sha they were measured at.
