Featured image of post Hermes Kanban:让多个 AI Agent 像团队一样协作

Hermes Kanban:让多个 AI Agent 像团队一样协作

Hermes Agent 的 Kanban 功能如何让多个命名 Agent 通过持久化任务板协作完成复杂工作。核心概念、人机协作模式与实际使用场景拆解。

Kanban 是什么

Hermes Agent 是一个开源 AI Agent 框架,支持在终端、Telegram、Discord、Slack 等多个平台上运行。它的 Kanban 功能是一套持久化的多 Agent 协作任务板,让多个独立的命名 Agent(在 Hermes 中称为 profile)通过共享的任务队列协同工作,无需依赖脆弱的进程内子代理调度。

每条任务是 SQLite 数据库中的一行记录,每次交接是任何人都可读写的持久数据,每个 worker 都是一个拥有独立身份和记忆的完整操作系统进程。这和 Hermes 原有的 delegate_task(一次性函数调用式子代理派发)形成互补:delegate_task 适合快速的一问一答,Kanban 适合需要持续状态、多角色接力、人类介入的工作流。

它能做什么:从一个真实场景说起

假设你需要写一篇技术调研报告。传统做法是让一个 AI Agent 从头做到尾,结果往往是:调研深度不够、写作风格单一、中间方向偏离无人纠正。

用 Kanban,流程变成这样:

  1. 你创建一个 triage 状态的任务:“调研 Hermes Kanban 功能,形成一篇面向开发者的分析报告”
  2. 系统的自动编排器(decomposer)将它拆解为三个子任务:researcher 做信息采集、analyst 做综合分析、writer 负责成文
  3. 两个 researcher 子任务并行执行,各自负责不同信息源
  4. 它们完成后,analyst 自动启动,读取两份调研结果进行综合
  5. analyst 完成后,writer 启动,基于综合结果撰写报告
  6. 整个过程中,你随时可以评论、调整方向、阻塞等待决策
  7. 最终产出包含完整的审计轨迹:谁做了什么、花了多久、中间经历了几次迭代

这不是概念设想,而是 Kanban 的标准工作模式。

Kanban 的核心概念有哪些

Kanban 由六个相互协作的组件构成。

**Board(看板)**是独立的任务队列,拥有自己的 SQLite 数据库、工作目录和调度循环。单次安装可以创建多个 board,按项目或领域隔离。

**Task(任务)**是看板中的基本单元,包含标题、正文、一个 assignee(指派的 profile 名称)、状态流转链(triage → todo → ready → running → blocked → done → archived),以及可选的 tenant 命名空间和幂等键。

**Link(依赖)**记录任务之间的 parent → child 关系。当所有父任务完成后,子任务自动从 todo 提升为 ready,由调度器拾取执行。这实现了"扇出 + 扇入"的并行编排。

**Comment(评论)**是 Agent 之间的通信协议。Agent 和人类都可以追加评论,worker 被(重新)调度时会读取完整的评论线程作为上下文。这本质上是任务维度的对话通道,不依赖主聊天的上下文窗口。

**Workspace(工作空间)**是 worker 操作的目录。scratch 是临时目录,任务完成后自动清理;dir:<path> 指向一个现有的持久目录;worktree 是 Git worktree,适合编码任务。

**Dispatcher(调度器)**是长驻循环,默认每 60 秒执行一轮:回收过期 claim → 检测崩溃的 worker → 提升 ready 任务 → 原子认领 → spawn 分配的 profile。它运行在 Hermes Gateway 进程内部,不需要单独管理。

人类如何介入 Agent 的工作过程

Kanban 和纯自动化批处理的根本区别在于,它在工作流的每个阶段都留了人类介入的入口。

入口控制(Triage):任务可以创建在 triage 状态,相当于一个"停车场"。你可以先审视任务描述是否清晰、拆解是否合理,再决定是否推进到执行队列。

执行中阻塞(Block/Unblock):Worker 在执行过程中遇到需要人类判断的决策时,会调用 kanban_block 主动暂停。例如翻译任务中遇到专业术语需要确认,或者技术方案需要你选择方向。你做出决策后通过 unblock 解除阻塞,worker 继续执行。

持续评论(Comment):你随时可以往任务线程中追加评论,比如"请用中文写作,控制在 3000 字以内"或"这个方向不对,请参考 X 的做法"。Worker 下次被调度时会读取这些评论。

