Harnesses
An agent program driven over the Agent Client Protocol, one spec each under
agentspecs/harnesses/. An agent spec names one with harness:
where it says pydantic-ai or vercel-ai; what the harness cannot honour of the
spec is refused at load. The register (harnesses/register.yaml) says the
terms each is served under and where they were read; a harness without an entry
does not load. The Datalayer runtime serves the offered ones; a harness
described here and not offered is refused in its own sentence wherever it is named.
| Harness | Id | Launch | MCP | Skills | Instructions | Third parties | Licence | Pinned |
|---|---|---|---|---|---|---|---|---|
| Claude Code | claude-code | npx -y @agentclientprotocol/claude-agent-acp@0.91.0 | lend | .claude/skills | CLAUDE.md | api_key_only | Apache-2.0 (adapter); Anthropic Commercial Terms of Service (the agent) | @agentclientprotocol/claude-agent-acp 0.91.0 |
| Codex | codex | npx -y @agentclientprotocol/codex-acp@2.2.2 | lend | .agents/skills | AGENTS.md | api_key_only | Apache-2.0 (adapter); OpenAI Terms of Use (the agent) | @agentclientprotocol/codex-acp 2.2.2 |
| OpenCode | opencode | npx -y opencode-ai@1.19.0 acp | lend | .opencode/skills | AGENTS.md | permitted | MIT | opencode-ai 1.19.0 |
| pi | pi | npx -y pi-acp@0.0.34 | lend | .pi/skills | AGENTS.md | permitted | MIT (adapter); MIT (the agent, @earendil-works/pi-coding-agent 1.4.0) | pi-acp 0.0.34 |
Not offered todayโ
Described โ a spec, a register entry, a capabilities table โ and not offered: naming one
is refused with the sentence below, by the runtime, by loop --harness and by the Studio.
| Harness | Id | Why not |
|---|---|---|
| fast-agent | fast-agent | the catalogue offers four harnesses today โ Claude Code, Codex, OpenCode and pi (28 October 2026); fast-agent is a framework served over ACP, not a coding agent, its adapter is a Python tool the runtime image does not carry, and it has not been drilled on Datalayer. |
| Gemini CLI | gemini-cli | the catalogue offers four harnesses today โ Claude Code, Codex, OpenCode and pi (28 October 2026); Gemini CLI's API host (generativelanguage.googleapis.com) is outside a Datalayer runtime's egress boundary and is not routed through ai-inference, so it is not offered there. |
| goose | goose | the catalogue offers four harnesses today โ Claude Code, Codex, OpenCode and pi (28 October 2026); goose is a binary of its own release, not an npm adapter, the runtime image does not carry it, and it has not been drilled on Datalayer. |
| OpenHands | openhands | the catalogue offers four harnesses today โ Claude Code, Codex, OpenCode and pi (28 October 2026); OpenHands' adapter is a Python tool the runtime image does not carry, and it has not been drilled on Datalayer. |
Listed, not drilled yetโ
Agents known to speak ACP, registered with their launch command as their projects document it, their licence, their terms and the credential they take. None is offered: naming one is refused, listed, not drilled yet, until it is drilled and moved to the catalogue with a spec.
| Agent | Id | Documented command | Licence | Third parties | Credential |
|---|---|---|---|---|---|
| AgentPool | agentpool | agentpool serve-acp agents.yml | MIT | permitted | The configured provider's key (e.g. OPENAI_API_KEY in the agents YAML or the environment) |
| Auggie CLI (Augment Code) | augment-code | auggie --acp | Proprietary (Augment CLI licence) | refused | An Augment Code account with an active subscription (auggie login) |
| AutoDev (Xiuper) | autodev | xiuper acp | MPL-2.0 | permitted | The configured LLM provider's key (AutoDev's configuration) |
| BLACKBOX AI CLI | blackbox-ai | blackbox --experimental-acp | Proprietary (Blackbox terms of service) | refused | A Blackbox AI API key (BLACKBOX_API_KEY) |
| Bub | bub | bub acp | Apache-2.0 | permitted | A provider key (BUB_API_KEY); its OpenAI Codex login is a subscription credential, refused for third parties |
| Claw Orchestrator | claw-orchestrator | clawo acp | MIT | permitted | The logins or keys of the engines it drives (Claude Code, Codex, OpenCode, โฆ) |
| Cline | cline | cline --acp | Apache-2.0 | permitted | The person's own provider API key (a Cline account's keys may not be transferred or resold) |
| Code Assistant | code-assistant | code-assistant acp | MIT | permitted | The configured provider's key (e.g. ANTHROPIC_API_KEY) |
| construct | construct | construct acp | MIT | permitted | Provider API keys, or the logins of the harnesses it drives (whose vendors' terms apply) |
| crow-cli | crow-cli | crow-cli acp | MIT | permitted | An API key for an OpenAI-compatible provider |
| CUGA | cuga | cuga-acp | Apache-2.0 | permitted | The configured provider's key (e.g. OPENAI_API_KEY) |
| Cursor CLI | cursor | agent acp | Proprietary (Cursor terms of service) | unknown | A Cursor login or a Cursor API key (CURSOR_API_KEY) |
| Docker Agent (formerly cagent) | docker-agent | docker agent serve acp ./agent.yaml | Apache-2.0 | permitted | The configured provider's key (OPENAI_API_KEY, ANTHROPIC_API_KEY, โฆ) or Docker Model Runner |
| Factory Droid | factory-droid | droid exec --output-format acp | Proprietary (Factory terms of service) | refused | A Factory login or a Factory API key (FACTORY_API_KEY) |
| fount | fount | undocumented | unknown | unknown | A fount API key plus the model sources configured in fount |
| GitHub Copilot CLI | github-copilot | copilot --acp --stdio | Proprietary (GitHub Copilot CLI License) | unknown | A GitHub Copilot subscription login, or a provider of one's own (COPILOT_PROVIDER_*) |
| Hermes Agent | hermes-agent | hermes acp | MIT | permitted | The configured provider's key, or a Nous Portal login |
| Junie by JetBrains | junie | junie --acp true | Proprietary (JetBrains AI Service terms) | refused | A JetBrains account entitled to JetBrains AI (models of one's own also taken) |
| kaagum | kaagum | undocumented | GPL-3.0-or-later | permitted | An API key for an OpenAI-compatible provider (fetched through --api-key-command) |
| Kimi Code CLI | kimi-cli | kimi acp | MIT | unknown | A Kimi Code login or a Moonshot AI Open Platform API key |
| Kiro CLI | kiro-cli | kiro-cli acp | Proprietary (AWS Customer Agreement and AWS IP License) | unknown | A Kiro login (GitHub, Google, AWS Builder ID, IAM Identity Center) or an API key |
| localharness | localharness | localharness acp --as <name> | Apache-2.0 | permitted | An on-chain agent identity (turns metered in its token) and a model provider's key |
| Minion Code | minion-code | mcode acp | AGPL-3.0 | permitted | The configured provider's key |
| Mistral Vibe | mistral-vibe | vibe-acp | Apache-2.0 | permitted | A Mistral API key (MISTRAL_API_KEY) |
| Muse Spark Code | muse-spark-code | muse-spark-code-acp | MIT | unknown | A Muse Code subscription, or a Meta Model API key (--backend modelApi) |
| OpenClaw | openclaw | openclaw acp | MIT | permitted | An OpenClaw Gateway token, with the Gateway's configured model providers |
| Poolside (pool) | poolside | pool acp | Proprietary (Poolside End User License Agreement) | refused | A Poolside login or POOLSIDE_API_KEY |
| Qoder CLI | qoder-cli | qoder --acp | Proprietary (Qoder terms of service) | refused | A Qoder account login |
| Qwen Code | qwen-code | qwen --acp | Apache-2.0 | permitted | The configured provider's key (set with /auth) |
| Raven | raven | raven acp | Apache-2.0 | permitted | The configured model provider's key |
| Raxol | raxol | bin/raxol-acp | MIT | permitted | The configured provider's API key |
| siGit Code | sigit | sigit --acp | Apache-2.0 | permitted | None (an on-device model); cloud inference credentials optional |
| Stakpak | stakpak | stakpak acp | Apache-2.0 | permitted | The person's own Anthropic or OpenAI key, or a Stakpak API key (STAKPAK_API_KEY) |
| stdio Bus | stdio-bus | undocumented | Apache-2.0 | permitted | The routed worker's (an OpenAI-compatible key, or the ACP registry worker's keys) |
| VT Code | vtcode | vtcode acp | MIT OR Apache-2.0 | permitted | The configured provider's key (an unofficial ChatGPT login path exists; refused here) |
Each harnessโ
Claude Code (claude-code)โ
Anthropic's coding agent, driven over ACP through the Agent Client Protocol project's adapter on the Claude Agent SDK.
- Credential: An Anthropic API key (ANTHROPIC_API_KEY), the person's own; secrets declared:
ANTHROPIC_API_KEY - Needs: Node 22 (engines.node >=22 on npm), git
- ACP 1:
session/loadyes; modesdefault,plan,acceptEdits,bypassPermissions - Honours
model:yes,subagents:no - Capabilities: resume
load, fork historyreplay, interrupt yes, steering no, images yes, compactionown; vendor session idnone; runs unasked 8 command families (its own read-only allowlist) - Licence read at https://www.npmjs.com/package/@agentclientprotocol/claude-agent-acp; terms read at https://code.claude.com/docs/en/legal-and-compliance
- Anthropic's legal page (read 2026-10-15): running Claude Code in hosted sandboxes or agent infrastructure requires the Commercial Terms; each end user authenticates with their own API key or subscription; developers may not route requests through Free, Pro or Max plan credentials on behalf of their users, nor collect or intermediate Claude.ai credentials. So only API keys are taken; a subscription login is refused. The npm package moved from @zed-industries (0.23.1, March 2026) to @agentclientprotocol.
Codex (codex)โ
OpenAI's coding agent, driven over ACP through the Agent Client Protocol project's adapter, which ships the Codex binary it drives.
- Credential: An OpenAI API key (OPENAI_API_KEY or CODEX_API_KEY), the person's own; secrets declared:
OPENAI_API_KEY - Needs: Node 22 (as the Agent Client Protocol project's adapters; unstated on npm), git
- ACP 1:
session/loadyes; modesread-only,workspace-write,agent,agent-full-access - Honours
model:yes,subagents:no - Capabilities: resume
load, fork historyreplay, interrupt yes, steering no, images yes, compactionown; vendor session idnone; asks about every command - Licence read at https://www.npmjs.com/package/@agentclientprotocol/codex-acp; terms read at https://learn.chatgpt.com/docs/auth
- Codex's authentication page (read 2026-10-15) recommends API keys for automation and device-code login for headless machines; a ChatGPT login needs a browser and is hidden with NO_BROWSER=1 in the adapter. Only API keys are taken; a ChatGPT login is refused. The Zed-scoped package was archived on 22 July 2026 and names this one.
Custom harness (custom)โ
An organization's own ACP agent, its command named by the organization's own harness spec and never typed into a form.
- Credential: The organization's own; secrets declared: none
- Needs: nothing
- Honours
model:no,subagents:no - Capabilities: resume
none, fork historynone, interrupt yes, steering no, images no, compactionown; asks about every command - Licence read at https://agentspecs.datalayer.tech/harnesses; terms read at https://agentspecs.datalayer.tech/harnesses
- Not launchable from the shared catalogue; an organization's own harness spec names the command and answers for its terms.
fast-agent (fast-agent)โ
llmindset's agent framework served over ACP; each agent it defines is a session mode, with any model provider it is configured with.
- Not offered: the catalogue offers four harnesses today โ Claude Code, Codex, OpenCode and pi (28 October 2026); fast-agent is a framework served over ACP, not a coding agent, its adapter is a Python tool the runtime image does not carry, and it has not been drilled on Datalayer.
- Credential: The provider's key fast-agent is given (ANTHROPIC_API_KEY, OPENAI_API_KEY or HF_TOKEN); ANTHROPIC_API_KEY declared; secrets declared:
ANTHROPIC_API_KEY - Needs: uv (uvx), Python 3.12 to 3.15 (requires_python on PyPI)
- ACP 1:
session/loadyes; modes none advertised - Honours
model:yes,subagents:no - Capabilities: resume
load, fork historyreplay, interrupt yes, steering no, images no, compactionown; vendor session idnone; asks about every command - Licence read at https://pypi.org/project/fast-agent-acp/; terms read at https://github.com/evalstate/fast-agent/blob/main/LICENSE
- A framework, not a coding agent: each agent it defines is an ACP mode; the client's MCP servers are attached; sessions are listed. Launched with uvx fast-agent-acp (docs/docs/acp/index.md); reads skills from .fast-agent/skills, .agents/skills and .claude/skills; its default prompt reads AGENTS.md.
Gemini CLI (gemini-cli)โ
Google's coding agent, which speaks ACP itself when started with --experimental-acp.
- Not offered: the catalogue offers four harnesses today โ Claude Code, Codex, OpenCode and pi (28 October 2026); Gemini CLI's API host (generativelanguage.googleapis.com) is outside a Datalayer runtime's egress boundary and is not routed through ai-inference, so it is not offered there.
- Credential: A Gemini API key (GEMINI_API_KEY), the person's own; or a Google login on a Code Assist Standard or Enterprise subscription; secrets declared:
GEMINI_API_KEY - Needs: Node 20 or later (engines.node >=20 on npm), git
- ACP 1:
session/loadno; modesdefault,auto_edit,yolo,plan - Honours
model:yes,subagents:no - Capabilities: resume
none, fork historyreplay, interrupt yes, steering no, images yes, compactionown; vendor session idnone; asks about every command - Tiers: Gemini Code Assist Standard or Enterprise for a Google login (the individuals tier stopped being served on 18 June 2026); a Gemini API key otherwise
- Licence read at https://www.npmjs.com/package/@google/gemini-cli; terms read at https://developers.google.com/gemini-code-assist/resources/privacy-notice-gemini-code-assist-individuals
- Google's notice (read 2026-10-15): "Starting June 18, 2026, Gemini Code Assist IDE extensions stopped serving requests for the Gemini Code Assist for individuals"; Standard and Enterprise follow a separate schedule. The ACP flag is --experimental-acp in the CLI reference (docs/cli/cli-reference.md).
goose (goose)โ
Block's open agent (now the Agentic AI Foundation's), which speaks ACP itself with goose acp; any model provider it is configured with.
- Not offered: the catalogue offers four harnesses today โ Claude Code, Codex, OpenCode and pi (28 October 2026); goose is a binary of its own release, not an npm adapter, the runtime image does not carry it, and it has not been drilled on Datalayer.
- Credential: The provider's key goose is configured with (GOOSE_PROVIDER); ANTHROPIC_API_KEY declared; secrets declared:
ANTHROPIC_API_KEY - Needs: The goose CLI (release v1.54.0 of 8 October 2026), git
- ACP 1:
session/loadno; modes none advertised - Honours
model:yes,subagents:no - Capabilities: resume
none, fork historyreplay, interrupt yes, steering no, images no, compactionown; vendor session idnone; asks about every command - Licence read at https://github.com/aaif-goose/goose; terms read at https://github.com/aaif-goose/goose/blob/main/LICENSE
- Open source under Apache-2.0, no vendor terms of its own; the model provider's terms apply to the key. Launched as goose acp (documentation/docs/gdk/acp/index.md).
OpenCode (opencode)โ
Anomaly's open coding agent, which speaks ACP itself with opencode acp; any model provider it is configured with. On Datalayer its model calls go through Datalayer's ai-inference, on the platform's models and paid in credits, with no key of the account's.
- Credential: The provider's key OpenCode is configured with; ANTHROPIC_API_KEY declared; secrets declared:
ANTHROPIC_API_KEY - Needs: Node (the opencode-ai package), git
- ACP 1:
session/loadno; modes none advertised - Honours
model:yes,subagents:no - Capabilities: resume
none, fork historyreplay, interrupt yes, steering no, images no, compactionown; vendor session idnone; asks about every command - Licence read at https://www.npmjs.com/package/opencode-ai; terms read at https://github.com/anomalyco/opencode/blob/dev/LICENSE
- Open source under MIT, no vendor terms of its own; the model provider's terms apply to the key. Launched as opencode acp (opencode.ai/docs/acp); reads skills from .opencode/skills, .claude/skills and .agents/skills.
OpenHands (openhands)โ
The OpenHands CLI, which speaks ACP itself with openhands acp; any model provider it is configured with.
- Not offered: the catalogue offers four harnesses today โ Claude Code, Codex, OpenCode and pi (28 October 2026); OpenHands' adapter is a Python tool the runtime image does not carry, and it has not been drilled on Datalayer.
- Credential: The provider's key OpenHands reads as LLM_API_KEY, with LLM_MODEL, under --override-with-envs; secrets declared:
LLM_API_KEY - Needs: uv (uvx), Python 3.12 or later, git
- ACP 1:
session/loadyes; modesalways-ask,always-approve,llm-approve - Honours
model:yes,subagents:no - Capabilities: resume
load, fork historyreplay, interrupt yes, steering no, images no, compactionown; vendor session idnone; asks about every command - Licence read at https://pypi.org/project/openhands/; terms read at https://github.com/OpenHands/OpenHands-CLI/blob/main/LICENSE
- Open source under MIT, no vendor terms of its own; the model provider's terms apply to the key. Launched as openhands acp (OpenHands-CLI README; docs.openhands.dev's ACP page); resumes with --resume; reads skills from .agents/skills (.openhands/skills is legacy).
pi (pi)โ
Earendil's pi coding agent, driven over ACP through the pi-acp adapter, which spawns the published pi executable; any model provider pi is configured with.
- Credential: The provider's key pi is configured with; ANTHROPIC_API_KEY declared, the person's own; secrets declared:
ANTHROPIC_API_KEY - Needs: Node 22 (pi-coding-agent engines.node >=22.19.0; pi-acp >=20), the pi executable 1.4.0 on the PATH (@earendil-works/pi-coding-agent), git
- ACP 1:
session/loadyes; modes none advertised - Honours
model:yes,subagents:no - Capabilities: resume
load, fork historyreplay, interrupt yes, steering no, images no, compactionown; vendor session idnone; asks about every command - Licence read at https://www.npmjs.com/package/pi-acp; terms read at https://github.com/earendil-works/pi/blob/main/LICENSE
- Read 2026-10-28. pi speaks no ACP itself; pi-acp 0.0.34 (MIT, an individual's, github.com/svkozak/pi-acp) speaks ACP JSON-RPC over stdio and spawns the published
piexecutable withpi --mode rpc, so pi 1.4.0 runs as published โ chosen over @automatalabs/pi-acp 0.9.4 (Apache-2.0, in-process, which embeds pi 0.87.1 through its SDK on a fork's package). Open source under MIT on both sides, no vendor terms of their own; the model provider's terms apply to the key. Session persistence through pi's own session files (session/load).