skills/ai/acp/SKILL.md
Use when implementing the Agent Communication Protocol (ACP) for REST-based agent-to-agent communication, task delegation, and multimodal message exchange. USE FOR: ACP agent servers, ACP client integration, agent discovery via manifests, run lifecycle management, session-based stateful workflows, BeeAI agents DO NOT USE FOR: JSON-RPC agent communication (use a2a), tool integration for LLMs (use mcp), agent payments (use ap2 or x402), agent definition (use adl)
npx skillsauth add Tyler-R-Kendrick/agent-skills acpInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
ACP is an open protocol (originally from IBM / BeeAI, now contributed to the Linux Foundation alongside A2A) for communication between AI agents, applications, and humans. It uses plain REST endpoints — no JSON-RPC, no specialized transport — making it usable with standard HTTP tools like curl, Postman, or any HTTP client.
Status: The standalone ACP repository is archived. ACP's design has been merged into the A2A project under the Linux Foundation. New projects should evaluate A2A, but existing ACP deployments and the SDK remain functional.
Every ACP agent exposes a manifest describing its capabilities — without revealing implementation details:
{
"name": "research-agent",
"description": "Finds and summarizes information on any topic",
"metadata": {
"capabilities": ["streaming", "sessions"]
}
}
Agents exchange Messages composed of Parts. Each part carries a MIME type, enabling multimodal payloads (text, images, audio, files) without protocol changes:
{
"role": "user",
"parts": [
{
"content": "Summarize this document",
"content_type": "text/plain",
"content_encoding": "plain"
},
{
"content": "<base64-data>",
"content_type": "application/pdf",
"content_encoding": "base64",
"name": "report.pdf"
}
]
}
Parts can carry structured metadata for observability and attribution:
| Method | Path | Description |
|--------|------|-------------|
| GET | /agents | List available agents with their manifests |
| POST | /runs | Execute an agent (sync, async, or streaming) |
pending → running → [awaiting] → completed / error
| State | Meaning |
|-------|---------|
| pending | Run queued, not yet started |
| running | Agent is executing |
| awaiting | Agent paused, requesting external input |
| completed | Finished successfully |
| error | Execution failed |
ACP supports three response modes on a single endpoint:
from acp_sdk.server import Server, Context
from acp_sdk.models import Message, MessagePart
server = Server()
@server.agent()
async def summarizer(input: list[Message], context: Context):
"""Summarizes the provided text."""
for message in input:
text = message.parts[0].content
yield {"thought": "Analyzing content..."}
yield Message(
role="agent/summarizer",
parts=[MessagePart(
content=f"Summary of: {text[:50]}...",
content_type="text/plain"
)]
)
server.run()
from acp_sdk.client import Client
from acp_sdk.models import Message, MessagePart
async with Client(base_url="http://localhost:8000") as client:
# Discover agents
agents = await client.agents()
# Synchronous run
run = await client.run_sync(
agent="summarizer",
input=[Message(
role="user",
parts=[MessagePart(
content="Summarize this article...",
content_type="text/plain"
)]
)]
)
print(run.output)
Sessions enable stateful, multi-turn conversations. The SDK manages session state automatically, giving agents access to complete interaction history:
async with Client(base_url="http://localhost:8000") as client:
# First turn — creates a session
run1 = await client.run_sync(
agent="assistant",
input=[Message(role="user", parts=[
MessagePart(content="My name is Alice", content_type="text/plain")
])]
)
# Second turn — continues the session
run2 = await client.run_sync(
agent="assistant",
session=run1.session_id,
input=[Message(role="user", parts=[
MessagePart(content="What is my name?", content_type="text/plain")
])]
)
For production deployments, ACP supports centralized storage backends:
| Aspect | ACP | A2A | MCP |
|--------|-----|-----|-----|
| Transport | REST (HTTP) | HTTP + JSON-RPC + SSE | stdio, HTTP + SSE |
| Discovery | GET /agents | Agent Cards (.well-known/agent.json) | Capabilities negotiation |
| Interaction | Runs (sync/async/stream) | Tasks (long-running) | Request-response (tool calls) |
| Focus | Agent-to-agent + human-to-agent | Agent-to-agent delegation | Agent-to-tool integration |
| Multimodal | MIME-typed parts | Typed parts | Tool arguments |
| Sessions | Built-in stateful sessions | Task context | Conversation context |
| Language | Server | Client |
|----------|--------|--------|
| Python | acp-sdk | acp-sdk |
| TypeScript | — | acp-sdk |
# Python
pip install acp-sdk
# TypeScript
npm install acp-sdk
GET /agents for runtime discovery so clients can dynamically route to the right agent without hardcoding endpoints.TrajectoryMetadata to parts when exposing reasoning steps for observability.tools
Use when building or maintaining a design system — the coordinated set of design tokens, component libraries, documentation, and tooling that ensures visual and behavioral consistency across products. USE FOR: design system architecture, choosing token formats vs component frameworks, connecting Figma to code, design-to-development workflows, multi-platform consistency DO NOT USE FOR: specific token authoring (use design-tokens), Figma workflows (use figma), component cataloging (use storybook), token transformation (use style-dictionary), cross-framework components (use mitosis)
tools
Use when implementing the x402 protocol for HTTP-native micropayments. Covers server middleware, client payment flows, facilitator integration, and stablecoin payments for APIs and AI agents. USE FOR: API micropayments, monetizing endpoints, stablecoin HTTP payments, automated agent payments for API access DO NOT USE FOR: full commerce flows with cart/checkout (use ap2), agent communication (use a2a), tool integration (use mcp)
tools
Use when implementing or integrating with the Model Context Protocol (MCP) for AI tool servers, resources, prompts, and context management. USE FOR: building MCP tool servers, exposing resources to agents, prompt templates, connecting agents to external APIs DO NOT USE FOR: agent-to-agent communication (use a2a), interactive UI rendering (use mcp-apps), agent payments (use x402 or ap2)
tools
Use when building MCP Apps that serve interactive UI from MCP servers. Covers the ui:// URI scheme, HTML rendering in sandboxed iframes, and bidirectional communication between UI and host. USE FOR: rich UI in agent conversations, interactive dashboards from MCP servers, sandboxed iframe rendering DO NOT USE FOR: basic tool responses without UI (use mcp), agent communication (use a2a), full web applications