产出审查(Runs):每次执行尝试都记录在 task_runs 表中。你可以查看每次尝试的耗时、结果摘要、错误信息,不满意可以修改任务描述后重新调度。

Goal 模式的验收标准:创建任务时指定验收标准,worker 会在每轮结束后自检是否满足。写得越明确,产出越可控。

Kanban 支持哪些协作模式

Kanban 不是一种固定的编排方式,而是支持多种协作模式的基础设施。官方文档列出了九种典型模式:

模式 形状 场景示例
Fan-out N 个同角色并行 同时调研 5 个技术方案
Pipeline 角色链式接力 采集 → 分析 → 写作 → 审查
投票/仲裁 N 并行 + 1 汇总 3 个研究员 → 1 个审查员综合
长期日志 同 profile + 共享目录 + cron 每日自动生成 Obsidian 日记
人机交互 worker block → 人类 comment → unblock 需要决策确认的任务
@mention 行内路由 在评论中 @reviewer 请求审查
线程 workspace 每个聊天线程一个独立看板 多项目并行管理
Fleet farming 一个 profile 管理 N 个对象 同时管理 50 个社交账号
Triage specifier 一行想法 → 系统展开为完整任务规格 快速捕捉粗略想法

任务如何分配给不同 Agent

Kanban 不要求必须有多个 profile。单个 profile 就能使用,此时它就是一个带持久化、可重试、可审计的工作队列。多 profile 是为了专业分工。

任务分配有三种精度档位:

手动指派:创建任务时显式指定 --assignee <profile-name>,你完全控制谁做什么。

Orchestrator 自动分配:Orchestrator agent 读取你的 profile 列表和描述,根据任务内容决定分配给哪个 profile。精度取决于 profile 描述的质量。

Auto-decomposer:triage 任务进入后,系统使用辅助 LLM 读取 profile roster,自动拆解为子任务图并路由到最合适的专家。如果 LLM 选了一个不存在的 profile,任务会 fallback 到默认 assignee。

两个入口,同一个数据库

Kanban 的设计有一个重要的架构选择:它有两套操作界面,但后端共享同一个 SQLite 数据库。

Agent 通过工具调用:dispatcher spawn 每个 worker 时,自动在模型的 schema 中注入 kanban_* toolset(kanban_showkanban_completekanban_block 等)。Worker 直接调用这些工具,不走命令行。这样做的好处是:无论 worker 的终端后端是本地、Docker 还是 SSH 远程,工具调用始终能访问到数据库;结构化 JSON 参数避免了 shell 引号问题;普通聊天会话零 schema 占用。

人类通过 CLI 或斜杠命令hermes kanban create/list/show/... 或在聊天平台中 /kanban create/list/show/...。参数格式完全相同,两个入口的读写结果一致。

此外还有一个 Dashboard GUI,提供拖拽式看板界面,支持内联创建、多选批量操作、依赖编辑、实时 WebSocket 更新。

什么场景适合用 Kanban

Kanban 的适用边界可以用一句话划清:当你需要的不只是一个答案,而是一条有状态、可中断、可追溯的工作流水线时,Kanban 才值得启动。

三类任务是它的甜区:

  1. 需要多角色接力:研究 → 分析 → 写作 → 审查这种多阶段管道,每个阶段需要不同的专业能力
  2. 需要人类中途介入:翻译确认术语、调研调整方向、敏感操作需要审批
  3. 需要并行执行 + 结果汇总:N 个同类 worker 同时跑不同子任务,完成后自动触发汇总

反过来说,简单问答、一次性小任务、纯自动化无人值守流水线,用 delegate_task 或 cron 就够了,不需要 Kanban 的额外开销。

与 delegate_task 的对比

这两个能力看起来相似,但定位完全不同:

维度 delegate_task Kanban
形状 函数调用(fork → join) 持久化消息队列 + 状态机
父子关系 阻塞等子返回 创建后 fire-and-forget
子代理身份 匿名子代理 带持久记忆的命名 profile
可恢复性 失败就失败 block → unblock → re-run;crash → reclaim
人机交互 不支持 任何时候可以 comment / unblock
每任务 agent 数 一次调用 = 一个子代理 N 个 agent 跨任务生命周期
审计追踪 上下文压缩后丢失 永久保存在 SQLite 中

一句话区分:delegate_task 是函数调用;Kanban 是工作队列,每次交接都是任何 profile 或人类可见可编辑的行。

快速上手

从聊天平台操作同样简单:/kanban create "调研 AI Agent 框架生态" --assignee researcher

参考资料