返回博客列表

Hermes Agent Kanban Swarm 详解:让多个 Agent 像团队一样协作

2026-05-30T21:50:00+08:00
Hermes AgentKanbanSwarmMulti-AgentNousResearch开源

Hermes Agent Kanban Swarm 详解:让多个 Agent 像团队一样协作

单个 Agent 再强,也搞不定大型项目。你需要的不只是一个更聪明的 Agent,而是多个 Agent 能分工协作、状态共享、故障恢复的机制。

Hermes Agent(NousResearch 开源,172K+ Stars)给出了一个工程化的答案:Kanban Task Board。不是概念验证,不是 demo,而是一个 SQLite 驱动的持久化任务看板,让多个 Agent Profile 以 Orchestrator-Worker 模式异步协作,支持任务依赖、熔断保护、实时 Dashboard 和跨进程安全。

本文提纲

  1. 为什么需要持久化的 Agent 任务看板
  2. 整体架构:SQLite + Dispatcher + Worker Swarm
  3. 任务状态机:从 triage 到 done 的完整生命周期
  4. 核心机制:CAS 并发、Board 隔离、熔断保护
  5. 三种交互入口:CLI、Web Dashboard、Agent Tools
  6. Orchestrator-Worker 协作模式
  7. Workspace 策略:Scratch / Dir / Worktree
  8. 实战:如何启动一个 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.db

Board 的解析优先级:

  1. --board CLI 参数(显式指定)
  2. HERMES_KANBAN_BOARD 环境变量(将 Worker 绑定到特定 Board)
  3. HERMES_KANBAN_DB 环境变量(直接指定数据库路径,兼容旧版)
  4. 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 界面插件:

  • 拖拽看板:可视化任务状态流转
  • 实时更新:通过 /events WebSocket 推送,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_TASKHERMES_KANBAN_RUN_ID 环境变量,Worker 的工具集自动受限为只能操作自己的任务。

协作流程:

  1. Orchestrator 将复杂任务拆解为有依赖关系的子任务树
  2. Dispatcher 每 60 秒扫描一次,将 todo(依赖已满足)提升为 ready
  3. ready 任务被分配给对应 Profile 的 Worker 进程
  4. Worker 执行任务,通过 task_comments 记录中间状态和问题
  5. 完成后调用 kanban_complete,附带结果摘要
  6. 如果遇到问题,调用 kanban_block 请求人类介入
  7. 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人工智能时代,转载请注明出处。

觉得文章不错?分享给更多人!