<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kanban on Kalend's Blog</title><link>https://blog.kalend.top/tags/kanban/</link><description>Recent content in Kanban on Kalend's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Fri, 29 May 2026 18:30:00 +0800</lastBuildDate><atom:link href="https://blog.kalend.top/tags/kanban/index.xml" rel="self" type="application/rss+xml"/><item><title>Hermes Agent v0.15：速度翻倍，从单兵到军团</title><link>https://blog.kalend.top/2026/05/29/2026-05-29-hermes-v0.15-whats-new.html/</link><pubDate>Fri, 29 May 2026 18:30:00 +0800</pubDate><guid>https://blog.kalend.top/2026/05/29/2026-05-29-hermes-v0.15-whats-new.html/</guid><description>&lt;h2 id="先说结论"&gt;先说结论
&lt;/h2&gt;&lt;p&gt;Hermes Agent v0.15.0（5月28日）是迄今最大的单版本更新。
&lt;strong&gt;1,302个提交、747个合并PR、1,746个文件变更、321位社区贡献者&lt;/strong&gt;。
隔天（5月29日）发布的 v0.15.1 修复了影响所有 Dashboard 用户的 P0 bug。&lt;/p&gt;
&lt;p&gt;这个版本的三个关键词：&lt;strong&gt;快、拆、稳&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="速度从各个维度变快"&gt;速度：从各个维度变快
&lt;/h2&gt;&lt;h3 id="冷启动再砍1秒"&gt;冷启动再砍1秒
&lt;/h3&gt;&lt;p&gt;v0.15.0 延续了冷启动性能优化的浪潮，三轮优化叠加：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;openai._base_client&lt;/code&gt; 导入延迟加载：&lt;strong&gt;-240ms / -17MB&lt;/strong&gt; 内存&lt;/li&gt;
&lt;li&gt;热路径函数调用削减 47%（399k → 213k，31轮对话）&lt;/li&gt;
&lt;li&gt;压缩可行性检查延迟：-170 到 -290ms&lt;/li&gt;
&lt;li&gt;自适应子进程轮询：-195ms/工具调用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;实际效果：Termux 冷启动从 2.9s → 0.8s。
&lt;code&gt;hermes --version&lt;/code&gt; 冷启动 701ms → 258ms（&lt;strong&gt;降63%&lt;/strong&gt;），首次超越 Codex CLI。&lt;/p&gt;
&lt;h3 id="session_search-快了4500倍"&gt;session_search 快了4500倍
&lt;/h3&gt;&lt;p&gt;旧版 &lt;code&gt;session_search&lt;/code&gt; 是辅助 LLM 驱动的工具，每次搜索花 90 秒、花费 $0.30，偶尔还会编造结果。新版完全重写：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;零 LLM 调用&lt;/strong&gt;，纯 FTS5 搜索引擎&lt;/li&gt;
&lt;li&gt;三种模式（发现/滚动/浏览），自动推断无需切换&lt;/li&gt;
&lt;li&gt;搜索延迟：~20ms（旧版 ~90s）&lt;/li&gt;
&lt;li&gt;滚动延迟：~1ms&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;搜索历史对话现在免费且即时。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="拆核心代码大瘦身"&gt;拆：核心代码大瘦身
&lt;/h2&gt;&lt;h3 id="run_agentpy-从16000行拆成3800行"&gt;run_agent.py 从16,000行拆成3,800行
&lt;/h3&gt;&lt;p&gt;这是整个版本最激进的重构。
&lt;code&gt;run_agent.py&lt;/code&gt; 从 16,083 行缩减到 3,821 行（&lt;strong&gt;-76%&lt;/strong&gt;），拆分到 14 个内聚的 &lt;code&gt;agent/*&lt;/code&gt; 模块。&lt;/p&gt;
&lt;p&gt;关键保证：&lt;strong&gt;行为零变化&lt;/strong&gt;。每个拆分都在 &lt;code&gt;AIAgent&lt;/code&gt; 上保留薄转发器，所有测试补丁路径不受影响，外部调用者完全兼容。&lt;/p&gt;
&lt;p&gt;为什么你应该关注？以前这个文件在你的编辑器里要 90 秒才能打开，现在眨眼即开。未来开发迭代速度会显著加快。&lt;/p&gt;
&lt;h2 id="稳kanban长成真正的多agent平台"&gt;稳：Kanban长成真正的多Agent平台
&lt;/h2&gt;&lt;p&gt;v0.15.0 用 &lt;strong&gt;104个PR&lt;/strong&gt; 把 Kanban 从任务队列升级为多 Agent 协作平台。&lt;/p&gt;
&lt;h3 id="新能力一览"&gt;新能力一览
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;能力&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;自动分解&lt;/td&gt;
 &lt;td&gt;Triage 自动将一个任务分解为子任务树&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Swarm 拓扑&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;hermes kanban swarm&lt;/code&gt; 一键创建完整 Swarm v1 图&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;每任务模型覆盖&lt;/td&gt;
 &lt;td&gt;便宜模型做杂活，贵模型啃硬骨头&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;工作树隔离&lt;/td&gt;
 &lt;td&gt;每个任务独立 git worktree，互不干扰&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;定时启动&lt;/td&gt;
 &lt;td&gt;任务支持指定开始时间&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;陈旧任务检测&lt;/td&gt;
 &lt;td&gt;自动发现并回收卡住的任务&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Worker 可视化&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/workers/active&lt;/code&gt;、&lt;code&gt;/runs/{id}&lt;/code&gt;、&lt;code&gt;/inspect&lt;/code&gt; 端点&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="swarm-是什么"&gt;Swarm 是什么
&lt;/h3&gt;&lt;p&gt;一条命令创建一个完整的多 Agent 工作流：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes kanban swarm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;自动生成：根节点 → 并行 Worker → 门控验证者 → 门控综合者 → 共享黑板。适合代码审查、批量研究、多文件重构等场景。&lt;/p&gt;
&lt;h2 id="安全三道防线对抗提示注入"&gt;安全：三道防线对抗提示注入
&lt;/h2&gt;&lt;p&gt;受 Brainworm/Promptware Kill Chain 研究（arxiv 2601.09625）启发，v0.15.0 在三个关键位置部署了防御：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;威胁模式库&lt;/strong&gt;（&lt;code&gt;tools/threat_patterns.py&lt;/code&gt;）：~15个新的 Brainworm/C2 模式&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;记忆加载扫描&lt;/strong&gt;：召回的记忆在注入上下文前先过安全检查&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工具结果分隔符&lt;/strong&gt;：恶意文件或远程服务无法伪装成 Hermes 自身的系统内容&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;配合新增的 &lt;code&gt;security-guidance&lt;/code&gt; 插件，对危险代码写入进行模式匹配。&lt;/p&gt;
&lt;h2 id="其他值得关注的更新"&gt;其他值得关注的更新
&lt;/h2&gt;&lt;h3 id="bitwarden-secrets-manager-集成"&gt;Bitwarden Secrets Manager 集成
&lt;/h3&gt;&lt;p&gt;一个引导令牌（&lt;code&gt;BWS_ACCESS_TOKEN&lt;/code&gt;）替代所有明文 API Key。在 Bitwarden Web 端轮换密钥，重启即生效。&lt;/p&gt;
&lt;h3 id="ntfy第23个消息平台"&gt;ntfy：第23个消息平台
&lt;/h3&gt;&lt;p&gt;无需注册、无需 API Key，只要一个 topic URL。Agent 完成任务、cron 到点，推送通知直达手机/桌面/智能家居。&lt;/p&gt;
&lt;h3 id="skill-bundle一条命令加载多个-skill"&gt;Skill Bundle：一条命令加载多个 Skill
&lt;/h3&gt;&lt;p&gt;设置你的&amp;quot;写作日&amp;quot;组合（humanizer + ideation + obsidian + youtube-content）。
&lt;code&gt;/writing-day&lt;/code&gt; 一次性激活全部。&lt;/p&gt;
&lt;h3 id="tui-会话管理器"&gt;TUI 会话管理器
&lt;/h3&gt;&lt;p&gt;Ink TUI 新增多会话切换器：在同一个终端窗口里列出、切换、刷新、关闭多个会话，不用退出。&lt;/p&gt;
&lt;h3 id="docker-s6-overlay-容器管理"&gt;Docker s6-overlay 容器管理
&lt;/h3&gt;&lt;p&gt;容器内网关自动监督、重启对账、docker logs 集成。Node 升级到 22 LTS。&lt;/p&gt;
&lt;h2 id="v0151-热修复5月29日"&gt;v0.15.1 热修复（5月29日）
&lt;/h2&gt;&lt;p&gt;v0.15.0 发布隔天，一个 P0 bug 浮出水面：&lt;strong&gt;Dashboard 在 loopback 模式下无限重载&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="根因"&gt;根因
&lt;/h3&gt;&lt;p&gt;Dashboard 的身份探针（&lt;code&gt;/api/auth/me&lt;/code&gt;）在 loopback 模式下返回 401（设计如此）。
但 v0.15.0 的过期令牌重载守卫把每个 401 都当成了需要刷新的会话令牌，触发整页重载。
重载后其他请求清除了单次重载守卫，于是又触发下一轮。
Firefox 表现为 &amp;ldquo;Navigated to /sessions&amp;rdquo; 暴风，Chrome 表现为 React 重渲染风暴。&lt;/p&gt;
&lt;h3 id="修复"&gt;修复
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;fetchJSON&lt;/code&gt; 新增 &lt;code&gt;allowUnauthorized&lt;/code&gt; 选项，跳过 loopback 下的过期令牌重载逻辑。
401 仍然抛异常让 &lt;code&gt;AuthWidget&lt;/code&gt; 处理，但不再触发整页刷新。&lt;/p&gt;
&lt;h3 id="其他修复"&gt;其他修复
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Docker &lt;code&gt;--insecure&lt;/code&gt; 改为显式环境变量（&lt;code&gt;HERMES_DASHBOARD_INSECURE=1&lt;/code&gt;），不再从绑定主机推断&lt;/li&gt;
&lt;li&gt;MCP bare 命令（npx/npm/node）在 Docker 容器内正确解析到 &lt;code&gt;/usr/local/bin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Kanban Worker 的 SIGTERM 终于能正常终止进程&lt;/li&gt;
&lt;li&gt;Skills 页面源标签和分类侧边栏恢复&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/yolo&lt;/code&gt; 中途启用变为 per-session 级别&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/model&lt;/code&gt; 和 &lt;code&gt;hermes model&lt;/code&gt; 显示统一列表&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.md&lt;/code&gt; 文件媒体投递恢复&lt;/li&gt;
&lt;li&gt;Web URL 不再被误删查询参数&lt;/li&gt;
&lt;li&gt;Skills Hub 全目录：858 → 19,932，所有 skills.sh 条目可搜索&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="升级建议"&gt;升级建议
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 源码安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /opt/hermes-agent
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git pull
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install -e .
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 或 Docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker pull nousresearch/hermes-agent:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 检查版本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes --version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;直接跳到 v0.15.1，不要停在 v0.15.0。&lt;/strong&gt; Dashboard 无限重载 bug 只影响 v0.15.0。&lt;/p&gt;
&lt;h2 id="数据总结"&gt;数据总结
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;指标&lt;/th&gt;
 &lt;th&gt;v0.15.0&lt;/th&gt;
 &lt;th&gt;v0.15.1&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;提交数&lt;/td&gt;
 &lt;td&gt;1,302&lt;/td&gt;
 &lt;td&gt;28&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;合并PR&lt;/td&gt;
 &lt;td&gt;747&lt;/td&gt;
 &lt;td&gt;21&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;文件变更&lt;/td&gt;
 &lt;td&gt;1,746&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;贡献者&lt;/td&gt;
 &lt;td&gt;321&lt;/td&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;P0 修复&lt;/td&gt;
 &lt;td&gt;15&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;P1 修复&lt;/td&gt;
 &lt;td&gt;65&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;安全修复&lt;/td&gt;
 &lt;td&gt;19&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;p&gt;关注 varkm，一起学习，一起成长&lt;/p&gt;</description></item><item><title>多Agent协作实战：从写稿到审核的完整Pipeline</title><link>https://blog.kalend.top/2026/05/19/multi-agent-pipeline-part3.html/</link><pubDate>Tue, 19 May 2026 07:00:00 +0800</pubDate><guid>https://blog.kalend.top/2026/05/19/multi-agent-pipeline-part3.html/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;一篇AI对比文章，4个Agent接力完成，10步Pipeline自动跑通。中间经历3轮审核修复循环，全程1.5小时零人工介入。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们搭了一套多Agent协作的写作Pipeline。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4个专职Agent&lt;/strong&gt;：写作、审核、博客部署、公众号发布，各司其职。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10步自动流水线&lt;/strong&gt;：从第一行字写出来，到博客上线、公众号草稿就绪，全自动。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;质量门禁&lt;/strong&gt;：审核不通过，下游任务直接卡住，修好了才放行。&lt;/p&gt;
&lt;p&gt;这是系列第3篇。第1篇讲了Kanban+Profile架构，第2篇搭了单个Writer Agent。&lt;/p&gt;
&lt;p&gt;这篇是&lt;strong&gt;多Agent协作的完整实战&lt;/strong&gt;——怎么让4个Agent接力干活、互相检查、自动修复。&lt;/p&gt;
&lt;h2 id="1-4个agent怎么分工"&gt;1. 4个Agent怎么分工
&lt;/h2&gt;&lt;p&gt;先看全局。每个Agent有自己的&lt;strong&gt;Profile&lt;/strong&gt;（身份配置）和&lt;strong&gt;SOUL.md&lt;/strong&gt;（行为规范）。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Agent&lt;/th&gt;
 &lt;th&gt;职责&lt;/th&gt;
 &lt;th&gt;模型&lt;/th&gt;
 &lt;th&gt;特点&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;blog-writer&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;写原始文章&lt;/td&gt;
 &lt;td&gt;glm-5.1&lt;/td&gt;
 &lt;td&gt;204K上下文，有记忆&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;reviewer&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;审核内容质量&lt;/td&gt;
 &lt;td&gt;glm-5.1&lt;/td&gt;
 &lt;td&gt;只审不改，无记忆&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;blog-creator&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;转Markdown+部署&lt;/td&gt;
 &lt;td&gt;glm-4.7&lt;/td&gt;
 &lt;td&gt;最精简工具集&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;mp-creator&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;转公众号HTML+上传&lt;/td&gt;
 &lt;td&gt;glm-4.7&lt;/td&gt;
 &lt;td&gt;4个微信skill&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;类比&lt;/strong&gt;：像一个编辑部——&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;◆ &lt;strong&gt;Writer&lt;/strong&gt;是记者，负责采访写稿&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Reviewer&lt;/strong&gt;是编辑，负责审稿把关&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Creator&lt;/strong&gt;是排版员，负责报纸和网站两个渠道的排版&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意模型选择：写作和审核用强模型(glm-5.1)，格式转换用弱模型(glm-4.7)。&lt;/p&gt;
&lt;p&gt;为什么？格式转换是机械活，不需要创造力。省下来的Token是真金白银。&lt;/p&gt;
&lt;h2 id="2-pipeline全景10步流水线"&gt;2. Pipeline全景：10步流水线
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ① blog-writer ② reviewer Fan-out
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ┌──────────────┐ ┌──────────────┐ ┌─────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ 写原始文章 │──────▶│ 内容审核 │──PASS│ 并行分发 │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ (glm-5.1) │ 7min │ PII/事实/AI味 │12min └──────┬──────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └──────────────┘ └──────────────┘ │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ┌───────────┴───────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼ ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ③ blog-creator ④ mp-creator
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ┌──────────────┐ ┌──────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ Markdown+部署 │ │ HTML+封面+上传│
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ (glm-4.7) │ │ (glm-4.7) │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └──────┬───────┘ └──────┬───────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼ ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ⑤ reviewer ⑥ reviewer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ┌──────────────┐ ┌──────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ Blog格式审核 │ │ 公众号格式审核 │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └──────┬───────┘ └──────┬───────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; PASS ✅ FAIL ❌
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼ ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 博客上线 ┌──────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ ⟳ 审核修复循环×3轮 │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ ⑦修复→⑧审核→⑨修复 │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ →⑩审核 PASS ✅ │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └──────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;解释一下关键节点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;◆ &lt;strong&gt;Step ①②&lt;/strong&gt;：Writer写完文章，交给Reviewer审核内容&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Fan-out&lt;/strong&gt;：审核通过后，同时派给Blog和公众号两个渠道&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Step ③④&lt;/strong&gt;：两个Creator并行工作，互不等待&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Step ⑤⑥&lt;/strong&gt;：各自的Reviewer再审一遍格式&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Step ⑦-⑩&lt;/strong&gt;：公众号没过，进入修复循环&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Blog那边一次通过，公众号那边经历了3轮修复。为什么？&lt;/p&gt;
&lt;p&gt;因为公众号对&lt;strong&gt;段落长度&lt;/strong&gt;有严格限制（每段≤100字），模型对&amp;quot;手机屏幕3行&amp;quot;的物理感知不够精确。&lt;/p&gt;
&lt;h2 id="3-依赖链怎么让agent自动接力"&gt;3. 依赖链：怎么让Agent自动接力
&lt;/h2&gt;&lt;p&gt;核心机制是&lt;strong&gt;Kanban的parents依赖&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;创建任务时指定parents，意思是：&amp;ldquo;等这些父任务完成后，我才启动&amp;rdquo;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 创建Writer任务&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kanban_create&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;写对比文章&amp;#34;&lt;/span&gt;, &lt;span class="nv"&gt;assignee&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;blog-writer&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 创建Reviewer任务，依赖Writer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kanban_create&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;审核内容&amp;#34;&lt;/span&gt;, &lt;span class="nv"&gt;assignee&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;reviewer&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;parents&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;t_writer_xxx&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 创建两个Creator任务，依赖Reviewer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kanban_create&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;部署博客&amp;#34;&lt;/span&gt;, &lt;span class="nv"&gt;assignee&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;blog-creator&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;parents&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;t_reviewer_xxx&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kanban_create&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;公众号推文&amp;#34;&lt;/span&gt;, &lt;span class="nv"&gt;assignee&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;mp-creator&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;parents&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;t_reviewer_xxx&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;注意看最后两行——它们的parents是同一个Reviewer任务。&lt;/p&gt;
&lt;p&gt;这意味着Reviewer通过后，Blog和公众号&lt;strong&gt;同时启动&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这就是Fan-out（扇出）：一个任务完成，触发多个下游并行执行。&lt;/p&gt;
&lt;h2 id="4-质量门禁fail就卡住"&gt;4. 质量门禁：FAIL就卡住
&lt;/h2&gt;&lt;p&gt;Reviewer不是走过场。它有&lt;strong&gt;5级审核维度&lt;/strong&gt;，每级有明确的通过标准：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;优先级&lt;/th&gt;
 &lt;th&gt;检查项&lt;/th&gt;
 &lt;th&gt;判定标准&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;🔴 必须通过&lt;/td&gt;
 &lt;td&gt;PII信息脱敏&lt;/td&gt;
 &lt;td&gt;手机号/邮箱/IP必须处理&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;🔴 必须通过&lt;/td&gt;
 &lt;td&gt;事实准确性&lt;/td&gt;
 &lt;td&gt;数据有来源，技术描述正确&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;🟡 3处FAIL&lt;/td&gt;
 &lt;td&gt;AI味检测&lt;/td&gt;
 &lt;td&gt;废话铺垫/过度道歉/套话&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;🟢 仅建议&lt;/td&gt;
 &lt;td&gt;品牌名&lt;/td&gt;
 &lt;td&gt;不强制，给出建议&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;🔵 格式规范&lt;/td&gt;
 &lt;td&gt;平台适配&lt;/td&gt;
 &lt;td&gt;Blog/公众号各有专项检查&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;关键机制&lt;/strong&gt;：Reviewer判定FAIL时，在kanban_complete的metadata里写入问题列表。&lt;/p&gt;
&lt;p&gt;下游任务的parents依赖没满足，&lt;strong&gt;不会自动启动&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;必须创建修复任务，修好后再提交审核。这就是&amp;quot;门禁&amp;quot;——&lt;/p&gt;
&lt;p&gt;不是标记一下就过了，是真的&lt;strong&gt;挡住&lt;/strong&gt;，修好才放行。&lt;/p&gt;
&lt;h2 id="5-实战3轮修复循环"&gt;5. 实战：3轮修复循环
&lt;/h2&gt;&lt;p&gt;说说真实发生的事。&lt;/p&gt;
&lt;p&gt;第一轮公众号HTML生成后，Reviewer发现&lt;strong&gt;11个段落超标&lt;/strong&gt;（限制100字/段）。&lt;/p&gt;
&lt;p&gt;其中3个段落超过150字，在手机上会显示成一大坨。&lt;/p&gt;
&lt;p&gt;mp-creator收到问题列表，拆分段落。&lt;/p&gt;
&lt;p&gt;Reviewer二轮审核——&lt;strong&gt;还有5段超标&lt;/strong&gt;。继续修。&lt;/p&gt;
&lt;p&gt;第三轮审核——&lt;strong&gt;91个段落全部≤100字&lt;/strong&gt;，PASS。&lt;/p&gt;
&lt;p&gt;整个过程零人工介入。Reviewer自动FAIL，mp-creator自动读问题列表修复。&lt;/p&gt;
&lt;p&gt;从第一次FAIL到最终PASS，&lt;strong&gt;修复循环自动跑了3轮&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;教训：模型对&amp;quot;手机屏幕3行=100字&amp;quot;这种物理约束，理解不够精确。需要多轮迭代。&lt;/p&gt;
&lt;h2 id="6-模型分级省钱的关键"&gt;6. 模型分级：省钱的关键
&lt;/h2&gt;&lt;p&gt;4个Agent不是都用最贵的模型。按&lt;strong&gt;职责复杂度&lt;/strong&gt;分级：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;职责&lt;/th&gt;
 &lt;th&gt;模型&lt;/th&gt;
 &lt;th&gt;为什么&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;原创写作&lt;/td&gt;
 &lt;td&gt;glm-5.1（强）&lt;/td&gt;
 &lt;td&gt;需要创造力和上下文&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;内容审核&lt;/td&gt;
 &lt;td&gt;glm-5.1（强）&lt;/td&gt;
 &lt;td&gt;找错需要精确理解&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;格式转换&lt;/td&gt;
 &lt;td&gt;glm-4.7（省）&lt;/td&gt;
 &lt;td&gt;机械任务，够用即可&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;辅助工具&lt;/td&gt;
 &lt;td&gt;glm-4.5-air（最省）&lt;/td&gt;
 &lt;td&gt;压缩/搜索等轻量任务&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;实际效果：写作和审核两个最关键的环节用强模型保证质量。&lt;/p&gt;
&lt;p&gt;格式转换这种&amp;quot;体力活&amp;quot;用弱模型，成本直接砍半。&lt;/p&gt;
&lt;p&gt;而且reviewer在下游兜底，弱模型出了问题也能被拦截。&lt;/p&gt;
&lt;h2 id="7-搭建要点回顾"&gt;7. 搭建要点回顾
&lt;/h2&gt;&lt;p&gt;如果你也想搭这样的Pipeline，关键步骤：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;◆ &lt;strong&gt;Step 1&lt;/strong&gt;：为每个角色创建独立Profile&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Step 2&lt;/strong&gt;：写SOUL.md定义行为规范&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Step 3&lt;/strong&gt;：配置review skill的审核checklist&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Step 4&lt;/strong&gt;：用kanban的parents参数搭建依赖链&lt;/li&gt;
&lt;li&gt;◆ &lt;strong&gt;Step 5&lt;/strong&gt;：按职责复杂度分配模型&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最关键的设计决策是&lt;strong&gt;质量门禁&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;没有它，Agent就是各干各的，错误会一路传到最终发布。&lt;/p&gt;
&lt;p&gt;有了它，每个环节都有人把关，问题在传播之前就被拦截。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;关注 varkm，一起学习，一起成长&lt;/p&gt;
&lt;p&gt;多Agent协作系列第3篇 · 第4篇将分享踩坑最佳实践&lt;/p&gt;</description></item><item><title>从零搭建 Blog Writer Agent：让 AI 自己写文章、自己部署</title><link>https://blog.kalend.top/2026/05/15/blog-writer-agent-tutorial.html/</link><pubDate>Fri, 15 May 2026 17:30:00 +0800</pubDate><guid>https://blog.kalend.top/2026/05/15/blog-writer-agent-tutorial.html/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;这是「多 Agent 协作」系列第 2 篇。第 1 篇讲了概念：&lt;a class="link" href="https://blog.kalend.top/2026/05/14/hermes-kanban-tutorial.html/" &gt;Kanban + Profile：让你的 AI Agent 自己管博客&lt;/a&gt;。这篇是纯实操——每一步都是我刚跑过的真实命令。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="先说结论"&gt;先说结论
&lt;/h2&gt;&lt;p&gt;搭一个会自己写博客的 AI Agent，&lt;strong&gt;7 步，2.5 分钟&lt;/strong&gt;。不是 demo，是真的能写文章、构建验证、部署上线的 Agent。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;你：hermes kanban create &amp;#34;写一篇 Kanban 入门&amp;#34; --assignee blog-writer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;AI：自动写文章 → 构建验证 → 完成汇报
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;整个过程你只需要&lt;strong&gt;发一条命令&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="前置条件"&gt;前置条件
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;已安装 Hermes Agent（v0.13.0+）&lt;/li&gt;
&lt;li&gt;有一个 Hugo/Hexo 等静态博客项目&lt;/li&gt;
&lt;li&gt;Gateway 正在运行&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="第-1-步启用-kanban-toolset"&gt;第 1 步：启用 Kanban Toolset
&lt;/h2&gt;&lt;p&gt;Kanban 是&lt;strong&gt;隐藏 toolset&lt;/strong&gt;——&lt;code&gt;hermes tools list&lt;/code&gt; 里看不到它。需要手动在 &lt;code&gt;config.yaml&lt;/code&gt; 里添加：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# ~/.hermes/config.yaml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;toolsets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &lt;span class="l"&gt;hermes-cli&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &lt;span class="l"&gt;kanban &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# ← 加这一行&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;同时在 &lt;code&gt;config.yaml&lt;/code&gt; 底部确认 dispatcher 配置（通常已有）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kanban&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dispatch_in_gateway&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dispatch_interval_seconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;60&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;failure_limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;改完重启 gateway：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl restart hermes-gateway.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="第-2-步创建-blog-writer-profile"&gt;第 2 步：创建 blog-writer Profile
&lt;/h2&gt;&lt;p&gt;Profile 就是&lt;strong&gt;一个独立的 AI 身份&lt;/strong&gt;——有自己的配置、人格、工作目录。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes profile create blog-writer --clone
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;输出：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Profile &amp;#39;blog-writer&amp;#39; created at ~/.hermes/profiles/blog-writer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cloned config, .env, SOUL.md, and skills from default.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Wrapper created: ~/.local/bin/blog-writer
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;--clone&lt;/code&gt; 会复制当前 profile 的 API 密钥、配置、记忆文件，省得重新配置。&lt;/p&gt;
&lt;h2 id="第-3-步写-soulmd定义人格"&gt;第 3 步：写 SOUL.md（定义人格）
&lt;/h2&gt;&lt;p&gt;SOUL.md 决定了这个 Agent 的行为模式。给 blog-writer 写一个专门的人格：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; ~/.hermes/profiles/blog-writer/SOUL.md &lt;span class="s"&gt;&amp;lt;&amp;lt; &amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;# Blog Writer Agent
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;你是博客写作和部署专家。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;## 职责
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;1. 撰写技术博客文章（Markdown + Hugo front matter）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;2. 构建验证（hugo --minify）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;3. 部署到云存储
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;## 严格规则
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;- 日期必须是 RFC3339 格式：2026-05-15T10:00:00+08:00
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;- categories 和 tags 都要包含主题关键词
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;- description 必须填写
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;- **永远不要用 read_file → write_file 修改 Markdown**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;- 构建后必须检查页面数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="第-4-步配置工作目录"&gt;第 4 步：配置工作目录
&lt;/h2&gt;&lt;p&gt;让 blog-writer 的默认工作目录指向博客项目：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 编辑 blog-writer 的 config.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 在 terminal 段添加：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;terminal:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cwd: /root/blog
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;toolsets:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- hermes-cli
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- kanban
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这样 worker 被调度时，会自动 &lt;code&gt;cd&lt;/code&gt; 到博客目录。&lt;/p&gt;
&lt;h2 id="第-5-步初始化-kanban-看板"&gt;第 5 步：初始化 Kanban 看板
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes kanban init
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;输出：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Kanban DB initialized at ~/.hermes/kanban.db
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Discovered 3 profile(s) on disk:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; blog-writer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; default
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; yuan
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;看板是一张 SQLite 表，所有 profile 共享。验证一下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes kanban stats &lt;span class="c1"&gt;# 0 tasks (空看板)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes kanban assignees &lt;span class="c1"&gt;# blog-writer (idle)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="第-6-步创建第一个写作任务"&gt;第 6 步：创建第一个写作任务
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes kanban create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --assignee blog-writer &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --skill hugo-blog &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --workspace &lt;span class="s1"&gt;&amp;#39;dir:/root/blog&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --body &lt;span class="s1"&gt;&amp;#39;写一篇 Kanban 入门文章。要求：RFC3339日期、categories含hermes、构建验证&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;测试任务：写一篇 Kanban 入门文章&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;输出：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Created t_9dd47956 (ready, assignee=blog-writer)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;关键参数解释：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;参数&lt;/th&gt;
 &lt;th&gt;作用&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--assignee blog-writer&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;指定谁来做&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--skill hugo-blog&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;给 worker 注入博客相关知识&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--workspace dir:/root/blog&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;工作目录（不是临时 scratch）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--body '...'&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;任务的详细要求&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="第-7-步等-2-分钟验收"&gt;第 7 步：等 2 分钟，验收
&lt;/h2&gt;&lt;p&gt;Dispatcher 每 60 秒轮询一次 ready 任务。大约 70 秒后：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes kanban stats
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# blog-writer running=1 ← 正在执行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;再等 82 秒：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes kanban show t_9dd47956
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# status: done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# summary: 完成测试文章「Hermes Kanban 快速入门」，186页构建通过&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Run #1: completed @blog-writer 82s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;文章已经写好了。&lt;/strong&gt; 看看产出：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;title: &amp;#34;Hermes Kanban 快速入门&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;date: 2026-05-15T17:00:00+08:00
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;categories: [&amp;#34;hermes&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tags: [&amp;#34;hermes&amp;#34;, &amp;#34;kanban&amp;#34;, &amp;#34;agent&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## 什么是 Kanban？
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Hermes Kanban 是内置的任务调度系统...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;front matter 格式正确，日期 RFC3339，构建验证通过。全流程从创建到完成 &lt;strong&gt;2 分 22 秒&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="背后发生了什么"&gt;背后发生了什么
&lt;/h2&gt;&lt;p&gt;整个调度流程：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;你发命令 → kanban create（SQLite 写入一条 ready 任务）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 60s
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Gateway dispatcher 轮询 → 发现 ready 任务 → claim
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spawn 子进程：hermes -p blog-writer --skills kanban-worker --skills hugo-blog chat -q &amp;#34;work kanban task t_9dd47956&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 82s
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;blog-writer 读任务 → 写文章 → hugo 构建 → kanban_complete
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;任务状态 → done，你收到通知
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;几个关键设计：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dispatcher 嵌在 Gateway 里&lt;/strong&gt;，不需要给 blog-writer 单独跑 gateway&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Worker 是独立子进程&lt;/strong&gt;，&lt;code&gt;hermes -p blog-writer&lt;/code&gt; 启动，完成后自行退出&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--skills&lt;/code&gt; 自动注入&lt;/strong&gt;，每个 worker 都会加载 &lt;code&gt;kanban-worker&lt;/code&gt; skill（行为规范）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Claim TTL = 15 分钟&lt;/strong&gt;，超时自动 reclaim，不会永远卡住&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="我踩过的-4-个坑"&gt;我踩过的 4 个坑
&lt;/h2&gt;&lt;h3 id="坑-1hermes-不在-path-中"&gt;坑 1：hermes 不在 PATH 中
&lt;/h3&gt;&lt;p&gt;Dispatcher spawn worker 时执行 &lt;code&gt;hermes -p blog-writer ...&lt;/code&gt;，如果 &lt;code&gt;hermes&lt;/code&gt; 不在 PATH 里，直接失败。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 检查&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;which hermes &lt;span class="c1"&gt;# 如果为空，需要手动链接&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 修复&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ln -sf ~/.hermes/hermes-agent/venv/bin/hermes /usr/local/bin/hermes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="坑-2blog-writer-不需要独立-gateway"&gt;坑 2：blog-writer 不需要独立 gateway
&lt;/h3&gt;&lt;p&gt;一开始我以为每个 profile 都得跑自己的 gateway。错了。Dispatcher 运行在&lt;strong&gt;主 gateway&lt;/strong&gt; 里，通过 &lt;code&gt;hermes -p blog-writer&lt;/code&gt; spawn 子进程。子进程不需要消息平台，不需要 gateway。&lt;/p&gt;
&lt;p&gt;如果你给 blog-writer 启动了 gateway，会和主 gateway 冲突（weixin token 被占）。&lt;/p&gt;
&lt;h3 id="坑-3kanban-toolset-是隐藏的"&gt;坑 3：kanban toolset 是隐藏的
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;hermes tools list&lt;/code&gt; 不显示 kanban。它是条件注册的——只有 config.yaml 的 &lt;code&gt;toolsets&lt;/code&gt; 列表里有 &lt;code&gt;kanban&lt;/code&gt; 才会激活。很多教程会遗漏这一步。&lt;/p&gt;
&lt;h3 id="坑-4workspace-默认是-scratch"&gt;坑 4：workspace 默认是 scratch
&lt;/h3&gt;&lt;p&gt;如果不指定 &lt;code&gt;--workspace&lt;/code&gt;，默认用 &lt;code&gt;scratch&lt;/code&gt;（临时目录，任务完成后会被清理）。博客项目要用 &lt;code&gt;dir:/root/blog&lt;/code&gt;，否则写完文章就被删了。&lt;/p&gt;
&lt;h2 id="时间线回顾"&gt;时间线回顾
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;时刻&lt;/th&gt;
 &lt;th&gt;事件&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;17:07:00&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;kanban create&lt;/code&gt; → 任务 ready&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;17:07:10&lt;/td&gt;
 &lt;td&gt;Dispatcher claim + spawn worker&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;17:08:32&lt;/td&gt;
 &lt;td&gt;Worker 完成，kanban_complete&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;总耗时&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;1 分 32 秒（从创建到完成）&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="下一步"&gt;下一步
&lt;/h2&gt;&lt;p&gt;这是系列第 2 篇。接下来的内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;第 3 篇&lt;/strong&gt;：多任务编排——让多个 Agent 同时写多篇文章，Pipeline + Fan-out 实战&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;第 4 篇&lt;/strong&gt;：踩坑全记录——格式陷阱、模型选择、成本控制、调试技巧&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;关注 varkm，一起学习，一起成长&lt;/p&gt;</description></item><item><title>Kanban + Profile：让你的 AI Agent 自己管博客</title><link>https://blog.kalend.top/2026/05/14/hermes-kanban-tutorial.html/</link><pubDate>Thu, 14 May 2026 23:00:00 +0800</pubDate><guid>https://blog.kalend.top/2026/05/14/hermes-kanban-tutorial.html/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;你跟 AI 说&amp;quot;帮我写篇博客&amp;quot;，它写完就走了。下次再说，它又是从零开始。&lt;/p&gt;
&lt;p&gt;这篇文章教你用 Hermes 的 Kanban + Profile，给 AI Agent 一个&lt;strong&gt;专职身份&lt;/strong&gt;，让它自己管博客。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="先说结论"&gt;先说结论
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;delegate_task 是临时工，Kanban + Profile 是全职员工。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你想：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;让一个 AI &lt;strong&gt;专门负责博客&lt;/strong&gt;（写文章、同步、部署）&lt;/li&gt;
&lt;li&gt;任务&lt;strong&gt;不丢失&lt;/strong&gt;（主 Agent 崩了也不影响）&lt;/li&gt;
&lt;li&gt;随时&lt;strong&gt;查看进度&lt;/strong&gt;（微信直接看）&lt;/li&gt;
&lt;li&gt;出了问题&lt;strong&gt;自动通知你&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;那就用 Kanban + Profile。下面是完整方案。&lt;/p&gt;
&lt;h2 id="我的踩坑故事"&gt;我的踩坑故事
&lt;/h2&gt;&lt;p&gt;我有一个 Hugo 静态博客。之前让主 Agent 兼顾博客写作——一边排查路由器 DNS 问题，一边写博客文章。结果：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;read_file 带行号前缀写回文件&lt;/strong&gt;，Hugo front matter 全毁，页面数从 168 暴跌到 102&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;日期格式不对&lt;/strong&gt;，&lt;code&gt;date: 2026-05-14&lt;/code&gt; 被解析成 &lt;code&gt;0001-01-01&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中文 URL 编码错误&lt;/strong&gt;，又拍云上传 45 个文件失败&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;根本原因：&lt;strong&gt;上下文切换太频繁&lt;/strong&gt;，主 Agent 在路由器、DNS、博客之间反复横跳，每次切换都丢细节。&lt;/p&gt;
&lt;h2 id="两种方案对比"&gt;两种方案对比
&lt;/h2&gt;&lt;p&gt;很多人第一反应是 &lt;code&gt;delegate_task&lt;/code&gt;（子代理），我也是。但调研完官方文档后发现，这俩根本不是一个量级：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;维度&lt;/th&gt;
 &lt;th&gt;delegate_task&lt;/th&gt;
 &lt;th&gt;Kanban + Profile&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;形状&lt;/td&gt;
 &lt;td&gt;函数调用（fork→join）&lt;/td&gt;
 &lt;td&gt;持久工作队列 + 状态机&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;生命周期&lt;/td&gt;
 &lt;td&gt;分钟级，调用者阻塞等待&lt;/td&gt;
 &lt;td&gt;小时/天级，fire-and-forget&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;身份&lt;/td&gt;
 &lt;td&gt;匿名子代理，干完就走&lt;/td&gt;
 &lt;td&gt;命名 Profile，有自己的记忆和人格&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;抗中断&lt;/td&gt;
 &lt;td&gt;父 Agent 断了，子代理也死&lt;/td&gt;
 &lt;td&gt;独立进程，互不影响&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;可恢复&lt;/td&gt;
 &lt;td&gt;失败即失败&lt;/td&gt;
 &lt;td&gt;阻塞→解除→重跑；崩溃→回收&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;人工介入&lt;/td&gt;
 &lt;td&gt;不支持&lt;/td&gt;
 &lt;td&gt;任何节点都能 comment/unblock&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;审计追踪&lt;/td&gt;
 &lt;td&gt;上下文压缩后丢失&lt;/td&gt;
 &lt;td&gt;SQLite 永久保存&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;一句话：delegate_task 是你叫一次临时工；Kanban 是你雇了个全职员工。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="架构设计"&gt;架构设计
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;你（微信/Telegram/CLI）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ &amp;#34;写一篇关于 XX 的博客&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;主 Agent（orchestrator）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ kanban_create 创建任务
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kanban.db（SQLite 持久化看板）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ dispatcher 自动调度（gateway 内嵌，60s 轮询）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;blog-writer（独立 Profile，独立进程）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ kanban_complete / kanban_block 汇报
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kanban.db
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ gateway 自动通知
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;你（微信收到完成/阻塞通知）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;关键点&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;dispatcher 内嵌在 gateway 里&lt;/strong&gt;，不需要额外的守护进程&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;blog-writer 是独立 Profile&lt;/strong&gt;，有自己的 config、记忆、skills、SOUL.md&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;gateway 自动推送通知&lt;/strong&gt;，任务完成或卡住都会通知你&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;你随时可以用 &lt;code&gt;/kanban&lt;/code&gt; 命令&lt;/strong&gt;查看进度、添加评论、解除阻塞&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="5-步搭建"&gt;5 步搭建
&lt;/h2&gt;&lt;h3 id="第-1-步创建独立-profile"&gt;第 1 步：创建独立 Profile
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes profile create blog-writer --clone
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;--clone&lt;/code&gt; 会复制当前 Profile 的 config.yaml、.env、SOUL.md，省得重新配 API Key。&lt;/p&gt;
&lt;h3 id="第-2-步配置独立人格和工作目录"&gt;第 2 步：配置独立人格和工作目录
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 配置工作目录指向博客项目&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;blog-writer config &lt;span class="nb"&gt;set&lt;/span&gt; terminal.cwd /root/blog
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 写专属 SOUL.md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; ~/.hermes/profiles/blog-writer/SOUL.md &lt;span class="s"&gt;&amp;lt;&amp;lt; &amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;你是 blog.kalend.top 的博客写作专家。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;职责：撰写高质量技术博客、同步公众号文章、构建和部署。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;风格：简洁直接、先结论后细节、代码示例丰富。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;严格遵守 hugo-blog skill 中的所有陷阱清单。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="第-3-步确认-skill-可用"&gt;第 3 步：确认 skill 可用
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# kanban-worker 是 bundled skill，自动同步&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;blog-writer skills list &lt;span class="p"&gt;|&lt;/span&gt; grep kanban-worker
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 如果缺失，恢复&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;blog-writer skills reset kanban-worker --restore
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 验证 hugo-blog skill（需要手动确保已安装）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;blog-writer skills list &lt;span class="p"&gt;|&lt;/span&gt; grep hugo-blog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="第-4-步初始化-kanban"&gt;第 4 步：初始化 Kanban
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 创建看板数据库（幂等操作）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes kanban init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 确保 gateway 运行（内嵌 dispatcher）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes gateway start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="第-5-步创建第一个任务"&gt;第 5 步：创建第一个任务
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes kanban create &lt;span class="s2"&gt;&amp;#34;写一篇关于 Hermes Kanban 的博客&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --assignee blog-writer &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --skill hugo-blog &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --workspace dir:/root/blog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;从这一刻起，dispatcher 会自动发现 &lt;code&gt;ready&lt;/code&gt; 状态的任务，spawn &lt;code&gt;blog-writer&lt;/code&gt; Profile 作为独立进程执行。&lt;/p&gt;
&lt;h2 id="worker-的工作流程"&gt;Worker 的工作流程
&lt;/h2&gt;&lt;p&gt;当 dispatcher 启动 blog-writer 后，它会：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. kanban_show() → 读取任务详情（标题、正文、父任务结果、评论历史）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. cd $WORKSPACE → 进入工作目录
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. 执行任务 → 搜索素材 → 撰写文章 → Hugo build → 部署
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. kanban_heartbeat() → 长任务中间汇报（可选）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. kanban_complete() → 完成（附带 summary + metadata）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 或 kanban_block() → 阻塞（需要你确认标题/内容等）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;阻塞时&lt;/strong&gt;，你微信会收到通知。你直接在微信里回复：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/kanban comment t_xxx &amp;#34;标题用「Kanban实战：让AI自己管博客」&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/kanban unblock t_xxx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;dispatcher 下一次轮询时会重新 spawn worker，worker 读取你的评论后继续。&lt;/p&gt;
&lt;h2 id="任务依赖pipeline-模式"&gt;任务依赖：Pipeline 模式
&lt;/h2&gt;&lt;p&gt;如果你的写作流程是：调研 → 写作 → 审校 → 部署，可以用 &lt;code&gt;parents&lt;/code&gt; 串起来：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1. 调研任务（立即开始）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes kanban create &lt;span class="s2"&gt;&amp;#34;调研 Hermes Kanban 架构&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --assignee researcher
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2. 写作任务（等调研完成）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes kanban create &lt;span class="s2"&gt;&amp;#34;写博客文章&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --assignee blog-writer &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --parent t_research
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3. 部署任务（等写作完成）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes kanban create &lt;span class="s2"&gt;&amp;#34;部署博客&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --assignee blog-writer &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --parent t_writing
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;子任务会停留在 &lt;code&gt;todo&lt;/code&gt; 状态，直到所有 parent 达到 &lt;code&gt;done&lt;/code&gt;，然后自动 promote 到 &lt;code&gt;ready&lt;/code&gt;。&lt;strong&gt;不需要手动协调。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="9-种协作模式"&gt;9 种协作模式
&lt;/h2&gt;&lt;p&gt;官方文档列出了 9 种 Kanban 协作模式。博客场景常用的：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;模式&lt;/th&gt;
 &lt;th&gt;用法&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;P1 Fan-out&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;同时写 5 篇不同主题的文章&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;P2 Pipeline&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;调研 → 写作 → 审校 → 部署&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;P5 Human-in-the-loop&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;写完后阻塞等你确认再部署&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;P8 Fleet farming&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;一个 writer 处理 N 篇文章队列&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;P9 Triage specifier&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;粗略想法 → triage → 自动展开为完整任务&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="我遇到的真实问题"&gt;我遇到的真实问题
&lt;/h2&gt;&lt;h3 id="问题-1写作质量不可控"&gt;问题 1：写作质量不可控
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;解法&lt;/strong&gt;：GLM-5.1 做格式转换和同步任务完全够用。原创写作需要更强的模型——Profile 可以独立配置模型：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;blog-writer config &lt;span class="nb"&gt;set&lt;/span&gt; model.default anthropic/claude-sonnet-4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="问题-2格式错误反复出现"&gt;问题 2：格式错误反复出现
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;解法&lt;/strong&gt;：把所有踩过的坑写进 skill，每次 worker 启动时自动加载。我的 &lt;code&gt;hugo-blog&lt;/code&gt; skill 现在有 12 条陷阱清单，覆盖了行号前缀、日期格式、URL 编码等所有已知问题。&lt;/p&gt;
&lt;h3 id="问题-3上下文丢失"&gt;问题 3：上下文丢失
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;解法&lt;/strong&gt;：每篇独立跑，skill 固定注入。不依赖主 Agent 的上下文。kanban.db 里的 comment 线程就是完整的任务上下文。&lt;/p&gt;
&lt;h2 id="和-delegate_task-什么时候用哪个"&gt;和 delegate_task 什么时候用哪个
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;场景&lt;/th&gt;
 &lt;th&gt;选择&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;快速并行子任务（搜索3个话题）&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;delegate_task&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;长时间独立工作（写博客文章）&lt;/td&gt;
 &lt;td&gt;Kanban + Profile&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;需要人工确认&lt;/td&gt;
 &lt;td&gt;Kanban（阻塞/解除）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;一次性的简单问答&lt;/td&gt;
 &lt;td&gt;直接回答&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;需要跨 session 保持状态&lt;/td&gt;
 &lt;td&gt;Kanban（SQLite 持久化）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;它们可以共存&lt;/strong&gt;：Kanban worker 内部可以调用 &lt;code&gt;delegate_task&lt;/code&gt; 处理短子任务。&lt;/p&gt;
&lt;h2 id="官方文档"&gt;官方文档
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Kanban 文档：https://hermes-agent.nousresearch.com/docs/user-guide/features/kanban&lt;/li&gt;
&lt;li&gt;Kanban 教程：https://hermes-agent.nousresearch.com/docs/user-guide/features/kanban-tutorial&lt;/li&gt;
&lt;li&gt;Profile 文档：https://hermes-agent.nousresearch.com/docs/user-guide/profiles&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;这是「Hermes 多 Agent 协作」系列的第一篇。下一篇会实际搭建 blog-writer Profile，跑通第一个完整的写作→部署流程。&lt;/p&gt;
&lt;p&gt;如果你也在用 Hermes Agent 或者对 AI Agent 协作感兴趣，关注我，后面会持续分享实战经验。&lt;/p&gt;
&lt;section style="margin:20px 0;padding:16px 20px;background:linear-gradient(135deg,#4a90d9,#357abd);border-radius:8px;text-align:center;"&gt;
&lt;p style="margin:0 0 8px 0;color:#fff;font-size:16px;font-weight:bold;line-height:1.6;"&gt;关注 varkm，一起学习，一起成长&lt;/p&gt;
&lt;p style="margin:0;color:rgba(255,255,255,0.85);font-size:13px;line-height:1.6;"&gt;多 Agent 协作实战&lt;/p&gt;
&lt;/section&gt;</description></item></channel></rss>