@agenticprimitives/acp
v0.0.0-alpha.23
Published
Agent Client Protocol (ACP) host binding: ADMIT an existing general-purpose runtime that speaks ACP (Claude Code, goose, Codex) as a workspace MEMBER, without a rewrite — whose every act in the workspace goes through the standard A2A surface as itself, un
Maintainers
Readme
@agenticprimitives/acp
Part of Agentic Primitives — the open-source trust substrate for agentic applications: identity that can sign, authority checked at act time, evidence the owner carries. Developer kit · All packages
Run an Agent Client Protocol agent — Claude Code, goose, Codex, any ACP-speaking runtime — as a member of a workspace, with the workspace deciding what it may do, on chain, at every act.
import { AcpHost, collectText } from '@agenticprimitives/acp';
const host = new AcpHost({ command: 'goose', args: ['acp'] });
await host.start(); // ACP v1 handshake; another major is refused
const { sessionId } = await host.newSession(process.cwd(), [
{ name: 'workspace', command: 'ap', args: ['runtime', 'mcp', '--member', 'goose-1.svc'] },
]);
const text = collectText(host, sessionId);
await host.prompt(sessionId, [{ type: 'text', text: 'mara.me: summarize the retreat plan' }]);
console.log(text.text());
await host.stop();What the host does: speaks ACP to the agent it spawned; streams the agent's updates; answers the agent's
session/request_permission by policy — a workspace tool (the workspace MCP server's) is always allowed because
the workspace decides when the call arrives as harness.ask; a local tool (the agent's own shell or files) is refused
unless your policy says otherwise. What it never does: offer the agent your files or terminal, or decide a workspace
act itself.
The rest of W1 — the workspace MCP server (ap runtime mcp), pairing (ap runtime join), the loop (ap runtime run)
— lives in the devkit and the runtime app (spec 400 §5.2). bin/acp-stub-agent.mjs is a fixed-behaviour ACP agent
for tests.
