1. 为什么单 Agent 干不完的活,Hermes 要用 Kanban 编排
如果你已经在用 Hermes 跑单 Agent 任务,大概率遇到过这种局面:一个需求里既有调研、又有编码、还要评审,全塞给一个会话,上下文越滚越长,跑到一半工具调用次数打满,结果还得从头再来。Hermes 的多 Agent 方案本质上是把「一个全能助手」拆成「一组有明确分工的 profile」,再用 Kanban 看板把任务串成可追踪的流水线。它适合谁?适合那些需要把多个 Agent 串成可追踪流水线的开发者,尤其是任务之间有先后依赖、需要并行扇出、还想要审计轨迹和自动重试的场景。
我实测下来,Hermes 的多 Agent 协作有两种分发方式:轻量的hermes -p chat直接分发,和持久化的 Kanban 看板分发。前者适合一次性、串行的临时任务;后者是 Hermes 自带的 SQLite 持久任务板,跨 profile 共享,任务被原子领取、可声明依赖、由指定 profile 在隔离工作区执行。本文就围绕 Kanban 编排 Swarm 协作流这条落地路径,给出可复制的配置骨架和hermes -p chat启动命令,并演示一轮多 Agent 任务分发与结果回收的验证动作。
先明确环境基线:Hermes Agent v0.15.1,模型 mimo-v2-pro,安装路径在C:\Users\Administrator\AppData\Local\hermes\hermes-agent。调度铁律只有一条:只用hermes -p <profile> chat -q或 Kanban 看板分发,禁止使用delegate_task。这条规则后面还会反复提到,因为它直接决定了你的卡片会不会永远卡在 ready。
2. TaoToken 前置:给多 Agent 流水线备好模型入口
多 Agent 协作最容易被忽略的成本,是每个 profile 都要独立调用模型。调研、编码、评审、汇总,四五个 Agent 并行跑起来,请求量和 token 消耗是单 Agent 的好几倍。所以在正式编排之前,我建议先把模型接入层统一好,避免每个 profile 各配一套 Key,后面排障时找不到是哪一路出的问题。
TaoToken 在这里的角色是统一的模型接入入口。你可以先到官网了解整体能力,再进控制台创建 API Key,把 Key 配到 Hermes 的模型配置里。这样无论你后面是走hermes -p chat还是 Kanban 看板分发,底层调用的都是同一套凭证,切换 profile 时不用重复改配置。
具体操作路径是这样的:先访问官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 了解平台定位,然后进控制台 https://taotoken.net/console 创建 API Key。API 端点统一用 https://taotoken.net/api,注意这个地址不加 UTM 参数,配置时直接填就行。如果你后面要跑长期编码或 Agent 任务,可以顺带看下 Coding Plan 页面,评估一下额度是否够多 Agent 并行消耗。
注意:多 Agent 场景下每个 profile 都会独立发起请求,建议在控制台里给不同用途的 Key 做区分,比如一个专门给 coder、一个给 searcher,出问题时能快速定位是哪条流水线在异常消耗。
拿到 Key 之后,把它写进 Hermes 的模型配置。如果你用的是 Anthropic 兼容协议接入 Claude Code 那套,可以参考接入文档里的字段说明,把 base_url 指向https://taotoken.net/api,模型名按你实际选用的填。这一步做完,后面所有 profile 的调用都会走这个入口。
3. 可复制配置:Kanban 初始化与 Profile 骨架
配置阶段的核心是把「角色」和「看板」两件事定下来。先看角色。本机实际可用的 profile 来自hermes profile list,我把它整理成一张对照表,分发时 profile 名必须与下表完全一致,分配给不存在的 profile,Kanban 卡片会永远停在 ready 不被领取。
| Profile | 角色定位 | 典型任务 |
|---|---|---|
| default | 默认会话 | 临时问答、不归类的杂活 |
| planner | 规划者 | 需求拆解、任务编排、生成执行计划 |
| coder | 编码者 | 写代码、改 bug、跑测试 |
| reviewer | 评审者 | 代码审查、质量把关、找缺陷 |
| searcher | 调研者 | 资料调研、竞品分析、信息检索 |
主控(orchestrator)默认由当前会话担任:接收你的任务,拆解后分发给上面对应的 profile,再汇总结果。接下来初始化 Kanban:
hermes kanban init # 幂等创建 kanban.db hermes kanban boards list # 查看现有看板 hermes kanban assignees # 查看可分配的 profile + 各自任务数hermes kanban init是幂等的,重复执行不会破坏已有数据。assignees这条命令特别重要,分发前先跑一遍,确认你要分配的 profile 名真实存在,这是避免卡片卡死的第一道防线。
然后是创建卡片。基础用法是把一张卡分配给 coder:
hermes kanban create "实现用户认证模块" --assignee coder --body "包含注册/登录/JWT 刷新,写好单测"带技能与运行时上限的写法:
hermes kanban create "翻译产品页文案" --assignee searcher --skill translation --max-runtime 30mhermes kanban create的关键参数我整理成下表,配置骨架基本就靠这几个:
| 参数 | 作用 |
|---|---|
| title(位置参数) | 卡片标题 |
| --assignee | 分配给哪个 profile |
| --body | 任务正文 / 详细要求 |
| --parent | 父任务 id(可重复),用于建依赖 |
| --skill | 强制为 worker 加载的技能(可重复) |
| --workspace | scratch / worktree / worktree: |
| --goal | 目标循环模式:每轮由 judge 判断是否完成,没完成就继续 |
| --max-runtime | 单任务运行时上限(如 90s / 30m / 2h) |
| --max-retries N | 连续失败熔断阈值 |
| --triage | 先丢进 triage,由 specifier 细化后再进 todo |
依赖是 Kanban 编排的灵魂。父任务完成后子任务才会变 ready,子任务能读到父任务的结果。你可以用--parent在创建时直接建依赖,也可以用link事后串联:
hermes kanban link <parent_id> <child_id>当目标可以拆成多个并行子任务、最后统一验证汇总时,用 swarm 一条命令建好整张图:
hermes kanban swarm "产出航司促销竞品分析报告" \ --worker searcher:"调研A航司促销" \ --worker searcher:"调研B航司促销" \ --worker planner:"对比定价策略" \ --verifier reviewer \ --synthesizer planner结构很清晰:多个--worker并行跑,--verifier验证,--synthesizer汇总成最终产物。这就是 Swarm 协作流的最小骨架。
4. 验证请求:hermes -p chat 启动与一轮分发回收
配置搭好后,先用最轻的方式验证链路通不通,再上 Kanban。hermes -p chat是最直接的调用方式,主控把子任务作为单次查询交给指定 profile:
hermes -p coder chat -q "实现用户认证模块,包含注册/登录/JWT 刷新" hermes -p searcher chat -q "调研航司促销数据,给出近 30 天主要航线降价情况" hermes -p reviewer chat -q "审查 src/auth 目录的代码质量,列出风险点"常用 flag 来自hermes chat --help,我挑几个分发时最常用的:
| Flag | 作用 |
|---|---|
| -q, --query | 单次非交互查询(分发的核心) |
| -Q, --quiet | 安静模式,只输出最终结果,适合程序化采集 |
| -t, --toolsets | 限定本次可用工具集,如 terminal,file |
| -s, --skills | 预加载技能 |
| -w, --worktree | 在隔离的 git worktree 里跑,多 agent 并行同一仓库时用 |
| --max-turns N | 限制单轮工具调用次数(默认 90) |
| -c, --continue | 续上一次会话,保留上下文 |
并行采集结果时推荐加-Q,方便把输出直接喂回主控做汇总:
hermes -p searcher chat -q "调研竞品定价" -Q现在演示一轮完整的 Kanban 分发与结果回收。假设需求是「做一份航司促销竞品分析,并据此实现一个定价建议模块」,主控拆解后这样建图:
# 初始化 hermes kanban init # 调研(并行两路) $a = hermes kanban create "调研A航司近30天促销" --assignee searcher --json $b = hermes kanban create "调研B航司近30天促销" --assignee searcher --json # 分析(依赖两路调研) $p = hermes kanban create "汇总两家促销并提炼定价策略" --assignee planner --json hermes kanban link <a_id> <p_id> hermes kanban link <b_id> <p_id> # 编码(依赖分析) $c = hermes kanban create "实现定价建议模块 + 单测" --assignee coder --workspace worktree --json hermes kanban link <p_id> <c_id> # 评审(依赖编码) $r = hermes kanban create "评审定价模块代码与测试覆盖" --assignee reviewer --json hermes kanban link <c_id> <r_id> # 推进调度并观察 hermes kanban dispatch hermes kanban watch执行顺序是:两路调研并行,planner 汇总分析,coder 在隔离 worktree 编码,reviewer 评审。主控最后用hermes kanban show和hermes kanban log收集各环节产物,汇总回报给你。成功的结果长这样:hermes kanban stats里能看到各状态任务数归位,hermes kanban show <id>能看到卡片详情、评论和事件流,hermes kanban runs <id>每次尝试一行,hermes kanban log <id>打印 worker 日志。
监控与恢复的命令也一并给你:
hermes kanban list # 列出所有任务 hermes kanban show <id> # 看某张卡的详情 + 评论 + 事件 hermes kanban stats # 按状态/按 assignee 统计 + 最老 ready 时长 hermes kanban watch # 实时流式查看 task_events hermes kanban tail <id> # 跟踪单张卡的事件流 hermes kanban runs <id> # 查看任务的尝试历史 hermes kanban log <id> # 打印 worker 日志 hermes kanban dispatch # 手动跑一轮调度注意:旧的
hermes kanban daemon已废弃,调度器现在跑在 gateway 里。常驻调度用hermes gateway start,临时推进一轮用hermes kanban dispatch。
5. 本篇常见错排查:卡片卡死与 worker 不启动
多 Agent 编排最容易踩的坑,基本都集中在「任务不动」和「profile 对不上」这两类。我把排错清单整理成表,遇到问题直接对号入座。
| 症状 | 排查方向 |
|---|---|
| 卡片永远停在 ready | profile 名拼错或不存在,用hermes kanban assignees核对 |
| worker 不启动 | 调度器没跑,hermes gateway start或hermes kanban dispatch |
| 任务卡死不动 | hermes kanban reclaim <id>释放占用后unblock |
| 想看子 agent 做了什么 | hermes kanban log <id>/hermes kanban runs <id> |
| profile 名对不上 | hermes profile list看真实 profile |
| 多 agent 改同一仓库冲突 | chat 用-w,Kanban 用--workspace worktree |
状态恢复与异常处理的命令单独列一下,这几个是救火用的:
hermes kanban block <id> # 标记阻塞 hermes kanban unblock <id> # 阻塞/计划中 -> 重新 ready hermes kanban promote <id> # 手动把 todo/blocked 推到 ready hermes kanban reclaim <id> # 释放卡死的 worker 占用 hermes kanban reassign <id> --assignee <profile> # 改派给其他 profile hermes kanban complete <id> # 标记完成 hermes kanban archive <id> # 归档我踩过的一个坑是:卡片一直 ready,查了半天以为是调度器问题,最后发现是--assignee写成了coders,多了一个 s。所以分发前先跑hermes kanban assignees,这个习惯能省掉大量排查时间。另一个高频问题是多 Agent 同时改同一个仓库导致冲突,解决办法是 chat 分发时加-w走隔离 worktree,Kanban 分发时用--workspace worktree,两者都是把每个 Agent 的工作区隔离开。
6. 两种分发方式怎么选,以及后续接入
把两种方式放一起对比,选择逻辑就清楚了:
| 维度 | hermes -p chat -q | Kanban 看板 |
|---|---|---|
| 适合场景 | 一次性、串行、临时 | 并行扇出、有依赖、长流程 |
| 持久化 | 无(会话级) | 有(SQLite 持久) |
| 任务依赖 | 手动串 | 原生支持 link / --parent |
| 自动重试 | 无 | 有(熔断 + 重试) |
| 审计轨迹 | 弱 | 强(events / runs / log) |
| 隔离工作区 | --worktree | --workspace 多模式 |
| 上手成本 | 极低 | 中 |
经验法则很简单:单个子任务直接 chat;多个子任务、有先后依赖或要并行,就上 Kanban。调度铁律再强调一遍:分发只走hermes -p <profile> chat -q "..."或 Kanban 看板,不使用delegate_task派遣其他 agent。标准流程是用户给任务,主控拆解,创建看板卡片或hermes -p分发,最后汇总结果回报。分发前先用hermes profile list或hermes kanban assignees核对 profile 名,避免卡片卡死。
如果你准备把这套流水线跑起来,建议按这个顺序推进:先去控制台创建 API Key(https://taotoken.net/console ),把模型入口配好;然后对照接入文档(https://taotoken.net/doc )确认 base_url 和模型名字段;想先验证模型对话是否正常,可以用模型对话页面(https://taotoken.net/models )跑一轮;如果是要长期跑编码或 Agent 任务,再评估 Coding Plan(https://taotoken.net/coding-plan )的额度是否够多 Agent 并行消耗。API Key 管理入口在 https://taotoken.net/api-keys ,Claude Code 那套 Anthropic 兼容接入参考 https://taotoken.net/claudecode-anthropic 。把这些前置做好,后面 Kanban 编排 Swarm 协作流时,你只需要专注在任务拆解和依赖设计上,模型接入层不用再操心。