Skip to main content

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.

HarnessIdLaunchMCPSkillsInstructionsThird partiesLicencePinned
Claude Codeclaude-codenpx -y @agentclientprotocol/claude-agent-acp@0.91.0lend.claude/skillsCLAUDE.mdapi_key_onlyApache-2.0 (adapter); Anthropic Commercial Terms of Service (the agent)@agentclientprotocol/claude-agent-acp 0.91.0
Codexcodexnpx -y @agentclientprotocol/codex-acp@2.2.2lend.agents/skillsAGENTS.mdapi_key_onlyApache-2.0 (adapter); OpenAI Terms of Use (the agent)@agentclientprotocol/codex-acp 2.2.2
OpenCodeopencodenpx -y opencode-ai@1.19.0 acplend.opencode/skillsAGENTS.mdpermittedMITopencode-ai 1.19.0
pipinpx -y pi-acp@0.0.34lend.pi/skillsAGENTS.mdpermittedMIT (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.

HarnessIdWhy not
fast-agentfast-agentthe 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 CLIgemini-clithe 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.
goosegoosethe 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.
OpenHandsopenhandsthe 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.

AgentIdDocumented commandLicenceThird partiesCredential
AgentPoolagentpoolagentpool serve-acp agents.ymlMITpermittedThe configured provider's key (e.g. OPENAI_API_KEY in the agents YAML or the environment)
Auggie CLI (Augment Code)augment-codeauggie --acpProprietary (Augment CLI licence)refusedAn Augment Code account with an active subscription (auggie login)
AutoDev (Xiuper)autodevxiuper acpMPL-2.0permittedThe configured LLM provider's key (AutoDev's configuration)
BLACKBOX AI CLIblackbox-aiblackbox --experimental-acpProprietary (Blackbox terms of service)refusedA Blackbox AI API key (BLACKBOX_API_KEY)
Bubbubbub acpApache-2.0permittedA provider key (BUB_API_KEY); its OpenAI Codex login is a subscription credential, refused for third parties
Claw Orchestratorclaw-orchestratorclawo acpMITpermittedThe logins or keys of the engines it drives (Claude Code, Codex, OpenCode, โ€ฆ)
Clineclinecline --acpApache-2.0permittedThe person's own provider API key (a Cline account's keys may not be transferred or resold)
Code Assistantcode-assistantcode-assistant acpMITpermittedThe configured provider's key (e.g. ANTHROPIC_API_KEY)
constructconstructconstruct acpMITpermittedProvider API keys, or the logins of the harnesses it drives (whose vendors' terms apply)
crow-clicrow-clicrow-cli acpMITpermittedAn API key for an OpenAI-compatible provider
CUGAcugacuga-acpApache-2.0permittedThe configured provider's key (e.g. OPENAI_API_KEY)
Cursor CLIcursoragent acpProprietary (Cursor terms of service)unknownA Cursor login or a Cursor API key (CURSOR_API_KEY)
Docker Agent (formerly cagent)docker-agentdocker agent serve acp ./agent.yamlApache-2.0permittedThe configured provider's key (OPENAI_API_KEY, ANTHROPIC_API_KEY, โ€ฆ) or Docker Model Runner
Factory Droidfactory-droiddroid exec --output-format acpProprietary (Factory terms of service)refusedA Factory login or a Factory API key (FACTORY_API_KEY)
fountfountundocumentedunknownunknownA fount API key plus the model sources configured in fount
GitHub Copilot CLIgithub-copilotcopilot --acp --stdioProprietary (GitHub Copilot CLI License)unknownA GitHub Copilot subscription login, or a provider of one's own (COPILOT_PROVIDER_*)
Hermes Agenthermes-agenthermes acpMITpermittedThe configured provider's key, or a Nous Portal login
Junie by JetBrainsjuniejunie --acp trueProprietary (JetBrains AI Service terms)refusedA JetBrains account entitled to JetBrains AI (models of one's own also taken)
kaagumkaagumundocumentedGPL-3.0-or-laterpermittedAn API key for an OpenAI-compatible provider (fetched through --api-key-command)
Kimi Code CLIkimi-clikimi acpMITunknownA Kimi Code login or a Moonshot AI Open Platform API key
Kiro CLIkiro-clikiro-cli acpProprietary (AWS Customer Agreement and AWS IP License)unknownA Kiro login (GitHub, Google, AWS Builder ID, IAM Identity Center) or an API key
localharnesslocalharnesslocalharness acp --as <name>Apache-2.0permittedAn on-chain agent identity (turns metered in its token) and a model provider's key
Minion Codeminion-codemcode acpAGPL-3.0permittedThe configured provider's key
Mistral Vibemistral-vibevibe-acpApache-2.0permittedA Mistral API key (MISTRAL_API_KEY)
Muse Spark Codemuse-spark-codemuse-spark-code-acpMITunknownA Muse Code subscription, or a Meta Model API key (--backend modelApi)
OpenClawopenclawopenclaw acpMITpermittedAn OpenClaw Gateway token, with the Gateway's configured model providers
Poolside (pool)poolsidepool acpProprietary (Poolside End User License Agreement)refusedA Poolside login or POOLSIDE_API_KEY
Qoder CLIqoder-cliqoder --acpProprietary (Qoder terms of service)refusedA Qoder account login
Qwen Codeqwen-codeqwen --acpApache-2.0permittedThe configured provider's key (set with /auth)
Ravenravenraven acpApache-2.0permittedThe configured model provider's key
Raxolraxolbin/raxol-acpMITpermittedThe configured provider's API key
siGit Codesigitsigit --acpApache-2.0permittedNone (an on-device model); cloud inference credentials optional
Stakpakstakpakstakpak acpApache-2.0permittedThe person's own Anthropic or OpenAI key, or a Stakpak API key (STAKPAK_API_KEY)
stdio Busstdio-busundocumentedApache-2.0permittedThe routed worker's (an OpenAI-compatible key, or the ACP registry worker's keys)
VT Codevtcodevtcode acpMIT OR Apache-2.0permittedThe 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/load yes; modes default, plan, acceptEdits, bypassPermissions
  • Honours model: yes, subagents: no
  • Capabilities: resume load, fork history replay, interrupt yes, steering no, images yes, compaction own; vendor session id none; 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/load yes; modes read-only, workspace-write, agent, agent-full-access
  • Honours model: yes, subagents: no
  • Capabilities: resume load, fork history replay, interrupt yes, steering no, images yes, compaction own; vendor session id none; 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 history none, interrupt yes, steering no, images no, compaction own; 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/load yes; modes none advertised
  • Honours model: yes, subagents: no
  • Capabilities: resume load, fork history replay, interrupt yes, steering no, images no, compaction own; vendor session id none; 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/load no; modes default, auto_edit, yolo, plan
  • Honours model: yes, subagents: no
  • Capabilities: resume none, fork history replay, interrupt yes, steering no, images yes, compaction own; vendor session id none; 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/load no; modes none advertised
  • Honours model: yes, subagents: no
  • Capabilities: resume none, fork history replay, interrupt yes, steering no, images no, compaction own; vendor session id none; 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/load no; modes none advertised
  • Honours model: yes, subagents: no
  • Capabilities: resume none, fork history replay, interrupt yes, steering no, images no, compaction own; vendor session id none; 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/load yes; modes always-ask, always-approve, llm-approve
  • Honours model: yes, subagents: no
  • Capabilities: resume load, fork history replay, interrupt yes, steering no, images no, compaction own; vendor session id none; 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/load yes; modes none advertised
  • Honours model: yes, subagents: no
  • Capabilities: resume load, fork history replay, interrupt yes, steering no, images no, compaction own; vendor session id none; 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 pi executable with pi --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).