A2A 协议 (a2a)
Headless 命令 — 不依赖桌面 GUI,直接使用核心包运行。适用于服务器、CI/CD、容器化等无桌面环境。
核心特性
- 🤖 Agent Card 注册: 声明式智能体能力描述卡片
- 🔎 能力发现: 基于关键词和能力标签的智能体搜索
- 📨 任务生命周期: submitted → working → completed / failed / input-required 完整状态机
- 🤝 能力协商: 任务分配前的能力匹配与协商机制
- 📡 订阅系统: 实时监听任务状态变更通知
- 🌐 去中心化: 基于本地注册表的 P2P 式智能体发现
概述
ChainlessChain CLI 实现了 A2A(Agent-to-Agent)协议,为智能体间通信提供标准化接口。每个智能体通过注册 Agent Card 声明自己的名称、能力、技能和端点 URL。其他智能体可通过 discover 命令发现具有特定能力的伙伴,并通过 submit 发送任务。
任务遵循标准状态机:提交后进入 submitted 状态,执行中转为 working,最终进入 completed(成功)、failed(失败)或 input-required(需要额外输入)。智能体可通过 negotiate 命令在任务分配前验证目标智能体是否具备所需能力。
命令参考
a2a register — 注册 Agent Card
bash
chainlesschain a2a register <name>
chainlesschain a2a register "code-reviewer" --description "Code review agent" --capabilities "review,lint,test"
chainlesschain a2a register "translator" --url "http://localhost:8080" --skills "translate,summarize"
chainlesschain a2a register "analyzer" --json注册一个新的 Agent Card,声明智能体的名称、描述、能力列表、技能列表和端点 URL。
a2a discover — 发现智能体
bash
chainlesschain a2a discover
chainlesschain a2a discover --capability "review" # 按能力搜索
chainlesschain a2a discover --name "translator" --json # 按名称搜索搜索已注册的智能体。支持按能力、名称、技能等条件过滤。
a2a submit — 提交任务
bash
chainlesschain a2a submit <agent-id> <message>
chainlesschain a2a submit agent-001 "Review this code" --json向指定智能体提交一个任务,任务进入 submitted 状态等待处理。
a2a status — 查看任务状态
bash
chainlesschain a2a status <task-id>
chainlesschain a2a status <id> --json查看任务的当前状态及详细信息(提交时间、处理智能体、结果等)。
a2a complete — 完成任务
bash
chainlesschain a2a complete <task-id> --result "Review passed, 2 suggestions"
chainlesschain a2a complete <id> --result "Done" --json将任务标记为已完成,附带结果信息。
a2a fail — 标记任务失败
bash
chainlesschain a2a fail <task-id> --reason "Unsupported language"
chainlesschain a2a fail <id> --reason "Timeout" --json将任务标记为失败,附带失败原因。
a2a peers — 列出对等节点
bash
chainlesschain a2a peers
chainlesschain a2a peers --json列出所有已注册的 A2A 对等节点及其状态。
a2a cards — 列出所有 Agent Card
bash
chainlesschain a2a cards
chainlesschain a2a cards --json显示所有已注册 Agent Card 的完整信息。
a2a negotiate — 能力协商
bash
chainlesschain a2a negotiate <agent-id> --capability "code-review"
chainlesschain a2a negotiate <id> --capability "translate" --json与指定智能体进行能力协商,确认其是否具备所需能力并获取协商结果。
任务状态机
submitted ──→ working ──→ completed
│
├──→ failed
│
└──→ input-required ──→ working数据库表
| 表名 | 说明 |
|---|---|
a2a_agent_cards | Agent Card 注册表(名称、描述、能力、技能、URL、状态) |
a2a_tasks | 任务记录(状态、提交者、处理者、消息、结果、时间戳) |
系统架构
用户命令 → a2a.js (Commander) → a2a-protocol.js
│
┌────────────────┼────────────────┐
▼ ▼ ▼
Card 注册表 任务调度器 能力协商器
(agent_cards) (状态机驱动) (匹配+验证)
│ │ │
▼ ▼ ▼
a2a_agent_cards a2a_tasks 表 协商结果缓存关键文件
packages/cli/src/commands/a2a.js— 命令实现packages/cli/src/lib/a2a-protocol.js— A2A 协议库
使用示例
场景 1:注册 Agent 并发现协作者
bash
# 注册一个代码审查 Agent
chainlesschain a2a register \
--name "code-reviewer" \
--description "专注代码质量和安全审查" \
--capabilities '["code-review","security-audit"]' \
--skills '["javascript","python","go"]'
# 发现有代码审查能力的 Agent
chainlesschain a2a discover --capability code-review
# 查看所有已注册的 Agent Card
chainlesschain a2a cards --json场景 2:任务分发与跟踪
bash
# 向指定 Agent 提交任务
chainlesschain a2a submit <agent-id> \
"审查 src/lib/auth.js 的安全漏洞"
# 查看任务状态和历史
chainlesschain a2a status <task-id> --json
# Agent 完成任务后标记完成
chainlesschain a2a complete <task-id> \
--output '{"issues":3,"severity":"medium"}'
# 任务失败时标记失败
chainlesschain a2a fail <task-id> --error "Agent 超时"场景 3:能力协商
bash
# 协商两个 Agent 之间的共同能力
chainlesschain a2a negotiate <agent-a-id> <agent-b-id>
# 查看所有活跃的 peer Agent
chainlesschain a2a peers故障排查
任务状态异常
| 症状 | 可能原因 | 解决方案 |
|---|---|---|
| 任务一直停在 "submitted" | 目标 Agent 未消费任务 | 检查 Agent 是否在线:a2a peers |
| "Agent not found" 错误 | Agent Card 未注册或已删除 | 使用 a2a cards 查看可用 Agent |
| 任务提交后无响应 | 能力不匹配 | 先 a2a negotiate 确认能力兼容性 |
| 任务状态查询返回空 | task-id 格式错误 | 使用 a2a status --json 确认正确的任务 ID |
常见错误
bash
# 错误: "Agent not found"
# 原因: 指定的 agent-id 不存在
# 修复: 先注册或搜索 Agent
chainlesschain a2a discover --capability code-review
# 错误: "Task cannot transition from completed to working"
# 原因: 已完成的任务不能重新进入 working 状态
# 修复: 提交新任务
chainlesschain a2a submit <agent-id> "new task"
# 错误: "No compatible capabilities"
# 原因: 两个 Agent 没有共同能力
# 修复: 检查双方能力注册
chainlesschain a2a cards --json安全考虑
- Agent 身份验证: Agent Card 支持
auth_type字段(none/api-key/oauth),生产环境建议配置认证 - 任务隔离: 每个任务有独立的输入/输出/历史记录,Agent 之间的任务数据相互隔离
- 能力声明验证: 注册时的 capabilities 和 skills 会被存储和索引,其他 Agent 可据此验证能力真实性
- 状态机约束: 任务状态严格按照 submitted→working→completed/failed 的状态机流转,防止非法状态跳转
- 数据最小化: 任务输出仅包含必要信息,避免在 Agent 间传递敏感数据
