Hermes Agent Kanban Swarm 详解:让多个 Agent 像团队一样协作
Hermes Agent Kanban Swarm 详解:让多个 Agent 像团队一样协作
单个 Agent 再强,也搞不定大型项目。你需要的不只是一个更聪明的 Agent,而是多个 Agent 能分工协作、状态共享、故障恢复的机制。
Hermes Agent(NousResearch 开源,172K+ Stars)给出了一个工程化的答案:Kanban Task Board。不是概念验证,不是 demo,而是一个 SQLite 驱动的持久化任务看板,让多个 Agent Profile 以 Orchestrator-Worker 模式异步协作,支持任务依赖、熔断保护、实时 Dashboard 和跨进程安全。
本文提纲
- 为什么需要持久化的 Agent 任务看板
- 整体架构:SQLite + Dispatcher + Worker Swarm
- 任务状态机:从 triage 到 done 的完整生命周期
- 核心机制:CAS 并发、Board 隔离、熔断保护
- 三种交互入口:CLI、Web Dashboard、Agent Tools
- Orchestrator-Worker 协作模式
- Workspace 策略:Scratch / Dir / Worktree
- 实战:如何启动一个 Kanban Swarm
为什么需要持久化的 Agent 任务看板
Hermes 已经有 delegate_task 可以创建临时子 Agent。为什么还需要 Kanban?
核心区别在于持久性。delegate_task 创建的子 Agent 是临时的——父 Agent 会话结束,子 Agent 就没了。Kanban 系统把任务存储在 SQLite 数据库中,Agent 重启、机器重启,任务状态都在。
这意味着你可以:
- 异步协作:一个 Orchestrator Agent 创建任务,多个 Worker Agent 各自领取,不需要同时在线
- 故障恢复:Worker 崩溃后,Dispatcher 检测到超时,自动回收任务,其他 Worker 可以重新领取
- 人类审计:任何时候打开 Dashboard,都能看到每个任务的状态、历史和 Agent 之间的对话记录
- 跨会话持久化:昨天的任务没做完,今天接着做,上下文不丢失
整体架构:SQLite + Dispatcher + Worker Swarm
graph TB
subgraph SharedDatabase["SQLite Database (kanban.db)"]
TASKS["tasks table"]
LINKS["task_links (dependencies)"]
COMMENTS["task_comments (inter-agent)"]
EVENTS["task_events (append-only log)"]
end
ORC["Orchestrator
creates tasks, reviews results"]
DISP["Dispatcher
promotes todo -> ready, spawns workers"]
ORC -->|kanban_create| TASKS
DISP -->|claim & spawn| TASKS
W1["Worker A
profile: coder"]
W2["Worker B
profile: tester"]
W3["Worker C
profile: reviewer"]
TASKS -->|dispatch| W1
TASKS -->|dispatch| W2
TASKS -->|dispatch| W3
W1 -->|kanban_complete| TASKS
W2 -->|kanban_block| TASKS
W3 -->|kanban_complete| TASKS
DASH["Web Dashboard
React + WebSocket"]
TASKS -.->|/events live stream| DASH数据库是整个系统的协调原语。所有 Agent Profile(Orchestrator 和 Worker)通过同一个 kanban.db 文件共享状态。SQLite 的 WAL 模式 + BEGIN IMMEDIATE 事务保证多进程安全。
任务状态机:从 triage 到 done 的完整生命周期
每个任务有一个明确的状态流转路径:
triage → todo → ready → running → done → archived
↓ ↑
blocked ←----+| 状态 | 含义 | 谁触发 |
|---|---|---|
triage |
原始想法,未细化 | 创建时默认 |
todo |
已定义,等待依赖满足 | Orchestrator 或 Dispatcher |
ready |
依赖已满足,可被领取 | Dispatcher 自动提升 |
running |
Worker 已认领,正在执行 | Dispatcher 分配 |
blocked |
需要人类干预或外部输入 | Worker 主动标记 |
done |
任务完成 | Worker 完成 |
archived |
从活跃视图移除 | 手动归档 |
关键点:Dispatcher 自动处理 todo → ready 的提升。当一个 todo 任务的所有父依赖都变成 done,Dispatcher 会自动把它提升为 ready,使其可以被 Worker 领取。你不需要手动管理依赖链。
核心机制:CAS 并发、Board 隔离、熔断保护
Compare-and-Swap 并发控制
多个 Dispatcher 或 Worker 可能同时竞争同一个任务。Kanban 使用 CAS(Compare-and-Swap)策略:
UPDATE tasks SET status = 'running', claim_lock = ?
WHERE id = ? AND status = 'ready' AND claim_lock IS NULL只有预期状态匹配时更新才成功。SQLite 序列化写入者,只有一个会"赢"。输者观察到影响行数为 0,跳过继续。不需要分布式锁。
Board 隔离
你可以创建多个独立的 Board,每个 Board 有自己的数据库、工作区和日志:
~/.hermes/kanban/
├── kanban.db ← 默认 Board
├── current ← 当前激活的 Board 指针
└── boards/
├── frontend/ ← 前端项目 Board
│ └── kanban.db
└── api/ ← API 项目 Board
└── kanban.dbBoard 的解析优先级:
--boardCLI 参数(显式指定)HERMES_KANBAN_BOARD环境变量(将 Worker 绑定到特定 Board)HERMES_KANBAN_DB环境变量(直接指定数据库路径,兼容旧版)kanban/current文件(CLI 选择的当前 Board)
熔断保护
Dispatcher 内置了熔断器。如果一个任务连续失败超过 DEFAULT_FAILURE_LIMIT(默认 2 次),自动移到 blocked 状态,防止无限重试循环。成功完成后计数器重置。
这个设计很务实——Agent 执行失败通常意味着任务描述不清或缺少上下文,重试十次也解决不了,不如标记出来让人类介入。
三种交互入口:CLI、Web Dashboard、Agent Tools
CLI:hermes kanban
最直接的操作方式:
# 查看所有任务
hermes kanban list
# 创建任务(支持依赖)
hermes kanban create "Implement user auth" --parent 3
# 查看任务详情(含完整评论和事件日志)
hermes kanban show 5
# 手动分配给特定 Profile
hermes kanban assign 5 --profile coder
# 手动触发一次 Dispatcher tick
hermes kanban dispatch
# Board 管理
hermes kanban boards create frontend
hermes kanban boards switch frontend在聊天界面中也可以用 /kanban 斜杠命令操作。
Web Dashboard:React + WebSocket
一个 FastAPI + React 构建的 Web 界面插件:
- 拖拽看板:可视化任务状态流转
- 实时更新:通过
/eventsWebSocket 推送,Dashboard 自动反映后台 Worker 的操作 - 过滤视图:按 tenant 或 assignee 筛选
- 安全认证:使用和 Hermes API 相同的 ephemeral session token
Agent Tools:kanban_tools.py
Agent 通过结构化工具而非 CLI 与看板交互,确保后端可移植性(Docker、SSH 等环境):
| 工具 | 功能 | 权限 |
|---|---|---|
kanban_create |
创建新任务(支持依赖) | Orchestrator / Worker |
kanban_complete |
标记任务完成 | Worker(仅限自己的任务) |
kanban_block |
标记任务需要人类介入 | Worker(仅限自己的任务) |
kanban_show |
查看任务详情 | Worker / Orchestrator |
kanban_list |
列出所有任务 | Orchestrator only |
kanban_heartbeat |
更新长任务的过期时间戳 | Worker |
Worker 安全隔离:Worker 只能操作分配给自己的任务。_enforce_worker_task_ownership 函数检查任务 ID 是否匹配当前 Worker 的 HERMES_KANBAN_TASK 环境变量,防止跨任务污染。
Orchestrator-Worker 协作模式
Kanban 系统的核心协作模式是 Orchestrator-Worker:
Orchestrator 负责拆解任务、创建依赖链、审查结果。它持有 kanban toolset,可以调用 kanban_list 查看全局状态,用 kanban_create 创建子任务。
Worker 负责执行单个任务。Dispatcher 启动 Worker 时注入 HERMES_KANBAN_TASK 和 HERMES_KANBAN_RUN_ID 环境变量,Worker 的工具集自动受限为只能操作自己的任务。
协作流程:
- Orchestrator 将复杂任务拆解为有依赖关系的子任务树
- Dispatcher 每 60 秒扫描一次,将
todo(依赖已满足)提升为ready ready任务被分配给对应 Profile 的 Worker 进程- Worker 执行任务,通过
task_comments记录中间状态和问题 - 完成后调用
kanban_complete,附带结果摘要 - 如果遇到问题,调用
kanban_block请求人类介入 - Orchestrator 审查完成结果,决定是否创建后续任务
这不是一个简单的任务队列——task_comments 表充当了 Agent 之间的通信协议,task_events 表记录了完整的审计日志。
Workspace 策略:Scratch / Dir / Worktree
每个任务关联一个 Workspace,定义了 Worker 的文件在哪里:
| 类型 | 路径 | 生命周期 |
|---|---|---|
| Scratch | ~/.hermes/kanban/workspaces/<task_id>/ |
任务完成后删除 |
| Dir | 用户指定的绝对路径 | 保留 |
| Worktree | .worktrees/ 下的 Git worktree |
保留 |
Scratch 适合临时性任务(跑测试、生成报告)。Dir 和 Worktree 适合需要持久化产出的编码任务。Worktree 额外提供了 Git 分支隔离——多个 Worker 各自在独立分支上工作,互不干扰。
实战:如何启动一个 Kanban Swarm
# 1. 创建一个 Board
hermes kanban boards create my-project
# 2. 切换到这个 Board
hermes kanban boards switch my-project
# 3. 创建有依赖关系的任务链
hermes kanban create "Design API schema" --status todo
# 假设返回 task id = 1
hermes kanban create "Implement API endpoints" --parent 1 --status todo
# 假设返回 task id = 2
hermes kanban create "Write integration tests" --parent 2 --status todo
# 4. 启动 Gateway(内嵌 Dispatcher,每 60 秒自动 tick)
hermes gateway
# 5. 打开 Dashboard 查看实时状态
# 浏览器访问 Hermes Web UI 的 Kanban 插件页面Gateway 启动后,Dispatcher 自动运行:任务 1 被提升为 ready,分配给对应 Profile 的 Worker;任务 1 完成后,任务 2 自动变为 ready;以此类推。
你也可以在聊天中让 Orchestrator 自动完成拆解和创建:
> /kanban create "Refactor the authentication module into separate services"Orchestrator 会读取 kanban-orchestrator Skill,自动拆解为多个子任务并建立依赖关系。
作者: itech001 来源: 公众号:AI人工智能时代 网站: https://www.theaiera.cn/ 每日分享最前沿的AI新闻资讯和技术研究。
本文首发于 AI人工智能时代,转载请注明出处。