Govern the Anthropic Agent SDK
The Anthropic Agent SDK ships Skills as first-class primitives and supports nested sub-agents. ACP maps each Skill onto a registered agent profile so every Skill invocation, tool call, and sub-agent hop is scoped, budgeted, and auditable.
Disambiguation
The Anthropic Agent SDK is not Claude Code. Claude Code is a terminal application. The Agent SDK is a TypeScript / Python library for building agents that run in your own infrastructure. Both are governed by ACP — see Claude Code integration for the CLI version.
TL;DR — adapter pattern (works today)
import Anthropic from "@anthropic-ai/sdk";
import { governTool } from "@agenticcontrolplane/governance-anthropic"; // pre-release
const client = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
defaultHeaders: {
"x-acp-workspace": process.env.ACP_WORKSPACE,
"x-acp-key": process.env.ACP_API_KEY,
},
});
async function runSkill(name: string, input: unknown) {
return governTool({
agentProfileId: name,
tool: `skill.${name}`,
input,
execute: () => client.messages.create({ ... }),
});
}
Each Skill registers as an ACP agent profile. Sub-agent invocations create chain links automatically.
How it works
The adapter intercepts at the SDK boundary:
- Verifies your
gsk_key resolves to a workspace and a human identity - Checks the Skill’s scopes and tools against the chain
- Records the Skill call in the audit log with full provenance
- Returns the model’s response or a denial
When a Skill invokes a sub-Skill, the adapter starts a child chain link — parentAgent, agent_name, narrowed scopes, propagated budget all flow naturally.
Mapping to ACP
| Anthropic Agent SDK | ACP |
|---|---|
| Skill | AgentProfile with scopes, tools, budget |
| Sub-agent | Child link in delegation chain |
| Tool definition | Registered ACP tool (built-in or custom connector) |
| Messages API call | Governed at adapter (today) or via native passthrough (coming) |
Claude’s tool_use block |
Maps to governToolCall() — seven-layer pipeline runs |
What you’ll see in the dashboard
Each Skill appears as a distinct agent on the Agents page. Sub-agent chains render in the Run Details panel — supervisor → researcher → analyst with scope and budget shown at each hop.
Roadmap
- Today: adapter pattern. Wraps the SDK, ~20 lines of glue code.
- Next: native
/v1/messagespassthrough — drop ACP’s base URL into the Anthropic SDK constructor with no wrapper code. - Soon: first-class Skills support — register your
skills.yamlwith ACP and every Skill auto-creates a profile, scopes, and budget.
Limitations
- Adapter package pre-release. Functional but not on npm yet. Use the inline
governToolpattern from the blog post until published. - Native Messages API passthrough is pending. Today the adapter pattern is required; soon you’ll be able to skip the wrapper entirely.
- Skills authored in YAML need manual registration as ACP profiles today. Auto-registration coming with first-class Skills support.
- Streaming Messages calls work but the adapter unwraps the stream to apply governance before returning. May add small latency on long generations.
Related integrations
- Claude Code — Anthropic’s terminal CLI (different product, both governed)
- OpenAI Agents SDK — competing multi-agent SDK, same A2A model
- CrewAI — Python multi-agent framework
- Agent-to-Agent governance — the chain spec
- Blog: Governing the Anthropic Agent SDK