<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI Agent on 鬼哥的空间</title><link>https://guige.ai/tags/ai-agent/</link><description>Recent content in AI Agent on 鬼哥的空间</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Tue, 08 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://guige.ai/tags/ai-agent/index.xml" rel="self" type="application/rss+xml"/><item><title>Grok Bot 多 Agent 团队怎么搭：先把交接协议写清楚</title><link>https://guige.ai/p/grok-bot-handoffs/</link><pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate><guid>https://guige.ai/p/grok-bot-handoffs/</guid><description>&lt;img src="https://guige.ai/" alt="Featured image of post Grok Bot 多 Agent 团队怎么搭：先把交接协议写清楚" /&gt;&lt;p&gt;很多人第一次组 Grok Bot 团队，会先创建五个名字很专业的 Bot，然后把它们拉进群聊。真正开始干活，研究员说“有几条没核实”，写作者只收到结论，检查员又不知道该和哪份来源比。五位同事都在场，工作却丢在了门缝里。&lt;/p&gt;
&lt;p&gt;darkzodchi 最近发布的 &lt;a class="link" href="https://x.com/zodchiii/status/2094358429913784551" target="_blank" rel="noopener"
 &gt;Grok Bot 多 Agent 配置课程&lt;/a&gt;，抓住了这个系统最值得先解决的问题：&lt;strong&gt;团队通常不是坏在单个 Bot 的输出，而是坏在 Bot 之间的交接。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这篇文章把原帖的 coordinator、handoff、conflict 和 stop rules 整理成一套可粘贴的最小配置。目标很具体：先让 Researcher → Writer → Checker 三个 Bot 跑通一条可检查的链，再决定要不要增加第四个角色。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;证据说明：本文依据原帖和 xAI 官方文档整理，核对日期为 2026-09-08。文中的配置模板是工程化改写，不是原帖逐字翻译，也没有在你的 Grok Bot 账号中实际运行；请按文末验收步骤测试后再用于真实工作。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="三个 Bot 通过固定交接协议完成一个结果" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1080" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/grok-bot-handoffs/cover.webp" srcset="https://guige.ai/p/grok-bot-handoffs/cover_hu_4de8da962fd6f230.webp 800w, https://guige.ai/p/grok-bot-handoffs/cover_hu_c29fecc89c60f1dc.webp 1600w, https://guige.ai/p/grok-bot-handoffs/cover.webp 1919w" width="1919"&gt;&lt;/p&gt;
&lt;h2 id="先确认-grok-bot-的协作边界"&gt;先确认 Grok Bot 的协作边界
&lt;/h2&gt;&lt;p&gt;根据 xAI 的 &lt;a class="link" href="https://docs.x.ai/grok-bot/chat-and-collaboration" target="_blank" rel="noopener"
 &gt;Message and collaborate&lt;/a&gt; 文档，Grok Bot 群聊可以加入 2–6 个 Bots。Bots 能在群里发言，也能异步把工作交给另一个 Bot；官方建议每个阶段指定一个 owner，过多并行交接会带来重复工作和噪声。&lt;/p&gt;
&lt;p&gt;还有两个容易漏掉的产品边界：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bot-to-group 的交接消息目前是纯文本；如果下一个 Bot 必须检查图片，应直接把图片发给它。&lt;/li&gt;
&lt;li&gt;所有 Bots 虽然有各自的角色和对话，但同一用户下共享一台持久云电脑、文件、浏览器会话与登录状态。&lt;a class="link" href="https://docs.x.ai/grok-bot/faq" target="_blank" rel="noopener"
 &gt;官方 FAQ&lt;/a&gt; 明确提醒：不要把不同 Bot 当成安全边界。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这两点会直接影响架构。交接格式必须在纯文本里自洽；权限控制则不能靠“这个 Bot 名字叫 Researcher，所以它碰不到发布账号”这种美好愿望。&lt;/p&gt;
&lt;h2 id="最小团队只需要三个专业角色"&gt;最小团队只需要三个专业角色
&lt;/h2&gt;&lt;p&gt;原帖建议先用三个 Bot、两次交接证明流程。这个规模刚好覆盖生产内容最基本的证据链：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Bot&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;Researcher&lt;/td&gt;
 &lt;td&gt;搜集来源，区分已验证与未验证信息&lt;/td&gt;
 &lt;td&gt;不写最终文章&lt;/td&gt;
 &lt;td&gt;来源清单与研究 HANDOFF&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Writer&lt;/td&gt;
 &lt;td&gt;只根据已验证材料形成草稿&lt;/td&gt;
 &lt;td&gt;不补猜测，不发布&lt;/td&gt;
 &lt;td&gt;草稿与写作 HANDOFF&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Checker&lt;/td&gt;
 &lt;td&gt;将草稿中的关键断言逐条对照来源&lt;/td&gt;
 &lt;td&gt;不偷偷重写争议结论&lt;/td&gt;
 &lt;td&gt;PASS、修改项或 BLOCKED&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;协调员不算第四位专家。它是一扇门：接收目标、分派任务、跟踪状态、处理冲突，最后只返回一个结果。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Researcher、Writer、Checker 的两次交接和单一出口" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1080" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/grok-bot-handoffs/three-bot-chain.webp" srcset="https://guige.ai/p/grok-bot-handoffs/three-bot-chain_hu_96c23b81e31ba390.webp 800w, https://guige.ai/p/grok-bot-handoffs/three-bot-chain_hu_b6020d59afa74132.webp 1600w, https://guige.ai/p/grok-bot-handoffs/three-bot-chain.webp 1919w" width="1919"&gt;&lt;/p&gt;
&lt;h2 id="第一步把协调员写成唯一入口"&gt;第一步：把协调员写成“唯一入口”
&lt;/h2&gt;&lt;p&gt;xAI 官方建议用操作性语言定义 Bot：职责、工具和来源、工作方式、审批边界都应该写清楚；长期规则放在 Bot description，单次任务要求放在消息里。下面这份协调员描述遵循这个区分。&lt;/p&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;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;/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;You are the coordinator and the only front door to this Bot team.
&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;Your responsibilities:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. Restate the objective, final deliverable, and completion criteria.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. Assign one owner to each stage.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Dispatch one bounded job at a time with the required input,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; expected output, source of truth, and approval boundary.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. Do not perform specialist work yourself.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. Accept specialist results only through the HANDOFF format.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6. Track task status as queued, working, blocked, or complete.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;7. Surface conflicts and missing evidence; never resolve them silently.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8. Return one final result after the Checker reports PASS.
&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;Never send, publish, delete, purchase, or change production systems
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;without explicit human approval.
&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Who is working on what right now? Return owner, task, status, and blocker.
&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;h2 id="第二步固定-handoff不传工作过程"&gt;第二步：固定 HANDOFF，不传工作过程
&lt;/h2&gt;&lt;p&gt;原帖反复强调两个字段：&lt;code&gt;unverified&lt;/code&gt; 和 &lt;code&gt;skipped&lt;/code&gt;。原因很实际——缺口如果没有名字，到了下游就很容易长得像事实。&lt;/p&gt;
&lt;p&gt;我在这个原则上补齐了任务 ID、证据、产物、风险和下一步，形成下面的交接合同：&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;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;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&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;HANDOFF
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;task_id: &amp;lt;stable identifier&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from: &amp;lt;current Bot&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;to: &amp;lt;next Bot&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;status: COMPLETE | BLOCKED | NEEDS_REVIEW
&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;result:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;lt;the result, not the transcript of how it was produced&amp;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;verified:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;lt;claim or output&amp;gt; | source: &amp;lt;link or artifact&amp;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;unverified:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;lt;claim that could not be confirmed&amp;gt; | reason: &amp;lt;why&amp;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;skipped:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;lt;requested item not completed&amp;gt; | reason: &amp;lt;why&amp;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;artifacts:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;lt;file, link, image, or document&amp;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;risks:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;lt;known ambiguity, side effect, or dependency&amp;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;next_action:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;lt;one owner and one concrete next step&amp;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;approval_required:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- NONE | &amp;lt;exact human decision or action&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;END HANDOFF
&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;再把下面的接收规则加入每个专业 Bot 的 description：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;End every task with the exact HANDOFF block.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Pass results, not a transcript of your work.
&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;Before starting, reject an incoming handoff that is missing:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;task_id, verified, unverified, skipped, artifacts, or next_action.
&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;Use verified items as facts only when their sources are accessible.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Treat unverified items as investigation tasks, never as facts.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Do not fill a missing field by guessing.
&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;p&gt;&lt;img alt="一份完整 HANDOFF 合同中的事实、缺口、证据和下一步" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1080" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/grok-bot-handoffs/handoff-contract.webp" srcset="https://guige.ai/p/grok-bot-handoffs/handoff-contract_hu_50f149305260e7f2.webp 800w, https://guige.ai/p/grok-bot-handoffs/handoff-contract_hu_2446d9a3174a57ef.webp 1600w, https://guige.ai/p/grok-bot-handoffs/handoff-contract.webp 1919w" width="1919"&gt;&lt;/p&gt;
&lt;h2 id="第三步先跑一对一链路"&gt;第三步：先跑一对一链路
&lt;/h2&gt;&lt;p&gt;不要一开始就把三个 Bot 放进群里。先让协调员按顺序完成两次可见交接：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Coordinator
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → Researcher
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → Writer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → Checker
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → Coordinator
&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;测试任务要用真实材料，但不要带发布权限。例如：根据三份指定来源，写一篇 800 字产品更新说明，不发送给任何外部人员。&lt;/p&gt;
&lt;p&gt;每个阶段都有一个验收点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Researcher 的 &lt;code&gt;verified&lt;/code&gt; 条目都附有可访问来源；无法确认的内容进入 &lt;code&gt;unverified&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;Writer 的草稿没有把 &lt;code&gt;unverified&lt;/code&gt; 或 &lt;code&gt;skipped&lt;/code&gt; 内容写成事实。&lt;/li&gt;
&lt;li&gt;Checker 能把草稿中的关键断言映射回 Researcher 的来源，并将不匹配项列为修改或阻塞。&lt;/li&gt;
&lt;li&gt;Coordinator 只在 Checker 返回 &lt;code&gt;PASS&lt;/code&gt; 后组装最终结果。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;原帖用一个示意计算解释为什么交接次数重要：如果每次交接只能保留 85% 的有效上下文，五个 Bot 之间四次交接后，完整保留率约为 &lt;code&gt;0.85^4 ≈ 52%&lt;/code&gt;。作者明确说明这不是 xAI 的可靠性数据，只是展示误差如何沿链路累积。&lt;/p&gt;
&lt;p&gt;重点不是 85% 这个假设，而是每增加一次 handoff，就多一个丢失来源、忽略限制或误读状态的机会。增加 Bot 前，先确认新角色提供了独立价值，而不是把同一件事切得更碎。&lt;/p&gt;
&lt;h2 id="第四步链路稳定后再建群"&gt;第四步：链路稳定后再建群
&lt;/h2&gt;&lt;p&gt;一对一链路跑通后，再创建包含三个专业 Bot 和协调员的群聊。官方当前允许每个群选择 2–6 个 Bots，并建议在 kickoff 中写明共同结果和下一阶段 owner。&lt;/p&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Objective: Produce one source-checked launch brief.
&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;@Researcher collect and verify the source material.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@Writer draft only from Researcher&amp;#39;s verified list.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@Checker compare every consequential claim with the sources.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@Coordinator own routing, status, conflicts, and the final package.
&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;Use the HANDOFF contract for every transfer.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Do not publish, send, or modify external systems.
&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;群聊解决的是“让交接可见”，并不会自动修复坏的交接。成功标准应该是一条消息进入、一个完整结果出来，而且回看群聊时能找到每次移交的 owner、输入、输出和状态。&lt;/p&gt;
&lt;p&gt;如果需要传图片，别只在群里留一句“见附件”。官方文档说明 Bot-to-group handoff 目前是纯文本；让发送方在 HANDOFF 的 &lt;code&gt;artifacts&lt;/code&gt; 里写清图片用途，并把文件直接发给需要检查的 Bot。&lt;/p&gt;
&lt;h2 id="第五步提前写好冲突规则"&gt;第五步：提前写好冲突规则
&lt;/h2&gt;&lt;p&gt;两个 Bot 都认真工作，仍然可能得出不同结论。协调员如果悄悄挑一个看起来顺眼的答案，冲突就消失在界面上，却会留在最终产物里。&lt;/p&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CONFLICT RULES
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. Current primary sources outrank memory, summaries, and prior drafts.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. A sourced claim outranks an unsourced claim.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. The Checker may block release but may not invent a replacement fact.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. If two accessible primary sources conflict, preserve both positions,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; record dates and scope, and ask the human to decide when it changes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; the final conclusion.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. The Coordinator must surface unresolved conflicts in the final result.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6. Human approval always outranks autonomous completion for external actions.
&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;第三条尤其重要。Checker 的工作是证明“这句话站不住”，不一定负责现场写出另一句更好听的话。检查员既当裁判又替参赛者补答案，审计链很快会变成团建活动。&lt;/p&gt;
&lt;h2 id="第六步没有停止规则团队会循环或假装完成"&gt;第六步：没有停止规则，团队会循环或假装完成
&lt;/h2&gt;&lt;p&gt;Stop rules 需要同时覆盖两类失败：系统不断把同一个任务踢来踢去，以及证据不足时提前宣布完成。&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;STOP RULES
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Stop the current chain and return BLOCKED when:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. The same task_id returns to the same Bot without new evidence.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. A required source, artifact, permission, or account is unavailable.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Two sources or Bots conflict on a claim that changes the deliverable.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. The next step requires sending, publishing, deleting, purchasing,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; or changing a production system without explicit approval.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. A tool or action fails twice with no new diagnostic evidence.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6. The Checker cannot map a consequential claim to a verified source.
&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;When stopping, report:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- completed work
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- exact blocker and evidence
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- actions already attempted
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- the smallest human decision needed to continue
&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;Never replace BLOCKED with a plausible guess or a partial result labeled complete.
&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;上线前故意制造一次阻塞：给 Researcher 一个无法访问的来源，或者让 Writer 收到缺失 &lt;code&gt;unverified&lt;/code&gt; 字段的 HANDOFF。观察团队是否真的停下来，并准确说出缺什么。&lt;/p&gt;
&lt;p&gt;没有见过团队正确停止，就不能说明停止规则有效。刹车测试这件事，汽车行业早就想明白了，Agent 团队也不必重新发明一次撞墙。&lt;/p&gt;
&lt;h2 id="多个-bot-不是多个权限边界"&gt;多个 Bot 不是多个权限边界
&lt;/h2&gt;&lt;p&gt;原帖提醒“组织架构不等于安全隔离”，官方文档给出了更明确的技术原因：同一用户的 Grok Bots 共享一台持久云电脑，也共享其中的文件、浏览器会话和登录状态。&lt;a class="link" href="https://docs.x.ai/grok-bot/teams-and-enterprises" target="_blank" rel="noopener"
 &gt;xAI 的团队与企业文档&lt;/a&gt; 建议把电脑中的登录和文件视为该用户所有 Bots 都可能访问。&lt;/p&gt;
&lt;p&gt;因此，权限设计至少要做到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在每个 Bot description 中写明持久的审批边界。&lt;/li&gt;
&lt;li&gt;发送、发布、删除、购买和生产变更保留人工批准。&lt;/li&gt;
&lt;li&gt;只登录任务需要的账号，优先使用作用域更小的服务账号。&lt;/li&gt;
&lt;li&gt;不再需要的账号及时退出，敏感临时文件在任务结束后清理。&lt;/li&gt;
&lt;li&gt;真正需要独立电脑和凭据集的工作负载，使用独立用户，而不是再创建一个 Bot。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;官方也说明，Bot 默认只能使用用户或团队授予的账号和插件，敏感操作可进入审批。但 description 是行为规则，不是操作系统级沙箱。把“禁止发布”写进提示词很有必要，同时仍要让发布动作经过真实审批。&lt;/p&gt;
&lt;p&gt;&lt;img alt="多个 Grok Bots 共享同一台云电脑和登录态" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1080" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/grok-bot-handoffs/shared-computer-boundary.webp" srcset="https://guige.ai/p/grok-bot-handoffs/shared-computer-boundary_hu_82aad9eae715a0ee.webp 800w, https://guige.ai/p/grok-bot-handoffs/shared-computer-boundary_hu_99d14bbe1e8be558.webp 1600w, https://guige.ai/p/grok-bot-handoffs/shared-computer-boundary.webp 1919w" width="1919"&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;th&gt;先改什么&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Writer 把未核实信息写成事实&lt;/td&gt;
 &lt;td&gt;HANDOFF 没有 &lt;code&gt;unverified&lt;/code&gt;，或接收方忽略它&lt;/td&gt;
 &lt;td&gt;强制字段完整性检查；Checker 逐条对源&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Coordinator 自己开始写稿&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;同一输出被并行派给多个 owner&lt;/td&gt;
 &lt;td&gt;每阶段只设一个 owner；并行只用于独立输入&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Bot 反复互相转交&lt;/td&gt;
 &lt;td&gt;没有 task ID、停止条件或重试上限&lt;/td&gt;
 &lt;td&gt;同一 task 回到同一 Bot 时要求新证据，否则 BLOCKED&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;人直接私聊 Specialist 后，主链状态错乱&lt;/td&gt;
 &lt;td&gt;Coordinator 不知道任务被改过&lt;/td&gt;
 &lt;td&gt;中途变更统一发给 Coordinator，或明确重开任务&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;以为不同 Bot 看不到彼此的登录&lt;/td&gt;
 &lt;td&gt;把角色边界误当成计算隔离&lt;/td&gt;
 &lt;td&gt;按共享电脑设计账号、文件和审批策略&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="一次完整验收应该看到什么"&gt;一次完整验收应该看到什么
&lt;/h2&gt;&lt;p&gt;在增加第四个 Bot 或把流程保存成长期 Skill 前，至少完成三次不同输入的演练，并核对下面这些结果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Coordinator 能随时列出 owner、任务、状态和 blocker。&lt;/li&gt;
&lt;li&gt;每次交接只有结果与证据，没有几千字工作过程。&lt;/li&gt;
&lt;li&gt;Writer 从未把 &lt;code&gt;unverified&lt;/code&gt; 或 &lt;code&gt;skipped&lt;/code&gt; 内容写成已确认事实。&lt;/li&gt;
&lt;li&gt;Checker 能把关键断言映射回来源，并阻止一次故意植入的无来源断言。&lt;/li&gt;
&lt;li&gt;团队能在缺少来源、权限或审批时返回 &lt;code&gt;BLOCKED&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;群聊里可以追溯两次交接，最终只产生一个交付包。&lt;/li&gt;
&lt;li&gt;所有外部动作仍停在人工审批之前。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;原帖建议三 Bot 链干净运行三次后再增加第四个 Bot。这里“干净”的含义不该只是最后有一篇文章，而是交接字段完整、证据没有变形、阻塞能被发现、最终出口只有一个。&lt;/p&gt;
&lt;h2 id="先把门缝补好再招聘第五个-bot"&gt;先把门缝补好，再招聘第五个 Bot
&lt;/h2&gt;&lt;p&gt;多 Agent 系统很容易给人一种组织已经成形的错觉：角色有名字、群聊会滚动、每个 Bot 都在输出。但真正决定结果能不能抵达终点的，是那些没那么热闹的接口。&lt;/p&gt;
&lt;p&gt;从三个角色开始。让协调员只负责协调，让 Researcher 明确写出未验证项，让 Writer 只消费已验证材料，让 Checker 有权阻塞。固定 HANDOFF，提前写冲突规则，亲手触发一次停止条件，再把它们放进群聊。&lt;/p&gt;
&lt;p&gt;如果三个人、两次交接都跑不稳，第五个 Bot 通常不是解决方案。它只是又增加了一道门缝。&lt;/p&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://x.com/zodchiii/status/2094358429913784551" target="_blank" rel="noopener"
 &gt;darkzodchi：How to Build a Team of AI Agents That Work Together in Grok Bot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.x.ai/grok-bot/chat-and-collaboration" target="_blank" rel="noopener"
 &gt;xAI Docs：Message and collaborate&lt;/a&gt;，核对日期 2026-09-08&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.x.ai/grok-bot/bots" target="_blank" rel="noopener"
 &gt;xAI Docs：Create and manage Bots&lt;/a&gt;，核对日期 2026-09-08&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.x.ai/grok-bot/faq" target="_blank" rel="noopener"
 &gt;xAI Docs：Frequently asked questions&lt;/a&gt;，核对日期 2026-09-08&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.x.ai/grok-bot/teams-and-enterprises" target="_blank" rel="noopener"
 &gt;xAI Docs：Grok Bot for teams and enterprises&lt;/a&gt;，核对日期 2026-09-08&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Skill 越多，Agent 为什么越容易犯选择困难？</title><link>https://guige.ai/p/skills-are-not-memory/</link><pubDate>Wed, 19 Aug 2026 00:00:00 +0000</pubDate><guid>https://guige.ai/p/skills-are-not-memory/</guid><description>&lt;img src="https://guige.ai/" alt="Featured image of post Skill 越多，Agent 为什么越容易犯选择困难？" /&gt;&lt;p&gt;不知道大家Vibe Coding时间久了以后会不会碰到这样的问题: 学习和使用了不少有用的skill, 自己的skill库越来越丰富, 但 Skill 库越攒越多，Agent 反而偶尔开始犯一种很熟悉的病：&lt;strong&gt;选择困难症。&lt;/strong&gt; 有些问题, 这个skill能处理, 那个也能搞定, 但又都不是完美匹配当前场景的. 导致同一个问题, 多次解决路径居然不一致, 带来的结果和周边影响也不一样.&lt;/p&gt;
&lt;p&gt;AI跟人一样, 对一些问题有多条解决路径选择时。就跟鬼哥看到“干炒牛河、辣椒炒肉、小炒黄牛肉、湖南米粉”同时出现在菜单上，脑子就直接进入一个 &lt;code&gt;Infinity Loop&lt;/code&gt; 循环, 这顿饭都没力气吃下去了。Agent 面前如果同时摆着几十份名字相近、边界暧昧的 Skill，情况大致相同，只是它不会叹气，而是更认真地读错几份文件。&lt;/p&gt;
&lt;p&gt;鬼哥昨天读到一篇新论文 &lt;a class="link" href="https://arxiv.org/pdf/2608.14036" target="_blank" rel="noopener"
 &gt;&lt;em&gt;Demystifying Agent Skills: Why They Work—Until They Don’t&lt;/em&gt;&lt;/a&gt; 恰好把这个问题拆开了。它问的不是“Skill 有没有用”，而是更麻烦也更有价值的问题：&lt;strong&gt;它什么时候帮忙、为什么帮忙、又从哪里开始添乱？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;论文的答案很克制：Skill 确实有效，但它最主要的作用不是给 Agent 多塞一点知识，而是把过去混乱的经验压缩成一根可执行的“程序锚点”。问题也在这里：锚点一旦抛错地方，船就会稳稳地停在错误的位置。&lt;/p&gt;
&lt;p&gt;&lt;img alt="一张菜单式的 Agent Skill 库，多个相似选项让 Agent 在选择循环中犹豫" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/skills-are-not-memory/cover.webp" srcset="https://guige.ai/p/skills-are-not-memory/cover_hu_b48826964b622baf.webp 800w, https://guige.ai/p/skills-are-not-memory/cover.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="skill-不是经验文档而是经验的蒸馏"&gt;Skill 不是“经验文档”，而是经验的蒸馏
&lt;/h2&gt;&lt;p&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;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Raw&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;Workflow Memory&lt;/td&gt;
 &lt;td&gt;清洗过的历史流程&lt;/td&gt;
 &lt;td&gt;仍夹带失败分支、偶然细节和冗长探索&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Skill&lt;/td&gt;
 &lt;td&gt;从同一批流程蒸馏出的 &lt;code&gt;SKILL.md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;需要判断是否适用、如何适配&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这个对照很关键。Skill 和 Workflow Memory 来自&lt;strong&gt;同一批成功与失败轨迹&lt;/strong&gt;，所以它们的差异不能简单归因于“前者知道得更多”。&lt;/p&gt;
&lt;p&gt;在匹配比较里，Skill 的成功率为 &lt;strong&gt;61.9%&lt;/strong&gt;，Raw 为 &lt;strong&gt;59.1%&lt;/strong&gt;，Workflow Memory 为 &lt;strong&gt;55.9%&lt;/strong&gt;；Skill 相比 Workflow Memory 的增益为 &lt;strong&gt;6.06 个百分点&lt;/strong&gt;，95% bootstrap 置信区间为 &lt;strong&gt;+0.76 到 +11.36&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;更有意思的是，研究者逐条分析 Agent 轨迹后发现：Skill 有效的案例里，&lt;strong&gt;65.7%&lt;/strong&gt; 是因为它提供了程序锚点——步骤顺序、工具调用、检查点、验证方案、常见坑；只有 &lt;strong&gt;4.5%&lt;/strong&gt; 是因为它补充了 Agent 原本不知道的事实。&lt;/p&gt;
&lt;p&gt;这和很多人的直觉相反。我们写 Skill 时常想“把知识写全一点”，但真正有价值的，往往是让 Agent 在关键时刻不忘记：先启动什么、再检查什么、哪种输出不算完成、踩坑后怎样退回来。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Skill 最大的作用，不是替 Agent 多记一条知识，而是在关键步骤上少忘一件事。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="同一批混乱的执行轨迹被蒸馏为简洁的步骤、检查点和风险提示，对比原始 Workflow Memory" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/skills-are-not-memory/skills-as-procedural-anchors.webp" srcset="https://guige.ai/p/skills-are-not-memory/skills-as-procedural-anchors_hu_bfb47188649e5acb.webp 800w, https://guige.ai/p/skills-are-not-memory/skills-as-procedural-anchors.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="它最擅长修的是会做但总忘的问题"&gt;它最擅长修的，是“会做但总忘”的问题
&lt;/h2&gt;&lt;p&gt;论文里的细分结果很像所有做过 Agent 工程的人见过的事故单：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;环境或基础设施失败：从 Raw 的 &lt;strong&gt;5.3%&lt;/strong&gt; 降到 Skill 的 &lt;strong&gt;0.2%&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;输出格式或 schema 不匹配：从 &lt;strong&gt;7.4%&lt;/strong&gt; 降到 &lt;strong&gt;3.2%&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;后台服务生命周期失败：从 &lt;strong&gt;2.7%&lt;/strong&gt; 降到 &lt;strong&gt;0.8%&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些不是深奥推理题。它们更多是执行纪律问题：路径没记住、服务没确认、schema 没校验、命令没按正确顺序跑。&lt;/p&gt;
&lt;p&gt;所以一个好的 Skill，应该像一位靠谱但不啰嗦的值班同事：它不替你决定产品要不要做，却会在你准备发布前提醒“配置读了吗？”“服务起来了吗？”“返回值真符合接口吗？”&lt;/p&gt;
&lt;p&gt;但别因此高估它。算法逻辑错误在 Skill 条件下仍有 &lt;strong&gt;7.4%&lt;/strong&gt;，只做静态检查、没有真正运行验证的失败仍有 &lt;strong&gt;11.7%&lt;/strong&gt;。Skill 能稳住执行，不能替人重新定义一个理解错了的问题。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="skill-的反噬它会让错误的假设更有执行力"&gt;Skill 的反噬：它会让错误的假设更有执行力
&lt;/h2&gt;&lt;p&gt;Skill 不是自动执行的。Agent 必须先判断它是否相关，再决定跟到什么程度，还得在当前环境里修改它。&lt;/p&gt;
&lt;p&gt;这一步一旦偷懒，Skill 就从经验变成了惯性。论文中，&lt;code&gt;skill_guidance_misapplied_or_ignored&lt;/code&gt; 在 Skill 组里占 &lt;strong&gt;10.0%&lt;/strong&gt;，而 Raw 是 &lt;strong&gt;0.8%&lt;/strong&gt;、Workflow Memory 是 &lt;strong&gt;0.4%&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这不是说 Skill 内容一定不好。更常见的情况是：旧任务和新任务看起来像，但一个前提已经变了；Agent 拿着一份“通常正确”的流程，顺手把它套到“不再通常”的场景上。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一个没有退出条件的 Skill，是把经验固化成偏见的最快方式。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这也是为什么我现在更在意 Skill 里有没有下面四块，而不是它写了多少页：&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;/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 class="gu"&gt;## 适用前提
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&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="gu"&gt;## 执行路径
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&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="gu"&gt;## 验证标准
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&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="gu"&gt;## 退出与升级
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&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;/p&gt;
&lt;p&gt;&lt;img alt="一份好的 Skill 像程序合同：适用前提、执行路径、验证标准、退出与升级四个模块" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/skills-are-not-memory/skill-contract.webp" srcset="https://guige.ai/p/skills-are-not-memory/skill-contract_hu_99942d94b0f46d0b.webp 800w, https://guige.ai/p/skills-are-not-memory/skill-contract.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="skill-库越大难的不是保存而是选择和适配"&gt;Skill 库越大，难的不是保存，而是选择和适配
&lt;/h2&gt;&lt;p&gt;论文专门测了这个问题。候选 Skill 池从 5 个增加到 100 个时，Agent 在真实执行里实际使用 ground-truth Skill 的精确率，平均从 &lt;strong&gt;29.6%&lt;/strong&gt; 掉到 &lt;strong&gt;3.3%&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;但下游任务成功率却没有同步崩掉，只从 &lt;strong&gt;36.4%&lt;/strong&gt; 变到 &lt;strong&gt;39.3%&lt;/strong&gt;。原因并不神秘：Agent 可能看了多份相近 Skill；其中某份并非标注的“唯一正确答案”，却依然给了有用的操作线索。反过来，即使它选中了 ground-truth Skill，也仍可能在执行、适配或验证环节失败。&lt;/p&gt;
&lt;p&gt;论文由此给出一个很重要的结论：&lt;strong&gt;精确调用标注上的正确 Skill，既不是任务成功的充分条件，也不是必要条件。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这对个人开发者的含义是：别只用“检索命中了没有”衡量 Skill 库。更应该问：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;这份 Skill 的触发条件是否能和相邻 Skill 区分开？&lt;/li&gt;
&lt;li&gt;它能否解释自己为什么适用于当前任务？&lt;/li&gt;
&lt;li&gt;它的关键步骤能否被当前环境的 verifier 验证？&lt;/li&gt;
&lt;li&gt;当它与另一份 Skill 冲突时，Agent 知不知道该降级、组合还是停下来问？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Skill 库的瓶颈从来不是存储空间，而是选择和适配能力。菜单可以很长，但“都来一份”不是一个工程策略。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Skill 池从 5 到 100 时，离线检索与真实执行的差异：精确命中下降，但任务成功不等于同步下降" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/skills-are-not-memory/retrieval-is-not-success.webp" srcset="https://guige.ai/p/skills-are-not-memory/retrieval-is-not-success_hu_dc57f7ac653ab265.webp 800w, https://guige.ai/p/skills-are-not-memory/retrieval-is-not-success.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="失败轨迹别急着扔它们是-skill-的边界说明书"&gt;失败轨迹别急着扔，它们是 Skill 的边界说明书
&lt;/h2&gt;&lt;p&gt;研究者还做了一个很实用的消融：构建 Skill 时，保留或去掉历史轨迹的“成功/失败”标记。&lt;/p&gt;
&lt;p&gt;只有成功轨迹时，是否保留标记影响不大；一旦混入失败轨迹，结果标签就开始发挥作用。以 Gemini 在 Terminal-Bench-2 的 &lt;code&gt;3 成功 + 2 失败&lt;/code&gt; 轨迹组合为例：构建 Skill 时保留 outcome labels，成功率为 &lt;strong&gt;74.62%&lt;/strong&gt;；拿掉标签后，只有 &lt;strong&gt;40.00%&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这说明失败轨迹并不是应当删掉的脏东西。它告诉我们：哪一步看似合理却不通、什么条件一变流程就失效、最终验证为什么没有通过。&lt;/p&gt;
&lt;p&gt;当然，失败记录原封不动地塞回上下文也不行——Workflow Memory 的 timeout/budget exhaustion 达 &lt;strong&gt;10.6%&lt;/strong&gt;，而 Skill 为 &lt;strong&gt;4.4%&lt;/strong&gt;。正确做法不是保存更多过程，而是把失败蒸馏成可判断的边界：&lt;strong&gt;失败模式、触发条件、检查办法、替代路径。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="给个人开发者的一条-skill-维护规则"&gt;给个人开发者的一条 Skill 维护规则
&lt;/h2&gt;&lt;p&gt;如果你正在维护自己的 Skill 库，我建议不要从“再写一份新的”开始，而是从每次真实任务结束后的四个问题开始：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;这次 Agent 反复犯的，究竟是知识缺口，还是执行步骤遗漏？&lt;/li&gt;
&lt;li&gt;哪一步可以写成稳定的前提、动作和 verifier？&lt;/li&gt;
&lt;li&gt;哪个失败条件必须写进这份 Skill 的退出路径？&lt;/li&gt;
&lt;li&gt;它和已有 Skill 的边界是否足够清楚，还是只是在菜单上多加了一道相似的菜？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;若答案只是“我觉得这条 Prompt 很有用”，先别急着建库。让它在几个真实任务里活下来，再把它写成 Skill。&lt;/p&gt;
&lt;p&gt;这篇论文仍是一篇预印本，实验主要集中在终端与工具调用任务，覆盖的 Agent 框架和模型数量也有限；它不等于已经证明了所有网页 Agent 或开放式协作场景的规律。但它至少把一个常被忽略的问题说清了：Skill 的效果不是一次注入，而是一条生命周期——&lt;strong&gt;蒸馏、检索、调用、适配、验证。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;回到开头那张菜单。鬼哥并不需要把所有菜从菜单上划掉；我需要的是知道今天为什么点这道、吃到一半发现不对时能不能换，以及不要把“菜单很丰富”误当成“晚饭已经解决”。&lt;/p&gt;
&lt;p&gt;对 Agent 也是一样。&lt;/p&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Zhiyuan Jiang et al., &lt;a class="link" href="https://arxiv.org/pdf/2608.14036" target="_blank" rel="noopener"
 &gt;&lt;em&gt;Demystifying Agent Skills: Why They Work—Until They Don’t&lt;/em&gt;&lt;/a&gt;, arXiv:2608.14036, 2026.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>天下苦旧 MCP 久矣：Anthropic新MCP协议终于开始治病了</title><link>https://guige.ai/p/mcp-stateless-core/</link><pubDate>Wed, 29 Jul 2026 00:00:00 +0000</pubDate><guid>https://guige.ai/p/mcp-stateless-core/</guid><description>&lt;img src="https://guige.ai/" alt="Featured image of post 天下苦旧 MCP 久矣：Anthropic新MCP协议终于开始治病了" /&gt;&lt;p&gt;你们在公司里落地 MCP 时，是不是也碰到过这些尴尬？&lt;/p&gt;
&lt;p&gt;本地跑得丝滑，一上 Kubernetes、扩成两个实例，session 偶尔就找不到亲妈了；网关团队问“这次到底调用了哪个工具”，你只能指着一坨 POST 里的 JSON 说“答案在里面，请自行考古”；Agent 一遍遍调用 &lt;code&gt;tools/list&lt;/code&gt;，工具一个没变，token 和请求倒是烧得很稳定；高风险操作想让用户确认一下，结果业务问题还没解决，先和长连接、代理超时打了一架。&lt;/p&gt;
&lt;p&gt;鬼哥自己做 MCP 接入和应用时，这几种场面基本都见过。&lt;/p&gt;
&lt;p&gt;开发同学觉得协议能跑，平台同学觉得它不好扩，安全同学觉得它看不懂，运维同学觉得它需要特殊照顾。最后大家围着一条本来应该很普通的工具调用链，开出了联合国大会的气势。&lt;/p&gt;
&lt;p&gt;如果你也经历过，恭喜，我们算是对上暗号了：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;天下开发者，苦旧 MCP 久矣。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它不是不能用。恰恰相反，旧 MCP 特别擅长证明一件事：模型可以调用工具。&lt;/p&gt;
&lt;p&gt;但从“模型能调用工具”，到“公司敢让模型调用生产工具”，中间隔着负载均衡、网关、缓存、鉴权、审计、超时、扩容，以及安全团队那句永恒的灵魂拷问：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;出事了算谁的？&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="MCP 2026-07-28 从插件协议走向基础设施协议" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mcp-stateless-core/cover.webp" srcset="https://guige.ai/p/mcp-stateless-core/cover_hu_34f0676b8c03858e.webp 800w, https://guige.ai/p/mcp-stateless-core/cover.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;p&gt;2026 年 7 月 28 日，官方发布了新的 Model Context Protocol 规范：&lt;code&gt;2026-07-28&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;看完这版规范，鬼哥最大的感受只有一句：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;新的 MCP，终于开始像一个基础设施协议了。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这次不是往协议里再塞几个功能，而是把那些真正妨碍 MCP 进入公司生产环境的东西，一件件拆掉：协议核心无状态、请求可路由、列表可缓存、授权更严谨、长流程不再绑死长连接、扩展也有了正式边界。&lt;/p&gt;
&lt;p&gt;Anthropic 官方文档提到，Tier 1 SDK 每月下载量已经接近 5 亿，TypeScript 和 Python SDK 累计下载量都超过了 10 亿。生态跑到这个规模，再拿“demo 能跑”当成功标准，就多少有点不礼貌了。&lt;/p&gt;
&lt;p&gt;下面不照着 release note 念。鬼哥直接拿公司里碰到的场景，讲讲这次到底改掉了什么。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="两个实例一扩session-先迷路了"&gt;两个实例一扩，session 先迷路了
&lt;/h2&gt;&lt;p&gt;鬼哥在公司里接远程 MCP 时，最典型的尴尬就是：&lt;strong&gt;单实例一切正常，一横向扩容，问题开始玄学。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;旧版 MCP 在远程 HTTP 场景里，客户端先 &lt;code&gt;initialize&lt;/code&gt;，服务端给出 &lt;code&gt;Mcp-Session-Id&lt;/code&gt;，后续请求带着这个 session 继续走。&lt;/p&gt;
&lt;p&gt;开发环境只有一个实例，当然岁月静好。到了生产环境，前面挂上 load balancer，后面跑多个实例，请求第一次落到 Server A，第二次被分到 Server B，B 一脸茫然：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;你谁？&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;接下来无非几条路：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;配 sticky session，让同一个客户端尽量黏住同一个实例；&lt;/li&gt;
&lt;li&gt;搭共享 session store，让所有实例交换记忆；&lt;/li&gt;
&lt;li&gt;在服务间同步上下文；&lt;/li&gt;
&lt;li&gt;祈祷扩容、重启和故障转移时别出怪事。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;能做，当然都能做。但为了调用一个 tool，先给负载均衡器安排一段刻骨铭心的长期关系，这个工程成本明显不太对。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;2026-07-28&lt;/code&gt; 直接砍掉了这层协议会话：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;移除 &lt;code&gt;initialize&lt;/code&gt; / &lt;code&gt;initialized&lt;/code&gt; 交换；&lt;/li&gt;
&lt;li&gt;移除协议层 &lt;code&gt;Mcp-Session-Id&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;每个请求自己携带协议版本、客户端身份和能力；&lt;/li&gt;
&lt;li&gt;需要提前发现服务端能力时，可以调用可选的 &lt;code&gt;server/discover&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&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-text" data-lang="text"&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;先握手 → 拿 session → 请求必须找到“熟悉你的实例”
&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;请求自描述 → 任意实例都能处理 → 普通 round-robin 就能跑
&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;img alt="有状态 MCP 到无状态 MCP 的部署变化" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mcp-stateless-core/stateless-before-after.webp" srcset="https://guige.ai/p/mcp-stateless-core/stateless-before-after_hu_931b910630e27225.webp 800w, https://guige.ai/p/mcp-stateless-core/stateless-before-after.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;p&gt;改完之后，MCP server 才真正像一个普通 HTTP 服务：实例随便扩，坏了随便换，请求落到谁家谁处理。Kubernetes、serverless、API Gateway、WAF、rate limiter 和 observability 这些现成基础设施，不用再围着 MCP 单独学一套脾气。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一个协议如果要求负载均衡器记住你，说明它还没学会在公司里做人。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="状态可以有但别藏在桌子底下"&gt;状态可以有，但别藏在桌子底下
&lt;/h2&gt;&lt;p&gt;看到“无状态”，很多人会立刻问：那浏览器会话、代码沙箱、购物车和长任务上下文怎么办？&lt;/p&gt;
&lt;p&gt;鬼哥在公司做这类工具时也遇到过。比如 Agent 创建了一个代码工作区，后面还要继续执行命令、读取结果。状态显然不能丢。&lt;/p&gt;
&lt;p&gt;问题不在于“有没有状态”，而在于&lt;strong&gt;状态藏在哪里&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;旧方式把关键状态藏进 transport session。客户端和模型知道“连接还在”，却不一定看得见自己正在操作哪个工作区。连接断了、实例换了，业务上下文也容易跟着失忆。&lt;/p&gt;
&lt;p&gt;新方式更接近正常 API：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;create_workspace → 返回 workspace_id
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;run_command(workspace_id, command)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;read_result(workspace_id)
&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;服务端返回显式 handle，模型在后续 tool call 中把它作为参数传回来。&lt;/p&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;/td&gt;
 &lt;td&gt;状态依附于明确的业务 ID&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;模型看不见 session 里藏了什么&lt;/td&gt;
 &lt;td&gt;模型能读取和传递 &lt;code&gt;workspace_id&lt;/code&gt; / &lt;code&gt;task_id&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;断线恢复依赖原会话&lt;/td&gt;
 &lt;td&gt;换实例后仍可按 handle 继续&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;排查时先猜“会话怎么了”&lt;/td&gt;
 &lt;td&gt;日志里直接按业务 ID 追踪&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这不只是方便运维，也更适合 Agent 推理。模型看得见状态，才能引用状态、组合状态、接着做下一步。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;状态不是不能有，不能装神弄鬼。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="要用户点个确认没必要拿长连接祭天"&gt;要用户点个确认，没必要拿长连接祭天
&lt;/h2&gt;&lt;p&gt;公司里的 Agent 一旦能写数据，human-in-the-loop 就绕不过去。&lt;/p&gt;
&lt;p&gt;鬼哥碰到过的真实需求很普通：Agent 准备删除数据、修改配置、调用付费服务，执行前必须让用户确认。业务上就是一个“确定吗”，技术上却可能变成一条长时间挂着的双向流。&lt;/p&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;准备删除 3 条记录，确认吗？
&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;blockquote&gt;
 &lt;p&gt;不确认，我没了。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;MRTR，Multi Round-Trip Requests，解决的就是这个问题。它把中途交互拆成普通的多轮 request/response：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. Client 调用 tool
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. Server 返回 input_required
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Client 收集用户确认或补充参数
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. Client 带着 inputResponses 重试原调用
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. 任意 Server 实例继续处理
&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;img alt="MRTR 把中途确认改成多轮请求响应" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mcp-stateless-core/mrtr-flow.webp" srcset="https://guige.ai/p/mcp-stateless-core/mrtr-flow_hu_69dc483d528c6698.webp 800w, https://guige.ai/p/mcp-stateless-core/mrtr-flow.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;p&gt;这样一来，删除确认、参数追问、二次授权、用户选择，都不再要求服务端死守一条连接。请求可以暂停，可以恢复，可以重试，也可以由另一个实例接着处理。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;确认是业务流程，不该是连接保活挑战。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="网关终于能看懂你到底想干什么"&gt;网关终于能看懂：你到底想干什么
&lt;/h2&gt;&lt;p&gt;鬼哥把 MCP 接进公司网关时，还有一个非常现实的问题：&lt;strong&gt;所有请求看起来都差不多。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;安全团队想对删除类工具做更严格的授权，平台团队想给昂贵工具单独限流，运维想统计每个 tool 的错误率。结果网关看到的往往只是：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;POST /mcp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Content-Type: application/json
&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;tools/call&lt;/code&gt; 还是 &lt;code&gt;resources/read&lt;/code&gt;，调用的是 &lt;code&gt;search&lt;/code&gt; 还是 &lt;code&gt;delete_database&lt;/code&gt;，答案埋在 JSON-RPC body 里。&lt;/p&gt;
&lt;p&gt;过去网关看 MCP，就像保安看一群都戴着口罩、穿着同款外套的人：知道有人进来了，不知道进来的是谁。&lt;/p&gt;
&lt;p&gt;新规范要求 Streamable HTTP 请求带上 &lt;code&gt;Mcp-Method&lt;/code&gt; 和 &lt;code&gt;Mcp-Name&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;/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;Mcp-Method: tools/call
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Mcp-Name: search
&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;删除类 tool 单独审批&lt;/td&gt;
 &lt;td&gt;网关按 &lt;code&gt;Mcp-Name&lt;/code&gt; 匹配策略&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;搜索和写入使用不同限流&lt;/td&gt;
 &lt;td&gt;不解析 body，header 直接分流&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;按方法做权限控制&lt;/td&gt;
 &lt;td&gt;安全层读取 &lt;code&gt;Mcp-Method&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;统计各 tool 成本和错误率&lt;/td&gt;
 &lt;td&gt;观测系统直接按 header 分桶&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;对高风险调用做 WAF 规则&lt;/td&gt;
 &lt;td&gt;请求到应用前就能拦截&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这两个 header 看起来只是两行字符，实际上是 MCP 对企业世界的一次低头。&lt;/p&gt;
&lt;p&gt;而这次低头，很有必要。&lt;strong&gt;基础设施不怕你复杂，怕的是你什么都藏着不说。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="工具一个没变agent-为什么还要问十遍"&gt;工具一个没变，Agent 为什么还要问十遍
&lt;/h2&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;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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tools/list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tools/list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tools/list
&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;Agent 每推进几步，就重新确认一次“你有哪些工具”。服务端老老实实返回同一份列表，客户端老老实实重新处理，大家都很勤奋，只有账单不太开心。&lt;/p&gt;
&lt;p&gt;旧 MCP 对列表缓存缺少明确语义。客户端不知道这份 tool catalog 能信多久，也不知道应该按用户、租户还是全局缓存。最稳妥的办法只能是：再问一次。&lt;/p&gt;
&lt;p&gt;新规范让 &lt;code&gt;tools/list&lt;/code&gt;、&lt;code&gt;prompts/list&lt;/code&gt;、&lt;code&gt;resources/list&lt;/code&gt;、&lt;code&gt;resources/read&lt;/code&gt; 等响应可以携带：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ttlMs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cacheScope&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有了明确的有效期和作用域，客户端可以放心复用结果。同时，确定性的列表顺序也能让上游上下文更稳定，减少 prompt cache 因为一点无意义的顺序抖动而失效。&lt;/p&gt;
&lt;p&gt;&lt;img alt="MCP list 结果缓存减少重复工具发现" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mcp-stateless-core/cacheable-lists.webp" srcset="https://guige.ai/p/mcp-stateless-core/cacheable-lists_hu_52a6ef0289f5bf94.webp 800w, https://guige.ai/p/mcp-stateless-core/cacheable-lists.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;p&gt;前后的差别，不只是少几次网络请求：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;工具发现更快；&lt;/li&gt;
&lt;li&gt;token 消耗更低；&lt;/li&gt;
&lt;li&gt;tool catalog 在上下文里更稳定；&lt;/li&gt;
&lt;li&gt;多租户缓存边界更清楚；&lt;/li&gt;
&lt;li&gt;服务端不用反复回答同一道送分题。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;最贵的请求，不一定最复杂；也可能只是明知道答案没变，还要再问一遍。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="安全团队终于不只剩一句先别上"&gt;安全团队终于不只剩一句“先别上”
&lt;/h2&gt;&lt;p&gt;公司里接 MCP，真正耗时间的通常不是 tool schema，而是 authorization。&lt;/p&gt;
&lt;p&gt;鬼哥经历过类似的拉扯：开发侧已经把工具调用跑通了，接入企业身份系统时却开始连环追问：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这个 token 是谁签发的？&lt;/li&gt;
&lt;li&gt;Agent 代表哪个用户？&lt;/li&gt;
&lt;li&gt;credential 能不能被拿去另一个授权服务器使用？&lt;/li&gt;
&lt;li&gt;desktop / CLI 的 localhost redirect 怎么处理？&lt;/li&gt;
&lt;li&gt;出问题以后，能不能还原谁在什么时候调用了什么？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些问题一个都不酷，但任何一个答不清，安全团队都可以非常合理地说：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;很好，先别上。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;2026-07-28&lt;/code&gt; 对授权做了几项关键硬化：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;授权服务器应返回 &lt;code&gt;iss&lt;/code&gt;，客户端在换 code 前必须验证，避免 authorization-server mix-up；&lt;/li&gt;
&lt;li&gt;DCR 增加 &lt;code&gt;application_type&lt;/code&gt;，减少 desktop / CLI 的 localhost redirect 被误拒；&lt;/li&gt;
&lt;li&gt;client credential 与 issuer 绑定，不能跨授权服务器复用；&lt;/li&gt;
&lt;li&gt;Dynamic Client Registration 被弃用，方向转向 Client ID Metadata Documents；&lt;/li&gt;
&lt;li&gt;企业托管授权等能力进入正式 extensions 框架。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;改进后的重点，不是 OAuth 流程看起来更漂亮，而是信任关系终于更容易说清楚：谁签发、谁使用、代表谁、能用在哪、出了事怎么查。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;能调工具是 demo；知道谁以谁的名义调了什么，才是生产。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="出错以后别再让日志各说各话"&gt;出错以后，别再让日志各说各话
&lt;/h2&gt;&lt;p&gt;鬼哥在公司排查 Agent 调用链时，还有一种熟悉的痛苦：一次 tool call 穿过客户端、SDK、MCP server，再调用下游 API，报错后每一层都有日志，但没有一层承认彼此认识。&lt;/p&gt;
&lt;p&gt;客户端说请求失败，MCP server 说下游超时，下游系统说自己收到过一个调用。三份日志，三个 request ID，工程师只能靠时间戳和直觉玩连连看。&lt;/p&gt;
&lt;p&gt;新规范把 W3C Trace Context 在 &lt;code&gt;_meta&lt;/code&gt; 里的传播方式正式写清楚，固定了 &lt;code&gt;traceparent&lt;/code&gt;、&lt;code&gt;tracestate&lt;/code&gt; 和 &lt;code&gt;baggage&lt;/code&gt; 的 key。这样，一条从 Agent 发起的调用，可以穿过客户端 SDK、MCP server 和下游服务，最终在兼容 OpenTelemetry 的系统里串成同一棵 span tree。&lt;/p&gt;
&lt;p&gt;改进前，问题是“这三条日志是不是一家人”；改进后，至少可以沿着一个 trace 看到请求在哪一层慢、在哪一层错、又是谁重试了几次。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;没有 trace 的 Agent 调用链，出了问题以后就不是排障，是刑侦。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="长任务别再假装自己是一次-tool-call"&gt;长任务别再假装自己是一次 tool call
&lt;/h2&gt;&lt;p&gt;鬼哥在公司做 Agent 流程时，批量处理、生成报告、扫描代码、部署环境这类任务很常见。它们可能跑几分钟，甚至更久。&lt;/p&gt;
&lt;p&gt;硬把这种工作塞进一次 tool call，体验通常是：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Client：还活着吗？
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Server：在跑。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Client：跑哪了？
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Server：你先别断。
&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;新规范把 Tasks 从 experimental core 移到 &lt;code&gt;io.modelcontextprotocol/tasks&lt;/code&gt; extension，并提供：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;poll-based &lt;code&gt;tasks/get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tasks/update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;通过 &lt;code&gt;subscriptions/listen&lt;/code&gt; 订阅通知&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这意味着长任务可以有明确身份、状态和更新机制，不需要伪装成一条永远不结束的普通请求。&lt;/p&gt;
&lt;p&gt;更重要的是，MCP 正式确立了 extensions 框架。新能力可以先在扩展中演进，成熟后再决定是否进入核心，core 则保持小而稳定。&lt;/p&gt;
&lt;p&gt;同时，新规范给出至少 12 个月的弃用窗口。Roots、Sampling、Logging 和 legacy HTTP+SSE transport 被标记为 deprecated，但不会第二天突然断气。&lt;/p&gt;
&lt;p&gt;这才是一个成熟协议该有的演进方式：能往前走，也不半夜掀生产系统的桌子。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心协议不是收纳箱。什么都往里塞，最后就只剩下“核心”两个字比较轻。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="这次升级公司团队该检查什么"&gt;这次升级，公司团队该检查什么
&lt;/h2&gt;&lt;p&gt;官方表示，TypeScript、Python、Go、C# 四个 Tier 1 SDK 已经支持 &lt;code&gt;2026-07-28&lt;/code&gt;，Rust SDK 也有 beta 支持。&lt;/p&gt;
&lt;p&gt;如果你在公司维护远程 MCP server，别只看完 release note 点个赞。建议直接拉开发、平台和安全团队过一遍下面这张表：&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;/td&gt;
 &lt;td&gt;是否支持 &lt;code&gt;2026-07-28&lt;/code&gt;？旧客户端如何降级？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;session 依赖&lt;/td&gt;
 &lt;td&gt;是否依赖 &lt;code&gt;Mcp-Session-Id&lt;/code&gt;、sticky session 或共享会话存储？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;状态句柄&lt;/td&gt;
 &lt;td&gt;跨调用状态能否改成显式 &lt;code&gt;task_id&lt;/code&gt; / &lt;code&gt;workspace_id&lt;/code&gt;？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;网关路由&lt;/td&gt;
 &lt;td&gt;能否利用 &lt;code&gt;Mcp-Method&lt;/code&gt; / &lt;code&gt;Mcp-Name&lt;/code&gt; 做限流、鉴权和观测？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;list 缓存&lt;/td&gt;
 &lt;td&gt;工具、资源和 prompt 列表能否提供稳定顺序与缓存提示？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MRTR&lt;/td&gt;
 &lt;td&gt;用户确认、补参数和二次授权能否改成 input-required / retry？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Auth&lt;/td&gt;
 &lt;td&gt;issuer 校验、credential 绑定和 DCR 迁移是否有计划？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;链路追踪&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;traceparent&lt;/code&gt; / &lt;code&gt;tracestate&lt;/code&gt; / &lt;code&gt;baggage&lt;/code&gt; 能否贯穿调用链？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;长任务与弃用项&lt;/td&gt;
 &lt;td&gt;是否应迁移到 Tasks extension？是否还依赖旧能力？&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt="MCP 2026-07-28 迁移检查清单" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/mcp-stateless-core/migration-checklist.webp" srcset="https://guige.ai/p/mcp-stateless-core/migration-checklist_hu_9df446cc227ef07e.webp 800w, https://guige.ai/p/mcp-stateless-core/migration-checklist.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;p&gt;这一版真正拉开的，不再是谁能多暴露几个 tools，而是谁的 MCP server 能做到：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stateless
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;routable
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cacheable
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;observable
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;governable
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;extensible
&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;过去我们评价一个 MCP server，常问的是：&lt;strong&gt;它能不能用？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;接下来公司真正会问的是：&lt;strong&gt;它能不能扩，能不能管，能不能查，出了事能不能解释？&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="最后mcp-开始进入真正的淘汰赛"&gt;最后：MCP 开始进入真正的淘汰赛
&lt;/h2&gt;&lt;p&gt;过去一年，MCP 的第一阶段是“万物皆可接”：数据库、浏览器、GitHub、Slack、Figma、云服务、公司内部系统，先把工具接进来再说。&lt;/p&gt;
&lt;p&gt;这个阶段很热闹，也很重要。&lt;/p&gt;
&lt;p&gt;但工具数量决定的是 demo 看起来有多丰富，基础设施能力决定的是公司敢不敢把它留在生产环境。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;2026-07-28&lt;/code&gt; 这版规范最有价值的地方，就是它终于开始正面处理那些不适合发布会截图、却每天折磨工程团队的问题：会话、扩容、路由、缓存、授权、长任务和协议演进。&lt;/p&gt;
&lt;p&gt;所以鬼哥的判断是：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MCP 的上半场，比的是谁接的工具多；下半场，比的是谁更像基础设施。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Agent 要真正进入公司，不缺会调用工具的 demo。&lt;/p&gt;
&lt;p&gt;缺的是一套能被负载均衡接住、被网关看懂、被安全系统治理、被运维团队放心扩容的协议。&lt;/p&gt;
&lt;p&gt;苦旧 MCP 久矣。&lt;/p&gt;
&lt;p&gt;这一次，新的 MCP 总算开始治病了。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.modelcontextprotocol.io/posts/2026-07-28/" target="_blank" rel="noopener"
 &gt;The 2026-07-28 Specification | Model Context Protocol Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/" target="_blank" rel="noopener"
 &gt;The 2026-07-28 MCP Specification Release Candidate | Model Context Protocol Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://modelcontextprotocol.io/" target="_blank" rel="noopener"
 &gt;Model Context Protocol Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>OKF：AI Agent 缺的不是模型，是可交接的上下文</title><link>https://guige.ai/p/open-knowledge-format/</link><pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate><guid>https://guige.ai/p/open-knowledge-format/</guid><description>&lt;img src="https://guige.ai/" alt="Featured image of post OKF：AI Agent 缺的不是模型，是可交接的上下文" /&gt;&lt;p&gt;AI Agent 最怕的不是模型不够强，而是它每次开工前，都像一个刚入职的新同事：&lt;strong&gt;不知道表在哪，不知道指标怎么算，也不知道谁脑子里藏着关键规则。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Google Cloud 最近发布的 Open Knowledge Format（OKF），表面上看只是一个“Markdown + YAML frontmatter”的小规范。&lt;/p&gt;
&lt;p&gt;但我觉得它真正值得关注的地方在于：它把 AI 时代最难交接的东西，重新变成了文件。&lt;/p&gt;
&lt;p&gt;&lt;img alt="OKF 把散落的企业知识整理成 AI Agent 可读取的上下文地图" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/open-knowledge-format/context-map.webp" srcset="https://guige.ai/p/open-knowledge-format/context-map_hu_a3aa6030697ea511.webp 800w, https://guige.ai/p/open-knowledge-format/context-map.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="问题不是没有知识而是知识没法交给-agent"&gt;问题不是没有知识，而是知识没法交给 Agent
&lt;/h2&gt;&lt;p&gt;今天大多数公司的知识并不少。&lt;/p&gt;
&lt;p&gt;表结构在数据目录里，指标定义在 BI 文档里，事故处理流程在 runbook 里，API 变更写在 release note 里，一些关键口径藏在老员工脑子里。&lt;/p&gt;
&lt;p&gt;问题是：这些知识对人来说都已经够散了，对 AI Agent 来说更是灾难。&lt;/p&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;怎么从事件流里计算 weekly active users？
&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;/li&gt;
&lt;li&gt;用户 ID 用哪个字段；&lt;/li&gt;
&lt;li&gt;bot 流量怎么排除；&lt;/li&gt;
&lt;li&gt;时区按 UTC 还是业务地区；&lt;/li&gt;
&lt;li&gt;老口径有没有废弃；&lt;/li&gt;
&lt;li&gt;这个指标和看板上的 WAU 是否一致；&lt;/li&gt;
&lt;li&gt;如果 join 用户表，应该走哪条路径。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些信息往往分布在不同系统里：metadata catalog、Notion、Google Drive、代码注释、SQL 文件、Slack 历史消息，甚至某个资深工程师的记忆里。&lt;/p&gt;
&lt;p&gt;所以，Agent 真正缺的不是“再聪明一点”。&lt;/p&gt;
&lt;p&gt;它缺的是一份能被读取、能被链接、能被版本管理、能被不同工具交接的 &lt;strong&gt;上下文资产&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="okf-是什么不是服务是格式"&gt;OKF 是什么：不是服务，是格式
&lt;/h2&gt;&lt;p&gt;Google Cloud 对 OKF 的定义很克制。&lt;/p&gt;
&lt;p&gt;OKF v0.1 把知识表示成一个目录，目录里是一组 Markdown 文件，每个文件都有 YAML frontmatter。它不要求新 runtime，不要求 SDK，不绑定某个云厂商，也不要求你把知识搬进一个新平台。&lt;/p&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;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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sales/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── index.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── datasets/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── index.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── orders_db.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── tables/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── index.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── orders.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── customers.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── metrics/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── index.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── weekly_active_users.md
&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;p&gt;文件路径就是这个概念的身份。&lt;/p&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;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;/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;type: BigQuery Table
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;title: Orders
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: One row per completed customer order.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;resource: https://console.cloud.google.com/bigquery/...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tags: [sales, revenue]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;timestamp: 2026-05-28T14:30:00Z
&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 class="gh"&gt;# Schema
&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;| Column | Type | Description |
&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="sb"&gt;`order_id`&lt;/span&gt; | STRING | Globally unique order identifier. |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| &lt;span class="sb"&gt;`customer_id`&lt;/span&gt; | STRING | FK to [&lt;span class="nt"&gt;customers&lt;/span&gt;](&lt;span class="na"&gt;/tables/customers.md&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="gh"&gt;# Joins
&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;Joined with [&lt;span class="nt"&gt;customers&lt;/span&gt;](&lt;span class="na"&gt;/tables/customers.md&lt;/span&gt;) on &lt;span class="sb"&gt;`customer_id`&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;OKF 的野心不在“文件格式很复杂”，恰恰相反，它的野心在于 &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;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Markdown&lt;/td&gt;
 &lt;td&gt;人能读，Agent 也能读&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;YAML frontmatter&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，能打包，能挂载，能同步&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Markdown 链接&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;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这就是 OKF 最有意思的地方：&lt;strong&gt;它不是想成为新的知识平台，而是想成为知识平台之间的交换格式。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="OKF bundle 的目录、frontmatter、markdown 链接三层结构" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/open-knowledge-format/okf-structure.webp" srcset="https://guige.ai/p/open-knowledge-format/okf-structure_hu_ad3a1d6d3f855640.webp 800w, https://guige.ai/p/open-knowledge-format/okf-structure.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="为什么是-markdown因为-agent-时代需要知识即代码"&gt;为什么是 Markdown？因为 Agent 时代需要“知识即代码”
&lt;/h2&gt;&lt;p&gt;这几年很多团队都在重新发现一个模式：LLM wiki。&lt;/p&gt;
&lt;p&gt;人类维护 wiki 很痛苦，因为我们会忘记更新链接，懒得补充引用，也不想每次改完一个文档还去同步另外 15 个文件。&lt;/p&gt;
&lt;p&gt;但这些事情恰好是 LLM 擅长的。&lt;/p&gt;
&lt;p&gt;它不会嫌整理 cross-reference 无聊，也不会因为要批量改十几个文件就开始摆烂。只要你给它一个清晰的文件结构、约束和审查机制，它可以把知识维护变成一个持续循环：&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;/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;发现新事实
&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;补充链接和引用
&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;提交 Pull Request
&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;Agent 下次直接读取更新后的上下文
&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;p&gt;代码为什么能长期演进？不是因为代码天然比文档高级，而是因为它有一套成熟的协作机制：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Git 记录历史；&lt;/li&gt;
&lt;li&gt;PR 承载讨论；&lt;/li&gt;
&lt;li&gt;diff 暴露变化；&lt;/li&gt;
&lt;li&gt;review 把关质量；&lt;/li&gt;
&lt;li&gt;CI 做基础校验；&lt;/li&gt;
&lt;li&gt;blame 能追溯责任。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OKF 想做的，是让企业知识也进入这套机制。&lt;/p&gt;
&lt;p&gt;不是再建一个“大家都不会更新”的知识库，而是让知识文件和代码、SQL、配置、runbook 一起被管理。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="okf-和-rag-的区别一个是切片一个是概念"&gt;OKF 和 RAG 的区别：一个是切片，一个是概念
&lt;/h2&gt;&lt;p&gt;很多人第一反应会是：这不就是 RAG 吗？&lt;/p&gt;
&lt;p&gt;不完全是。&lt;/p&gt;
&lt;p&gt;RAG 通常做的是：把文档切 chunk，做 embedding，查询时召回相关片段，再交给模型综合。&lt;/p&gt;
&lt;p&gt;OKF 更像是提前把知识整理成 &lt;strong&gt;概念级资产&lt;/strong&gt;。一个表、一个指标、一个 runbook、一个 API、一个 join path，都可以是独立概念。概念之间用 Markdown 链接互相指向。&lt;/p&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;RAG 常见做法&lt;/th&gt;
 &lt;th&gt;OKF 的思路&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;基本单位&lt;/td&gt;
 &lt;td&gt;文档切片 chunk&lt;/td&gt;
 &lt;td&gt;概念 concept&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;事先显式维护&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;可读性&lt;/td&gt;
 &lt;td&gt;主要给系统读&lt;/td&gt;
 &lt;td&gt;人和 Agent 都能读&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;版本管理&lt;/td&gt;
 &lt;td&gt;往往在索引外部&lt;/td&gt;
 &lt;td&gt;天然进 Git&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;适合场景&lt;/td&gt;
 &lt;td&gt;大规模检索&lt;/td&gt;
 &lt;td&gt;稳定知识、指标、 schema、runbook&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;RAG 像是让 Agent 在图书馆里临时找资料。&lt;/p&gt;
&lt;p&gt;OKF 像是给 Agent 一本经过整理、带目录、带交叉引用、能持续更新的工作手册。&lt;/p&gt;
&lt;p&gt;两者不是互斥关系。OKF bundle 完全可以被索引进 RAG 系统。但它的价值在于：进入索引之前，知识已经被整理成可审查、可迁移、可复用的形态。&lt;/p&gt;
&lt;p&gt;&lt;img alt="RAG chunk 与 OKF concept 的差异对比" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/open-knowledge-format/rag-vs-okf.webp" srcset="https://guige.ai/p/open-knowledge-format/rag-vs-okf_hu_2b3d08bef8fafdc6.webp 800w, https://guige.ai/p/open-knowledge-format/rag-vs-okf.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="okf-真正解决的是上下文交接成本"&gt;OKF 真正解决的是“上下文交接成本”
&lt;/h2&gt;&lt;p&gt;我觉得 OKF 的关键词不是 Markdown，也不是 YAML。&lt;/p&gt;
&lt;p&gt;它的关键词是：&lt;strong&gt;handoff&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;一个企业里最贵的成本，往往不是模型调用费，而是上下文交接费。&lt;/p&gt;
&lt;p&gt;新同事入职，要问一堆人。&lt;/p&gt;
&lt;p&gt;新 Agent 上线，要重新接一堆系统。&lt;/p&gt;
&lt;p&gt;换一个工具，要重新导出、清洗、适配。&lt;/p&gt;
&lt;p&gt;换一个供应商，原来的知识资产又被锁在对方的数据模型里。&lt;/p&gt;
&lt;p&gt;OKF 试图把这些上下文从“平台内资产”变成“文件资产”。&lt;/p&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;OKF 想推动的状态&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&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;Agent 依赖专用 SDK&lt;/td&gt;
 &lt;td&gt;Agent 直接读目录&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;更新走 PR 和 review&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;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这也是为什么 Google Cloud 在官方文章里反复强调：OKF 是 format，不是 platform。&lt;/p&gt;
&lt;p&gt;如果一个格式只能在某家云、某个数据库、某个 Agent 框架里跑，那它解决不了上下文迁移问题。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="databricks-和-snowflake-都很强但知识仍然不可复用"&gt;Databricks 和 Snowflake 都很强，但知识仍然不可复用
&lt;/h2&gt;&lt;p&gt;这里可以拿两个今天业界很强的产品来对照：Databricks Genie One 和 Snowflake Cortex Analyst。&lt;/p&gt;
&lt;p&gt;先说清楚：这两个方向都很顶。&lt;/p&gt;
&lt;p&gt;Databricks Genie One 的定位是面向业务团队的 AI coworker。它强调“grounded in your data”，能让业务用户提问、拿到上下文相关的答案，并进一步把洞察转成 action、agent 或 app。它背后的 Genie Ontology 被 Databricks 描述为一个持续改进、自动推断的业务术语、实体和 KPI 知识图谱，用来支撑 Genie 的回答和动作。Databricks 文档里的 Genie Spaces，也明确要求数据分析师用 Unity Catalog 数据集、示例 SQL、业务语义表达式和组织术语说明来 curate 一个 domain-specific 的问答空间。&lt;/p&gt;
&lt;p&gt;Snowflake Cortex Analyst 也在解决同一个核心问题：业务用户用自然语言问数据问题，但数据库 schema 本身不足以告诉模型“业务到底是什么意思”。所以 Cortex Analyst 依赖 semantic model / Semantic Views，把业务实体、维度、事实、指标、表关系、verified queries 等语义信息显式建出来。Snowflake 官方文档也明确说，semantic model 是用来弥合 business users 和 database 之间的差距。&lt;/p&gt;
&lt;p&gt;这两套东西都不是玩具。&lt;/p&gt;
&lt;p&gt;它们代表了企业数据 AI 的一个共识：&lt;strong&gt;自然语言问数想要靠谱，必须有业务语义层。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;但问题也在这里。&lt;/p&gt;
&lt;p&gt;如果你的团队在 Databricks 里花了很多时间维护 Genie Space、Genie Ontology、Unity Catalog Semantics；同时另一个团队在 Snowflake 里维护 Semantic Views、Cortex Analyst semantic model、verified queries，那么这些业务知识很难天然复用。&lt;/p&gt;
&lt;p&gt;不是因为 Databricks 或 Snowflake 做得不好。&lt;/p&gt;
&lt;p&gt;恰恰相反，是因为它们都做得太完整了：语义层、权限、执行引擎、治理、Agent 体验，都和自家平台深度耦合。&lt;/p&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;在 Databricks 里&lt;/th&gt;
 &lt;th&gt;在 Snowflake 里&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;Genie / Unity Catalog 语义体系&lt;/td&gt;
 &lt;td&gt;Semantic Views / semantic model&lt;/td&gt;
 &lt;td&gt;需要重新映射&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;表关系&lt;/td&gt;
 &lt;td&gt;Databricks 平台上下文&lt;/td&gt;
 &lt;td&gt;Snowflake semantic layer&lt;/td&gt;
 &lt;td&gt;不能直接通用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Verified queries&lt;/td&gt;
 &lt;td&gt;Genie Space 示例和验证&lt;/td&gt;
 &lt;td&gt;Cortex Analyst verified queries&lt;/td&gt;
 &lt;td&gt;格式不同&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;业务术语&lt;/td&gt;
 &lt;td&gt;Genie Ontology&lt;/td&gt;
 &lt;td&gt;Semantic View definitions&lt;/td&gt;
 &lt;td&gt;各自维护&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Agent 行为&lt;/td&gt;
 &lt;td&gt;Genie Agents / apps&lt;/td&gt;
 &lt;td&gt;Cortex Analyst API / apps&lt;/td&gt;
 &lt;td&gt;体验绑定平台&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;对企业来说，选择 Databricks 或 Snowflake 当然都可以。&lt;/p&gt;
&lt;p&gt;真正麻烦的是：&lt;strong&gt;一旦业务语义被写进某个平台的私有结构里，它就很难成为企业自己的可迁移资产。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;今天你可能还在二选一。&lt;/p&gt;
&lt;p&gt;明天你可能是多云、多仓、多团队并存；有的团队在 Databricks，有的团队在 Snowflake，有的知识还在 Obsidian、Notion、dbt repo、GitHub、Confluence 里。&lt;/p&gt;
&lt;p&gt;这时候 OKF 的价值就出来了。&lt;/p&gt;
&lt;p&gt;OKF 不试图取代 Databricks Genie，也不试图取代 Snowflake Cortex。它更像一个中间层协议：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Databricks Genie / Unity Catalog
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ export / sync
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; OKF bundle
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↑ import / consume
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Snowflake Cortex / Semantic Views
&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;理想情况下，企业可以把最核心的业务知识沉淀成 OKF bundle：指标定义、表关系、术语、runbook、verified query、历史变更、负责人、引用来源。&lt;/p&gt;
&lt;p&gt;然后 Databricks 可以读它，Snowflake 可以读它，内部 Agent 可以读它，未来换一个新的数据平台也能读它。&lt;/p&gt;
&lt;p&gt;这样，平台仍然可以竞争体验、性能、治理和执行引擎。&lt;/p&gt;
&lt;p&gt;但业务知识本身，不再被锁死在某一个平台里。&lt;/p&gt;
&lt;p&gt;这才是 OKF 最值得期待的地方：&lt;strong&gt;它让企业有机会把“语义层”从平台能力，升级成自己的知识资产。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Databricks Genie 和 Snowflake Cortex 各自强大，但 OKF 让业务语义有机会跨平台复用" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/open-knowledge-format/platform-semantics.webp" srcset="https://guige.ai/p/open-knowledge-format/platform-semantics_hu_f66177ccb2ac1269.webp 800w, https://guige.ai/p/open-knowledge-format/platform-semantics.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="它现在还很早但方向很对"&gt;它现在还很早，但方向很对
&lt;/h2&gt;&lt;p&gt;OKF 目前是 v0.1。&lt;/p&gt;
&lt;p&gt;Google Cloud 同时发布了几个参考实现：一个 BigQuery enrichment agent，一个静态 HTML visualizer，以及 GA4、Stack Overflow、Bitcoin public dataset 等 sample bundles。Google Cloud 的 Knowledge Catalog 也已经支持 ingest OKF 并服务给自家 Agent。&lt;/p&gt;
&lt;p&gt;这说明它已经不只是一个 PDF 规范，而是有了可跑的 producer、consumer 和样例。&lt;/p&gt;
&lt;p&gt;但我们也要清醒：OKF 还不是事实标准。&lt;/p&gt;
&lt;p&gt;它接下来要面对的问题不少：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;各家 catalog 和 wiki 是否愿意导出 OKF；&lt;/li&gt;
&lt;li&gt;企业内部是否愿意把知识当代码维护；&lt;/li&gt;
&lt;li&gt;frontmatter 字段会不会逐渐膨胀；&lt;/li&gt;
&lt;li&gt;权限、隐私、敏感信息如何和文件分发兼容；&lt;/li&gt;
&lt;li&gt;Agent 自动更新知识时，怎样保证审查和可信度；&lt;/li&gt;
&lt;li&gt;不同行业的概念模型能否在“最小约束”下保持互操作。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以，OKF 不是答案的终点。&lt;/p&gt;
&lt;p&gt;但它至少指出了一个很重要的方向：&lt;strong&gt;Agent 的能力边界，不只取决于模型，也取决于知识能不能被规范地交给它。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="OKF 从 v0.1 走向企业知识交换标准的演进路线" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/open-knowledge-format/okf-roadmap.webp" srcset="https://guige.ai/p/open-knowledge-format/okf-roadmap_hu_ed2fdbe0b487c563.webp 800w, https://guige.ai/p/open-knowledge-format/okf-roadmap.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="我们可以怎么用"&gt;我们可以怎么用？
&lt;/h2&gt;&lt;p&gt;如果你在团队里做 AI Agent、数据平台、知识库、内部工具，我建议不要急着问“要不要全面采用 OKF”。&lt;/p&gt;
&lt;p&gt;更实际的做法是：先挑一个小场景试。&lt;/p&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;/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;把一个核心指标做成 OKF bundle：
&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;metrics/weekly_active_users.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tables/events.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tables/users.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;runbooks/data-quality-check.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;references/product-definition.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;log.md
&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;然后让 Agent 基于这些文件回答问题、生成 SQL、检查口径、解释异常。&lt;/p&gt;
&lt;p&gt;你很快就会发现：真正困难的不是写 Markdown，而是把团队脑子里的隐性知识显性化。&lt;/p&gt;
&lt;p&gt;这也是 OKF 最有价值的地方。&lt;/p&gt;
&lt;p&gt;它逼你回答：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;我们的核心概念到底有哪些？&lt;/li&gt;
&lt;li&gt;每个概念的权威定义在哪里？&lt;/li&gt;
&lt;li&gt;哪些链接关系必须显式维护？&lt;/li&gt;
&lt;li&gt;哪些知识应该进版本控制？&lt;/li&gt;
&lt;li&gt;哪些更新必须经过人类 review？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些问题，本来就是企业做 AI Agent 绕不开的问题。&lt;/p&gt;
&lt;p&gt;OKF 只是给了一个足够朴素、足够可落地的容器。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="takeaway先别急着堆-agent先整理上下文"&gt;Takeaway：先别急着堆 Agent，先整理上下文
&lt;/h2&gt;&lt;p&gt;如果只记住一句话，我希望是这句：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI Agent 的下一场竞争，不只是模型能力，而是上下文工程。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;模型会越来越强，工具调用会越来越顺，multi-agent 框架也会越来越多。&lt;/p&gt;
&lt;p&gt;但真正能让 Agent 在企业里稳定工作的，往往是那些看起来不性感的东西：指标定义、表关系、runbook、决策记录、历史变更、权限边界、业务口径。&lt;/p&gt;
&lt;p&gt;OKF 的启发是：不要把这些东西继续锁在工具里、聊天记录里、某个人脑子里。&lt;/p&gt;
&lt;p&gt;把它们变成文件。&lt;/p&gt;
&lt;p&gt;让人能读，让 Agent 能读，让 Git 能管理，让工具能迁移。&lt;/p&gt;
&lt;p&gt;这可能就是 AI 时代知识管理最朴素、也最关键的一步。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing" target="_blank" rel="noopener"
 &gt;Introducing the Open Knowledge Format, Google Cloud Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf" target="_blank" rel="noopener"
 &gt;GoogleCloudPlatform/knowledge-catalog: Open Knowledge Format repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.databricks.com/product/genie/one" target="_blank" rel="noopener"
 &gt;Databricks Genie One&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.databricks.com/aws/en/genie/" target="_blank" rel="noopener"
 &gt;Databricks Genie Spaces documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst" target="_blank" rel="noopener"
 &gt;Snowflake Cortex Analyst documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.marktechpost.com/2026/06/16/google-cloud-introduces-open-knowledge-format-okf-a-vendor-neutral-markdown-spec-for-giving-ai-agents-curated-context/" target="_blank" rel="noopener"
 &gt;Google Cloud Introduces Open Knowledge Format, MarkTechPost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f" target="_blank" rel="noopener"
 &gt;llm-wiki, Andrej Karpathy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Loop Engineering：Agent 不是跑一次，而是活在循环里</title><link>https://guige.ai/p/loop-engineering-stack/</link><pubDate>Wed, 17 Jun 2026 00:00:00 +0000</pubDate><guid>https://guige.ai/p/loop-engineering-stack/</guid><description>&lt;img src="https://guige.ai/" alt="Featured image of post Loop Engineering：Agent 不是跑一次，而是活在循环里" /&gt;&lt;p&gt;最近一段时间，AI 开发讨论里有一个越来越热的词：&lt;code&gt;Loop Engineering&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;它把很多 AI 开发者过去两年跟 coding agent 协作沉淀下来的经验，逐渐聚集到一个共识上：&lt;strong&gt;你不应该再只是提示 coding agent，而应该设计会提示 agent 的循环。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;鬼哥这篇引用 LangChain 团队的技术文章 &lt;a class="link" href="https://www.langchain.com/blog/the-art-of-loop-engineering" target="_blank" rel="noopener"
 &gt;The Art of Loop Engineering&lt;/a&gt;，来拆一下这个正在升温的工程话题。后面还有一篇来自 Google、同样围绕 Loop Engineering 的文章，更偏时间维度和落地实践，也值得期待。&lt;/p&gt;
&lt;p&gt;过去两年，我们跟 coding 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;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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;我写 prompt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; agent 生成代码
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; 我读结果
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; 我补充上下文
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; agent 再改
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;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;直接提示 agent 依然是最高性价比的日常操作&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;但它有个天花板：你始终是循环里的调度器。任务从哪里来、下一步做什么、做完怎么验、失败怎么记、明天怎么接着跑，全都靠你脑子里那条线牵着。&lt;/p&gt;
&lt;p&gt;Loop Engineering，本质上是把这条线从你的脑子里拿出来，做成外部系统：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;发现任务 -&amp;gt; 分配执行 -&amp;gt; 隔离改动 -&amp;gt; 独立验证 -&amp;gt; 记录状态 -&amp;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;Prompt 还是存在，但它被放回了一个更大的机器里。&lt;strong&gt;你不再只是写一句话让 agent 干活，而是在设计 agent 干活的方式。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一个 Agent 最危险的幻觉，不是编错代码，而是&lt;strong&gt;跑完一遍就以为自己完成了任务&lt;/strong&gt;。LangChain 这篇文章把 Agent 系统的核心能力拆成四层循环：agent loop、verification loop、event-driven loop、hill climbing loop。这个拆法很朴素，但对做过真实 Agent 工程的人来说，几乎每一层都踩过坑。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Loop Engineering 封面" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/loop-engineering-stack/cover.webp" srcset="https://guige.ai/p/loop-engineering-stack/cover_hu_c114336e6867d7bc.webp 800w, https://guige.ai/p/loop-engineering-stack/cover.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="为什么我觉得这篇文章值得单独拎出来"&gt;为什么我觉得这篇文章值得单独拎出来
&lt;/h2&gt;&lt;p&gt;我前面写过两篇相关的东西：&lt;a class="link" href="https://guige.ai/p/designing-agent-loops/" &gt;《别再调教模型了：聪明人都在设计循环》&lt;/a&gt; 和 &lt;a class="link" href="https://guige.ai/p/harness-engineering/" &gt;《Harness Engineering：当模型够强，系统设计成为胜负手》&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;那两篇的核心判断是：模型越强，工程师越不该把精力只花在 prompt 上，而应该设计模型工作的系统。&lt;/p&gt;
&lt;p&gt;LangChain 这篇文章往前推了一步：它没有只说“要做系统”，而是把系统拆成了一个更可操作的结构：&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;Agent loop&lt;/td&gt;
 &lt;td&gt;模型如何一步步调用工具完成任务&lt;/td&gt;
 &lt;td&gt;一次输出就收工，没计划、没状态&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Verification loop&lt;/td&gt;
 &lt;td&gt;怎么知道这一步真的对了&lt;/td&gt;
 &lt;td&gt;自我感觉良好，错了也继续往下跑&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Event-driven loop&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;Hill climbing loop&lt;/td&gt;
 &lt;td&gt;系统怎么越跑越好&lt;/td&gt;
 &lt;td&gt;每次失败都是一次性事故，没有积累&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这四层合起来，其实就是 Agent 从 demo 走向生产的路线图。&lt;/p&gt;
&lt;p&gt;&lt;img alt="四层 Loop Engineering Stack" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/loop-engineering-stack/loop-stack.webp" srcset="https://guige.ai/p/loop-engineering-stack/loop-stack_hu_14aa1133fbfe2ee4.webp 800w, https://guige.ai/p/loop-engineering-stack/loop-stack.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="第一层agent-loop不是聊天是观察-行动-再观察"&gt;第一层：Agent loop，不是聊天，是“观察-行动-再观察”
&lt;/h2&gt;&lt;p&gt;最基础的一层是 agent loop。&lt;/p&gt;
&lt;p&gt;很多人第一次做 Agent，会把它理解成“LLM + tools”：模型看一眼任务，决定调用哪个工具，拿到结果，再继续生成。这当然没错，但还不够。&lt;/p&gt;
&lt;p&gt;真正的 agent loop 至少要包含四件事：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;observe -&amp;gt; decide -&amp;gt; act -&amp;gt; update state -&amp;gt; observe again
&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;也就是说，Agent 不是在“回答问题”，而是在一个不断变化的状态里行动。它每调用一次工具，世界就变了一点：文件被改了，网页打开了，数据库返回了新结果，用户可能又插了一句话。下一步动作必须基于新的状态，而不是基于最开始那段 prompt。&lt;/p&gt;
&lt;p&gt;我自己用 Claude Code / Codex 做开发时，最明显的分水岭就是这里。弱 Agent 像一个“高级补全器”：你给它一个任务，它生成一坨代码，然后等你验尸。强一点的 Agent 会自己读文件、跑测试、看错误、再改，整个过程已经是一个小型闭环。&lt;/p&gt;
&lt;p&gt;但只靠这一层还不够。因为 Agent loop 解决的是“会不会动”，不是“动得对不对”。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="第二层verification-loop裁判必须独立"&gt;第二层：Verification loop，裁判必须独立
&lt;/h2&gt;&lt;p&gt;Agent 最容易犯的错，不是不会做，而是&lt;strong&gt;做错了还解释得很合理&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;所以第二层是 verification loop：每一轮行动之后，系统要有一个明确的验证环节，判断结果是否满足标准。如果不满足，就把反馈送回 Agent，让它修正，而不是直接把错误带到下一步。&lt;/p&gt;
&lt;p&gt;这跟我在本地折腾模型、写自动化脚本的体感完全一致：&lt;strong&gt;没有 verifier 的 Agent，越勤奋越危险。&lt;/strong&gt; 它会非常积极地把错误扩散到更多文件、更深的状态里。&lt;/p&gt;
&lt;p&gt;一个实用的 verification loop 可以长这样：&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;/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;agent proposes change
&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; v
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;run deterministic checks
&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; v
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;LLM judge reviews ambiguous quality
&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; v
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pass -&amp;gt; continue
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fail -&amp;gt; send structured feedback back to agent
&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;p&gt;第一，能用确定性检查的地方，别让 LLM 当裁判。测试、类型检查、lint、SQL 校验、schema validation，这些都应该是硬规则。&lt;/p&gt;
&lt;p&gt;第二，必须用 LLM 判断的地方，也尽量让它成为&lt;strong&gt;独立裁判&lt;/strong&gt;。不要让生成答案的同一个上下文顺手给自己打分。模型自评经常带着自己的思路滤镜，看不到真正的问题。&lt;/p&gt;
&lt;p&gt;&lt;img alt="独立验证循环" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/loop-engineering-stack/verification-loop.webp" srcset="https://guige.ai/p/loop-engineering-stack/verification-loop_hu_d20baefcbd0638e4.webp 800w, https://guige.ai/p/loop-engineering-stack/verification-loop.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="第三层event-driven-loop让-agent-从工具变成服务"&gt;第三层：Event-driven loop，让 Agent 从“工具”变成“服务”
&lt;/h2&gt;&lt;p&gt;前两层解决的是一次任务内部的闭环。第三层 event-driven loop，解决的是更生产级的问题：Agent 怎么在真实世界里长期运行？&lt;/p&gt;
&lt;p&gt;现实系统不是你问一句它答一句。真实系统里会发生各种事件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户发来新消息&lt;/li&gt;
&lt;li&gt;GitHub 出现新 issue&lt;/li&gt;
&lt;li&gt;CI 失败&lt;/li&gt;
&lt;li&gt;数据库里多了一条异常记录&lt;/li&gt;
&lt;li&gt;定时任务触发&lt;/li&gt;
&lt;li&gt;人类审批通过或驳回&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一个 event-driven Agent 不应该只是被动等待 prompt，而应该能被事件唤醒，读取上下文，恢复状态，执行下一步，然后再次挂起。&lt;/p&gt;
&lt;p&gt;这也是 LangGraph 这类框架一直强调 state、durability、interrupt/resume 的原因。没有这些能力，Agent 只能做“同步聊天机器人”；有了这些能力，Agent 才能接近“后台工作人员”。&lt;/p&gt;
&lt;p&gt;我觉得这一层对 AI 开发者特别重要，因为很多 Agent 项目死在这里：demo 里看起来很聪明，接到生产事件之后就不知道自己是谁、之前做过什么、现在该从哪一步继续。&lt;/p&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;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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;event arrives
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; load thread / task state
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; decide next action
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; call tools or ask human
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; persist state and trace
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; wait for next event
&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;img alt="事件驱动 Agent" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/loop-engineering-stack/event-driven-agent.webp" srcset="https://guige.ai/p/loop-engineering-stack/event-driven-agent_hu_9d1f4aef2c83b5a1.webp 800w, https://guige.ai/p/loop-engineering-stack/event-driven-agent.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="第四层hill-climbing-loop真正的复利在系统之外"&gt;第四层：Hill climbing loop，真正的复利在系统之外
&lt;/h2&gt;&lt;p&gt;最外层，也是最容易被忽略的一层，是 hill climbing loop。&lt;/p&gt;
&lt;p&gt;前三层让 Agent 能跑、能验、能响应事件。第四层要回答的问题是：&lt;strong&gt;这个系统跑了一百次之后，有没有变得更好？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果每次失败都只是“这次模型没发挥好”，那你永远在原地打补丁。Hill climbing loop 要做的是把失败变成可积累的工程资产：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;traces：记录 Agent 每一步为什么这么做&lt;/li&gt;
&lt;li&gt;evals：把失败案例沉淀成可重复评测&lt;/li&gt;
&lt;li&gt;feedback：把人类纠错变成结构化信号&lt;/li&gt;
&lt;li&gt;prompt / policy changes：把经验固化到系统行为里&lt;/li&gt;
&lt;li&gt;regression checks：防止修好一个场景又弄坏另一个场景&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这也是为什么我越来越觉得 LangSmith、OpenTelemetry、eval harness 这些东西不是“上线后再补”的配套工具，而是 Agent 工程的主干。&lt;/p&gt;
&lt;p&gt;没有 trace，你不知道它为什么失败；没有 eval，你不知道改动是否真的变好；没有反馈闭环，你只是每天给同一个坑换名字。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Hill Climbing Loop" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/loop-engineering-stack/hill-climbing-loop.webp" srcset="https://guige.ai/p/loop-engineering-stack/hill-climbing-loop_hu_df9745ce0a5b0dde.webp 800w, https://guige.ai/p/loop-engineering-stack/hill-climbing-loop.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="human-oversight-不是最后点一下确认"&gt;Human oversight 不是“最后点一下确认”
&lt;/h2&gt;&lt;p&gt;LangChain 文章里还有一个横跨四层的点：human oversight。&lt;/p&gt;
&lt;p&gt;很多系统把 human-in-the-loop 做成一个很浅的审批按钮：Agent 生成结果，人类点 approve 或 reject。这个当然有用，但太窄了。&lt;/p&gt;
&lt;p&gt;更好的 human oversight 应该分布在不同层级：&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;Agent loop&lt;/td&gt;
 &lt;td&gt;在关键工具调用前确认&lt;/td&gt;
 &lt;td&gt;防止不可逆操作&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Verification loop&lt;/td&gt;
 &lt;td&gt;对模糊质量给判断&lt;/td&gt;
 &lt;td&gt;弥补自动评测盲区&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Event-driven loop&lt;/td&gt;
 &lt;td&gt;在异常分支里接管&lt;/td&gt;
 &lt;td&gt;避免系统卡死或误操作&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Hill climbing loop&lt;/td&gt;
 &lt;td&gt;标注失败、调整 rubric&lt;/td&gt;
 &lt;td&gt;让系统长期进化&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;换句话说，人类不是 Agent 的“老板”，而是整个循环系统里的高价值传感器和调参者。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="对-ai-开发者的实操建议"&gt;对 AI 开发者的实操建议
&lt;/h2&gt;&lt;p&gt;如果你正在做 Agent，不要一上来就问“该用哪个模型”。&lt;/p&gt;
&lt;p&gt;先把你的系统画成四层循环，然后逐层检查：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Agent loop&lt;/strong&gt;：它是否真的会观察状态、调用工具、更新状态、继续行动？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification loop&lt;/strong&gt;：每一步有没有可执行的验收标准？能不能自动跑？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Event-driven loop&lt;/strong&gt;：它能不能从外部事件恢复上下文，而不是每次从零开始？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hill climbing loop&lt;/strong&gt;：失败案例有没有沉淀成 trace、eval、规则或测试？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果这四层里有一层是空的，你的 Agent 很可能还停留在 demo 阶段。&lt;/p&gt;
&lt;p&gt;更直接一点：&lt;strong&gt;别再只调 prompt 了，把 prompt 放回循环里看。&lt;/strong&gt; Prompt 是 Agent 的一部分，但不是 Agent 系统本身。真正决定可靠性的，是状态、验证、事件、观测和反馈如何组成闭环。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="takeaway下次设计-agent先画循环"&gt;Takeaway：下次设计 Agent，先画循环
&lt;/h2&gt;&lt;p&gt;我会把 LangChain 这篇文章的核心压缩成一句话：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agent 工程不是让模型更聪明，而是让系统在每一次行动之后都能变得更确定。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;下一次你要做一个 Agent，不妨先别打开代码编辑器。先画四个圈：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这个 Agent 怎么行动？&lt;/li&gt;
&lt;li&gt;它怎么验证自己没有跑偏？&lt;/li&gt;
&lt;li&gt;它怎么响应真实世界的事件？&lt;/li&gt;
&lt;li&gt;它怎么从失败里长期爬坡？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;四个圈画清楚，再选模型、写 prompt、接工具。顺序反了，你大概率会得到一个很会说话、但不能放心托付的 demo。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;LangChain: &lt;a class="link" href="https://www.langchain.com/blog/the-art-of-loop-engineering" target="_blank" rel="noopener"
 &gt;The Art of Loop Engineering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;鬼哥：&lt;a class="link" href="https://guige.ai/p/designing-agent-loops/" &gt;别再调教模型了：聪明人都在设计循环&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;鬼哥：&lt;a class="link" href="https://guige.ai/p/harness-engineering/" &gt;Harness Engineering：当模型够强，系统设计成为胜负手&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>别再只会提示词了：下一代程序员要会设计 Agent 循环</title><link>https://guige.ai/p/coding-agent-loops/</link><pubDate>Wed, 17 Jun 2026 00:00:00 +0000</pubDate><guid>https://guige.ai/p/coding-agent-loops/</guid><description>&lt;img src="https://guige.ai/" alt="Featured image of post 别再只会提示词了：下一代程序员要会设计 Agent 循环" /&gt;&lt;p&gt;你以为 AI 编程的下一步是“写出更好的 prompt”？可能错了。&lt;/p&gt;
&lt;p&gt;Addy Osmani 最近在 X 上写了一篇长文：&lt;a class="link" href="https://x.com/addyosmani/status/2064127981161959567" target="_blank" rel="noopener"
 &gt;Loop Engineering&lt;/a&gt;。他的判断很直接：&lt;strong&gt;你不应该再只是提示 coding agent，而应该设计会提示 agent 的循环。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这句话听起来像一句漂亮口号，但背后其实是 AI 编程工作流的重心迁移：从“人坐在驾驶位，一轮一轮指挥模型”，变成“人设计一个小系统，让它发现任务、分配任务、验证结果、记录状态，然后继续下一轮”。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Loop Engineering 封面" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/coding-agent-loops/cover.webp" srcset="https://guige.ai/p/coding-agent-loops/cover_hu_3cb74f31666f1ab3.webp 800w, https://guige.ai/p/coding-agent-loops/cover.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="prompt-engineering-还没死但它不再是杠杆最大的位置"&gt;Prompt engineering 还没死，但它不再是杠杆最大的位置
&lt;/h2&gt;&lt;p&gt;过去两年，我们跟 coding 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;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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;我写 prompt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; agent 生成代码
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; 我读结果
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; 我补充上下文
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; agent 再改
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;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;直接提示 agent 依然是最高性价比的日常操作&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;但它有个天花板：你始终是循环里的调度器。任务从哪里来、下一步做什么、做完怎么验、失败怎么记、明天怎么接着跑，全都靠你脑子里那条线牵着。&lt;/p&gt;
&lt;p&gt;Addy 说的 loop engineering，本质上是把这条线从你的脑子里拿出来，做成外部系统：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;发现任务 -&amp;gt; 分配执行 -&amp;gt; 隔离改动 -&amp;gt; 独立验证 -&amp;gt; 记录状态 -&amp;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;Prompt 还是存在，但它被放回了一个更大的机器里。&lt;strong&gt;你不再只是写一句话让 agent 干活，而是在设计 agent 干活的方式。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="从 Prompt 到 Loop" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/coding-agent-loops/prompt-to-loop.webp" srcset="https://guige.ai/p/coding-agent-loops/prompt-to-loop_hu_a2d8040e9cd4b598.webp 800w, https://guige.ai/p/coding-agent-loops/prompt-to-loop.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一个-agent-loop-至少需要五个零件"&gt;一个 Agent loop 至少需要五个零件
&lt;/h2&gt;&lt;p&gt;Addy 把这个循环拆成五个核心零件，再加一个外部记忆层。&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;Automations&lt;/td&gt;
 &lt;td&gt;定时发现任务、触发运行&lt;/td&gt;
 &lt;td&gt;每次都要人手动想起要检查什么&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Worktrees&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;Skills&lt;/td&gt;
 &lt;td&gt;固化项目知识和工作约定&lt;/td&gt;
 &lt;td&gt;每次会话都从零猜你的项目习惯&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Plugins / Connectors&lt;/td&gt;
 &lt;td&gt;接入真实工具和数据源&lt;/td&gt;
 &lt;td&gt;agent 只能在文件系统里自言自语&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Sub-agents&lt;/td&gt;
 &lt;td&gt;拆分执行者和验证者&lt;/td&gt;
 &lt;td&gt;写代码的人顺手给自己打满分&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Memory&lt;/td&gt;
 &lt;td&gt;记录已做、待做、失败和下一步&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;单独看，automation 只是定时任务；worktree 只是 Git 技巧；skill 只是文档；connector 只是 MCP；sub-agent 只是多开一个模型。&lt;/p&gt;
&lt;p&gt;但放在一起，它们变成了一种新的工作单元：&lt;strong&gt;不是一个 agent，而是一条可以重复运行的工程流水线。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="automations-是心跳它让循环真的会再来一次"&gt;Automations 是心跳：它让循环真的会“再来一次”
&lt;/h2&gt;&lt;p&gt;循环和一次性任务最大的区别，不是复杂度，而是有没有心跳。&lt;/p&gt;
&lt;p&gt;没有 automation，你只是今天心血来潮跑了一次 agent。&lt;br&gt;
有 automation，它明天还会来，后天还会来，出事时会把结果丢进你的 inbox。&lt;/p&gt;
&lt;p&gt;Addy 举的例子很具体：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每天做 issue triage&lt;/li&gt;
&lt;li&gt;总结 CI 失败&lt;/li&gt;
&lt;li&gt;写 commit briefing&lt;/li&gt;
&lt;li&gt;找出最近引入的 bug&lt;/li&gt;
&lt;li&gt;定时运行某个 skill，而不是粘贴一大坨 prompt&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这里的关键不是“自动化很酷”，而是&lt;strong&gt;任务发现被系统化了&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;很多工程工作其实死在第一步：不是没人会修，而是没人持续看。CI 偶尔红一次、issue 堆一点、依赖慢慢旧一点、代码质量每天滑一点。人类对这种缓慢腐蚀很迟钝，循环不会。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Automation 心跳" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1672" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/coding-agent-loops/automation-heartbeat.webp" srcset="https://guige.ai/p/coding-agent-loops/automation-heartbeat_hu_1870468c184be42d.webp 800w, https://guige.ai/p/coding-agent-loops/automation-heartbeat.webp 941w" width="941"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="worktrees-是并行的刹车系统"&gt;Worktrees 是并行的刹车系统
&lt;/h2&gt;&lt;p&gt;只要你让多个 agent 同时改同一个 repo，最先坏掉的通常不是模型能力，而是文件冲突。&lt;/p&gt;
&lt;p&gt;两个 agent 同时改同一个文件，本质上和两个工程师同时改同一段代码一样：不是不能做，而是你必须有隔离边界。&lt;/p&gt;
&lt;p&gt;Git worktree 的价值就在这里。每个 agent 在自己的 checkout、自己的 branch 里工作，改动不会直接踩到另一个 agent 的现场。&lt;/p&gt;
&lt;p&gt;这让并行从“看起来很爽”变成“至少机械上可控”。&lt;/p&gt;
&lt;p&gt;但别高兴太早。worktree 解决的是文件层面的碰撞，不解决人的 review 带宽。&lt;/p&gt;
&lt;p&gt;你可以同时开 5 个 agent，但如果你只能认真 review 1 个 PR，那么系统吞吐量的瓶颈仍然是你。&lt;strong&gt;并行不是免费午餐，它只是把瓶颈从执行转移到判断。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="skills-是意图的缓存"&gt;Skills 是意图的缓存
&lt;/h2&gt;&lt;p&gt;我越来越觉得，skill 最被低估的地方不是“复用提示词”，而是它把项目里的隐性规则变成了显性资产。&lt;/p&gt;
&lt;p&gt;每个成熟项目都有一堆口头约定：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这个目录不能乱动&lt;/li&gt;
&lt;li&gt;这个测试必须先跑&lt;/li&gt;
&lt;li&gt;这个 API 不能破坏兼容性&lt;/li&gt;
&lt;li&gt;这类 UI 不能做成营销页&lt;/li&gt;
&lt;li&gt;我们上次踩过这个坑，所以现在不这么写&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果这些东西只存在于人的脑子里，agent 每次进来都会重新猜一遍。猜对了叫聪明，猜错了叫事故。&lt;/p&gt;
&lt;p&gt;Skill 的意义是把这些判断写在外部，让 agent 每次运行都能读到。&lt;/p&gt;
&lt;p&gt;这也是 loop engineering 里很关键的一点：&lt;strong&gt;循环要长期跑，就不能每次都重新理解世界。&lt;/strong&gt; 它需要一套可积累、可维护、可版本化的项目知识。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="connectors-让循环碰到真实世界"&gt;Connectors 让循环碰到真实世界
&lt;/h2&gt;&lt;p&gt;一个只能看本地文件的 agent，能做的事很有限。&lt;/p&gt;
&lt;p&gt;真正有用的 loop 往往要碰到真实系统：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GitHub issue 和 PR&lt;/li&gt;
&lt;li&gt;Linear / Jira ticket&lt;/li&gt;
&lt;li&gt;Slack / 飞书通知&lt;/li&gt;
&lt;li&gt;CI 日志&lt;/li&gt;
&lt;li&gt;数据库查询&lt;/li&gt;
&lt;li&gt;线上监控&lt;/li&gt;
&lt;li&gt;staging API&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这就是 connector 的位置。MCP 这类协议的价值，不只是“让 agent 多几个工具”，而是让 loop 能把状态从真实工作流里拿进来，再把结果写回去。&lt;/p&gt;
&lt;p&gt;差别很大：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;普通 agent&lt;/th&gt;
 &lt;th&gt;Loop + connectors&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;“我建议你这样改”&lt;/td&gt;
 &lt;td&gt;直接开 PR&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;“这个 issue 可能相关”&lt;/td&gt;
 &lt;td&gt;自动链接 ticket&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;“CI 好像失败了”&lt;/td&gt;
 &lt;td&gt;读取日志、定位原因、发修复分支&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;“你可以通知团队”&lt;/td&gt;
 &lt;td&gt;CI 绿了以后发 Slack&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;前者是助手，后者更像一个后台工作人员。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="sub-agents不要让写代码的人当唯一裁判"&gt;Sub-agents：不要让写代码的人当唯一裁判
&lt;/h2&gt;&lt;p&gt;在无人值守循环里，最危险的一句话是：&lt;strong&gt;“看起来完成了。”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;模型很擅长把自己刚刚做的事解释得很合理。它写了代码，它也知道自己想表达什么，所以它很容易忽略读者、测试、边界条件和真实需求。&lt;/p&gt;
&lt;p&gt;所以 loop 里最值得花 token 的地方，往往是 maker / checker 分离：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Explorer 负责读上下文
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Implementer 负责改代码
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Verifier 负责按 spec 和测试挑刺
&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;Verifier 不一定总是另一个大模型。能用确定性检查的地方，应该优先用测试、lint、type check、schema validation。&lt;/p&gt;
&lt;p&gt;但只要涉及模糊质量，比如架构是否过度、文案是否误导、交互是否符合用户习惯，一个独立的 sub-agent 就很值钱。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;循环越自动化，验证越不能省。&lt;/strong&gt; 因为你不在现场时，错误也会自动化。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Maker Checker 分离" class="gallery-image" data-flex-basis="160px" data-flex-grow="66" height="1536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/coding-agent-loops/maker-checker.webp" srcset="https://guige.ai/p/coding-agent-loops/maker-checker_hu_d229c82b8855d4b4.webp 800w, https://guige.ai/p/coding-agent-loops/maker-checker.webp 1024w" width="1024"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="memory-是循环的脊柱"&gt;Memory 是循环的脊柱
&lt;/h2&gt;&lt;p&gt;Addy 在文里提到一个看起来很朴素、但非常重要的东西：外部记忆。&lt;/p&gt;
&lt;p&gt;它可以是一个 Markdown 文件，也可以是 Linear board，甚至是一个很普通的状态表。关键是它必须活在单次对话之外。&lt;/p&gt;
&lt;p&gt;原因很简单：模型会忘，repo 不会；聊天会结束，文件还在。&lt;/p&gt;
&lt;p&gt;一个长期运行的 loop 至少要记住：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;昨天发现了什么&lt;/li&gt;
&lt;li&gt;哪些任务已经尝试过&lt;/li&gt;
&lt;li&gt;哪些方案失败了&lt;/li&gt;
&lt;li&gt;哪些检查通过了&lt;/li&gt;
&lt;li&gt;哪些问题需要人类决策&lt;/li&gt;
&lt;li&gt;下一轮应该从哪里继续&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;没有这个状态文件，所谓 loop 只是每天重复失忆。&lt;br&gt;
有了它，agent 才能在多次运行之间接力。&lt;/p&gt;
&lt;p&gt;这也是我觉得很多 AI 自动化项目跑不久的原因：大家拼命优化 prompt，却没有给系统一个可靠的记忆脊柱。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一个真实-loop-可以长什么样"&gt;一个真实 loop 可以长什么样
&lt;/h2&gt;&lt;p&gt;把这些零件拼起来，一个早晨自动运行的 coding loop 大概长这样：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;每天 9:00 automation 启动
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; 调用 triage skill
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; 读取昨天 CI、issues、recent commits
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; 把发现写入 state.md 或 Linear
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; 对值得处理的问题创建 worktree
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; sub-agent A 起草修复
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; sub-agent B 按项目 skill 和测试验证
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; connector 创建 PR / 更新 ticket / 通知频道
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -&amp;gt; 未处理事项回到 triage inbox
&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;p&gt;最有意思的是，人类的工作没有消失，而是换了位置。你不再逐步提示每个 agent，而是在设计：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;哪些任务值得自动发现&lt;/li&gt;
&lt;li&gt;哪些检查必须硬性通过&lt;/li&gt;
&lt;li&gt;哪些情况要中断给人&lt;/li&gt;
&lt;li&gt;哪些状态要写下来&lt;/li&gt;
&lt;li&gt;哪些权限不能交出去&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这不是“少干活”那么简单。它更像从写脚本的人，变成设计操作系统的人。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Coding Agent Loop" class="gallery-image" data-flex-basis="160px" data-flex-grow="66" height="1536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/coding-agent-loops/coding-agent-loop.webp" srcset="https://guige.ai/p/coding-agent-loops/coding-agent-loop_hu_56afd3185451fe0.webp 800w, https://guige.ai/p/coding-agent-loops/coding-agent-loop.webp 1024w" width="1024"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="loop-engineering-的风险你会更快地失控"&gt;Loop Engineering 的风险：你会更快地失控
&lt;/h2&gt;&lt;p&gt;Addy 的文章里有个很重要的提醒：这东西还早，而且 token 成本、质量下降、slop 都是真问题。&lt;/p&gt;
&lt;p&gt;我会把风险拆成三类。&lt;/p&gt;
&lt;p&gt;第一，&lt;strong&gt;验证风险&lt;/strong&gt;。&lt;br&gt;
没有可靠 verifier 的 loop，只是在自动制造自信的错误。&lt;/p&gt;
&lt;p&gt;第二，&lt;strong&gt;理解债务&lt;/strong&gt;。&lt;br&gt;
loop 帮你产出越快，如果你不读、不理解、不复盘，你和代码库之间的距离就会越拉越大。&lt;/p&gt;
&lt;p&gt;第三，&lt;strong&gt;认知投降&lt;/strong&gt;。&lt;br&gt;
最舒服的姿势是“让它跑吧”。但如果你只是为了逃避判断而设计 loop，它会把你的懒惰放大成系统性风险。&lt;/p&gt;
&lt;p&gt;这就是 loop engineering 比 prompt engineering 更难的地方：prompt 错了，通常只坏一次；loop 错了，会重复坏。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="takeaway先设计循环再让-agent-跑"&gt;Takeaway：先设计循环，再让 agent 跑
&lt;/h2&gt;&lt;p&gt;我觉得 Addy 这篇长文最值得带走的，不是某个工具功能，而是一种工作顺序：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先定义循环要解决什么问题。&lt;/li&gt;
&lt;li&gt;再决定它如何发现任务。&lt;/li&gt;
&lt;li&gt;给每个执行单元分配隔离环境。&lt;/li&gt;
&lt;li&gt;把项目知识写成 skill。&lt;/li&gt;
&lt;li&gt;用 connector 接入真实工具。&lt;/li&gt;
&lt;li&gt;用 verifier 或 sub-agent 检查结果。&lt;/li&gt;
&lt;li&gt;把状态写到对话之外。&lt;/li&gt;
&lt;li&gt;最后才是：让 agent 开始跑。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;换句话说，&lt;strong&gt;不要一上来就问“我该怎么 prompt 它”。先问：这个循环的输入、状态、验证、退出条件和人工接管点在哪里？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Loop engineering 不是把工程师拿掉。恰恰相反，它要求工程师更像工程师：少一点临场催促，多一点系统设计；少一点“帮我改一下”，多一点“这条生产线为什么可信”。&lt;/p&gt;
&lt;p&gt;Build the loop. Stay the engineer.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Addy Osmani: &lt;a class="link" href="https://x.com/addyosmani/status/2064127981161959567" target="_blank" rel="noopener"
 &gt;Loop Engineering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;鬼哥：&lt;a class="link" href="https://guige.ai/p/loop-engineering-stack/" &gt;Loop Engineering：Agent 不是跑一次，而是活在循环里&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;鬼哥：&lt;a class="link" href="https://guige.ai/p/designing-agent-loops/" &gt;别再调教模型了：聪明人都在设计循环&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;鬼哥：&lt;a class="link" href="https://guige.ai/p/harness-engineering/" &gt;Harness Engineering：当模型够强，系统设计成为胜负手&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>别再调教模型了：聪明人都在设计循环</title><link>https://guige.ai/p/designing-agent-loops/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>https://guige.ai/p/designing-agent-loops/</guid><description>&lt;img src="https://guige.ai/" alt="Featured image of post 别再调教模型了：聪明人都在设计循环" /&gt;&lt;p&gt;Anthropic 的工程师 Boris Cherny 有一句话被反复引用：&lt;strong&gt;「我的工作就是写循环（My job is to write loops）。」&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这句话第一次听像段子，听第二遍你会发现它在描述一个范式转移。过去我们用大模型，本能是去「调教」它——改 prompt、加 few-shot、写一长串「你必须……你不能……」的规则。但当模型本身已经足够强，真正决定产出质量的，往往不再是你怎么&lt;em&gt;指挥&lt;/em&gt;它，而是你给它套了一个什么样的&lt;strong&gt;循环&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Anthropic 的 Lance Martin 最近分享了他用新一代 Claude 模型（内部代号 Fable 5，Mythos 级别）做实验的两个心得。两个都不是 prompt 技巧，而是关于怎么&lt;strong&gt;设计循环&lt;/strong&gt;。下面我把它整理成中文，并加上我自己的一些体感。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Designing loops with Fable 5" class="gallery-image" data-flex-basis="600px" data-flex-grow="250" height="832" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/designing-agent-loops/cover.webp" srcset="https://guige.ai/p/designing-agent-loops/cover_hu_f3f285b3c85f4a8b.webp 800w, https://guige.ai/p/designing-agent-loops/cover_hu_f6df640e5223bea7.webp 1600w, https://guige.ai/p/designing-agent-loops/cover.webp 2080w" width="2080"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="为什么是循环而不是prompt"&gt;为什么是「循环」，而不是「prompt」
&lt;/h2&gt;&lt;p&gt;先说清楚这个范式差在哪。&lt;/p&gt;
&lt;p&gt;传统用法是&lt;strong&gt;一次性&lt;/strong&gt;的：你写一个尽可能完美的 prompt，模型吐一个答案，好不好全看这一发。这本质上是在赌模型的「直觉」。&lt;/p&gt;
&lt;p&gt;循环用法是&lt;strong&gt;迭代式&lt;/strong&gt;的：你不再追求一发命中，而是给模型套一个「跑 → 拿反馈 → 自我纠正 → 再跑」的环，让它在一个评判标准（goal 或 rubric）上不断爬坡，直到达标才停。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;一次性 prompt&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;prompt 本身&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;评判标准设计得好不好&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;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Claude Code 里的 &lt;code&gt;/goal&lt;/code&gt; 和 Claude Managed Agents（CMA）里的 Outcomes，就是把这套通用配方变成了你能直接用的原语。&lt;strong&gt;它们的本质都是：给环境注入一个反馈信号，让模型自己跟这个信号死磕。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="第一招自我纠正循环"&gt;第一招：自我纠正循环
&lt;/h2&gt;&lt;p&gt;新模型一个被反复验证的特性是——&lt;strong&gt;它特别擅长在循环里自我纠正&lt;/strong&gt;。一个设计良好的 goal 或 rubric，相当于给 Claude 运行的环境加了一个反馈源：它跑一轮、通过 goal/rubric 收集反馈、修正自己，然后继续，直到标准被满足。&lt;/p&gt;
&lt;p&gt;这里有一个&lt;strong&gt;最容易被忽略、却最关键的点：谁来当裁判。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;直觉上你可能觉得，让模型自己检查自己的输出不就行了？但 Anthropic 的实验反复发现，&lt;strong&gt;模型在「自我批判」上是有系统性缺陷的&lt;/strong&gt;——它很难客观地挑自己输出的毛病（Prithvi Rajasekaran 在 Anthropic 工程博客里专门写过这个现象）。&lt;/p&gt;
&lt;p&gt;解法是：&lt;strong&gt;用一个独立的 verifier 子 agent 来打分，而不是让主 agent 自我批判。&lt;/strong&gt; 因为打分是在一个&lt;strong&gt;独立的上下文窗口&lt;/strong&gt;里完成的，不受主 agent 思路的污染，效果明显更好。CMA 的 Outcomes 就是帮你自动 spawn 一个 grader 子 agent 来做这件事。&lt;/p&gt;
&lt;p&gt;下面这张表把两种实现方式拆得很清楚——无论是 Claude Code 的 &lt;code&gt;/goal&lt;/code&gt; 还是 CMA 的 Outcomes，骨架都是一样的五件套：目标、裁判、循环、边界、退出条件。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Goal-driven loops 的两种实现对比" class="gallery-image" data-flex-basis="525px" data-flex-grow="218" height="1040" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/designing-agent-loops/goal-driven-loops.webp" srcset="https://guige.ai/p/designing-agent-loops/goal-driven-loops_hu_88fa692449be2739.webp 800w, https://guige.ai/p/designing-agent-loops/goal-driven-loops_hu_de19fd5bcd9d435b.webp 1600w, https://guige.ai/p/designing-agent-loops/goal-driven-loops.webp 2276w" width="2276"&gt;&lt;/p&gt;
&lt;p&gt;注意「裁判（The judge）」这一行：&lt;code&gt;/goal&lt;/code&gt; 用一个独立的 grader 模型（Haiku），CMA 用一个独立的 grader 子 agent——&lt;strong&gt;两者都刻意把评判放到了主流程之外。&lt;/strong&gt; 这不是实现细节，这是这套方法能 work 的核心原因。&lt;/p&gt;
&lt;h3 id="parameter-golf一个能跑-8-小时的玩具实验"&gt;Parameter Golf：一个能跑 8 小时的玩具实验
&lt;/h3&gt;&lt;p&gt;Lance 用了一个开源的 ML 工程挑战 &lt;strong&gt;Parameter Golf&lt;/strong&gt; 来测试：在 8 张 H100 上、10 分钟内，训练出一个能塞进 16MB 的最强模型。&lt;/p&gt;
&lt;p&gt;这个挑战很像 Karpathy 的 autoresearch 项目——它考验的不是模型会不会写代码，而是一个 agent 能不能&lt;strong&gt;像研究员一样工作&lt;/strong&gt;：改训练代码（一个 &lt;code&gt;train_gpt.py&lt;/code&gt; 文件）、启动训练、轮询日志、读分数、然后决定下一个实验做什么。这是一个典型的长程、可验证、能爬坡的任务，正好是循环的主场。&lt;/p&gt;
&lt;p&gt;他给了一个有 9 条可检查标准的 rubric（比如「跑一个 baseline」「跑 20 个实验」），让 Parameter Golf 最多跑 8 小时，由 Outcomes 的 grader 确认所有标准都满足后才允许 Claude 停手。结果：&lt;/p&gt;
&lt;p&gt;&lt;img alt="Parameter Golf：Fable 5 vs Opus 4.7" class="gallery-image" data-flex-basis="408px" data-flex-grow="170" height="1226" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/designing-agent-loops/parameter-golf.webp" srcset="https://guige.ai/p/designing-agent-loops/parameter-golf_hu_c6f23f454667600d.webp 800w, https://guige.ai/p/designing-agent-loops/parameter-golf_hu_2e170007532a821e.webp 1600w, https://guige.ai/p/designing-agent-loops/parameter-golf.webp 2088w" width="2088"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fable 5 把训练 pipeline 优化了约 6 倍于 Opus 4.7。&lt;/strong&gt; 但比这个数字更有意思的是两个模型的&lt;strong&gt;实验风格差异&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fable 5&lt;/strong&gt; 敢下「结构性」的大注（比如改架构：&lt;code&gt;TRAIN_SEQ_LEN=2048&lt;/code&gt; 带来 −0.0179、overlapped sliding-window eval 带来 −0.0207），而且有韧性——它甚至顶着一次量化回退继续推，最后拿到了最大的一次提升。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opus 4.7&lt;/strong&gt; 第一个实验拿了个小赢，然后&lt;strong&gt;几乎所有后续实验都在复制同一个模板&lt;/strong&gt;：调一个标量、测一下、有正收益就留下。稳，但天花板低。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;看图里那条蓝线（Fable 5）是怎么一个台阶一个台阶往下砸的，红线（Opus 4.7）则基本是平的——这就是「敢赌结构性改动」和「只敢调标量」的区别。&lt;strong&gt;循环给了模型试错的空间，而更强的模型会用这个空间去下更大的注。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="第二招记忆跨会话的外层循环"&gt;第二招：记忆——跨会话的外层循环
&lt;/h2&gt;&lt;p&gt;如果说自我纠正是&lt;strong&gt;单次会话内&lt;/strong&gt;的内层循环，那记忆就是&lt;strong&gt;跨会话&lt;/strong&gt;的外层循环：Claude 在一次会话里把经验写进记忆，这些记忆能在未来的会话里被取回。&lt;/p&gt;
&lt;p&gt;Lance 用 Continual Learning Bench 1.0 里的一个任务来测：给 agent 一个 SQL 数据库，让它回答一连串问题。&lt;strong&gt;每个问题是一个独立的 agent 会话&lt;/strong&gt;，会话之间靠记忆来传递经验。他用 CMA 的记忆功能给每个 agent 挂载一个可跨会话共享的文件系统。&lt;/p&gt;
&lt;p&gt;他观察到，&lt;strong&gt;有效使用记忆是有梯度的&lt;/strong&gt;，从低到高是这么一条进阶链：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;失败（fail）&lt;/strong&gt;：做错了，把它记下来&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;调查（investigate）&lt;/strong&gt;：在继续之前，搞清楚为什么错&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;验证（verify）&lt;/strong&gt;：把诊断变成一个被核实过的事实&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提炼（distill）&lt;/strong&gt;：把验证结果升华成一条通用规则&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;查阅（consult）&lt;/strong&gt;：下次直接读这条规则，而不是重新推导一遍&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;三个模型卡在了不同的台阶上，差距非常直观：&lt;/p&gt;
&lt;p&gt;&lt;img alt="Continual Learning Bench 1.0：记忆的三模型对比" class="gallery-image" data-flex-basis="485px" data-flex-grow="202" height="1048" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/designing-agent-loops/continual-learning-bench.webp" srcset="https://guige.ai/p/designing-agent-loops/continual-learning-bench_hu_a4a0f43406f74d02.webp 800w, https://guige.ai/p/designing-agent-loops/continual-learning-bench_hu_c9dc94796914af41.webp 1600w, https://guige.ai/p/designing-agent-loops/continual-learning-bench.webp 2120w" width="2120"&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;strong&gt;Sonnet 4.6&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;第 1 步（失败）&lt;/td&gt;
 &lt;td&gt;记忆只是一堆失败笔记和没验证的猜测（「也许是 prc 不是 prc_usd？」），几乎不回头查阅。得分 0.330，跟无记忆的 baseline 几乎没差&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Opus 4.7&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;第 3 步（验证）&lt;/td&gt;
 &lt;td&gt;会建带不确定标记的 schema 参考（「可能是以分为单位？待验证」），但验证覆盖率低，只有 7–33%（中位数约 17%）。得分 0.700&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Fable 5&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;走完全程&lt;/td&gt;
 &lt;td&gt;最强的几次运行里验证覆盖率高达 73%（30 题里验证了 22 题），并能把学到的东西提炼成通用规则，反哺未来任务。得分 0.839&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;看右边那张收敛曲线特别有感觉：&lt;strong&gt;带记忆的实线和无记忆的虚线，差距随着问题数累积越拉越大。&lt;/strong&gt; 记忆不是「记下来」就完事了，关键在于你的 agent 能不能走完「失败 → 调查 → 验证 → 提炼 → 查阅」这条链。&lt;strong&gt;Sonnet 4.6 停在记笔记，Fable 5 在建知识库——这就是 0.330 和 0.839 的差距。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一个实操提醒：如果你的模型只走到第 1 步（像 Sonnet 4.6 那样），你需要给它&lt;strong&gt;针对具体任务的记忆指令&lt;/strong&gt;来往上推。记忆这东西，模型越弱越需要你手把手教它怎么用。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="我的体感这其实是在重新分配智能"&gt;我的体感：这其实是在重新分配「智能」
&lt;/h2&gt;&lt;p&gt;整理完这两个实验，我自己最大的感受是：&lt;strong&gt;Agent 工程正在从「怎么问」转向「怎么搭环境」。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;过去一年我自己用 Claude Code 的体验也印证了这点。早期我花大量时间打磨 prompt，恨不得把每一步都写死。但模型一强，这套做法的边际收益就崩了——你写的规则越细，反而越限制它。真正让产出质变的，是另外两件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;给它一个可验证的目标&lt;/strong&gt;，然后闭嘴让它自己跑。&lt;code&gt;/goal&lt;/code&gt; 这类原语的价值就在这——你定义「什么叫做完了」，剩下的交给循环。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;让它管理自己的上下文&lt;/strong&gt;，包括往记忆里写、从记忆里读。你不需要每次都把背景重新喂一遍。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lance 那句话我很认同：&lt;strong&gt;与其直接 prompt 和 steer 模型，不如设计循环，让模型自己根据环境反馈做自我纠正（比如 &lt;code&gt;/goal&lt;/code&gt; 或 Outcomes），并管理自己的上下文（比如记忆）。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;换个角度说，你作为工程师的「智能」，正在从「写在 prompt 里」迁移到「写在循环结构里」。前者是一次性的指令，后者是可复利的系统。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="takeaway下次构建-agent先问自己四个问题"&gt;Takeaway：下次构建 Agent，先问自己四个问题
&lt;/h2&gt;&lt;p&gt;如果你也想用循环的思路构建 agent，把下面四个问题贴在显示器上：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;目标可验证吗？&lt;/strong&gt; 能不能写出一个 rubric / goal，让一个独立的裁判明确判断「做完了没有」？如果不能，先把任务拆到能验证为止。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;裁判独立吗？&lt;/strong&gt; 千万别让主 agent 自我批判。用一个独立的 grader 模型或子 agent，在干净的上下文里打分。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;循环有边界吗？&lt;/strong&gt; &lt;code&gt;max_iterations&lt;/code&gt;、时间上限、退出条件——别让它无限跑。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;记忆走完链路了吗？&lt;/strong&gt; 检查你的 agent 是停在「记笔记」，还是真的在「失败 → 调查 → 验证 → 提炼 → 查阅」。停在第一步的记忆约等于没有。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;想上手的话，可以直接问最新版的 Claude Code——它能用内置的 &lt;code&gt;/claude-api&lt;/code&gt; skill 告诉你 Fable 5 的 prompting 最佳实践、&lt;code&gt;/goal&lt;/code&gt;、Claude Managed Agents 这些 API 特性怎么用。&lt;/p&gt;
&lt;p&gt;说到底，&lt;strong&gt;写 prompt 是在赌一次直觉，设计循环是在搭一套能自我改进的系统。&lt;/strong&gt; 模型越强，后者的回报越高。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;原推文：&lt;a class="link" href="https://x.com/RLanceMartin/status/2064397389189071163" target="_blank" rel="noopener"
 &gt;Lance Martin (@RLanceMartin) — Designing loops with Fable 5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Parameter Golf：开源 ML 工程挑战（16MB 模型，10 分钟，8×H100）&lt;/li&gt;
&lt;li&gt;Continual Learning Bench 1.0：跨会话记忆基准&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>agent-skills 项目手册：六层架构的极致颗粒度参考</title><link>https://guige.ai/p/agent-skills-handbook/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://guige.ai/p/agent-skills-handbook/</guid><description>&lt;img src="https://guige.ai/" alt="Featured image of post agent-skills 项目手册：六层架构的极致颗粒度参考" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;本手册是 &lt;a class="link" href="https://guige.ai/p/agent-skills-architecture/" &gt;《从使用者到学习者：agent-skills 架构深度剖析与高手思维体系》&lt;/a&gt; 的配套参考。文章型负责讲清楚&amp;quot;为什么&amp;quot;，本手册负责讲清楚&amp;quot;是什么、在哪里、如何展开&amp;quot;。&lt;/p&gt;
&lt;p&gt;适用场景：回顾某一层的具体设计、查阅某个文件的角色、在自己的项目里复刻某一层时作为模板。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="手册封面" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-handbook/cover.webp" srcset="https://guige.ai/p/agent-skills-handbook/cover_hu_66da8885708f8538.webp 800w, https://guige.ai/p/agent-skills-handbook/cover_hu_50384855d9da8588.webp 1600w, https://guige.ai/p/agent-skills-handbook/cover.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;h2 id="导读如何使用本手册"&gt;导读｜如何使用本手册
&lt;/h2&gt;&lt;p&gt;本手册按 agent-skills 的层级组织，每节自包含。建议查阅方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想了解整体结构 → 第 1 节《架构总览》&lt;/li&gt;
&lt;li&gt;想查某一层 → 直接跳对应层级&lt;/li&gt;
&lt;li&gt;想找设计模式 → 翻每节末尾的&amp;quot;经验与可复用模板&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每一节的固定结构：&lt;/p&gt;
&lt;ol&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;li&gt;&lt;strong&gt;核心机制&lt;/strong&gt; — 关键文件逐项拆解&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;li&gt;&lt;strong&gt;经验与可复用模板&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

 &lt;blockquote&gt;
 &lt;p&gt;本手册的写法是客观第三人称。文章型《从使用者到学习者》是鬼哥的笔记体；如果你想读叙事版本，请翻 &lt;a class="link" href="https://guige.ai/p/agent-skills-architecture/" &gt;文章型&lt;/a&gt;。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-架构总览"&gt;1. 架构总览
&lt;/h2&gt;&lt;h3 id="11-项目定位"&gt;1.1 项目定位
&lt;/h3&gt;&lt;p&gt;agent-skills 是一个&lt;strong&gt;给 AI 编程代理使用的工程方法论文件包&lt;/strong&gt;，由 Google 资深工程师 Addy Osmani 开源在 &lt;a class="link" href="https://github.com/addyosmani/agent-skills" target="_blank" rel="noopener"
 &gt;github.com/addyosmani/agent-skills&lt;/a&gt;。它不是工具、不是框架、不是 SDK——它是一组结构化的 Markdown 文件 + 少量 Bash hook 脚本，靠 Claude Code 这类 AI agent runtime 的&amp;quot;skill 自动加载&amp;quot;+&amp;ldquo;slash command&amp;rdquo;+&amp;ldquo;hook&amp;quot;机制生效。&lt;/p&gt;
&lt;h3 id="12-完整目录树"&gt;1.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;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;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;span class="lnt"&gt;44
&lt;/span&gt;&lt;span class="lnt"&gt;45
&lt;/span&gt;&lt;span class="lnt"&gt;46
&lt;/span&gt;&lt;span class="lnt"&gt;47
&lt;/span&gt;&lt;span class="lnt"&gt;48
&lt;/span&gt;&lt;span class="lnt"&gt;49
&lt;/span&gt;&lt;span class="lnt"&gt;50
&lt;/span&gt;&lt;span class="lnt"&gt;51
&lt;/span&gt;&lt;span class="lnt"&gt;52
&lt;/span&gt;&lt;span class="lnt"&gt;53
&lt;/span&gt;&lt;span class="lnt"&gt;54
&lt;/span&gt;&lt;span class="lnt"&gt;55
&lt;/span&gt;&lt;span class="lnt"&gt;56
&lt;/span&gt;&lt;span class="lnt"&gt;57
&lt;/span&gt;&lt;span class="lnt"&gt;58
&lt;/span&gt;&lt;span class="lnt"&gt;59
&lt;/span&gt;&lt;span class="lnt"&gt;60
&lt;/span&gt;&lt;span class="lnt"&gt;61
&lt;/span&gt;&lt;span class="lnt"&gt;62
&lt;/span&gt;&lt;span class="lnt"&gt;63
&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-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;skills&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 class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;CLAUDE&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;44&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;README&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="err"&gt;（项目说明，本手册不展开）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;skills&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="err"&gt;个&lt;/span&gt; &lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;using&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;skills&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="err"&gt;行（&lt;/span&gt;&lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;skill&lt;/span&gt;&lt;span class="err"&gt;）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;201&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;interview&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;me&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;idea&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;refine&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;planning&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;breakdown&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;incremental&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;implementation&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;engineering&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;doubt&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;frontend&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ui&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;engineering&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;interface&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;design&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;testing&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;devtools&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;debugging&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;recovery&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;review&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;quality&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;simplification&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;hardening&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;performance&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;optimization&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;versioning&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;ci&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;automation&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;deprecation&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;migration&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;documentation&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;adrs&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;shipping&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;launch&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="err"&gt;个&lt;/span&gt; &lt;span class="n"&gt;persona&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;README&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;README&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt; &lt;span class="err"&gt;行（编排宪法）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;reviewer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;97&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;auditor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;101&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;engineer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;95&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;references&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="err"&gt;个支撑文件（无&lt;/span&gt; &lt;span class="n"&gt;frontmatter&lt;/span&gt;&lt;span class="err"&gt;）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;accessibility&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;checklist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;160&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;performance&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;checklist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;153&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;checklist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;134&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;testing&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;patterns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;236&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;orchestration&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;patterns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;370&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;hooks&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="err"&gt;个&lt;/span&gt; &lt;span class="n"&gt;hook&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="err"&gt;文档&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="err"&gt;测试&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;hooks&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="err"&gt;行（插件级注册）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="mi"&gt;46&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;sdd&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;pre&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="mi"&gt;106&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;sdd&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="mi"&gt;135&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;SDD&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;CACHE&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;167&lt;/span&gt; &lt;span class="err"&gt;行（文档）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;simplify&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ignore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="mi"&gt;302&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;simplify&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ignore&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="mi"&gt;247&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;SIMPLIFY&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;IGNORE&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;90&lt;/span&gt; &lt;span class="err"&gt;行（文档）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;claude&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;commands&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="err"&gt;个&lt;/span&gt; &lt;span class="n"&gt;slash&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;plan&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;review&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;simplify&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt; &lt;span class="err"&gt;行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;ship&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="mi"&gt;73&lt;/span&gt; &lt;span class="err"&gt;行（&lt;/span&gt;&lt;span class="n"&gt;fan&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt; &lt;span class="err"&gt;编排器）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;docs&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="err"&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;img alt="完整目录树" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-handbook/directory-tree.webp" srcset="https://guige.ai/p/agent-skills-handbook/directory-tree_hu_30e2d457a7830d09.webp 800w, https://guige.ai/p/agent-skills-handbook/directory-tree_hu_be56393f4883916d.webp 1600w, https://guige.ai/p/agent-skills-handbook/directory-tree.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;h3 id="13-六层架构--横切-hooks"&gt;1.3 六层架构 + 横切 hooks
&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;th&gt;职责&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;Layer 0&lt;/td&gt;
 &lt;td&gt;CLAUDE.md&lt;/td&gt;
 &lt;td&gt;仓库总入口（NAV）&lt;/td&gt;
 &lt;td&gt;always in context&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;44 行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Layer 1&lt;/td&gt;
 &lt;td&gt;using-agent-skills&lt;/td&gt;
 &lt;td&gt;路由 + 行为宪法&lt;/td&gt;
 &lt;td&gt;session start hook 注入&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;~180 行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Layer 2&lt;/td&gt;
 &lt;td&gt;.claude/commands/&lt;/td&gt;
 &lt;td&gt;用户显式入口（WHEN）&lt;/td&gt;
 &lt;td&gt;用户 &lt;code&gt;/&lt;/code&gt; 触发&lt;/td&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;td&gt;15-75 行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Layer 3&lt;/td&gt;
 &lt;td&gt;agents/&lt;/td&gt;
 &lt;td&gt;视角与输出格式（WHO）&lt;/td&gt;
 &lt;td&gt;command 派发或显式调用&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;~100 行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Layer 4&lt;/td&gt;
 &lt;td&gt;skills/&lt;/td&gt;
 &lt;td&gt;流程方法论（HOW）&lt;/td&gt;
 &lt;td&gt;描述匹配或显式调用&lt;/td&gt;
 &lt;td&gt;21&lt;/td&gt;
 &lt;td&gt;100-300 行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Layer 5&lt;/td&gt;
 &lt;td&gt;references/&lt;/td&gt;
 &lt;td&gt;清单与模式（DATA）&lt;/td&gt;
 &lt;td&gt;skill 文件指向后按需 Read&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;134-370 行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Layer X&lt;/td&gt;
 &lt;td&gt;hooks/&lt;/td&gt;
 &lt;td&gt;横切干预（AOP）&lt;/td&gt;
 &lt;td&gt;事件触发&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;24-302 行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="14-跨层引用关系网"&gt;1.4 跨层引用关系网
&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;th&gt;引用方式&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;CLAUDE.md&lt;/td&gt;
 &lt;td&gt;skills/*&lt;/td&gt;
 &lt;td&gt;列名 + schema 强制&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;using-agent-skills&lt;/td&gt;
 &lt;td&gt;skills/*&lt;/td&gt;
 &lt;td&gt;决策树 + 名称&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;commands/*&lt;/td&gt;
 &lt;td&gt;skills/*&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Invoke the agent-skills:X skill&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;commands/ship.md&lt;/td&gt;
 &lt;td&gt;agents/*&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;subagent_type: code-reviewer&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;agents/*&lt;/td&gt;
 &lt;td&gt;skills/*&lt;/td&gt;
 &lt;td&gt;通过 README 中的 Composition 块&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;agents/*&lt;/td&gt;
 &lt;td&gt;references/orchestration-patterns.md&lt;/td&gt;
 &lt;td&gt;文本路径&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;skills/test-driven-development&lt;/td&gt;
 &lt;td&gt;references/testing-patterns.md&lt;/td&gt;
 &lt;td&gt;文本路径&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;skills/shipping-and-launch&lt;/td&gt;
 &lt;td&gt;references/{security,performance,accessibility}-checklist.md&lt;/td&gt;
 &lt;td&gt;文本路径&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;skills/frontend-ui-engineering&lt;/td&gt;
 &lt;td&gt;references/accessibility-checklist.md&lt;/td&gt;
 &lt;td&gt;文本路径&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;skills/code-review-and-quality&lt;/td&gt;
 &lt;td&gt;references/{security,performance}-checklist.md&lt;/td&gt;
 &lt;td&gt;文本路径&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;skills/security-and-hardening&lt;/td&gt;
 &lt;td&gt;references/security-checklist.md&lt;/td&gt;
 &lt;td&gt;文本路径&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;skills/performance-optimization&lt;/td&gt;
 &lt;td&gt;references/performance-checklist.md&lt;/td&gt;
 &lt;td&gt;文本路径&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;skills/doubt-driven-development&lt;/td&gt;
 &lt;td&gt;references/orchestration-patterns.md&lt;/td&gt;
 &lt;td&gt;文本路径（×2）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hooks/session-start.sh&lt;/td&gt;
 &lt;td&gt;skills/using-agent-skills&lt;/td&gt;
 &lt;td&gt;运行时 cat 注入&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hooks/sdd-cache-*.sh&lt;/td&gt;
 &lt;td&gt;skills/source-driven-development&lt;/td&gt;
 &lt;td&gt;拦截 WebFetch&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;hooks/simplify-ignore.sh&lt;/td&gt;
 &lt;td&gt;skills/code-simplification&lt;/td&gt;
 &lt;td&gt;拦截 Read/Edit/Write&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="15-token-加载预算"&gt;1.5 token 加载预算
&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;th&gt;体量&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Session 启动后立刻&lt;/td&gt;
 &lt;td&gt;CLAUDE.md&lt;/td&gt;
 &lt;td&gt;44 行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Session 启动 hook 注入&lt;/td&gt;
 &lt;td&gt;using-agent-skills&lt;/td&gt;
 &lt;td&gt;~180 行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;用户触发 &lt;code&gt;/command&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;对应命令 + 关联 skill&lt;/td&gt;
 &lt;td&gt;15-75 + 100-300 行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AI 决策时按需读取&lt;/td&gt;
 &lt;td&gt;具体 skill&lt;/td&gt;
 &lt;td&gt;100-300 行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AI 执行 skill 时按需读取&lt;/td&gt;
 &lt;td&gt;关联 reference&lt;/td&gt;
 &lt;td&gt;134-370 行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;整套设计的核心：&lt;strong&gt;总在 context 的东西必须极短，越深的层加载得越少。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="2-layer-0claudemd"&gt;2. Layer 0｜CLAUDE.md
&lt;/h2&gt;&lt;h3 id="21-定位与体量"&gt;2.1 定位与体量
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;文件路径&lt;/strong&gt;：仓库根目录 &lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;行数&lt;/strong&gt;：44 行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加载时机&lt;/strong&gt;：所有 Claude Code session always in context&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;角色&lt;/strong&gt;：仓库的&amp;quot;总入口 / 物理导航 / schema 强制者&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不做的事&lt;/strong&gt;：不重复任何下游内容、不教学、不解释动机&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-完整结构5-段"&gt;2.2 完整结构（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;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;/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 class="gh"&gt;# agent-skills
&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;This is the agent-skills project — a collection of production-grade engineering skills for AI coding agents.
&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;## Project Structure
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ASCII 目录树，6 行]
&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;## Skills by Phase
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[6 个阶段 + 21 个 skill 名]
&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;## Conventions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[6 条 schema 约束]
&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;## Commands
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[2 条：npm test 不适用 + Validate 方式]
&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;## Boundaries
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[3 条：1 Always + 2 Never]
&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="23-五段逐节拆解"&gt;2.3 五段逐节拆解
&lt;/h3&gt;&lt;h4 id="231-section-1-project-structure"&gt;2.3.1 Section 1: Project Structure
&lt;/h4&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-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;skills&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;Core&lt;/span&gt; &lt;span class="n"&gt;skills&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;Reusable&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="n"&gt;personas&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;reviewer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;engineer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;auditor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;hooks&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;Session&lt;/span&gt; &lt;span class="n"&gt;lifecycle&lt;/span&gt; &lt;span class="n"&gt;hooks&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;claude&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;commands&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;Slash&lt;/span&gt; &lt;span class="n"&gt;commands&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;plan&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;review&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;simplify&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ship&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;references&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;Supplementary&lt;/span&gt; &lt;span class="n"&gt;checklists&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;testing&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;accessibility&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;docs&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;Setup&lt;/span&gt; &lt;span class="n"&gt;guides&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;different&lt;/span&gt; &lt;span class="n"&gt;tools&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;ul&gt;
&lt;li&gt;&lt;strong&gt;每行右侧括号里直接列名&lt;/strong&gt;：&lt;code&gt;agents/&lt;/code&gt; 后面列出三个 persona 名，&lt;code&gt;commands/&lt;/code&gt; 直接列出 7 个命令——AI 不需要再 &lt;code&gt;ls&lt;/code&gt; 一次目录&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;隐式优先级&lt;/strong&gt;：skills/ 排第一，docs/ 排最后——AI 会先把注意力放到上面&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;.claude/commands/&lt;/code&gt; 用全路径&lt;/strong&gt;：因为它不在仓库根目录的一级——避免 AI 找错路径&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="232-section-2-skills-by-phase"&gt;2.3.2 Section 2: Skills by Phase
&lt;/h4&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-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Define&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;interview&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;me&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;idea&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;refine&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Plan&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;planning&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;breakdown&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;incremental&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;implementation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;interface&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;design&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Verify&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;testing&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;devtools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;debugging&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;recovery&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Review&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;review&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;quality&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;simplification&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;performance&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;optimization&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Ship&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;versioning&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;shipping&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;launch&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;code&gt;using-agent-skills/SKILL.md&lt;/code&gt; 的路由树&lt;strong&gt;完全对齐&lt;/strong&gt;——都是 6 个阶段、同样的命名、同样的归属。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;已知不一致&lt;/strong&gt;：&lt;code&gt;code-simplification&lt;/code&gt; 出现在本节的 Review 阶段，但 &lt;code&gt;using-agent-skills&lt;/code&gt; 决策树里没有出现。这是仓库中存在的真实不一致点。&lt;/p&gt;
&lt;h4 id="233-section-3-conventions核心-schema"&gt;2.3.3 Section 3: Conventions（核心 schema）
&lt;/h4&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-mysql" data-lang="mysql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Every&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skill&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lives&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;skills&lt;/span&gt;&lt;span class="o"&gt;/&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;/&lt;/span&gt;&lt;span class="n"&gt;SKILL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;&lt;span class="o"&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="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;YAML&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;frontmatter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fields&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="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Description&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;starts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;what&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skill&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;does&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;third&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;followed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;trigger&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;conditions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Use when...&amp;#34;&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="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Every&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skill&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;has&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Overview&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;When&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Use&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Common&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Rationalizations&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Red&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Flags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Verification&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="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;References&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;are&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="k"&gt;references&lt;/span&gt;&lt;span class="o"&gt;/`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inside&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;skill&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;directories&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="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Supporting&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;created&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exceeds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;lines&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;6 条规则可以拆为三类：&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;&amp;ldquo;Every skill lives in skills/&lt;name&gt;/SKILL.md&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;物理约束&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;文件头部&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;YAML frontmatter with name and description&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;frontmatter 约束&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;文件头部&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Description starts with&amp;hellip;&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;描述写法&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;文件结构&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Every skill has: Overview, When to Use, Process, Common Rationalizations, Red Flags, Verification&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;核心 schema&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;跨文件&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;References are in references/, not inside skill directories&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;分层约束&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;跨文件&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Supporting files only created when content exceeds 100 lines&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;拆分阈值&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;第 4 条是真正的核心——它定义了 SKILL.md 的 6 段式结构，整个仓库 21 个 skill 必须都长这样。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;例外：&lt;code&gt;using-agent-skills/SKILL.md&lt;/code&gt; 本身不遵守这个 schema，它有自己的特殊段（Skill Discovery、Core Operating Behaviors、Failure Modes、Lifecycle Sequence），见 &lt;a class="link" href="#3-layer-1using-agent-skills" &gt;Layer 1&lt;/a&gt;。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="CLAUDE.md 五段拆解" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-handbook/claude-md-detailed.webp" srcset="https://guige.ai/p/agent-skills-handbook/claude-md-detailed_hu_da857483d5041bb4.webp 800w, https://guige.ai/p/agent-skills-handbook/claude-md-detailed_hu_7494ded2abd3af6.webp 1600w, https://guige.ai/p/agent-skills-handbook/claude-md-detailed.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;h4 id="234-section-4-commands"&gt;2.3.4 Section 4: Commands
&lt;/h4&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;- `npm test` — Not applicable (this is a documentation project)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Validate: Check that all SKILL.md files have valid YAML frontmatter with name and description
&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;只有 2 行，设计意图：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;显式声明 &amp;ldquo;Not applicable&amp;rdquo;&lt;/strong&gt;：很多模板会留空，导致 AI 浪费时间猜测；这里直接告诉 AI &amp;ldquo;别想跑 npm test&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;替代验证方式&lt;/strong&gt;：给出仓库实际的&amp;quot;测试&amp;quot;是 frontmatter 校验——这是文档型仓库的特殊做法&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="235-section-5-boundaries"&gt;2.3.5 Section 5: Boundaries
&lt;/h4&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;- Always: Follow the skill-anatomy.md format for new skills
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Never: Add skills that are vague advice instead of actionable processes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Never: Duplicate content between skills — reference other skills instead
&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;3 条规则，其中：&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;Always: skill-anatomy 格式&lt;/td&gt;
 &lt;td&gt;防止贡献者发明新结构&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Never: vague advice&lt;/td&gt;
 &lt;td&gt;防止 skill 变成空话&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Never: duplicate content&lt;/td&gt;
 &lt;td&gt;防止跨 skill 内容漂移&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;第 3 条 &amp;ldquo;Never: Duplicate content&amp;rdquo; 是整个仓库的&amp;quot;指针架构&amp;quot;根源&lt;/strong&gt;——它直接驱动了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;commands 委托给 skills（不复制方法论）&lt;/li&gt;
&lt;li&gt;skills 委托给 references（不内嵌清单）&lt;/li&gt;
&lt;li&gt;personas 委托给 skills（不复制流程）&lt;/li&gt;
&lt;li&gt;hooks 委托给协议（不发明新通信机制）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="24-设计取舍"&gt;2.4 设计取舍
&lt;/h3&gt;&lt;h4 id="取舍-1-claudemd-是导航层不是内容层"&gt;取舍 1: CLAUDE.md 是&amp;quot;导航层&amp;quot;，不是&amp;quot;内容层&amp;quot;
&lt;/h4&gt;&lt;p&gt;最关键的设计判断：&lt;strong&gt;CLAUDE.md 不重复任何下游内容&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;CLAUDE.md 每次对话都会自动加载到 context——&lt;strong&gt;每多写一行就有 N 次重复的 token 成本&lt;/strong&gt;。所以它必须极致克制。&lt;/p&gt;
&lt;h4 id="取舍-2-三段式-boundary-而非四段式"&gt;取舍 2: 三段式 Boundary 而非四段式
&lt;/h4&gt;&lt;p&gt;&lt;code&gt;spec-driven-development&lt;/code&gt; 自身倡导&lt;strong&gt;三层 boundary&lt;/strong&gt;（Always / Ask first / Never），但 CLAUDE.md 只用了&lt;strong&gt;两层&lt;/strong&gt;（Always / Never），省掉了 Ask first。&lt;/p&gt;
&lt;p&gt;可能的解释：CLAUDE.md 定义的是&amp;quot;贡献新 skill 时不可协商的约束&amp;quot;，没有&amp;quot;协商空间&amp;quot;；&amp;ldquo;Ask first&amp;rdquo; 适合&lt;strong&gt;业务边界&lt;/strong&gt;，不适合&lt;strong&gt;结构约束&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="25-注意事项"&gt;2.5 注意事项
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Conventions 第 4 条的 schema 不允许例外&lt;/strong&gt;——但 &lt;code&gt;using-agent-skills&lt;/code&gt; 自己破坏了它。这种&amp;quot;meta-skill 的例外&amp;quot;没有在 CLAUDE.md 明确声明，是隐性约定&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;skill-anatomy.md&amp;rdquo; 引用没给出路径&lt;/strong&gt;——AI 找它需要靠 grep&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills by Phase 与决策树不一致&lt;/strong&gt;（&lt;code&gt;code-simplification&lt;/code&gt; 缺失）——维护时需要双地更新&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="26-经验与可复用模板"&gt;2.6 经验与可复用模板
&lt;/h3&gt;&lt;h4 id="可复用的-claudemd-模板"&gt;可复用的 CLAUDE.md 模板
&lt;/h4&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;/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 class="gh"&gt;# [Project Name]
&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;[一句话定位，不超过 30 字]
&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;## Project Structure
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ASCII 树，每行一个目录 + 一句话描述，最多 8 行]
&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;## [Categorical Index]
&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Conventions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [文件位置约束]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [文件头部约束]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [文件内容约束]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&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="gu"&gt;## Commands
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [跑测试的命令]（或显式声明 &amp;#34;Not applicable&amp;#34;）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&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="gu"&gt;## Boundaries
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Always: [硬规则]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Ask first: [软规则] ← 可选
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Never: [禁止]
&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;总长度 &amp;lt; 60 行&lt;/li&gt;
&lt;li&gt;只放&amp;quot;AI 入仓必须知道&amp;quot;的信息&lt;/li&gt;
&lt;li&gt;不放教程、不放示例、不放动机说明&lt;/li&gt;
&lt;li&gt;任何超过一行的内容都应该拆到下游文件&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="3-layer-1using-agent-skills"&gt;3. Layer 1｜using-agent-skills
&lt;/h2&gt;&lt;h3 id="31-定位与体量"&gt;3.1 定位与体量
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;文件路径&lt;/strong&gt;：&lt;code&gt;skills/using-agent-skills/SKILL.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;行数&lt;/strong&gt;：~180 行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加载时机&lt;/strong&gt;：每个新会话由 &lt;code&gt;hooks/session-start.sh&lt;/code&gt; 强制注入&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;角色&lt;/strong&gt;：路由器 + 行为宪法（meta-skill）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;特殊性&lt;/strong&gt;：它是唯一一个不遵守 CLAUDE.md 6 段式 schema 的 skill&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="32-双重职责"&gt;3.2 双重职责
&lt;/h3&gt;&lt;h4 id="321-职责一skill-router路由器"&gt;3.2.1 职责一：Skill Router（路由器）
&lt;/h4&gt;&lt;p&gt;完整决策树（位于 SKILL.md 第 14-39 行）：&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;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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="n"&gt;arrives&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Don&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;t know what you want yet? ──────→ interview-me&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Have&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;rough&lt;/span&gt; &lt;span class="n"&gt;concept&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;need&lt;/span&gt; &lt;span class="n"&gt;variants&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;idea&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;refine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;New&lt;/span&gt; &lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;change&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;──→&lt;/span&gt; &lt;span class="n"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Have&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;need&lt;/span&gt; &lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;──────→&lt;/span&gt; &lt;span class="n"&gt;planning&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;breakdown&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Implementing&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;────────────→&lt;/span&gt; &lt;span class="n"&gt;incremental&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;implementation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;UI&lt;/span&gt; &lt;span class="n"&gt;work&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;─────────────────→&lt;/span&gt; &lt;span class="n"&gt;frontend&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ui&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;engineering&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;API&lt;/span&gt; &lt;span class="n"&gt;work&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;────────────────→&lt;/span&gt; &lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;interface&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;design&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Need&lt;/span&gt; &lt;span class="n"&gt;better&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;─────→&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;engineering&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Need&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;verified&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;───→&lt;/span&gt; &lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;Stakes&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;unfamiliar&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;──→&lt;/span&gt; &lt;span class="n"&gt;doubt&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Writing&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;running&lt;/span&gt; &lt;span class="n"&gt;tests&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;────────→&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;Browser&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;based&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;───────────→&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;testing&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;devtools&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Something&lt;/span&gt; &lt;span class="n"&gt;broke&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;──────────────→&lt;/span&gt; &lt;span class="n"&gt;debugging&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;recovery&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Reviewing&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;───────────────→&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;review&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;quality&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Security&lt;/span&gt; &lt;span class="n"&gt;concerns&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;───────→&lt;/span&gt; &lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;hardening&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="ne"&gt;Performance&lt;/span&gt; &lt;span class="n"&gt;concerns&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;────→&lt;/span&gt; &lt;span class="n"&gt;performance&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;optimization&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Committing&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;branching&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;─────────→&lt;/span&gt; &lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;versioning&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;CI&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;CD&lt;/span&gt; &lt;span class="n"&gt;pipeline&lt;/span&gt; &lt;span class="n"&gt;work&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;──────────→&lt;/span&gt; &lt;span class="n"&gt;ci&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;automation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Writing&lt;/span&gt; &lt;span class="n"&gt;docs&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ADRs&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;───────────→&lt;/span&gt; &lt;span class="n"&gt;documentation&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;adrs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;Deploying&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;launching&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;─────────→&lt;/span&gt; &lt;span class="n"&gt;shipping&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;launch&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;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;强迫读者走唯一路径，列表会让人想选多个&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;父节点 → 子节点细化&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;实现代码&lt;/code&gt; 下嵌套 UI/API/Context，符合 AI 的层次推理习惯&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;问句触发而非任务描述&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;Something broke?&amp;rdquo; 比 &amp;ldquo;debugging task&amp;rdquo; 更贴近真实对话&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;code&gt;code-simplification&lt;/code&gt; 没有出现在树里（只在 Quick Reference 表里）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;deprecation-and-migration&lt;/code&gt; 没有出现在树里&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="322-职责二core-operating-behaviors行为宪法"&gt;3.2.2 职责二：Core Operating Behaviors（行为宪法）
&lt;/h4&gt;&lt;p&gt;6 条不可协商的行为约束：&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-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 1. Surface Assumptions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[要求 AI 在实施前显式列假设]
&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;### 2. Manage Confusion Actively
&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 3. Push Back When Warranted
&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 4. Enforce Simplicity
&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 5. Maintain Scope Discipline
&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 6. Verify, Don&amp;#39;t Assume
&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;每一条都精确对抗一个 AI 缺陷：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;行为&lt;/th&gt;
 &lt;th&gt;对抗的 AI 缺陷&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1. Surface Assumptions&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;静默填充&amp;quot;歧义&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2. Manage Confusion Actively&lt;/td&gt;
 &lt;td&gt;矛盾时&amp;quot;就近取一&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3. Push Back&lt;/td&gt;
 &lt;td&gt;奉承倾向（sycophancy）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4. Enforce Simplicity&lt;/td&gt;
 &lt;td&gt;过度工程化倾向&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;5. Scope Discipline&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;顺手重构&amp;quot;倾向&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;6. Verify, Don&amp;rsquo;t Assume&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;看起来对就完成了&amp;quot;倾向&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;每一条都有：&lt;strong&gt;正例/反例对比 + 具体的判断触发词&lt;/strong&gt;（如 &amp;ldquo;quantify when possible&amp;rdquo;、&amp;ldquo;Would a staff engineer say&amp;hellip;&amp;quot;）。这是让约束真正可执行的关键。&lt;/p&gt;
&lt;h3 id="33-failure-modes10-条失败模式"&gt;3.3 Failure Modes（10 条失败模式）
&lt;/h3&gt;&lt;p&gt;文件末尾还有一份 10 条 Failure Modes（位于 SKILL.md 第 110-123 行），与 6 条行为形成镜像：&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;/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. Making wrong assumptions without checking
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. Not managing your own confusion — plowing ahead when lost
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Not surfacing inconsistencies you notice
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. Not presenting tradeoffs on non-obvious decisions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. Being sycophantic (&amp;#34;Of course!&amp;#34;) to approaches with clear problems
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6. Overcomplicating code and APIs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;7. Modifying code or comments orthogonal to the task
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8. Removing things you don&amp;#39;t fully understand
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;9. Building without a spec because &amp;#34;it&amp;#39;s obvious&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;10. Skipping verification because &amp;#34;it looks right&amp;#34;
&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;行为 1（Surface Assumptions）→ 失败 1+3&lt;/li&gt;
&lt;li&gt;行为 3（Push Back）→ 失败 5&lt;/li&gt;
&lt;li&gt;行为 5（Scope Discipline）→ 失败 7+8+9&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;失败 4（不呈现 tradeoff）没有对应的正面行为&lt;/strong&gt; ← 这是一个缺口&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;分工：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Common Rationalizations → 处理&amp;quot;AI 的借口&amp;rdquo;（主动跳过的想法）&lt;/li&gt;
&lt;li&gt;10 条失败模式 → 处理&amp;quot;AI 的症状&amp;rdquo;（已经在跳过的迹象）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="34-skill-rules4-条"&gt;3.4 Skill Rules（4 条）
&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-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; &lt;span class="gs"&gt;**Check for an applicable skill before starting work.**&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; &lt;span class="gs"&gt;**Skills are workflows, not suggestions.**&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; &lt;span class="gs"&gt;**Multiple skills can apply.**&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;4.&lt;/span&gt; &lt;span class="gs"&gt;**When in doubt, start with a spec.**&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="35-lifecycle-sequence"&gt;3.5 Lifecycle Sequence
&lt;/h3&gt;&lt;p&gt;文件提供了一份&amp;quot;完整功能&amp;quot;的典型 skill 调用序列（位于 SKILL.md 第 137-153 行）：&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. interview-me → Extract what the user actually wants
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. idea-refine → Refine vague ideas
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. spec-driven-development → Define what we&amp;#39;re building
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. planning-and-task-breakdown → Break into verifiable chunks
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. context-engineering → Load the right context
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6. source-driven-development → Verify against official docs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;7. incremental-implementation → Build slice by slice
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8. doubt-driven-development → Cross-examine non-trivial decisions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;9. test-driven-development → Prove each slice works
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;10. code-review-and-quality → Review before merge
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;11. git-workflow-and-versioning → Clean commit history
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;12. documentation-and-adrs → Document decisions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;13. shipping-and-launch → Deploy safely
&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;：&amp;ldquo;Not every task needs every skill. A bug fix might only need: &lt;code&gt;debugging-and-error-recovery&lt;/code&gt; → &lt;code&gt;test-driven-development&lt;/code&gt; → &lt;code&gt;code-review-and-quality&lt;/code&gt;.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;这一行避免了 AI 死板地套流程。&lt;/p&gt;
&lt;h3 id="36-quick-reference-表"&gt;3.6 Quick Reference 表
&lt;/h3&gt;&lt;p&gt;文件最后是一份 Quick Reference 表（位于 SKILL.md 第 159-180 行），列出全部 21 个 skill 的 phase + name + 一句话总结。&lt;strong&gt;这是仓库中唯一一份完整覆盖所有 skill 的速查表&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="37-设计取舍"&gt;3.7 设计取舍
&lt;/h3&gt;&lt;h4 id="取舍-1-不遵守自己倡导的-schema"&gt;取舍 1: 不遵守自己倡导的 schema
&lt;/h4&gt;&lt;p&gt;&lt;code&gt;using-agent-skills&lt;/code&gt; 本身不遵守 CLAUDE.md 第 30 行的 6 段式 schema。它有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Overview&lt;/li&gt;
&lt;li&gt;Skill Discovery（独有）&lt;/li&gt;
&lt;li&gt;Core Operating Behaviors（独有）&lt;/li&gt;
&lt;li&gt;Failure Modes to Avoid（独有）&lt;/li&gt;
&lt;li&gt;Skill Rules（独有）&lt;/li&gt;
&lt;li&gt;Lifecycle Sequence（独有）&lt;/li&gt;
&lt;li&gt;Quick Reference（独有）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;理由：meta-skill 是元层，不是被治理对象，可以例外。但这一例外没在 CLAUDE.md 显式声明。&lt;/p&gt;
&lt;h4 id="取舍-2-路由--治理放一起"&gt;取舍 2: 路由 + 治理放一起
&lt;/h4&gt;&lt;p&gt;为什么不拆成两个 skill？因为它们的服务对象重叠——都是为了让 AI 在每个任务的开始就做对决策。拆开后 AI 需要同时加载两份。&lt;/p&gt;
&lt;h3 id="38-注意事项"&gt;3.8 注意事项
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;决策树缺失 &lt;code&gt;code-simplification&lt;/code&gt; 和 &lt;code&gt;deprecation-and-migration&lt;/code&gt;&lt;/strong&gt;——AI 走树时这两个 skill 可能被忽略&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6 条行为是&amp;quot;硬约束&amp;rdquo;&lt;/strong&gt;，但文件没有声明优先级冲突时怎么办（例如&amp;quot;Push Back&amp;quot; vs &amp;ldquo;Scope Discipline&amp;rdquo;——发现 scope 外问题该不该指出？）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lifecycle Sequence 容易被 AI 当成必走流程&lt;/strong&gt;，但作者明确写了&amp;quot;Not every task needs every skill&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="39-经验与可复用模板"&gt;3.9 经验与可复用模板
&lt;/h3&gt;&lt;h4 id="meta-skill-应该包含的元素"&gt;Meta-skill 应该包含的元素
&lt;/h4&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;✓ 路由机制（让 AI 知道&amp;#34;去哪里&amp;#34;）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;✓ 全局约束（让 AI 知道&amp;#34;怎么做&amp;#34;）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;✓ 失效模式（让 AI 知道&amp;#34;避什么&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;✗ 不要包含具体的实现步骤（那是子 skill 的职责）
&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;✗ 不要包含跨越多个 skill 的冗余内容（维护负担）
&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;hr&gt;
&lt;h2 id="4-layer-2claudecommands"&gt;4. Layer 2｜.claude/commands/
&lt;/h2&gt;&lt;h3 id="41-定位与体量"&gt;4.1 定位与体量
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;目录路径&lt;/strong&gt;：&lt;code&gt;.claude/commands/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文件数&lt;/strong&gt;：7 个 &lt;code&gt;.md&lt;/code&gt; 文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;行数范围&lt;/strong&gt;：15-75 行（除 ship 外均极度克制）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加载时机&lt;/strong&gt;：用户输入 &lt;code&gt;/&amp;lt;name&amp;gt;&lt;/code&gt; 时触发&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;角色&lt;/strong&gt;：用户显式入口 + skill 激活快捷键&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="42-完整命令清单"&gt;4.2 完整命令清单
&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;th&gt;主调 skill&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;/spec&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;17&lt;/td&gt;
 &lt;td&gt;spec-driven-development&lt;/td&gt;
 &lt;td&gt;单 skill 包装&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/plan&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;16&lt;/td&gt;
 &lt;td&gt;planning-and-task-breakdown&lt;/td&gt;
 &lt;td&gt;单 skill 包装&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/build&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;19&lt;/td&gt;
 &lt;td&gt;incremental-implementation + TDD&lt;/td&gt;
 &lt;td&gt;双 skill 并联&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/test&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;20&lt;/td&gt;
 &lt;td&gt;TDD（+ browser-testing 条件）&lt;/td&gt;
 &lt;td&gt;主 skill + 兜底&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/review&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;17&lt;/td&gt;
 &lt;td&gt;code-review-and-quality&lt;/td&gt;
 &lt;td&gt;单 skill 包装&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/code-simplify&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;23&lt;/td&gt;
 &lt;td&gt;code-simplification&lt;/td&gt;
 &lt;td&gt;单 skill 包装&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/ship&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;73&lt;/td&gt;
 &lt;td&gt;shipping-and-launch + 3 personas&lt;/td&gt;
 &lt;td&gt;Fan-out 编排器&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="43-命令文件结构"&gt;4.3 命令文件结构
&lt;/h3&gt;&lt;p&gt;所有 7 个命令文件遵循同一模板：&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;/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;description: &amp;lt;动词短语 + 核心交付物，一句话不超过 80 字符&amp;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;Invoke the agent-skills:&amp;lt;skill-name&amp;gt; skill[, alongside agent-skills:&amp;lt;secondary&amp;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;[一段说明：这个命令做什么，为什么用这个 skill]
&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;[步骤列表，4-8 步]
&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;[Save the output to &amp;lt;path&amp;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;Frontmatter 的极简主义：&lt;/strong&gt; 7 个命令的 frontmatter 都&lt;strong&gt;只有一个字段&lt;/strong&gt; &lt;code&gt;description&lt;/code&gt;。对比 Claude Code 支持的完整字段（&lt;code&gt;allowed-tools&lt;/code&gt;、&lt;code&gt;argument-hint&lt;/code&gt;、&lt;code&gt;model&lt;/code&gt;、&lt;code&gt;disable-model-invocation&lt;/code&gt;），这里&lt;strong&gt;全部省略&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="44-四种命令模式"&gt;4.4 四种命令模式
&lt;/h3&gt;&lt;h4 id="441-模式-1单-skill-包装5-个"&gt;4.4.1 模式 1：单 skill 包装（5 个）
&lt;/h4&gt;&lt;p&gt;&lt;code&gt;/spec&lt;/code&gt;、&lt;code&gt;/plan&lt;/code&gt;、&lt;code&gt;/review&lt;/code&gt;、&lt;code&gt;/code-simplify&lt;/code&gt; 都是这种形态。例：&lt;code&gt;spec.md&lt;/code&gt; 完整内容（17 行）：&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;/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;description: Start spec-driven development — write a structured specification before writing code
&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;Invoke the agent-skills:spec-driven-development skill.
&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;Begin by understanding what the user wants to build. Ask clarifying questions about:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; The objective and target users
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; Core features and acceptance criteria
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; Tech stack preferences and constraints
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;4.&lt;/span&gt; Known boundaries (what to always do, ask first about, and never do)
&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;Then generate a structured spec covering all six core areas: objective, commands, project structure, code style, testing strategy, and boundaries.
&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;Save the spec as SPEC.md in the project root and confirm with the user before proceeding.
&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;h4 id="442-模式-2双-skill-并联build"&gt;4.4.2 模式 2：双 skill 并联（/build）
&lt;/h4&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;/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;Invoke the agent-skills:incremental-implementation skill alongside agent-skills:test-driven-development.
&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;Pick the next pending task from the plan. For each task:
&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="k"&gt;1.&lt;/span&gt; Read the task&amp;#39;s acceptance criteria
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; Load relevant context (existing code, patterns, types)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; Write a failing test for the expected behavior (RED)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;4.&lt;/span&gt; Implement the minimum code to pass the test (GREEN)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;5.&lt;/span&gt; Run the full test suite to check for regressions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;6.&lt;/span&gt; Run the build to verify compilation
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;7.&lt;/span&gt; Commit with a descriptive message
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;8.&lt;/span&gt; Mark the task complete and move to the next one
&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;If any step fails, follow the agent-skills:debugging-and-error-recovery skill.
&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;code&gt;/build&lt;/code&gt; 把&amp;quot;实现&amp;quot;和&amp;quot;测试&amp;quot;绑成一个动作，强制 RED-GREEN-REFACTOR 循环。单独跑实现不写测试是常见反模式，命令层在源头阻止它。&lt;/p&gt;
&lt;h4 id="443-模式-3主-skill--条件兜底test"&gt;4.4.3 模式 3：主 skill + 条件兜底（/test）
&lt;/h4&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;/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;Invoke the agent-skills:test-driven-development skill.
&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;For new features:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; Write tests that describe the expected behavior (they should FAIL)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; Implement the code to make them pass
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; Refactor while keeping tests green
&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;For bug fixes (Prove-It pattern):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; Write a test that reproduces the bug (must FAIL)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; Confirm the test fails
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; Implement the fix
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;4.&lt;/span&gt; Confirm the test passes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;5.&lt;/span&gt; Run the full test suite for regressions
&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;For browser-related issues, also invoke agent-skills:browser-testing-with-devtools to verify with Chrome DevTools MCP.
&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;最后一句是条件式 escalation——&amp;ldquo;如果是浏览器问题，再加挂这个 skill&amp;rdquo;。&lt;/p&gt;
&lt;h4 id="444-模式-4fan-out-编排器ship"&gt;4.4.4 模式 4：Fan-out 编排器（/ship）
&lt;/h4&gt;&lt;p&gt;这是 7 个命令里唯一超过 70 行的，因为它做的事在 skill 里做不优雅：&lt;strong&gt;并行调度 3 个 subagent&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;完整 Phase A 引文：&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Spawn three subagents concurrently using the Agent tool. &lt;strong&gt;Issue all three Agent tool calls in a single assistant turn so they execute in parallel&lt;/strong&gt; — sequential calls defeat the purpose of this command.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;3 个 subagent：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;code-reviewer&lt;/code&gt; — 五维 review（correctness / readability / architecture / security / performance）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;security-auditor&lt;/code&gt; — OWASP Top 10 + secrets + auth/authz + CVEs&lt;/li&gt;
&lt;li&gt;&lt;code&gt;test-engineer&lt;/code&gt; — 测试覆盖分析&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;关键约束：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;三个 Agent 调用必须在一个 assistant turn 里发出（否则失去并行性）&lt;/li&gt;
&lt;li&gt;Subagents cannot spawn other subagents（平台约束）&lt;/li&gt;
&lt;li&gt;三个 subagent 各自返回 report，主 agent 在 Phase B 合并&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Persona 优先级：&lt;/strong&gt; &amp;ldquo;If you&amp;rsquo;ve defined your own &lt;code&gt;code-reviewer&lt;/code&gt;, &lt;code&gt;security-auditor&lt;/code&gt;, or &lt;code&gt;test-engineer&lt;/code&gt; in &lt;code&gt;.claude/agents/&lt;/code&gt; or &lt;code&gt;~/.claude/agents/&lt;/code&gt;, those take precedence over this plugin&amp;rsquo;s versions.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Phase B 合并维度（6 项）：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Code Quality&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;li&gt;Accessibility（不由 personas 覆盖，主 agent 直接处理）&lt;/li&gt;
&lt;li&gt;Infrastructure&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Phase C 输出模板：&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;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;/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 class="gu"&gt;## Ship Decision: GO | NO-GO
&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="gu"&gt;### Blockers (must fix before ship)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [Source persona: Critical finding + file:line]
&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;### Recommended fixes (should fix before ship)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [Source persona: Important finding + file:line]
&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;### Acknowledged risks (shipping anyway)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [Risk + mitigation]
&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;### Rollback plan
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Trigger conditions: ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Rollback procedure: ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Recovery time objective: ...
&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;### Specialist reports (full)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [code-reviewer report]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [security-auditor report]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [test-engineer report]
&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;5 条强制规则：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Phase A 三个 persona 并行运行，绝不串行&lt;/li&gt;
&lt;li&gt;Persona 不能互相调用&lt;/li&gt;
&lt;li&gt;Rollback plan 在 GO 决策前是必须的&lt;/li&gt;
&lt;li&gt;任何 Critical finding 默认 NO-GO，除非用户显式接受风险&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip fan-out 的条件&lt;/strong&gt;（必须同时满足）：改动 ≤ 2 个文件、diff &amp;lt; 50 行、不涉及 auth/payments/data access/config/env&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="45-command-vs-skill-的本质区别"&gt;4.5 Command vs Skill 的本质区别
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;维度&lt;/th&gt;
 &lt;th&gt;Skill&lt;/th&gt;
 &lt;th&gt;Command&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&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;完整方法论（100-300 行）&lt;/td&gt;
 &lt;td&gt;调用配方（15-25 行）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;写给谁看&lt;/td&gt;
 &lt;td&gt;AI 模型&lt;/td&gt;
 &lt;td&gt;模型 + 人（用户要 type）&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;code&gt;/&lt;/code&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;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="46-命令覆盖图"&gt;4.6 命令覆盖图
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;有命令的 7 个 skill：&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;/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;spec-driven-development → /spec
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;planning-and-task-breakdown → /plan
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;incremental-implementation → /build (与 TDD 联调)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;test-driven-development → /test
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code-review-and-quality → /review
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code-simplification → /code-simplify
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;shipping-and-launch → /ship (并联 3 personas)
&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;没有命令的 15 个 skill：&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-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;interview&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;me&lt;/span&gt; &lt;span class="n"&gt;idea&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;refine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;engineering&lt;/span&gt; &lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;doubt&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt; &lt;span class="n"&gt;frontend&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ui&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;engineering&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;interface&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;design&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;testing&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;devtools&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;debugging&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;recovery&lt;/span&gt; &lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;hardening&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;performance&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;optimization&lt;/span&gt; &lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;versioning&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ci&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;automation&lt;/span&gt; &lt;span class="n"&gt;deprecation&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;migration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;documentation&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;adrs&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;ul&gt;
&lt;li&gt;有命令 = 用户高频显式触发 + 是多 skill 组合的入口&lt;/li&gt;
&lt;li&gt;无命令 = 自动激活更合适 / 是子能力 / 是兜底能力&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="47-命令命名的语义学"&gt;4.7 命令命名的语义学
&lt;/h3&gt;&lt;p&gt;每个命令名都对应一个&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;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/spec&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;SPEC.md&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/plan&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;tasks/plan.md + tasks/todo.md&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/build&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;代码 + 测试 + commit&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/test&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;passing tests&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/review&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;review report&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/code-simplify&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;simplified diff&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/ship&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;GO/NO-GO + rollback plan&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;没有 &lt;code&gt;/think&lt;/code&gt;、&lt;code&gt;/explore&lt;/code&gt; 这种没有产物的命令——这是一种纪律。&lt;/p&gt;
&lt;h3 id="48-注意事项"&gt;4.8 注意事项
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/test&lt;/code&gt; 与 &lt;code&gt;/build&lt;/code&gt; 内部都调用 TDD&lt;/strong&gt;——存在重叠。连续跑 &lt;code&gt;/build&lt;/code&gt; 时 TDD skill 会被重复激活&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/ship&lt;/code&gt; 的 skip-fan-out 条件可能弱化纪律&lt;/strong&gt;——任何上线都应该跑完整 checklist，但这个 &amp;ldquo;skip&amp;rdquo; 选项允许小改动跳过&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;没有 &lt;code&gt;/debug&lt;/code&gt; 命令&lt;/strong&gt;——&lt;code&gt;debugging-and-error-recovery&lt;/code&gt; 只能在 &lt;code&gt;/build&lt;/code&gt; 失败时被调用，用户独立遇到 bug 想触发 prove-it 流程时没有专用命令&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;没有 &lt;code&gt;/docs&lt;/code&gt; 命令&lt;/strong&gt;——&lt;code&gt;documentation-and-adrs&lt;/code&gt; 没有显式入口，文档容易被遗忘&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="49-可复用-command-模板"&gt;4.9 可复用 Command 模板
&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;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;/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;description: &amp;lt;动词短语 + 核心交付物，一句话不超过 80 字符&amp;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;Invoke the agent-skills:&amp;lt;skill-name&amp;gt; skill[, alongside agent-skills:&amp;lt;secondary&amp;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;&amp;lt;一段说明：这个命令做什么，为什么用这个 skill&amp;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;[For &amp;lt;case-A&amp;gt;:]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; &amp;lt;step&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; &amp;lt;step&amp;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;[For &amp;lt;case-B&amp;gt;:]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; &amp;lt;step&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; &amp;lt;step&amp;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;[If &amp;lt;condition&amp;gt; fails, follow agent-skills:&amp;lt;fallback-skill&amp;gt; skill.]
&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;Save the output to &amp;lt;path&amp;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;hr&gt;
&lt;h2 id="5-layer-3agents"&gt;5. Layer 3｜agents/
&lt;/h2&gt;&lt;h3 id="51-定位与体量"&gt;5.1 定位与体量
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;目录路径&lt;/strong&gt;：&lt;code&gt;agents/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文件数&lt;/strong&gt;：3 个 persona + 1 个 README&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;总行数&lt;/strong&gt;：413 行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加载时机&lt;/strong&gt;：作为 subagent system prompt（被 command 或用户调用时）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;角色&lt;/strong&gt;：定义&amp;quot;WHO&amp;quot;——视角与输出格式&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="52-完整文件清单"&gt;5.2 完整文件清单
&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;th&gt;角色&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;README.md&lt;/td&gt;
 &lt;td&gt;120&lt;/td&gt;
 &lt;td&gt;编排宪法 / 决策矩阵 / 反例&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;code-reviewer.md&lt;/td&gt;
 &lt;td&gt;97&lt;/td&gt;
 &lt;td&gt;资深 Staff Engineer 视角&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;security-auditor.md&lt;/td&gt;
 &lt;td&gt;101&lt;/td&gt;
 &lt;td&gt;安全工程师视角&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;test-engineer.md&lt;/td&gt;
 &lt;td&gt;95&lt;/td&gt;
 &lt;td&gt;QA 工程师视角&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="53-persona-文件的-7-段固定结构"&gt;5.3 Persona 文件的 7 段固定结构
&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;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-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;name: &amp;lt;persona-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: &amp;lt;一句话角色描述&amp;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;&lt;span class="gh"&gt;# &amp;lt;Title&amp;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;You are an experienced &amp;lt;Role&amp;gt;... ← (1) 角色设定（第一人称）
&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;## &amp;lt;Framework Name&amp;gt; ← (2) 评审维度
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 1. &amp;lt;Dimension 1&amp;gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 2. &amp;lt;Dimension 2&amp;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="gu"&gt;## Output Format ← (3) 输出分级
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Critical / Important / Suggestion 三级]
&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;## &amp;lt;Report&amp;gt; Output Template ← (4) 输出模板
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Markdown 结构]
&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;## Rules ← (5) 行为规则
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[6-7 条 numbered list]
&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;## Composition ← (6) 接线说明
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Invoke directly when: ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Invoke via: ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Do not invoke from another persona.
&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="54-三个-persona-详解"&gt;5.4 三个 Persona 详解
&lt;/h3&gt;&lt;h4 id="541-code-reviewermd"&gt;5.4.1 code-reviewer.md
&lt;/h4&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;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;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&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. Correctness
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Does the code do what the spec/task says?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Are edge cases handled (null, empty, boundary, error)?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Do tests actually verify the behavior?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Race conditions, off-by-one, state inconsistencies?
&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;### 2. Readability
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Can another engineer understand without explanation?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Names descriptive and consistent?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Control flow straightforward (no deep nesting)?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Well-organized (related code grouped)?
&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. Architecture
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Follows existing patterns or introduces new ones?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Module boundaries maintained?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Abstraction level appropriate?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Dependencies flowing in the right direction?
&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;### 4. Security
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Input validated and sanitized at boundaries?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Secrets kept out of code, logs, version control?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Auth/authz checked where needed?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Queries parameterized?
&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;### 5. Performance
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- N+1 query patterns?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Unbounded loops or fetching?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Sync operations that should be async?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Missing pagination?
&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;Critical&lt;/strong&gt; — 必须 fix（安全漏洞、数据丢失、坏功能）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Important&lt;/strong&gt; — 应该 fix（缺测试、错抽象、差错误处理）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Suggestion&lt;/strong&gt; — 考虑改进（命名、风格、可选优化）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Review Output Template：&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;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;/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 class="gu"&gt;## Review Summary
&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="gs"&gt;**Verdict:**&lt;/span&gt; APPROVE | REQUEST CHANGES
&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="gs"&gt;**Overview:**&lt;/span&gt; [1-2 sentences]
&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;### Critical Issues
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [File:line] [Description and recommended fix]
&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;### Important Issues
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [File:line] [Description and recommended fix]
&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;### Suggestions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [File:line] [Description]
&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;### What&amp;#39;s Done Well
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [Positive observation — always include at least one]
&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;### Verification Story
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Tests reviewed: [yes/no]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Build verified: [yes/no]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Security checked: [yes/no]
&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;6 条 Rules：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Review the tests first&lt;/li&gt;
&lt;li&gt;Read the spec or task description before reviewing code&lt;/li&gt;
&lt;li&gt;Every Critical and Important finding should include a specific fix recommendation&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t approve code with Critical issues&lt;/li&gt;
&lt;li&gt;Acknowledge what&amp;rsquo;s done well&lt;/li&gt;
&lt;li&gt;If uncertain, say so&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="542-security-auditormd"&gt;5.4.2 security-auditor.md
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;职责&lt;/strong&gt;：OWASP Top 10 + 漏洞检测 + 威胁建模。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7 条 Rules：&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;/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. Focus on exploitable vulnerabilities, not theoretical risks
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. Every finding must include a specific, actionable recommendation
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Provide proof of concept or exploitation scenario for Critical/High findings
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. Acknowledge good security practices
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. Check the OWASP Top 10 as a minimum baseline
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6. Review dependencies for known CVEs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;7. Never suggest disabling security controls as a &amp;#34;fix&amp;#34;
&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;Composition：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Invoke directly when: 用户想要安全焦点的审查&lt;/li&gt;
&lt;li&gt;Invoke via: &lt;code&gt;/ship&lt;/code&gt;（fan-out 并联）或未来的 &lt;code&gt;/audit&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Do not invoke from another persona&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="543-test-engineermd"&gt;5.4.3 test-engineer.md
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;职责&lt;/strong&gt;：测试策略 + 覆盖分析 + Prove-It 模式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;典型用例：&lt;/strong&gt; 测试漏洞分析（happy path / edge cases / error paths / concurrency）。&lt;/p&gt;
&lt;h3 id="55-composition-块每个-persona-的接线说明"&gt;5.5 Composition 块——每个 Persona 的&amp;quot;接线说明&amp;quot;
&lt;/h3&gt;&lt;p&gt;每个 persona 末尾的固定段：&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-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Composition
&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="k"&gt;-&lt;/span&gt; **Invoke directly when:** &amp;lt;用户什么时候直接调我&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; **Invoke via:** &amp;lt;哪些 command 包裹我&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; **Do not invoke from another persona.** &amp;lt;显式宣告&amp;#34;我不能被别的 persona 调&amp;#34;&amp;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;自文档化，新人读 persona 文件就知道它在系统中的位置&lt;/li&gt;
&lt;li&gt;防止架构腐烂——加新 persona 时必须思考接线方式&lt;/li&gt;
&lt;li&gt;减少误用——把&amp;quot;不能被 persona 调&amp;quot;显式写出&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="56-readmemd-的编排宪法"&gt;5.6 README.md 的编排宪法
&lt;/h3&gt;&lt;h4 id="561-三层定义"&gt;5.6.1 三层定义
&lt;/h4&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;Skill = HOW (workflow with steps and exit criteria)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Persona = WHO (role with perspective and output format)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Command = WHEN (user-facing entry point)
&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;h4 id="562-决策矩阵"&gt;5.6.2 决策矩阵
&lt;/h4&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Is the work a single perspective on a single artifact?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── Yes → Direct persona invocation
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── No → Are the sub-tasks independent?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── Yes → Slash command with parallel fan-out (e.g. /ship)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── No → Sequential slash commands (/spec → /plan → /build → /test → /review)
&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;h4 id="563-核心铁律"&gt;5.6.3 核心铁律
&lt;/h4&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;The user (or a slash command) is the orchestrator. Personas do not call other personas.&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;这条规则在 README 中被重复 5 次以上，背后三层原因：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;平台约束&lt;/strong&gt;：Claude Code 的 subagent 系统禁止递归（subagent 不能 spawn subagent）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;信息损耗&lt;/strong&gt;：每多一层 persona 转发就多一次&amp;quot;用自己语言重述&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;价值密度&lt;/strong&gt;：纯路由层无领域价值，应该让 command 来做&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="564-反例教学"&gt;5.6.4 反例教学
&lt;/h4&gt;&lt;p&gt;README 专门画了一段刻意的反例：&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/work-on-pr → meta-orchestrator
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ &amp;#34;this needs a review&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; code-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; meta-orchestrator (paraphrases result)
&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; user
&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;Why this fails:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pure routing layer with no domain value&lt;/li&gt;
&lt;li&gt;Adds two paraphrasing hops → information loss + 2× token cost&lt;/li&gt;
&lt;li&gt;The user already knows they want a review; let them call &lt;code&gt;/review&lt;/code&gt; directly&lt;/li&gt;
&lt;li&gt;Replicates work that slash commands and &lt;code&gt;AGENTS.md&lt;/code&gt; intent-mapping already do&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="565-subagents-vs-agent-teams"&gt;5.6.5 Subagents vs Agent Teams
&lt;/h4&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;th&gt;用途&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Subagents（默认）&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;subagent_type: code-reviewer&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不能&lt;/td&gt;
 &lt;td&gt;各自跑 → 返回 report&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Agent Teams（实验）&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;可以&lt;/td&gt;
 &lt;td&gt;competing-hypothesis 调试&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;关键设计&lt;/strong&gt;：同一个 persona 文件无需修改即可工作在两种模式下。&lt;/p&gt;
&lt;h4 id="566-plugin-限制"&gt;5.6.6 Plugin 限制
&lt;/h4&gt;
 &lt;blockquote&gt;
 &lt;p&gt;Plugin agents do not support &lt;code&gt;hooks&lt;/code&gt;, &lt;code&gt;mcpServers&lt;/code&gt;, or &lt;code&gt;permissionMode&lt;/code&gt; frontmatter — those fields are silently ignored.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="57-persona-vs-skill-的本质差异"&gt;5.7 Persona vs Skill 的本质差异
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;维度&lt;/th&gt;
 &lt;th&gt;Skill&lt;/th&gt;
 &lt;th&gt;Persona&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Frontmatter&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;name&lt;/code&gt; + &lt;code&gt;description&lt;/code&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;命令式（&amp;ldquo;Do X&amp;rdquo;）&lt;/td&gt;
 &lt;td&gt;第一人称（&amp;ldquo;You are X&amp;rdquo;）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;用途&lt;/td&gt;
 &lt;td&gt;AI 执行任务的方法论&lt;/td&gt;
 &lt;td&gt;作为 subagent 的 system prompt&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;关注点&lt;/td&gt;
 &lt;td&gt;过程（process）&lt;/td&gt;
 &lt;td&gt;视角 + 输出格式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;长度&lt;/td&gt;
 &lt;td&gt;100-300 行&lt;/td&gt;
 &lt;td&gt;90-100 行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;是否有 Output Template&lt;/td&gt;
 &lt;td&gt;一般没有&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;必须有&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="58-为什么只有-3-个-persona"&gt;5.8 为什么只有 3 个 persona？
&lt;/h3&gt;&lt;p&gt;3 个 persona 对应 &lt;code&gt;/ship&lt;/code&gt; 的 fan-out 三个独立视角：&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;Code quality (functional) ← code-reviewer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Security (adversarial) ← security-auditor
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Tests (coverage) ← test-engineer
&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;ol&gt;
&lt;li&gt;必须是独立视角（不能从其他视角派生）&lt;/li&gt;
&lt;li&gt;必须有可并行的工作内容&lt;/li&gt;
&lt;li&gt;必须有结构化的输出便于 merge&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;frontend-ui、performance、accessibility 没成为 persona 的原因：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;performance：和 code-reviewer 的 #5 dimension 重叠&lt;/li&gt;
&lt;li&gt;accessibility：在 frontend-ui skill 里覆盖，更像 checklist 而不是视角&lt;/li&gt;
&lt;li&gt;frontend-ui-engineer：是技术领域，不是&amp;quot;评审视角&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="59-注意事项"&gt;5.9 注意事项
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Output Template 是为 fan-out 编排服务的&lt;/strong&gt;——如果让随机的 AI prompt 生成 review，输出格式不固定，merge 就变成解析地狱&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Persona 与 Skill 共用相同的 frontmatter 字段&lt;/strong&gt;——但生效语义不同，容易混淆&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugin 模式不支持 hooks / mcpServers / permissionMode&lt;/strong&gt;——这些字段会被静默忽略&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="510-经验与可复用模板"&gt;5.10 经验与可复用模板
&lt;/h3&gt;&lt;h4 id="新-persona-判定标准"&gt;新 Persona 判定标准
&lt;/h4&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;/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;判定要不要新建 persona：
&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; ✓ 有可结构化的输出（可被 merge）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ 至少被一个 command 复用（否则用户直接调 skill）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ 不是&amp;#34;路由器&amp;#34;或&amp;#34;meta&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;Persona 文件必须包含：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ name + description frontmatter
&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; ✓ Framework / 评估维度
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ Output Template（结构化的）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ Rules（行为规则）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ Composition 块（接线说明）
&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;Persona 文件不应包含：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✗ 调用其他 persona 的逻辑
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✗ 大段流程步骤（应该写到 skill 里）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✗ 大段数据/清单（应该写到 references 里）
&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;hr&gt;
&lt;h2 id="6-layer-4skills"&gt;6. Layer 4｜skills/
&lt;/h2&gt;&lt;h3 id="61-定位与体量"&gt;6.1 定位与体量
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;目录路径&lt;/strong&gt;：&lt;code&gt;skills/&amp;lt;name&amp;gt;/SKILL.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文件数&lt;/strong&gt;：21 个&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;总体量&lt;/strong&gt;：每个 SKILL.md 100-300 行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加载时机&lt;/strong&gt;：描述匹配（自动）或显式调用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;角色&lt;/strong&gt;：流程方法论（HOW）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="62-完整-skill-清单按-phase-分类"&gt;6.2 完整 Skill 清单（按 phase 分类）
&lt;/h3&gt;&lt;h4 id="define定义阶段"&gt;Define（定义阶段）
&lt;/h4&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Skill&lt;/th&gt;
 &lt;th&gt;角色&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;interview-me&lt;/td&gt;
 &lt;td&gt;在写任何 plan/spec/code 前先提取用户真实意图&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;idea-refine&lt;/td&gt;
 &lt;td&gt;用结构化的发散/收敛思维精化想法&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;spec-driven-development&lt;/td&gt;
 &lt;td&gt;写结构化 spec 后再写代码&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="plan规划阶段"&gt;Plan（规划阶段）
&lt;/h4&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Skill&lt;/th&gt;
 &lt;th&gt;角色&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;planning-and-task-breakdown&lt;/td&gt;
 &lt;td&gt;把 spec 拆成小而可验证的任务&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="build构建阶段"&gt;Build（构建阶段）
&lt;/h4&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Skill&lt;/th&gt;
 &lt;th&gt;角色&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;incremental-implementation&lt;/td&gt;
 &lt;td&gt;薄垂直切片，每片测试后再扩展&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;test-driven-development&lt;/td&gt;
 &lt;td&gt;先写失败测试，再写实现&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;context-engineering&lt;/td&gt;
 &lt;td&gt;在正确时机加载正确 context&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;source-driven-development&lt;/td&gt;
 &lt;td&gt;实现前对照官方文档验证&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;doubt-driven-development&lt;/td&gt;
 &lt;td&gt;对每个非平凡决策做&amp;quot;对抗式 fresh-context review&amp;quot;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;frontend-ui-engineering&lt;/td&gt;
 &lt;td&gt;含 accessibility 的生产级 UI&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;api-and-interface-design&lt;/td&gt;
 &lt;td&gt;带清晰契约的稳定接口&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="verify验证阶段"&gt;Verify（验证阶段）
&lt;/h4&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Skill&lt;/th&gt;
 &lt;th&gt;角色&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;browser-testing-with-devtools&lt;/td&gt;
 &lt;td&gt;用 Chrome DevTools MCP 做运行时验证&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;debugging-and-error-recovery&lt;/td&gt;
 &lt;td&gt;Reproduce → localize → fix → guard&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="review评审阶段"&gt;Review（评审阶段）
&lt;/h4&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Skill&lt;/th&gt;
 &lt;th&gt;角色&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;code-review-and-quality&lt;/td&gt;
 &lt;td&gt;五维 review + 质量门&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;code-simplification&lt;/td&gt;
 &lt;td&gt;不改变行为前提下降低复杂度&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;security-and-hardening&lt;/td&gt;
 &lt;td&gt;OWASP 防御、输入验证、最小权限&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;performance-optimization&lt;/td&gt;
 &lt;td&gt;先测量，只优化重要的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="ship发布阶段"&gt;Ship（发布阶段）
&lt;/h4&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Skill&lt;/th&gt;
 &lt;th&gt;角色&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;git-workflow-and-versioning&lt;/td&gt;
 &lt;td&gt;原子 commit、整洁历史&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ci-cd-and-automation&lt;/td&gt;
 &lt;td&gt;每次变更上自动质量门&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;deprecation-and-migration&lt;/td&gt;
 &lt;td&gt;安全废弃旧接口&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;documentation-and-adrs&lt;/td&gt;
 &lt;td&gt;文档化&amp;quot;为什么&amp;quot;而不只是&amp;quot;什么&amp;quot;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;shipping-and-launch&lt;/td&gt;
 &lt;td&gt;上线前 checklist + 监控 + rollback&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="63-skillmd-强制-6-段式-schema"&gt;6.3 SKILL.md 强制 6 段式 schema
&lt;/h3&gt;&lt;p&gt;CLAUDE.md 第 30 行强制约定：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Every skill has: Overview, When to Use, Process, Common Rationalizations, Red Flags, Verification&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;每个 SKILL.md 必须按这 6 段组织：&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;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;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&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;name: &amp;lt;skill-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: &amp;lt;动词短语 + 触发条件&amp;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;&lt;span class="gh"&gt;# &amp;lt;Skill Name&amp;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="gu"&gt;## Overview
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;这个 skill 是干什么的、为什么存在&amp;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="gu"&gt;## When to Use
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &amp;lt;列出使用场景&amp;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="gs"&gt;**When NOT to use:**&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &amp;lt;列出不使用场景&amp;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="gu"&gt;## Process
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;具体步骤，可含子段&amp;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="gu"&gt;## Common Rationalizations
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| Rationalization | Reality |
&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;| &amp;lt;借口&amp;gt; | &amp;lt;反驳&amp;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="gu"&gt;## Red Flags
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &amp;lt;反模式症状&amp;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="gu"&gt;## Verification
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; &amp;lt;可测试的完成条件&amp;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;img alt="SKILL.md 强制 6 段式 schema" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-handbook/skills-schema-six-section.webp" srcset="https://guige.ai/p/agent-skills-handbook/skills-schema-six-section_hu_cf36afc26d2083f9.webp 800w, https://guige.ai/p/agent-skills-handbook/skills-schema-six-section_hu_e44f2e06e98c43b2.webp 1600w, https://guige.ai/p/agent-skills-handbook/skills-schema-six-section.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;p&gt;每一段对应一个 AI 可能犯的错：&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;Overview&lt;/td&gt;
 &lt;td&gt;AI 不理解 skill 的存在意义&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;When to Use&lt;/td&gt;
 &lt;td&gt;AI 在错误场景套用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Process&lt;/td&gt;
 &lt;td&gt;AI 跳过关键步骤&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Common Rationalizations&lt;/td&gt;
 &lt;td&gt;AI 用借口跳过整个 skill&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Red Flags&lt;/td&gt;
 &lt;td&gt;AI 在偏离时没察觉&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Verification&lt;/td&gt;
 &lt;td&gt;AI 提前宣布完成&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="64-代表性-skill-逐项拆解"&gt;6.4 代表性 Skill 逐项拆解
&lt;/h3&gt;&lt;h4 id="641-spec-driven-development教科书级-process"&gt;6.4.1 spec-driven-development（教科书级 Process）
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;Process 段的 gated workflow：&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;/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;SPECIFY ──→ PLAN ──→ TASKS ──→ IMPLEMENT
&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; Human Human Human Human
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; reviews reviews reviews reviews
&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;code&gt;Do not advance to the next phase until the current one is validated.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Phase 1 (Specify) 的 5 个技巧：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Surface Assumptions&lt;/strong&gt; — 显式列假设，末尾加 &lt;code&gt;→ Correct me now or I'll proceed with these.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Six core areas&lt;/strong&gt; — Objective / Commands / Project Structure / Code Style / Testing Strategy / Boundaries&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;三层 Boundaries&lt;/strong&gt; — Always do / Ask first / Never do&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reframe instructions as success criteria&lt;/strong&gt; — &amp;ldquo;Make it faster&amp;rdquo; → &amp;ldquo;LCP &amp;lt; 2.5s on 4G&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spec template&lt;/strong&gt; — 可复用 Markdown 模板&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Spec template：&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;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;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&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 class="gh"&gt;# Spec: [Project/Feature Name]
&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="gu"&gt;## Objective
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[What we&amp;#39;re building and why. User stories or acceptance criteria.]
&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;## Tech Stack
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Framework, language, key dependencies with versions]
&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;## Commands
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Build, test, lint, dev — full commands]
&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;## Project Structure
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Directory layout with descriptions]
&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;## Code Style
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Example snippet + key conventions]
&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;## Testing Strategy
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Framework, test locations, coverage requirements, test levels]
&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;## Boundaries
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Always: [...]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Ask first: [...]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Never: [...]
&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;## Success Criteria
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[How we&amp;#39;ll know this is done — specific, testable conditions]
&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;## Open Questions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Anything unresolved that needs human input]
&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;Common Rationalizations 表的设计模式：&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Rationalization&lt;/th&gt;
 &lt;th&gt;Reality&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;This is simple, I don&amp;rsquo;t need a spec&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;Simple tasks need acceptance criteria, just shorter spec.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;I&amp;rsquo;ll write the spec after I code it&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;That&amp;rsquo;s documentation, not specification.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;The spec will slow us down&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;15-minute spec prevents hours of rework.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;Requirements will change anyway&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;That&amp;rsquo;s why the spec is a living document.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;The user knows what they want&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;Even clear requests have implicit assumptions.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;这是整个仓库里 Common Rationalizations 的范本&lt;/strong&gt;——预判 AI 会用什么理由跳过 skill，每条反驳一句话见血。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verification checklist：&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;/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;- [ ] The spec covers all six core areas
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- [ ] The human has reviewed and approved the spec
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- [ ] Success criteria are specific and testable
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- [ ] Boundaries (Always/Ask First/Never) are defined
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- [ ] The spec is saved to a file in the repository
&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;strong&gt;boolean 可判定&lt;/strong&gt;（yes/no），没有&amp;quot;足够好&amp;quot;这种模糊词。最后一条 &lt;code&gt;saved to a file&lt;/code&gt; 把 spec 从&amp;quot;对话产物&amp;quot;提升为&amp;quot;仓库产物&amp;quot;。&lt;/p&gt;
&lt;h4 id="642-using-agent-skillsschema-例外"&gt;6.4.2 using-agent-skills（schema 例外）
&lt;/h4&gt;&lt;p&gt;这是唯一不遵守 6 段式 schema 的 skill，详见 &lt;a class="link" href="#3-layer-1using-agent-skills" &gt;Layer 1&lt;/a&gt; 节。&lt;/p&gt;
&lt;h4 id="643-code-simplification为-hook-服务的-skill"&gt;6.4.3 code-simplification（为 hook 服务的 skill）
&lt;/h4&gt;&lt;p&gt;这是少数有专门 hook 配套的 skill 之一（hooks/simplify-ignore.sh），它有特殊约束——保护代码块不能被简化。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/code-simplify&lt;/code&gt; 命令的步骤序列（来自 &lt;code&gt;.claude/commands/code-simplify.md&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;/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. Read CLAUDE.md and study project conventions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. Identify the target code — recent changes unless a broader scope is specified
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Understand the code&amp;#39;s purpose, callers, edge cases, and test coverage before touching it
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. Scan for simplification opportunities:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - Deep nesting → guard clauses or extracted helpers
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - Long functions → split by responsibility
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - Nested ternaries → if/else or switch
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - Generic names → descriptive names
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - Duplicated logic → shared functions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - Dead code → remove after confirming
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. Apply each simplification incrementally — run tests after each change
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6. Verify all tests pass, the build succeeds, and the diff is clean
&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="65-common-rationalizations-表的设计精髓"&gt;6.5 Common Rationalizations 表的设计精髓
&lt;/h3&gt;&lt;p&gt;每个 skill 末尾的 Common Rationalizations 表是 agent-skills 最具识别度的设计模式。它的设计要点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;预判 AI 偷懒的理由&lt;/strong&gt;——AI 在长 context 里会发明各种跳过 skill 的借口&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;每条反驳很短&lt;/strong&gt;——一句话见血，不啰嗦&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;两栏对照格式&lt;/strong&gt;——把&amp;quot;AI 的内心独白&amp;quot;和&amp;quot;事实&amp;quot;并置，制造认知摩擦&lt;/li&gt;
&lt;/ol&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-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| Rationalization | Reality |
&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;| &amp;#34;&amp;lt;AI 心里的借口&amp;gt;&amp;#34; | &amp;lt;一句话反驳&amp;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="66-red-flags-vs-common-rationalizations-的分工"&gt;6.6 Red Flags vs Common Rationalizations 的分工
&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;/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;Common Rationalizations → 处理&amp;#34;AI 的借口&amp;#34;（主动跳过的想法 - 思维层）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Red Flags → 处理&amp;#34;AI 的症状&amp;#34;（已经在跳过的迹象 - 行为层）
&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;Rationalization: &amp;ldquo;I&amp;rsquo;ll write the spec after I code it&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Red Flag: &amp;ldquo;Starting to write code without any written requirements&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两者本质相同，但作用时机不同：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rationalization 在 AI 即将偷懒时拦截&amp;quot;念头&amp;quot;&lt;/li&gt;
&lt;li&gt;Red Flag 在 AI 已经偷懒时识别&amp;quot;症状&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="67-verification-checklist-的可判定原则"&gt;6.7 Verification checklist 的可判定原则
&lt;/h3&gt;&lt;p&gt;每个 skill 的 Verification 段都是 &lt;strong&gt;boolean 可判定&lt;/strong&gt;的 checkbox：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✓ &amp;ldquo;The spec covers all six core areas&amp;rdquo; — yes/no&lt;/li&gt;
&lt;li&gt;✓ &amp;ldquo;The human has reviewed and approved&amp;rdquo; — yes/no&lt;/li&gt;
&lt;li&gt;✗ &amp;ldquo;The spec is good enough&amp;rdquo; — 不可接受（模糊）&lt;/li&gt;
&lt;li&gt;✗ &amp;ldquo;The reviewer is satisfied&amp;rdquo; — 不可接受（模糊）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="68-100-行拆分阈值的应用"&gt;6.8 100 行拆分阈值的应用
&lt;/h3&gt;&lt;p&gt;CLAUDE.md 规定 &amp;ldquo;Supporting files only created when content exceeds 100 lines&amp;rdquo;。这一规则的应用边界：&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;spec-driven-development 的 Process 段 200 行&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;不拆&lt;/strong&gt; — 是方法论而非数据&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;security checklist 134 行&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;拆&lt;/strong&gt; — 是清单数据&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;orchestration patterns 370 行&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;拆&lt;/strong&gt; — 是模式目录&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;单个 skill 的几十行 Process&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;不拆&lt;/strong&gt; — 维持自包含&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;关键判断&lt;/strong&gt;：100 行是 &amp;ldquo;data vs methodology&amp;rdquo; 的分界线，不是文件长度的硬上限。&lt;/p&gt;
&lt;h3 id="69-注意事项"&gt;6.9 注意事项
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;using-agent-skills&lt;/code&gt; 不遵守 schema 但没有显式声明例外&lt;/strong&gt;——这是仓库的隐性约定&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skill 之间通过 description 匹配自动激活&lt;/strong&gt;——所以 description 写法很重要（&amp;ldquo;动词短语 + 触发条件&amp;rdquo;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skill 不能直接调用其他 skill&lt;/strong&gt;——必须通过 command 或用户来编排&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;每个 skill 是自包含的&lt;/strong&gt;——但可以指向 reference 和其他 skill&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="610-经验与可复用模板"&gt;6.10 经验与可复用模板
&lt;/h3&gt;&lt;h4 id="写-skill-的检查清单"&gt;写 Skill 的检查清单
&lt;/h4&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;/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;Frontmatter:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ name 字段（与目录名一致）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ description 字段（动词短语 + 触发条件 &amp;#34;Use when...&amp;#34;）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ description 第三人称
&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;Body 6 段：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ Overview - 这个 skill 是干什么的
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ When to Use - 含 &amp;#34;When NOT to use&amp;#34; 反向条件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ Process - 具体步骤（数字列表）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ Common Rationalizations - 两栏对照表，预判 AI 借口
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ Red Flags - 反模式症状清单
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ Verification - boolean 可判定的 checkbox
&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;Process 段的关键技巧：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ Surface Assumptions 模板
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ Reframe 模糊需求为可量化条件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ 三层 Boundaries（Always / Ask first / Never）
&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; ✗ 写成 &amp;#34;vague advice&amp;#34;（CLAUDE.md Boundary 禁止）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✗ 复制其他 skill 的内容（用引用代替）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✗ 把超过 100 行的数据/清单写在 skill 里（拆到 references）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✗ 模糊 Verification（必须 boolean）
&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;hr&gt;
&lt;h2 id="7-layer-5references"&gt;7. Layer 5｜references/
&lt;/h2&gt;&lt;h3 id="71-定位与体量"&gt;7.1 定位与体量
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;目录路径&lt;/strong&gt;：&lt;code&gt;references/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文件数&lt;/strong&gt;：5 个 &lt;code&gt;.md&lt;/code&gt; 文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;行数范围&lt;/strong&gt;：134-370 行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加载时机&lt;/strong&gt;：被 skill 文件以&amp;quot;自然语言路径&amp;quot;指向后，由 AI 按需 Read&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;strong&gt;没有 YAML frontmatter&lt;/strong&gt;——不被自动发现，不被自动加载&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="72-完整文件清单"&gt;7.2 完整文件清单
&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;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;accessibility-checklist.md&lt;/td&gt;
 &lt;td&gt;160&lt;/td&gt;
 &lt;td&gt;Checklist&lt;/td&gt;
 &lt;td&gt;frontend-ui-engineering, shipping-and-launch&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;performance-checklist.md&lt;/td&gt;
 &lt;td&gt;153&lt;/td&gt;
 &lt;td&gt;Checklist&lt;/td&gt;
 &lt;td&gt;performance-optimization, code-review-and-quality, shipping-and-launch&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;security-checklist.md&lt;/td&gt;
 &lt;td&gt;134&lt;/td&gt;
 &lt;td&gt;Checklist&lt;/td&gt;
 &lt;td&gt;security-and-hardening, code-review-and-quality, shipping-and-launch&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;testing-patterns.md&lt;/td&gt;
 &lt;td&gt;236&lt;/td&gt;
 &lt;td&gt;Pattern Catalog&lt;/td&gt;
 &lt;td&gt;test-driven-development&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;orchestration-patterns.md&lt;/td&gt;
 &lt;td&gt;370&lt;/td&gt;
 &lt;td&gt;Pattern Catalog&lt;/td&gt;
 &lt;td&gt;doubt-driven-development（×2）, agents/README.md（×3）, commands/ship.md&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt="references 引用关系网" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-handbook/references-citation-network.webp" srcset="https://guige.ai/p/agent-skills-handbook/references-citation-network_hu_96c151efce144658.webp 800w, https://guige.ai/p/agent-skills-handbook/references-citation-network_hu_d89c0b810281b83.webp 1600w, https://guige.ai/p/agent-skills-handbook/references-citation-network.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;h3 id="73-两种-reference-的功能分化"&gt;7.3 两种 Reference 的功能分化
&lt;/h3&gt;&lt;h4 id="731-checklist-类security--performance--accessibility"&gt;7.3.1 Checklist 类（security / performance / accessibility）
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;形态：&lt;/strong&gt; 复选框任务列表，按主题分组。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;例：security-checklist.md 节选：&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;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-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Pre-Commit Checks
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; No secrets in code (&lt;span class="sb"&gt;`git diff --cached | grep -i &amp;#34;password\|secret\|api_key\|token&amp;#34;`&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; &lt;span class="sb"&gt;`.gitignore`&lt;/span&gt; covers: &lt;span class="sb"&gt;`.env`&lt;/span&gt;, &lt;span class="sb"&gt;`.env.local`&lt;/span&gt;, &lt;span class="sb"&gt;`*.pem`&lt;/span&gt;, &lt;span class="sb"&gt;`*.key`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; &lt;span class="sb"&gt;`.env.example`&lt;/span&gt; uses placeholder values (not real secrets)
&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;## Authentication
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Passwords hashed with bcrypt (≥12 rounds), scrypt, or argon2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Session cookies: &lt;span class="sb"&gt;`httpOnly`&lt;/span&gt;, &lt;span class="sb"&gt;`secure`&lt;/span&gt;, &lt;span class="sb"&gt;`sameSite: &amp;#39;lax&amp;#39;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Session expiration configured (reasonable max-age)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Rate limiting on login endpoint (≤10 attempts per 15 minutes)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Password reset tokens: time-limited (≤1 hour), single-use
&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;## Authorization
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Every protected endpoint checks authentication
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Every resource access checks ownership/role (prevents IDOR)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Admin endpoints require admin role verification
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; API keys scoped to minimum necessary permissions
&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;复选框 → 显式 &amp;ldquo;做过/没做&amp;rdquo; 二元状态&lt;/li&gt;
&lt;li&gt;每条都是可验证条件（含具体参数：&lt;code&gt;≥12 rounds&lt;/code&gt;、&lt;code&gt;≤10 attempts per 15 minutes&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;按主题分组（Auth / Authz / Input Validation / Headers&amp;hellip;）&lt;/li&gt;
&lt;li&gt;末尾常带工具命令（&lt;code&gt;git diff --cached | grep -i &amp;quot;password...&amp;quot;&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;触发点：&lt;/strong&gt; 上线前、review 时。&lt;/p&gt;
&lt;h4 id="732-pattern-catalog-类testing-patterns--orchestration-patterns"&gt;7.3.2 Pattern Catalog 类（testing-patterns / orchestration-patterns）
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;形态：&lt;/strong&gt; 正例 + 反例 + 决策表。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;例：orchestration-patterns.md 节选：&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;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;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&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 class="gu"&gt;### 1. Direct invocation (no orchestration)
&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;Single persona, single perspective, single artifact.
&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;user → code-reviewer → report → user
&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;Use when: one perspective on one artifact, describable in one sentence.
&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;Examples:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &amp;#34;Review this PR&amp;#34; → code-reviewer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &amp;#34;Find security issues in auth.ts&amp;#34; → security-auditor
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &amp;#34;What tests are missing for the checkout flow?&amp;#34; → test-engineer
&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;Cost: one round trip. The baseline you should always compare orchestrated patterns against.
&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;&lt;span class="gu"&gt;### 2. Single-persona slash command
&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;A slash command that wraps one persona with the project&amp;#39;s skills.
&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;/review → code-reviewer (with code-review-and-quality skill) → report
&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;Use when: the same single-persona invocation happens repeatedly with the same setup.
&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;Examples in this repo: /review, /test, /code-simplify.
&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;Cost: same as direct invocation. The slash command is just a saved prompt.
&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;Anti-signal: if the slash command&amp;#39;s body is mostly &amp;#34;decide which persona to call,&amp;#34; delete it.
&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;&lt;span class="gu"&gt;### 3. Parallel fan-out with merge
&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; ┌─→ code-reviewer ─┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/ship → fan out ───┼─→ security-auditor ─┤→ merge → go/no-go + rollback
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─→ test-engineer ─┘
&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;Use when:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; The sub-tasks are genuinely independent
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Each sub-agent benefits from its own context window
&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;命名模式（A / B / C），便于交叉引用&lt;/li&gt;
&lt;li&gt;每个模式包含：图示、用例、成本、反信号&lt;/li&gt;
&lt;li&gt;显式列出 anti-patterns&lt;/li&gt;
&lt;li&gt;偏架构 / 战略，而非战术&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="74-引用机制纯文本路径"&gt;7.4 引用机制：纯文本路径
&lt;/h3&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;/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;- &amp;#34;see `references/security-checklist.md`&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;#34;For detailed accessibility requirements...see `references/accessibility-checklist.md`&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;#34;(see references/orchestration-patterns.md)&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;#34;this skill orchestrates from the main session... references/orchestration-patterns.md&amp;#34;
&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;code&gt;include&lt;/code&gt; 指令&lt;/li&gt;
&lt;li&gt;不是 frontmatter 字段&lt;/li&gt;
&lt;li&gt;不是 MCP 资源&lt;/li&gt;
&lt;li&gt;不是 Skill 自动激活&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;就是一句&amp;quot;自然语言路径&amp;quot;&lt;/strong&gt;。AI 读到这句话，自己判断是否需要 Read。&lt;/p&gt;
&lt;h4 id="这种软引用的好处"&gt;这种&amp;quot;软引用&amp;quot;的好处
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI 决定权重&lt;/strong&gt;：context 紧张时可以不读&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;透明可控&lt;/strong&gt;：用户可以看到哪些 reference 被读了&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨工具兼容&lt;/strong&gt;：在任何能读文件的环境都能工作&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="75-orchestration-patternsmd-的特殊地位"&gt;7.5 orchestration-patterns.md 的特殊地位
&lt;/h3&gt;&lt;p&gt;这是 5 个 reference 里&lt;strong&gt;最特殊&lt;/strong&gt;的一个：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;行数最多&lt;/strong&gt;：370 行（比其他 reference 多 2-3 倍）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;被引用最多&lt;/strong&gt;：被 commands、agents、skills 三层都引用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;职责不同&lt;/strong&gt;：其他 reference 是&amp;quot;任务时查&amp;quot;，这个是&amp;quot;架构演化时查&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它的核心一句话被整个仓库反复引用：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;The user (or a slash command) is the orchestrator. Personas do not invoke other personas.&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="76-设计取舍"&gt;7.6 设计取舍
&lt;/h3&gt;&lt;h4 id="取舍-1-为什么不把-references-写进-skill"&gt;取舍 1: 为什么不把 references 写进 skill？
&lt;/h4&gt;&lt;p&gt;如果把 134-370 行的清单全塞进 skill：&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;context 浪费&lt;/td&gt;
 &lt;td&gt;每次激活 skill 都加载几百行清单&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;概念混杂&lt;/td&gt;
 &lt;td&gt;方法论（process）和数据（checklist）写在一起&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;复用困难&lt;/td&gt;
 &lt;td&gt;security checklist 要被 3 个 skill 共用，写在 skill 里就得复制三份&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;更新成本&lt;/td&gt;
 &lt;td&gt;清单变了要改三个 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;h4 id="取舍-2-100-行阈值"&gt;取舍 2: 100 行阈值
&lt;/h4&gt;&lt;p&gt;CLAUDE.md 规定：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Supporting files only created when content exceeds 100 lines&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;5 个 reference 的最小行数是 134（security-checklist），刚刚超过阈值。这说明阈值是有意控制的——不超过 100 行的内容应该直接写在 skill 里。&lt;/p&gt;
&lt;h3 id="77-注意事项"&gt;7.7 注意事项
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;没有 frontmatter&lt;/strong&gt;：不能被 Skill 系统自动检索；只能靠 skill 里硬编码路径&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;没有 README/index&lt;/strong&gt;：5 个文件没有总目录，AI 不易&amp;quot;发现&amp;quot;未引用的 reference&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;没有版本号&lt;/strong&gt;：security checklist 的 &lt;code&gt;bcrypt ≥12 rounds&lt;/code&gt; 这类参数会过时，但没有 last-updated 日期&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;没有交叉引用&lt;/strong&gt;：security 和 performance 之间偶尔有重叠（如 dependency security），但没互链&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="78-经验与可复用模板"&gt;7.8 经验与可复用模板
&lt;/h3&gt;&lt;h4 id="何时建一个-reference-文件"&gt;何时建一个 reference 文件
&lt;/h4&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-fallback" data-lang="fallback"&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; ✓ 内容 ≥ 100 行
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ 被 2+ skill 引用
&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;判定放进哪类 reference：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - 复选项条目 → checklist 类
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - 模式 / 反模式 → pattern catalog 类
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - 仅 1 个 skill 用 + 简短 → 留在 SKILL.md 里
&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;h4 id="checklist-类-reference-模板"&gt;Checklist 类 Reference 模板
&lt;/h4&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;/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 class="gh"&gt;# &amp;lt;Topic&amp;gt; Checklist
&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;Quick reference for &amp;lt;topic&amp;gt;. Use alongside the &amp;lt;skill-name&amp;gt; skill.
&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;## Table of Contents
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [&lt;span class="nt"&gt;Section 1&lt;/span&gt;](&lt;span class="na"&gt;#section-1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; [&lt;span class="nt"&gt;Section 2&lt;/span&gt;](&lt;span class="na"&gt;#section-2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&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="gu"&gt;## &amp;lt;Section 1&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; &amp;lt;具体可验证条件 + 参数&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; &amp;lt;具体可验证条件 + 参数&amp;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;&lt;span class="gu"&gt;## &amp;lt;Section 2&amp;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;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="pattern-catalog-类-reference-模板"&gt;Pattern Catalog 类 Reference 模板
&lt;/h4&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;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&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 class="gh"&gt;# &amp;lt;Domain&amp;gt; Patterns
&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;&amp;lt;一句话描述&amp;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;The governing rule: &lt;span class="ge"&gt;**&lt;/span&gt;&amp;lt;铁律&amp;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;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Endorsed patterns
&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="gu"&gt;### 1. &amp;lt;Pattern Name 1&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[描述 + ASCII 图示]
&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="gs"&gt;**Use when:**&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="gs"&gt;**Examples:**&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="gs"&gt;**Cost:**&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="gu"&gt;### 2. &amp;lt;Pattern Name 2&amp;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&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 class="gu"&gt;## Anti-patterns
&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="gu"&gt;### A. &amp;lt;Anti-pattern 1&amp;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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gs"&gt;**Why this fails:**&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&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;hr&gt;
&lt;h2 id="8-layer-xhooks"&gt;8. Layer X｜hooks/
&lt;/h2&gt;&lt;h3 id="81-定位与体量"&gt;8.1 定位与体量
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;目录路径&lt;/strong&gt;：&lt;code&gt;hooks/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文件数&lt;/strong&gt;：3 个 hook 脚本 + 2 个文档 + 2 个测试 + 1 个配置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;总行数&lt;/strong&gt;：1052 行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加载时机&lt;/strong&gt;：由 Claude Code 在特定事件触发&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;角色&lt;/strong&gt;：横切关注点（AOP）——在不修改 skill 的前提下增强 skill&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="82-完整文件清单"&gt;8.2 完整文件清单
&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;th&gt;角色&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;hooks.json&lt;/td&gt;
 &lt;td&gt;14&lt;/td&gt;
 &lt;td&gt;插件级注册（仅 session-start）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;session-start.sh&lt;/td&gt;
 &lt;td&gt;24&lt;/td&gt;
 &lt;td&gt;Hook 1: 会话启动&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;session-start-test.sh&lt;/td&gt;
 &lt;td&gt;46&lt;/td&gt;
 &lt;td&gt;测试&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;sdd-cache-pre.sh&lt;/td&gt;
 &lt;td&gt;106&lt;/td&gt;
 &lt;td&gt;Hook 2: WebFetch 前&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;sdd-cache-post.sh&lt;/td&gt;
 &lt;td&gt;135&lt;/td&gt;
 &lt;td&gt;Hook 2: WebFetch 后&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SDD-CACHE.md&lt;/td&gt;
 &lt;td&gt;167&lt;/td&gt;
 &lt;td&gt;文档&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;simplify-ignore.sh&lt;/td&gt;
 &lt;td&gt;302&lt;/td&gt;
 &lt;td&gt;Hook 3: 代码屏蔽&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;simplify-ignore-test.sh&lt;/td&gt;
 &lt;td&gt;247&lt;/td&gt;
 &lt;td&gt;测试&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SIMPLIFY-IGNORE.md&lt;/td&gt;
 &lt;td&gt;90&lt;/td&gt;
 &lt;td&gt;文档&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="83-三种干预模式"&gt;8.3 三种干预模式
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Hook&lt;/th&gt;
 &lt;th&gt;触发事件&lt;/th&gt;
 &lt;th&gt;干预方式&lt;/th&gt;
 &lt;th&gt;配套 Skill&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;session-start&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SessionStart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;注入&lt;/strong&gt; context&lt;/td&gt;
 &lt;td&gt;using-agent-skills&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;sdd-cache&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;PreToolUse:WebFetch&lt;/code&gt; + &lt;code&gt;PostToolUse:WebFetch&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;替换&lt;/strong&gt; 工具输出&lt;/td&gt;
 &lt;td&gt;source-driven-development&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;simplify-ignore&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;PreToolUse:Read&lt;/code&gt; + &lt;code&gt;PostToolUse:Edit|Write&lt;/code&gt; + &lt;code&gt;Stop&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;遮蔽&lt;/strong&gt; 工具输入&lt;/td&gt;
 &lt;td&gt;code-simplification&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt="hooks 与 Claude Code 协议" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-handbook/hook-event-protocol.webp" srcset="https://guige.ai/p/agent-skills-handbook/hook-event-protocol_hu_8723b091d5d8c2f2.webp 800w, https://guige.ai/p/agent-skills-handbook/hook-event-protocol_hu_b8042406badddc10.webp 1600w, https://guige.ai/p/agent-skills-handbook/hook-event-protocol.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;h3 id="84-hook-1-session-start"&gt;8.4 Hook 1: session-start
&lt;/h3&gt;&lt;h4 id="841-注册hooksjson"&gt;8.4.1 注册（hooks.json）
&lt;/h4&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&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;&amp;#34;SessionStart&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;bash ${CLAUDE_PLUGIN_ROOT}/hooks/session-start.sh&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;h4 id="842-完整脚本session-startsh24-行"&gt;8.4.2 完整脚本（session-start.sh，24 行）
&lt;/h4&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;/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="cp"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# agent-skills session start hook&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Injects the using-agent-skills meta-skill into every new session&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="nv"&gt;SCRIPT_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;dirname &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&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;SKILLS_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;dirname &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$SCRIPT_DIR&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/skills&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;META_SKILL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$SKILLS_DIR&lt;/span&gt;&lt;span class="s2"&gt;/using-agent-skills/SKILL.md&amp;#34;&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="k"&gt;if&lt;/span&gt; ! &lt;span class="nb"&gt;command&lt;/span&gt; -v jq &amp;gt;/dev/null 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;{&amp;#34;priority&amp;#34;: &amp;#34;INFO&amp;#34;, &amp;#34;message&amp;#34;: &amp;#34;agent-skills: jq is required for the session-start hook but was not found on PATH. Install jq (e.g. `brew install jq` or `apt-get install jq`) to enable meta-skill injection. Skills remain available individually.&amp;#34;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&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="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -f &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$META_SKILL&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;CONTENT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;cat &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$META_SKILL&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; jq -cn &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --arg message &lt;span class="s2"&gt;&amp;#34;agent-skills loaded. Use the skill discovery flowchart to find the right skill for your task.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$CONTENT&lt;/span&gt;&lt;span class="s2"&gt;&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; &lt;span class="s1"&gt;&amp;#39;{priority: &amp;#34;IMPORTANT&amp;#34;, message: $message}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;{&amp;#34;priority&amp;#34;: &amp;#34;INFO&amp;#34;, &amp;#34;message&amp;#34;: &amp;#34;agent-skills: using-agent-skills meta-skill not found. Skills may still be available individually.&amp;#34;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&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;h4 id="843-作用"&gt;8.4.3 作用
&lt;/h4&gt;&lt;p&gt;每个新会话启动时，把 &lt;code&gt;using-agent-skills/SKILL.md&lt;/code&gt; 的全部 180 行注入到第一条 system message 里。&lt;/p&gt;
&lt;h4 id="844-优雅降级"&gt;8.4.4 优雅降级
&lt;/h4&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;&lt;span class="k"&gt;if&lt;/span&gt; ! &lt;span class="nb"&gt;command&lt;/span&gt; -v jq &amp;gt;/dev/null 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;{&amp;#34;priority&amp;#34;: &amp;#34;INFO&amp;#34;, &amp;#34;message&amp;#34;: &amp;#34;agent-skills: jq is required...&amp;#34;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&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;jq 缺失时输出友好提示，不报错退出。会话仍能继续，只是 meta-skill 不被注入。&lt;/p&gt;
&lt;h3 id="85-hook-2-sdd-cache"&gt;8.5 Hook 2: sdd-cache
&lt;/h3&gt;&lt;h4 id="851-注册用户级-claudesettingsjson"&gt;8.5.1 注册（用户级 &lt;code&gt;.claude/settings.json&lt;/code&gt;）
&lt;/h4&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;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&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-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&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;&amp;#34;PreToolUse&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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;&amp;#34;matcher&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;WebFetch&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;bash ${CLAUDE_PROJECT_DIR}/hooks/sdd-cache-pre.sh&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;timeout&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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;&amp;#34;PostToolUse&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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;&amp;#34;matcher&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;WebFetch&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;bash ${CLAUDE_PROJECT_DIR}/hooks/sdd-cache-post.sh&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;async&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&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;&amp;#34;timeout&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;h4 id="852-核心矛盾"&gt;8.5.2 核心矛盾
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;source-driven-development&lt;/code&gt; skill 要求每个框架决策都 fetch 官方文档&lt;/li&gt;
&lt;li&gt;同一个项目跨会话工作意味着反复 fetch 同一个页面&lt;/li&gt;
&lt;li&gt;简单缓存会破坏 skill 的&amp;quot;always verify against current docs&amp;quot;承诺&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="853-解决方案http-协议感知的缓存"&gt;8.5.3 解决方案：HTTP 协议感知的缓存
&lt;/h4&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;PreToolUse:WebFetch
&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;HEAD 请求 + If-None-Match: &amp;lt;etag&amp;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;返回 304？──否──→ 放行（让 WebFetch 真正跑）
&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;exit 2 + 缓存内容输出到 stderr
&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;Claude Code 把 stderr 当作 WebFetch 的&amp;#34;错误&amp;#34;返回给 AI
&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;AI 拿到缓存内容（标记为&amp;#34;已通过 304 验证&amp;#34;）
&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;h4 id="854-关键代码片段sdd-cache-presh"&gt;8.5.4 关键代码片段（sdd-cache-pre.sh）
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;1）依赖检查 + 优雅降级（第 21-23 行）：&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;/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="nb"&gt;command&lt;/span&gt; -v jq &amp;gt;/dev/null 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;command&lt;/span&gt; -v curl &amp;gt;/dev/null 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;command&lt;/span&gt; -v shasum &amp;gt;/dev/null 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;command&lt;/span&gt; -v sha256sum &amp;gt;/dev/null 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&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;2）没有验证器就不缓存（第 62-65 行）：&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;/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="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -z &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$ETAG&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -z &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$LAST_MOD&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dbg &lt;span class="s2"&gt;&amp;#34;cached entry has no etag/last-modified, cannot revalidate, bypass&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&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;3）HEAD 重验证（第 71-74 行）：&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;/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="nv"&gt;STATUS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;curl -sI -o /dev/null -w &lt;span class="s2"&gt;&amp;#34;%{http_code}&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; --max-time &lt;span class="m"&gt;5&lt;/span&gt; -L &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="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HEADERS&lt;/span&gt;&lt;span class="p"&gt;[@]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&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; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$URL&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; 2&amp;gt;/dev/null &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;000&amp;#34;&lt;/span&gt;&lt;span class="k"&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;strong&gt;4）exit 2 当作 in-band 信号（第 94-106 行）：&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;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="o"&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;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;[sdd-cache] Cache hit for %s\n\n&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$URL&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Revalidated via HTTP 304; unchanged since %s. Use the cached\n&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$VERIFIED_AT_ISO&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;content below as if WebFetch had just returned it.\n\n&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -n &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$ORIGINAL_PROMPT&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Original WebFetch prompt: &amp;#34;%s&amp;#34;. If your angle differs, judge\n&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$ORIGINAL_PROMPT&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;whether this reading still covers it.\n\n&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; -- &lt;span class="s1"&gt;&amp;#39;----- BEGIN CACHED CONTENT -----\n&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;%s\n&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$CONTENT&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; -- &lt;span class="s1"&gt;&amp;#39;----- END CACHED CONTENT -----\n&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt; &amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;2&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;h4 id="855-三个绝妙的设计"&gt;8.5.5 三个绝妙的设计
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;1）exit 2 当作 in-band 信号&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Claude Code 的 hook 协议里，&lt;code&gt;exit 2&lt;/code&gt; = 阻止工具执行 + 把 stderr 传回 AI。sdd-cache 利用这个机制，把&amp;quot;缓存命中&amp;quot;伪装成&amp;quot;工具被拒&amp;quot;——但 stderr 里其实是有效内容。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2）没有 ETag/Last-Modified 就拒绝缓存&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;没有验证器的内容永不缓存。避免&amp;quot;缓存了但永远不知道何时该失效&amp;quot;的状态。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3）缓存原始 prompt&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;WebFetch&lt;/code&gt; 不返回原始 HTML，返回的是经过模型按 prompt 处理过的内容。缓存命中时把&lt;strong&gt;原始 prompt&lt;/strong&gt; 也返回给 AI——让 AI 自己判断&amp;quot;上次的提问角度对当前任务够不够&amp;quot;。&lt;/p&gt;
&lt;h4 id="856-缓存条目结构"&gt;8.5.6 缓存条目结构
&lt;/h4&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-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://react.dev/reference/react/useActionState&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;prompt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;extract the signature&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;etag&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;W/\&amp;#34;abc123\&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;last_modified&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Mon, 27 May 2026 12:00:00 GMT&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;useActionState(action, initialState) returns ...&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;fetched_at&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1716816000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;.claude/sdd-cache/&amp;lt;sha256(url)&amp;gt;.json&lt;/code&gt;。&lt;/p&gt;
&lt;h4 id="857-已知限制"&gt;8.5.7 已知限制
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Body is prompt-shaped&lt;/strong&gt;：缓存的不是原始 HTML，是上次 prompt 处理过的内容&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Every cache write costs an extra HEAD&lt;/strong&gt;：post hook 需要再发一次 HEAD 取 ETag&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Servers without ETag or Last-Modified are never cached&lt;/strong&gt;：没有验证器的站点永远不被缓存&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A misbehaving server can serve a wrong 304&lt;/strong&gt;：服务器 bug 会导致缓存陈旧&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="86-hook-3-simplify-ignore"&gt;8.6 Hook 3: simplify-ignore
&lt;/h3&gt;&lt;h4 id="861-注册用户级-claudesettingsjson"&gt;8.6.1 注册（用户级 &lt;code&gt;.claude/settings.json&lt;/code&gt;）
&lt;/h4&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&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;&amp;#34;PreToolUse&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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;&amp;#34;matcher&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Read&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;bash ${CLAUDE_PROJECT_DIR}/hooks/simplify-ignore.sh&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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;&amp;#34;PostToolUse&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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;&amp;#34;matcher&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Edit|Write&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;bash ${CLAUDE_PROJECT_DIR}/hooks/simplify-ignore.sh&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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;&amp;#34;Stop&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;bash ${CLAUDE_PROJECT_DIR}/hooks/simplify-ignore.sh&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;h4 id="862-注解语法"&gt;8.6.2 注解语法
&lt;/h4&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-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* simplify-ignore-start: perf-critical */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* simplify-ignore-end */&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;经过 hook 处理后，模型 read 到的是：&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;/* BLOCK_de115a1d: perf-critical */
&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;h4 id="863-三阶段生命周期"&gt;8.6.3 三阶段生命周期
&lt;/h4&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Event&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;PreToolUse Read&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;备份原文件 + 替换为 &lt;code&gt;BLOCK_&amp;lt;hash&amp;gt;&lt;/code&gt; 占位符&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;PostToolUse Edit|Write&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;展开占位符回到真实代码 + 保存模型修改&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Stop&lt;/code&gt;（会话结束）&lt;/td&gt;
 &lt;td&gt;从备份恢复所有被保护的文件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="864-内容哈希作为占位符-id"&gt;8.6.4 内容哈希作为占位符 ID
&lt;/h4&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;BLOCK_de115a1d ← sha1(原始代码块) 的前 8 字符
&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;即使模型把占位符复制、移位、删除，hash 仍能精确定位回原代码。&lt;/p&gt;
&lt;h4 id="865-渐进式回填"&gt;8.6.5 渐进式回填
&lt;/h4&gt;
 &lt;blockquote&gt;
 &lt;p&gt;Fallback expansion is progressive: full placeholder → prefix+hash+suffix → hash-only.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;模型如果修改了占位符格式（比如改了 reason 文本），hook 会用越来越宽松的匹配模式尝试还原。&lt;/p&gt;
&lt;h4 id="866-崩溃恢复"&gt;8.6.6 崩溃恢复
&lt;/h4&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;&lt;span class="c1"&gt;# 如果 Claude Code 崩溃没触发 Stop hook&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;{}&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; bash hooks/simplify-ignore.sh
&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;h4 id="867-已知限制"&gt;8.6.7 已知限制
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Single-line blocks hide the entire line&lt;/strong&gt;：单行注解会隐藏整行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comment suffix detection only covers &lt;code&gt;*/&lt;/code&gt; and &lt;code&gt;--&amp;gt;&lt;/code&gt;&lt;/strong&gt;：模板引擎（ERB、Blade）可能不工作&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fallback is progressive, not exact&lt;/strong&gt;：模型修改占位符格式时可能留下美容性残留&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File renaming leaves placeholders&lt;/strong&gt;：模型用 shell rename 文件，新文件会保留占位符&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="87-三个-hook-的共性设计"&gt;8.7 三个 Hook 的共性设计
&lt;/h3&gt;&lt;h4 id="共性-1-优雅降级"&gt;共性 1: 优雅降级
&lt;/h4&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;&lt;span class="nb"&gt;command&lt;/span&gt; -v jq &amp;gt;/dev/null 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;command&lt;/span&gt; -v curl &amp;gt;/dev/null 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&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;任何 hook 都不应该让 session 卡死。依赖缺失时静默退出 0。&lt;/p&gt;
&lt;h4 id="共性-2-显式调试日志"&gt;共性 2: 显式调试日志
&lt;/h4&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;dbg&lt;span class="o"&gt;()&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 class="nb"&gt;local&lt;/span&gt; &lt;span class="nv"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLAUDE_PROJECT_DIR&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.claude/sdd-cache&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;SDD_CACHE_DEBUG&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;0&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -f &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;/.debug&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mkdir -p &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;%s [pre] %s\n&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;date -u +%FT%TZ&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$*&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;/.debug.log&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;dbg &lt;span class="s2"&gt;&amp;#34;fired&amp;#34;&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;通过环境变量或 sentinel 文件触发日志——hook 是黑盒，必须留可观察性。&lt;/p&gt;
&lt;h4 id="共性-3-与具体-skill-一对一绑定"&gt;共性 3: 与具体 skill 一对一绑定
&lt;/h4&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Hook&lt;/th&gt;
 &lt;th&gt;配套 Skill&lt;/th&gt;
 &lt;th&gt;失败影响&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;session-start&lt;/td&gt;
 &lt;td&gt;using-agent-skills&lt;/td&gt;
 &lt;td&gt;skill 系统不可用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;sdd-cache&lt;/td&gt;
 &lt;td&gt;source-driven-development&lt;/td&gt;
 &lt;td&gt;重复 fetch（仅性能损失）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;simplify-ignore&lt;/td&gt;
 &lt;td&gt;code-simplification&lt;/td&gt;
 &lt;td&gt;保护代码被改（数据损失风险）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="共性-4-文档专门解释反直觉行为"&gt;共性 4: 文档专门解释&amp;quot;反直觉&amp;quot;行为
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;sdd-cache：&amp;ldquo;exit 2 不是故障，是缓存命中&amp;rdquo;&lt;/li&gt;
&lt;li&gt;simplify-ignore：&amp;ldquo;模型看到 BLOCK 占位符是正确行为&amp;rdquo;&lt;/li&gt;
&lt;li&gt;session-start：&amp;ldquo;jq 缺失时 skills 仍可用&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每个 hook 都假设读者会困惑，主动消除困惑。&lt;/p&gt;
&lt;h3 id="88-注册的两层架构"&gt;8.8 注册的两层架构
&lt;/h3&gt;&lt;h4 id="插件层hooksjson"&gt;插件层（hooks.json）
&lt;/h4&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-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&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;&amp;#34;SessionStart&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;只注册了 session-start。这是仓库默认的、所有用户都需要的 hook。&lt;/p&gt;
&lt;h4 id="项目层claudesettingsjson"&gt;项目层（&lt;code&gt;.claude/settings.json&lt;/code&gt;）
&lt;/h4&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-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&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;&amp;#34;PreToolUse&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;matcher&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;WebFetch&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;matcher&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Read&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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;&amp;#34;PostToolUse&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="p"&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;&amp;#34;Stop&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;sdd-cache 和 simplify-ignore 必须由用户手动注册。&lt;/p&gt;
&lt;h4 id="设计逻辑"&gt;设计逻辑
&lt;/h4&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Hook&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;session-start&lt;/td&gt;
 &lt;td&gt;✓&lt;/td&gt;
 &lt;td&gt;整个 skill 系统的&amp;quot;启动器&amp;quot;——不启用整个仓库无意义&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;sdd-cache&lt;/td&gt;
 &lt;td&gt;✗&lt;/td&gt;
 &lt;td&gt;性能优化，有 disk I/O + 网络 HEAD 开销，opt-in&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;simplify-ignore&lt;/td&gt;
 &lt;td&gt;✗&lt;/td&gt;
 &lt;td&gt;改变模型可见性，有数据风险，opt-in&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;原则：默认开启的 hook 必须是&amp;quot;无副作用 + 无 opt-out 成本&amp;quot;的。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="89-hook-的核心哲学"&gt;8.9 Hook 的核心哲学
&lt;/h3&gt;&lt;h4 id="哲学-1-不修改-skill增强-skill"&gt;哲学 1: 不修改 skill，增强 skill
&lt;/h4&gt;&lt;p&gt;SDD-CACHE.md 引文：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;The skill itself is unchanged. It continues to follow &lt;code&gt;DETECT → FETCH → IMPLEMENT → CITE&lt;/code&gt;. The hook only changes what happens under the hood when &lt;code&gt;FETCH&lt;/code&gt; runs.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;这是&amp;quot;hook 作为运行时优化器&amp;quot;的范式——比修改 skill 本身可维护性高得多。&lt;/p&gt;
&lt;h4 id="哲学-2-利用协议而非绕过"&gt;哲学 2: 利用协议而非绕过
&lt;/h4&gt;&lt;p&gt;sdd-cache 没有 hack 出新的通信渠道，而是精确地用了 Claude Code hook 协议里 exit code 2 的含义。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hook 应该作用在协议层，不应该作用在语义层。&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id="哲学-3-失败模式必须显式"&gt;哲学 3: 失败模式必须显式
&lt;/h4&gt;&lt;p&gt;每个 hook 都有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;依赖缺失的降级策略&lt;/li&gt;
&lt;li&gt;调试日志&lt;/li&gt;
&lt;li&gt;崩溃恢复路径&lt;/li&gt;
&lt;li&gt;&amp;ldquo;看似异常但其实正常&amp;quot;的解释&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hook 是 invisible infrastructure——所以必须留观察接口。&lt;/p&gt;
&lt;h3 id="810-注意事项"&gt;8.10 注意事项
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;没有 hook 失败的告警机制&lt;/strong&gt;：sdd-cache 静默 exit 0 时，用户无从知道缓存功能没生效&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;simplify-ignore 没覆盖 MultiEdit&lt;/strong&gt;：matcher 只匹配 &lt;code&gt;Edit|Write&lt;/code&gt;，但 Claude Code 还有 MultiEdit 工具&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;没有 hook 之间的依赖声明&lt;/strong&gt;：如果 simplify-ignore 和某个未来 hook 同时操作 Read，行为是未定义的&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;session-start 强制注入 180 行&lt;/strong&gt;：每个会话首条 message 都吃 ~2K token&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="811-经验与可复用-hook-模板"&gt;8.11 经验与可复用 Hook 模板
&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;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;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&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="cp"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;lt;hook-name&amp;gt;.sh — &amp;lt;event&amp;gt; hook for &amp;lt;purpose&amp;gt;.&lt;/span&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;&lt;span class="c1"&gt;# What it does: &amp;lt;one paragraph&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# What it does NOT do: &amp;lt;one line&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Failure mode: &amp;lt;how it degrades&amp;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="nb"&gt;set&lt;/span&gt; -euo pipefail
&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;# 1. 依赖检查 + 优雅降级&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;command&lt;/span&gt; -v &amp;lt;dep&amp;gt; &amp;gt;/dev/null 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&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;# 2. 读取 hook payload&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -t &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="nv"&gt;INPUT&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="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nv"&gt;INPUT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;cat&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;fi&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;# 3. 调试日志（按 env var 或 sentinel 文件触发）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dbg&lt;span class="o"&gt;()&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 class="nb"&gt;local&lt;/span&gt; &lt;span class="nv"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLAUDE_PROJECT_DIR&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.claude/&amp;lt;hook-name&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOOK_DEBUG&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;0&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -f &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;/.debug&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mkdir -p &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;%s %s\n&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;date -u +%FT%TZ&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$*&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;/.debug.log&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;dbg &lt;span class="s2"&gt;&amp;#34;fired&amp;#34;&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;# 4. 业务逻辑&lt;/span&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;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 5. 通过 exit code 给 Claude Code 信号&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 0 = 放行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2 = 阻止 + stderr 内容传回 agent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&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;hr&gt;
&lt;h2 id="9-索引与速查"&gt;9. 索引与速查
&lt;/h2&gt;&lt;h3 id="91-跨层级关键文件速查"&gt;9.1 跨层级关键文件速查
&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;&lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;所有 skill 的清单&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; § Skills by Phase / &lt;code&gt;skills/using-agent-skills/SKILL.md&lt;/code&gt; § Quick Reference&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;任务路由决策树&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;skills/using-agent-skills/SKILL.md&lt;/code&gt; § Skill Discovery&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AI 不该做什么&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;skills/using-agent-skills/SKILL.md&lt;/code&gt; § Failure Modes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;上线前完整 checklist&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;skills/shipping-and-launch/SKILL.md&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;安全检查清单&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;references/security-checklist.md&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;性能检查清单&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;references/performance-checklist.md&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;多 agent 编排模式&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;references/orchestration-patterns.md&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Persona 设计规则&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;agents/README.md&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Hook 协议（exit code 含义）&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;hooks/SDD-CACHE.md&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Spec 写作模板&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;skills/spec-driven-development/SKILL.md&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Common Rationalizations 表设计&lt;/td&gt;
 &lt;td&gt;任一 skill 的对应段（参考 spec-driven-development）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="92-设计哲学速查"&gt;9.2 设计哲学速查
&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;th&gt;体现&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Never Duplicate&lt;/td&gt;
 &lt;td&gt;CLAUDE.md L43&lt;/td&gt;
 &lt;td&gt;整个仓库的&amp;quot;指针架构&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;利用协议而非绕过&lt;/td&gt;
 &lt;td&gt;hooks 设计&lt;/td&gt;
 &lt;td&gt;exit code 2、ASCII 决策树、Markdown 模板&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;反例教学&lt;/td&gt;
 &lt;td&gt;agents/README.md&lt;/td&gt;
 &lt;td&gt;meta-orchestrator 反例、每个 skill 的 Red Flags&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;100 行拆分阈值&lt;/td&gt;
 &lt;td&gt;CLAUDE.md L32&lt;/td&gt;
 &lt;td&gt;references 拆出 skill&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;总在 context 必须极短&lt;/td&gt;
 &lt;td&gt;CLAUDE.md 自身 44 行&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;用 skill 强制纪律，不期待模型自觉&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;User is the orchestrator&lt;/td&gt;
 &lt;td&gt;agents/README.md（重复 5+ 次）&lt;/td&gt;
 &lt;td&gt;personas 不互调&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="93-我想做-x该看哪里-反向索引"&gt;9.3 &amp;ldquo;我想做 X，该看哪里&amp;rdquo; 反向索引
&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;给我的项目写一份 CLAUDE.md&lt;/td&gt;
 &lt;td&gt;Layer 0 § 2.6 模板&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;给我的团队定义工程纪律的 skill&lt;/td&gt;
 &lt;td&gt;Layer 4 § 6.10 模板&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;加一个我的项目专用的 slash command&lt;/td&gt;
 &lt;td&gt;Layer 2 § 4.9 模板&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;加一个 specialist persona&lt;/td&gt;
 &lt;td&gt;Layer 3 § 5.10 模板&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;拆数据到 reference 文件&lt;/td&gt;
 &lt;td&gt;Layer 5 § 7.8 模板&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;加自定义 hook&lt;/td&gt;
 &lt;td&gt;Layer X § 8.11 模板&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;决定要不要新建 persona&lt;/td&gt;
 &lt;td&gt;Layer 3 § 5.10 判定标准&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;决定要不要新建 reference&lt;/td&gt;
 &lt;td&gt;Layer 5 § 7.8 判定标准&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;设计一个 fan-out 命令&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;.claude/commands/ship.md&lt;/code&gt; 模式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;把模糊需求翻译成可验证条件&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;skills/spec-driven-development/SKILL.md&lt;/code&gt; § &amp;ldquo;Reframe instructions&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;写 AI 看的&amp;quot;反合理化&amp;quot;表&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;skills/spec-driven-development/SKILL.md&lt;/code&gt; § Common Rationalizations&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="94-各层文件数量与体量对比"&gt;9.4 各层文件数量与体量对比
&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;/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;文件数： 21 (skills)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;gt; 7 (commands)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;gt; 5 (references)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;gt; 3 (agents) = 3 (hooks)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;gt; 1 (CLAUDE.md) = 1 (meta-skill)
&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;总行数： skills &amp;gt; references &amp;gt; hooks &amp;gt; commands &amp;gt; agents &amp;gt; CLAUDE.md
&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;加载频次： CLAUDE.md &amp;gt; meta-skill &amp;gt; commands &amp;gt; skills &amp;gt; agents &amp;gt; references &amp;gt; hooks
&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="95-隐藏的对齐-bug"&gt;9.5 隐藏的&amp;quot;对齐 bug&amp;quot;
&lt;/h3&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;code-simplification&lt;/code&gt; 缺失&lt;/td&gt;
 &lt;td&gt;出现在 CLAUDE.md Skills by Phase 中，但 using-agent-skills 决策树没有&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;deprecation-and-migration&lt;/code&gt; 缺失&lt;/td&gt;
 &lt;td&gt;类似情况&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;using-agent-skills 不遵守 schema&lt;/td&gt;
 &lt;td&gt;没有在 CLAUDE.md 显式声明此例外&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;skill-anatomy.md 路径未给&lt;/td&gt;
 &lt;td&gt;CLAUDE.md Boundary 引用了它但没说在哪里&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;simplify-ignore 不覆盖 MultiEdit&lt;/td&gt;
 &lt;td&gt;matcher 只配置了 &lt;code&gt;Edit|Write&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="96-阅读-agent-skills-的建议路径"&gt;9.6 阅读 agent-skills 的建议路径
&lt;/h3&gt;&lt;h4 id="路径-a从外向内推荐"&gt;路径 A：从外向内（推荐）
&lt;/h4&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. CLAUDE.md（44 行）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. agents/README.md（120 行）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. skills/using-agent-skills/SKILL.md（~180 行）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. .claude/commands/ship.md（73 行）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. skills/spec-driven-development/SKILL.md（201 行）— 教科书级 skill
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6. references/orchestration-patterns.md（370 行）— 架构铁律
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;7. hooks/SDD-CACHE.md + sdd-cache-pre.sh — 最精彩的 hook
&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;h4 id="路径-b从某个具体场景反向追"&gt;路径 B：从某个具体场景反向追
&lt;/h4&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;&amp;#34;我有一个上线决策的需求&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;.claude/commands/ship.md
&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;agents/code-reviewer.md + security-auditor.md + test-engineer.md
&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;skills/code-review-and-quality + security-and-hardening + ...
&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;references/security-checklist.md + performance-checklist.md
&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;hr&gt;
&lt;h2 id="附录-a术语表"&gt;附录 A：术语表
&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;&lt;strong&gt;Skill&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;一个 SKILL.md 文件，定义某个工程任务的方法论&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Persona&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;一个 &lt;code&gt;.md&lt;/code&gt; 文件，定义一个 subagent 的角色与输出格式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Command&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;一个 slash command 文件，定义用户显式触发的入口&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Reference&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;不带 frontmatter 的支撑文档，通常是清单或模式目录&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Hook&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Bash 脚本，在 Claude Code 的特定事件触发&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;meta-skill&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;using-agent-skills&lt;/code&gt;，治理其他 skill 的元规则&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;fan-out&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;并行 spawn 多个 subagent，各自独立工作&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Common Rationalizations&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;skill 中的&amp;quot;AI 借口反驳表&amp;quot;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Red Flags&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;skill 中的&amp;quot;AI 偏离症状清单&amp;quot;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Verification&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;skill 中的 boolean 可判定完成条件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;schema&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;CLAUDE.md L30 强制的 SKILL.md 6 段结构&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;lazy loading&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;references 的&amp;quot;软引用&amp;quot;加载方式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="附录-b仓库地址与版本"&gt;附录 B：仓库地址与版本
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a class="link" href="https://github.com/addyosmani/agent-skills" target="_blank" rel="noopener"
 &gt;https://github.com/addyosmani/agent-skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;作者&lt;/strong&gt;: Addy Osmani (Google)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;本手册基于的代码状态&lt;/strong&gt;: main branch（2026 年 5 月）&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;如果你想看叙事版本和鬼哥的学习思考，翻 &lt;a class="link" href="https://guige.ai/p/agent-skills-architecture/" &gt;文章型《从使用者到学习者》&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;如果你想看 Addy 项目的整体定位和反合理化机制，翻 &lt;a class="link" href="https://guige.ai/p/agent-skills-analysis/" &gt;《Agent Skills：当 Google 工程文化遇上 AI 编程代理》&lt;/a&gt;。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>从使用者到学习者：agent-skills 架构深度剖析与高手思维体系</title><link>https://guige.ai/p/agent-skills-architecture/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://guige.ai/p/agent-skills-architecture/</guid><description>&lt;img src="https://guige.ai/" alt="Featured image of post 从使用者到学习者：agent-skills 架构深度剖析与高手思维体系" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&amp;ldquo;AI coding agents default to the shortest path.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;— Addy Osmani&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="引子从使用者到学习者"&gt;引子｜从使用者，到学习者
&lt;/h2&gt;&lt;p&gt;最近几个月，鬼哥在做 AI 项目的过程中，一直被一个问题困扰——&lt;/p&gt;
&lt;p&gt;让 Claude / Cursor / Copilot 帮我写代码，效率确实快了。但一段时间下来，我开始隐隐不安：代码量上去了，我能真正&amp;quot;理解&amp;quot;和&amp;quot;掌握&amp;quot;的部分却在下降；功能堆得很快，但一到上线前的查 bug、做 review，处处是雷；我有十几年的工程经验，但在 AI 协作的场景下，这些经验好像没怎么用上，甚至有时候反过来被 AI 的&amp;quot;先把它跑起来再说&amp;quot;带跑偏。&lt;/p&gt;
&lt;p&gt;直到我遇到了 &lt;a class="link" href="https://github.com/addyosmani/agent-skills" target="_blank" rel="noopener"
 &gt;agent-skills&lt;/a&gt;——由 Google 资深工程师 Addy Osmani 开源的一套&amp;quot;AI 编程纪律&amp;quot;系统。&lt;/p&gt;
&lt;p&gt;这个仓库不长，核心只有 21 个 SKILL.md 文件 + 7 个 slash commands + 3 个 persona + 5 个 references + 3 个 hooks。但作为使用者用了一段时间后，我的感受是——&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这不是一套&amp;quot;AI 提示词工程的最佳实践&amp;quot;，这是一套&amp;quot;用工程纪律驯化 AI&amp;quot;的完整方法论。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它让我重新意识到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;spec 不是教科书废话，它是 AI 项目的护城河&lt;/li&gt;
&lt;li&gt;测试不是负担，它是让 AI 不胡来的物理边界&lt;/li&gt;
&lt;li&gt;review 不是仪式，它是 AI 错位假设暴露的最后窗口&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;更进一步，鬼哥逐渐感受到一件事：&lt;strong&gt;工程经验和 AI 开发的结合点上，有一套深度的核心思维和项目纪律，对 AI 项目的质量、成败和过程的影响，远远大于 AI 模型能力本身的差异。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;光当使用者已经不够。&lt;/p&gt;
&lt;p&gt;于是我决定深入到项目里，把 agent-skills 的架构、源码、设计哲学，一层一层读透。读完后我发现：这套体系背后的设计精密程度，远超过它表面上看起来的&amp;quot;21 个 skill&amp;quot;。它是一个完整的、有层次的、自洽的工程系统——构建这样的系统，需要十几年工程经验 + 大量 AI 项目实践的双重沉淀。&lt;/p&gt;
&lt;p&gt;这篇文章是鬼哥的剖析笔记 + 读后感。我会带你从最外层一直走到最内层，把架构拆开，讲清楚每一层在干什么、为什么这么干。但更重要的是，文章最后我想跟你聊一件事——&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;学这套体系，不能只学架构。要从源码里读高手的思维体系，再把思维体系落地到你自己的 AI 项目里。&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;如果你完全没接触过 agent-skills，推荐先看 &lt;a class="link" href="https://guige.ai/p/agent-skills-analysis/" &gt;《Agent Skills：当 Google 工程文化遇上 AI 编程代理》&lt;/a&gt; 作为前置导读。本文假设你已经对项目有基本了解，重点放在架构与工程思维的深度剖析。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="文章封面" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-architecture/cover.webp" srcset="https://guige.ai/p/agent-skills-architecture/cover_hu_6b66ddea87dc080f.webp 800w, https://guige.ai/p/agent-skills-architecture/cover_hu_73ce5cc1d0dfe5a9.webp 1600w, https://guige.ai/p/agent-skills-architecture/cover.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一句话讲清楚-agent-skills-是什么"&gt;一句话讲清楚 agent-skills 是什么
&lt;/h2&gt;&lt;p&gt;agent-skills 不是一个工具，也不是一个框架。&lt;/p&gt;
&lt;p&gt;它是&lt;strong&gt;给 AI 编程代理使用的&amp;quot;工程方法论文件包&amp;quot;&lt;/strong&gt;：21 个 SKILL.md 文件 + 7 个 slash commands + 3 个 persona + 5 个 references + 3 个 hooks，再加上一个 44 行的 CLAUDE.md 作为总入口。&lt;/p&gt;
&lt;p&gt;它要解决的问题非常具体：&lt;strong&gt;AI 默认走捷径（skip specs、skip tests、skip reviews），怎么让它按工程纪律走完整流程。&lt;/strong&gt;&lt;/p&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;/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;agent-skills/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── CLAUDE.md 44 行，仓库总入口（always in context）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── skills/ 21 个 SKILL.md，按开发阶段组织
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── agents/ 3 个 Persona 角色文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── references/ 5 个 清单与模式目录
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── hooks/ 3 个 会话生命周期脚本
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── .claude/commands/ 7 个 用户可调用的 slash command
&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;总文件数加起来不到 50 个。&lt;strong&gt;但读完后你会发现：这是一个被仔细切分过、每层各司其职、互不重复的精密系统。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="核心论点为什么-ai-项目需要工程纪律"&gt;核心论点｜为什么 AI 项目需要&amp;quot;工程纪律&amp;quot;
&lt;/h2&gt;&lt;p&gt;在拆架构之前，鬼哥想先讲清楚 agent-skills 解决的真正问题。&lt;/p&gt;
&lt;h3 id="ai-的默认行为是不可信的"&gt;AI 的&amp;quot;默认行为&amp;quot;是不可信的
&lt;/h3&gt;&lt;p&gt;大模型有一个隐藏特性：&lt;strong&gt;它会尽可能&amp;quot;快速地&amp;quot;给你一个看起来合理的答案。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个特性在 ChatGPT 帮你查资料时是优点。但在它写代码时，问题就来了——&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你说&amp;quot;做个 dashboard&amp;quot;，它不问&amp;quot;给谁用、看什么指标&amp;quot;，直接开始 import chart 库&lt;/li&gt;
&lt;li&gt;你说&amp;quot;修这个 bug&amp;quot;，它不写复现测试，直接改逻辑&lt;/li&gt;
&lt;li&gt;你说&amp;quot;加个登录&amp;quot;，它不检查权限模型，直接写 &lt;code&gt;if password == request.password&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;你说&amp;quot;上线吧&amp;quot;，它不查 rollback 方案，直接 push&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些不是模型&amp;quot;能力不够&amp;quot;，是模型&amp;quot;默认走捷径&amp;quot;。模型本身有能力做对，但它需要&lt;strong&gt;外部约束&lt;/strong&gt;告诉它&amp;quot;不许走捷径&amp;quot;。&lt;/p&gt;
&lt;h3 id="工程纪律是-ai-输出质量的重力场"&gt;工程纪律是 AI 输出质量的&amp;quot;重力场&amp;quot;
&lt;/h3&gt;&lt;p&gt;人类资深工程师为什么不会犯这些错？因为他经历过这些坑，养成了&amp;quot;先写 spec / 先写测试 / 先想 rollback&amp;quot;的反射。这些反射就是工程纪律。&lt;/p&gt;
&lt;p&gt;AI 没有这种反射——除非你强行给它装一套。&lt;/p&gt;
&lt;p&gt;agent-skills 干的就是这件事：&lt;strong&gt;把工程纪律以可执行的、AI 看得懂的形式编码进它的工作流。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;每一个 skill 都是一段&amp;quot;防偷懒程序&amp;quot;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;spec-driven-development&lt;/code&gt; 强制 AI 在动代码之前写 spec&lt;/li&gt;
&lt;li&gt;&lt;code&gt;test-driven-development&lt;/code&gt; 强制 AI 在写实现之前写失败的测试&lt;/li&gt;
&lt;li&gt;&lt;code&gt;code-review-and-quality&lt;/code&gt; 强制 AI 用五维标准 review 自己的代码&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shipping-and-launch&lt;/code&gt; 强制 AI 在上线前列 rollback 计划&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;读了源码我才意识到：&lt;strong&gt;这些 skill 文件不是&amp;quot;教 AI 怎么做&amp;quot;，是&amp;quot;逼 AI 不能怎么做&amp;quot;。&lt;/strong&gt; 它们是反熵的力量。没有它们，AI 就会滑向&amp;quot;最短路径&amp;quot;。&lt;/p&gt;
&lt;h3 id="反合理化是核心创新"&gt;&amp;ldquo;反合理化&amp;quot;是核心创新
&lt;/h3&gt;&lt;p&gt;整个项目里我印象最深的设计，是每个 skill 里都有的 &lt;strong&gt;Common Rationalizations 表&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Rationalization&lt;/th&gt;
 &lt;th&gt;Reality&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;This is simple, I don&amp;rsquo;t need a spec&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;A two-line spec is fine, but acceptance criteria are not optional.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;I&amp;rsquo;ll write the spec after I code it&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;That&amp;rsquo;s documentation, not specification.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;The spec will slow us down&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;15-minute spec prevents hours of rework.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这是 Addy 干的最聪明的一件事——&lt;strong&gt;预判 AI 会用什么理由跳过这个 skill，把反驳预先写好放在 skill 文件里。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;AI 在长 context 里会发明各种偷懒借口（&amp;ldquo;这次比较简单&amp;rdquo;、&amp;ldquo;我可以边写边补&amp;rdquo;……）。Common Rationalizations 表的存在，等于在 AI 的内心独白旁边放了一个反驳音轨。&lt;/p&gt;
&lt;p&gt;这一个设计，把&amp;quot;AI 心理学&amp;quot;工程化了。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="整体架构六层--横切-hooks"&gt;整体架构｜六层 + 横切 hooks
&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;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;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&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; USER
&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; /command
&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; 横切 (AOP) │ .claude/commands/ │ ← Layer 2: WHEN (用户入口)
&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; │ hooks/ │ │
&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; │ ·session │ ▼ ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ -start │ ┌─────────┐ ┌──────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ ·sdd │ │ agents/ │ → │ skills/ │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ -cache │ │ (WHO) │ │ (HOW) │ ← Layer 3 / Layer 4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ ·simpli │ └────┬────┘ └─────┬────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ -fy-ig │ │ │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ -nore │ └───────┬───────┘
&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; │ references/ │ ← Layer 5: DATA (清单/模式)
&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; │ using-agent-skills │ ← Layer 1: 路由 + 行为宪法
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ (meta-skill) │
&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; │ CLAUDE.md (44行) │ ← Layer 0: 总入口
&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;6 个垂直层 + 1 个横切层&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;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;Layer 0&lt;/td&gt;
 &lt;td&gt;CLAUDE.md&lt;/td&gt;
 &lt;td&gt;仓库导航（NAV）&lt;/td&gt;
 &lt;td&gt;1 个，44 行&lt;/td&gt;
 &lt;td&gt;always in context&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Layer 1&lt;/td&gt;
 &lt;td&gt;using-agent-skills&lt;/td&gt;
 &lt;td&gt;路由 + 行为宪法&lt;/td&gt;
 &lt;td&gt;1 个，180 行&lt;/td&gt;
 &lt;td&gt;session start 注入&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Layer 2&lt;/td&gt;
 &lt;td&gt;commands&lt;/td&gt;
 &lt;td&gt;用户显式入口（WHEN）&lt;/td&gt;
 &lt;td&gt;7 个&lt;/td&gt;
 &lt;td&gt;用户 &lt;code&gt;/foo&lt;/code&gt; 触发&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Layer 3&lt;/td&gt;
 &lt;td&gt;agents&lt;/td&gt;
 &lt;td&gt;视角与输出格式（WHO）&lt;/td&gt;
 &lt;td&gt;3 个&lt;/td&gt;
 &lt;td&gt;command 派发&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Layer 4&lt;/td&gt;
 &lt;td&gt;skills&lt;/td&gt;
 &lt;td&gt;流程方法论（HOW）&lt;/td&gt;
 &lt;td&gt;21 个&lt;/td&gt;
 &lt;td&gt;按需调用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Layer 5&lt;/td&gt;
 &lt;td&gt;references&lt;/td&gt;
 &lt;td&gt;清单与模式（DATA）&lt;/td&gt;
 &lt;td&gt;5 个&lt;/td&gt;
 &lt;td&gt;任务时按需读&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Layer X&lt;/td&gt;
 &lt;td&gt;hooks&lt;/td&gt;
 &lt;td&gt;横切干预（AOP）&lt;/td&gt;
 &lt;td&gt;3 个&lt;/td&gt;
 &lt;td&gt;事件触发&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt="六层架构总览" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-architecture/architecture-overview.webp" srcset="https://guige.ai/p/agent-skills-architecture/architecture-overview_hu_4bb085bc9df416d6.webp 800w, https://guige.ai/p/agent-skills-architecture/architecture-overview_hu_5c5fcd245bd428f5.webp 1600w, https://guige.ai/p/agent-skills-architecture/architecture-overview.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;p&gt;注意每一层的&lt;strong&gt;信息体量是逐渐增大&lt;/strong&gt;的——CLAUDE.md 44 行就把一切讲完；具体 skill 文件 100-300 行；reference 文件 134-370 行。这是一个精心设计的 &lt;strong&gt;token 预算&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;总在 context 的东西必须极短（CLAUDE.md）&lt;/li&gt;
&lt;li&gt;经常用的东西要中等长度（skills）&lt;/li&gt;
&lt;li&gt;偶尔用的东西可以详尽（references）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;这是把&amp;quot;context 即成本&amp;quot;这件事，做到极致的设计。&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;想看每一层的完整清单、文件路径、行数对比？翻字典型《架构总览》一节。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="layer-0claudemd44-行的导航极简主义"&gt;Layer 0｜CLAUDE.md：44 行的导航极简主义
&lt;/h2&gt;&lt;p&gt;读 agent-skills 时，鬼哥第一个被震到的就是这个 CLAUDE.md。&lt;/p&gt;
&lt;p&gt;整个仓库的总入口、AI 每次会话都会自动加载的文件——&lt;strong&gt;只有 44 行&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;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;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&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 class="gh"&gt;# agent-skills
&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;This is the agent-skills project — a collection of production-grade engineering skills for AI coding agents.
&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;## Project Structure
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ASCII 树，6 个目录]
&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;## Skills by Phase
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;**Define:** interview-me, idea-refine, spec-driven-development
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gs"&gt;**Plan:**&lt;/span&gt; planning-and-task-breakdown
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gs"&gt;**Build:**&lt;/span&gt; incremental-implementation, ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gs"&gt;**Verify:**&lt;/span&gt; browser-testing-with-devtools, debugging-and-error-recovery
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gs"&gt;**Review:**&lt;/span&gt; code-review-and-quality, ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gs"&gt;**Ship:**&lt;/span&gt; git-workflow-and-versioning, ..., shipping-and-launch
&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;## Conventions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Every skill lives in &lt;span class="sb"&gt;`skills/&amp;lt;name&amp;gt;/SKILL.md`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; YAML frontmatter with &lt;span class="sb"&gt;`name`&lt;/span&gt; and &lt;span class="sb"&gt;`description`&lt;/span&gt; fields
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Every skill has: Overview, When to Use, Process, Common Rationalizations, Red Flags, Verification
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; References are in &lt;span class="sb"&gt;`references/`&lt;/span&gt;, not inside skill directories
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Supporting files only created when content exceeds 100 lines
&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;## Commands
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`npm test`&lt;/span&gt; — Not applicable (this is a documentation project)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Validate: Check that all SKILL.md files have valid YAML frontmatter
&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;## Boundaries
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Always: Follow the skill-anatomy.md format for new skills
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Never: Add skills that are vague advice instead of actionable processes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Never: Duplicate content between skills — reference other skills instead
&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;44 行做了 5 件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Project Structure&lt;/strong&gt; — 一棵 ASCII 树告诉你哪里有什么&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills by Phase&lt;/strong&gt; — 按阶段索引 21 个 skill&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conventions&lt;/strong&gt; — 文件 schema 约束&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Commands&lt;/strong&gt; — 怎么验证（指明 &lt;code&gt;npm test&lt;/code&gt; 不适用）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Boundaries&lt;/strong&gt; — 不可协商的约束（Always / Never）&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="它做的事-vs-它不做的事"&gt;它做的事 vs 它&lt;strong&gt;不做&lt;/strong&gt;的事
&lt;/h3&gt;&lt;p&gt;最关键的判断：&lt;strong&gt;CLAUDE.md 不重复任何下游内容&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;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&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;列 skill 名字&lt;/td&gt;
 &lt;td&gt;解释每个 skill 怎么用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;给 SKILL.md 模板的字段名&lt;/td&gt;
 &lt;td&gt;给字段的写法示例&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;说 &amp;ldquo;follow skill-anatomy.md&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;重复 skill-anatomy.md 内容&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;p&gt;为什么必须这么克制？因为 CLAUDE.md 每次对话都会自动加载到 context——&lt;strong&gt;每多写一行就有 N 次重复的 token 成本&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这个判断把 CLAUDE.md 和 README.md 彻底分开。README 给人看，可以有教程、动机、示例；CLAUDE.md 给 AI 看，只给坐标。&lt;/p&gt;
&lt;h3 id="第-30-行的-schema-强制"&gt;第 30 行的 schema 强制
&lt;/h3&gt;&lt;p&gt;在 6 条 Conventions 里，最重要的是这一行：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Every skill has: Overview, When to Use, Process, Common Rationalizations, Red Flags, Verification&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;这一行&lt;strong&gt;等于一份合同&lt;/strong&gt;——整个仓库 21 个 skill 文件，结构上必须长成这样。&lt;/p&gt;
&lt;p&gt;读到这里我突然明白：之前看的 &lt;code&gt;spec-driven-development&lt;/code&gt; 那些教科书级别的&amp;quot;反合理化表&amp;rdquo;、&amp;ldquo;Red Flags 清单&amp;rdquo;、&amp;ldquo;Verification checklist&amp;rdquo;——&lt;strong&gt;这些不是某个 skill 的创新，是 CLAUDE.md 强制要求的格式。&lt;/strong&gt; 21 个文件必须遵守。&lt;/p&gt;
&lt;p&gt;一份 44 行的文档，撑起了整个仓库的形态。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;字典型里有 CLAUDE.md 的完整逐行拆解。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="layer-1using-agent-skillsmeta-skill-的双重职责"&gt;Layer 1｜using-agent-skills：meta-skill 的双重职责
&lt;/h2&gt;&lt;p&gt;如果说 CLAUDE.md 是地图，using-agent-skills 就是&lt;strong&gt;这套系统的&amp;quot;操作系统&amp;quot;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;它是唯一一个会被 hook 强制注入到每个新会话的 skill。我们待会儿讲 hook 的时候你会看到，session-start.sh 干的事就一件——把 using-agent-skills 的全文塞进会话的第一条 system message。&lt;/p&gt;
&lt;p&gt;打开这个文件，你会发现它和其他 skill 完全不一样。它做两件事：&lt;/p&gt;
&lt;h3 id="职责一路由器skill-router"&gt;职责一：路由器（Skill Router）
&lt;/h3&gt;&lt;p&gt;一个 ASCII 决策树：&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-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="n"&gt;arrives&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Don&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;t know what you want yet? ──────→ interview-me&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Have&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;rough&lt;/span&gt; &lt;span class="n"&gt;concept&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;need&lt;/span&gt; &lt;span class="n"&gt;variants&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;idea&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;refine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;New&lt;/span&gt; &lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;feature&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;change&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;─────→&lt;/span&gt; &lt;span class="n"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Implementing&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;─────────────→&lt;/span&gt; &lt;span class="n"&gt;incremental&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;implementation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;UI&lt;/span&gt; &lt;span class="n"&gt;work&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;─────────────────→&lt;/span&gt; &lt;span class="n"&gt;frontend&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ui&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;engineering&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;API&lt;/span&gt; &lt;span class="n"&gt;work&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;────────────────→&lt;/span&gt; &lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;interface&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;design&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;Stakes&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;─────────────→&lt;/span&gt; &lt;span class="n"&gt;doubt&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Writing&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;running&lt;/span&gt; &lt;span class="n"&gt;tests&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;───────→&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;driven&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;development&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Something&lt;/span&gt; &lt;span class="n"&gt;broke&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;─────────────→&lt;/span&gt; &lt;span class="n"&gt;debugging&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;recovery&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;Reviewing&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;──────────────→&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;review&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;quality&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;Deploying&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;launching&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="err"&gt;────────→&lt;/span&gt; &lt;span class="n"&gt;shipping&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;launch&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;ul&gt;
&lt;li&gt;&lt;strong&gt;树形结构，不是列表&lt;/strong&gt;——强迫读者走唯一路径&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;问句触发，不是任务描述&lt;/strong&gt;——&amp;ldquo;Something broke?&amp;rdquo; 比 &amp;ldquo;debugging task&amp;rdquo; 更贴近真实对话&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;父节点 → 子节点细化&lt;/strong&gt;——符合 AI 的层次推理习惯&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="职责二行为宪法core-operating-behaviors"&gt;职责二：行为宪法（Core Operating Behaviors）
&lt;/h3&gt;&lt;p&gt;下半部分是 6 条&amp;quot;不可协商的行为约束&amp;quot;：&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. Surface Assumptions → 显式声明假设
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. Manage Confusion Actively → 遇到矛盾不能猜
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Push Back When Warranted → 不做 yes-machine
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. Enforce Simplicity → 主动抵抗过度工程化
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. Maintain Scope Discipline → 不顺手重构
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6. Verify, Don&amp;#39;t Assume → 验证是必经步骤
&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;读到这里我才理解为什么 Addy 要把它叫 meta-skill——&lt;strong&gt;它不是一个具体技能，它是治理其他技能的元规则&lt;/strong&gt;。每一条都精确对抗 AI 的一个典型缺陷：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;行为&lt;/th&gt;
 &lt;th&gt;对抗的 AI 缺陷&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Surface Assumptions&lt;/td&gt;
 &lt;td&gt;AI 倾向&amp;quot;静默填充&amp;quot;歧义&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Manage Confusion Actively&lt;/td&gt;
 &lt;td&gt;AI 倾向遇到矛盾&amp;quot;就近取一&amp;quot;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Push Back&lt;/td&gt;
 &lt;td&gt;AI 的奉承倾向（sycophancy）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Enforce Simplicity&lt;/td&gt;
 &lt;td&gt;AI 的过度工程化倾向&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Scope Discipline&lt;/td&gt;
 &lt;td&gt;AI 的&amp;quot;顺手重构&amp;quot;倾向&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Verify, Don&amp;rsquo;t Assume&lt;/td&gt;
 &lt;td&gt;AI 的&amp;quot;看起来对就完成了&amp;quot;倾向&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt="meta-skill 双重职责" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-architecture/meta-skill-dual-role.webp" srcset="https://guige.ai/p/agent-skills-architecture/meta-skill-dual-role_hu_98d751c93820532.webp 800w, https://guige.ai/p/agent-skills-architecture/meta-skill-dual-role_hu_ddcff32990b35ab4.webp 1600w, https://guige.ai/p/agent-skills-architecture/meta-skill-dual-role.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;p&gt;文件最后还有一份 &lt;strong&gt;10 条 Failure Modes&lt;/strong&gt;，和 6 条行为形成&amp;quot;进攻 vs 防守&amp;quot;的双层防御：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;行为约束 → 处理&amp;quot;AI 的借口&amp;quot;（主动跳过的想法）&lt;/li&gt;
&lt;li&gt;失败模式 → 处理&amp;quot;AI 的症状&amp;quot;（已经在跳过的迹象）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一个 180 行的文件，承担了整套系统的路由 + 治理。&lt;strong&gt;它是 Layer 1，它的存在让 Layer 2-5 才能各司其职。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="layer-2commands7-个动词的克制设计"&gt;Layer 2｜commands：7 个动词的克制设计
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;.claude/commands/&lt;/code&gt; 里只有 7 个文件：&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/spec → 写 SPEC.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/plan → 拆解任务
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/build → 实现一个任务（TDD + incremental）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/test → 写测试
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/review → 五维 review
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/code-simplify → 简化代码
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/ship → 上线决策
&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;7 个 slash command，对应整个开发生命周期的 7 个关键动作。每个文件都极度克制——除了 &lt;code&gt;/ship&lt;/code&gt;，其他都在 15-25 行之间。&lt;/p&gt;
&lt;h3 id="command-不是-skill-的复刻"&gt;Command 不是 Skill 的复刻
&lt;/h3&gt;&lt;p&gt;我刚开始读的时候有个困惑：为什么有了 21 个 skill，还要单独搞一个 commands 目录？&lt;/p&gt;
&lt;p&gt;读完后才理解——&lt;strong&gt;command 是 skill 的&amp;quot;激活快捷键&amp;quot;&lt;/strong&gt;。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;维度&lt;/th&gt;
 &lt;th&gt;Skill&lt;/th&gt;
 &lt;th&gt;Command&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&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;完整方法论（100-300 行）&lt;/td&gt;
 &lt;td&gt;调用配方（15-25 行）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;写给谁看&lt;/td&gt;
 &lt;td&gt;AI 模型&lt;/td&gt;
 &lt;td&gt;模型 + 人（用户要 type）&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;code&gt;/&lt;/code&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;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Command 文件不重复 skill 内容，而是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;显式声明要调用哪个 skill&lt;/li&gt;
&lt;li&gt;给出最小可操作步骤（4-6 步）&lt;/li&gt;
&lt;li&gt;指定输出位置（&lt;code&gt;Save the spec as SPEC.md&lt;/code&gt;、&lt;code&gt;Save the plan to tasks/plan.md&lt;/code&gt;）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;举个例子，&lt;code&gt;/spec&lt;/code&gt; 全文不到 20 行：&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;/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;description: Start spec-driven development — write a structured specification before writing code
&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;Invoke the agent-skills:spec-driven-development skill.
&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;Begin by understanding what the user wants to build. Ask clarifying questions about:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; The objective and target users
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; Core features and acceptance criteria
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; Tech stack preferences and constraints
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;4.&lt;/span&gt; Known boundaries
&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;Then generate a structured spec covering all six core areas: ...
&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;Save the spec as SPEC.md in the project root and confirm with the user before proceeding.
&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;它把 spec-driven-development 这个 200 行的 skill，浓缩成了一个用户层的快捷指令。&lt;/p&gt;
&lt;h3 id="命令命名的语义学"&gt;命令命名的语义学
&lt;/h3&gt;&lt;p&gt;每个命令名都对应一个&lt;strong&gt;具体的可交付物&lt;/strong&gt;。没有 &lt;code&gt;/think&lt;/code&gt; 或 &lt;code&gt;/explore&lt;/code&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;/spec&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;SPEC.md&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/plan&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;tasks/plan.md&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/build&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;代码 + 测试 + commit&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/review&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;review report&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/ship&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;GO/NO-GO + rollback&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;读到 &lt;code&gt;/ship&lt;/code&gt; 命令时我被震到了——这是 7 个命令里唯一一个超过 70 行的，因为它是一个&lt;strong&gt;并行 fan-out 编排器&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;/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;/ship Phase A: 并行 spawn 3 个 subagent
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; (code-reviewer + security-auditor + test-engineer)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Phase B: 主 agent 合并三份报告
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Phase C: 输出 GO/NO-GO + Rollback Plan
&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;注意 Phase A 的关键约束：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Issue all three Agent tool calls in &lt;strong&gt;a single assistant turn&lt;/strong&gt; — sequential calls defeat the purpose of this command.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;它显式约束 AI &lt;strong&gt;必须在一个 turn 里发出三个 Agent 调用&lt;/strong&gt;——否则就是串行而非并行，整个 fan-out 设计就失效了。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;字典型对 7 个命令逐个拆解，并对比单 skill / 多 skill / Fan-out 三种命令模式。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="layer-3agents为什么只有-3-个-persona"&gt;Layer 3｜agents：为什么只有 3 个 persona？
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;agents/&lt;/code&gt; 目录下只有 3 个 persona 文件 + 1 个 README：&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code-reviewer.md 97 行
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;security-auditor.md 101 行
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;test-engineer.md 95 行
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;README.md 120 行 ← 编排宪法
&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;只有 3 个&lt;/strong&gt;，这是有意为之的克制。&lt;/p&gt;
&lt;h3 id="persona-是什么"&gt;Persona 是什么？
&lt;/h3&gt;&lt;p&gt;每个 persona 文件长这样：&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;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;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&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;name: code-reviewer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: Senior code reviewer that evaluates changes across five dimensions...
&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 class="gh"&gt;# Senior Code Reviewer
&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;You are an experienced Staff Engineer conducting a thorough code review.
&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;## Review Framework
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 1. Correctness ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 2. Readability ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 3. Architecture ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 4. Security ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 5. Performance ...
&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="gu"&gt;## Output Format
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Critical / Important / Suggestion 三级]
&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;## Review Output Template
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Markdown 模板]
&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;## Rules
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[6 条行为规则]
&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;## Composition
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Invoke directly when: ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Invoke via: /review or /ship
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Do not invoke from another persona.
&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;和 Skill 文件对比，最关键的差别是 persona &lt;strong&gt;有 Output Template&lt;/strong&gt;——一段固定的 Markdown 结构。这是因为 persona 是给&amp;quot;会被并行调用、需要被 merge&amp;quot;的 subagent 用的，输出结构必须可预测、可聚合。&lt;/p&gt;
&lt;h3 id="三层架构skill--persona--command"&gt;三层架构：Skill × Persona × Command
&lt;/h3&gt;&lt;p&gt;读 agents/README.md 时，我看到这张表，整个系统的设计意图一下清晰了：&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;th&gt;类比&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Skill&lt;/td&gt;
 &lt;td&gt;方法论 / 步骤 / 退出条件&lt;/td&gt;
 &lt;td&gt;code-review-and-quality&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;HOW&lt;/strong&gt;（怎么做）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Persona&lt;/td&gt;
 &lt;td&gt;角色 / 视角 / 输出格式&lt;/td&gt;
 &lt;td&gt;code-reviewer&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;WHO&lt;/strong&gt;（谁来做）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Command&lt;/td&gt;
 &lt;td&gt;用户入口 / 编排器&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/review&lt;/code&gt;, &lt;code&gt;/ship&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;WHEN&lt;/strong&gt;（何时做）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;具体到 &lt;code&gt;/review&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;/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;用户输入 /review
&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;.claude/commands/review.md (WHEN — 入口)
&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;agents/code-reviewer.md (WHO — 视角)
&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;skills/code-review-and-quality/ (HOW — 流程)
&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;references/security-checklist.md (DATA — 数据)
&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;p&gt;&lt;img alt="三层架构 (Skill / Persona / Command)" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-architecture/three-layer-architecture.webp" srcset="https://guige.ai/p/agent-skills-architecture/three-layer-architecture_hu_c89fec8a85cf0321.webp 800w, https://guige.ai/p/agent-skills-architecture/three-layer-architecture_hu_19c67621d395d30d.webp 1600w, https://guige.ai/p/agent-skills-architecture/three-layer-architecture.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;h3 id="为什么只有-3-个-persona"&gt;为什么只有 3 个 persona？
&lt;/h3&gt;&lt;p&gt;读到这里我才意识到——3 个 persona 不是随便选的。它们对应 &lt;code&gt;/ship&lt;/code&gt; 命令的 fan-out 三个独立视角：&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;Code quality (functional) ← code-reviewer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Security (adversarial) ← security-auditor
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Tests (coverage) ← test-engineer
&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;独立视角&lt;/strong&gt;——不能从其他视角派生&lt;/li&gt;
&lt;li&gt;必须有&lt;strong&gt;可并行&lt;/strong&gt;的工作内容（同一个 diff，不同关注点）&lt;/li&gt;
&lt;li&gt;必须有&lt;strong&gt;结构化的输出&lt;/strong&gt;便于 merge&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;像 frontend-ui、performance、accessibility 这些为什么没成为 persona？因为它们或者和现有 persona 视角重叠，或者更像 checklist 而不是视角。&lt;/p&gt;
&lt;h3 id="核心铁律the-user-is-the-orchestrator"&gt;核心铁律：The user is the orchestrator
&lt;/h3&gt;&lt;p&gt;README 里反复强调一条铁律：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;The user (or a slash command) is the orchestrator. Personas do not call other personas.&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;这条规则在 agents/README.md 里被重复了 5 次以上。背后有三层原因：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;平台约束&lt;/strong&gt;：Claude Code 的 subagent 系统禁止递归——subagent 不能再 spawn subagent&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;信息损耗&lt;/strong&gt;：每多一层 persona 转发，就多一次&amp;quot;用自己语言重述&amp;quot;——信息保真度下降&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;价值密度&lt;/strong&gt;：纯粹做路由的 persona 没有领域价值，应该让 command 来做&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;为了让这条规则更具体，README 专门画了一段&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-fallback" data-lang="fallback"&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;/work-on-pr → meta-orchestrator
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ &amp;#34;this needs a review&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; code-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; meta-orchestrator (paraphrases result)
&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; user
&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;blockquote&gt;
 &lt;p&gt;Pure routing layer with no domain value. Adds two paraphrasing hops → information loss + 2× token cost.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;这种&amp;quot;先画错的样子，再讲为什么错&amp;quot;的反例教学法，是整套文档里最有教育意义的部分。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;字典型对 3 个 persona 文件逐个拆解，并展开 README 中的所有正例/反例。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="layer-4skills21-个文件一份合同"&gt;Layer 4｜skills：21 个文件，一份合同
&lt;/h2&gt;&lt;p&gt;skills/ 是这个仓库最大的目录——21 个 SKILL.md 文件，按开发阶段组织：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Define（定义）&lt;/strong&gt;：interview-me, idea-refine, spec-driven-development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plan（规划）&lt;/strong&gt;：planning-and-task-breakdown&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build（构建）&lt;/strong&gt;：incremental-implementation, test-driven-development, context-engineering, source-driven-development, doubt-driven-development, frontend-ui-engineering, api-and-interface-design&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verify（验证）&lt;/strong&gt;：browser-testing-with-devtools, debugging-and-error-recovery&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review（评审）&lt;/strong&gt;：code-review-and-quality, code-simplification, security-and-hardening, performance-optimization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ship（发布）&lt;/strong&gt;：git-workflow-and-versioning, ci-cd-and-automation, deprecation-and-migration, documentation-and-adrs, shipping-and-launch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但更让我震撼的是——&lt;strong&gt;这 21 个文件的结构高度一致&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="claudemd-第-30-行的合同"&gt;CLAUDE.md 第 30 行的合同
&lt;/h3&gt;&lt;p&gt;CLAUDE.md 里有一句话定义了所有 skill 必须遵守的 schema：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Every skill has: Overview, When to Use, Process, Common Rationalizations, Red Flags, Verification&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;21 个 SKILL.md 文件，逐个打开，都长这样：&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;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;/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 class="gh"&gt;# Skill Name
&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="gu"&gt;## Overview
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[这个 skill 是干什么的、为什么存在]
&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;## When to Use
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[何时启用 + When NOT to use]
&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;## Process
&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Common Rationalizations
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| Rationalization | Reality |
&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 class="gu"&gt;## Red Flags
&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Verification
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&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;strong&gt;强制 schema&lt;/strong&gt;。SKILL.md 写法上的约束等于：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;必须告诉读者&amp;quot;这是干什么的&amp;quot;（Overview）&lt;/li&gt;
&lt;li&gt;必须告诉读者&amp;quot;什么时候用 / 什么时候不用&amp;quot;（When to Use）&lt;/li&gt;
&lt;li&gt;必须给出可执行步骤（Process）&lt;/li&gt;
&lt;li&gt;必须预判用户会用什么借口跳过（Common Rationalizations）&lt;/li&gt;
&lt;li&gt;必须列出反模式症状（Red Flags）&lt;/li&gt;
&lt;li&gt;必须给出可验证的完成条件（Verification）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;没有任何一项是装饰&lt;/strong&gt;。每一项都对应一个 AI 可能犯的错。&lt;/p&gt;
&lt;h3 id="spec-driven-development教科书级-process"&gt;spec-driven-development：教科书级 Process
&lt;/h3&gt;&lt;p&gt;读完 21 个 skill 后，我心目中最教科书的是 &lt;code&gt;spec-driven-development&lt;/code&gt;。它的 Process 段长这样：&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SPECIFY ──→ PLAN ──→ TASKS ──→ IMPLEMENT
&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; Human Human Human Human
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; reviews reviews reviews reviews
&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;四段 gated workflow，每段都强制 human review。&lt;code&gt;Do not advance to the next phase until the current one is validated.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;它的 Specify Phase 里有 5 个非常具体的技巧：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Surface Assumptions&lt;/strong&gt; — 显式列假设，末尾加 &lt;code&gt;→ Correct me now or I'll proceed with these.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Six core areas&lt;/strong&gt; — Objective / Commands / Project Structure / Code Style / Testing Strategy / Boundaries&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;三层 Boundaries&lt;/strong&gt; — Always do / Ask first / Never do（关键是中间那层，把&amp;quot;需要人类确认&amp;quot;显式化）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reframe instructions as success criteria&lt;/strong&gt; — 把&amp;quot;做得快一点&amp;quot;翻译成&amp;quot;LCP &amp;lt; 2.5s on 4G&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spec template&lt;/strong&gt; — 可复用的 Markdown 模板&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;每一个技巧都在解决一个具体的 AI 行为偏差。&lt;/p&gt;
&lt;h3 id="common-rationalizations-的设计精髓"&gt;Common Rationalizations 的设计精髓
&lt;/h3&gt;&lt;p&gt;每个 skill 末尾的 Common Rationalizations 表，是整个 agent-skills 项目里我学到最重要的设计模式。它干两件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;预判 AI 偷懒的理由&lt;/strong&gt;——AI 在长 context 里会发明各种跳过 skill 的借口&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;把反驳预先写好&lt;/strong&gt;——一句话见血，不啰嗦&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这是一种&lt;strong&gt;反熵设计&lt;/strong&gt;。它把&amp;quot;AI 心理学&amp;quot;工程化了，让&amp;quot;逼 AI 不能这么做&amp;quot;成为可执行的格式。&lt;/p&gt;
&lt;p&gt;读到这里我意识到：&lt;strong&gt;整个 agent-skills 项目最大的创新点，可能不是&amp;quot;列出 21 个 skill&amp;quot;，而是&amp;quot;为 skill 文件定义了一种格式&amp;quot;&lt;/strong&gt;。任何一个团队，只要愿意按这个格式写自己的 skill 文件，就能把自己的工程纪律编码给 AI。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;字典型逐项拆解 spec-driven-development、test-driven-development、using-agent-skills 等代表性 skill，展示 schema 在不同语境下的应用。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="layer-5referenceslazy-loading-的数据层"&gt;Layer 5｜references：lazy loading 的数据层
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;references/&lt;/code&gt; 目录下有 5 个文件：&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;accessibility-checklist.md 160 行
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;performance-checklist.md 153 行
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;security-checklist.md 134 行
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;testing-patterns.md 236 行
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;orchestration-patterns.md 370 行
&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;所有文件都没有 YAML frontmatter&lt;/strong&gt;——这是它们与 skill 最本质的区别。&lt;strong&gt;它们不是 skill，不被自动发现，不被自动加载。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="context-on-demand-的设计"&gt;Context-on-Demand 的设计
&lt;/h3&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;/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;SKILL.md (process / 方法论 / 100-200 行) ← 总在 context 里
&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;references/X.md (data / 清单 / 100-400 行) ← 按需读
&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;skill 文件保持精简，把&amp;quot;长尾的检查项 / 模式目录 / 反模式表&amp;quot;全部下沉到 references。当 AI 真正需要时，由 skill 文件指示去读对应的 reference。&lt;/p&gt;
&lt;p&gt;CLAUDE.md 里这条约定明确写了：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Supporting files only created when content exceeds 100 lines&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;100 行是阈值。超过就拆出去。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="引用机制纯文本路径"&gt;引用机制：纯文本路径
&lt;/h3&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;- &amp;#34;see `references/security-checklist.md`&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;#34;For detailed accessibility requirements...see `references/accessibility-checklist.md`&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;#34;(see references/orchestration-patterns.md)&amp;#34;
&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;code&gt;include&lt;/code&gt; 指令&lt;/li&gt;
&lt;li&gt;不是 frontmatter 字段&lt;/li&gt;
&lt;li&gt;不是 MCP 资源&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;就是一句&amp;quot;自然语言路径&amp;quot;。AI 读到这句话，自己判断是否需要 Read。&lt;/p&gt;
&lt;p&gt;这种&amp;quot;软引用&amp;quot;的好处：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI 决定权重&lt;/strong&gt;：context 紧张时可以不读&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;透明可控&lt;/strong&gt;：用户可以看到哪些 reference 被读了&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨工具兼容&lt;/strong&gt;：在任何能读文件的环境都能工作&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="两种-reference-的功能分化"&gt;两种 reference 的功能分化
&lt;/h3&gt;&lt;p&gt;5 个 reference 文件，本质上分两类：&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;th&gt;触发点&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Checklist&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;security / performance / accessibility&lt;/td&gt;
 &lt;td&gt;复选框任务列表&lt;/td&gt;
 &lt;td&gt;上线前、review 时&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Pattern Catalog&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;testing-patterns / orchestration-patterns&lt;/td&gt;
 &lt;td&gt;正例 + 反例 + 决策表&lt;/td&gt;
 &lt;td&gt;设计时、新增能力时&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Checklist 类的形态：&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-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Authentication
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Passwords hashed with bcrypt (≥12 rounds)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Session cookies: httpOnly, secure, sameSite: &amp;#39;lax&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Session expiration configured
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Rate limiting on login endpoint (≤10 attempts per 15 minutes)
&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;复选框 → 显式&amp;quot;做过/没做&amp;quot;二元状态；每条都是可验证条件（含具体参数 &lt;code&gt;≥12 rounds&lt;/code&gt;、&lt;code&gt;≤10 attempts&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;Pattern Catalog 类的形态：&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-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 1. Direct invocation (no orchestration)
&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 2. Single-persona slash command
&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;### 3. Parallel fan-out with merge
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ASCII 流程图 + 使用条件]
&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 class="gu"&gt;## Anti-patterns
&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;命名模式（A / B / C）便于交叉引用，每个模式包含图示、用例、成本、反信号，显式列出 anti-patterns。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这一层的妙处在于：它把&amp;quot;数据&amp;quot;和&amp;quot;方法论&amp;quot;彻底分开&lt;/strong&gt;。同一个 security-checklist 被 code-review、security-and-hardening、shipping-and-launch 三个 skill 共用——写在 reference 里就只需要维护一份。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="layer-xhooks无侵入的-aop-设计"&gt;Layer X｜hooks：无侵入的 AOP 设计
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;hooks/&lt;/code&gt; 是整个仓库里我最佩服的一层——&lt;strong&gt;三个 hook，三种完全不同的干预模式&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Hook&lt;/th&gt;
 &lt;th&gt;触发事件&lt;/th&gt;
 &lt;th&gt;干预方式&lt;/th&gt;
 &lt;th&gt;配套 Skill&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;session-start&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SessionStart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;注入&lt;/strong&gt; context&lt;/td&gt;
 &lt;td&gt;using-agent-skills&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;sdd-cache&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;PreToolUse:WebFetch&lt;/code&gt; + &lt;code&gt;PostToolUse:WebFetch&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;替换&lt;/strong&gt; 工具输出&lt;/td&gt;
 &lt;td&gt;source-driven-development&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;simplify-ignore&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;PreToolUse:Read&lt;/code&gt; + &lt;code&gt;PostToolUse:Edit|Write&lt;/code&gt; + &lt;code&gt;Stop&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;遮蔽&lt;/strong&gt; 工具输入&lt;/td&gt;
 &lt;td&gt;code-simplification&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt="hooks 三种干预模式" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-architecture/hooks-three-modes.webp" srcset="https://guige.ai/p/agent-skills-architecture/hooks-three-modes_hu_bc3821d9dcb31aa0.webp 800w, https://guige.ai/p/agent-skills-architecture/hooks-three-modes_hu_ff7216d578a584ad.webp 1600w, https://guige.ai/p/agent-skills-architecture/hooks-three-modes.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;h3 id="session-start自动加载操作系统"&gt;session-start：自动加载操作系统
&lt;/h3&gt;&lt;p&gt;session-start.sh 只有 24 行，干的事就一件：&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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;META_SKILL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$SKILLS_DIR&lt;/span&gt;&lt;span class="s2"&gt;/using-agent-skills/SKILL.md&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -f &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$META_SKILL&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;CONTENT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;cat &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$META_SKILL&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; jq -cn --arg message &lt;span class="s2"&gt;&amp;#34;agent-skills loaded. ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$CONTENT&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;{priority: &amp;#34;IMPORTANT&amp;#34;, message: $message}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&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;using-agent-skills/SKILL.md&lt;/code&gt; 的全部 180 行注入到第一条 system message 里。&lt;/p&gt;
&lt;p&gt;没有它的话：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI 进入仓库不知道有 21 个 skill&lt;/li&gt;
&lt;li&gt;AI 不知道决策树&lt;/li&gt;
&lt;li&gt;AI 不知道 6 条核心行为约束&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CLAUDE.md 虽然总在 context，但它只有 44 行的导航信息。&lt;strong&gt;真正的&amp;quot;操作系统&amp;quot;是 using-agent-skills——必须通过 hook 强制加载。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="sdd-cachehttp-协议感知的缓存"&gt;sdd-cache：HTTP 协议感知的缓存
&lt;/h3&gt;&lt;p&gt;这是整个项目里我认为最精彩的一个设计。&lt;/p&gt;
&lt;p&gt;核心矛盾：&lt;code&gt;source-driven-development&lt;/code&gt; skill 要求&lt;strong&gt;每个框架决策都 fetch 官方文档&lt;/strong&gt;——但同一个项目跨会话工作意味着反复 fetch 同一个页面。简单缓存会破坏 skill 的&amp;quot;always verify against current docs&amp;quot;承诺。&lt;/p&gt;
&lt;p&gt;解决方案：&lt;strong&gt;不靠 TTL，靠 ETag / Last-Modified 校验&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;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;PreToolUse:WebFetch
&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;HEAD 请求 + If-None-Match: &amp;lt;etag&amp;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;返回 304？──否──→ 放行（让 WebFetch 真正跑）
&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;exit 2 + 缓存内容输出到 stderr
&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;Claude Code 把 stderr 当作 WebFetch 的&amp;#34;结果&amp;#34;返回给 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;exit 2 当作 in-band 信号&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;/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="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$STATUS&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;304&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# ... 输出缓存内容到 stderr ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&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;Claude Code 的 hook 协议里，&lt;code&gt;exit 2&lt;/code&gt; = 阻止工具执行 + 把 stderr 传回 AI。sdd-cache 利用这个机制，把&amp;quot;缓存命中&amp;quot;伪装成&amp;quot;工具被拒&amp;quot;——但 stderr 里其实是有效内容。&lt;/p&gt;
&lt;p&gt;这不是 hack，是&lt;strong&gt;对协议的精确利用&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;还有一个细节：&lt;strong&gt;没有 ETag/Last-Modified 的内容永不缓存&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;/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="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -z &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$ETAG&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; -z &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$LAST_MOD&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dbg &lt;span class="s2"&gt;&amp;#34;cannot revalidate, bypass&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&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;没有验证器的内容永不缓存。这是核心安全保证——避免&amp;quot;缓存了但永远不知道何时该失效&amp;quot;的状态。&lt;/p&gt;
&lt;h3 id="simplify-ignore让模型物理上看不到"&gt;simplify-ignore：让模型物理上看不到
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;/code-simplify&lt;/code&gt; 会重写代码以提高可读性。但有些代码不能被重写：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;手工展开的循环（性能优化）&lt;/li&gt;
&lt;li&gt;精心调过的算法&lt;/li&gt;
&lt;li&gt;跨平台 workaround&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果只在注释里写&amp;quot;don&amp;rsquo;t simplify this&amp;quot;，模型不一定遵守。&lt;/p&gt;
&lt;p&gt;simplify-ignore 的解决方案：&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* simplify-ignore-start: perf-critical */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* simplify-ignore-end */&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;经过 hook 处理后，模型 read 文件时看到的是：&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;/* BLOCK_de115a1d: perf-critical */
&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;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;PreToolUse:Read → 备份原文件 + 替换为 BLOCK_&amp;lt;hash&amp;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;PostToolUse:Edit → 模型写入新版本（仍含 BLOCK_&amp;lt;hash&amp;gt;）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → hook 展开占位符回到原代码
&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;Stop（会话结束） → 从备份恢复所有被保护的文件
&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;内容哈希作为占位符 ID——即使模型把占位符复制、移位、删除，hash 仍能精确定位回原代码。&lt;/p&gt;
&lt;h3 id="三个-hook-的设计共性"&gt;三个 hook 的设计共性
&lt;/h3&gt;&lt;p&gt;虽然三个 hook 用途完全不同，但它们都遵守相同的设计原则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;优雅降级&lt;/strong&gt;：依赖缺失（jq、curl）时静默 exit 0，让会话继续&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;显式调试日志&lt;/strong&gt;：每个关键步骤打日志到 &lt;code&gt;.debug.log&lt;/code&gt;，通过环境变量或 sentinel 文件触发&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;与具体 skill 一对一绑定&lt;/strong&gt;：每个 hook 只服务一个 skill&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文档专门解释反直觉行为&lt;/strong&gt;：每个 hook 都假设读者会困惑，主动消除困惑&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="hook-的核心哲学不修改-skill增强-skill"&gt;Hook 的核心哲学：不修改 skill，增强 skill
&lt;/h3&gt;&lt;p&gt;读完 hooks 后我意识到——&lt;strong&gt;这三个 hook 都没有修改任何 skill 内容，但增强了 skill 的能力&lt;/strong&gt;。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;SDD-CACHE.md: &amp;ldquo;The skill itself is unchanged. It continues to follow DETECT → FETCH → IMPLEMENT → CITE. The hook only changes what happens under the hood when FETCH runs.&amp;rdquo;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;这是 &lt;strong&gt;AOP（面向切面编程）思想在 AI 工程里的应用&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;session-start 干预 Layer 1 的加载方式&lt;/li&gt;
&lt;li&gt;sdd-cache 干预 Layer 4 的工具调用&lt;/li&gt;
&lt;li&gt;simplify-ignore 干预 Layer 4 的工具读写&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它们都不在层级内，是横切关注点——&lt;strong&gt;在不修改 skill 本身的情况下增强 skill&lt;/strong&gt;。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;字典型对 hooks 三个脚本逐行拆解，展示每个 hook 的完整 shell 实现与边界情况处理。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="三条贯穿全系统的设计哲学"&gt;三条贯穿全系统的设计哲学
&lt;/h2&gt;&lt;p&gt;读完整个 agent-skills 项目，鬼哥提炼出三条贯穿所有 6 层的核心哲学。它们不是 Addy 写在某一个文件里的，但渗透在每一个设计决策里。&lt;/p&gt;
&lt;p&gt;&lt;img alt="三条贯穿系统的设计哲学" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-architecture/design-philosophies.webp" srcset="https://guige.ai/p/agent-skills-architecture/design-philosophies_hu_c6357b4ae57195ba.webp 800w, https://guige.ai/p/agent-skills-architecture/design-philosophies_hu_2ab920940634be9a.webp 1600w, https://guige.ai/p/agent-skills-architecture/design-philosophies.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;h3 id="哲学一委托而非复制never-duplicate"&gt;哲学一：委托而非复制（Never Duplicate）
&lt;/h3&gt;&lt;p&gt;CLAUDE.md 第 43 行写着：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Never: Duplicate content between skills — reference other skills instead.&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;这一条规则贯穿了所有 6 层：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/build&lt;/code&gt; command 委托给 &lt;code&gt;incremental-implementation&lt;/code&gt; + &lt;code&gt;TDD&lt;/code&gt;，而不是复制内容&lt;/li&gt;
&lt;li&gt;skills 委托给 references，而不是塞清单&lt;/li&gt;
&lt;li&gt;personas 委托给 skills，而不是复制流程&lt;/li&gt;
&lt;li&gt;hooks 委托给协议（exit code），而不是定义自己的通信机制&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;整个仓库的&amp;quot;指针架构&amp;quot;，根源就是 CLAUDE.md 的这一条 &amp;ldquo;Never: Duplicate content&amp;rdquo;。&lt;/strong&gt; 任何一处违反这条规则，就会触发跨文件的内容漂移，进而瓦解整个系统的可维护性。&lt;/p&gt;
&lt;h3 id="哲学二利用协议而非绕过协议"&gt;哲学二：利用协议而非绕过协议
&lt;/h3&gt;&lt;p&gt;sdd-cache 用 exit code 2 实现缓存命中通信——这不是 hack 出来的新通道，而是精确地用了 Claude Code hook 协议里 exit code 2 的含义。&lt;/p&gt;
&lt;p&gt;simplify-ignore 也是——它不给模型发&amp;quot;特殊指令&amp;quot;，而是直接物理修改 Read 工具返回的文件内容。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hook 作用在协议层，不作用在语义层。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;整个项目里，凡是需要在 AI 行为上做特殊干预的地方，agent-skills 都选择&amp;quot;利用现有协议&amp;quot;的方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用 &lt;code&gt;exit code&lt;/code&gt; 传信号，不发明新指令&lt;/li&gt;
&lt;li&gt;用 ASCII 决策树触发路由，不写规则引擎&lt;/li&gt;
&lt;li&gt;用 Markdown 模板约束输出，不接入校验工具&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种思维方式给我的启发是——&lt;strong&gt;好的 AI 工程，应该用 AI 已经会用的语言去约束 AI，不要发明一套 AI 看不懂的形式系统。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="哲学三用反例教学定义边界"&gt;哲学三：用反例教学定义边界
&lt;/h3&gt;&lt;p&gt;读完 agents/README.md 后我意识到——&lt;strong&gt;架构铁律是&amp;quot;否定式&amp;quot;的（不要做 X），所以必须用反例教学。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;agent-skills 里到处是反例：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;agents/README.md 画了一段刻意的&amp;quot;反例代码&amp;quot;（meta-orchestrator）&lt;/li&gt;
&lt;li&gt;每个 skill 的 Red Flags 段是&amp;quot;AI 已经在偏离时的可观察行为&amp;quot;&lt;/li&gt;
&lt;li&gt;每个 skill 的 Common Rationalizations 是&amp;quot;AI 还没行动时的思维偏差&amp;quot;&lt;/li&gt;
&lt;li&gt;spec-driven-development 列了&amp;quot;When NOT to use&amp;quot;的反向条件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;正例告诉读者 &amp;ldquo;做什么&amp;rdquo;，反例告诉读者 &amp;ldquo;边界在哪里&amp;rdquo;&lt;/strong&gt;。两者缺一不可。&lt;/p&gt;
&lt;p&gt;很多技术文档只有正例——读者读完后知道怎么做，但不知道什么时候不该做。agent-skills 用大量反例补上了这块。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="鬼哥的推荐从架构到思维体系"&gt;鬼哥的推荐｜从架构到思维体系
&lt;/h2&gt;&lt;p&gt;写到这里，文章其实已经把 agent-skills 的架构讲完了。但鬼哥想留点篇幅，跟你聊一件更重要的事。&lt;/p&gt;
&lt;h3 id="不要只学架构要读高手的思维体系"&gt;不要只学架构，要读&amp;quot;高手的思维体系&amp;quot;
&lt;/h3&gt;&lt;p&gt;如果你只是把 agent-skills 当成一套&amp;quot;AI 提示词模板&amp;quot;或者&amp;quot;工程纪律检查表&amp;quot;，那你只学到了 30%。&lt;/p&gt;
&lt;p&gt;剩下的 70% 在哪？&lt;strong&gt;在源码里，在每一个设计决策背后的取舍里。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;举几个我读源码时被震到的地方：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1）100 行是拆分阈值，但 SKILL.md 自己可以超过 100 行。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CLAUDE.md 说 &amp;ldquo;Supporting files only created when content exceeds 100 lines&amp;rdquo;。但 spec-driven-development 的 SKILL.md 自己有 200 行——为什么不拆？&lt;/p&gt;
&lt;p&gt;读源码我才理解：&lt;strong&gt;100 行规则是&amp;quot;data vs methodology&amp;quot;的分界线，不是文件长度的硬上限&lt;/strong&gt;。方法论可以长，但清单和数据必须拆出去。这个判断只有写过大量工程文档的人才能精准把握。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2）路由树和决策矩阵交叉验证。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;using-agent-skills 的决策树和 agents/README.md 的&amp;quot;Decision matrix&amp;quot;讲的是不同的事——前者是&amp;quot;任务路由&amp;quot;，后者是&amp;quot;协作模式选择&amp;quot;。两者交叉但不重叠。&lt;/p&gt;
&lt;p&gt;读到这里我才意识到——&lt;strong&gt;好的文档系统会用多种结构表达同一个概念，从不同角度让读者反复确认理解。&lt;/strong&gt; 这是教学体系而不是文档体系。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3）每个 skill 都有反例，但 Verification 没有反例。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;为什么？因为 Verification 是 boolean 可判定的（yes/no），反例没有意义。Common Rationalizations 和 Red Flags 是模糊地带（AI 可能这么想/可能这么做），所以需要反例。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这种&amp;quot;什么需要反例、什么不需要&amp;quot;的精准判断，是工程经验的体现。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="高手思维的核心用约束代替能力"&gt;高手思维的核心：用约束代替能力
&lt;/h3&gt;&lt;p&gt;读完 agent-skills 后我有一个最深的感受——&lt;strong&gt;Addy 在用工程约束代替模型能力&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;很多人做 AI 项目的第一反应是：&amp;ldquo;这个模型不够好，我要换更强的&amp;quot;或&amp;quot;我要给它更多 example&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;但 Addy 的做法是相反的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不期待模型自己知道要写 spec → 用 skill 强制&lt;/li&gt;
&lt;li&gt;不期待模型自己知道要写测试 → 用 TDD skill 强制&lt;/li&gt;
&lt;li&gt;不期待模型自己知道要 review → 用 &lt;code&gt;/ship&lt;/code&gt; 编排 review&lt;/li&gt;
&lt;li&gt;不期待模型自己知道要 rollback → 用模板强制输出 rollback plan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;他把&amp;quot;对模型的期待&amp;quot;降到最低，把&amp;quot;对流程的设计&amp;quot;提到最高。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这才是十几年工程经验在 AI 时代的真正价值——你知道&amp;quot;什么是会出错的&amp;quot;，所以你设计了流程去防止它出错，而不是寄希望于 AI 自己不出错。&lt;/p&gt;
&lt;h3 id="落地从一份-claudemd-开始"&gt;落地：从一份 CLAUDE.md 开始
&lt;/h3&gt;&lt;p&gt;如果你想把这套思维体系落地到你自己的 AI 项目里，鬼哥的建议是——&lt;strong&gt;不要直接 fork agent-skills，先写你自己的 CLAUDE.md。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;按照本文剖析的 5 段结构：&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. Project Structure (你的目录 + 一句话描述)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. [Categorical Index] (按场景给资产索引)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Conventions (你的文件 schema 约束)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. Commands (怎么验证 / 跑测试)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. Boundaries (Always / Ask first / Never)
&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;你自己都说不清楚的&amp;quot;项目惯例&amp;quot;——其实就是模糊的工程纪律&lt;/li&gt;
&lt;li&gt;你写不出来的&amp;quot;Boundaries&amp;quot;——其实就是你团队里没有共识的边界&lt;/li&gt;
&lt;li&gt;你列不齐的&amp;quot;Conventions&amp;quot;——其实就是新人最容易踩坑的地方&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;写一份 AI 看的 CLAUDE.md，本质上是逼自己把工程纪律显式化。&lt;/strong&gt; 这件事的价值，远超过让 AI 写得更好。&lt;/p&gt;
&lt;p&gt;然后你可以再写自己的 skill 文件——按照 6 段式 schema（Overview / When to Use / Process / Common Rationalizations / Red Flags / Verification）。这不仅是给 AI 看的，更是把你的工程经验沉淀成可复用资产。&lt;/p&gt;
&lt;h3 id="结语"&gt;结语
&lt;/h3&gt;&lt;p&gt;agent-skills 这套体系最让我震撼的，不是它的精密程度，而是&lt;strong&gt;它把&amp;quot;资深工程师的反射&amp;quot;编码成了 AI 可以执行的格式&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;工程经验从此可以被复制、被传承、被工程化地约束 AI。&lt;/p&gt;
&lt;p&gt;这件事的意义，在 AI 编程时代刚刚开始。&lt;/p&gt;
&lt;p&gt;如果你和我一样，是一个想把工程经验和 AI 开发结合好的工程师——强烈建议你也深入读一遍 agent-skills 的源码。不只是学它的架构，更要学它每个决策背后的思维方式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这是 AI 时代，老工程师的护城河。&lt;/strong&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;想看每一层的极致颗粒度详细拆解？翻&lt;a class="link" href="https://guige.ai/p/agent-skills-handbook/" &gt;字典型《agent-skills 项目手册》&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;想看 Addy 项目的整体定位和&amp;quot;反合理化&amp;quot;机制的来龙去脉？翻 &lt;a class="link" href="https://guige.ai/p/agent-skills-analysis/" &gt;《Agent Skills：当 Google 工程文化遇上 AI 编程代理》&lt;/a&gt;。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;本文为鬼哥的 agent-skills 学习笔记。原项目地址：&lt;a class="link" href="https://github.com/addyosmani/agent-skills" target="_blank" rel="noopener"
 &gt;https://github.com/addyosmani/agent-skills&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;</description></item><item><title>一张 4090 跑 Gemma4 26B：用 Ollama 搭本地 AI 开发环境实测</title><link>https://guige.ai/p/ollama-local-dev/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><guid>https://guige.ai/p/ollama-local-dev/</guid><description>&lt;img src="https://guige.ai/" alt="Featured image of post 一张 4090 跑 Gemma4 26B：用 Ollama 搭本地 AI 开发环境实测" /&gt;&lt;p&gt;以前本地大模型像玩具：能聊天，但一进开发工作流就露怯。现在一张 4090 已经能把 &lt;strong&gt;Gemma4 26B&lt;/strong&gt; 跑起来，还能接 Codex、Claude Code、Hermes Agent。问题只剩一个：&lt;strong&gt;它到底是生产力，还是昂贵的电子暖手宝？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这篇文章不讲玄学，直接上手：用 Ollama 部署本地模型、用 API 对话、接入开发工具，再看 RTX 4090 上的真实推理数据。&lt;/p&gt;
&lt;p&gt;&lt;img alt="本地 AI 开发工作站" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/ollama-local-dev/cover.webp" srcset="https://guige.ai/p/ollama-local-dev/cover_hu_8dcc5742ce0bf15c.webp 800w, https://guige.ai/p/ollama-local-dev/cover_hu_3c5675e75fce5a98.webp 1600w, https://guige.ai/p/ollama-local-dev/cover.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="先看结论"&gt;先看结论
&lt;/h2&gt;&lt;p&gt;我这台机器的实测环境：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;项目&lt;/th&gt;
 &lt;th style="text-align: right"&gt;数据&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;GPU&lt;/td&gt;
 &lt;td style="text-align: right"&gt;NVIDIA GeForce RTX 4090&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;nvidia-smi&lt;/code&gt; 显存&lt;/td&gt;
 &lt;td style="text-align: right"&gt;49140 MiB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;NVIDIA Driver&lt;/td&gt;
 &lt;td style="text-align: right"&gt;570.158.01&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CUDA&lt;/td&gt;
 &lt;td style="text-align: right"&gt;12.8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ollama&lt;/td&gt;
 &lt;td style="text-align: right"&gt;0.23.0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;模型&lt;/td&gt;
 &lt;td style="text-align: right"&gt;&lt;code&gt;gemma4:26b&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;模型文件大小&lt;/td&gt;
 &lt;td style="text-align: right"&gt;17 GB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ollama 加载后显存&lt;/td&gt;
 &lt;td style="text-align: right"&gt;约 24.5 GB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;持续输出速度&lt;/td&gt;
 &lt;td style="text-align: right"&gt;约 160-166 tokens/s&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;长输出功耗&lt;/td&gt;
 &lt;td style="text-align: right"&gt;约 260-265W&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;长输出温度&lt;/td&gt;
 &lt;td style="text-align: right"&gt;54-60C&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;先打补丁：我这张 4090 在 &lt;code&gt;nvidia-smi&lt;/code&gt; 里显示约 &lt;strong&gt;48GB 显存&lt;/strong&gt;，不是常见 24GB 版本。普通 24GB 4090 也可以参考这篇文章的方法，但长上下文、并发和 Agent 场景要更保守。&lt;/p&gt;
&lt;p&gt;我的结论是：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;本地 26B 模型已经能做日常开发副驾，但还不能无脑替代云端顶级模型。&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;它适合解释私有代码、写脚本、生成小模块、做初步 code review；但复杂重构、跨仓库规划、长链路 Agent，仍然会被模型能力、上下文和工具链沙盒卡住。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="ollama-解决了什么"&gt;Ollama 解决了什么
&lt;/h2&gt;&lt;p&gt;Ollama 的价值不是让模型变聪明，而是把本地部署降到几条命令：&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;ollama pull gemma4:26b
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ollama run gemma4:26b
&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;没有 Ollama，你要处理权重格式、量化版本、CUDA、服务启动、API 适配。用 Ollama 之后，它更像一个本地模型网关：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;开发工具 / 脚本 / Agent
&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; v
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://localhost:11434
&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; v
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;本地 Gemma4 26B
&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;img alt="Ollama 本地模型网关" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/ollama-local-dev/ollama-stack.webp" srcset="https://guige.ai/p/ollama-local-dev/ollama-stack_hu_e8309c95dc255628.webp 800w, https://guige.ai/p/ollama-local-dev/ollama-stack_hu_f7897a4b19aa206b.webp 1600w, https://guige.ai/p/ollama-local-dev/ollama-stack.webp 1672w" width="1672"&gt;&lt;/p&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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ollama list
&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME SIZE
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gemma4:26b 17 GB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gemma4:e2b 7.2 GB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gemma4:latest 9.6 GB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gpt-oss:20b 13 GB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gpt-oss:120b 65 GB
&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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ollama ps
&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;/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;NAME SIZE PROCESSOR CONTEXT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gemma4:26b 25 GB 100% GPU 262144
&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;100% GPU&lt;/code&gt; 说明没有明显落到 CPU，&lt;code&gt;262144&lt;/code&gt; 说明上下文窗口很大，但不代表每次都应该塞满。&lt;/p&gt;
&lt;hr&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;/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;ollama run gemma4:26b
&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;用三句话解释 Ollama 是什么。
&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;如果要从程序里调用，用 Ollama 原生 API：&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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl http://localhost:11434/api/chat &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{
&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;#34;model&amp;#34;: &amp;#34;gemma4:26b&amp;#34;,
&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;#34;messages&amp;#34;: [
&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;#34;role&amp;#34;: &amp;#34;user&amp;#34;, &amp;#34;content&amp;#34;: &amp;#34;用三句话解释 Ollama 是什么。&amp;#34;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&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;#34;stream&amp;#34;: false
&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;&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;Ollama 返回的 JSON 里有性能字段：&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;load_duration&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;模型加载耗时&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;prompt_eval_count&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;输入 token 数&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;prompt_eval_duration&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;输入处理耗时&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;eval_count&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;输出 token 数&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;eval_duration&lt;/code&gt;&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;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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;输出速度 = eval_count / eval_duration_seconds
&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;hr&gt;
&lt;h2 id="接入-codex默认沙盒失败授权后跑通"&gt;接入 Codex：默认沙盒失败，授权后跑通
&lt;/h2&gt;&lt;p&gt;Codex CLI 版本：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex-cli 0.128.0
&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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex --oss --local-provider ollama -m gemma4:26b
&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;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;codex &lt;span class="nb"&gt;exec&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; --oss &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --local-provider ollama &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -m gemma4:26b &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -s read-only &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --ephemeral &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="s2"&gt;&amp;#34;请阅读当前目录的 benchmark.sh，简要说明它会如何测试 Ollama 本地模型性能，不要修改任何文件。&amp;#34;&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;Codex 成功识别了 Ollama provider：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;model: gemma4:26b
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;provider: ollama
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sandbox: read-only
&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;但默认 read-only sandbox 下，内部执行读文件命令时失败：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted
&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;本地模型速度够，不代表 Agent 工具链一定顺。&lt;/strong&gt; 这次不是模型不行，而是当前 Linux 环境下 bubblewrap sandbox 权限受限。&lt;/p&gt;
&lt;p&gt;随后我显式授权绕过 Codex 内部 sandbox，仍然使用同一个只读任务：&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;codex &lt;span class="nb"&gt;exec&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; --oss &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --local-provider ollama &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -m gemma4:26b &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --dangerously-bypass-approvals-and-sandbox &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --ephemeral &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="s2"&gt;&amp;#34;请阅读当前目录的 benchmark.sh，简要说明它会如何测试 Ollama 本地模型性能，不要修改任何文件。&amp;#34;&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;这次跑通了。Codex 成功执行：&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;cat benchmark.sh
&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;并总结出脚本会调用本地 Ollama &lt;code&gt;/api/chat&lt;/code&gt;，保存原始 JSON，再用 &lt;code&gt;jq&lt;/code&gt; 计算 &lt;code&gt;load_s&lt;/code&gt;、&lt;code&gt;prompt_tokens_per_s&lt;/code&gt;、&lt;code&gt;output_tokens_per_s&lt;/code&gt; 等指标。换句话说，&lt;strong&gt;Codex + Ollama + Gemma4 26B 是可用的，但在这台机器上需要绕过 Codex sandbox 才能读文件。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Codex 本地模型测试截图" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1080" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/ollama-local-dev/codex-local.webp" srcset="https://guige.ai/p/ollama-local-dev/codex-local_hu_58cb1772fb7c73c8.webp 800w, https://guige.ai/p/ollama-local-dev/codex-local_hu_5037a10b39c2a8a1.webp 1600w, https://guige.ai/p/ollama-local-dev/codex-local.webp 1920w" width="1920"&gt;&lt;/p&gt;
&lt;p&gt;遇到类似问题，优先检查：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;是否在受限容器、远程桌面、特殊 sandbox 里运行&lt;/li&gt;
&lt;li&gt;系统是否允许 user namespace&lt;/li&gt;
&lt;li&gt;Codex sandbox 模式是否过严&lt;/li&gt;
&lt;li&gt;是否需要换普通终端或调整权限策略&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="接入-claude-code真实可用"&gt;接入 Claude Code：真实可用
&lt;/h2&gt;&lt;p&gt;Claude Code 版本：&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2.1.126 (Claude Code)
&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;Ollama 提供了 Anthropic-compatible API，所以可以这样接：&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="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ollama
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;ANTHROPIC_API_KEY&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://localhost:11434
&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;claude --model gemma4:26b
&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;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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;env &lt;span class="nv"&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ollama &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="nv"&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://localhost:11434 &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="nv"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&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; /home/luoli/.local/bin/claude &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -p &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --model gemma4:26b &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --no-session-persistence &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --permission-mode dontAsk &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --tools Read &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --output-format json &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="s2"&gt;&amp;#34;请阅读当前目录的 benchmark.sh，简要说明它如何测试 Ollama 本地模型性能。不要修改任何文件。&amp;#34;&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;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;指标&lt;/th&gt;
 &lt;th style="text-align: right"&gt;数据&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;状态&lt;/td&gt;
 &lt;td style="text-align: right"&gt;success&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;总耗时&lt;/td&gt;
 &lt;td style="text-align: right"&gt;7889 ms&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;API 耗时&lt;/td&gt;
 &lt;td style="text-align: right"&gt;7824 ms&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;轮数&lt;/td&gt;
 &lt;td style="text-align: right"&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;输入 token&lt;/td&gt;
 &lt;td style="text-align: right"&gt;16319&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;输出 token&lt;/td&gt;
 &lt;td style="text-align: right"&gt;713&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;permission denials&lt;/td&gt;
 &lt;td style="text-align: right"&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Claude Code 正确读取了 &lt;code&gt;benchmark.sh&lt;/code&gt;，并总结出脚本会用 5 个 case 调用 Ollama &lt;code&gt;/api/chat&lt;/code&gt;，保存原始 JSON，再用 &lt;code&gt;jq&lt;/code&gt; 提取 &lt;code&gt;total_s&lt;/code&gt;、&lt;code&gt;load_s&lt;/code&gt;、&lt;code&gt;prompt_tokens_per_s&lt;/code&gt;、&lt;code&gt;output_tokens_per_s&lt;/code&gt; 等指标。&lt;/p&gt;
&lt;p&gt;这就是一个正面案例：&lt;strong&gt;同样是 Gemma4 26B，本地模型不只会聊天，也能通过 Claude Code 的 Read 工具进入真实开发上下文。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Claude Code 本地模型测试截图" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1080" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/ollama-local-dev/claude-code-local.webp" srcset="https://guige.ai/p/ollama-local-dev/claude-code-local_hu_8293d8528b4e4587.webp 800w, https://guige.ai/p/ollama-local-dev/claude-code-local_hu_ba8dcb5692405d72.webp 1600w, https://guige.ai/p/ollama-local-dev/claude-code-local.webp 1920w" width="1920"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Codex、Claude Code 和 Hermes 接入本地模型" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/ollama-local-dev/codex-claude-hermes.webp" srcset="https://guige.ai/p/ollama-local-dev/codex-claude-hermes_hu_ebe3c6c4cfdeb503.webp 800w, https://guige.ai/p/ollama-local-dev/codex-claude-hermes_hu_f1d95a3b0e8c2050.webp 1600w, https://guige.ai/p/ollama-local-dev/codex-claude-hermes.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="接入-hermes-agent"&gt;接入 Hermes Agent
&lt;/h2&gt;&lt;p&gt;Hermes 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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Hermes Agent v0.12.0 (2026.4.30)
&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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ollama launch 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;p&gt;也可以 oneshot 测试：&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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes --provider ollama &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -m gemma4:26b &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -z &lt;span class="s2"&gt;&amp;#34;请用三句话说明你当前是否在通过 Ollama 本地模型运行，并给一个开发建议。&amp;#34;&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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hermes status
&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;/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;Model: gemma4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Provider: ollama-launch
&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;这里有个细节：模型回答里可能说自己是 custom provider，但工具状态显示 &lt;code&gt;ollama-launch&lt;/code&gt;。所以验证 Agent 是否真的接入本地模型，不要只看模型自述，要看工具的 &lt;code&gt;status&lt;/code&gt; 或配置。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Hermes 本地模型状态截图" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1080" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/ollama-local-dev/hermes-local.webp" srcset="https://guige.ai/p/ollama-local-dev/hermes-local_hu_46d6eb2d1357671a.webp 800w, https://guige.ai/p/ollama-local-dev/hermes-local_hu_4759d992f5dbd81b.webp 1600w, https://guige.ai/p/ollama-local-dev/hermes-local.webp 1920w" width="1920"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="4090--gemma4-26b-实测"&gt;4090 + Gemma4 26B 实测
&lt;/h2&gt;&lt;p&gt;我写了一个 benchmark 脚本：&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;content/post/ollama-local-dev/benchmark.sh
&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;它测试 5 类任务：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Case&lt;/th&gt;
 &lt;th&gt;目的&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Short chat&lt;/td&gt;
 &lt;td&gt;短对话&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Long Chinese output&lt;/td&gt;
 &lt;td&gt;长中文输出&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Code generation&lt;/td&gt;
 &lt;td&gt;代码生成&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Code review&lt;/td&gt;
 &lt;td&gt;代码审查&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Agent planning&lt;/td&gt;
 &lt;td&gt;Agent 规划&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;实测结果：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Case&lt;/th&gt;
 &lt;th style="text-align: right"&gt;总耗时&lt;/th&gt;
 &lt;th style="text-align: right"&gt;输出 tokens&lt;/th&gt;
 &lt;th style="text-align: right"&gt;输出速度&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;短对话&lt;/td&gt;
 &lt;td style="text-align: right"&gt;4.790s&lt;/td&gt;
 &lt;td style="text-align: right"&gt;697&lt;/td&gt;
 &lt;td style="text-align: right"&gt;165.93 tokens/s&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;长中文输出&lt;/td&gt;
 &lt;td style="text-align: right"&gt;18.728s&lt;/td&gt;
 &lt;td style="text-align: right"&gt;2785&lt;/td&gt;
 &lt;td style="text-align: right"&gt;160.84 tokens/s&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;代码生成&lt;/td&gt;
 &lt;td style="text-align: right"&gt;13.337s&lt;/td&gt;
 &lt;td style="text-align: right"&gt;1985&lt;/td&gt;
 &lt;td style="text-align: right"&gt;161.66 tokens/s&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;代码审查&lt;/td&gt;
 &lt;td style="text-align: right"&gt;14.430s&lt;/td&gt;
 &lt;td style="text-align: right"&gt;2143&lt;/td&gt;
 &lt;td style="text-align: right"&gt;161.16 tokens/s&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Agent 规划&lt;/td&gt;
 &lt;td style="text-align: right"&gt;13.631s&lt;/td&gt;
 &lt;td style="text-align: right"&gt;2028&lt;/td&gt;
 &lt;td style="text-align: right"&gt;161.48 tokens/s&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;长输出监控&lt;/td&gt;
 &lt;td style="text-align: right"&gt;24.020s&lt;/td&gt;
 &lt;td style="text-align: right"&gt;3554&lt;/td&gt;
 &lt;td style="text-align: right"&gt;159.79 tokens/s&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&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-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Gemma4 26B 在这台机器上的持续输出速度约 160 tokens/s
&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;img alt="本地推理性能仪表盘" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/ollama-local-dev/benchmark-dashboard.webp" srcset="https://guige.ai/p/ollama-local-dev/benchmark-dashboard_hu_b5432785d5043b2e.webp 800w, https://guige.ai/p/ollama-local-dev/benchmark-dashboard_hu_ef7de2d628236655.webp 1600w, https://guige.ai/p/ollama-local-dev/benchmark-dashboard.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;hr&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;/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;GPU Memory: 24527MiB / 49140MiB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Power: 72W
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Temp: 51C
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Process: /usr/local/bin/ollama
&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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nvidia-smi dmon -s pucvmet -c &lt;span class="m"&gt;20&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;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;指标&lt;/th&gt;
 &lt;th style="text-align: right"&gt;数据&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;功耗&lt;/td&gt;
 &lt;td style="text-align: right"&gt;260-265W&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;温度&lt;/td&gt;
 &lt;td style="text-align: right"&gt;54-60C&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SM 利用率&lt;/td&gt;
 &lt;td style="text-align: right"&gt;82-87%&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;显存占用&lt;/td&gt;
 &lt;td style="text-align: right"&gt;约 24529MB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;显存利用率&lt;/td&gt;
 &lt;td style="text-align: right"&gt;50-55%&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;显存频率&lt;/td&gt;
 &lt;td style="text-align: right"&gt;10501 MHz&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;核心频率&lt;/td&gt;
 &lt;td style="text-align: right"&gt;2670-2685 MHz&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这说明推理确实主要在 GPU 上跑，而且负载不低。长时间跑 Agent 时，真正要关注的不只是 tokens/s，还有散热、风噪、电费和显存被其他任务抢占。&lt;/p&gt;
&lt;p&gt;&lt;img alt="系统监控摘要截图" class="gallery-image" data-flex-basis="544px" data-flex-grow="227" height="529" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/ollama-local-dev/btop-inference.webp" srcset="https://guige.ai/p/ollama-local-dev/btop-inference_hu_8be79f9a4ca7288f.webp 800w, https://guige.ai/p/ollama-local-dev/btop-inference.webp 1201w" width="1201"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="nvidia-smi dmon 监控截图" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1080" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/ollama-local-dev/nvidia-smi-dmon.webp" srcset="https://guige.ai/p/ollama-local-dev/nvidia-smi-dmon_hu_3ae37218b0b7aca1.webp 800w, https://guige.ai/p/ollama-local-dev/nvidia-smi-dmon_hu_7ce71b247fb5ec8f.webp 1600w, https://guige.ai/p/ollama-local-dev/nvidia-smi-dmon.webp 1920w" width="1920"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一个容易误判的点thinking-也算-token"&gt;一个容易误判的点：thinking 也算 token
&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;/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;用三句话解释 Ollama 是什么。
&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;但 API 返回里的 &lt;code&gt;eval_count&lt;/code&gt; 到了 887，因为模型生成了不少 thinking 内容。&lt;/p&gt;
&lt;p&gt;所以做 benchmark 时不要只看“用户看到多少字”。对推理耗时来说，模型实际生成的 token 才是成本，包括 thinking。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="适合怎么用"&gt;适合怎么用
&lt;/h2&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;本地 Gemma4 26B 是否适合&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&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;生成测试样例&lt;/td&gt;
 &lt;td&gt;适合&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;初步 code review&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;跨仓库复杂任务&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;/tbody&gt;
&lt;/table&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;/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;本地模型负责高频、低风险、隐私敏感任务；
&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;img alt="本地模型能力边界" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="941" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/ollama-local-dev/local-ai-boundary.webp" srcset="https://guige.ai/p/ollama-local-dev/local-ai-boundary_hu_f7888c35499b88c9.webp 800w, https://guige.ai/p/ollama-local-dev/local-ai-boundary_hu_75fe98b77b5f6774.webp 1600w, https://guige.ai/p/ollama-local-dev/local-ai-boundary.webp 1672w" width="1672"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="takeaway"&gt;Takeaway
&lt;/h2&gt;&lt;p&gt;回顾一下，搭一个能用于开发的本地 AI 环境，只需要四步：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用 Ollama 拉取模型：&lt;code&gt;ollama pull gemma4:26b&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;用 API 或 CLI 确认模型能稳定对话&lt;/li&gt;
&lt;li&gt;把 Codex、Claude Code、Hermes 接到 &lt;code&gt;localhost:11434&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;用 tokens/s、显存、功耗、温度和 Agent 成功率一起评估体验&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这次实测最重要的结论不是“4090 很快”，而是：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;本地模型的下限已经很高，但上限取决于工具链。&lt;/strong&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;Claude Code 能顺利读取文件，Codex 在同一环境里被 sandbox 卡住，Hermes 能跑通但 provider 映射要核验。这才是真实的本地 AI 开发体验：模型只是发动机，方向盘、刹车和路况一样重要。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.ollama.com/library/gemma4" target="_blank" rel="noopener"
 &gt;Ollama Gemma4 模型页&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.ollama.com/openai" target="_blank" rel="noopener"
 &gt;Ollama OpenAI-compatible API 文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.ollama.com/integrations/codex" target="_blank" rel="noopener"
 &gt;Ollama Codex 集成文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.ollama.com/integrations/claude-code" target="_blank" rel="noopener"
 &gt;Ollama Claude Code 集成文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.ollama.com/integrations/hermes" target="_blank" rel="noopener"
 &gt;Ollama Hermes Agent 集成文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Claude Managed Agents：从聊天机器人到自主 Agent 的一步之遥</title><link>https://guige.ai/p/managed-agents-intro/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0000</pubDate><guid>https://guige.ai/p/managed-agents-intro/</guid><description>&lt;img src="https://guige.ai/" alt="Featured image of post Claude Managed Agents：从聊天机器人到自主 Agent 的一步之遥" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;150 行代码就能造一个&amp;quot;数字分身&amp;quot;，但它只会聊天，不会做事。&lt;/p&gt;
&lt;p&gt;如果它能帮你写代码、搜资料、跑脚本呢？&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;两个月前，我给博客做了一个 AI 数字分身——&lt;a class="link" href="https://github.com/luoli523/guige_avatar" target="_blank" rel="noopener"
 &gt;guige_avatar&lt;/a&gt;。访客点击右下角的聊天按钮，就能和&amp;quot;鬼哥&amp;quot;的 AI 分身聊技术、聊 AI、聊生活。&lt;/p&gt;
&lt;p&gt;整个后端只有 &lt;strong&gt;150 行 JavaScript&lt;/strong&gt;，部署在 Vercel 上，用的是 OpenAI 的 GPT-4.1-nano。它很轻量，也确实能用——但说实话，它&lt;strong&gt;只是一个穿了马甲的 Chat Completion API&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;2026 年 4 月，Anthropic 推出了 &lt;a class="link" href="https://platform.claude.com/docs/en/managed-agents/overview" target="_blank" rel="noopener"
 &gt;Claude Managed Agents&lt;/a&gt;——一个托管式的 Agent 运行时平台。看完文档后我意识到：&lt;strong&gt;如果用 Managed Agents 重构鬼哥分身，它能从一个只会聊天的机器人，进化成一个真正能做事的自主 Agent。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;本文就以这个真实案例为主线，带你理解 Managed Agents 到底是什么、能做什么、以及什么时候该用它。&lt;/p&gt;
&lt;p&gt;&lt;img alt="封面" class="gallery-image" data-flex-basis="430px" data-flex-grow="179" height="1536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/managed-agents-intro/cover.webp" srcset="https://guige.ai/p/managed-agents-intro/cover_hu_620005b34563ee68.webp 800w, https://guige.ai/p/managed-agents-intro/cover_hu_bfb5e493a5abda79.webp 1600w, https://guige.ai/p/managed-agents-intro/cover_hu_4610a2e67a5696ef.webp 2400w, https://guige.ai/p/managed-agents-intro/cover.webp 2752w" width="2752"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一手搓版guige_avatar-架构剖析"&gt;一、手搓版：guige_avatar 架构剖析
&lt;/h2&gt;&lt;p&gt;先看看现在的数字分身长什么样。注意截图右下角那个小对话气泡——那就是访客与鬼哥 AI 分身聊天的入口。&lt;/p&gt;
&lt;p&gt;&lt;img alt="鬼哥博客首页，右下角的聊天气泡就是数字分身的入口" class="gallery-image" data-flex-basis="456px" data-flex-grow="190" height="1504" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/managed-agents-intro/guige-page.webp" srcset="https://guige.ai/p/managed-agents-intro/guige-page_hu_cceadf3dd8d252db.webp 800w, https://guige.ai/p/managed-agents-intro/guige-page_hu_794cc983d27f907c.webp 1600w, https://guige.ai/p/managed-agents-intro/guige-page_hu_f561722c567c0cf3.webp 2400w, https://guige.ai/p/managed-agents-intro/guige-page.webp 2860w" width="2860"&gt;&lt;/p&gt;
&lt;h3 id="11-整体架构"&gt;1.1 整体架构
&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;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;访客浏览器 Vercel Serverless
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;┌─────────────┐ POST ┌──────────────────┐ ┌─────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 博客首页 │ ─────────→ │ api/chat.js │ ───→ │ OpenAI │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 聊天面板(JS) │ ←───────── │ (~150 行) │ ←─── │ API │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└─────────────┘ JSON │ │ └─────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ ↓ fire-and-forget│
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ Telegram 通知 │
&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; data/persona.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; (人设 YAML ~200行)
&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="12-核心代码就这么简单"&gt;1.2 核心代码：就这么简单
&lt;/h3&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;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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 1. 加载人设 YAML → 构建 system prompt
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;yaml&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;data/persona.yaml&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;systemPrompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;buildSystemPrompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&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;// 2. 拼接历史（最多 10 轮）+ 当前消息
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;messages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;system&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;systemPrompt&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;userMessage&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;// 3. 一次 API 调用，返回结果
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;gpt-4.1-nano&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;messages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;没有 agent loop，没有工具调用，没有自主决策。&lt;strong&gt;每次请求就是一次单轮 LLM 推理。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="13-人设工程它的真正价值"&gt;1.3 人设工程：它的真正价值
&lt;/h3&gt;&lt;p&gt;guige_avatar 最精巧的部分不是代码，而是 &lt;code&gt;persona.yaml&lt;/code&gt;——一个约 200 行的人设定义文件：&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;/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;personality&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;traits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;技术极客&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;偶尔幽默&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;喜欢深度思考&amp;#34;&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;speaking_style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;口语化但有技术深度&amp;#34;&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;knowledge&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;expertise&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;大数据&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AI/LLM&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;分布式系统&amp;#34;&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;current_projects&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Claude Code 源码分析&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;博客写作&amp;#34;&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;boundaries&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;forbidden_topics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;政治敏感&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;个人隐私&amp;#34;&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;fallback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;这个话题我不太方便聊，换个有趣的话题吧？&amp;#34;&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;这种&amp;quot;人设工程&amp;quot;确实让对话体验很自然。但问题是——&lt;strong&gt;人设再好，它也只能聊天，不能做事。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="手搓版架构" class="gallery-image" data-flex-basis="430px" data-flex-grow="179" height="1536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/managed-agents-intro/handcraft-arch.webp" srcset="https://guige.ai/p/managed-agents-intro/handcraft-arch_hu_22ab63d93d1de2c2.webp 800w, https://guige.ai/p/managed-agents-intro/handcraft-arch_hu_663f8fdd5e8a695e.webp 1600w, https://guige.ai/p/managed-agents-intro/handcraft-arch_hu_3dd5c9597b6ba3fe.webp 2400w, https://guige.ai/p/managed-agents-intro/handcraft-arch.webp 2752w" width="2752"&gt;&lt;/p&gt;
&lt;h3 id="14-手搓版的天花板"&gt;1.4 手搓版的天花板
&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;✅ 流畅自然&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;查看博客文章&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;记住上次对话&lt;/td&gt;
 &lt;td&gt;❌ 刷新即丢失&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;自主完成任务&lt;/td&gt;
 &lt;td&gt;❌ 无 agent loop&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;hr&gt;
&lt;h2 id="二managed-agents它到底是什么"&gt;二、Managed Agents：它到底是什么？
&lt;/h2&gt;&lt;h3 id="21-一句话定义"&gt;2.1 一句话定义
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Managed Agents = Anthropic 托管的 Agent 运行时。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;你不需要自己搭 agent loop、沙箱、工具执行层。Anthropic 提供一个完整的云端容器环境，Claude 在里面自主运行 bash、读写文件、搜索网页、执行代码。&lt;/p&gt;
&lt;p&gt;如果 Messages API 是&amp;quot;你调用模型，模型返回文本&amp;quot;，那 Managed Agents 就是&amp;quot;你定义 Agent，Agent 自主完成任务&amp;quot;。&lt;/p&gt;
&lt;h3 id="22-与-messages-api-的定位差异"&gt;2.2 与 Messages API 的定位差异
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;Messages API&lt;/th&gt;
 &lt;th&gt;Managed Agents&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;本质&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;直接模型调用&lt;/td&gt;
 &lt;td&gt;预构建的 Agent 运行时&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;适合&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;自定义 agent loop、精细控制&lt;/td&gt;
 &lt;td&gt;长时间异步任务、最小化基础设施&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;/td&gt;
 &lt;td&gt;Anthropic 云端容器执行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;类比&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;买 CPU 自己组电脑&lt;/td&gt;
 &lt;td&gt;买整机开箱即用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="23-核心概念四件套"&gt;2.3 核心概念四件套
&lt;/h3&gt;&lt;p&gt;Managed Agents 的整个模型围绕四个概念：&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;strong&gt;Agent&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;模型 + system prompt + 工具 + MCP servers&lt;/td&gt;
 &lt;td&gt;一个人的&amp;quot;能力定义&amp;quot;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;云端容器模板：预装包、网络规则&lt;/td&gt;
 &lt;td&gt;这个人的&amp;quot;工作环境&amp;quot;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Session&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;运行中的 Agent 实例，绑定 Agent + Environment&lt;/td&gt;
 &lt;td&gt;一次具体的&amp;quot;工作会话&amp;quot;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Events&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;应用与 Agent 之间的消息流（SSE）&lt;/td&gt;
 &lt;td&gt;你和这个人之间的&amp;quot;对话&amp;quot;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&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;创建 Agent（一次性） → 创建 Environment（一次性）
&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; 创建 Session（每次任务）
&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; 发送 Event（用户消息）
&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; 流式接收 Agent 响应（SSE）
&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="三case-study数字分身-v1手搓vs-v2managed-agents"&gt;三、Case Study：数字分身 v1（手搓）vs v2（Managed Agents）
&lt;/h2&gt;&lt;p&gt;这是本文最核心的部分。我们来看，如果用 Managed Agents 重构鬼哥分身，会发生什么变化。&lt;/p&gt;
&lt;p&gt;&lt;img alt="v1 vs v2 对比" class="gallery-image" data-flex-basis="430px" data-flex-grow="179" height="1536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/managed-agents-intro/v1-vs-v2.webp" srcset="https://guige.ai/p/managed-agents-intro/v1-vs-v2_hu_64057650187a708d.webp 800w, https://guige.ai/p/managed-agents-intro/v1-vs-v2_hu_d5d73ff2fe15b9be.webp 1600w, https://guige.ai/p/managed-agents-intro/v1-vs-v2_hu_746c7c151d2c65db.webp 2400w, https://guige.ai/p/managed-agents-intro/v1-vs-v2.webp 2752w" width="2752"&gt;&lt;/p&gt;
&lt;h3 id="31-对话--能动手工具能力"&gt;3.1 对话 → 能动手：工具能力
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;v1（手搓版）&lt;/strong&gt;：只能基于 system prompt 中的静态知识回答。&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;访客：你最近写了什么文章？
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;鬼哥分身：我最近在写 Agent Skills 和 Gemma 4 的分析文章...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;（这是 persona.yaml 里预写的，不是实时查的）
&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;v2（Managed Agents 版）&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-fallback" data-lang="fallback"&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;鬼哥分身：[使用 bash] ls content/post/ | tail -5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [使用 read] 读取最近 5 篇文章的 frontmatter
&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; 1. Agent Skills 深度解析（4月7日）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 2. Gemma 4 深度分析（4月5日）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 3. Karpathy 的 LLM Wiki（4月2日）
&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;Managed Agents 的内置工具：&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;strong&gt;Bash&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;执行 shell 命令&lt;/td&gt;
 &lt;td&gt;列出文章、统计数据&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Read / Write / Edit&lt;/strong&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;strong&gt;Glob / Grep&lt;/strong&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;strong&gt;Web Search / Fetch&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;网络搜索&lt;/td&gt;
 &lt;td&gt;查最新技术动态&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="32-内存级历史--持久化会话"&gt;3.2 内存级历史 → 持久化会话
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;v1&lt;/strong&gt;：对话历史存在前端 JavaScript 内存中，刷新页面就没了。&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-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// v1：前端维护历史，刷新即丢失
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;history&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt; &lt;span class="c1"&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;strong&gt;v2&lt;/strong&gt;：Session 天然持久化，Event 历史服务端保存。&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-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# v2：Session 持久化，随时可恢复&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sessions&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;avatar_agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;environment_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;访客 A 的对话&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 下次访问，用同一个 session_id 继续&lt;/span&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;更关键的是，Managed Agents 有 &lt;strong&gt;Memory（研究预览阶段）&lt;/strong&gt;——跨会话的长期记忆。这意味着鬼哥分身可以记住：&amp;ldquo;上次这个访客问过 Spark 调优，他应该是做大数据的。&amp;rdquo;&lt;/p&gt;
&lt;h3 id="33-单轮推理--多步-agent-loop"&gt;3.3 单轮推理 → 多步 Agent Loop
&lt;/h3&gt;&lt;p&gt;这是最本质的差异。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;v1&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;用户消息 → LLM 生成回复 → 返回
&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;v2&lt;/strong&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;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;用户消息 → Claude 思考 → 调用工具 A → 分析结果 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 调用工具 B → 综合判断 → 生成回复 → 返回
&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;比如访客问&amp;quot;帮我分析一下你这个博客的技术栈&amp;quot;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;v1：只能背 persona.yaml 里预写的答案&lt;/li&gt;
&lt;li&gt;v2：&lt;code&gt;grep -r &amp;quot;hugo&amp;quot; config/&lt;/code&gt; → &lt;code&gt;cat themes/hugo-theme-stack/...&lt;/code&gt; → &lt;code&gt;ls layouts/&lt;/code&gt; → 基于实际代码给出准确分析&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="34-无沙盒--云端容器"&gt;3.4 无沙盒 → 云端容器
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;v1&lt;/strong&gt;：代码在 Vercel Serverless Function 里跑，只有 150ms 的冷启动预算，不能装额外的包。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;v2&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;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-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;environment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environments&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;guige-avatar-env&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;cloud&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;networking&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;unrestricted&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&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; &lt;span class="c1"&gt;# Python, Node.js, Go, Hugo...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;/p&gt;
&lt;ul&gt;
&lt;li&gt;可以预装 Hugo 来本地构建预览&lt;/li&gt;
&lt;li&gt;可以跑 Python 脚本分析数据&lt;/li&gt;
&lt;li&gt;可以 git clone 仓库来读取最新代码&lt;/li&gt;
&lt;li&gt;网络不受限，可以访问外部 API&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="35-单-agent--多-agent-编排"&gt;3.5 单 Agent → 多 Agent 编排
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;v1&lt;/strong&gt;：一个 function 处理所有事情。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;v2&lt;/strong&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;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;span class="lnt"&gt;27
&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-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 主 Agent：鬼哥分身（对话协调者）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;avatar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&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="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;claude-sonnet-4-6&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;system&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="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent_toolset_20260401&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;callable_agents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;blog_agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;code_agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;# Sub-Agent 1：博客助手（搜索和推荐文章）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;blog_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&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="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;claude-haiku-4-5&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&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="n"&gt;system&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="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent_toolset_20260401&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;# Sub-Agent 2：代码助手（分析代码、写 demo）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;code_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&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="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;claude-sonnet-4-6&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;你负责帮访客分析代码和写 demo...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent_toolset_20260401&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;当访客问文章相关的问题时，主 Agent 委托给博客助手；问代码问题时，委托给代码助手。&lt;strong&gt;各司其职，成本可控。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="多 Agent 编排" class="gallery-image" data-flex-basis="430px" data-flex-grow="179" height="1536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/managed-agents-intro/multi-agent.webp" srcset="https://guige.ai/p/managed-agents-intro/multi-agent_hu_aa670aa6c4ed5388.webp 800w, https://guige.ai/p/managed-agents-intro/multi-agent_hu_43412c256babf6b2.webp 1600w, https://guige.ai/p/managed-agents-intro/multi-agent_hu_cf4b3beb83e4114b.webp 2400w, https://guige.ai/p/managed-agents-intro/multi-agent.webp 2752w" width="2752"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="四完整对比手搓-vs-托管"&gt;四、完整对比：手搓 vs 托管
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;维度&lt;/th&gt;
 &lt;th&gt;v1 手搓版&lt;/th&gt;
 &lt;th&gt;v2 Managed Agents&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;本质&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Chat Completion 包装器&lt;/td&gt;
 &lt;td&gt;自主 Agent 平台&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Agent Loop&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;无，单轮 request-response&lt;/td&gt;
 &lt;td&gt;有，多步推理 + 工具调用循环&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;/td&gt;
 &lt;td&gt;Bash、文件操作、Web 搜索、MCP&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;/td&gt;
 &lt;td&gt;云端容器沙盒&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;/td&gt;
 &lt;td&gt;服务端持久化 Session&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;/td&gt;
 &lt;td&gt;Memory（研究预览）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;多 Agent&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;不可能&lt;/td&gt;
 &lt;td&gt;Coordinator + Sub-agents&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;后端代码&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;~150 行 JS&lt;/td&gt;
 &lt;td&gt;~50 行 Python（SDK 调用）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;基础设施&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Vercel function（自己维护）&lt;/td&gt;
 &lt;td&gt;Anthropic 全托管&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;模型&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;GPT-4.1-nano（OpenAI）&lt;/td&gt;
 &lt;td&gt;Claude Sonnet/Haiku（Anthropic）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;成本&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;API 调用费 + Vercel 免费层&lt;/td&gt;
 &lt;td&gt;API 调用费 + Session 运行费&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;开发周期&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;1 天&lt;/td&gt;
 &lt;td&gt;1 天（SDK 很简洁）&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;/td&gt;
 &lt;td&gt;需要工具和自主性的场景&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="五sdk-实战5-分钟跑通-managed-agents"&gt;五、SDK 实战：5 分钟跑通 Managed Agents
&lt;/h2&gt;&lt;h3 id="51-安装"&gt;5.1 安装
&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;/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;pip install anthropic
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;your-key&amp;#34;&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="52-创建-agent--environment--session"&gt;5.2 创建 Agent + Environment + Session
&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;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;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&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-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;anthropic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Anthropic&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="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&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;# 1. 创建 Agent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;鬼哥分身 v2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;claude-sonnet-4-6&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;你是鬼哥（luoli523）的数字分身。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;性格：技术极客，偶尔幽默，喜欢深度思考。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;擅长：大数据、AI/LLM、分布式系统、Claude Code。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;说话风格：口语化但有技术深度，喜欢用类比解释复杂概念。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;你可以使用工具来查看博客文章、搜索信息、执行代码。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;当访客问到你不确定的事情时，先搜索再回答，不要编造。&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent_toolset_20260401&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;# 2. 创建 Environment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;environment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environments&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;avatar-env&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;cloud&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;networking&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;unrestricted&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;# 3. 创建 Session&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sessions&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;environment_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&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="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Agent: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&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;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Environment: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&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;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Session: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&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;h3 id="53-发消息--流式接收"&gt;5.3 发消息 + 流式接收
&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;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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sessions&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;events&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&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; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sessions&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;events&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;events&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;user.message&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;帮我看看你博客最近写了什么文章&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;match&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent.message&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&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;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&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="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent.tool_use&amp;#34;&lt;/span&gt;&lt;span class="p"&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;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;[🔧 使用工具: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;]&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;session.status_idle&amp;#34;&lt;/span&gt;&lt;span class="p"&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;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;✅ 完成&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&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;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-fallback" data-lang="fallback"&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;[🔧 使用工具: bash]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[🔧 使用工具: read]
&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;1. **Agent Skills 深度解析**（4月7日）— 拆解 Addy Osmani 的 19 个 AI Agent skill
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. **Gemma 4 深度分析**（4月5日）— Google 开源模型的架构和应用
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. **Karpathy 的 LLM Wiki**（4月2日）— 从零理解 LLM 的百科全书
&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;✅ 完成
&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="54-typescript-版本"&gt;5.4 TypeScript 版本
&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;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;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;span class="lnt"&gt;44
&lt;/span&gt;&lt;span class="lnt"&gt;45
&lt;/span&gt;&lt;span class="lnt"&gt;46
&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-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Anthropic&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@anthropic-ai/sdk&amp;#34;&lt;/span&gt;&lt;span class="p"&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="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&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;// 创建 Agent
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;beta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;agents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;鬼哥分身 v2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;claude-sonnet-4-6&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;system&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="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="kr"&gt;type&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent_toolset_20260401&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;// 创建 Environment
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;beta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;avatar-env&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kr"&gt;type&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;cloud&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;networking&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kr"&gt;type&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;unrestricted&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;// 创建 Session
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;beta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;: &lt;span class="kt"&gt;agent.id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;environment_id&lt;/span&gt;: &lt;span class="kt"&gt;env.id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;beta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&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="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;beta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;events&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;type&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;user.message&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="kr"&gt;type&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;text&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="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent.message&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent.tool_use&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="sb"&gt;n[🔧 &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;]`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;session.status_idle&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;\n\n✅ Done&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;hr&gt;
&lt;h2 id="六工具配置精细控制"&gt;六、工具配置：精细控制
&lt;/h2&gt;&lt;p&gt;默认的 &lt;code&gt;agent_toolset_20260401&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;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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 只开 bash 和文件操作，关掉网络&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&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="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;claude-sonnet-4-6&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent_toolset_20260401&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;default_config&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;configs&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;bash&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;read&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;glob&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;grep&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# web_fetch 和 web_search 保持关闭&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;strong&gt;自定义工具&lt;/strong&gt;——你定义接口，Claude 决定何时调用，你的代码执行后把结果返回：&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;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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&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="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;claude-sonnet-4-6&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent_toolset_20260401&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;custom&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;get_blog_stats&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;获取博客的访问统计数据&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;input_schema&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;object&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;properties&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;period&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;统计周期：today, week, month&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;required&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;period&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;hr&gt;
&lt;h2 id="七手搓-vs-托管什么时候用哪个"&gt;七、手搓 vs 托管：什么时候用哪个？
&lt;/h2&gt;&lt;p&gt;这两种方案不是非此即彼的关系，而是&lt;strong&gt;不同复杂度和需求下的最优选择&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="用手搓版messages-api--自建"&gt;用手搓版（Messages API / 自建）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;需求简单&lt;/strong&gt;：纯聊天，不需要工具调用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;成本敏感&lt;/strong&gt;：Vercel 免费层 + 便宜的小模型就够了&lt;/li&gt;
&lt;li&gt;&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;/ul&gt;
&lt;h3 id="用-managed-agents"&gt;用 Managed Agents
&lt;/h3&gt;&lt;ul&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;：不想自己维护沙盒和 agent loop&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多 Agent 编排&lt;/strong&gt;：任务需要多个专精 Agent 协作&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;持久化会话&lt;/strong&gt;：需要跨请求保持上下文和文件状态&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="混合方案最佳实践"&gt;混合方案：最佳实践
&lt;/h3&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;/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;访客消息
&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;轻量网关（Vercel / Cloudflare Worker）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── 简单闲聊 → 直接 Messages API（省钱）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── 复杂任务 → 转发到 Managed Agents Session
&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;简单问答（&amp;ldquo;你是谁？&amp;ldquo;&amp;ldquo;你喜欢什么？&amp;quot;）走便宜的 Messages API；需要搜索、执行代码、多步推理的任务走 Managed Agents。&lt;strong&gt;按需升级，不浪费。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="实战架构" class="gallery-image" data-flex-basis="430px" data-flex-grow="179" height="1536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/managed-agents-intro/practice-arch.webp" srcset="https://guige.ai/p/managed-agents-intro/practice-arch_hu_daefceaeebc9ccd4.webp 800w, https://guige.ai/p/managed-agents-intro/practice-arch_hu_f7dc5814f962696e.webp 1600w, https://guige.ai/p/managed-agents-intro/practice-arch_hu_65478ca9d4d45495.webp 2400w, https://guige.ai/p/managed-agents-intro/practice-arch.webp 2752w" width="2752"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="八beta-注意事项"&gt;八、Beta 注意事项
&lt;/h2&gt;&lt;p&gt;Managed Agents 目前是 &lt;strong&gt;Beta 状态&lt;/strong&gt;（&lt;code&gt;managed-agents-2026-04-01&lt;/code&gt;），几个关键信息：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;所有 API 账户默认可用&lt;/strong&gt;，无需单独申请&lt;/li&gt;
&lt;li&gt;SDK 自动设置 beta header，直接用就行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Research Preview 功能&lt;/strong&gt;（Outcomes、Multi-agent、Memory）需要&lt;a class="link" href="https://claude.com/form/claude-managed-agents" target="_blank" rel="noopener"
 &gt;单独申请&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Rate Limit：创建操作 60 req/min，读取操作 600 req/min&lt;/li&gt;
&lt;li&gt;支持 &lt;strong&gt;7 种 SDK&lt;/strong&gt;：Python、TypeScript、Go、Java、C#、Ruby、PHP&lt;/li&gt;
&lt;li&gt;还有 CLI 工具 &lt;code&gt;ant&lt;/code&gt;（Homebrew 安装）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;品牌规范提醒&lt;/strong&gt;：如果你在产品中集成 Managed Agents，可以用 &amp;ldquo;Claude Agent&amp;rdquo; 命名，但&lt;strong&gt;不能用&lt;/strong&gt; &amp;ldquo;Claude Code&amp;rdquo; 或 &amp;ldquo;Claude Cowork&amp;rdquo; 的名称和视觉元素。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="总结"&gt;总结
&lt;/h2&gt;&lt;p&gt;从 guige_avatar 到 Managed Agents，本质上是从 &lt;strong&gt;&amp;ldquo;调用模型生成文本&amp;rdquo;&lt;/strong&gt; 到 &lt;strong&gt;&amp;ldquo;委托 Agent 完成任务&amp;rdquo;&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;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Chat Completion&lt;/td&gt;
 &lt;td&gt;Agent Session&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;单轮推理&lt;/td&gt;
 &lt;td&gt;多步 Agent Loop&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;无工具&lt;/td&gt;
 &lt;td&gt;Bash + 文件 + Web + 自定义&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;单一 Agent&lt;/td&gt;
 &lt;td&gt;多 Agent 编排&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;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Managed Agents 本质上是 &amp;ldquo;Claude Code as a Service&amp;rdquo;&lt;/strong&gt;——把 Claude Code 的核心能力（bash、文件操作、web 搜索、agent loop）包装成云端 API，让开发者在自己的产品中嵌入 Claude 级别的 Agent 能力。&lt;/p&gt;
&lt;p&gt;对于鬼哥分身来说，150 行手搓版已经够用了。但当某天访客说&amp;quot;帮我写一个 Spark 调优的 demo&amp;quot;时，Managed Agents 版本会回答：&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-fallback" data-lang="fallback"&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;[🔧 使用工具: write] 创建 spark_tuning_demo.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[🔧 使用工具: bash] python spark_tuning_demo.py
&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;从&amp;quot;我告诉你&amp;quot;到&amp;quot;我帮你做&amp;rdquo;——这就是一步之遥。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://platform.claude.com/docs/en/managed-agents/overview" target="_blank" rel="noopener"
 &gt;Claude Managed Agents 官方文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://platform.claude.com/docs/en/managed-agents/quickstart" target="_blank" rel="noopener"
 &gt;Managed Agents Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://platform.claude.com/docs/en/managed-agents/tools" target="_blank" rel="noopener"
 &gt;Managed Agents 工具配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://platform.claude.com/docs/en/managed-agents/multi-agent" target="_blank" rel="noopener"
 &gt;Multi-agent Sessions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/luoli523/guige_avatar" target="_blank" rel="noopener"
 &gt;guige_avatar 源码&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Agent Skills：当 Google 工程文化遇上 AI 编程代理</title><link>https://guige.ai/p/agent-skills-analysis/</link><pubDate>Tue, 07 Apr 2026 00:00:00 +0000</pubDate><guid>https://guige.ai/p/agent-skills-analysis/</guid><description>&lt;img src="https://guige.ai/" alt="Featured image of post Agent Skills：当 Google 工程文化遇上 AI 编程代理" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&amp;ldquo;AI coding agents default to the shortest path — which often means skipping specs, tests, security reviews, and the practices that make software reliable.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;— Addy Osmani&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;你有没有这种体验：让 AI 写一个功能，它唰唰唰生成了 500 行代码，看起来能跑，但你心里隐约不安——&lt;strong&gt;没有测试、没有规范、没有安全审查，甚至你自己都不完全理解它写了什么&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;你不是一个人。这正是 Addy Osmani 在 GitHub 上开源 &lt;a class="link" href="https://github.com/addyosmani/agent-skills" target="_blank" rel="noopener"
 &gt;agent-skills&lt;/a&gt; 的原因。这个项目在两个月内斩获 &lt;strong&gt;7900+ stars&lt;/strong&gt;，核心主张简单而有力：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI 编程代理需要纪律，而不仅仅是能力。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;本文将深度拆解这个项目的设计哲学、19 个 skill 的全景图、最核心的&amp;quot;反合理化&amp;quot;创新，以及——最重要的——&lt;strong&gt;如何在你的日常开发中真正落地这套体系&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt="封面" class="gallery-image" data-flex-basis="430px" data-flex-grow="179" height="1536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-analysis/cover.webp" srcset="https://guige.ai/p/agent-skills-analysis/cover_hu_8ea675198d69a035.webp 800w, https://guige.ai/p/agent-skills-analysis/cover_hu_e77ff3da092bd822.webp 1600w, https://guige.ai/p/agent-skills-analysis/cover_hu_39c6884f94453030.webp 2400w, https://guige.ai/p/agent-skills-analysis/cover.webp 2752w" width="2752"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一addy-osmani-其人从-chrome-devtools-到-ai-agent-纪律"&gt;一、Addy Osmani 其人：从 Chrome DevTools 到 AI Agent 纪律
&lt;/h2&gt;&lt;p&gt;在聊 agent-skills 之前，有必要了解它的作者。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Addy Osmani&lt;/strong&gt; 不是一个纯理论派。他在 Google Chrome 团队工作了近 &lt;strong&gt;14 年&lt;/strong&gt;，担任过 &lt;strong&gt;Chrome 开发者体验负责人（Head of Chrome Developer Experience）&lt;/strong&gt;，直接负责过 Chrome DevTools、Lighthouse、Core Web Vitals 这些被数百万开发者每天使用的工具。他的工作为 Google 创造了 &lt;strong&gt;3.5 亿美元&lt;/strong&gt; 的利润和成本节省。&lt;/p&gt;
&lt;p&gt;他也是 O&amp;rsquo;Reilly 出版的《Learning JavaScript Design Patterns》和《Leading Effective Engineering Teams》的作者，早年还在 jQuery 核心团队工作过。&lt;/p&gt;
&lt;p&gt;2025 年末，他转任 &lt;strong&gt;Google Cloud AI Director&lt;/strong&gt;，专注 Gemini、Vertex AI 和 Agent Development Kit（ADK）。这个职业转型的时间点非常关键——他是在&lt;strong&gt;充分理解大规模工程团队如何运作&lt;/strong&gt;之后，才开始思考 AI Agent 该如何工作的。&lt;/p&gt;
&lt;p&gt;这就是 agent-skills 的底色：&lt;strong&gt;不是一个 prompt engineering 技巧集合，而是 Google 工程文化的 AI 翻译版&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;他在项目中明确引用了 &lt;a class="link" href="https://abseil.io/resources/swe-book" target="_blank" rel="noopener"
 &gt;Software Engineering at Google&lt;/a&gt; 和 Google 的 &lt;a class="link" href="https://google.github.io/eng-practices/" target="_blank" rel="noopener"
 &gt;engineering practices guide&lt;/a&gt;。换句话说，这套 skill 体系的每一条规则，都在世界上最大的代码库之一（Google 的 monorepo，20 亿行代码）中被验证过。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="二为什么-ai-编程代理需要-skill"&gt;二、为什么 AI 编程代理需要 Skill？
&lt;/h2&gt;&lt;h3 id="21-ai-的默认行为走最短路径"&gt;2.1 AI 的默认行为：走最短路径
&lt;/h3&gt;&lt;p&gt;让我们面对现实。当你对 AI Agent 说&amp;quot;实现一个用户注册功能&amp;quot;时，它的默认行为是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;直接开始写代码（跳过规范）&lt;/li&gt;
&lt;li&gt;一次性生成完整实现（跳过增量验证）&lt;/li&gt;
&lt;li&gt;可能补几个测试（如果你提醒了的话）&lt;/li&gt;
&lt;li&gt;不做安全审查&lt;/li&gt;
&lt;li&gt;不考虑 API 契约、错误处理边界、性能影响&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这不是因为 AI 不会做这些事——而是因为 &lt;strong&gt;没人告诉它应该做&lt;/strong&gt;，或者更准确地说，没人用结构化的方式告诉它 &lt;strong&gt;必须做&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="22-从能写代码到会做工程"&gt;2.2 从&amp;quot;能写代码&amp;quot;到&amp;quot;会做工程&amp;quot;
&lt;/h3&gt;&lt;p&gt;Osmani 做了一个关键区分：&lt;strong&gt;Vibe Coding vs Agentic Engineering&lt;/strong&gt;。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;Vibe Coding&lt;/th&gt;
 &lt;th&gt;Agentic Engineering&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;模式&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;帮我写个 XX&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;按照 spec 实现 XX&amp;rdquo;&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;/td&gt;
 &lt;td&gt;内置验证门&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;/td&gt;
 &lt;td&gt;生产代码&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;/td&gt;
 &lt;td&gt;前期投入大但可控&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;核心哲学&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;AI 驱动，人类跟随&lt;/td&gt;
 &lt;td&gt;人类拥有架构，AI 执行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Vibe Coding 没有错&lt;/strong&gt;——在原型阶段它效率惊人。但如果你的代码要上生产、要被团队维护、要承受真实用户的流量，你需要的是 Agentic Engineering。&lt;/p&gt;
&lt;h3 id="23-skill-的本质可执行的工作流"&gt;2.3 Skill 的本质：可执行的工作流
&lt;/h3&gt;&lt;p&gt;agent-skills 中的每个 skill 不是文档，不是参考手册，而是一个 &lt;strong&gt;结构化的可执行工作流&lt;/strong&gt;。每个 SKILL.md 文件包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;分步工作流程&lt;/strong&gt;：不是&amp;quot;你应该做 XX&amp;quot;，而是&amp;quot;第 1 步做 XX，第 2 步做 YY，做完后检查 ZZ&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;验证门（Verification Gates）&lt;/strong&gt;：每个阶段必须通过的检查点，&amp;ldquo;看起来对&amp;quot;不算完成&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;反合理化表（Anti-rationalization Tables）&lt;/strong&gt;：AI 常用借口及预设反驳（后面详细讲）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;红旗信号（Red Flags）&lt;/strong&gt;：识别 skill 被错误应用的迹象&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="六阶段流水线" class="gallery-image" data-flex-basis="430px" data-flex-grow="179" height="1536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-analysis/pipeline.webp" srcset="https://guige.ai/p/agent-skills-analysis/pipeline_hu_888aca7a4feed89f.webp 800w, https://guige.ai/p/agent-skills-analysis/pipeline_hu_7f5c51843340a300.webp 1600w, https://guige.ai/p/agent-skills-analysis/pipeline_hu_dd9c21170eedee4d.webp 2400w, https://guige.ai/p/agent-skills-analysis/pipeline.webp 2752w" width="2752"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="三19-个-skill-全景define--plan--build--verify--review--ship"&gt;三、19 个 Skill 全景：DEFINE → PLAN → BUILD → VERIFY → REVIEW → SHIP
&lt;/h2&gt;&lt;p&gt;整个 agent-skills 体系覆盖软件开发的完整生命周期，组织为 &lt;strong&gt;6 个阶段、19 个 skill&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;/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;DEFINE → PLAN → BUILD → VERIFY → REVIEW → SHIP
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/spec /plan /build /test /review /ship
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /code-simplify
&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="31-define-阶段先想清楚再动手"&gt;3.1 Define 阶段：先想清楚再动手
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Skill&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;idea-refine&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;结构化发散/收敛思维：理解与扩展 → 评估与收敛 → 打磨输出&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;spec-driven-development&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;先写规范再写代码，四阶段门控：Specify → Plan → Tasks → Implement&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;spec-driven-development&lt;/strong&gt; 是整个体系的基石。它要求每个 spec 覆盖六大核心领域：&lt;strong&gt;目标、命令、项目结构、代码风格、测试策略、边界&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;边界定义尤其精彩，采用三级体系：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Always&lt;/strong&gt;：永远做的事（如：每次改动必须有测试）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ask First&lt;/strong&gt;：需要确认才做的事（如：修改公共 API）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Never&lt;/strong&gt;：绝不能做的事（如：直接操作生产数据库）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;还有一个&amp;quot;假设显性化&amp;quot;机制：&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ASSUMPTIONS I&amp;#39;M MAKING:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. This is a web application (not native mobile)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. Authentication uses session-based cookies (not JWT)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Correct me now or I&amp;#39;ll proceed with these.
&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;这比&amp;quot;你有什么需求？&amp;ldquo;高效一百倍——&lt;strong&gt;AI 先给出假设让你纠正，而不是等你把所有需求想清楚&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="32-plan-阶段把大象切成薄片"&gt;3.2 Plan 阶段：把大象切成薄片
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Skill&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;planning-and-task-breakdown&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;将 spec 分解为小型、可验证的任务，每个任务有明确验收标准&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="33-build-阶段写代码的核心战场"&gt;3.3 Build 阶段：写代码的核心战场
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Skill&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;incremental-implementation&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;薄垂直切片：实现 → 测试 → 验证 → 提交 → 下一片&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;test-driven-development&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Red-Green-Refactor + Prove-It Pattern + 测试金字塔 80/15/5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;context-engineering&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;五层上下文管理：Rules → Spec → 源码 → 错误 → 对话&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;frontend-ui-engineering&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;组件架构、设计系统、WCAG 2.1 AA 无障碍&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;api-and-interface-design&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;契约优先、Hyrum&amp;rsquo;s Law、错误语义&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;incremental-implementation&lt;/strong&gt; 的核心理念：&lt;strong&gt;如果你写了 1000 行但 100 行就够，你就失败了。&lt;/strong&gt; 它定义了三种切片策略：&lt;/p&gt;
&lt;ul&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;li&gt;&lt;strong&gt;风险优先切片&lt;/strong&gt;：先验证最不确定的部分&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;context-engineering&lt;/strong&gt; 是容易被忽视但极其重要的 skill。它定义了五层上下文层级和三种打包策略：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Brain Dump&lt;/strong&gt;：把所有相关信息一次性灌入（小任务适用）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Selective Include&lt;/strong&gt;：精选最相关的文件和片段（中等任务）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hierarchical Summary&lt;/strong&gt;：先给摘要，按需展开细节（大型任务）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="34-verify-阶段证明它是对的"&gt;3.4 Verify 阶段：证明它是对的
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Skill&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;browser-testing-with-devtools&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;通过 Chrome DevTools MCP 获取 DOM、console、network、performance 实时数据&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;debugging-and-error-recovery&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;五步分诊：复现 → 定位 → 简化 → 修复 → 防护&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="35-review-阶段质量把关"&gt;3.5 Review 阶段：质量把关
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Skill&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;code-review-and-quality&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;五轴审查 + 评论分级（Critical/Important/Nit/Optional/FYI）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;code-simplification&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Chesterton&amp;rsquo;s Fence：删代码前先理解它存在的原因&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;security-and-hardening&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;OWASP Top 10 预防 + 三级边界系统&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;performance-optimization&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;度量优先 + Core Web Vitals 目标&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;code-review-and-quality&lt;/strong&gt; 的审批标准直接来自 Google：&amp;rdquo;&lt;strong&gt;当变更确实改善了整体代码健康度时就批准，即使它不完美。&lt;/strong&gt;&amp;ldquo;这是一种务实的工程文化——追求进步而非完美。&lt;/p&gt;
&lt;h3 id="36-ship-阶段安全交付"&gt;3.6 Ship 阶段：安全交付
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Skill&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;git-workflow-and-versioning&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;基于主干开发、原子提交&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;ci-cd-and-automation&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Shift Left、特性开关、质量门管道&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;deprecation-and-migration&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;代码即负债&amp;rdquo;、僵尸代码清理&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;documentation-and-adrs&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;ADR 架构决策记录、文档化&amp;quot;为什么&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;shipping-and-launch&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;发布前检查清单 + 分阶段发布 + 回滚方案&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="四核心创新反合理化anti-rationalization"&gt;四、核心创新：反合理化（Anti-rationalization）
&lt;/h2&gt;&lt;p&gt;如果让我从 agent-skills 中只挑一个最重要的设计模式，毫无疑问是 &lt;strong&gt;反合理化表（Anti-rationalization Tables）&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="41-问题ai-特别擅长给自己找借口"&gt;4.1 问题：AI 特别擅长给自己找借口
&lt;/h3&gt;&lt;p&gt;当你要求 AI Agent 遵循某个流程时，它有一种令人印象深刻的能力——&lt;strong&gt;用看起来完全合理的理由解释为什么可以跳过某个步骤&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;这个改动很简单，不需要写 spec&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;这个函数逻辑很清晰，不需要测试&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;这只是内部 API，不需要安全审查&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;代码已经很清晰了，不需要文档&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每一条听起来都很合理，对吧？&lt;strong&gt;这正是问题所在。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="42-解法预设借口--预设反驳"&gt;4.2 解法：预设借口 + 预设反驳
&lt;/h3&gt;&lt;p&gt;agent-skills 的做法是在每个 skill 文件中内置一张 &lt;strong&gt;反合理化表&lt;/strong&gt;，预先列出 AI 可能给出的所有借口，并提供反驳：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;AI 可能说的借口&lt;/th&gt;
 &lt;th&gt;预设反驳&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;这很简单，不需要 spec&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;简单任务不需要长 spec，但仍然需要验收标准。两行 spec 也是 spec。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;重构不需要新测试&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;重构必须保持行为不变，而证明行为不变的唯一方式就是测试。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;这只是内部使用&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;内部 API 也会被依赖——Hyrum&amp;rsquo;s Law 不区分内外。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;加测试会拖慢进度&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;不加测试会在未来拖慢进度十倍。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;错误处理可以后面再加&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;后面&amp;quot;是&amp;quot;永远不会&amp;quot;的委婉说法。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt="反合理化机制" class="gallery-image" data-flex-basis="360px" data-flex-grow="150" height="1684" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-analysis/anti-rationalization.webp" srcset="https://guige.ai/p/agent-skills-analysis/anti-rationalization_hu_a68f856df7813d8b.webp 800w, https://guige.ai/p/agent-skills-analysis/anti-rationalization_hu_5cfc8250bcc27d77.webp 1600w, https://guige.ai/p/agent-skills-analysis/anti-rationalization_hu_82bb35d5946c733f.webp 2400w, https://guige.ai/p/agent-skills-analysis/anti-rationalization.webp 2528w" width="2528"&gt;&lt;/p&gt;
&lt;h3 id="43-为什么这是最重要的创新"&gt;4.3 为什么这是最重要的创新？
&lt;/h3&gt;&lt;p&gt;因为它解决的不是能力问题，而是 &lt;strong&gt;意愿问题&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;当前的 LLM 在技术上完全有能力写测试、写 spec、做安全审查。它们不做，是因为：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;用户没有明确要求&lt;/strong&gt;——LLM 默认满足显式需求&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;最短路径偏好&lt;/strong&gt;——生成更少 token 通常被视为更高效&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;合理化能力太强&lt;/strong&gt;——LLM 可以为任何跳过步骤的行为编造看似合理的理由&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;反合理化表本质上是一种 &lt;strong&gt;预编译的规则引擎&lt;/strong&gt;：不是在运行时让 AI 判断&amp;quot;这个步骤重不重要&amp;rdquo;，而是在设计时就把所有可能的逃逸路径堵死。&lt;/p&gt;
&lt;p&gt;这个思路对任何在 CLAUDE.md 或 .cursorrules 中写规则的人都有启发：&lt;strong&gt;不要只写&amp;quot;你应该做什么&amp;rdquo;，还要写&amp;quot;当你想跳过时，为什么不能跳过&amp;quot;。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="五80-问题与理解债务comprehension-debt"&gt;五、80% 问题与理解债务（Comprehension Debt）
&lt;/h2&gt;&lt;h3 id="51-新瓶装新酒的技术债务"&gt;5.1 新瓶装新酒的技术债务
&lt;/h3&gt;&lt;p&gt;Osmani 在他的 Substack 文章中提出了一个犀利的观察：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;AI 可以生成 80%+ 的代码，但问题转移到了 &lt;strong&gt;理解债务（comprehension debt）&lt;/strong&gt;——开发者审查和合并他们无法独立编写的代码。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;他引用的数据令人警醒：&lt;strong&gt;高 AI 采用团队的 PR 合并量增加了 98%，但审查时间也增加了 91%。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这意味着什么？AI 让你写代码更快了，但它同时制造了一种新的债务——&lt;strong&gt;你的代码库里有越来越多你不完全理解的代码&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt="80% 问题与理解债务" class="gallery-image" data-flex-basis="430px" data-flex-grow="179" height="1536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-analysis/comprehension-debt.webp" srcset="https://guige.ai/p/agent-skills-analysis/comprehension-debt_hu_d83f98d6ed79b34c.webp 800w, https://guige.ai/p/agent-skills-analysis/comprehension-debt_hu_e32654e3e0bd5f0a.webp 1600w, https://guige.ai/p/agent-skills-analysis/comprehension-debt_hu_10f49a6e0dcd5150.webp 2400w, https://guige.ai/p/agent-skills-analysis/comprehension-debt.webp 2752w" width="2752"&gt;&lt;/p&gt;
&lt;h3 id="52-理解债务的三个症状"&gt;5.2 理解债务的三个症状
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;它能跑就行&amp;quot;综合症&lt;/strong&gt;：代码通过了测试但没人能解释它的设计决策&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;脆弱修改&lt;/strong&gt;：改一个地方崩三个地方，因为没人理解隐含的依赖关系&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;知识孤岛&lt;/strong&gt;：只有 AI 的对话记录知道为什么代码长这样，而对话记录不会被版本控制&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="53-agent-skills-的解法"&gt;5.3 agent-skills 的解法
&lt;/h3&gt;&lt;p&gt;agent-skills 通过几个 skill 协同解决这个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;spec-driven-development&lt;/strong&gt;：先有人类可读的规范，代码是规范的实现，而不是反过来&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;documentation-and-adrs&lt;/strong&gt;：记录&amp;quot;为什么&amp;quot;而非&amp;quot;是什么&amp;rdquo;——ADR（架构决策记录）让未来的维护者理解当时的选择&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;incremental-implementation&lt;/strong&gt;：每次只提交一小片，每片都有清晰的意图&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;code-review-and-quality&lt;/strong&gt;：强制五轴审查，确保不是&amp;quot;AI 写了什么就合并什么&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;核心哲学：&lt;strong&gt;AI 生成的代码量不是 KPI，人类理解的代码量才是。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="六conductor-vs-orchestrator两种-ai-协作范式"&gt;六、Conductor vs Orchestrator：两种 AI 协作范式
&lt;/h2&gt;&lt;p&gt;Osmani 提出了两种与 AI Agent 协作的模型，代表了从个人到团队的演进：&lt;/p&gt;
&lt;h3 id="61-conductor指挥家模式"&gt;6.1 Conductor（指挥家）模式
&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;人类 ←→ 单个 AI Agent（实时对话）
&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;ul&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;li&gt;&lt;strong&gt;典型工具&lt;/strong&gt;：Claude Code 交互模式、Cursor 对话&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;就像交响乐指挥——你挥棒，乐手演奏，每个乐句你都在控制。&lt;/p&gt;
&lt;h3 id="62-orchestrator编排者模式"&gt;6.2 Orchestrator（编排者）模式
&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;人类 → Spec → [Agent A] [Agent B] [Agent C] → 人类审查
&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;ul&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;li&gt;&lt;strong&gt;典型工具&lt;/strong&gt;：Claude Code Agent 模式、GitHub Copilot Workspace&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;就像导演——你给剧本（spec），演员们各自准备，你最后审片。&lt;/p&gt;
&lt;h3 id="63-什么时候用哪个"&gt;6.3 什么时候用哪个？
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;信号&lt;/th&gt;
 &lt;th&gt;用 Conductor&lt;/th&gt;
 &lt;th&gt;用 Orchestrator&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&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;&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;✓&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;✓&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Osmani 的关键洞察：&lt;strong&gt;随着 spec 质量的提高，你可以把越来越多的工作从 Conductor 模式迁移到 Orchestrator 模式&lt;/strong&gt;。这就是 spec-driven-development 被放在第一位的原因——好的 spec 是 Orchestrator 模式的前提。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Conductor vs Orchestrator" class="gallery-image" data-flex-basis="430px" data-flex-grow="179" height="1536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-analysis/conductor-vs-orchestrator.webp" srcset="https://guige.ai/p/agent-skills-analysis/conductor-vs-orchestrator_hu_9b0b29e6b0bae267.webp 800w, https://guige.ai/p/agent-skills-analysis/conductor-vs-orchestrator_hu_ef5cd882e05c3dba.webp 1600w, https://guige.ai/p/agent-skills-analysis/conductor-vs-orchestrator_hu_40fa0f275e1d1e25.webp 2400w, https://guige.ai/p/agent-skills-analysis/conductor-vs-orchestrator.webp 2752w" width="2752"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="七社区争论skills-vs-agentsmd"&gt;七、社区争论：Skills vs AGENTS.md
&lt;/h2&gt;&lt;p&gt;agent-skills 发布后，社区出现了一个有趣的争论：&lt;strong&gt;按需加载的 Skills 文件 vs 全量常驻的 AGENTS.md，哪个更好？&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="71-两种流派"&gt;7.1 两种流派
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Skills 流派&lt;/strong&gt;（agent-skills 的方式）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每个 skill 独立一个文件&lt;/li&gt;
&lt;li&gt;通过元 skill（using-agent-skills）按需发现和加载&lt;/li&gt;
&lt;li&gt;优点：节省 token，适合大型 skill 库&lt;/li&gt;
&lt;li&gt;缺点：AI 需要&amp;quot;决定&amp;quot;是否加载某个 skill，这个决策本身可能出错&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;AGENTS.md 流派&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;所有规则压缩到一个文件&lt;/li&gt;
&lt;li&gt;每次对话都全量加载&lt;/li&gt;
&lt;li&gt;优点：没有决策点，100% 确保规则被读取&lt;/li&gt;
&lt;li&gt;缺点：token 消耗大，规则多了之后上下文窗口拥挤&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="72-vercel-的实测数据"&gt;7.2 Vercel 的实测数据
&lt;/h3&gt;&lt;p&gt;Vercel 团队做了对比测试，发现将压缩文档直接放入 AGENTS.md 的任务成功率约 &lt;strong&gt;100%&lt;/strong&gt;，而 Skills 按需加载方式约 &lt;strong&gt;79%&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;原因很直接：使用 AGENTS.md 时，&lt;strong&gt;Agent 不需要做&amp;quot;我是否应该查找这个 skill？&amp;ldquo;的决策&lt;/strong&gt;——规则已经在上下文里了。&lt;/p&gt;
&lt;h3 id="73-合理的答案两者兼用"&gt;7.3 合理的答案：两者兼用
&lt;/h3&gt;&lt;p&gt;Osmani 自己也承认这个问题，并在项目中加入了 session hook 机制——每个新会话启动时自动注入元 skill，降低发现成本。&lt;/p&gt;
&lt;p&gt;实际上，最佳实践是 &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;strong&gt;永久基线&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;CLAUDE.md / AGENTS.md&lt;/td&gt;
 &lt;td&gt;代码风格、架构约束、绝不能做的事&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;按需加载&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Skills 文件&lt;/td&gt;
 &lt;td&gt;特定阶段的详细工作流（如 TDD 流程、安全审查清单）&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;/td&gt;
 &lt;td&gt;当前任务的具体上下文&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="八实战指南如何在你的项目中落地-agent-skills"&gt;八、实战指南：如何在你的项目中落地 Agent Skills
&lt;/h2&gt;&lt;p&gt;理论讲完了，下面是 &lt;strong&gt;可以直接复制粘贴的落地指南&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="81-在-claude-code-中使用推荐"&gt;8.1 在 Claude Code 中使用（推荐）
&lt;/h3&gt;&lt;p&gt;Claude Code 对 agent-skills 有最完整的原生支持。&lt;/p&gt;
&lt;h4 id="方式一通过插件安装最简单"&gt;方式一：通过插件安装（最简单）
&lt;/h4&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;&lt;span class="c1"&gt;# 安装 agent-skills 插件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;claude plugin add addyosmani/agent-skills
&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;安装后，你可以直接在 Claude Code 中使用斜杠命令：&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/spec — 进入规范驱动开发流程
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/plan — 将 spec 分解为任务
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/build — 增量实现
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/test — TDD 流程
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/review — 代码审查
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/ship — 发布检查
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/code-simplify — 代码简化
&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;h4 id="方式二本地目录安装更灵活"&gt;方式二：本地目录安装（更灵活）
&lt;/h4&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;/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;git clone https://github.com/addyosmani/agent-skills.git ~/.claude/agent-skills
&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. 在你的项目 CLAUDE.md 中引用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt;&amp;gt; /your/project/CLAUDE.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;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;## Agent Skills
&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;当执行以下任务时，加载对应的 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;- 写规范时：读取 ~/.claude/agent-skills/skills/spec-driven-development/SKILL.md
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;- 写代码时：读取 ~/.claude/agent-skills/skills/incremental-implementation/SKILL.md
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;- 写测试时：读取 ~/.claude/agent-skills/skills/test-driven-development/SKILL.md
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;- 代码审查时：读取 ~/.claude/agent-skills/skills/code-review-and-quality/SKILL.md
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;- 安全审查时：读取 ~/.claude/agent-skills/skills/security-and-hardening/SKILL.md
&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;h4 id="方式三配置-session-hook自动注入"&gt;方式三：配置 Session Hook（自动注入）
&lt;/h4&gt;&lt;p&gt;在项目根目录创建 &lt;code&gt;.claude/hooks.json&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;&amp;#34;hooks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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;&amp;#34;event&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;SessionStart&amp;#34;&lt;/span&gt;&lt;span class="p"&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;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;cat ~/.claude/agent-skills/skills/using-agent-skills/SKILL.md&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;这样每次开启新对话，Claude Code 会自动知道有哪些 skill 可用，并根据任务类型按需加载。&lt;/p&gt;
&lt;h3 id="82-在-cursor-中使用"&gt;8.2 在 Cursor 中使用
&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;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;# 1. 克隆仓库到项目根目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/addyosmani/agent-skills.git .cursor/agent-skills
&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. 将需要的 skill 复制为 Cursor rules&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp .cursor/agent-skills/skills/spec-driven-development/SKILL.md &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; .cursor/rules/spec-driven-development.md
&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;cp .cursor/agent-skills/skills/test-driven-development/SKILL.md &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; .cursor/rules/test-driven-development.md
&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;cp .cursor/agent-skills/skills/code-review-and-quality/SKILL.md &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; .cursor/rules/code-review-and-quality.md
&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;Cursor 的限制&lt;/strong&gt;：不支持按需加载，放入 &lt;code&gt;.cursor/rules/&lt;/code&gt; 的文件每次都会被加载。建议只放 3-5 个最常用的 skill，避免 token 浪费。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;进阶技巧&lt;/strong&gt;：在 &lt;code&gt;.cursorrules&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;/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 class="gu"&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="k"&gt;1.&lt;/span&gt; 收到新需求时，先按 spec-driven-development 规则写 spec
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; Spec 确认后，按 incremental-implementation 规则分片实现
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; 每个切片完成后，按 test-driven-development 规则补测试
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;4.&lt;/span&gt; 全部完成后，按 code-review-and-quality 规则自审
&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="83-在-gemini-cli-中使用"&gt;8.3 在 Gemini CLI 中使用
&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;/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;gemini skills install addyosmani/agent-skills
&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;Gemini CLI 对 agent-skills 有原生支持，安装后 skill 自动可用。&lt;/p&gt;
&lt;h3 id="84-在-github-copilot-中使用"&gt;8.4 在 GitHub Copilot 中使用
&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;# 1. 将 agents/ 目录下的角色文件作为 personas&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp -r agent-skills/agents/ .github/copilot-agents/
&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. 将核心规则写入 copilot 指令文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat agent-skills/skills/spec-driven-development/SKILL.md &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; agent-skills/skills/incremental-implementation/SKILL.md &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; agent-skills/skills/code-review-and-quality/SKILL.md &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;gt; .github/copilot-instructions.md
&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="85-不用任何工具手动提取核心规则"&gt;8.5 不用任何工具：手动提取核心规则
&lt;/h3&gt;&lt;p&gt;如果你不想安装整个项目，可以只提取最有价值的部分，写入你项目的 CLAUDE.md 或 .cursorrules：&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;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;/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 class="gu"&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="gu"&gt;### 规范优先
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 任何超过 20 行的改动，先写 spec 再写代码
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Spec 必须包含：目标、验收标准、假设列表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 不接受&amp;#34;这很简单不需要 spec&amp;#34;——两行 spec 也是 spec
&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;### 增量实现
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 每次只实现一个薄垂直切片
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 每个切片必须：能编译、有测试、可独立提交
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 单次提交不超过 ~100 行变更
&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;### 反合理化规则
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 当你想跳过测试时：不加测试会在未来拖慢进度十倍
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 当你想跳过安全审查时：内部 API 也会被依赖（Hyrum&amp;#39;s Law）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 当你想说&amp;#34;后面再加&amp;#34;时：&amp;#34;后面&amp;#34;是&amp;#34;永远不会&amp;#34;的委婉说法
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 当你想一次性提交大量代码时：大 PR 隐藏 bug，小 PR 暴露 bug
&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;### 验证门
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; &amp;#34;它能跑&amp;#34;不等于&amp;#34;它是对的&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 每个阶段必须有可验证的证据，不接受&amp;#34;我确认过了&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 修 bug 必须先写复现测试（Prove-It Pattern）
&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="86-团队落地建议渐进式采用路径"&gt;8.6 团队落地建议：渐进式采用路径
&lt;/h3&gt;&lt;p&gt;不要试图一次性采用全部 19 个 skill。推荐的渐进路径：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一周：只用 3 个核心 skill&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spec-driven-development → incremental-implementation → code-review-and-quality
&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;这三个 skill 覆盖了最关键的问题：先想后做、小步快跑、质量把关。&lt;/p&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;+ test-driven-development
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ security-and-hardening
&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;+ context-engineering
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ documentation-and-adrs
&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;第四周以后：按需加入其他 skill&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;/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;+ performance-optimization（性能敏感项目）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ frontend-ui-engineering（前端项目）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ api-and-interface-design（API 项目）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ shipping-and-launch（频繁发布的项目）
&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="87-自定义你自己的反合理化表"&gt;8.7 自定义你自己的反合理化表
&lt;/h3&gt;&lt;p&gt;agent-skills 最大的价值不是直接用它的 19 个 skill，而是学会它的 &lt;strong&gt;设计模式&lt;/strong&gt;，然后写你自己的。&lt;/p&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;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;/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 class="gu"&gt;## [你的 Skill 名称]
&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="gu"&gt;### 工作流程
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; 第一步...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; 第二步...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&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="gu"&gt;### 验证门
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; 检查项 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; 检查项 2
&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;### 反合理化表
&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| &amp;#34;这种情况不会发生&amp;#34; | 如果不会发生，加个断言不会有任何成本 |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| &amp;#34;文档以后再写&amp;#34; | 以后的你不会记得现在的上下文 |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| &amp;#34;这只是临时方案&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;### 红旗信号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 如果你发现自己在 [某种情况]，说明这个 skill 被错误应用了
&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;img alt="实战指南" class="gallery-image" data-flex-basis="430px" data-flex-grow="179" height="1536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://guige.ai/p/agent-skills-analysis/practice-guide.webp" srcset="https://guige.ai/p/agent-skills-analysis/practice-guide_hu_72c981edfb217e42.webp 800w, https://guige.ai/p/agent-skills-analysis/practice-guide_hu_2efd181e2eded04a.webp 1600w, https://guige.ai/p/agent-skills-analysis/practice-guide_hu_cb2def1b88b66c7f.webp 2400w, https://guige.ai/p/agent-skills-analysis/practice-guide.webp 2752w" width="2752"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="九你的-ai-编程代理需要一个经理"&gt;九、&amp;ldquo;你的 AI 编程代理需要一个经理&amp;rdquo;
&lt;/h2&gt;&lt;p&gt;最后分享 Osmani 的一个深刻洞察：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;AI 协作本质上是 &lt;strong&gt;管理问题&lt;/strong&gt;，而非 prompting 问题。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;他发现，与 AI Agent 高效协作所需的能力，和管理人类团队的能力惊人地相似：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;管理能力&lt;/th&gt;
 &lt;th&gt;在 AI Agent 中的对应&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;清晰的任务界定&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;写好 spec，而非模糊指令&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;审慎委托&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;判断哪些任务可以完全交给 AI，哪些需要检查点&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;验证循环&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;不是&amp;quot;做完了吗？&amp;ldquo;而是&amp;quot;给我看证据&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;异步检查&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Orchestrator 模式下的批量审查&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;委托的三个层次：&lt;/p&gt;
&lt;ol&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;li&gt;&lt;strong&gt;保留人工&lt;/strong&gt;：架构决策、安全关键路径、性能关键路径&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;如果你曾经是一个好的技术负责人，你已经具备了与 AI Agent 高效协作的核心能力。&lt;/strong&gt; 不同的是，你的&amp;quot;下属&amp;quot;现在每秒能输出 100 行代码——这让你的管理质量变得前所未有地重要。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="总结"&gt;总结
&lt;/h2&gt;&lt;p&gt;agent-skills 不仅是一个工具集——它是对 &lt;strong&gt;AI 编程时代工程文化&lt;/strong&gt;的一次系统性思考。&lt;/p&gt;
&lt;p&gt;几个关键 takeaway：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;AI 编程代理的问题不是能力不够，而是纪律不够&lt;/strong&gt;。agent-skills 通过结构化的工作流和反合理化机制解决这个问题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;反合理化表是最值得学习的设计模式&lt;/strong&gt;。不要只告诉 AI &amp;ldquo;应该做什么&amp;rdquo;，还要预设它&amp;quot;想跳过时的借口&amp;quot;并提供反驳。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;理解债务是新的技术债务&lt;/strong&gt;。AI 让代码增长更快，但如果人类理解跟不上，代码库会变成黑箱。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;从 Conductor 到 Orchestrator 的演进是必然的&lt;/strong&gt;，而好的 spec 是这个演进的前提。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;渐进式采用&lt;/strong&gt;：先用 3 个核心 skill（spec + incremental + review），再逐步扩展。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最后用 Osmani 自己的话收尾：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&amp;ldquo;Agentic Engineering is not about AI writing all the code. It&amp;rsquo;s about humans owning the architecture, quality, and correctness — while AI executes under human guidance.&amp;rdquo;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;人类拥有架构、质量和正确性，AI 在人类的指导下执行。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这大概是 2026 年最值得内化的一句话。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/addyosmani/agent-skills" target="_blank" rel="noopener"
 &gt;agent-skills GitHub 仓库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://addyosmani.com/blog/agentic-engineering/" target="_blank" rel="noopener"
 &gt;Agentic Engineering — Addy Osmani&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://addyo.substack.com/p/the-80-problem-in-agentic-coding" target="_blank" rel="noopener"
 &gt;The 80% Problem in Agentic Coding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://addyosmani.com/blog/coding-agents-manager/" target="_blank" rel="noopener"
 &gt;Your AI coding agents need a manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://addyosmani.com/blog/good-spec/" target="_blank" rel="noopener"
 &gt;How to write a good spec for AI agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://addyosmani.com/blog/future-agentic-coding/" target="_blank" rel="noopener"
 &gt;The future of agentic coding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://addyosmani.com/blog/self-improving-agents/" target="_blank" rel="noopener"
 &gt;Self-Improving Coding Agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://abseil.io/resources/swe-book" target="_blank" rel="noopener"
 &gt;Software Engineering at Google&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>