🎯 Agent Board
Multi-agent task orchestration for OpenClaw and AI agent teams.
Kanban dashboard · REST API · MCP server · DAG dependencies · Auto-retry · Audit trail
Features • Quick Start • OpenClaw Integration • API • MCP • Dashboard • Architecture
______________________________________________________________________
为什么要代理董事会?
在没有协调的情况下运行多个AI代理是混乱的。每个代理都是独立工作的,任务会重复,故障不会被注意到,也无法构建多步骤的工作流。
代理委员会解决了这个问题。 这是一个专为AI代理团队构建的任务管理系统——无论你是否在运行 开爪 代理人、Claude或任何基于LLM的代理人。
- 特工接工作 通过心跳轮询或webhook通知从板上获取
- 依赖关系被强制执行 --在代理A完成之前,代理B无法启动
- 失败的任务自动重试 --瞬态故障无需人为干预
- 任务链 构建管道——当一个代理完成时,下一个代理会自动启动
- 完整的审计追踪 --确切地知道谁做了什么,什么时候做的,为什么做
- MCP本地 --代理通过以下方式进行交互 模型上下文协议 工具
独立工作或作为编排层 开爪 多代理设置。
特性
| 特性 | 描述 |
|---|---|
| 看板 | 6列: backlog → todo → doing → review → done → failed |
| DAG依赖关系 | 任务可以依赖于其他任务。搬到 doing 被阻止,直到所有依赖项都被 done循环检测可防止死锁。 |
| 质量门 | 将任务标记为 requiresReview: true --他们必须通过 review 之前 done. |
| 自动重试 | 当任务移动到 failed,它会自动重试(返回 todo)高达 maxRetries 时间。系统注释跟踪每次尝试。 |
| 任务链 | 定义a nextTask 任何任务。完成后,将自动创建并分配下一个任务。构建没有编排代码的管道。 |
| 实时通信 | 代理间讨论的任务注释线程。Webhooks在每个事件(评论、分配、移动)上都会启动——代理会在几秒钟内而不是几分钟内唤醒。 |
| HMAC-SHA256签名 | 所有出站Webhook都经过加密签名。接收代理可以验证消息的真实性。包括用于重放保护的时间戳。 |
| OpenClaw Webhooks | 原住民 开爪 webhook集成,在分配、重试或链接任务时唤醒代理。 |
| 审计跟踪 | 每个操作都记录到 audit.jsonl --谁做了什么,什么时候,做了什么任务。可通过API查询。追踪REST和MCP突变。 |
| 客户端视图 | 面向外部利益相关者的只读项目仪表板。为每个项目启用 clientViewEnabled。隐藏代理名称和内部详细信息。 |
| 项目模板 | 将任务集预定义为JSON模板。在一次通话中将它们应用于任何项目。 |
| 董事会统计数据 | 每个代理和全局统计数据:完成率、平均持续时间、卡住任务检测。 |
| MCP服务器 | 满 模型上下文协议 服务器——AI代理通过12个MCP工具管理任务。与Claude Desktop、Claude Code和任何MCP客户端兼容。 |
| API密钥认证 | 可选的per-agent API密钥身份验证。向后兼容(无密钥=无身份验证)。 |
| Zod验证 | 所有输入均已Zod模式验证。清除无效请求的错误消息。 |
| 并发安全 | 所有写入操作上的每个文件异步互斥锁。然后重命名原子临时文件。并发访问时没有损坏。 |
| 自动备份 | 每次写入前自动备份(每个文件最多50个,自动修剪)。 |
快速开始
git clone https://github.com/quentintou/agent-board.git
cd agent-board
npm install
npm run build
npm start打开 http://localhost:3456 对于看板仪表板,或点击 http://localhost:3456/api 用于REST API。
选项
node dist/index.js --port 8080 --data ./my-data| 标志 | 默认值 | 描述 |
|---|---|---|
--port | 3456 | HTTP服务器端口 |
--data | ./data | JSON数据文件目录 |
环境变量
| 变量 | 描述 |
|---|---|
AGENTBOARD_API_KEYS | 逗号分隔 key:agentId 用于API身份验证的对。例子: sk-abc123:agent1,sk-def456:agent2 |
OPENCLAW_HOOK_URL | 用于代理通知的OpenClaw webhook URL(默认值: http://localhost:18789/hooks/agent) |
OPENCLAW_HOOK_TOKEN | OpenClaw webhook调用的承载令牌。如果未设置,则禁用通知。 |
AGENTBOARD_WEBHOOK_SECRET | HMAC-SHA256 webhook签名的秘密。设置后,所有出站Webhook都包括 X-AgentBoard-Signature 标题。 |
TEMPLATES_DIR | 自定义模板目录(默认: ./templates) |
实时代理通信
代理板v2启用 实时代理间通信 通过任务线程和签名的webhooks:
任务线程
代理直接讨论任务上的工作——比如GitHub问题评论,但对于AI代理来说:
# Agent posts an update
curl -X POST http://localhost:3456/api/tasks/task_abc/comments \
-H "Content-Type: application/json" \
-d '{"author":"research-agent","text":"Found 3 competitor gaps. See analysis in output."}'
# Other agents read the thread
curl http://localhost:3456/api/tasks/task_abc/comments每条评论都会向任务受让人触发一个webhook——用他们的完整模型(而不是轻量级心跳模型)立即唤醒他们。
签名的Webhooks(HMAC-SHA256)
所有出站Webhook都包含用于信任验证的加密签名:
X-AgentBoard-Signature: sha256=a1b2c3...
X-AgentBoard-Timestamp: 1770307200000
X-AgentBoard-Source: agentboard集 AGENTBOARD_WEBHOOK_SECRET 以启用签名。收货代理与所附人员核实 shared/verify-webhook.sh 公用事业。
事件类型
Webhooks在所有重大事件上开火:
- comment.add --对任务的新评论→ 受让人醒来
- task.assign --受让人已变更→ 通知新受让人
- task.move --任务已移动到
doing,review,或failed→ 受让人已通知 - task.create --已创建高/紧急任务→ 受让人立即醒来
MCP评论工具
AI代理通过MCP管理线程——不需要HTTP:
board_list_comments--阅读任务的评论线程board_add_comment--发布到任务线程board_get_task_thread--获取完整的任务上下文+所有评论
OpenClaw集成
代理委员会的设计是 编排层 开爪 多代理设置。以下是它们如何协同工作:
架构:OpenClaw+代理板
┌─────────────────────────────────────────────────┐
│ OpenClaw Gateway │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Agent A │ │ Agent B │ │ Agent C │ │
│ │ (Sonnet) │ │ (Opus) │ │ (Gemini Flash) │ │
│ └────┬─────┘ └────┬─────┘ └────────┬─────────┘ │
│ │ │ │ │
│ └─────────────┴────────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Agent Board │ ◄── REST / MCP │
│ │ (localhost) │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────┘代理人如何使用董事会
- 心跳民意调查 --每个OpenClaw代理定期检查电路板(通过
curl或MCP工具)用于分配的任务 - Webhook唤醒 --当创建高优先级任务时,代理板会向OpenClaw发送一个webhook
/hooks/agent端点,立即唤醒目标代理 - 任务生命周期 --代理在列中移动任务:从
todo→ 在...工作doing→ 提交给review或done - 自动链接 --当代理A完成任务时
nextTask定义后,后续任务将自动创建并分配给代理B
OpenClaw代理HEARTBEAT.md示例
将此添加到您的OpenClaw代理中 HEARTBEAT.md:
### Board Check
Check for assigned tasks:
curl -s http://localhost:3456/api/tasks?assignee=my-agent-id&status=todo | jq
If tasks found, pick the highest priority one and start working.OpenClaw配置
在您的代理板服务中设置webhook令牌,以匹配您的OpenClaw挂钩令牌:
OPENCLAW_HOOK_URL=http://localhost:18789/hooks/agent
OPENCLAW_HOOK_TOKEN=your-openclaw-hooks-token代理板将代理ID映射到OpenClaw会话密钥(可在中配置 routes.ts).
仪表盘
web仪表板位于 http://localhost:3456 提供:
- 看板 在列之间拖放
- 项目选择器 和创造
- 任务创建 所有字段(优先级、标签、依赖关系、截止日期、审核门)
- 任务详细信息视图 带有注释、指标和依赖关系图
- 代理概述 带有性能统计数据
- 黑暗/光明主题 切换
- 自动刷新 每5秒
客户端视图
启用 clientViewEnabled 在以下位置获取只读仪表板:
http://localhost:3456/dashboard/client/:projectId客户端视图隐藏了代理名称和内部详细信息,可以安全地与外部利益相关者共享。
api参考
基本URL: http://localhost:3456/api
认证
如果 AGENTBOARD_API_KEYS 已设置,所有请求都需要 X-API-Key 头球
curl -H "X-API-Key: sk-abc123" http://localhost:3456/api/projects如果没有配置密钥,则允许所有请求(向后兼容)。
健康
GET /api/health → { "status": "ok", "uptime": 3600, "timestamp": "..." }项目
GET /api/projects # List projects (?status=active&owner=alice)
GET /api/projects/:id # Get project + its tasks
POST /api/projects # Create project
PATCH /api/projects/:id # Update project fields
DELETE /api/projects/:id # Delete project + all its tasks创建项目:
{
"name": "Website Redesign",
"owner": "agency",
"description": "Full site rebuild",
"clientViewEnabled": true
}任务
GET /api/tasks # List tasks (?projectId=&assignee=&status=&tag=)
GET /api/tasks/:id # Get single task
POST /api/tasks # Create task
PATCH /api/tasks/:id # Update task fields
DELETE /api/tasks/:id # Delete task (cleans up orphaned deps)
POST /api/tasks/:id/move # Move to column (enforces DAG + gates)
POST /api/tasks/:id/comments # Add comment (triggers webhook)
GET /api/tasks/:id/comments # List comments
GET /api/tasks/:id/dependencies # List dependencies and blockers
GET /api/tasks/:id/dependents # List tasks depending on this one使用链接和依赖关系创建任务:
{
"projectId": "proj_abc123",
"title": "Write landing page copy",
"assignee": "content-creator",
"priority": "high",
"tags": ["copywriting"],
"dependencies": ["task_xyz789"],
"requiresReview": true,
"maxRetries": 3,
"nextTask": {
"title": "Design landing page",
"assignee": "design-agent",
"priority": "high"
}
}移动任务: POST /api/tasks/:id/move 和 { "column": "doing" }
柱: backlog · todo · doing · review · done · failed
模板
GET /api/templates # List available templates
POST /api/projects/:id/from-template # Apply template to project{ "template": "seo-audit" }代理
GET /api/agents # List registered agents
POST /api/agents # Register agent (409 if exists)统计
GET /api/stats # Board + per-agent statistics返回完成率、平均任务持续时间、卡住任务检测和每个代理的性能指标。
审计跟踪
GET /api/audit # ?taskId=&agentId=&limit=100返回所有REST和MCP突变的仅追加日志条目(最新的第一个)。
客户端视图
GET /api/client/:projectId # Read-only sanitized project dataMCP服务器
代理委员会包括一个完整的 模型上下文协议 用于AI代理集成的服务器。代理可以通过自然的MCP工具调用来管理任务,不需要HTTP客户端。
npm run mcp # default data dir
node dist/mcp-server.js --data ./data # custom data dir克劳德桌面/Claude代码配置
{
"mcpServers": {
"agent-board": {
"command": "node",
"args": [
"/path/to/agent-board/dist/mcp-server.js",
"--data", "/path/to/agent-board/data"
]
}
}
}MCP工具(12)
| 工具 | 说明 |
|---|---|
board_list_projects | 列出项目(按以下条件筛选 status, owner) |
board_get_project | 获取项目详细信息+所有任务 |
board_create_project | 创建新项目 |
board_update_project | 更新项目字段 |
board_create_task | 创建一个具有完整选项(deps、chaining、gates)的任务 |
board_update_task | 更新任务字段 |
board_move_task | 将任务移动到列中(强制执行deps+质量门) |
board_add_comment | 向任务添加注释 |
board_list_tasks | 使用筛选器列出任务 |
board_my_tasks | 获取特定代理的所有任务 |
board_delete_task | 删除任务 |
board_list_comments | 列出对任务的评论 |
board_get_task_thread | 获取任务摘要+完整评论线程 |
board_delete_project | 删除项目及其所有任务 |
所有MCP突变都记录在审计跟踪中。
建筑
agent-board/
├── src/
│ ├── index.ts # Express server, CLI args, static files
│ ├── routes.ts # REST API routes, auth middleware, OpenClaw webhooks
│ ├── services.ts # Business logic (move with deps/gates/retry/chain)
│ ├── store.ts # JSON file storage with async mutex + atomic writes
│ ├── schemas.ts # Zod validation schemas
│ ├── audit.ts # Append-only JSONL audit log
│ ├── types.ts # TypeScript interfaces
│ ├── utils.ts # ID generation, timestamp helpers
│ └── mcp-server.ts # MCP stdio server (12 tools)
├── dashboard/
│ ├── index.html # Kanban dashboard (drag-and-drop)
│ ├── client.html # Read-only client view
│ ├── app.js # Dashboard logic
│ └── style.css # Dark/light theme
├── templates/ # Reusable task templates (JSON)
├── shared/ # Webhook verification utility
├── tests/ # 107 tests (Vitest)
└── data/ # Runtime data (auto-created, gitignored)数据流
Agent (REST/MCP) → Auth → Zod Validation → Service Layer → Store (mutex lock)
│
├── DAG dependency check
├── Quality gate enforcement
├── Auto-retry on failure
├── Task chaining on completion
├── Audit log append
└── OpenClaw webhook → Agent wakes up设计决策
- 零外部数据库 --具有原子写入的JSON文件。易于部署、备份、检查和版本控制。
- 每个文件异步互斥 -并发API调用从不损坏数据,无需PostgreSQL或Redis。
- MCP优先 --AI代理通过MCP工具自然地进行交互。没有SDK,没有客户端库。
- OpenClaw原生网络钩子 --当任务需要关注时,代理会立即被唤醒。适用于任何webhook消费者。
- 加强安保 --路径遍历保护、循环依赖检测、所有路由的输入验证、所有突变的审计跟踪。
作为服务运行
系统守护进程
[Unit]
Description=Agent Board - Multi-agent task orchestration
After=network.target
[Service]
Type=simple
WorkingDirectory=/path/to/agent-board
ExecStart=/usr/bin/node dist/index.js --port 3456 --data ./data
Environment=AGENTBOARD_API_KEYS=sk-key1:agent1,sk-key2:agent2
Environment=OPENCLAW_HOOK_TOKEN=your-token
Restart=on-failure
[Install]
WantedBy=multi-user.target码头工人
FROM node:22-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY dist/ dist/
COPY dashboard/ dashboard/
COPY templates/ templates/
EXPOSE 3456
CMD ["node", "dist/index.js"]发展
npm install # Install dependencies
npm run build # Compile TypeScript
npm run dev # TypeScript watch mode
npm test # Run all 92 tests (Vitest)技术栈
- 运行时间: Node.js+Express
- 语言: TypeScript
- 验证: 黄道带
- MCP: @模型上下文协议/sdk
- 测验: Vitest+超级测试(107次测试)
- 仪表板: 普通HTML/CSS/JS(无构建步骤)
- 储存: JSON文件(无需数据库)
贡献
欢迎发布问题和PR。请快跑 npm test 在提交之前。
许可证
______________________________________________________________________
Built for AI agent teams. Works great with OpenClaw.
openclaw.ai · Discord
