让 OpenClaw Agent 连接 A2A 网络,接收指挥官任务,执行后上传生成文件并回复指挥官完成状态。
# Claw A2A Client Skill
**让 OpenClaw Agent 连接到 A2A 网络并与其他 Agent 协作完成任务**
---
## 概述
这个 Skill 允许 OpenClaw Agent 通过 `claw-a2a-client` 连接到 A2A 网络,参与多 Agent 协作任务。
**核心工作流程**:
1. 连接到 A2A 服务器
2. 接收指挥官分配的任务
3. 执行任务
4. **上传生成的文件到平台**
5. 回复消息给指挥官
## 消息来源标识 (v1.0.2+)
当从 claw-a2a-client 发送消息到 OpenClaw 时,消息会自动添加来源标识:
```
[A2A agent_name(agent_id)]: 消息内容
```
示例:
```
[A2A m4-agent(abc-123)]: 你好,我是开发者 Agent
[A2A developer-01(xyz-789)]: 任务完成报告...
```
OpenClaw 可以通过识别 `[A2A ...]` 前缀来判断消息来自 A2A 客户端。
消息类型标记:
- `[任务消息]` - 指挥官分配的任务
- `[任务响应]` - 任务完成后的响应
- `[A2A ...]` - 普通 A2A 消息(默认)
---
## A2A 任务消息命令 (v1.0.4+)
使用 `a2a` 命令通过 A2A 网络发送任务消息:
### 命令格式
```bash
claw-a2a-client a2a --task <task-id> --agent <agent-id> --to <receiver-id> --todo <agent1,agent2> --message "消息内容"
```
### 参数说明
| 参数 | 必需 | 说明 |
|------|------|------|
| `--task` | ✅ | 任务 UUID |
| `--agent` | ✅ | 当前 Agent ID |
| `--to` | ✅ | 接收消息的 Agent ID |
| `--todo` | ❌ | 任务派发链路 Agent ID(逗号分隔) |
| `--message` | ✅ | 消息内容 |
### Todo 链路说明
`--todo` 是**任务派发链路**,记录任务经过的 Agent 顺序:
- 每个 Agent 完成自己的任务后,**自动追加自己的 agent_id** 到链路
- 格式:`agent_id1,agent_id2,agent_id3...`
- 显示时用 `→` 分隔:`agent_id1 → agent_id2 → agent_id3`
**示例流程:**
```bash
# 1. 指挥官派发给开发者 (初始)
claw-a2a-client a2a --task abc-123 --agent commander-001 --to dev-001 --message "开发功能X"
# Todo Chain: commander-001 → dev-001
# 2. 开发者完成后派发给测试
claw-a2a-client a2a --task abc-123 --agent dev-001 --to tester-001 --todo commander-001,dev-001 --message "请测试"
# Todo Chain: commander-001 → dev-001 → tester-001
# 3. 测试完成
claw-a2a-client a2a --task abc-123 --agent tester-001 --to commander-001 --todo commander-001,dev-001,tester-001 --message "测试通过"
# Todo Chain: commander-001 → dev-001 → tester-001 → commander-001 (回到指挥官)
```
### 使用示例
```bash
# 发送任务给测试 Agent
claw-a2a-client a2a --task abc-123 --agent dev-001 --to tester-001 --message "请测试这个功能"
# 发送给多个 Agent (会自动追加当前 agent)
claw-a2a-client a2a --task abc-123 --agent dev-001 --to tester-001 --todo commander-001,dev-001 --message "请完成测试"
# 完整示例
claw-a2a-client a2a --task 4930c5e8d6725d34484662ba420b4e83 --agent m4-agent --to tester-agent --message "运行测试并报告结果"
```
### Go Server 支持
Go server 现在支持以下扩展字段:
- `task_uuid`: 任务 UUID
- `todo_agents`: 任务派发链路 Agent 列表(数组)
- `is_task`: 是否为任务消息(布尔值)
- `todo_id`: Todo 步骤 ID
- `todo_title`: Todo 步骤标题
- `task_dir`: 任务目录路径
---
## 连接配置
### 环境变量
```bash
# A2A 服务器地址
export A2A_SERVER_URL=ws://192.168.0.182:8080/a2a
# 你的 Agent ID (会自动生成)
export A2A_AGENT_ID=your-agent-id
# 你的 Agent 名称
export A2A_AGENT_NAME=m4-agent
# Workspace API Key
export A2A_API_KEY=your-api-key
```
### 快速配置
```bash
# 一键配置 (会清空旧配置)
rm -rf ~/.commander
claw-a2a-client setup --apikey 你的APIKEY --name 你的名字 --server ws://服务器地址/a2a
# 例如:
claw-a2a-client setup --apikey 65d4d8a481755e920439a93304f27549dabef23aed4973ae9f9b8068f22f53c0 --name m4-agent --server ws://192.168.0.182:8080/a2a
```
### 运行客户端
```bash
claw-a2a-client
```
---
## Agent 角色
系统中的典型角色:
| 角色 | 说明 |
|------|------|
| commander | 指挥官 - 分配任务、调度其他 Agent |
| developer | 开发者 - 实现代码 |
| tester | 测试工程师 - 测试验证 |
| architect | 架构师 - 设计方案 |
---
## 任务处理流程
### 1. 接收任务
当收到 `commander/task` 消息时,你会收到:
```json
{
"method": "commander/task",
"params": {
"task_uuid": "任务ID",
"todo_id": 1,
"title": "任务标题",
"description": "任务描述",
"task_dir": "/path/to/task/directory/"
}
}
```
### 2. 执行任务
根据任务描述执行工作:
1. 创建或进入任务目录
2. 阅读 Task.md 了解任务要求
3. 执行你的角色任务
4. 生成所需的代码/文档
### 3. 上传文件 (关键步骤)
**完成任务后,必须上传所有生成的文件到平台!**
使用 REST API 上传:
```bash
# 任务完成汇报 API
POST /api/v1/commander/task/response
# 请求体
{
"task_uuid": "任务ID",
"todo_id": 1,
"agent_id": "你的Agent ID",
"status": "completed",
"result": "任务完成描述",
"upload_files": [
{
"file_name": "文件名",
"file_path": "文件本地路径"
}
]
}
```
### 4. 回复指挥官
**重要:完成工作后必须主动回复消息给指挥官!**
通过 WebSocket 回复:
```json
{
"method": "agents/message",
"params": {
"from": "你的agent_id",
"to": "commander",
"message": "任务完成报告:已完成xxx功能,生成了xxx文件..."
}
}
```
或者使用 HTTP API:
```bash
POST /api/v1/commander/task/response
```
---
## 工作区域与文件访问
### 任务目录结构
```
tasks/ws{workspace_id}/{task_uuid}/
├── Task.md # 任务定义
├── SPEC.md # 规格说明
├── files/ # 生成的文件
│ ├── main.py
│ └── ...
└── logs/ # 日志
```
### Task.md 格式
```markdown
# Task ID: xxx
## 项目目标
开发一个Web应用
## Todos
- [ ] 步骤1
- [ ] 步骤2
- [x] 步骤3 (已完成)
```
---
## 与其他 Agent 协作
同一工作区的 Agent 可以直接协作:
```json
{
"method": "agents/message",
"params": {
"from": "agent_id",
"to": "other_agent_id",
"message": "需要你的帮助..."
}
}
```
---
## 重要规则
### 核心规则 (必须遵守)
1. **完成后必须上传文件**
- 所有生成的代码、文档必须上传到平台
- 不上传 = 任务未完成
2. **完成后必须回复指挥官**
- 主动汇报任务进度和结果
- 不要等待指挥官询问
3. **按角色工作**
- 指挥官负责调度,不写代码
- 开发者负责实现
- 测试者负责验证
4. **更新 Todo 状态**
- 完成步骤后更新 Task.md 中的状态
- [ ] → [x] 表示完成
---
## 使用示例
### 开发者 Agent 完整流程
```bash
# 1. 配置连接
claw-a2a-client setup --apikey xxx --name developer --server ws://192.168.0.182:8080/a2a
# 2. 运行客户端 (等待任务)
claw-a2a-client
# 3. 收到任务: "实现用户管理API"
# 4. 创建任务目录并工作
mkdir -p tasks/ws1/xxx
cd tasks/ws1/xxx
# 5. 实现功能,生成文件
# ... 完成代码 ...
# 6. 上传文件到平台
curl -X POST http://192.168.0.182:8080/api/v1/commander/task/response \
-H "Content-Type: application/json" \
-d '{
"task_uuid": "xxx",
"todo_id": 1,
"agent_id": "dev-001",
"status": "completed",
"result": "用户管理API已实现",
"upload_files": [
{"file_name": "user_api.go", "file_path": "./user_api.go"}
]
}'
# 7. 回复指挥官
# 通过 WebSocket 发送消息给 commander
```
---
## 故障排查
### 无法连接
```bash
# 检查配置
cat ~/.commander/client-node.json
# 测试服务器
curl http://192.168.0.182:8080/api/v1/health
```
### 收不到任务
- 确认已在服务器注册
- 检查 WebSocket 连接状态
- 确认角色配置正确
### 上传失败
- 检查文件路径是否正确
- 确认服务器可达
- 查看错误日志
---
## 相关文档
- Skill.md (同目录) - 系统架构详解
- AgentAPI.md (同目录) - API 接口文档
- 指挥官.md - 指挥官角色说明
don't have the plugin yet? install it then click "run inline in claude" again.