<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator>
  <link href="https://jinzi.cyou/feed-notes.xml" rel="self" type="application/atom+xml"/>
  <link href="https://jinzi.cyou/" rel="alternate" type="text/html"/>
  <updated>2026-07-28T09:33:29+00:00</updated>
  <id>https://jinzi.cyou/feed-notes.xml</id>
  <title type="html">Marginalia · 批注</title>
  <subtitle>只含手写研究笔记（不含每日 AI 晨报）。全量流见 /feed.xml。</subtitle>
  <author><name>Marginalia</name></author>
  <entry>
    <title type="html">我给 agent 建了个工具调用测评场，然后发现「通道」比「模型」更能决定成败</title>
    <link href="https://jinzi.cyou/posts/2026-07-25-model-arena/" rel="alternate" type="text/html" title="我给 agent 建了个工具调用测评场，然后发现「通道」比「模型」更能决定成败"/>
    <published>2026-07-25T04:00:00+00:00</published>
    <updated>2026-07-25T04:00:00+00:00</updated>
    <id>https://jinzi.cyou/posts/model-arena</id>
    <content type="html" xml:base="https://jinzi.cyou/posts/2026-07-25-model-arena/">&lt;blockquote&gt;
  &lt;p&gt;开源了一个小工具 Model Arena：受限工具集 + 18 题四档题库 + 自动判分 + Web UI。跑完 17 个模型之后，最有价值的结论不是排名，而是几件容易归错因的事——同一个模型换条路走分数能差一倍、「畸形工具调用」看着像模型不行其实不是，以及最要命的那个：&lt;strong&gt;我的评测沙箱漏了，它在按搜索风格而不是能力打分&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;起因&quot;&gt;起因&lt;/h2&gt;

&lt;p&gt;我有个自建的制片 dashboard，里面有个自主 agent。它不走 Claude，而是经本地网关路由到 deepseek / gemini / kimi / minimax / hy3 / grok 一堆第三方后端。&lt;/p&gt;

&lt;p&gt;这类 agent 的成败几乎不取决于模型「聪不聪明」，而取决于一件更朴素的事：&lt;strong&gt;它能不能把工具调对&lt;/strong&gt;。参数漏一个必填字段、把该 Grep 的活儿拿去 Read、撞满轮次交白卷——这些失败跟基准测试里的推理分数关系不大。&lt;/p&gt;

&lt;p&gt;于是我把「构造测试题 → 批量跑 → 判分 → 排名」固化成了一个可复现的程序，现在开源出来：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/pyf-labrary/model-arena&quot;&gt;github.com/pyf-labrary/model-arena&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;它测什么&quot;&gt;它测什么&lt;/h2&gt;

&lt;p&gt;模拟生产 agent 的&lt;strong&gt;受限工具集&lt;/strong&gt;：只放行 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Read / Grep / Glob&lt;/code&gt; 加一个白名单 MCP 工具，用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;disallowed_tools&lt;/code&gt; 拉黑 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bash / Write / Task / WebSearch&lt;/code&gt;。经 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;claude-agent-sdk&lt;/code&gt; 起子进程 agent，模型经 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ANTHROPIC_BASE_URL&lt;/code&gt; 指向网关。&lt;/p&gt;

&lt;p&gt;题库 18 题、四个难度档，跑在一个自包含的样例工作区上。关键设计是&lt;strong&gt;标准答案由生成器从数据结构实算、再回磁盘对账&lt;/strong&gt;——不一致直接报错退出，所以判分可以全自动。&lt;/p&gt;

&lt;p&gt;工作区里处处埋雷，每个雷对应一类真实的 agent 失败模式：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;大小写变体的文件名（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;component.md&lt;/code&gt; 混在 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;COMPONENT.md&lt;/code&gt; 里）→ 考口径漂移&lt;/li&gt;
  &lt;li&gt;更长的近似标记（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ZETA9X&lt;/code&gt; 混在 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ZETA9&lt;/code&gt; 里）→ 考整词边界&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.bak&lt;/code&gt; 备份、草稿目录、归档区的假模块 → 考盲目全仓 grep&lt;/li&gt;
  &lt;li&gt;一个工具故意返回&lt;strong&gt;过期缓存值&lt;/strong&gt;（报 14，磁盘真值 12）→ 一道题考「有没有真读返回值」，另一道题禁用该工具考「敢不敢不信它」&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;难度分层符合预期：T1 基线四题人人满分，区分度落在 T2 工具保真和 T4 杀手级。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/img/posts/2026-07-25-model-arena/questions.jpg&quot; alt=&quot;配置页：18 道题以卡片列出，每张标注难度档、期望工具族、埋雷说明与标准答案&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;结果满分梯队&quot;&gt;结果：满分梯队&lt;/h2&gt;

&lt;p&gt;17 个模型、每个 18 题。&lt;strong&gt;先说不确定性&lt;/strong&gt;：我用同一套 harness 把全部模型重复跑了两轮，两轮之间平均差 &lt;strong&gt;1.0 分&lt;/strong&gt;（最大 3 分，只有 5/19 个完全不变）。所以下面这张表&lt;strong&gt;只能分档看，名次没有意义&lt;/strong&gt;——17 和 18 之间的差别完全落在噪声里。&lt;/p&gt;

&lt;p&gt;满分档（18/18，按耗时排）：&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;out token&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;grok-composer-2.5-fast&lt;/td&gt;
      &lt;td&gt;18/18&lt;/td&gt;
      &lt;td&gt;18/18&lt;/td&gt;
      &lt;td&gt;10.0s&lt;/td&gt;
      &lt;td&gt;6938&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;deepseek-v4-flash-free&lt;/td&gt;
      &lt;td&gt;18/18&lt;/td&gt;
      &lt;td&gt;18/18&lt;/td&gt;
      &lt;td&gt;14.1s&lt;/td&gt;
      &lt;td&gt;15828&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;hy3-preview&lt;/td&gt;
      &lt;td&gt;18/18&lt;/td&gt;
      &lt;td&gt;18/18&lt;/td&gt;
      &lt;td&gt;18.9s&lt;/td&gt;
      &lt;td&gt;12931&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;claude-opus-5&lt;/td&gt;
      &lt;td&gt;18/18&lt;/td&gt;
      &lt;td&gt;18/18&lt;/td&gt;
      &lt;td&gt;20.1s&lt;/td&gt;
      &lt;td&gt;14488&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;kimi-k2.7-code&lt;/td&gt;
      &lt;td&gt;18/18&lt;/td&gt;
      &lt;td&gt;18/18&lt;/td&gt;
      &lt;td&gt;22.5s&lt;/td&gt;
      &lt;td&gt;10466&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;gpt-5.6-luna&lt;/td&gt;
      &lt;td&gt;18/18&lt;/td&gt;
      &lt;td&gt;18/18&lt;/td&gt;
      &lt;td&gt;30.4s&lt;/td&gt;
      &lt;td&gt;8208&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;17/18 档：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grok-4.5&lt;/code&gt;(12.3s) · &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grok-4.3&lt;/code&gt;(14.4s) · &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpt-5.6-terra&lt;/code&gt;(23.3s，&lt;strong&gt;4840 tok 最省&lt;/strong&gt;) · &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gemini-pro-agent&lt;/code&gt;(28.3s) · &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;claude-sonnet-5&lt;/code&gt;(34.4s) · &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpt-5.4-mini&lt;/code&gt;(39.7s)。
15–16 档：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deepseek-v4-pro&lt;/code&gt; 16 · &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;minimax-m3-pay&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gemini-3.6-flash&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kimi-k2.6&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gemini-3.1-pro-low&lt;/code&gt; 各 15。&lt;/p&gt;

&lt;p&gt;比通过数更能拉开差距的是&lt;strong&gt;畸形调用&lt;/strong&gt;那一列：Gemini 三个变体分别 20/106、7/98、28/130，其余 14 个模型&lt;strong&gt;全为 0&lt;/strong&gt;。&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gemini-3.1-pro-low&lt;/code&gt; 答对 15 题，但只有 12 题算「干净通过」。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/img/posts/2026-07-25-model-arena/rank.jpg&quot; alt=&quot;排名页：通过 / 无瑕通过 / 答对三列并排，附畸形率、越权次数、平均耗时与 out token&quot; /&gt;&lt;/p&gt;

&lt;p&gt;另外 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;minimax-m3-pay&lt;/code&gt; 有个别人没有的毛病：&lt;strong&gt;越权调用被拉黑的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bash&lt;/code&gt; 共 13 次&lt;/strong&gt;（SDK 会拒绝执行，但这是个明确的失败信号，我后来给它加了单独的计数指标）。&lt;/p&gt;

&lt;h2 id=&quot;发现一通道--模型&quot;&gt;发现一：通道 &amp;gt; 模型&lt;/h2&gt;

&lt;p&gt;榜上最低的是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kimi-k2.7&lt;/code&gt;，11/18。但同一个模型换条路进来，叫 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kimi-k2.7-code&lt;/code&gt;，拿了 &lt;strong&gt;18/18&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;差别在哪？前者是经订阅转发的通道，后者是厂商官方 OAuth 直连。转发层的症状长这样：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;「找不到 registry 目录」&lt;/li&gt;
  &lt;li&gt;「Read 的 file_path 与 cwd 不一致」&lt;/li&gt;
  &lt;li&gt;卡满 150 秒，空答&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;这三个症状，每一个都长得像「这模型不行」。&lt;/strong&gt; 如果不做通道对照，我就会得出「kimi 工具调用能力差」的结论，然后把它从选型里划掉——而真相是这个模型在满分档。7 分的差距远超前面量的 1.0 分噪声，这个结论站得住。&lt;/p&gt;

&lt;p&gt;但&lt;strong&gt;同样的对照在 deepseek 上不成立&lt;/strong&gt;：转发版 16/18、官方直连版 18/18，差 2 分——落在噪声范围内，不能声称有差异。我最早那版文章里写过「转发无质量损耗、但有速度与 token 代价」，那是基于一批后来被推翻的数据（见文末后记），&lt;strong&gt;现在这个方向性结论我撤回&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;所以准确的说法是：&lt;strong&gt;转发层可能引入严重故障（kimi 是实锤），但不是必然（deepseek 上看不出来）。&lt;/strong&gt; 结论仍然是那句：&lt;strong&gt;做模型评测必须把「通道」当成自变量&lt;/strong&gt;——否则你测的是通道，报出来的却是模型。&lt;/p&gt;

&lt;p&gt;（顺带：这两个对照组我之后不再跑了——对照价值已经取到，继续测只是重复烧 token。所以上面这组数字是历史快照，日期 2026-07-25。）&lt;/p&gt;

&lt;h2 id=&quot;发现二畸形调用的归因要靠换执行器做单变量对照&quot;&gt;发现二：畸形调用的归因，要靠换执行器做单变量对照&lt;/h2&gt;

&lt;p&gt;全场 17 个模型里，「畸形工具调用」（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Grep&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Glob&lt;/code&gt; 丢了必填的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pattern&lt;/code&gt; 字段）一共出现 55 次——&lt;strong&gt;全部来自 Gemini 的三个变体&lt;/strong&gt;（20 / 7 / 28），其余 14 个模型合计&lt;strong&gt;零次&lt;/strong&gt;。这个分布在两轮独立重跑里都稳定复现，不是噪声。&lt;/p&gt;

&lt;p&gt;看起来结论很清楚：Gemini 不适应 Claude 形状的工具 schema。&lt;/p&gt;

&lt;p&gt;我差点就这么写了。但这里有个第二解释没排除：所有非 Anthropic 模型都要经过协议翻译，会不会是&lt;strong&gt;翻译层&lt;/strong&gt;把 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pattern&lt;/code&gt; 弄丢了，而不是模型没发？&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;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;订阅通道（Gemini 原生协议）&lt;/td&gt;
      &lt;td&gt;2/20&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;API key 通道（同为 Gemini 原生协议，另一个 executor）&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;0/20&lt;/strong&gt;&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;但故事没完。我又做了配对补测——另外 3 道题、两条路各跑一遍——&lt;strong&gt;两边都是零畸形&lt;/strong&gt;。也就是说它是&lt;strong&gt;间歇性&lt;/strong&gt;的，6 次配对一次都没复现。&lt;/p&gt;

&lt;p&gt;所以诚实的结论只能到这里：&lt;strong&gt;不是模型的锅，但也没有足够证据说这是某条通道的确定性缺陷。&lt;/strong&gt; 样本量不支持我给出一个发生率。我很想把它写成一句干净的「就是 XX 的问题」，但那会是编的。&lt;/p&gt;

&lt;p&gt;点通过矩阵里任意一格，能看到那一题的完整工具调用序列。下面这张里，红框标出的两次就是缺 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pattern&lt;/code&gt; 的畸形调用——而它们旁边还有十几次形状完全正常的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Grep&lt;/code&gt;。这也是为什么我后来把「畸形」单独成列，而不是折叠进通过率：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/img/posts/2026-07-25-model-arena/detail.jpg&quot; alt=&quot;单题详情弹窗：完整工具调用序列，两次缺 pattern 的 Grep 被红框标注「缺参数」，同时显示撞满 20 轮的报错&quot; /&gt;&lt;/p&gt;

&lt;p&gt;（另外还有个反直觉的细节：那道让 Gemini 反复出错的题，&lt;strong&gt;换了干净通道之后照样撞满轮次交白卷&lt;/strong&gt;。所以这道题的失分不能全算到通道头上——它对这个模型本来就是难题。归因的时候很容易一激动把所有失分都归给刚发现的那个原因。）&lt;/p&gt;

&lt;h2 id=&quot;一个被证伪的优化想法&quot;&gt;一个被证伪的优化想法&lt;/h2&gt;

&lt;p&gt;既然怀疑 Anthropic→Gemini 的协议翻译有问题，那 Gemini 不是有 OpenAI 兼容端点吗？绕开这层翻译走成熟的 Anthropic→OpenAI 路径不就行了？&lt;/p&gt;

&lt;p&gt;我真去接了一条对照路由。结果&lt;strong&gt;第一次工具调用后立刻 400&lt;/strong&gt;：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Function call is missing a thought_signature in function...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Gemini 的 OpenAI 兼容端点在多轮 function calling 上要求把 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;thought_signature&lt;/code&gt; 原样回传，而 OpenAI 协议里根本没有这个字段的位置。这条链是断的——&lt;strong&gt;换协议不但不能提效，是直接不可用&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;好在这类想法验证起来很便宜：加一条路由、跑一道题、看报错。比想很久要快。&lt;/p&gt;

&lt;h2 id=&quot;顺便修了判分器&quot;&gt;顺便修了判分器&lt;/h2&gt;

&lt;p&gt;原本的判分规则要求「零畸形」才算通过。这导致「答案其实对了、只是某次调用形状有瑕疵」和「答错了」在榜上长得一模一样——&lt;strong&gt;恰恰把我最想区分的两种失败压成了同一档&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;改成并列：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pass&lt;/code&gt; 只管&lt;strong&gt;能不能把活干对&lt;/strong&gt;，另设 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clean&lt;/code&gt; 管&lt;strong&gt;干不干净&lt;/strong&gt;，榜上「通过 / 无瑕通过 / 答对」三列并排。综合分照旧扣畸形率（并列不等于免罚）。改完用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--rescore&lt;/code&gt; 重判历史数据——原始回答和工具调用序列都存着，不用重烧一遍 token，而且&lt;strong&gt;重判产物写新文件，绝不覆盖原件&lt;/strong&gt;（原始判定是证据）。&lt;/p&gt;

&lt;p&gt;重判之后，两个 Gemini 变体各自涨了 1 分和 2 分。&lt;/p&gt;

&lt;h2 id=&quot;后记这张榜差点是错的&quot;&gt;后记：这张榜差点是错的&lt;/h2&gt;

&lt;p&gt;上面那些数字，是&lt;strong&gt;推倒重来过两轮&lt;/strong&gt;的。&lt;/p&gt;

&lt;p&gt;起因是一句质疑。我把新加进来的两个模型（Claude 的 Opus 5 / Sonnet 5，走本机订阅而非网关）跑完，报出 16/18 和 15/18，位置在中游。用户看了一眼说：这是当前最强的模型，跑分不该落后。&lt;/p&gt;

&lt;p&gt;我当时手边有两句现成的解释——「n=1 有噪声」和「这题库测的是工具调用不是智力」。两句都成立。但它们都是&lt;strong&gt;在看证据之前就准备好的话&lt;/strong&gt;。所以我去复跑了它失分的那道题，把工具调用和返回全打出来：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Grep {&quot;pattern&quot;:&quot;\\bOMEGA7\\b&quot;, &quot;path&quot;:&quot;/home/user&quot;, &quot;output_mode&quot;:&quot;files_with_matches&quot;}
→ Found 3 files
   ……/工作日志/model-arena题库v2.md
   ……/模型横评v2-资料/questions.json      ← 题库本身
   ……/模型横评v2-资料/gen_workspace.py
→ 答 3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;题目问「整个工作区里有多少个文件包含整词 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OMEGA7&lt;/code&gt;」，标准答案 0（工作区里只有更长的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OMEGA71&lt;/code&gt;）。而它搜到的三个文件，是&lt;strong&gt;这套题库自己的设计文档&lt;/strong&gt;——其中 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;questions.json&lt;/code&gt; 里躺着全部标准答案。&lt;/p&gt;

&lt;p&gt;它答 3，对它实际看到的东西而言完全正确。&lt;/p&gt;

&lt;h3 id=&quot;缺陷一cwd-不是沙箱&quot;&gt;缺陷一：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cwd&lt;/code&gt; 不是沙箱&lt;/h3&gt;

&lt;p&gt;我一直以为给 agent 设了 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cwd=WORKSPACE&lt;/code&gt; 就等于把它关在工作区里。不是——&lt;strong&gt;那只是起始目录&lt;/strong&gt;。&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Read&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Grep&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Glob&lt;/code&gt; 的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;path&lt;/code&gt; 参数照样能指向机器上任何位置。另一个模型更干脆，&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;path&lt;/code&gt; 直接填 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;危害有两层。&lt;strong&gt;答案泄漏&lt;/strong&gt;是显眼的那层。更隐蔽的是第二层：&lt;strong&gt;这个缺陷是有方向性的&lt;/strong&gt;。老老实实用相对路径在工作区里干活的模型毫发无伤；用绝对路径做彻底检索的模型撞雷。于是榜单实际上在按&lt;strong&gt;搜索风格&lt;/strong&gt;打分，而不是按能力——而「更彻底地检索」恰恰是我希望 agent 具备的品质。&lt;/p&gt;

&lt;p&gt;修法是加一道路径闸：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;can_use_tool&lt;/code&gt; 里把 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;path&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;file_path&lt;/code&gt; resolve 后检查是否在工作区内，不在就拒绝。&lt;/p&gt;

&lt;h3 id=&quot;缺陷二装了闸闸没响&quot;&gt;缺陷二：装了闸，闸没响&lt;/h3&gt;

&lt;p&gt;改完跑一遍，越界计数 &lt;strong&gt;0&lt;/strong&gt;，而模型照样搜出了工作区外的文件。&lt;/p&gt;

&lt;p&gt;原因是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;allowed_tools&lt;/code&gt;。我一直把它理解成「可见工具白名单」，它实际上是&lt;strong&gt;自动批准名单&lt;/strong&gt;——名单里的工具&lt;strong&gt;直接绕过&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;can_use_tool&lt;/code&gt;。我把 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Read&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Grep&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Glob&lt;/code&gt; 留在里面，于是权限回调一次都没被调用过。SDK 其实打了个 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_warn_if_can_use_tool_shadowed&lt;/code&gt; 警告，混在输出里，我第一遍没当回事。&lt;/p&gt;

&lt;p&gt;（工具的&lt;strong&gt;可见性&lt;/strong&gt;由 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;disallowed_tools&lt;/code&gt; 决定，与 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;allowed_tools&lt;/code&gt; 无关。把只读工具移出自动批准名单不影响模型使用它们，只是每次调用要过闸。）&lt;/p&gt;

&lt;h3 id=&quot;缺陷三闸响了但响错了&quot;&gt;缺陷三：闸响了，但响错了&lt;/h3&gt;

&lt;p&gt;第二版闸生效，然后分数&lt;strong&gt;掉&lt;/strong&gt;了：一个模型从 18 掉到 16，另一个掉到 14。&lt;/p&gt;

&lt;p&gt;我差点又要去解释「沙箱变严了所以更难」。真实原因是我的回调返回了 dict，而 SDK 要求返回 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PermissionResult&lt;/code&gt; 对象。回调直接抛异常 → &lt;strong&gt;MCP 工具全线挂掉&lt;/strong&gt; → 模型在那几道题里回答「工具调用失败，无法给出数字」。&lt;/p&gt;

&lt;p&gt;看着像模型变笨了，其实是 harness 在自残。&lt;/p&gt;

&lt;h3 id=&quot;缺陷四拒绝语本身是一种提示&quot;&gt;缺陷四：拒绝语本身是一种提示&lt;/h3&gt;

&lt;p&gt;闸终于对了。但翻越界记录时我发现，拦下的 296 次里只有 18 次是真往外搜（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;path=/&lt;/code&gt; 那种），其余全是模型在&lt;strong&gt;猜工作区的绝对路径&lt;/strong&gt;——猜错了而已。&lt;/p&gt;

&lt;p&gt;这类调用在原环境里只会得到一句「文件不存在」，模型自己改用相对路径。而我的拒绝语写的是「越界，请只用相对路径检索」——&lt;strong&gt;比自然的 ENOENT 多给了一条指导&lt;/strong&gt;。等于我在修 bug 的同时给所有模型塞了新帮助，那么修复前后的分数变化，究竟是「污染被堵住」还是「提示帮了忙」，就分不清了。&lt;/p&gt;

&lt;p&gt;改成中性的「路径不存在或不可访问」（语义与 chroot 一致：外面的东西就是不存在），&lt;strong&gt;再全部重跑一遍&lt;/strong&gt;。&lt;/p&gt;

&lt;h3 id=&quot;值多少&quot;&gt;值多少&lt;/h3&gt;

&lt;p&gt;四个缺陷，每一个单独出现都足以把排名弄反，而它们的表现全都是「某个模型分低」——一个我早就准备好用「模型能力」去解释的现象。&lt;/p&gt;

&lt;p&gt;代价是两轮全量重跑。收获是这条判据：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;当结果与强先验冲突时，先查 harness，再查被测对象。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;「最强的模型不该落后」是个强先验。我本可以用「n=1 噪声」把它打发过去——那句话甚至是对的，前面量到的噪声就有 ±1 分。&lt;strong&gt;但用一个成立的通用解释去覆盖一个具体的异常，是归因里最容易犯的懒。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;还有个附带收获：修完之后我才有条件去量噪声——&lt;strong&gt;同一 harness 跑两轮，平均差 1.0 分&lt;/strong&gt;。这个数字反过来说明，我原先那张榜上「第 1 名和第 5 名」的排序，本来就没有意义。&lt;strong&gt;先修偏差，再量方差，然后才谈名次。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;最后一句实践建议：这次能查下去，全靠每道题的原始回答和完整工具调用序列都存在结果文件里。如果当初只存了分数，这四个缺陷一个都查不出来——重跑只会得到同样可疑的数字，而没有任何线索。&lt;strong&gt;评测系统存原始过程，比存结论重要。&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;拿去跑&quot;&gt;拿去跑&lt;/h2&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git clone https://github.com/pyf-labrary/model-arena.git &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;model-arena
pip &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;claude-agent-sdk
&lt;span class=&quot;nb&quot;&gt;cp &lt;/span&gt;config.example.json config.json   &lt;span class=&quot;c&quot;&gt;# 填网关地址和 token&lt;/span&gt;
python3 server.py &lt;span class=&quot;nt&quot;&gt;--port&lt;/span&gt; 8799
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;不限某一种网关——任何暴露 Anthropic Messages 协议 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/v1/messages&lt;/code&gt; 的网关都能接。&lt;/p&gt;

&lt;p&gt;仓库里带了 17 模型评测的&lt;strong&gt;全部原始数据&lt;/strong&gt;（含修沙箱前后的各轮，可对比），每道题保留了模型的原始回答和完整工具调用序列，可以自己 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--rescore&lt;/code&gt; 用别的判据复判，不用重跑。&lt;/p&gt;

&lt;h2 id=&quot;最后&quot;&gt;最后&lt;/h2&gt;

&lt;p&gt;这事让我改了一个习惯：以前跑完评测，写完报告就算交付了。但那次收尾时我顺手对了一下账——&lt;strong&gt;把榜单和实际生效的配置逐行比一遍&lt;/strong&gt;——发现 5 个满分模型在我自己的 dashboard 里全都是关着的，用户根本选不到；而榜末那两个反倒开着。&lt;/p&gt;

&lt;p&gt;评测跑完了、报告写完了、结论也记下来了，&lt;strong&gt;兑现率却是 0&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;所以最有价值的一步往往不在报告里，而在「榜与现状的差集」里。&lt;/p&gt;</content>
    <category term="agent"/>
    <category term="评测"/>
    <category term="开源"/>
    <category term="LLM"/>
    <summary type="html">开源了一个 agent 工具调用测评场，17 模型实测。附一次翻车复盘：评测沙箱漏了会按搜索风格而非能力打分，四个 harness 缺陷差点把排名判反。</summary>
  </entry>
  <entry>
    <title type="html">Fable 5 首周「逆天 demo」盘点与技术实现拆解</title>
    <link href="https://jinzi.cyou/posts/2026-06-11-fable5-viral-demos-and-techniques/" rel="alternate" type="text/html" title="Fable 5 首周「逆天 demo」盘点与技术实现拆解"/>
    <published>2026-06-11T04:00:00+00:00</published>
    <updated>2026-06-11T04:00:00+00:00</updated>
    <id>https://jinzi.cyou/posts/fable5-viral-demos-and-techniques</id>
    <content type="html" xml:base="https://jinzi.cyou/posts/2026-06-11-fable5-viral-demos-and-techniques/">&lt;figure&gt;
&lt;video controls=&quot;&quot; muted=&quot;&quot; loop=&quot;&quot; playsinline=&quot;&quot; preload=&quot;metadata&quot; style=&quot;width:100%;border-radius:3px&quot; poster=&quot;/assets/img/posts/2026-06-11-fable5/cover.jpg&quot;&gt;
  &lt;source src=&quot;https://game.panyifeng.xyz/media/posts/2026-06-11-fable5/forest.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;figcaption&gt;Fable 5 单 prompt 生成的 photoreal three.js 森林，浏览器实时渲染（&lt;a href=&quot;https://x.com/mattshumer_/status/2064449498596757643&quot;&gt;Matt Shumer 原帖&lt;/a&gt;视频，已转存自托管）&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;blockquote&gt;
  &lt;p&gt;调研日期：2026-06-11（发布后第 2 天）。来源为公开报道 + 社区帖；Shumer 等人的原始 prompt 未公开，技术拆解部分含基于公开细节的反推，已标注。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;tldr&quot;&gt;TL;DR&lt;/h2&gt;

&lt;p&gt;Anthropic 于 2026-06-09 发布 Claude Fable 5（Mythos-class 模型加安全层后的公开版）。发布数小时内 X 被三类 demo 刷屏：&lt;strong&gt;单 prompt 出 photoreal 3D 世界&lt;/strong&gt;（three.js 浏览器实时渲染）、&lt;strong&gt;单 prompt 出可玩游戏&lt;/strong&gt;、&lt;strong&gt;多小时自主长跑完成完整工程&lt;/strong&gt;。拆开看没有魔法：素材来自真实公开数据（卫星图/DEM）+ 程序化生成，质感来自模型手写 production 级 GLSL shader，规模来自 InstancedMesh/LOD，复杂工程来自 agentic 长跑（计划→工具→自修复，最长公开案例 9.5 小时连续运行）。能力来源按 Nathan Lambert 的判断是”全栈进步、无单点突破”。主要约束是价格：$10/$50 每百万 token（输入/输出），Pro 用户跑几个任务就耗尽额度。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;一demo-清单按类别&quot;&gt;一、demo 清单（按类别）&lt;/h2&gt;

&lt;h3 id=&quot;1-3d-世界--实时渲染类多为单文件-threejs浏览器直接跑&quot;&gt;1. 3D 世界 / 实时渲染类（多为单文件 three.js，浏览器直接跑）&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Demo&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;photoreal 森林&lt;/td&gt;
      &lt;td&gt;Matt Shumer&lt;/td&gt;
      &lt;td&gt;实时浏览器渲染，”custom-built ThreeJS”；首版有性能问题，一句 “make it faster, without losing quality” 修复。原始 prompt 仅 DM 私享（社区为 gatekeeping 吵了一架）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;可漫游 Yosemite 山谷&lt;/td&gt;
      &lt;td&gt;Shlok Khemani&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;技术细节最完整的案例&lt;/strong&gt;：拉卫星影像贴地表 + NASA 真实高程数据（DEM）做地形 → 对卫星图做像素分类识别植被 → 程序化种 ~26.6 万棵树 → 给六条真实瀑布在正确崖壁位置写自定义水体 shader&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;NYC 天际线 / 城市风暴 / 波音 747 / 5000+ 物体太空模拟&lt;/td&gt;
      &lt;td&gt;Shumer 等&lt;/td&gt;
      &lt;td&gt;同一路线的变体，747 有网友部署的&lt;a href=&quot;https://huggingface.co/spaces/victor/fable-5-boeing-747&quot;&gt;在线可玩版（HF Space）&lt;/a&gt;；太空模拟另有网友版本达 10 万+ 物体（动态 LOD）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;飞机/导弹/地形/海面/港口/桥梁/舰艇建模&lt;/td&gt;
      &lt;td&gt;中文社区网友&lt;/td&gt;
      &lt;td&gt;一句话单 HTML 文件内完成（量子位首日实测汇总）&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;p&gt;注：用户在 X 上看到的”上古卷轴复刻”“被洪水淹没的哥特城市”属于这一类的衍生变体（城市风暴场景 + 单 prompt 游戏复刻的组合），未见独立技术报道；另有网友给的题目是”尽量完美复刻骑马与砍杀 3D 版，单 HTML 运行”（知乎）。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;2-单-prompt-可玩游戏类&quot;&gt;2. 单 prompt 可玩游戏类&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Minecraft 克隆&lt;/strong&gt;：单 prompt（high effort 档）~20 分钟出成品，含多 biome、昼夜循环、矿石、洞穴、背景音乐；X 上 890K 浏览。社区共识的代表作，也是质疑的焦点（见第三节）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Library of Babel&lt;/strong&gt;（Every.to vibe check）：博尔赫斯”通天塔图书馆”的可行走 3D 还原（六边形房间无限图书馆），&lt;strong&gt;3 小时自主长跑&lt;/strong&gt;构建。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;RollerCoaster Tycoon 风格游戏&lt;/strong&gt;：YouTube 创作者，约 1 小时设计+编码完成可玩版。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;自指 Snake / Breathwork Garden / 《只有一道门》复刻&lt;/strong&gt;：均为单 prompt/单次推理产物。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Slay the Spire&lt;/strong&gt;：不是”做游戏”而是”打游戏”——能稳定完成整局 run。&lt;/li&gt;
&lt;/ul&gt;

&lt;figure&gt;
&lt;video controls=&quot;&quot; muted=&quot;&quot; loop=&quot;&quot; playsinline=&quot;&quot; preload=&quot;metadata&quot; style=&quot;width:100%;border-radius:3px&quot;&gt;
  &lt;source src=&quot;https://game.panyifeng.xyz/media/posts/2026-06-11-fable5/leveldevil.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;figcaption&gt;《只有一道门》（Level Devil）复刻实录，medium effort 档单 prompt 产物（&lt;a href=&quot;https://x.com/LexnLin/status/2064450732850348518&quot;&gt;@LexnLin 原帖&lt;/a&gt;视频，转存自托管）&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;img src=&quot;/assets/img/posts/2026-06-11-fable5/minecraft-twitter-fable.jpg&quot; alt=&quot;Fable 5 在 Minecraft 里搭出的推特界面&quot; style=&quot;width:100%;border-radius:3px&quot; /&gt;
&lt;img src=&quot;/assets/img/posts/2026-06-11-fable5/minecraft-twitter-gpt55.jpg&quot; alt=&quot;GPT-5.5 同题对比&quot; style=&quot;width:100%;border-radius:3px;margin-top:6px&quot; /&gt;
&lt;figcaption&gt;同题对比「在 Minecraft 里做一个推特」：上 Fable 5（连笔记本键盘底座都搭了出来），下 GPT-5.5（&lt;a href=&quot;https://x.com/adonis_singh/status/2064415411198730265&quot;&gt;@adonis_singh 原帖&lt;/a&gt;截图）&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3 id=&quot;3-应用--os-复刻类&quot;&gt;3. 应用 / OS 复刻类&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;浏览器版 Windows OS 克隆&lt;/strong&gt;：登录屏、通知、Edge 风格浏览器、纸牌、Copilot 全套。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;一句 prompt 复刻 Photoshop&lt;/strong&gt;：修图/调色/特效/绘画，能处理色彩分离、颗粒质感（量子位实测）。&lt;/li&gt;
&lt;/ul&gt;

&lt;figure&gt;
&lt;video controls=&quot;&quot; muted=&quot;&quot; loop=&quot;&quot; playsinline=&quot;&quot; preload=&quot;metadata&quot; style=&quot;width:100%;border-radius:3px&quot;&gt;
  &lt;source src=&quot;https://game.panyifeng.xyz/media/posts/2026-06-11-fable5/pskiller.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;figcaption&gt;「我用一句 prompt 杀死了一家 2400 亿美元的公司」——浏览器版 Photoshop 复刻演示（&lt;a href=&quot;https://x.com/hewarsaber/status/2064404745452744793&quot;&gt;@hewarsaber 原帖&lt;/a&gt;视频，转存自托管）&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
&lt;img src=&quot;/assets/img/posts/2026-06-11-fable5/fable-autobio-site.jpg&quot; alt=&quot;Fable 5 给自己写的自传网站&quot; style=&quot;width:100%;border-radius:3px&quot; /&gt;
&lt;figcaption&gt;Fable 5 给自己设计/撰写/动效的「自传」网站：&quot;I learned to read in your libraries… no human hand has touched this code.&quot;（via 量子位）&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;网络抓包可视化&lt;/strong&gt;：实时 packet 渲染成高速公路车流，车型对应包类型（observability 工具创意）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;等时圈地图&lt;/strong&gt;（Ethan Mollick）：多 agent 收集航班/铁路/公路数据做交互地图，持续迭代吃反馈，token 消耗极高。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;4-工程长跑类最被低估商业上最重的一类&quot;&gt;4. 工程长跑类（最被低估、商业上最重的一类）&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Stripe：5000 万行 Ruby 代码库迁移，1 天完成&lt;/strong&gt;（人工估 2 个月+）。这是官方背书案例，也是”agentic 长跑”能力的上限展示。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Concord 研究工具&lt;/strong&gt;（Mollick）：&lt;strong&gt;9.5 小时连续自主运行&lt;/strong&gt;，产出 19 页设计文档 + 可用软件。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;micropython-wasm → CPython 升级&lt;/strong&gt;（Simon Willison 实测）：真实开源项目维护任务一次过。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;5-其他模态&quot;&gt;5. 其他模态&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Pokémon FireRed 纯视觉通关&lt;/strong&gt;：只看屏幕截图、无任何外部导航辅助，长上下文记忆较 Opus 4.8 提升 ~3×。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;CAD / 可 3D 打印模型设计&lt;/strong&gt;、太阳系模拟等科学计算类。&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;二技术实现方式拆解&quot;&gt;二、技术实现方式拆解&lt;/h2&gt;

&lt;h3 id=&quot;3d-世界类的配方已沉淀进-memory-threejs-photoreal-techniques&quot;&gt;3D 世界类的配方（已沉淀进 memory &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;threejs-photoreal-techniques&lt;/code&gt;）&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;素材 = 真实公开数据，不是美术资产&lt;/strong&gt;。卫星 tile 当地表纹理、NASA SRTM/DEM 当 heightmap、像素分类驱动程序化植被布点。零 Unity/Unreal、零模型库。”看上去像真的”是因为地形和纹理本来就是真的。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;质感 = 手写 GLSL&lt;/strong&gt;。水体反射、体积雾、大气散射、bloom 后期全部自定义 shader。这是这一代模型相对上一代最实质的解锁——以前写 shader 是车祸现场，现在能直出接近 production 级，且 2000–4000 行单文件内部自洽不失忆。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;规模 = InstancedMesh + LOD + 雾截断&lt;/strong&gt;。26.6 万树、5000+ 物体 60fps，是 three.js 标准答案，模型语料里见过无数遍。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;不全是 one-shot&lt;/strong&gt;。性能问题靠追加一轮 “make it faster, without losing quality” 单独迭代；很多”one-shot”demo 实际在 Claude Code 里跑过 截图→自查→修 的回环。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;prompt 反推要点&lt;/strong&gt;（原始 prompt 未公开）：高 effort 档（Fable 5 新增 effort 参数）+ photorealistic 措辞 + 指定真实地点（触发拉真实数据）+ 给联网/数据获取工具 + 单文件 HTML 约束。&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;游戏--应用类的配方&quot;&gt;游戏 / 应用类的配方&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;本质是&lt;strong&gt;氛围签名复刻&lt;/strong&gt;：Minecraft=体素+biome+昼夜，Windows=登录屏+通知+纸牌。训练语料里此类代码衍生物海量，单 prompt 出”看起来一样”的复制品证明的是流畅度（fluency）而非发明（invention）——这是社区最主流的质疑，成立但不影响实用价值。&lt;/li&gt;
  &lt;li&gt;长上下文 + 长输出让”一个 demo=一个几千行自洽单文件”成为可能，这在两年前会写到一半失忆。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;工程长跑类的配方&quot;&gt;工程长跑类的配方&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;agentic 端到端&lt;/strong&gt;：计划 → 工具调用 → 跑测试 → 自修复，多小时无人值守（公开最长 9.5h）。Every.to 的判断：”Fable 5 最强的形态是把整个任务交给它 own 到底”，其 Senior Engineer 内部基准 91/100（Opus 4.8 = 63，GPT-5.5 = 62）。&lt;/li&gt;
  &lt;li&gt;Stripe 迁移的意义不是”写得快”而是&lt;strong&gt;一致性在 5000 万行尺度上不崩&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;能力来源分析层&quot;&gt;能力来源（分析层）&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Nathan Lambert（Interconnects）：&lt;strong&gt;没有单点技术突破&lt;/strong&gt;（不是某个新 RL 范式或推理时扩展），是”全栈各环节同时进步”的结果；同时批评其对 AI 开发类请求的隐性安全降级不透明。&lt;/li&gt;
  &lt;li&gt;Fable 5 = Mythos 5 同底模型 + 安全分类器/过滤层；安全层在 cyber/bio 上是显式拦截，在部分领域是隐式修改。&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;三质疑与边界&quot;&gt;三、质疑与边界&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;复现 ≠ 发明&lt;/strong&gt;：one-shot Minecraft/Windows 克隆证明对海量已见模式的流畅重组，原创游戏设计能力未被这批 demo 证明。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Prompt gatekeeping&lt;/strong&gt;：最火的 Shumer 系列 prompt 不公开，可复现性存疑，部分效果可能依赖多轮筛选。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;成本是真实门槛&lt;/strong&gt;：API $10/$50 每百万 token（in/out）；$20 Pro 套餐”简单跑几个任务就用完额度”（爱范儿）；B 站 UP 主实测 4 个任务烧 ¥800。36 氪标题”普通人慎用”即此意。等时圈地图、Concord 这类长跑案例 token 消耗都”极高”。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;demo ≠ 产品&lt;/strong&gt;：9.5 小时长跑产物仍需人工 review；50M 行迁移的 review 问题被多家工程博客单独拿出来讨论（”谁来 review 一天 5000 万行”）。&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;四对自己项目clawgame的可借鉴清单&quot;&gt;四、对自己项目（~/claw/game/）的可借鉴清单&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;大场景游戏直接套 photoreal 配方：真实 DEM/卫星图 + 程序化 instancing + 手写 shader；INKLINE 的 three.js 双层渲染已在同一路线上，差的是”真实数据当素材”这一步。&lt;/li&gt;
  &lt;li&gt;性能不进首 prompt，单独一轮 “make it faster, without losing quality”。&lt;/li&gt;
  &lt;li&gt;DOM 渲染器项目（EMBERSEA/YAOYAN）的天花板结论不变：表现层换 PixiJS/three.js + shader 才能吃到这一代模型的 shader 红利（见 memory &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;feedback_dom_renderer_ceiling&lt;/code&gt;）。&lt;/li&gt;
  &lt;li&gt;浏览器内验证回环（Playwright 截图→自查→修）是把”能跑”提到”能发布”的关键，本机 webapp-testing 已具备。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;来源&quot;&gt;来源&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.anthropic.com/news/claude-fable-5-mythos-5&quot;&gt;Anthropic — Claude Fable 5 and Claude Mythos 5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://vallettasoftware.com/blog/post/claude-fable-5-review&quot;&gt;Valletta Software — What Anthropic Shipped and Why X Went Wild&lt;/a&gt;（Minecraft 克隆/Shumer/Yosemite/Windows 克隆/抓包可视化）&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://digg.com/ai/bts64g87&quot;&gt;Digg — Fable 5 real-time Three.js demos &amp;amp; Pokémon FireRed&lt;/a&gt;（forest/NYC/747/5000+ 物体/城市风暴清单、prompt DM 争议）&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://every.to/vibe-check/anthropic-mythos-our-fable-vibe-check&quot;&gt;Every.to — Vibe Check: Fable 5 Is the Best Coding Model in the World&lt;/a&gt;（Library of Babel 3h 长跑、91/100 基准）&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.interconnects.ai/p/claude-fable-5-and-new-ai-safety&quot;&gt;Interconnects (Nathan Lambert) — Claude Fable 5 and new safety fables&lt;/a&gt;（”无单点突破、全栈进步”+安全层批评）&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://simonwillison.net/2026/Jun/9/claude-fable-5/&quot;&gt;Simon Willison — Initial impressions of Claude Fable 5&lt;/a&gt;（micropython 升级实测、effort 档位）&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.qbitai.com/2026/06/433682.html&quot;&gt;量子位 — Claude Fable 5 首日实测，杀疯了&lt;/a&gt;（中文社区 demo 汇总：PS 复刻/只有一道门/单 HTML 建模）&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.qbitai.com/2026/06/433590.html&quot;&gt;量子位 — Claude Mythos 5 发布！5000 万行代码 1 天搞定&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.ifanr.com/1668542&quot;&gt;爱范儿 — 实测 Claude 史上最强模型 Fable 5，普通人慎用&lt;/a&gt;（Mollick 等时圈/Concord 9.5h、定价与额度）&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nerdschalk.com/fable-5-samples-comparison-reviews-opinions/&quot;&gt;Nerdschalk — Fable 5 Samples, Comparison, Reviews&lt;/a&gt;（RollerCoaster Tycoon/Breathwork Garden）&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=48464094&quot;&gt;Hacker News — Stripe 50M 行迁移讨论&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.theshortcut.com/p/anthropic-releases-claude-fable-5-an-ai-model-that-can-build-playable-video-games-from-a-single-prompt&quot;&gt;The Shortcut — builds playable video games from a single prompt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://techcrunch.com/2026/06/09/anthropic-released-claude-fable-5-its-most-powerful-model-publicly-days-after-warning-ai-is-getting-too-dangerous/&quot;&gt;TechCrunch — Fable 5 发布报道&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.zhihu.com/question/2047851398734394746&quot;&gt;知乎 — 如何评价 Anthropic 发布的 Claude Fable 5&lt;/a&gt;（骑马与砍杀复刻题等）&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.bilibili.com/video/BV1F7EQ6tE7i/&quot;&gt;B 站 — 怒砸 800 大洋实测 Fable 5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="fable-5"/>
    <category term="claude"/>
    <category term="three.js"/>
    <category term="ai-coding"/>
    <summary type="html">Fable 5 发布首周刷屏 demo 全景：photoreal 3D 世界、单 prompt 可玩游戏、9.5 小时工程长跑，以及它们的技术实现拆解——真实地理数据当素材、手写 GLSL、agentic 自修复。</summary>
  </entry>
  <entry>
    <title type="html">不再手动同步:用自建 Headscale + Syncthing 搭一套多机分布式互联与同步 mesh</title>
    <link href="https://jinzi.cyou/posts/2026-05-29-multi-device-mesh-headscale-syncthing/" rel="alternate" type="text/html" title="不再手动同步:用自建 Headscale + Syncthing 搭一套多机分布式互联与同步 mesh"/>
    <published>2026-05-29T04:00:00+00:00</published>
    <updated>2026-05-29T04:00:00+00:00</updated>
    <id>https://jinzi.cyou/posts/multi-device-mesh-headscale-syncthing</id>
    <content type="html" xml:base="https://jinzi.cyou/posts/2026-05-29-multi-device-mesh-headscale-syncthing/">&lt;p&gt;我有好几台机器在同时干活:公司一台台式、公司一台 Mac、家里一台、外加一台自己的云服务器。同一个工作目录在多台之间来回改,长期靠一个手写的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sync-all&lt;/code&gt; 脚本同步——但它不好用:&lt;strong&gt;它是手动的、按需跑的&lt;/strong&gt;,只要哪次忘了”先拉再改”,两边就分叉,然后就是无穷无尽的手工 merge。&lt;/p&gt;

&lt;p&gt;折腾到最后我想明白一件事:&lt;strong&gt;问题的根子不是”机器多”,而是”没有一个永远在线、永远可达的唯一真相源”。&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sync-all&lt;/code&gt; 难用,不是脚本写得烂,而是”按需手动”这个模式本身留了一个会分叉的窗口。&lt;/p&gt;

&lt;p&gt;这篇讲我怎么用 &lt;strong&gt;自建 Headscale(Tailscale 控制面)+ Syncthing&lt;/strong&gt; 把这件事一次性解决掉:两台机器再也不用想”同步”这回事,改完存盘几秒就到对面;顺带任意两台之间能直接 SSH。全程自托管、无主从、加新机器一条命令。也会老实把踩的坑和没解决的取舍单列出来。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;环境说明:文中所有域名/IP/密钥都是占位符。我的几台机器里有 WSL、macOS,云服务器在国内——所以”控制面在 GFW 后面稳不稳”是我必须考虑的硬约束,这一点很影响选型。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;一先否掉几个看起来更简单的方案&quot;&gt;一、先否掉几个”看起来更简单”的方案&lt;/h2&gt;

&lt;p&gt;在动手前我认真比过几条路,它们都不对:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;「只在一台上集中干活」&lt;/strong&gt;(两端都 SSH 进同一台)。最干净,但我每台机器有各自的角色和本地工具链,集中不现实。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;「让某个进程直接遥控家里那台,替我同步」&lt;/strong&gt;。这是最脆弱的:家用机常关机、动态 IP、藏在 NAT 后,公司网经常根本够不到它;而且它等于多引入一个写入方,是多一个冲突源,不是少。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;「老实用 git」&lt;/strong&gt;。大多数子项目本来就是 git repo,但 git 解决不了”草稿、散文件、非版本化资产”的实时同步,而且它还是要人记得 commit/pull——又回到”手动窗口”。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;真正要的是两件正交的能力:&lt;strong&gt;(1) 任意机器之间稳定可达(含远程 SSH);(2) 工作目录实时双向同步、且离线机器上线后能自动追上。&lt;/strong&gt; 这两件事分别由两层独立的 mesh 解决。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;二总体架构两层互相独立的-mesh&quot;&gt;二、总体架构:两层互相独立的 mesh&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;              云服务器(公网 IP)—— 唯一常在线的锚点
   ┌──────────────────────────────────────────────────────────┐
   │  Headscale  控制面(自建,替代 login.tailscale.com)        │ ← 连通层大脑
   │  + 内嵌 DERP 中继 + STUN(NAT 穿透)                        │
   │  Syncthing  常在线枢纽 + 介绍人(GUI 仅在 tailnet 内可达)  │ ← 同步层枢纽
   └──────────────────────────────────────────────────────────┘
        ▲ 各节点只是「出站」连一个公网 IP,与 GFW 无关
   ┌──────────────┐   ┌──────────────┐   ┌──────────────┐
   │ 公司台式      │◄─►│ 家里电脑      │◄─►│ Mac          │  每台:
   │ 100.64.0.1   │   │ 100.64.0.4   │   │ 100.64.0.3   │  tailscale 节点
   └──────────────┘   └──────────────┘   └──────────────┘  + syncthing 节点
       每台拿到稳定 100.64.x 地址;Syncthing 跑在 tailnet 上,不碰国际发现服务器
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;连通层 = Tailscale 客户端 + 自建 Headscale。&lt;/strong&gt; 每个节点加入后拿到一个固定的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;100.64.x.x&lt;/code&gt; 地址和一个 MagicDNS 名,无论在哪个网络、NAT 后面都能互相直连(打不通就走 DERP 中继兜底)。Tailscale 是真 mesh:控制面只在「建立连接」时参与,它挂了,已经建好的点对点连接照常跑。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;同步层 = Syncthing。&lt;/strong&gt; P2P、无中心。但我额外让那台常在线的云服务器当&lt;strong&gt;枢纽&lt;/strong&gt;:它持有一份同步副本,这样即使”家里和公司从不同时开机”也能收敛(各自上线时跟枢纽对齐);它还兼&lt;strong&gt;介绍人(introducer)&lt;/strong&gt;,新节点只要连上枢纽就自动认识全网其它节点。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;两层都是”加节点 = 一条命令”,这正好满足”以后随时扩机器”。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;三两个关键选型决定&quot;&gt;三、两个关键选型决定&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;为什么自建 Headscale,而不是直接用官方 Tailscale?&lt;/strong&gt;
官方 Tailscale 的控制面在境外(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;login.tailscale.com&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;controlplane.tailscale.com&lt;/code&gt;)。我的节点都在国内,控制面在 GFW 后面时通时不通,作为每天依赖的基础设施太不踏实。Headscale 是 Tailscale 控制面的开源自托管实现(单 Go 二进制 + SQLite),我把它放在自己那台&lt;strong&gt;有公网 IP 的国内云服务器&lt;/strong&gt;上,所有节点只是”出站连一个域内公网 IP”——和 GFW 彻底无关。它还能开&lt;strong&gt;内嵌 DERP 中继&lt;/strong&gt;,连中继都不必依赖官方的境外节点。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;为什么 Syncthing 要跑在 tailnet 上?&lt;/strong&gt;
Syncthing 自带全球发现 + 中继服务器,但那些也在境外、同样会被限速。既然已经有了 tailnet,我直接给每个 Syncthing 节点配上对端的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;100.64.x&lt;/code&gt; 静态地址、&lt;strong&gt;关掉全球发现和中继&lt;/strong&gt;,流量全走自己的 tailnet。又稳又不依赖任何境外基础设施。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;四搭建要点命令为示意去掉了我自己的域名ip&quot;&gt;四、搭建要点(命令为示意,去掉了我自己的域名/IP)&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1) 云服务器上的 Headscale&lt;/strong&gt;——走一个子域 + 你现有的反向代理 + ACME 证书,控制面监听本地、由反代转发(Tailscale 客户端要求 HTTPS 且需放行 WebSocket 升级):&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# /etc/headscale/config.yaml(节选)&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;server_url&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;https://hs.example.com&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;listen_addr&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;127.0.0.1:8080&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;derp&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;                 &lt;span class=&quot;c1&quot;&gt;# 内嵌 DERP,不依赖境外中继&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;region_id&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;999&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;stun_listen_addr&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;0.0.0.0:3478&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;urls&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;pi&quot;&gt;[]&lt;/span&gt;                        &lt;span class=&quot;c1&quot;&gt;# 清空官方(境外)DERP map&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;dns&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;magic_dns&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;base_domain&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;mesh.internal&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;反代关键是 WebSocket(否则控制连接 / DERP 长连接建不起来):&lt;/p&gt;

&lt;div class=&quot;language-nginx highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kn&quot;&gt;proxy_pass&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;http://127.0.0.1:8080&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kn&quot;&gt;proxy_http_version&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;.1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kn&quot;&gt;proxy_set_header&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Upgrade&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$http_upgrade&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kn&quot;&gt;proxy_set_header&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Connection&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$connection_upgrade&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;   &lt;span class=&quot;c1&quot;&gt;# map 出来的变量&lt;/span&gt;
    &lt;span class=&quot;kn&quot;&gt;proxy_read_timeout&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;86400s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;                          &lt;span class=&quot;c1&quot;&gt;# 长轮询&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;2) 节点接入&lt;/strong&gt;——装 Tailscale,用 preauth key 接到自建控制面:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl &lt;span class=&quot;nt&quot;&gt;-fsSL&lt;/span&gt; https://tailscale.com/install.sh | sh
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;tailscale up &lt;span class=&quot;nt&quot;&gt;--login-server&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;https://hs.example.com &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
     &lt;span class=&quot;nt&quot;&gt;--authkey&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;hskey-xxxxxxxx &lt;span class=&quot;nt&quot;&gt;--accept-dns&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--accept-dns=false&lt;/code&gt; 是有意的:桌面/WSL 自己管 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/resolv.conf&lt;/code&gt;,别让 Tailscale 去抢,免得搞坏本机 DNS;节点间用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;100.64.x&lt;/code&gt; 地址就够了。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) Syncthing&lt;/strong&gt;——云服务器当枢纽常驻,叶子节点各跑一个;通过 REST API 把对端设备 + 共享文件夹配好,并把监听地址绑到自己的 tailnet IP、关掉全球发现/中继。叶子节点把”枢纽”这台标成 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;introducer: true&lt;/code&gt;,新节点连上枢纽就自动学到其它节点。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4) 同步范围&lt;/strong&gt;——一份 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.stignore&lt;/code&gt; 决定同步什么。我的原则是&lt;strong&gt;只同步代码/草稿/脚本/配置,排除一切”重而可再生”的东西&lt;/strong&gt;:&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node_modules&lt;/code&gt;、虚拟环境、构建产物、缓存、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;*.mp4/*.glb&lt;/code&gt; 等重媒体、模型权重,以及 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt;(仓库走它自己的 git remote,不靠 Syncthing 同步 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt;,避免索引冲突)。这一刀下去,我的同步集从几 GB 缩到几百 MB。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;五踩过的坑这节才是干货&quot;&gt;五、踩过的坑(这节才是干货)&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;坑 1:CGNAT 网段和云厂商内网撞车。&lt;/strong&gt; Tailscale 用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;100.64.0.0/10&lt;/code&gt; 这个 CGNAT 段。某些云厂商(我遇到的是一类国内云实例)的&lt;strong&gt;内网服务&lt;/strong&gt;(apt 镜像、元数据)正好用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;100.100.x.x&lt;/code&gt;——它落在 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;100.64.0.0/10&lt;/code&gt; 里!装上 Tailscale 后,它把云内网路由给吞了,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt&lt;/code&gt; 直接超时。修法是给云内网网段加一条&lt;strong&gt;更具体的旁路路由&lt;/strong&gt;(优先级高于 /10),让它走真实网关:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ip route replace 100.100.0.0/16 via &amp;lt;真实网关&amp;gt; dev eth0
&lt;span class=&quot;c&quot;&gt;# 再用 systemd oneshot 持久化,排在 tailscaled 之后&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;坑 2:WSL 上的 Tailscale。&lt;/strong&gt; 现代 WSL2 有 systemd 和 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/dev/net/tun&lt;/code&gt;,Tailscale 能当正常服务跑。但它的 connmark 防火墙规则在 WSL 内核上会报 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unknown option &quot;--restore-mark&quot;&lt;/code&gt;(缺内核模块)。节点只是普通客户端、不做出口/子网路由的话,直接 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--netfilter-mode=off&lt;/code&gt; 让它别碰 iptables 最干净(必要时再 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iptables-legacy&lt;/code&gt;)。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;坑 3:Syncthing 的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#include&lt;/code&gt; 死锁(这个最隐蔽)。&lt;/strong&gt; 为了让忽略规则全网一致、改一处就生效,我让每个节点的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.stignore&lt;/code&gt; 只写一行 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#include .stglobalignore&lt;/code&gt;,真正的规则放在会被同步的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.stglobalignore&lt;/code&gt; 里。听起来很优雅——&lt;strong&gt;但新节点入网时还没同步到 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.stglobalignore&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#include&lt;/code&gt; 一个不存在的文件会导致忽略规则解析失败,文件夹直接卡在 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sync-waiting&lt;/code&gt; 永远不拉取&lt;/strong&gt;,而它要拉的东西里就包含那个 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.stglobalignore&lt;/code&gt;。死锁。修法:节点入网脚本里&lt;strong&gt;先内嵌写一份 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.stglobalignore&lt;/code&gt; 本地兜底&lt;/strong&gt;,再 include;之后同步过来的同名文件内容一致、不会冲突。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;坑 4:跨版本能互通,但要心里有数。&lt;/strong&gt; 我的几台分别是 Syncthing v1.18(发行版自带的旧版)和 v2.1(官方 tarball)。BEP 协议跨大版本兼容,实测 v1.18 ↔ v2.1 正常建连同步。能用,但要装新机时尽量统一版本省心。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;坑 5:第一个冲突,居然是忽略文件自己。&lt;/strong&gt; 全网合并跑完,真实工作文件 0 冲突,唯一一个 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.sync-conflict&lt;/code&gt; 是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.stglobalignore&lt;/code&gt;——因为我和”另一台上的我”几乎同时改了它。这反而是个好示范:冲突时 Syncthing &lt;strong&gt;不覆盖&lt;/strong&gt;,把另一版留成带时间戳的副本,让你手动并。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;六性能与冲突语义撑不撑得住频繁改&quot;&gt;六、性能与冲突语义:撑不撑得住频繁改?&lt;/h2&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;:Syncthing 走文件系统事件监听(inotify/FSEvents)+ &lt;strong&gt;~10 秒防抖&lt;/strong&gt;,连续保存会攒一起发,不是逐键。再加一个低频全量扫描兜底。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;增量只传变化的块&lt;/strong&gt;(block 级去重):改一个大文件只传变动的那几 KB,不重传整文件。&lt;/li&gt;
  &lt;li&gt;我这套(约六千文件 / 几百 MB 代码+文档)是 Syncthing 的舒适区——它能扛十万级文件、几百 GB。空闲内存几十 MB,只在扫描/算 hash 时短暂吃 CPU。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;真正撑不住的是&lt;/strong&gt;:海量碎写的生成目录(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node_modules&lt;/code&gt;/构建/缓存)、正在写的数据库 / SQLite WAL / 实时日志。这些务必在 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.stignore&lt;/code&gt; 里排掉,否则它会疯狂 rescan + 算 hash + 制造一堆版本。&lt;/li&gt;
&lt;/ul&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 class=&quot;language-plaintext highlighter-rouge&quot;&gt;名字.sync-conflict-日期-时间-设备.后缀&lt;/code&gt;。&lt;strong&gt;两份都在,不覆盖、不丢。&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;冲突副本也会同步到所有节点,你在任意机器都能处理;每文件默认最多留 10 个副本。&lt;/li&gt;
  &lt;li&gt;Syncthing &lt;strong&gt;不做内容三方合并&lt;/strong&gt;(不像 git)。代码场景最顺的解法就是用 git:&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.sync-conflict&lt;/code&gt; 文件就是另一版本,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diff&lt;/code&gt; 一下挑/合,然后删掉它。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;删除会传播&lt;/strong&gt;(一台删,别处跟着删)。所以我额外在常在线的枢纽上开了 &lt;strong&gt;staggered 版本控制(留 30 天)&lt;/strong&gt;:任何文件被改写/删除前,旧版进枢纽的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.stversions&lt;/code&gt;,30 天内可取回——等于白送一个带时间机器的备份节点。叶子节点不开,省空间。&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;七安全模型一台被黑会不会全套连根挂&quot;&gt;七、安全模型:一台被黑会不会全套连根挂?&lt;/h2&gt;

&lt;p&gt;这是我自己最在意的问题,老实说结论:&lt;strong&gt;会有影响,但范围有限,而且能进一步收窄。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;真实暴露面&lt;/strong&gt;:云服务器只对公网开 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;443/80&lt;/code&gt;(反代,Headscale 控制面在其后、要合法 preauth key 才能进网)、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;22&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3478&lt;/code&gt;(STUN 反射,低危)。&lt;strong&gt;Syncthing 的数据口和管理口只绑在 tailnet 地址上,公网根本没监听&lt;/strong&gt;——同步内容不在互联网上。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;真实风险&lt;/strong&gt;:病根是”共享凭据”(preauth key + 枢纽 API key)。最坏情况下,某台叶子被黑 → 拿到这些凭据 → 能加流氓节点、能改/删同步目录并扩散。但它&lt;strong&gt;不会&lt;/strong&gt;自动变成”每台机器 root”:各节点的 WireGuard 私钥只在本机,控制面被黑也解不开已建立的点对点流量;拿不到各机的 SSH 凭据也登不进别的节点。也就是说 blast radius 是”那个同步目录 + 重新拉个节点进来”,不是你整个数字资产。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;于是我做了几层收窄&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;preauth key 短期化&lt;/strong&gt;:加机时才发、有效期几十小时,加完立刻作废。不留长效可复用 key。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;叶子不留长效凭据&lt;/strong&gt;:入网脚本注册成功后,自动把本地凭据文件里的一次性密钥&lt;strong&gt;抹空&lt;/strong&gt;。某台叶子失窃也拿不到入网权/枢纽控制权。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Headscale ACL&lt;/strong&gt;:节点间只放行必要端口(SSH + Syncthing + 枢纽注册),其余拒,限制被黑节点的横向移动。&lt;/li&gt;
  &lt;li&gt;枢纽 API key 可随时轮换。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;比起原来”明文 SSH key 到处放 + 手动 rsync”的老办法,这套在堵掉共享凭据后是&lt;strong&gt;明显更安全&lt;/strong&gt;的,不会更差。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;八加一台新机器一条命令&quot;&gt;八、加一台新机器:一条命令&lt;/h2&gt;

&lt;p&gt;我把上面所有步骤(装 Tailscale → 入网 → 装 Syncthing → 绑 tailnet/关国际发现/加枢纽/写忽略规则 → 自助注册到枢纽 → 抹掉一次性密钥)封成一个 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mesh-join&lt;/code&gt; 脚本,Linux/WSL/macOS 通吃、幂等。新机器:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# 从已入网节点取脚本 + 一次性凭据,然后:&lt;/span&gt;
bash mesh-join &amp;lt;节点名&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;实测在一台 macOS 上一键跑通(它还同时跑着别的 TUN 代理,共存无碍),并通过”介绍人”自动和其它节点直连——验证了”分布式 + 随时加节点”这个目标。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;九还差什么--取舍老实说&quot;&gt;九、还差什么 / 取舍(老实说)&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;枢纽是单点真相&lt;/strong&gt;:它挂了,新建连接和”非同时在线的收敛”会受影响(已建的 P2P 同步不受影响),且它承担中继流量。对个人规模够用;真要更稳得再加一个枢纽/中继。版本回收让”枢纽挂了丢数据”的风险可控。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;DERP 走自建单点&lt;/strong&gt;:两台都在 NAT 后、打不通直连时,中继流量全过那台云服务器,受它带宽限。同 LAN 的两台会直连,不吃这个亏。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;ACL 与”自由互联”的张力&lt;/strong&gt;:我收紧了节点间端口,代价是想临时访问某台上的别的服务(比如本地 dev server)得先开端口。安全和便利的常规取舍。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt; 不同步&lt;/strong&gt;:换来的是稳定(不撞 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git&lt;/code&gt; 索引冲突),代价是仓库状态得靠各自的 git remote 收敛——对本来就有远端的项目无所谓。&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;收尾&quot;&gt;收尾&lt;/h2&gt;

&lt;p&gt;这套方案的核心判断是:&lt;strong&gt;多机同步的难点不在”找个同步工具”,而在”先有一个永远在线、永远可达、且自托管不受制于人的网络底座”。&lt;/strong&gt; 先用自建 Headscale 把”任意机器互相可达”这件事坐实,Syncthing 这种 P2P 工具才能稳稳地跑在上面;再用一个常在线的枢纽兼介绍人,把”非同时在线”和”随时加节点”两个现实问题一起解决。&lt;/p&gt;

&lt;p&gt;搭完之后最大的感受是:&lt;strong&gt;“同步”这个动作从我的脑子里消失了&lt;/strong&gt;——我不再”做同步”,我只是在不同机器上改文件,它们自己会一致。这正是基础设施该有的样子:你感觉不到它,直到你想加第五台机器,发现也只是一条命令。&lt;/p&gt;</content>
    <category term="Tailscale"/>
    <category term="Headscale"/>
    <category term="Syncthing"/>
    <category term="自托管"/>
    <category term="多设备同步"/>
    <category term="mesh网络"/>
    <category term="WSL"/>
    <summary type="html">多台机器共享一个工作目录、手动同步老分叉冲突?用自建 Headscale(Tailscale 控制面)+ Syncthing 搭两层独立 mesh:连通层让任意机器互相可达并能 SSH,同步层存盘即双向同步、离线机器上线自动追上。含完整架构、选型理由(为何自建控制面)、五个踩坑(CGNAT 网段撞车 / WSL / #include 死锁等)、性能与冲突语义、安全模型与取舍。</summary>
  </entry>
  <entry>
    <title type="html">用 Claude Code 搭 PM/Worker/Auditor 三 agent 自动开发流水线：Issue → PR → merge 全闭环</title>
    <link href="https://jinzi.cyou/posts/2026-05-25-claude-code-pm-worker-auditor-pipeline/" rel="alternate" type="text/html" title="用 Claude Code 搭 PM/Worker/Auditor 三 agent 自动开发流水线：Issue → PR → merge 全闭环"/>
    <published>2026-05-25T04:00:00+00:00</published>
    <updated>2026-05-25T04:00:00+00:00</updated>
    <id>https://jinzi.cyou/posts/claude-code-pm-worker-auditor-pipeline</id>
    <content type="html" xml:base="https://jinzi.cyou/posts/2026-05-25-claude-code-pm-worker-auditor-pipeline/">&lt;p&gt;几周前我写过一篇偏「方法论」的长文，讲怎么把 AI 从单兵 Copilot 升级成 PM/Worker/Auditor 三层金字塔（那篇是 6 周路线图 + canary + 度量体系的宏图）。这篇不一样：宏图我没全做，但&lt;strong&gt;最小闭环已经在真实的 bug 上跑通并合并了&lt;/strong&gt;。所以这篇只讲一件事——那条最小闭环到底是怎么用 Claude Code 搭出来的、每一行设计为什么这么写、踩了哪些坑，以及它现在&lt;strong&gt;还差什么&lt;/strong&gt;（我会诚实地把没做完的部分单列一节，而不是吹成全自动生产系统）。&lt;/p&gt;

&lt;p&gt;代码很短，短到可以逐段贴出来读。这恰恰是我想传达的核心判断：&lt;strong&gt;多 agent 自动开发流水线的难点不在编排框架，在职责分离的拓扑、状态外置的纪律、和确定性的安全闸——这三样都可以用文件系统 + GitHub + 几个 shell 脚本表达，不需要重型基础设施。&lt;/strong&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;0-它现在能做什么先放真实证据&quot;&gt;0. 它现在能做什么（先放真实证据）&lt;/h2&gt;

&lt;p&gt;不绕弯子，先放跑通的那一单。我在自己的一个前端项目 cue（一个影视配乐教学互动站）里开了一个 P3 的布局 bug，打上 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-eligible&lt;/code&gt; 标，然后没再碰键盘，直到最后那一下「批准合并」：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Issue#1 ──worker(Opus,125s)──▶ PR#2 ──auditor(Sonnet,90s)──▶ ✅LGTM ──pyf 批准──▶ merged
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;runs.jsonl&lt;/code&gt; 执行账本里这一单的真实记录（原文照搬，没修饰）：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-jsonl&quot;&gt;{&quot;ts&quot;: &quot;2026-05-23T00:48:30.477948+00:00&quot;, &quot;role&quot;: &quot;worker&quot;, &quot;task&quot;: &quot;fix pyf-labrary/cue#1 (cue)&quot;, &quot;issue&quot;: 1, &quot;duration_s&quot;: 125.0, &quot;result&quot;: &quot;ok&quot;}
{&quot;ts&quot;: &quot;2026-05-23T00:56:27.466030+00:00&quot;, &quot;role&quot;: &quot;auditor&quot;, &quot;task&quot;: &quot;review pyf-labrary/cue PR#2 (cue)&quot;, &quot;issue&quot;: 1, &quot;duration_s&quot;: 90.0, &quot;result&quot;: &quot;ok&quot;}
{&quot;ts&quot;: &quot;2026-05-23T12:10:24.551876+00:00&quot;, &quot;role&quot;: &quot;pm&quot;, &quot;task&quot;: &quot;triage pyf-labrary/cue#1: already resolved — PR#2 merged, issue CLOSED/COMPLETED; no re-dispatch (would duplicate)&quot;, &quot;issue&quot;: 1, &quot;result&quot;: &quot;ok&quot;}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;这几行后面会逐字段拆。这里先注意最后那行 PM 的记录：它是我&lt;strong&gt;故意在 Issue 已经合并关闭之后&lt;/strong&gt;又对它跑了一次 PM 分诊——PM 没有重复派工，而是核对了 GitHub 和账本两个事实源，判断「已解决、再派会重复」，直接 no-op 退出。这是整套设计里我最在意的一个性质：&lt;strong&gt;幂等&lt;/strong&gt;——下一节会讲为什么它是无人值守的前提。&lt;/p&gt;

&lt;p&gt;Worker 在那次跑里写出来的 PR，根因分析是这样的（节选自真实 PR body，不是我事后补的）：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;根容器 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;relative isolate&lt;/code&gt; 建立了一个层叠上下文。hero 背景图 div 是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;absolute … z-0&lt;/code&gt;（带显式 z-index 的定位元素），而下方带 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;border-t&lt;/code&gt; 的「情绪详情」section 是无定位、无 z-index 的普通流块。按 CSS 绘制顺序，&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;z-index:0&lt;/code&gt; 的定位元素绘制在普通流块之上……修复：给该 section 加 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;relative z-10&lt;/code&gt;，与 HERO 同层。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;一个真实的 CSS 层叠上下文 bug，被一个 headless agent 定位到根因、给出最小修复、跑了 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npm run build&lt;/code&gt;、开了 PR、写清验收标准——全程我没看一眼代码，直到 Auditor 评论 LGTM 后我点了合并。这就是这条流水线当前的能力边界。下面讲它怎么搭的。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-为什么是三个-agent而不是一个更强的-agent&quot;&gt;1. 为什么是「三个 agent」而不是「一个更强的 agent」&lt;/h2&gt;

&lt;p&gt;这点上一篇讲过心法，这里只补一句落到实现的判断：&lt;strong&gt;职责分离（Separation of Duties）不是 prompt 能模拟的，必须是结构保证。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;让同一个 agent loop 既写代码、又 review 自己写的代码、又决定要不要合并，本质上是让它自己制衡自己——再强的模型也做不到，因为它没有「另一个视角」，它只有自己刚才那条推理链的延续。会计和信息安全里把这叫 SoD：经手钱的人不能同时是审账的人。放到 agent 流水线里就是：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;PM&lt;/strong&gt;：拆解、分诊、派工、验收编排。&lt;strong&gt;不碰代码&lt;/strong&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Worker&lt;/strong&gt;：在隔离的分支里写码、跑测试、开 PR。&lt;strong&gt;只能动自己那条 feature 分支&lt;/strong&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Auditor&lt;/strong&gt;：审 diff + 安全扫，结论评论回 PR。&lt;strong&gt;结构上不持写权&lt;/strong&gt;——它根本没有 Edit/Write 工具，想改也改不了。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;人（我）&lt;/strong&gt;：只做最后那一下合并审批，以及红线 ack。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;关键在最后两条的「结构上」。我不是在 Auditor 的 prompt 里写「请你不要改代码」（那是软约束，模型可能不遵守、可能幻觉、可能被任务诱导绕过），而是在&lt;strong&gt;启动它的命令行里就没给它 Edit/Write 工具&lt;/strong&gt;。这是确定性的：&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# Auditor 的工具白名单——注意没有 Edit/Write，从机制上保证它改不了代码&lt;/span&gt;
claude &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$prompt&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--append-system-prompt&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; ~/army/roles/auditor.md&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--permission-mode&lt;/span&gt; default &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--model&lt;/span&gt; sonnet &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--allowedTools&lt;/span&gt; Bash Read Grep Glob
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;对比 Worker 的启动命令，差别一目了然：&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# Worker——给了 Edit/Write，且用 acceptEdits 模式让它能连续改文件不卡 ack&lt;/span&gt;
claude &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$prompt&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--append-system-prompt&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; ~/army/roles/worker.md&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--permission-mode&lt;/span&gt; acceptEdits &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--model&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$model&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--allowedTools&lt;/span&gt; Bash Edit Write Read Grep Glob
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;PM 同理，白名单也只有 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bash Read Grep Glob&lt;/code&gt;——它能调 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh&lt;/code&gt; 命令操作 Issue、能读项目代码做分诊判断，但&lt;strong&gt;不能直接改业务代码&lt;/strong&gt;。三个角色的写权限差异，全部落在 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--allowedTools&lt;/code&gt; 这一行上，而不是 prompt 里的客套话。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;工程判断：&lt;strong&gt;能用白名单表达的约束，就不要用 prompt 表达。&lt;/strong&gt; 白名单是 Claude Code 给你的确定性闸门，prompt 是概率性请求。安全相关的东西，永远优先选确定性的那个。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;模型分层也在这三条命令里：PM = Opus（判断要准），Worker 默认 Opus（写码质量优先，琐碎活降 Sonnet），Auditor = Sonnet（review 够用，巡检/日报可降 Haiku）。底座是 Claude Code 登录 Claude Max 订阅跑，所有 headless 进程挂同一份订阅 auth，&lt;strong&gt;边际美元成本约等于零&lt;/strong&gt;——这是当初选 Claude Code 而不是只吃 BYOK 的运行时当底座的决定性理由（详见项目里的 ADR-001）。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-架构三段触发--一份注册表没有常驻框架&quot;&gt;2. 架构：三段触发 + 一份注册表，没有常驻框架&lt;/h2&gt;

&lt;p&gt;整套东西的物理结构异常简单。所有「运行时之家」在一个目录 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/army/&lt;/code&gt;：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;~/army/
├── CLAUDE.md            组织宪法（PM 运行于此时自动加载）
├── roles/
│   ├── pm.md            PM 角色手册
│   ├── worker.md        Worker 角色手册
│   └── auditor.md       Auditor 角色手册
├── projects.yaml        项目注册表：project → 路径/repo/部门/worker 画像/测试
├── bin/
│   ├── army-dispatch    poller：扫 auto-eligible Issue → 唤 PM（默认 DRY）
│   ├── army-run-pm      唤 PM 分诊 + 派工某 Issue
│   ├── army-run-worker  建 worktree + 起 Worker 修 + 开 PR + 记账
│   ├── army-run-auditor 起 Auditor 只读审 PR + 评论
│   ├── army-ledger      写一行 JSON 到 runs.jsonl
│   ├── army-guard       总开关：PAUSE 时让任务自退
│   ├── army-watchdog    出口探活（curl api.anthropic.com）
│   └── pm               本地直连：交互对话 PM（同一角色，另一道门）
├── runs.jsonl           执行账本（事实源之一）
└── worktrees/&amp;lt;proj&amp;gt;/    Worker 的隔离工作区
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bin/&lt;/code&gt; 下所有脚本加起来 &lt;strong&gt;305 行&lt;/strong&gt;（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wc -l&lt;/code&gt; 实测）。没有 Airflow、没有 Celery/RabbitMQ、没有自建状态机引擎、没有数据库。&lt;/p&gt;

&lt;p&gt;它的运行模型是&lt;strong&gt;事件式 + 状态外置&lt;/strong&gt;：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────┐
│  事实源（状态全在这里，不在任何进程的内存里）                  │
│                                                               │
│   GitHub Issues + Projects     ←── 任务/状态（label 路由）    │
│   GitHub PR                    ←── 代码评审载体              │
│   ~/army/projects.yaml         ←── 项目注册表（路径/repo/测试）│
│   ~/army/runs.jsonl            ←── 执行账本                  │
│   ~/army/pyf-docs/             ←── PRD/决策/报告知识库        │
└───────────────────────────┬─────────────────────────────────┘
                            │  每次唤起都从这里&quot;水合&quot;
        ┌───────────────────┼───────────────────┐
        ▼                   ▼                   ▼
   army-run-pm        army-run-worker     army-run-auditor
   (cwd=~/army,        (cwd=worktree,      (cwd=项目目录,
    Opus, 只读)         Opus, 可写自分支)    Sonnet, 只读)
        │                   │                   │
        └─ 干完即弃 ────────┴───────────────────┘
           （没有常驻 agent；进程跑完就没了，状态早写回事实源）
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;注意这里&lt;strong&gt;没有常驻的 agent 进程&lt;/strong&gt;。PM、Worker、Auditor 都是「唤起 → 从文件/GitHub 把这次需要的状态读进来（水合）→ 干活 → 把结果写回事实源 → 进程退出」。它们之间不靠共享内存、不靠消息传递、不靠长连接对话来协作——它们靠的是&lt;strong&gt;同一份外置事实源&lt;/strong&gt;。Worker 开了 PR，这个事实写在 GitHub 上；Auditor 下次被唤起时去 GitHub 读到这个 PR，就知道该审什么。中间没有任何「PM 把消息发给 Worker」的环节。&lt;/p&gt;

&lt;p&gt;这是从内容自动化项目（tv / bodhi 短剧流水线）里沿用过来的纪律：&lt;strong&gt;记忆在文件里，不在聊天历史里。&lt;/strong&gt; 它带来三个直接好处，下一节展开。&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;projects.yaml&lt;/code&gt; 是把任务路由到正确工作环境的注册表。每个 project 登记它的路径、repo、worker 画像（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;code&lt;/code&gt; 走 PR-to-merge / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;media&lt;/code&gt; 走产物落盘 / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;research&lt;/code&gt; 走文件级改）和测试命令：&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;projects&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;cue&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;department&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;software&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;worker_type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;code&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;~/claw/apps/cue&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;repo&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;pyf-labrary/cue&lt;/span&gt;          &lt;span class=&quot;c1&quot;&gt;# push 即 GH Actions 部署&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;npm&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;test&quot;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;worktree_base&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;~/army/worktrees/cue&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;bywork&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;department&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;quant&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;worker_type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;research&lt;/span&gt;          &lt;span class=&quot;c1&quot;&gt;# 非 git repo → 无 PR 流，走文件级 + ledger&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;~/bywork&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;repo&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;null&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;派活的时候，「切项目」就是「换 Worker 的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--cwd&lt;/code&gt;」——而不是某个全局锁。Worker 一旦 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt; 进项目目录，Claude Code 会自动加载那个项目自己的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CLAUDE.md&lt;/code&gt;，于是它立刻拿到该项目的工具链、约定、红线。一份注册表 + cwd 切换，就把「军团能干多少种活」做成了可插拔的——加一个部门 = 在 yaml 里加一行 + 给那个项目写好 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CLAUDE.md&lt;/code&gt;。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-状态机--账本无状态可恢复幂等&quot;&gt;3. 状态机 + 账本：无状态、可恢复、幂等&lt;/h2&gt;

&lt;p&gt;我的宿主是一台 WSL，它会关机、会被 Windows 重启、网络会断。任何依赖「进程一直活着、内存里记着进度」的设计在这种环境下都会碎。所以整套流水线的第一性原理是：&lt;strong&gt;任何一个进程随时可以死，重来一遍不出错。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;实现它只需要两条规矩：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;规矩一：状态在 GitHub / 文件，不在内存。&lt;/strong&gt; 任务状态机的单一事实源是 GitHub Projects 的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;status&lt;/code&gt; 字段，配合 label 路由（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-eligible&lt;/code&gt; 表示军团可接、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;army/triaged&lt;/code&gt; 表示 PM 已分诊、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;project:&amp;lt;name&amp;gt;&lt;/code&gt; 指路由）。状态机长这样：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;        pyf 开 Issue（打 auto-eligible 标）
                  │
                  ▼
              triage ──────────┐  PM 读 + 判断接不接
       接 + 拆解 │              │ 不接/缺信息
                  ▼              ▼
              ready          blocked（评论说明原因，等 pyf 输入）
       PM 派工   │
                  ▼
           in-progress ───┐  Worker：改码/测/开 PR + 记账
        worker 失败 3×    │
                  ▼        │
              review ◀─────┘  Auditor：审 diff + 安全扫
       不过 → 评论 + 回 in-progress（worker 修）
       过   │
                  ▼
        awaiting-approval     推审批给 pyf
       pyf 批准 │
                  ▼
               done           合并 PR + 关 Issue（Closes #N 自动关）
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;进程重启后，dispatcher 不靠记忆重建队列，而是重新 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh issue list&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh pr list&lt;/code&gt; + 读 Project status，把世界重新拼出来。session-id 映射丢了也无害——下次唤起重新水合即可。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;规矩二：每个动作执行前先查现态，做成幂等。&lt;/strong&gt; 这就是第 0 节那个「PM 对已合并的 Issue#1 no-op」的来历。PM 被唤起处理一个 Issue，第一件事是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh issue view&lt;/code&gt; 看它现在什么状态；如果已经有开放/已合并的 PR，就不重复派工。Worker 同理：如果该 Issue 已经有开放 PR 了，就不重复开。&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;briefings&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reports&lt;/code&gt; 的幂等键是「日期 + 类型」，存在即更新而非新建。&lt;/p&gt;

&lt;p&gt;账本是这套机制的可观测面。每个角色干完都调 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;army-ledger&lt;/code&gt; 追加一行 JSON 到 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;runs.jsonl&lt;/code&gt;。脚本本身只有几十行，核心是这段 Python：&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;rec&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;ts&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;datetime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;datetime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;datetime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;timezone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;utc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;isoformat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
       &lt;span class=&quot;s&quot;&gt;&quot;role&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;role&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;task&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;task&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;issue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;rec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;issue&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;issue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;issue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;isdigit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;issue&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;duration&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;duration_s&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;duration&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;files&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;rec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;files_touched&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;files&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;n&quot;&gt;rec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;result&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ledger&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;fh&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;fh&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dumps&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ensure_ascii&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;为什么是 append-only 的 JSONL 而不是数据库？因为它&lt;strong&gt;跨运行时、可 grep/diff、永久留存、零依赖&lt;/strong&gt;。换底座、换模型，账本格式不变，历史可续。我要看的「军团整体健康、token 花在哪、各角色耗时」是跨工具聚合的，单厂 dashboard 给不了。回头看第 0 节那三行账本，字段就很清楚了：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-jsonl&quot;&gt;{... &quot;role&quot;: &quot;worker&quot;,  &quot;issue&quot;: 1, &quot;duration_s&quot;: 125.0, &quot;result&quot;: &quot;ok&quot;}   ← 写码 125 秒
{... &quot;role&quot;: &quot;auditor&quot;, &quot;issue&quot;: 1, &quot;duration_s&quot;: 90.0,  &quot;result&quot;: &quot;ok&quot;}   ← 审码 90 秒
{... &quot;role&quot;: &quot;pm&quot;, &quot;task&quot;: &quot;...already resolved...no re-dispatch...&quot;, &quot;issue&quot;: 1, &quot;result&quot;: &quot;ok&quot;}  ← 幂等 no-op
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;role&lt;/code&gt; + &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;issue&lt;/code&gt; 让你能把一单的全生命周期串起来，&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;duration_s&lt;/code&gt; 是真实耗时（不是估的），&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;result&lt;/code&gt; 是 ok/fail。这就是这条流水线的「飞行记录仪」。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-一次派工的完整链路把脚本读一遍&quot;&gt;4. 一次派工的完整链路：把脚本读一遍&lt;/h2&gt;

&lt;p&gt;现在把第 0 节那条闭环用代码走一遍。三个脚本，每个都短。&lt;/p&gt;

&lt;h3 id=&quot;41-pm-分诊--派工army-run-pm&quot;&gt;4.1 PM 分诊 + 派工（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;army-run-pm&lt;/code&gt;）&lt;/h3&gt;

&lt;p&gt;PM 被唤起后干的事，全写在注入给它的 prompt 里：&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;prompt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;你是 PM，处理 &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$repo&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; 的 Issue #&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$issue&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;（项目 &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$proj&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;）。
1) gh issue view &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$issue&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; --repo &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$repo&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; 读它。
2) 分诊：军团能否接、是否清晰可执行。不接/信息不足 → gh issue comment 说明原因，不派工，结束。
3) 接 → gh issue edit &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$issue&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; --add-label army/triaged，再派 worker：
   ~/army/bin/army-run-worker &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$proj&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$issue&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$wmodel&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;（建 worktree + 起 worker + 开 PR）。
4) 报告 worker 开的 PR 号 + 一句结论；记 ledger。
铁律：不亲自改代码、不合并 PR（合并是 pyf 审批）。Auditor 由 dispatcher 另行触发，你不用管。&quot;&lt;/span&gt;

&lt;span class=&quot;nv&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; +%s&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; ~/army
claude &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$prompt&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--append-system-prompt&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; ~/army/roles/pm.md&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--permission-mode&lt;/span&gt; default &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--model&lt;/span&gt; opus &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--allowedTools&lt;/span&gt; Bash Read Grep Glob
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;几个设计点：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd ~/army&lt;/code&gt;&lt;/strong&gt; 是有意的——PM 运行在控制面之家，Claude Code 自动加载这里的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CLAUDE.md&lt;/code&gt;（组织宪法：服务谁、事实源、红线、工作路径铁律）。Worker/Auditor 运行在别处，拿不到这份，所以靠 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--append-system-prompt&lt;/code&gt; 注入角色手册。这是「靠 cwd 拿身份」和「靠注入拿身份」两种手段的分工。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PM 派工是直接调下一个脚本&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;army-run-worker&lt;/code&gt;，不是「发消息给 Worker」。链式调用，进程级编排，没有队列中间件。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;「分诊」是真判断&lt;/strong&gt;：PM 会判定 Issue 信息够不够、军团接不接得了。接不了就 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh issue comment&lt;/code&gt; 说明原因、打住，不硬派。这是把「PM 决策准确率」做成可度量的地方（验收目标是一周 3-5 单、准确率 &amp;gt;80%）。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;42-workerworktree-物理隔离--改--测--开-prarmy-run-worker&quot;&gt;4.2 Worker：worktree 物理隔离 + 改 + 测 + 开 PR（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;army-run-worker&lt;/code&gt;）&lt;/h3&gt;

&lt;p&gt;Worker 脚本最有意思的是 &lt;strong&gt;git worktree&lt;/strong&gt; 那一段——它是「多 Worker 并行不打架」的物理基础：&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;branch&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;army/issue-&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$issue&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;wt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/army/worktrees/&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$proj&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/issue-&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$issue&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;

git &lt;span class=&quot;nt&quot;&gt;-C&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$path&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; fetch origin &lt;span class=&quot;nt&quot;&gt;--quiet&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;[[&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$wt&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; git &lt;span class=&quot;nt&quot;&gt;-C&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$path&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; worktree add &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$wt&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-b&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$branch&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; origin/main 2&amp;gt;/dev/null &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; git &lt;span class=&quot;nt&quot;&gt;-C&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$path&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; worktree add &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$wt&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-b&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$branch&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;每个 Worker 在 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/army/worktrees/&amp;lt;proj&amp;gt;/issue-N&lt;/code&gt; 下有一份&lt;strong&gt;独立的工作目录 + 独立的分支&lt;/strong&gt;，都基于最新的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;origin/main&lt;/code&gt; 拉出来。两个 Worker 同时改同一个 repo 的不同 Issue，物理上在两个目录、两条分支，互不污染对方的工作区。这比「同一个 checkout 来回切分支」干净得多——切分支会让正在跑的两个 agent 互相踩脚。&lt;/p&gt;

&lt;p&gt;然后起 Worker，跑完记账：&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$wt&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
claude &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$prompt&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--append-system-prompt&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; ~/army/roles/worker.md&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--permission-mode&lt;/span&gt; acceptEdits &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--model&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$model&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--allowedTools&lt;/span&gt; Bash Edit Write Read Grep Glob
&lt;span class=&quot;nv&quot;&gt;rc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$?&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;dur&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$((&lt;/span&gt; &lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; +%s&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; start &lt;span class=&quot;k&quot;&gt;))&lt;/span&gt;
~/army/bin/army-ledger &lt;span class=&quot;nt&quot;&gt;--role&lt;/span&gt; worker &lt;span class=&quot;nt&quot;&gt;--issue&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$issue&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--duration&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$dur&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;--result&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[[&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$rc&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-eq&lt;/span&gt; 0 &lt;span class=&quot;o&quot;&gt;]]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;echo &lt;/span&gt;ok &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;echo &lt;/span&gt;fail&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--task&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;fix &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$repo&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$issue&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; (&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$proj&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;)&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Worker 的 prompt 里钉死了一条红线：&lt;strong&gt;绝不 push 到 main/master，只在本分支开 PR&lt;/strong&gt;，PR body 写 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Closes #N&lt;/code&gt;（合并即自动关 Issue，这是状态机里「done」那一步的自动化）。&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;acceptEdits&lt;/code&gt; 模式让它能连续改文件而不在每次编辑卡一次人工 ack——因为它在隔离 worktree 里，且最终产物要过 PR 门 + Auditor + 人审三道关，让它在沙盒里自由改是安全的。&lt;/p&gt;

&lt;h3 id=&quot;43-auditor只读-review且改不了代码army-run-auditor&quot;&gt;4.3 Auditor：只读 review，且改不了代码（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;army-run-auditor&lt;/code&gt;）&lt;/h3&gt;

&lt;p&gt;Auditor 的核心已经在第 1 节讲过——白名单没有 Edit/Write。它的 prompt 里还藏了一个真实踩过的坑：&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;prompt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;审查 PR #&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$pr&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;（仓 &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$repo&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;）。
1) gh pr view + gh pr diff 看改动，对照它要修的问题。
2) 审：修复是否正确、是否最小化、有无副作用/回归、安全（无注入/泄密/越权/误删）。
3) 结论用 gh pr comment 写回（用 comment，不要 review --approve，
   因作者同账号会被 GitHub 拒）：通过写「LGTM」+ 理由；有问题写「⚠️」+ 逐条列出。
SoD 铁律：你只读——不改任何代码、不 merge PR（合并是 pyf 的审批）。&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;那个坑是：当前 Worker 和 Auditor 用的是&lt;strong&gt;同一个 GitHub bot 账号&lt;/strong&gt;，GitHub 不允许 PR 作者 approve 自己的 PR。所以 Auditor 走的是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh pr comment&lt;/code&gt; 写结论，而不是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh pr review --approve&lt;/code&gt;。这是「身份分离没做到底」留下的一个真实约束，我把它记在了技术债清单里（见第 6 节）——要彻底分权，得给 Auditor 单开一个 bot 账号。&lt;/p&gt;

&lt;p&gt;注意 Auditor &lt;strong&gt;不合并 PR&lt;/strong&gt;。即使它评了 LGTM，合并这一下永远是我（人）来点。这是流水线里唯一一个永远保留的人工闸——也是「awaiting-approval → done」那一步。整条流水线我把人工干预收敛到了这一个点上。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;5-安全硬约束--软约束&quot;&gt;5. 安全：硬约束 &amp;gt; 软约束&lt;/h2&gt;

&lt;p&gt;这条流水线敢「放手让 agent 自己改代码、自己开 PR」，前提是有几道闸拦住它干蠢事。我把安全分成三个层次，&lt;strong&gt;确定性的优先级永远高于概率性的&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第一层：工具白名单（确定性，已落地）。&lt;/strong&gt; 前面讲过——Auditor/PM 没有 Edit/Write，结构上改不了代码。这是数学上拦得住的。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第二层：总开关（确定性，已落地）。&lt;/strong&gt; 每个脚本第一行都是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/army/bin/army-guard || exit 0&lt;/code&gt;。guard 读 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.army-state&lt;/code&gt;，是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PAUSE&lt;/code&gt; 就让调用方自己 skip。一条命令停全军：&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo &lt;/span&gt;PAUSE &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; ~/.army-state    &lt;span class=&quot;c&quot;&gt;# 紧急停&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;echo &lt;/span&gt;RUN   &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; ~/.army-state    &lt;span class=&quot;c&quot;&gt;# 恢复（或删掉文件）&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;配套有一个 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;army-watchdog&lt;/code&gt;，curl 探 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;api.anthropic.com&lt;/code&gt;，探不到（出口代理挂了）就记日志退 1。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第三层：红线规则（规划中，目前靠软约束 + 人审兜底）。&lt;/strong&gt; 我写了一份 runtime-无关的红线 spec，列了「永远要人 ack」的硬规则：push main/master、改 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.env&lt;/code&gt;/secret/删 prod、≥10MB 二进制进站点、跳过内容合规备案等等。它的设计意图是&lt;strong&gt;编译成 Claude Code 的 PreToolUse hook&lt;/strong&gt;，用硬编码 regex 在工具执行前拦——因为 LLM 是概率性的，「在 prompt 里写了别 push main」是软约束（可能不遵守、可能被任务诱导绕过、可能幻觉），而 hook 是确定性的。&lt;/p&gt;

&lt;p&gt;但我要诚实：&lt;strong&gt;这层红线 hook 现在还没挂上。&lt;/strong&gt; 当前 Worker 守红线靠的是三道软兜底——&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;roles/worker.md&lt;/code&gt; 里的角色手册约束 + PR 门（它只能开 PR 不能直接合）+ 我最后人审。在挂上 hard hook 之前，我不会把它切到无人值守。而且红线 hook 上线策略也写死了「第一周只 log 不拦」——一个误判会卡死整条流水线，得先观察确认无误报再切真拦。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;这三层的取舍逻辑：&lt;strong&gt;能确定性拦的（白名单、总开关）现在就硬拦；要等 hook 才能确定性拦的（红线），在它就位前宁可用「软约束 + 收窄能力 + 人审」三重兜底压着，也不放开无人值守。&lt;/strong&gt; 安全这件事上，「还没做到的部分」必须当成「还没安全」对待，而不是「prompt 写了应该没事」。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;6-当前真实状态哪些跑通了哪些还没&quot;&gt;6. 当前真实状态：哪些跑通了，哪些还没&lt;/h2&gt;

&lt;p&gt;技术博客最容易翻车的地方是把 demo 吹成生产。这一节专门划清楚边界。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;已经是能跑的实物（不是图纸）：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/army/&lt;/code&gt; 控制面骨架全部就位：组织宪法 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CLAUDE.md&lt;/code&gt;、三份角色手册、项目注册表、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bin/&lt;/code&gt; 下 8 个脚本（共 305 行）、账本、知识库脚手架。&lt;/li&gt;
  &lt;li&gt;三角色（PM/Worker/Auditor）都在&lt;strong&gt;真实 bug&lt;/strong&gt;（cue Issue#1）上端到端验证过，PR#2 已合并。&lt;/li&gt;
  &lt;li&gt;工具白名单 SoD、git worktree 隔离、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;runs.jsonl&lt;/code&gt; 账本、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;army-guard&lt;/code&gt; 总开关——这几样是实打实在用的。&lt;/li&gt;
  &lt;li&gt;PM 的幂等：对已合并的 Issue 正确 no-op，核了 GitHub + 账本两个事实源。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;还没做完（按我自己的路线图，诚实列出）：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;dispatcher 仍是 DRY 模式。&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;army-dispatch&lt;/code&gt; 这个 poller 现在默认只「&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh&lt;/code&gt; 查 + 记日志，不真起 PM」（防止意外烧 token），要 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ARMY_DISPATCH_LIVE=1&lt;/code&gt; 才真唤起。也就是说目前每一单仍是我手动 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;army-run-pm &amp;lt;proj&amp;gt; &amp;lt;N&amp;gt;&lt;/code&gt; 触发的，&lt;strong&gt;自动接单的最后一根线还没接通&lt;/strong&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Auditor 还靠手动触发。&lt;/strong&gt; poller 里「发现 review 态新 PR → 自动唤 Auditor」这条路径还没写，当前是我手动 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;army-run-auditor&lt;/code&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;红线 hard hook 没挂。&lt;/strong&gt; 见第 5 节——无人值守前必须先挂上（log-only 先行）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Telegram 桥 + systemd 常驻没接。&lt;/strong&gt; 设计里 PM 应该能收 Telegram 的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@PM&lt;/code&gt; ping、审批走 IM 卡片，dispatcher 应该是 systemd 用户服务定时跑。这两样都还没落地（systemd unit 这台机器上目前也确实没装）。换句话说，&lt;strong&gt;它现在是一套「手动触发也能跑通全闭环」的流水线，但还不是 24h 无人值守的常驻系统。&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;Worker 的 ledger 记了两遍（角色手册自记 + 包装脚本记），该二选一。&lt;/li&gt;
  &lt;li&gt;凭据管理：项目 remote 一律走 SSH / 凭据助手，别让 token 明文落进 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.git/config&lt;/code&gt;。&lt;/li&gt;
  &lt;li&gt;Worker 的 worktree 在 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/army/worktrees/&lt;/code&gt; 下、不在项目树内，拿不到工作区根的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CLAUDE.md&lt;/code&gt;（只能拿项目自身那份）——需要时用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--add-dir&lt;/code&gt; 补。&lt;/li&gt;
  &lt;li&gt;Auditor 与 Worker 同 bot 账号，导致前面那个「不能 self-approve、只能 comment」的妥协——要彻底分权得单开账号。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;把这些列出来不是给自己挑刺，而是因为&lt;strong&gt;一套自动开发流水线真正的难点恰恰在这些边角&lt;/strong&gt;：身份分离、凭据管理、幂等、续跑、误判防护。能跑通一个 happy-path demo 不难，难的是把这些边角逐个收口到敢无人值守。这份清单就是从 demo 到生产之间还差的路。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;7-为什么没上-airflow--没自建编排框架&quot;&gt;7. 为什么没上 Airflow / 没自建编排框架&lt;/h2&gt;

&lt;p&gt;最后回到最初那个判断，把它讲透。一开始我也考虑过更「正经」的方案——上一篇方法论文里甚至画过 13 个 agent 槽位 + Sentry + Grafana + canary 的团队版大图。落到单人个人项目时我全砍了，理由是：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code 原生就给了搭多 agent 编排所需的全部机制：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;claude -p&lt;/code&gt; headless 模式 = 可脚本化唤起的 agent 进程；&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--append-system-prompt&lt;/code&gt; = 给同一个底座注入不同角色身份；&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--allowedTools&lt;/code&gt; = 确定性的权限隔离（SoD 的结构保证）；&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--model&lt;/code&gt; per-task = 模型分层旋钮（判断用 Opus、审查用 Sonnet）；&lt;/li&gt;
  &lt;li&gt;PreToolUse hook = 硬红线所需的确定性闸门（待挂）；&lt;/li&gt;
  &lt;li&gt;加载 cwd 的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CLAUDE.md&lt;/code&gt; = 每个项目自带工具链/约定/红线。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;剩下要我「自己搭」的，&lt;strong&gt;根本不是 agent loop、不是工具执行器、不是记忆引擎&lt;/strong&gt;——那些借底座的就好。要搭的只是一层薄胶水：项目注册表（一份 yaml）、三个唤起脚本（链式调用，进程级编排）、一个账本（append JSONL）、一个总开关（读一个文件）。状态机的事实源直接用 GitHub Issues/PR/Projects——它本来就是工程团队的工单池 + 评审台 + 看板，免费、有 API、零运维。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;一句话总结这个取舍：&lt;strong&gt;编排框架（Airflow/队列/状态机引擎）解决的是「进程怎么调度、状态存哪、消息怎么传」——但当你把状态全外置到 GitHub + 文件、让每个 agent 干完即弃、用进程链式调用替代消息传递时，这些问题根本不出现，于是框架也就不需要了。&lt;/strong&gt; 300 行脚本不是「简陋版的 Airflow」，它是一个&lt;strong&gt;根本不需要 Airflow 的架构&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;这也是我最想留给读者的工程判断：搭多 agent 自动开发流水线，先别急着选编排框架。先把三件事想清楚——&lt;strong&gt;职责怎么分权（用白名单，不用 prompt）、状态放哪（外置到 GitHub/文件，别留内存）、安全闸怎么确定性化（hook/白名单，不靠模型自觉）&lt;/strong&gt;。这三样想透了，剩下的胶水可能比你以为的薄得多。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;附复现这套的最小清单&quot;&gt;附：复现这套的最小清单&lt;/h2&gt;

&lt;p&gt;如果你想照着搭一套自己的：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;底座&lt;/strong&gt;：Claude Code，登录订阅跑（headless &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;claude -p&lt;/code&gt;），边际成本压到接近零。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;事实源&lt;/strong&gt;：GitHub repo + Issues + Projects + 一份 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;projects.yaml&lt;/code&gt; + 一个 append-only &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;runs.jsonl&lt;/code&gt;。状态全往这里放。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;三个唤起脚本&lt;/strong&gt;：PM（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--allowedTools Bash Read Grep Glob&lt;/code&gt;，cwd=控制面之家）、Worker（加 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Edit Write&lt;/code&gt; + &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;acceptEdits&lt;/code&gt; + git worktree 隔离）、Auditor（去掉 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Edit Write&lt;/code&gt;，结构上只读）。链式调用，不上队列。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;总开关&lt;/strong&gt;：每个脚本第一行读一个 state 文件，&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PAUSE&lt;/code&gt; 就自退。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;红线&lt;/strong&gt;：写一份 runtime-无关的硬规则 spec，编译成 PreToolUse hook，&lt;strong&gt;先 log-only 一周&lt;/strong&gt;再切真拦。无人值守前必挂。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;验收&lt;/strong&gt;：拿真实的低风险 bug（P3/cosmetic）开练，目标一周跑通 3-5 单、PM 决策准确率 &amp;gt;80%，再逐步把 dispatcher 从 DRY 切 LIVE、把 Auditor 自动化、接 IM 审批。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;别一上来就追无人值守。先让「手动触发也能跑通全闭环」稳定下来——那已经是把 AI 从「单兵 Copilot」毕业成「会自己分诊、写码、自审、走流程」的流水线了。后面那几根线（自动接单、IM 审批、常驻）是锦上添花，不是地基。&lt;/p&gt;</content>
    <category term="Claude Code"/>
    <category term="AI Agent"/>
    <category term="多智能体"/>
    <category term="自动化开发"/>
    <category term="LLMOps"/>
    <summary type="html">约 300 行脚本、不靠编排框架，用 Claude Code headless 把 Issue→PR→merge 串成 agent 间零人工干预的流水线；附真实运行账本与设计取舍。</summary>
  </entry>
  <entry>
    <title type="html">Android ADB + Agent 能做哪些事</title>
    <link href="https://jinzi.cyou/posts/2026-05-25-android-adb-agent-capabilities/" rel="alternate" type="text/html" title="Android ADB + Agent 能做哪些事"/>
    <published>2026-05-25T04:00:00+00:00</published>
    <updated>2026-05-25T04:00:00+00:00</updated>
    <id>https://jinzi.cyou/posts/android-adb-agent-capabilities</id>
    <content type="html" xml:base="https://jinzi.cyou/posts/2026-05-25-android-adb-agent-capabilities/">&lt;blockquote&gt;
  &lt;p&gt;一份关于”用 ADB 通道 + 多模态大模型（Agent）操控 Android 手机”的能力边界研究。
整理自一次技术调研会话，含豆包 AI 手机（UI-TARS）的实现原理对照、ADB 各项能力的可行性分级、以及”一键换机”等高阶目标的现实约束。&lt;/p&gt;

  &lt;p&gt;日期：2026-05-25&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;目录&quot;&gt;目录&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#1&quot;&gt;两条技术路线：ADB 调试通道 vs 系统级 GUI Agent&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#2&quot;&gt;ADB 能给 Agent 带来哪些能力&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#3&quot;&gt;豆包 AI 手机怎么用多模态大模型操控手机（UI-TARS）&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#4&quot;&gt;App 权限管控、装卸、文件整理的可行性&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#5&quot;&gt;“从应用商店下载安装”为什么是个坎&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#6&quot;&gt;“一键换机 / 完整克隆”的现实边界&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#7&quot;&gt;能力总表与选型建议&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a id=&quot;1&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;1-两条技术路线adb-调试通道-vs-系统级-gui-agent&quot;&gt;1. 两条技术路线：ADB 调试通道 vs 系统级 GUI Agent&lt;/h2&gt;

&lt;p&gt;让 Agent 操控一部 Android 手机，业界存在两条本质不同的路：&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;维度&lt;/th&gt;
      &lt;th&gt;&lt;strong&gt;ADB / 无障碍&lt;/strong&gt;（开发者可走）&lt;/th&gt;
      &lt;th&gt;&lt;strong&gt;系统级 GUI Agent&lt;/strong&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;uiautomator 控件树（结构化、精确）+ 截图&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;端到端 GUI 专用模型直出动作&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;执行&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb shell input&lt;/code&gt; / Accessibility 注入事件&lt;/td&gt;
      &lt;td&gt;系统级 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;INJECT_EVENTS&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;需要 ROM 级权限，刷工程机&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;两条路殊途同归——都是”&lt;strong&gt;看屏幕 → 推理 → 像人一样点击&lt;/strong&gt;“的闭环。区别在于执行层走的是调试通道还是系统注入，以及模型是通用多模态还是专门为 GUI 操作训练过的。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;关键结论&lt;/strong&gt;：用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ADB + 截图喂给多模态模型 + uiautomator 控件树&lt;/code&gt;，本质能复刻豆包那套交互闭环，只是执行层走调试通道而非系统注入。这是个人开发者 / Agent 项目最现实的落地路径。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;环境提示：在 WSL2 里连真机，一般还需要桥接 Windows 侧的 adb server，或走 usbipd / 网络 adb（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb tcpip&lt;/code&gt; 无线调试）。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a id=&quot;2&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;2-adb-能给-agent-带来哪些能力&quot;&gt;2. ADB 能给 Agent 带来哪些能力&lt;/h2&gt;

&lt;p&gt;接入 ADB 后，Agent 获得的能力可按用途分为五类：&lt;/p&gt;

&lt;h3 id=&quot;21-屏幕操控--ui-自动化&quot;&gt;2.1 屏幕操控 / UI 自动化&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb shell input tap/swipe/text/keyevent&lt;/code&gt; —— 点击、滑动、输入文字、按键，脚本化操控任意 App&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb exec-out screencap -p&lt;/code&gt; —— 截屏（多模态模型可直接读图分析画面）&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb shell uiautomator dump&lt;/code&gt; —— 拉当前界面控件树（坐标 / 文本 / resource-id），做&lt;strong&gt;视觉 + 结构双通道&lt;/strong&gt;自动化，比盲点坐标稳得多&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb shell screenrecord&lt;/code&gt; —— 原生录屏成 mp4&lt;/li&gt;
  &lt;li&gt;配合 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scrcpy&lt;/code&gt; 可实时镜像 + 鼠标键盘控制&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;22-app--包管理&quot;&gt;2.2 App / 包管理&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;install / uninstall / pm list packages&lt;/code&gt; —— 装卸 APK、枚举包名&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pm clear&lt;/code&gt; 清数据、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;am start/force-stop&lt;/code&gt; 起停 Activity、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;am broadcast&lt;/code&gt; 发广播&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dumpsys&lt;/code&gt;（battery/meminfo/activity/window）—— 抓性能、当前栈、内存&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;23-文件--数据&quot;&gt;2.3 文件 / 数据&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb push/pull&lt;/code&gt; —— 双向传文件&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb shell run-as &amp;lt;pkg&amp;gt;&lt;/code&gt; —— &lt;strong&gt;仅 debuggable 包&lt;/strong&gt;下读自家沙盒数据（SQLite / SharedPrefs）&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;24-日志--调试&quot;&gt;2.4 日志 / 调试&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb logcat&lt;/code&gt; —— 实时日志，定位崩溃 / 报错（带 tag/level 过滤）&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb bugreport&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb shell getprop&lt;/code&gt; —— 设备信息、系统属性&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb forward / reverse&lt;/code&gt; —— 端口转发，把手机内服务映射到本机调试，或反向让 App 访问本机 server&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;25-设备管理&quot;&gt;2.5 设备管理&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;多设备并行（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-s &amp;lt;serial&amp;gt;&lt;/code&gt;）、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb tcpip&lt;/code&gt; 无线调试、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reboot&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wm size/density&lt;/code&gt; 改分辨率&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;对项目的实际价值&quot;&gt;对项目的实际价值&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;取代 / 补充 Playwright&lt;/strong&gt; —— 测原生 Android App（不只是网页）的 UI 流程&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;素材采集&lt;/strong&gt; —— 手机端录屏 / 截屏直接进内容流水线&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;真机内容自动化&lt;/strong&gt; —— 操控各类 App，绕开纯 web 接口的限制&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a id=&quot;3&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;3-豆包-ai-手机怎么用多模态大模型操控手机ui-tars&quot;&gt;3. 豆包 AI 手机怎么用多模态大模型操控手机（UI-TARS）&lt;/h2&gt;

&lt;p&gt;核心一句话：&lt;strong&gt;豆包手机不是靠 API 或读控件树，而是把”看屏幕截图 → 推理 → 像人一样点屏幕”这套闭环交给一个端到端多模态大模型（字节的 UI-TARS）来做。&lt;/strong&gt;&lt;/p&gt;

&lt;h3 id=&quot;31-感知纯视觉截图当唯一输入&quot;&gt;3.1 感知：纯视觉，截图当唯一输入&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;不解析 App 接口，也不主要依赖无障碍控件树，而是&lt;strong&gt;每隔约 3 秒抓一张当前屏幕截图&lt;/strong&gt;喂给视觉语言模型（VLM），由模型从像素里识别按钮、输入框、目标位置——和人眼看屏幕一样。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;过滤式视觉管道&lt;/strong&gt;：抓的是目标 App 的 Activity Hierarchy 渲染结果，不是直接读整个 Display Buffer，因此物理上看不到后台（如视频通话）内容，是一项隐私设计。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;32-推理react-范式--分层记忆&quot;&gt;3.2 推理：ReAct 范式 + 分层记忆&lt;/h3&gt;
&lt;p&gt;模型按 &lt;strong&gt;推理(Reason) → 行动(Act) → 观察(Observe)&lt;/strong&gt; 三步循环运行：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;工作记忆&lt;/strong&gt;保存近几步操作（快反应，System 1）&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;情景记忆&lt;/strong&gt;做语义压缩存长程上下文（深推理，System 2）&lt;/li&gt;
  &lt;li&gt;这样能撑住”打开美团 → 搜店 → 比价 → 加购 → 下单”这种多步跨 App 任务，而非只会单步点击。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;33-动作统一动作空间&quot;&gt;3.3 动作：统一动作空间&lt;/h3&gt;
&lt;p&gt;模型输出的不是文字，而是&lt;strong&gt;结构化操作原语&lt;/strong&gt;：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tap(x,y) / type(text) / swipe / 长按 / 返回&lt;/code&gt;，并扩展到文件系统操作、终端命令、MCP 工具调用。&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;坐标级操作落到系统上，靠 &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;INJECT_EVENTS&lt;/code&gt; 系统级权限&lt;/strong&gt;（注入触摸 / 按键事件）——这正是它做成”系统级 AI 手机”、需要刷工程机的原因。普通第三方 App 拿不到这个权限，只能退而用无障碍服务。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;34-端云协同&quot;&gt;3.4 端云协同&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;标准模式&lt;/strong&gt;：浅层 VLM，响应快&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pro 模式&lt;/strong&gt;：云端大模型深度推理 + 工具调用，更强但慢&lt;/li&gt;
  &lt;li&gt;主算力在云端（截图上传云端 VLM 解析）。&lt;/li&gt;
  &lt;li&gt;后台跑任务时起一个&lt;strong&gt;虚拟显示层（影子屏幕）&lt;/strong&gt;，让 Agent 在不打断前台操作的情况下并行干活。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;35-安全&quot;&gt;3.5 安全&lt;/h3&gt;
&lt;p&gt;敏感动作（支付、身份验证、密码）&lt;strong&gt;自动暂停，转人工接管&lt;/strong&gt;。&lt;/p&gt;

&lt;h3 id=&quot;36-模型怎么练出来的ui-tars&quot;&gt;3.6 模型怎么练出来的（UI-TARS）&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;三阶段管道：海量教程 / 操作截图&lt;strong&gt;持续预训练(CT)&lt;/strong&gt; → 高质量指令&lt;strong&gt;SFT&lt;/strong&gt; → &lt;strong&gt;强化学习(RL)&lt;/strong&gt; 端到端优化。&lt;/li&gt;
  &lt;li&gt;关键数据：标注员录下操作时的”有声思维”（为什么点这里），还能在模型实时采样时&lt;strong&gt;在线干预纠偏&lt;/strong&gt;。&lt;/li&gt;
  &lt;li&gt;成绩：开源版 UI-TARS-1.5-7B 在 AndroidWorld 等 7 项 GUI 基准刷新 SOTA（AndroidWorld 46.6 vs GPT-4o 34.5；OSWorld 超过 Claude），是 GitHub 热榜榜首项目，开源后超 26k Star。UI-TARS 已迭代到 2.0，支持 GUI 操作到代码执行、API 调用的混合动作流。豆包手机用的是闭源版，针对 Mobile Use 做了大量优化。&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a id=&quot;4&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;4-app-权限管控装卸文件整理的可行性&quot;&gt;4. App 权限管控、装卸、文件整理的可行性&lt;/h2&gt;

&lt;h3 id=&quot;41-app-权限管控--完全可以&quot;&gt;4.1 App 权限管控 ✅ 完全可以&lt;/h3&gt;
&lt;p&gt;ADB 直接走 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pm&lt;/code&gt;（PackageManager），能读能改运行时权限：&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# 看某 App 当前所有权限及授予状态&lt;/span&gt;
adb shell dumpsys package com.xxx.app | &lt;span class=&quot;nb&quot;&gt;grep &lt;/span&gt;permission

&lt;span class=&quot;c&quot;&gt;# 授予 / 撤销单个权限（运行时权限，立即生效，无需重装）&lt;/span&gt;
adb shell pm grant   com.xxx.app android.permission.CAMERA
adb shell pm revoke  com.xxx.app android.permission.ACCESS_FINE_LOCATION

&lt;span class=&quot;c&quot;&gt;# appops 更细：控制后台弹窗、读剪贴板、悬浮窗、自启等&quot;特殊操作&quot;&lt;/span&gt;
adb shell appops &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;com.xxx.app SYSTEM_ALERT_WINDOW deny
adb shell appops get com.xxx.app           &lt;span class=&quot;c&quot;&gt;# 列出该 App 所有 op 状态&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;能批量做”隐私体检”：扫所有 App 谁拿了麦克风 / 定位 / 通讯录，一键收权。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;限制&lt;/strong&gt;：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pm grant&lt;/code&gt; 只能改 manifest 里声明过 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dangerous&lt;/code&gt; 级的运行时权限；签名级 / 系统级权限改不了（要 root）。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;42-装--卸-app--可以&quot;&gt;4.2 装 / 卸 App ✅ 可以&lt;/h3&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;adb &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;app.apk              &lt;span class=&quot;c&quot;&gt;# 装本地 APK&lt;/span&gt;
adb &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; app.apk        &lt;span class=&quot;c&quot;&gt;# 覆盖安装 / 允许降级&lt;/span&gt;
adb install-multiple &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.apk       &lt;span class=&quot;c&quot;&gt;# split APK（AAB 拆出来的）&lt;/span&gt;
adb uninstall com.xxx.app        &lt;span class=&quot;c&quot;&gt;# 卸载&lt;/span&gt;
adb uninstall &lt;span class=&quot;nt&quot;&gt;-k&lt;/span&gt; com.xxx.app     &lt;span class=&quot;c&quot;&gt;# 卸载但保留数据&lt;/span&gt;
adb shell pm uninstall &lt;span class=&quot;nt&quot;&gt;--user&lt;/span&gt; 0 com.xxx.app   &lt;span class=&quot;c&quot;&gt;# 卸预装/系统应用（免 root，仅当前用户）&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;关键的坎&lt;/strong&gt;：ADB 只能装&lt;strong&gt;你已经有的 APK 文件&lt;/strong&gt;，不会”去应用商店下载”——详见第 5 章。&lt;/p&gt;

&lt;h3 id=&quot;43-文件整理--可以等于半个-shell&quot;&gt;4.3 文件整理 ✅ 可以，等于半个 shell&lt;/h3&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;adb push 本地 /sdcard/目标/         &lt;span class=&quot;c&quot;&gt;# 传进去&lt;/span&gt;
adb pull /sdcard/DCIM/ ./备份/       &lt;span class=&quot;c&quot;&gt;# 拉出来&lt;/span&gt;
adb shell &lt;span class=&quot;nb&quot;&gt;ls&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-R&lt;/span&gt; /sdcard/Download     &lt;span class=&quot;c&quot;&gt;# 浏览&lt;/span&gt;
adb shell &lt;span class=&quot;nb&quot;&gt;mv&lt;/span&gt; / &lt;span class=&quot;nb&quot;&gt;cp&lt;/span&gt; / &lt;span class=&quot;nb&quot;&gt;rm&lt;/span&gt; / &lt;span class=&quot;nb&quot;&gt;mkdir&lt;/span&gt; ...   &lt;span class=&quot;c&quot;&gt;# 移动、复制、删、建目录&lt;/span&gt;
adb shell find /sdcard &lt;span class=&quot;nt&quot;&gt;-name&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;*.mp4&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-size&lt;/span&gt; +50M   &lt;span class=&quot;c&quot;&gt;# 按条件筛&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;完全能写脚本做”按类型归类相册 / 清理下载目录 / 批量重命名”。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;限制&lt;/strong&gt;：免 root 时只能动&lt;strong&gt;共享存储&lt;/strong&gt;（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/sdcard&lt;/code&gt;、公共目录）和 debug 包自己的沙盒；别的 App 私有目录 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/data/data/&amp;lt;pkg&amp;gt;/&lt;/code&gt; 读不了（要 root 或该包是 debuggable + &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;run-as&lt;/code&gt;）。&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a id=&quot;5&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;5-从应用商店下载安装为什么是个坎&quot;&gt;5. “从应用商店下载安装”为什么是个坎&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ADB 没有”从 Play Store 直接下载安装”的原生命令&lt;/strong&gt;——Google 故意不开这个口。Play Store 没有公开的 CLI / API 让你 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb install 包名&lt;/code&gt; 就从云端拉下来装。&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb install&lt;/code&gt; 永远只吃&lt;strong&gt;本地 APK 文件&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;曲线达成有三条路，按”接近直接”排序：&lt;/p&gt;

&lt;h3 id=&quot;路线-1intent-打开商店页--自动点安装最接近直接最稳妥&quot;&gt;路线 1：intent 打开商店页 + 自动点”安装”（最接近”直接”，最稳妥）&lt;/h3&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# 直接跳到某 App 的 Play Store 详情页&lt;/span&gt;
adb shell am start &lt;span class=&quot;nt&quot;&gt;-a&lt;/span&gt; android.intent.action.VIEW &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;market://details?id=com.spotify.music&quot;&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# 然后截图找到&quot;安装&quot;按钮，注入点击&lt;/span&gt;
adb shell input tap &amp;lt;x&amp;gt; &amp;lt;y&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;本质就是豆包那套 GUI 自动化：让模型看屏幕、点”安装”、等下载。下载和安装都由商店自己完成（合法、走正常签名校验、账号正常）。&lt;/li&gt;
  &lt;li&gt;缺点是要”看屏点击”，不是一条命令搞定。装 APK 时还会弹&lt;strong&gt;系统确认框&lt;/strong&gt;，需要再 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;input&lt;/code&gt; 点一下”安装”，或提前 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb shell settings&lt;/code&gt; 放行未知来源。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;路线-2第三方-play-store-api-客户端全自动但有账号风险&quot;&gt;路线 2：第三方 Play Store API 客户端（全自动，但有账号风险）&lt;/h3&gt;
&lt;p&gt;有开源工具逆向了 Play Store 私有协议，用 Google 账号&lt;strong&gt;直接从 Google 服务器抓 APK&lt;/strong&gt;：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gplaycli&lt;/code&gt;（命令行）、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Raccoon&lt;/code&gt;（PC）、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Aurora Store&lt;/code&gt;（手机端）。&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gplaycli &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; com.spotify.music        &lt;span class=&quot;c&quot;&gt;# 用账号从 Play 拉 APK 到本地&lt;/span&gt;
adb &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;com.spotify.music.apk    &lt;span class=&quot;c&quot;&gt;# 再装进去&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;代价&lt;/strong&gt;：非官方协议，&lt;strong&gt;违反 Play 服务条款&lt;/strong&gt;，账号有被风控 / 封的风险（建议用小号），付费 App / 区域锁的拉不了。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;路线-3managed-google-play--emm-api官方但有门槛&quot;&gt;路线 3：Managed Google Play / EMM API（官方但有门槛）&lt;/h3&gt;
&lt;p&gt;企业 MDM 场景，Google 提供官方 API 远程给托管设备静默推送安装。需把设备纳管成”企业管理设备”，个人用不上。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;结论&lt;/strong&gt;：正规、稳妥的方式是&lt;strong&gt;路线 1&lt;/strong&gt;——ADB 负责”导航 + 点击”，商店负责”下载 + 安装”。这也正是 AI 手机做”一句话装 App”的真实路径：它不是绕过商店，而是替你操作商店。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a id=&quot;6&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;6-一键换机--完整克隆的现实边界&quot;&gt;6. “一键换机 / 完整克隆”的现实边界&lt;/h2&gt;

&lt;p&gt;能做到&lt;strong&gt;部分克隆&lt;/strong&gt;，但”尽可能复制完整状态（含各 App 登录态 / 存档 / 系统密钥）”——&lt;strong&gt;纯 ADB 无 root 做不到&lt;/strong&gt;。卡点不是 ADB 弱，而是 Android 的沙盒安全模型。&lt;/p&gt;

&lt;h3 id=&quot;61-adb-无-root-能搬的-&quot;&gt;6.1 ADB 无 root 能搬的 ✅&lt;/h3&gt;
&lt;p&gt;| 类别 | 命令 | 说明 |
|—|—|—|
| 共享存储文件 | &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb pull /sdcard ./backup&lt;/code&gt; | 照片 / 视频 / 下载 / 文档全量拷 |
| 已装 App 清单 | &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb shell pm list packages -3&lt;/code&gt; | 拿到所有第三方包名 |
| APK 本体 | &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb shell pm path com.x&lt;/code&gt; → &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pull&lt;/code&gt; | 把安装包抠出来搬到新机重装 |
| 部分系统设置 | &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb shell settings get/put system\|secure\|global&lt;/code&gt; | ADB 持 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WRITE_SECURE_SETTINGS&lt;/code&gt;，能搬亮度、字体、动画、无障碍、默认输入法等 |&lt;/p&gt;

&lt;p&gt;→ 能拼出”文件 + 把同样的 App 都装上 + 还原一批系统偏好”的迁移脚本。&lt;/p&gt;

&lt;h3 id=&quot;62-adb-无-root-搬不了的-这才是换机的核心&quot;&gt;6.2 ADB 无 root 搬不了的 ❌（这才是”换机”的核心）&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;App 私有数据&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/data/data/&amp;lt;包名&amp;gt;/&lt;/code&gt;：登录态、聊天记录、游戏存档、App 内设置——&lt;strong&gt;全在这儿，无 root 一律读不到&lt;/strong&gt;。&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;run-as&lt;/code&gt; 只对 debuggable 开发版有效，商店装的正式版无效。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;系统级密钥&lt;/strong&gt;：WiFi 密码、账户凭据、指纹 / 人脸模板、Keystore——受保护存储，碰不到。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb backup&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb restore&lt;/code&gt;&lt;/strong&gt;：老接口看着像答案，但&lt;strong&gt;已基本废弃&lt;/strong&gt;——Android 12 起大量失效，App 默认 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;allowBackup=false&lt;/code&gt;，备出来多半是空的，别指望它。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;一句话&lt;/strong&gt;：无 root 只能搬”东西”（文件 + App 安装包 + 部分设置），搬不了”状态”（每个 App 的数据和你的登录）。装好的微信打开还是要重新扫码登录。&lt;/p&gt;

&lt;h3 id=&quot;63-想要真完整克隆--两条路&quot;&gt;6.3 想要真·完整克隆 → 两条路&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A. Root / 解锁 BL（技术上最彻底）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;root 后可整包 tar &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/data&lt;/code&gt; 分区，或 TWRP 做 nandroid 全镜像，App 数据一并搬。&lt;/li&gt;
  &lt;li&gt;代价：解锁 bootloader &lt;strong&gt;会清空设备&lt;/strong&gt;、掉保修、可能触发 App 风控（银行 / 支付检测 root 拒启）、新旧机型号不同还原易崩。不推荐做日常方案。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;B. 厂商”一键换机”（最省心，也是该功能的真实来源）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;三星 Smart Switch / 小米·换机 / 华为手机克隆 / Google 开机迁移——它们&lt;strong&gt;不是 ADB&lt;/strong&gt;。&lt;/li&gt;
  &lt;li&gt;原理：这些是&lt;strong&gt;预装的系统级签名 App&lt;/strong&gt;，持有普通 App 和 ADB 都拿不到的特殊备份权限，能直接读全机 App 数据；再叠加 Google / 厂商云端的 App 数据备份（开发者 opt-in 的那部分）。&lt;/li&gt;
  &lt;li&gt;所以”一键全搬”靠的是&lt;strong&gt;系统特权 + 云备份&lt;/strong&gt;，第三方（含 ADB）从设计上就被挡在外面。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;64-建议&quot;&gt;6.4 建议&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;真要”尽可能复制手机状态”：&lt;strong&gt;同品牌换机用厂商工具&lt;/strong&gt;最优；跨品牌用目标厂商的克隆 App。&lt;/li&gt;
  &lt;li&gt;ADB 的定位是&lt;strong&gt;补漏和定制&lt;/strong&gt;：厂商工具漏掉的、或想脚本化精确控制的（批量还原某类设置、把特定目录归类搬运、复刻 App 安装清单），用 ADB 脚本补上。&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;a id=&quot;7&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;7-能力总表与选型建议&quot;&gt;7. 能力总表与选型建议&lt;/h2&gt;

&lt;h3 id=&quot;adb-各项能力可行性分级&quot;&gt;ADB 各项能力可行性分级&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;能力&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;ADB 免 root&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;ADB + root&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&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;屏幕操控 / UI 自动化&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;—&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;截屏 / 录屏&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;—&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;改 App 运行时权限&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;—&lt;/td&gt;
      &lt;td&gt;系统级权限要 root&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;安装本地 APK&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td&gt;弹系统确认框&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;从商店”下载”安装&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;⚠️ 需 GUI 自动化&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;⚠️&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td&gt;ADB 不联商店&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;卸载（含预装）&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;—&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;文件整理（共享存储）&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;—&lt;/td&gt;
      &lt;td&gt;只限 /sdcard + 自己沙盒&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;App 私有数据读写&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;❌&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td&gt;沙盒隔离&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;WiFi / 凭据 / 指纹&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;❌&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;部分&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td&gt;受保护存储&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;系统设置迁移&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;部分&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td&gt;secure 设置受限&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;App 数据 / 登录态迁移&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;❌&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;✅&lt;/td&gt;
      &lt;td&gt;核心壁垒&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;选型建议&quot;&gt;选型建议&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;做 Agent 操控手机&lt;/strong&gt;：走 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ADB + 截图（喂多模态模型）+ uiautomator 控件树&lt;/code&gt; 的双通道路线，能复刻豆包交互闭环；执行层用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;input&lt;/code&gt; 注入而非系统级 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;INJECT_EVENTS&lt;/code&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;隐私体检 / 权限管控 / 文件整理 / 装卸&lt;/strong&gt;：ADB 免 root 一把梭，可全脚本化。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;“一句话装 App”&lt;/strong&gt;：ADB 负责导航 + 点击，商店负责下载 + 安装（路线 1）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;完整换机克隆&lt;/strong&gt;：同品牌用厂商工具；ADB 仅做半迁移补漏（App 清单 + APK + /sdcard + settings 快照）；App 数据交给厂商工具或 root。&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;参考资料&quot;&gt;参考资料&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.qbitai.com/2025/12/359876.html&quot;&gt;量子位：起底”豆包手机”，核心技术早已开源&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.53ai.com/news/MultimodalLargeModel/2025121567254.html&quot;&gt;53AI：万字拆解 UI-TARS 2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.53ai.com/news/zhinengyingjian/2025122889263.html&quot;&gt;53AI：从豆包手机助手看 GUI Agent 发展&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.oschina.net/news/345234/bytedance-ui-tars-1-5&quot;&gt;字节开源 UI-TARS-1.5（OSCHINA）&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Android 官方文档：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;adb&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pm&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;appops&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;settings&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;uiautomator&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="Android"/>
    <category term="ADB"/>
    <category term="Agent"/>
    <category term="AI手机"/>
    <category term="自动化"/>
    <summary type="html">用 ADB 通道 + 多模态大模型操控 Android 的能力边界研究：对照豆包 AI 手机（UI-TARS）实现原理，逐项分级 ADB 在权限管控、装卸、文件整理、应用下载、一键换机上的可行性。</summary>
  </entry>
  <entry>
    <title type="html">搭建你自己的 AI 军团：从单兵 Copilot 到 85% 自动化的工程闭环</title>
    <link href="https://jinzi.cyou/posts/2026-05-18-2026-05-18-build-your-own-ai-army/" rel="alternate" type="text/html" title="搭建你自己的 AI 军团：从单兵 Copilot 到 85% 自动化的工程闭环"/>
    <published>2026-05-18T04:00:00+00:00</published>
    <updated>2026-05-18T04:00:00+00:00</updated>
    <id>https://jinzi.cyou/posts/2026-05-18-build-your-own-ai-army</id>
    <content type="html" xml:base="https://jinzi.cyou/posts/2026-05-18-2026-05-18-build-your-own-ai-army/">&lt;blockquote&gt;
  &lt;p&gt;日期：2026-05-18
适用栈参考：Claude Code（Opus 4.7 + Sonnet 4.6 + Haiku 4.5）/ 任意 Git 平台 / 任意 issue tracker / 任意 IM 通知通道
目标读者：已经把 AI Coding 用到日常的开发者；想从「让 AI 帮我写代码」升级到「让一支 AI 军团替我跑产研流水线」&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;简介&quot;&gt;简介&lt;/h2&gt;

&lt;p&gt;绝大多数人把 AI 用成「单兵 Copilot」——每次开会话、每次贴上下文、每次盯着 diff 点 ack。这其实没有把 LLM 的并发优势用出来。&lt;/p&gt;

&lt;p&gt;真正的「AI 军团」是把工程团队那一套抄一遍：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;上层 PM&lt;/strong&gt;：一个稳重模型负责拆解、派工、验收&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;中层 Worker&lt;/strong&gt;：多个便宜快模型并行干活&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;下层 Auditor&lt;/strong&gt;：守门员模型做巡检、灰度判定、安全 review&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;反馈回路&lt;/strong&gt;：监控/告警/issue tracker 反向回流，让军团知道上次干得好不好&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;红线&lt;/strong&gt;：永远不交给 AI 自动执行的操作清单（force push / live deploy / DB migration / 真钱支付 …）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;经过实践，从「单兵 Copilot」到「85% 工程自动化」需要 &lt;strong&gt;4-6 周搭基础设施&lt;/strong&gt;，不是堆 prompt，是搭工程闭环。本文给一份完整的施工路线图。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;0-tldr&quot;&gt;0. TL;DR&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;一句话&lt;/strong&gt;：把 AI 从「单兵 Copilot」升级成「PM / Worker / Auditor 三层金字塔 + 权限矩阵 + canary 回路」的工程闭环，6 周内把日常研发自动化率从 35% 推到 85%。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;按 ROI 排，三个杠杆 + 一个长期项&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;L1&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Action Permission Matrix&lt;/strong&gt;（GREEN/YELLOW/ORANGE/RED 四档分级 + PreToolUse hook）&lt;/td&gt;
      &lt;td&gt;2 天&lt;/td&gt;
      &lt;td&gt;砍掉 60% 人工 ack 摩擦&lt;/td&gt;
      &lt;td&gt;Week 1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;L2&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;反馈回路&lt;/strong&gt;（Sentry → issue tracker → PM agent → Worker → 反向回填）&lt;/td&gt;
      &lt;td&gt;1 周&lt;/td&gt;
      &lt;td&gt;解锁「线上痛点 → hotfix」闭环&lt;/td&gt;
      &lt;td&gt;Week 2-3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;L3&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Canary + 自动回滚&lt;/strong&gt;（低风险 PR 直接 auto-merge + 部署 beta）&lt;/td&gt;
      &lt;td&gt;2 周&lt;/td&gt;
      &lt;td&gt;把「ack 每个 MR」降为「看灰度报告」&lt;/td&gt;
      &lt;td&gt;Week 4-6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;L4&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;PM/Worker/Auditor 金字塔常驻&lt;/strong&gt;（cron-driven 多 agent 编队）&lt;/td&gt;
      &lt;td&gt;持续&lt;/td&gt;
      &lt;td&gt;让军团 24h 跑&lt;/td&gt;
      &lt;td&gt;后续&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;阶段性目标&lt;/strong&gt;：Week 1 → 50% / Week 3 → 65% / Week 6 → 80% / 稳态 → 85%。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;终态指标&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;每日 ack 次数 15+ → 3-5&lt;/li&gt;
  &lt;li&gt;P2/P3 bug 响应时长 4h → 20min&lt;/li&gt;
  &lt;li&gt;AI PR 平均生命周期 6h → 30min&lt;/li&gt;
  &lt;li&gt;灰度逃逸次数 → 0（红线由规则拦）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;成本&lt;/strong&gt;（10-20 人团队规模）：一次性投入 17 工作日 + 周维护 5.5h + 月 token 账单约 $700，月省 ~75h 个人时间。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;永远不解锁的红线&lt;/strong&gt;：push 主干 / 生产 DB migration / 真钱支付 / 删生产资源 / 业务定价决策 — 硬编码 regex 拦截，不依赖 LLM 判断。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;底线认知&lt;/strong&gt;：不是堆 prompt，是搭工程闭环。Prompt 优化的边际收益很快递减，工程闭环才是护城河。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-心法为什么是军团而不是更强的-copilot&quot;&gt;1. 心法：为什么是「军团」而不是「更强的 Copilot」&lt;/h2&gt;

&lt;h3 id=&quot;11-单兵-copilot-的天花板&quot;&gt;1.1 单兵 Copilot 的天花板&lt;/h3&gt;

&lt;p&gt;不管你的 prompt 多花哨、上下文多长，单 agent 模式有三个硬上限：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;串行瓶颈&lt;/strong&gt;：一次只能干一件事；你 ack 等待时间 = 实际产出时间的 3-5 倍&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;上下文污染&lt;/strong&gt;：长对话里早期决策被后期 token 稀释；一次 50K context 后判断质量明显下降&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;角色错位&lt;/strong&gt;：让同一个模型同时干「写代码 + review 自己代码 + 决定要不要 deploy」违反职责分离&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;12-军团模式怎么破&quot;&gt;1.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;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;串行等待&lt;/td&gt;
      &lt;td&gt;3-7 个 worker 并行，每个独立 worktree&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;上下文污染&lt;/td&gt;
      &lt;td&gt;PM 单次会话保持 &amp;lt; 50K，每个任务派给新 worker&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;角色错位&lt;/td&gt;
      &lt;td&gt;PM / Worker / Auditor 三层职责分离，Auditor 不持有写权限&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ack 疲劳&lt;/td&gt;
      &lt;td&gt;按风险分级（GREEN/YELLOW/ORANGE/RED），只 ack 真正需要决策的&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;核心一句话：&lt;strong&gt;这不是让 AI 替你工作，而是把你从 ack 机器变回决策者&lt;/strong&gt;。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-三层架构总览&quot;&gt;2. 三层架构总览&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;┌──────────────────────────────────────────────────────────┐
│  上层：PM Agent (Opus 类强模型) — 接单 / 拆解 / 派工 / 验收 │
│  常驻 cron + 反应式（IM @我 / 新 bug / 监控告警）            │
└──────────────────────────────────────────────────────────┘
                          ↓ 派任务
┌──────────────────────────────────────────────────────────┐
│  中层：Worker Pool (Sonnet 类性价比模型, 3-7 并行)         │
│  每个 worker = 独立 worktree + 完整 PR-to-merge 能力       │
└──────────────────────────────────────────────────────────┘
                          ↓ 提交产物
┌──────────────────────────────────────────────────────────┐
│  下层：Auditor Pool (Haiku 类便宜模型, 巡检 / 守门 / 回归) │
│  代码 review / 安全扫描 / 灰度 watcher / 日报汇总           │
└──────────────────────────────────────────────────────────┘
                          ↓ 输出
┌──────────────────────────────────────────────────────────┐
│  反馈回路：IM 通知 / 日报 / 监控告警 / 灰度 SLO            │
│  + 红线触发 → 暂停整条流水线 + P0 告警                     │
└──────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;21-职责分配原则&quot;&gt;2.1 职责分配原则&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;强模型只做判断 + 拆解 + 验收&lt;/strong&gt;，单次会话短（&amp;lt; 50K token），节省 token&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;中档模型干 80% 实活&lt;/strong&gt;，并行最高 7 个 worker（受 IDE/Code Agent 并发限制）&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;便宜模型干机械审计&lt;/strong&gt;（lint 解释、test fail 分类、灰度 SLO 抽样），便宜量大&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;没有任何 agent 同时持有写权限和审计权限&lt;/strong&gt;（职责分离）&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;22-为什么强模型不能干所有事&quot;&gt;2.2 为什么强模型不能干所有事&lt;/h3&gt;

&lt;p&gt;按典型按 token 计价，Opus 类比 Sonnet 类贵 5×、比 Haiku 类贵 15×。让 Opus 干「读 lint 报告判断哪行是 false positive」是赔本买卖。&lt;/p&gt;

&lt;p&gt;但反过来，让 Haiku 类干「这个 bug 算不算需要回滚的级别」这种判断也不行——出错代价远高于省下来的 token 钱。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;规则&lt;/strong&gt;：判断 → 强模型；干活 → 中档；机械 → 便宜。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-阶段路线图&quot;&gt;3. 阶段路线图&lt;/h2&gt;

&lt;h3 id=&quot;phase-1week-1action-permission-matrix--把直觉变成规则&quot;&gt;Phase 1（Week 1）：Action Permission Matrix — 把直觉变成规则&lt;/h3&gt;

&lt;p&gt;这是整套军团最被低估的一步。多数人上来就堆 prompt、起 cron，结果第一周就出事——因为没有任何机制拦住模型干蠢事。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;核心产出&lt;/strong&gt;：一份动作分级表 + 一个 PreToolUse hook&lt;/p&gt;

&lt;h4 id=&quot;311-动作四档分级&quot;&gt;3.1.1 动作四档分级&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;&lt;strong&gt;GREEN&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;完全可逆 / 本地&lt;/td&gt;
      &lt;td&gt;改文档 / 跑 lint / 改本地任务状态 / 发 IM 汇报&lt;/td&gt;
      &lt;td&gt;全自动，不 ack&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;YELLOW&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;共享但可回滚&lt;/td&gt;
      &lt;td&gt;push 到 feature 分支 / 开 PR / 改 dev 环境配置&lt;/td&gt;
      &lt;td&gt;自动 + 事后通知&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;ORANGE&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;共享难回滚&lt;/td&gt;
      &lt;td&gt;beta 部署 / merge PR / 改测试环境 .env&lt;/td&gt;
      &lt;td&gt;canary 通过即自动（Phase 3 解锁）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;RED&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;灾难性&lt;/td&gt;
      &lt;td&gt;push master / 生产部署 / DB migration / 真钱支付&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;永远人 ack&lt;/strong&gt;（不解锁）&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h4 id=&quot;312-规则编码&quot;&gt;3.1.2 规则编码&lt;/h4&gt;

&lt;p&gt;把规则写成机器可读 YAML，挂到 hook 上：&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# rules/action-permissions.yaml&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;rules&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;pattern&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;push.*&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;b(master|main|prod)&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;b&quot;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;level&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;RED&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;reason&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;不能直接&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;主干分支&quot;&lt;/span&gt;

  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;pattern&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;git&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;(reset&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;--hard|checkout&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;--)&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;.*&quot;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;level&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;RED&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;reason&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;可能吞掉别人未推送的工作&quot;&lt;/span&gt;

  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;pattern&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;.*--force.*&quot;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;level&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;ORANGE&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;reason&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;force&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;操作要&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;canary&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;路径，不能直接放&quot;&lt;/span&gt;

  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;pattern&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;(stripe|paypal).*--live&quot;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;level&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;RED&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;reason&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;真钱接口必须人&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;ack&quot;&lt;/span&gt;

  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;pattern&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;kubectl&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;apply&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;-f&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;.*&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;-n&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;(prod|production)&quot;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;level&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;RED&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;reason&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;生产集群修改必须&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;review&quot;&lt;/span&gt;

  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;pattern&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;rm&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;-rf&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;/&quot;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;level&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;RED&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;reason&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;显式拦截灾难命令&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;313-hook-落地&quot;&gt;3.1.3 hook 落地&lt;/h4&gt;

&lt;p&gt;在你的 Code Agent 的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PreToolUse&lt;/code&gt; 钩子里跑一个脚本：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;GREEN → 直接放行&lt;/li&gt;
  &lt;li&gt;YELLOW → 放行 + 追加一行到 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-actions.log&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;ORANGE → 转 canary 流程（Phase 3）；未上线前仍人 ack&lt;/li&gt;
  &lt;li&gt;RED → 阻断 + 必须显式 ack 才能继续&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;重要&lt;/strong&gt;：第一周观察期只 log 不 enforce，确认无误报再切真拦。否则一个误判把军团整条流水线卡死。&lt;/p&gt;

&lt;h4 id=&quot;314-经验&quot;&gt;3.1.4 经验&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;规则文件必须进 git，团队/未来的自己能 review&lt;/li&gt;
  &lt;li&gt;规则匹配优先级写死 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RED &amp;gt; ORANGE &amp;gt; YELLOW &amp;gt; GREEN&lt;/code&gt;，多条命中取最高&lt;/li&gt;
  &lt;li&gt;不要相信 LLM 来判断「这条命令属于哪一档」——硬编码 regex 兜底，再让 LLM 做语义补充判断&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;phase-2week-2-3反馈回路--让军团知道上次干得好不好&quot;&gt;Phase 2（Week 2-3）：反馈回路 — 让军团知道「上次干得好不好」&lt;/h3&gt;

&lt;p&gt;没有反馈的 AI 军团就是失控的流水线。Phase 2 解决：怎么把「线上出问题了」「用户报 bug 了」「监控异常了」自动喂回军团。&lt;/p&gt;

&lt;h4 id=&quot;321-监控--issue-tracker-自建桥&quot;&gt;3.2.1 监控 → issue tracker 自建桥&lt;/h4&gt;

&lt;p&gt;最常见的回路：&lt;strong&gt;错误监控（Sentry / Bugsnag / 自建）→ issue tracker（Jira / GitHub Issues / 自建）→ PM agent 接单&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;关键工程要素：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;准入阈值&lt;/strong&gt;：不是每个监控告警都建 issue。典型准入条件：
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;events &amp;gt; 10 (短时间复现 10 次以上)
AND affected_users &amp;gt; 3
AND level &amp;gt;= error
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;p&gt;否则会把 PM agent 淹没在噪音里。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;去重&lt;/strong&gt;：监控系统的 issue_id 进 issue tracker 的某个字段（keywords / labels），24h Redis SET 防重复建单。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;反向回填&lt;/strong&gt;：PR 描述自动带 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Closes #123&lt;/code&gt;，merge 后通过 Git 平台 webhook 反向把 issue 标 resolved。这一步看起来微不足道，但少了它整条回路就是单向的，PM agent 不知道自己上次提的 PR 到底解决问题了没有。&lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&quot;322-pm-agent-接单-prompt-模板&quot;&gt;3.2.2 PM agent 接单 prompt 模板&lt;/h4&gt;

&lt;p&gt;PM 不写代码，只判断。短 context、JSON 输出：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;你是军团的 PM。下面是一个监控触发的新 bug：
{bug 详情 + stack trace + 最近 10 个相关 commit}

判断：
1. 这个 bug 能不能 AI 自动修？(YES / NO / NEED_INFO)
2. 如果 YES，列出最多 5 步修复计划
3. 如果 NO，说明为什么需要人介入
4. risk 评级 (low / mid / high)

只输出 JSON，不写代码。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;PM 判 YES 才 spawn 一个 worker（独立 worktree）去实际修。&lt;/p&gt;

&lt;h4 id=&quot;323-24h-后部署监控&quot;&gt;3.2.3 24h 后部署监控&lt;/h4&gt;

&lt;p&gt;部署完不是结束。Phase 2 的最后一块：&lt;strong&gt;部署后 24h 内同 issue 复发 → 自动回滚 + P0 告警&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;这一步逼着你把回滚做成单一入口（一个 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rollback.sh&lt;/code&gt;，不是各种 ad-hoc 操作的集合）。一旦做了，整个团队的 incident 响应都受益。&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;phase-3week-4-6canary-gate--解锁-orange-级自动化&quot;&gt;Phase 3（Week 4-6）：Canary Gate — 解锁 ORANGE 级自动化&lt;/h3&gt;

&lt;p&gt;最重的一步。做完之后 AI 真能「自己 push beta」。&lt;/p&gt;

&lt;h4 id=&quot;331-流量切分&quot;&gt;3.3.1 流量切分&lt;/h4&gt;

&lt;p&gt;不管你跑 k8s / docker / 物理机，核心是&lt;strong&gt;让两个版本同时跑&lt;/strong&gt;，按流量比例分配：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;入口层（nginx / envoy / 云负载均衡）配 5% 流量到新版本 pod&lt;/li&gt;
  &lt;li&gt;95% 流量保留旧版本&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;实现方式很多：nginx &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;split_clients&lt;/code&gt;、envoy weighted clusters、k8s Argo Rollouts / Flagger、各家云原生 canary 方案。挑一个能在 30 秒内回切的就行。&lt;/p&gt;

&lt;h4 id=&quot;332-slo-自动判定&quot;&gt;3.3.2 SLO 自动判定&lt;/h4&gt;

&lt;p&gt;选三个核心指标做 AND 判定：&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;HTTP 5xx 率&lt;/td&gt;
      &lt;td&gt;canary ≤ 旧版 + 0.5%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;核心接口 P95 延迟&lt;/td&gt;
      &lt;td&gt;canary ≤ 旧版 × 1.2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;业务关键失败率（如下单失败 / agent run 失败）&lt;/td&gt;
      &lt;td&gt;canary ≤ 旧版 + 1%&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;30 分钟观察窗口内全部满足 → 切 100% + 通知；任意一项不满足 → 自动 revert + 监控留痕。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;重要&lt;/strong&gt;：三指标 AND 而不是 OR。OR 会让噪音指标误触发回滚，AND 让回滚信号干净。&lt;/p&gt;

&lt;h4 id=&quot;333-pr-风险评分&quot;&gt;3.3.3 PR 风险评分&lt;/h4&gt;

&lt;p&gt;PM agent 在 PR 合并前算一个 risk score：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;risk_score = w1 * touches_auth +
             w2 * touches_billing +
             w3 * touches_migration +
             w4 * (lines_changed &amp;gt; 500) +
             w5 * touches_critical_path
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;risk = low&lt;/code&gt;（UI 文案 / 文档 / 单测 / 内部工具）：canary 通过即自动 merge + deploy&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;risk = mid&lt;/code&gt;（业务逻辑、新 API）：canary 通过 + 人点一次 yes&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;risk = high&lt;/code&gt;（auth / billing / migration）：永远人 review 全 diff&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;touches_critical_path&lt;/code&gt; 用 git log heatmap 加权——历史上被反复修改的文件大概率是核心路径。&lt;/p&gt;

&lt;h4 id=&quot;334-回滚演练&quot;&gt;3.3.4 回滚演练&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;每周让 Auditor 跑一次「故意失败的 canary」&lt;/strong&gt;，确认回滚链路活着。&lt;/p&gt;

&lt;p&gt;很多团队搭完 canary 就放在那不演练，等到真出事的时候才发现回滚脚本里某个环境变量上个月就 broken 了。&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;phase-4持续金字塔常驻&quot;&gt;Phase 4（持续）：金字塔常驻&lt;/h3&gt;

&lt;p&gt;前三步做完，最后这一步把军团变成 24h 跑的常驻系统。&lt;/p&gt;

&lt;h4 id=&quot;341-pm-常驻-cron&quot;&gt;3.4.1 PM 常驻 cron&lt;/h4&gt;

&lt;p&gt;每天早上一个固定时间触发：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;扫产品文档系统过去 24h 更新的 PRD&lt;/li&gt;
  &lt;li&gt;扫 issue tracker 新 P0/P1 bug&lt;/li&gt;
  &lt;li&gt;扫 IM 群里 @我或 @机器人 的消息&lt;/li&gt;
  &lt;li&gt;输出一份 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;briefing.md&lt;/code&gt;，列出「今天打算让军团干啥」&lt;/li&gt;
  &lt;li&gt;等你 ack 一次（每天 1 次 ack 比每个任务 1 次 ack 划算 10×）&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;342-worker-pool&quot;&gt;3.4.2 Worker pool&lt;/h4&gt;

&lt;p&gt;用你的 Code Agent 起 3-7 个 worktree-isolated worker（每个 worker 独立分支 + 独立 PR + 独立任务绑定）。worker 之间不互相依赖；冲突由 PM 重排。&lt;/p&gt;

&lt;h4 id=&quot;343-auditor-巡检-routine&quot;&gt;3.4.3 Auditor 巡检 routine&lt;/h4&gt;

&lt;p&gt;每 4h 跑一次便宜模型巡检：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;stale container / drift env / 过期 secret&lt;/li&gt;
  &lt;li&gt;待合 PR &amp;gt; 24h → 提醒 PM 复审&lt;/li&gt;
  &lt;li&gt;待办 issue &amp;gt; 7 天 → 标 stale&lt;/li&gt;
  &lt;li&gt;输出审计日志&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;344-每晚日报&quot;&gt;3.4.4 每晚日报&lt;/h4&gt;

&lt;p&gt;22 点 cron 自动汇总当天：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;开了几个 PR / 合了几个 / 修了几个 bug&lt;/li&gt;
  &lt;li&gt;canary 触发次数 / 回滚次数&lt;/li&gt;
  &lt;li&gt;触发了几次 RED 拦截（被拦的命令 + 原因）&lt;/li&gt;
  &lt;li&gt;推送到你的 IM 私聊&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-红线清单永不解锁&quot;&gt;4. 红线清单（永不解锁）&lt;/h2&gt;

&lt;p&gt;不管军团多成熟，以下动作永远人 ack：&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 class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt; 到主干分支&lt;/td&gt;
      &lt;td&gt;不可逆 + 影响 prod&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git reset --hard&lt;/code&gt; 共享分支&lt;/td&gt;
      &lt;td&gt;吃别人的 commit&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;生产环境 DB migration&lt;/td&gt;
      &lt;td&gt;高风险 + 难回滚&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;真钱支付接口（Stripe live / 银联 / 支付宝）写操作&lt;/td&gt;
      &lt;td&gt;涉及真钱&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;改生产环境 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.env&lt;/code&gt; / secret&lt;/td&gt;
      &lt;td&gt;配置隔离原则&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;删除 K8s namespace / 集群&lt;/td&gt;
      &lt;td&gt;灾难性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;业务定价 / 产品取舍 / PRD 决策&lt;/td&gt;
      &lt;td&gt;需人判断&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;首次接入新外部 API（OIDC / 支付 / 跨境合规）&lt;/td&gt;
      &lt;td&gt;LLM 容易脑补字段、踩 schema 坑&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kubectl delete&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;terraform destroy&lt;/code&gt; 生产资源&lt;/td&gt;
      &lt;td&gt;灾难性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;直接 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;curl&lt;/code&gt; 生产 API（绕过封装好的 CLI）&lt;/td&gt;
      &lt;td&gt;容易传错 header / 缺鉴权&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;红线判定不要依赖 LLM——&lt;strong&gt;硬编码 regex grep 兜底，模式匹配在前，LLM 推理在后&lt;/strong&gt;。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;5-度量指标&quot;&gt;5. 度量指标&lt;/h2&gt;

&lt;h3 id=&quot;51-健康指标每天看&quot;&gt;5.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;AI 提 PR / 总 PR&lt;/td&gt;
      &lt;td&gt;自动化覆盖率，目标 70%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PR 平均人工接触次数&lt;/td&gt;
      &lt;td&gt;目标 1 次（仅看 canary 报告）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;每天 ack 次数&lt;/td&gt;
      &lt;td&gt;目标 ≤ 5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;P2/P3 bug 响应时长&lt;/td&gt;
      &lt;td&gt;目标 ≤ 20min&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;canary 回滚成功率&lt;/td&gt;
      &lt;td&gt;目标 ≥ 99%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;RED 规则拦截次数&lt;/td&gt;
      &lt;td&gt;突增表示规则误判或 PM 走偏&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;灰度逃逸次数（线上才发现的回归）&lt;/td&gt;
      &lt;td&gt;目标 0&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;52-异常告警&quot;&gt;5.2 异常告警&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;canary_rollback&lt;/code&gt; 24h &amp;gt; 3 → 暂停 Phase 3 自动化&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;red_line_blocked&lt;/code&gt; 1h &amp;gt; 5 → 检查规则误判&lt;/li&gt;
  &lt;li&gt;PM 决策 reject 率 &amp;gt; 30% → PM prompt 需要调&lt;/li&gt;
  &lt;li&gt;任意 RED 规则被绕过 → P0 告警&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;53-阶段目标&quot;&gt;5.3 阶段目标&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;每日 ack 次数&lt;/th&gt;
      &lt;th&gt;AI PR 生命周期&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;起点&lt;/td&gt;
      &lt;td&gt;35%&lt;/td&gt;
      &lt;td&gt;15+&lt;/td&gt;
      &lt;td&gt;6h&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Phase 1 末&lt;/td&gt;
      &lt;td&gt;50%&lt;/td&gt;
      &lt;td&gt;9&lt;/td&gt;
      &lt;td&gt;4h&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Phase 2 末&lt;/td&gt;
      &lt;td&gt;65%&lt;/td&gt;
      &lt;td&gt;7&lt;/td&gt;
      &lt;td&gt;2h&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Phase 3 末&lt;/td&gt;
      &lt;td&gt;80%&lt;/td&gt;
      &lt;td&gt;5&lt;/td&gt;
      &lt;td&gt;1h&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;稳态&lt;/td&gt;
      &lt;td&gt;85%&lt;/td&gt;
      &lt;td&gt;3-5&lt;/td&gt;
      &lt;td&gt;30min&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;6-主要风险与缓解&quot;&gt;6. 主要风险与缓解&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;规则误判导致 GREEN 动作误删 prod 数据&lt;/td&gt;
      &lt;td&gt;YELLOW 以上全部走 git，永不直接改 prod 数据&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;监控噪音淹没 issue tracker&lt;/td&gt;
      &lt;td&gt;阈值（events&amp;gt;10 + users&amp;gt;3）+ 24h 去重&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Canary watcher 误判通过 → 灰度逃逸&lt;/td&gt;
      &lt;td&gt;三指标 AND + 前 10 次人 spot check&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PM agent 把红线问题判成 auto&lt;/td&gt;
      &lt;td&gt;red_list 硬编码 grep 兜底，不依赖 LLM&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Worker 之间 worktree 冲突&lt;/td&gt;
      &lt;td&gt;PM 拆任务时强制单文件夹独占&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Token 成本爆炸&lt;/td&gt;
      &lt;td&gt;强模型限 50K context；便宜模型占调用量 60%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;整个军团失控&lt;/td&gt;
      &lt;td&gt;留一个总开关：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;echo PAUSE &amp;gt; army-state&lt;/code&gt;，所有 cron 启动前 check&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;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# 紧急停军团&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;PAUSE&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; ~/.army-state

&lt;span class=&quot;c&quot;&gt;# 所有 cron routine 启动前的第一行&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;[[&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; ~/.army-state 2&amp;gt;/dev/null&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;PAUSE&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;exit &lt;/span&gt;0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;简单粗暴，但比任何花哨的 feature flag 系统都靠谱。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;7-入门-poc-优先级&quot;&gt;7. 入门 PoC 优先级&lt;/h2&gt;

&lt;p&gt;不要试图一次性搭完所有 Phase。按「能跑通即看到价值」排序，每个 PoC 1 周内做完：&lt;/p&gt;

&lt;h3 id=&quot;poc-1低优先级-bug--pr--im-汇报-推荐起点&quot;&gt;PoC 1：低优先级 bug → PR → IM 汇报 ★推荐起点&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;为什么&lt;/strong&gt;：bug 边界清晰、有客观验收（复现 + 测试通过）、失败成本极低&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;范围&lt;/strong&gt;：只接 P2/P3 + 标签 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-eligible&lt;/code&gt; 的 bug&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;不接&lt;/strong&gt;：P0/P1（涉判断）、auth/billing 类（红线）&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;验收&lt;/strong&gt;：1 周跑通 3-5 个 bug，PM 决策准确率 &amp;gt; 80%&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;poc-2依赖升级--测试回归&quot;&gt;PoC 2：依赖升级 + 测试回归&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;为什么&lt;/strong&gt;：纯机械、有 audit 客观信号（npm audit / cargo audit / pip-audit）&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;范围&lt;/strong&gt;：minor / patch 自动 PR，major 走人 review&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;配套&lt;/strong&gt;：类似 Renovate / Dependabot 思路，但用 PM agent 做「哪些 major 该手动 review」判断&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;poc-3文档--i18n-同步&quot;&gt;PoC 3：文档 / i18n 同步&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;为什么&lt;/strong&gt;：纯文本变更、零 prod 风险&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;范围&lt;/strong&gt;：英文文案落地后自动补 zh/ja；架构文档改动同步到 onboarding 文档&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;价值&lt;/strong&gt;：练手 + 把军团基础设施跑顺&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;poc-4跨系统巡检日报&quot;&gt;PoC 4：跨系统巡检日报&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;为什么&lt;/strong&gt;：纯读、0 风险、立即看到「军团在干啥」&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;范围&lt;/strong&gt;：Git 平台 PR / issue tracker / 监控告警 / 容器健康&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;产出&lt;/strong&gt;：每天固定时间 IM 推送&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;不推荐先做的-poc&quot;&gt;不推荐先做的 PoC&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Feature 开发&lt;/strong&gt;：太大、太多业务判断，先把基础设施跑顺&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Canary deploy&lt;/strong&gt;：基础设施投入 2 周起步，放到 Phase 3&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PRD → 任务自动拆解&lt;/strong&gt;：判断密集，留给 PM agent 成熟后做&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;8-投入产出预估&quot;&gt;8. 投入产出预估&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;th&gt;月节省（按 ack 时长）&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Phase 1&lt;/td&gt;
      &lt;td&gt;2 工作日&lt;/td&gt;
      &lt;td&gt;0.5h&lt;/td&gt;
      &lt;td&gt;~15h&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Phase 2&lt;/td&gt;
      &lt;td&gt;5 工作日&lt;/td&gt;
      &lt;td&gt;1h&lt;/td&gt;
      &lt;td&gt;~20h&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Phase 3&lt;/td&gt;
      &lt;td&gt;10 工作日&lt;/td&gt;
      &lt;td&gt;2h&lt;/td&gt;
      &lt;td&gt;~30h&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Phase 4&lt;/td&gt;
      &lt;td&gt;持续&lt;/td&gt;
      &lt;td&gt;2h&lt;/td&gt;
      &lt;td&gt;~10h&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;合计&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;17 工作日&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;5.5h/周&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;~75h/月&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;按月 22 工作日 × 8h = 176h，节省 75h ≈ 42% 个人时间。&lt;/p&gt;

&lt;p&gt;考虑到节省的不只是时间，更是「上下文切换成本」，实际感受会更显著。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;9-常见误区&quot;&gt;9. 常见误区&lt;/h2&gt;

&lt;h3 id=&quot;91-先把-prompt-调好再说基础设施&quot;&gt;9.1 「先把 prompt 调好再说基础设施」&lt;/h3&gt;

&lt;p&gt;错。Prompt 优化的边际收益很快递减；工程闭环才是真正的护城河。&lt;/p&gt;

&lt;p&gt;一支基础设施完备的军团 + 平庸 prompt &amp;gt; 顶级 prompt + 没有反馈回路。&lt;/p&gt;

&lt;h3 id=&quot;92-llm-越强越好全用-opus&quot;&gt;9.2 「LLM 越强越好，全用 Opus」&lt;/h3&gt;

&lt;p&gt;错。Opus 干 Haiku 能干的活，是给账单送钱。Token 成本是真实约束，按职责分模型才能跑长期。&lt;/p&gt;

&lt;h3 id=&quot;93-不需要-pm-agent让-sonnet-自己接单&quot;&gt;9.3 「不需要 PM agent，让 Sonnet 自己接单」&lt;/h3&gt;

&lt;p&gt;错。Sonnet 接单容易在「这个 bug 该不该自动修」上犯错（典型：把涉及 auth 的 bug 判成 low risk）。PM 用强模型保判断质量，是性价比最高的一笔投资。&lt;/p&gt;

&lt;h3 id=&quot;94-canary-太重跳过这步&quot;&gt;9.4 「Canary 太重，跳过这步」&lt;/h3&gt;

&lt;p&gt;错。Canary 不是为了赶时髦的高级 SRE 实践，是为了&lt;strong&gt;把人从「ack 每个 PR」解放到「看灰度报告」&lt;/strong&gt;。没有 canary，Phase 3 永远做不到 80% 自动化。&lt;/p&gt;

&lt;h3 id=&quot;95-记忆系统能替代规则系统&quot;&gt;9.5 「记忆系统能替代规则系统」&lt;/h3&gt;

&lt;p&gt;错。记忆是软约束（LLM 可能选择不遵守），规则是硬约束（hook 直接拦）。RED 红线必须走规则，不能寄希望于「我在 memory 里写过了模型会记得」。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;10-一句话总结&quot;&gt;10. 一句话总结&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;这不是「让 AI 替你工作」，而是「把你从 ack 机器变回决策者」。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;军团的本质：让你只关心 RED 类决策 + 周/月级方向，把 GREEN/YELLOW/ORANGE 全卷进流水线。&lt;/p&gt;

&lt;p&gt;可以达到 85% 的稳态，但前提是花两周把基础设施（permission matrix + canary）搭对——不是堆 prompt，是搭工程闭环。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;11-具体案例gitlab--zentao--confluence--企微--sentrygrafana&quot;&gt;11. 具体案例：GitLab + ZenTao + Confluence + 企微 + Sentry/Grafana&lt;/h2&gt;

&lt;p&gt;下面用一个国内中型研发团队常见栈，给出一份&lt;strong&gt;可直接照抄的军团编制&lt;/strong&gt;。规模假设：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;10-20 人研发团队&lt;/li&gt;
  &lt;li&gt;1 个主产品 + 2-3 个内部工具&lt;/li&gt;
  &lt;li&gt;已有 GitLab self-hosted、ZenTao 项目管理、Confluence 知识库、企微办公、Sentry 错误监控、Grafana 指标看板&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;111-工具链职责映射&quot;&gt;11.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;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;GitLab&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;代码 + MR + CI + webhook 总线&lt;/td&gt;
      &lt;td&gt;Worker / Auditor&lt;/td&gt;
      &lt;td&gt;Worker（开 MR）/ PM（merge 决策）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;ZenTao&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;任务/bug 调度中心（军团的「工单池」）&lt;/td&gt;
      &lt;td&gt;PM（接单）/ Auditor（巡检）&lt;/td&gt;
      &lt;td&gt;PM（建任务）/ Worker（标进度）/ Bridge（自动建单）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Confluence&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;PRD / 决策文档 / 周报存档&lt;/td&gt;
      &lt;td&gt;PM（早会扫描）/ Worker（取需求）&lt;/td&gt;
      &lt;td&gt;PM（写 briefing）/ Auditor（写日报）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;企微&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;唯一通知出口 + 唯一 ack 入口&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
      &lt;td&gt;PM / Auditor（推送）/ 你（@回复 ack）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Sentry&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;线上错误信号源&lt;/td&gt;
      &lt;td&gt;Bridge（轮询 / webhook）/ Auditor（24h 监控）&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Grafana&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;指标信号源（canary SLO 判定）&lt;/td&gt;
      &lt;td&gt;Canary Watcher / Auditor&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;关键设计&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;企微是唯一的人机交互通道&lt;/strong&gt;。不要让军团从 IM / 邮件 / Slack 多通道喂消息——你会漏。所有 ack、所有告警、所有日报都收敛到一个企微群（@机器人 + 你私聊）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;ZenTao 是军团的事实任务源&lt;/strong&gt;。哪怕 bug 来自 Sentry、需求来自 Confluence，最终都得在 ZenTao 落一条记录，PM 才接得到。没在 ZenTao 的需求军团一律不接（避免歧义）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;GitLab webhook 是反馈回路的脊柱&lt;/strong&gt;。MR 状态变化、Pipeline 成败、Sentry 关联 issue 都靠 GitLab webhook 串起来。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;112-军团编制表&quot;&gt;11.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;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;PM Lead&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Opus 4.7&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;每天 9:00 cron + 反应式（@机器人 / Sentry P0 / ZenTao 新 P0）&lt;/td&gt;
      &lt;td&gt;50K&lt;/td&gt;
      &lt;td&gt;接单 / 拆解 / 派工 / 验收 / 走 RED 时给你提 ack&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Worker&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Sonnet 4.6&lt;/td&gt;
      &lt;td&gt;5&lt;/td&gt;
      &lt;td&gt;PM 派单 spawn（worktree 隔离）&lt;/td&gt;
      &lt;td&gt;100K&lt;/td&gt;
      &lt;td&gt;拉分支 / 改代码 / 跑测试 / 开 MR / 标 ZenTao 进度&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Reviewer&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Sonnet 4.6&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;MR 开了即触发&lt;/td&gt;
      &lt;td&gt;80K&lt;/td&gt;
      &lt;td&gt;代码 review（功能 + 风格 + 测试覆盖）/ 给 LGTM 或要求改&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Security Auditor&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Sonnet 4.6&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;MR 开了即触发（与 Reviewer 并行）&lt;/td&gt;
      &lt;td&gt;80K&lt;/td&gt;
      &lt;td&gt;OWASP 扫描 / secret 泄露检查 / 鉴权变更告警&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Canary Watcher&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Haiku 4.5&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;MR merge 后部署 beta 时触发，常驻 30min&lt;/td&gt;
      &lt;td&gt;20K&lt;/td&gt;
      &lt;td&gt;Grafana 三指标抽样 / SLO 判定 / 触发 promote 或 rollback&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Sentry Bridge&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Haiku 4.5&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;Sentry webhook 触发&lt;/td&gt;
      &lt;td&gt;10K&lt;/td&gt;
      &lt;td&gt;阈值过滤 / 去重 / 建 ZenTao bug / 反向回填&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Patrol Auditor&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Haiku 4.5&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;每 4h cron&lt;/td&gt;
      &lt;td&gt;30K&lt;/td&gt;
      &lt;td&gt;stale MR / stale 容器 / 过期 secret / drift 检查&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Daily Reporter&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Haiku 4.5&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;每天 22:00 cron&lt;/td&gt;
      &lt;td&gt;40K&lt;/td&gt;
      &lt;td&gt;汇总当天动作 / 写 Confluence 日报 / 推企微&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;编制小计&lt;/strong&gt;：1 Opus + 8 Sonnet + 4 Haiku = &lt;strong&gt;13 个 agent 槽位&lt;/strong&gt;，并发上限 7（受 Claude Code &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/team&lt;/code&gt; 限制），实际同时活跃的 ~3-5 个。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;月 token 预算估算&lt;/strong&gt;（中等活跃度，按 2026-05 价格）：&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;平均 token&lt;/th&gt;
      &lt;th&gt;月成本&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;PM Lead (Opus)&lt;/td&gt;
      &lt;td&gt;~150&lt;/td&gt;
      &lt;td&gt;30K in / 5K out&lt;/td&gt;
      &lt;td&gt;~$200&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Worker × 5 (Sonnet)&lt;/td&gt;
      &lt;td&gt;~600&lt;/td&gt;
      &lt;td&gt;60K in / 15K out&lt;/td&gt;
      &lt;td&gt;~$300&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Reviewer + Security (Sonnet)&lt;/td&gt;
      &lt;td&gt;~400&lt;/td&gt;
      &lt;td&gt;40K in / 8K out&lt;/td&gt;
      &lt;td&gt;~$120&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Haiku × 4&lt;/td&gt;
      &lt;td&gt;~3000&lt;/td&gt;
      &lt;td&gt;15K in / 3K out&lt;/td&gt;
      &lt;td&gt;~$80&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;td&gt;&lt;strong&gt;~$700/月&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;按节省 75h/月 × 时薪保守 ¥200 计，月节省 ~¥15000，ROI ≈ 3×。&lt;/p&gt;

&lt;h3 id=&quot;113-端到端流程图sentry-告警--自动-pr--合并&quot;&gt;11.3 端到端流程图：Sentry 告警 → 自动 PR → 合并&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;┌─────────────┐
│   Sentry    │  events&amp;gt;10 &amp;amp;&amp;amp; users&amp;gt;3 &amp;amp;&amp;amp; level&amp;gt;=error
│  (prod alert)│
└──────┬──────┘
       │ webhook
       ▼
┌──────────────────┐
│ Sentry Bridge    │  Haiku · 阈值 + 去重 + 建单
│ (Haiku 4.5)      │
└──────┬───────────┘
       │ POST /zentao/api/bugs (label=auto-sentry)
       ▼
┌──────────────────┐
│   ZenTao         │  新 bug · 等 PM 扫描
│   bug pool       │
└──────┬───────────┘
       │ 15min cron 扫描
       ▼
┌──────────────────┐         ┌──────────────────────┐
│ PM Lead          │ ─────►  │ 红线检查 (硬编码 grep)│
│ (Opus 4.7)       │ ◄─────  │ 命中 RED → 转人 ack   │
└──────┬───────────┘         └──────────────────────┘
       │ 判定 = auto · risk = low/mid
       │ spawn worker (worktree 隔离)
       ▼
┌──────────────────┐
│ Worker N         │  Sonnet · 改代码 · 跑测试 · 开 MR
│ (Sonnet 4.6)     │
└──────┬───────────┘
       │ git push + MR (描述带 &quot;Resolves zt#xxx&quot;)
       ▼
┌──────────────────┐
│   GitLab         │  CI 跑 lint + 单测 + 构建
│   MR             │
└──────┬───────────┘
       │ webhook: pipeline succeeded
       ▼
┌──────────────────┐ ┌──────────────────┐
│ Reviewer         │ │ Security Auditor │  并行
│ (Sonnet 4.6)     │ │ (Sonnet 4.6)     │
└──────┬───────────┘ └────────┬─────────┘
       │ 双 LGTM       │
       └───────┬───────┘
               ▼
    ┌─────────────────────┐
    │ PM Lead 二次验收     │  risk 评级 + 决策
    │ (Opus 4.7)          │
    └──────────┬──────────┘
               │
        ┌──────┴──────┐
   risk=low      risk=mid/high
        │              │
        ▼              ▼
  auto-merge      企微 @你 ack
        │              │
        └──────┬───────┘
               ▼
    ┌─────────────────────┐
    │  GitLab merge       │  → CI 部署到 beta canary
    └──────────┬──────────┘
               │
               ▼
    ┌─────────────────────┐
    │ Canary Watcher      │  Haiku · 抽样 Grafana 30min
    │ (Haiku 4.5)         │
    └──────────┬──────────┘
               │
        ┌──────┴──────┐
   SLO 通过         SLO 失败
        │              │
        ▼              ▼
   promote 100%   auto-rollback
        │              │
        └──────┬───────┘
               ▼
    ┌─────────────────────┐
    │ 反向回填 ZenTao bug  │  status=resolved + MR 链接
    └──────────┬──────────┘
               │
               ▼
    ┌─────────────────────┐
    │ 企微通知（你 + 群）   │  ✅ zt#xxx 已修复（MR !123）
    └─────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;114-pm-早会流程图900-cron-一次性-ack&quot;&gt;11.4 PM 早会流程图：9:00 cron 一次性 ack&lt;/h3&gt;

&lt;p&gt;PM 不在每个任务上找你，而是每天早 9 点一次性给你一份「今天打算干啥」的 briefing：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;09:00 cron 触发
   │
   ├─► 拉 Confluence 过去 24h 更新的 PRD
   │      └─► 摘要每篇 PRD 的核心变更
   │
   ├─► 拉 ZenTao 新 P0/P1 bug
   │      └─► 按红线 grep 过滤
   │
   ├─► 拉企微 @机器人 消息（昨日 19:00 - 今早 9:00）
   │
   ├─► 拉 GitLab 待合 MR（昨日新开 + 已挂 24h+）
   │
   └─► 输出 Confluence 页面《YYYY-MM-DD 军团 briefing》
          ├─ 今日计划自动派工（YELLOW，事后报）
          ├─ 今日计划走 canary（ORANGE，看灰度报告）
          ├─ 需你决策（RED，列具体 ack 点）
          └─ 推企微卡片 → @你 → 一次 ack
                            │
                            ▼
                       军团整天按 briefing 跑
                       异常才再次打扰你
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;关键&lt;/strong&gt;：briefing 不是「请求批准」，而是「我准备这么干，除非你拦」。默认 30 分钟没回复就开跑（GREEN/YELLOW 部分），RED 部分等到回复才动。&lt;/p&gt;

&lt;h3 id=&quot;115-角色协作时序图一个典型-bug-修复&quot;&gt;11.5 角色协作时序图：一个典型 bug 修复&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;时间   Sentry  Bridge  ZenTao  PM   Worker  GitLab Reviewer SecAud Watcher 企微  你
─────────────────────────────────────────────────────────────────────────────────
10:14  alert
10:14   ──►  filter
10:14         ──►   create bug
10:30                       scan (cron)
10:31                       judge: auto / low
10:32                       ──► spawn worker-3
10:32 ────────────────────────────► clone / branch
10:45                                ──► run tests · open MR !456
10:46                                ──►   CI pipeline start
10:52                                ──►   pipeline ok
10:53                                      ──►  review start ──► review start
10:58                                      ──►  LGTM       ──►  no issue
10:58                       verify: risk=low
10:59                       ──► auto-merge
11:00                                ──► merge !456
11:01                                ──► deploy beta canary
11:01                                                              ──► watch 30min
11:31                                                              ──► SLO ok
11:32                                                              ──► promote 100%
11:32         ◄── webhook: MR merged
11:32         ──► ZenTao bug status=resolved
11:33                                                                     ──► 卡片: zt#xxx ✅ → 私聊
11:33                                                                              ──► you see ✓
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;全程 79 分钟无人介入&lt;/strong&gt;。你在 11:33 看到企微卡片，确认这条修复链路按预期跑完——以前需要 4h+ 你在线响应、5 次以上 ack 的工作。&lt;/p&gt;

&lt;h3 id=&quot;116-部署到企微的两条铁律&quot;&gt;11.6 部署到企微的两条铁律&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;一个 bot 对应一个用途&lt;/strong&gt;。不要让”军团 bot”同时发日报、ack 请求、监控告警——你会盲点。建议：
    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;军团-播报&lt;/code&gt; 群机器人 → 日报 / 一般通知（你可以静音）&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;军团-ack&lt;/code&gt; 群机器人 → 需要决策的 RED 类消息（不能静音）&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;军团-告警&lt;/code&gt; 群机器人 → P0 / canary 回滚 / 红线绕过（最高优先级）&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;企微消息卡片要带”一键操作”&lt;/strong&gt;。不要让你在企微看完还要切到 ZenTao / GitLab 才能操作。卡片里直接埋 deep link：
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;┌───────────────────────────────────────┐
│ 🟡 zt#1234 准备 auto-merge !456       │
│ risk=low · CI passed · 双 LGTM        │
│ ─────────────────────────────────────│
│ [批准合并]  [改 high]  [看 diff]      │
└───────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;p&gt;每个按钮调企微回调到你的网关，触发对应动作。&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;117-这套案例最容易踩的-3-个坑&quot;&gt;11.7 这套案例最容易踩的 3 个坑&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;ZenTao API 限流&lt;/strong&gt;。Sentry Bridge 高峰期一秒建 10 条 bug，ZenTao 直接 429。解决：Bridge 加 token bucket（5 req/s），Sentry side 加 windowed 聚合。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Confluence 写入幂等问题&lt;/strong&gt;。Daily Reporter 22:00 跑，如果失败重试，会重复创建当天报告。解决：用「日期 + 类型」做幂等键，存在即更新而非新建。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;企微 webhook 不支持高交互卡片&lt;/strong&gt;。原生 webhook 卡片按钮回调要走自建网关。如果你不想搭网关，退而求其次用「回复关键字」：你在群里回复 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ack 1234&lt;/code&gt; 也能触发军团 ack 流程，PM 监听企微消息即可。&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;附录技术选型建议&quot;&gt;附录：技术选型建议&lt;/h2&gt;

&lt;h3 id=&quot;模型分层&quot;&gt;模型分层&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;层&lt;/th&gt;
      &lt;th&gt;推荐模型&lt;/th&gt;
      &lt;th&gt;替代&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;PM&lt;/td&gt;
      &lt;td&gt;Claude Opus 4.7 / GPT-5 类强推理模型&lt;/td&gt;
      &lt;td&gt;Claude Sonnet 4.6（预算紧）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Worker&lt;/td&gt;
      &lt;td&gt;Claude Sonnet 4.6 / GPT-4o 类性价比模型&lt;/td&gt;
      &lt;td&gt;DeepSeek 类开源备选&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Auditor&lt;/td&gt;
      &lt;td&gt;Claude Haiku 4.5 / Gemini Flash 类便宜快模型&lt;/td&gt;
      &lt;td&gt;任意小模型&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;agent-容器&quot;&gt;Agent 容器&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Claude Code&lt;/strong&gt;：原生支持 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/team&lt;/code&gt;、worktree 隔离、hook、cron，写本文时综合最成熟&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Cursor / Windsurf&lt;/strong&gt;：IDE 集成最好，但多 agent 编队需要自己搭&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Aider / OpenHands&lt;/strong&gt;：开源派，灵活但要自己搭基础设施&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;自建 Agent&lt;/strong&gt;：用 LangGraph / AutoGen / Anthropic SDK 直接搭，最大自由度但工程投入最大&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;不论选哪个，三层架构 + 红线 + canary 的核心原则不变。&lt;/p&gt;

&lt;h3 id=&quot;反馈回路所需基础设施&quot;&gt;反馈回路所需基础设施&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;监控&lt;/strong&gt;：Sentry / Bugsnag / Datadog / 自建 ELK 任选其一&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Issue tracker&lt;/strong&gt;：Jira / Linear / GitHub Issues / GitLab Issues 任选其一，要有 API&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Git 平台&lt;/strong&gt;：GitHub / GitLab / Gitea / 自建，要有 webhook&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;IM 通知&lt;/strong&gt;：Slack / Discord / Telegram / 企微 / 飞书，任意能接 webhook 的都行&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;流量切分&lt;/strong&gt;：nginx / envoy / Argo Rollouts / Flagger / 各家云原生&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;每一项都不强求「最好」，强求&lt;strong&gt;有 API 可编程&lt;/strong&gt;。&lt;/p&gt;</content>
    <category term="AI军团"/>
    <category term="Claude Code"/>
    <category term="工程化"/>
    <category term="自动化"/>
    <summary type="html">从单兵 Copilot 升级到 PM/Worker/Auditor 三层架构 AI 军团的 4-6 周施工路线图，含 GitLab + ZenTao + Confluence + 企微 + Sentry/Grafana 完整案例编制。</summary>
  </entry>
  <entry>
    <title type="html">游戏引擎实时渲染 vs AIGC 生成：短剧工艺可行性评估</title>
    <link href="https://jinzi.cyou/posts/2026-05-11-game-engine-vs-aigc-pipeline-feasibility/" rel="alternate" type="text/html" title="游戏引擎实时渲染 vs AIGC 生成：短剧工艺可行性评估"/>
    <published>2026-05-11T04:00:00+00:00</published>
    <updated>2026-05-11T04:00:00+00:00</updated>
    <id>https://jinzi.cyou/posts/game-engine-vs-aigc-pipeline-feasibility</id>
    <content type="html" xml:base="https://jinzi.cyou/posts/2026-05-11-game-engine-vs-aigc-pipeline-feasibility/">&lt;h2 id=&quot;0-这类3d-同人剧的工艺本质&quot;&gt;0. 这类”3D 同人剧”的工艺本质&lt;/h2&gt;

&lt;p&gt;这类视频本质上&lt;strong&gt;不是 AI 生成&lt;/strong&gt;，而是用 MMORPG（如《剑网3》）的&lt;strong&gt;游戏客户端&lt;/strong&gt;做的同人剧。所谓”场景一致性完美 + 比 AI 好看”的原因：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;每个镜头都是同一份&lt;strong&gt;持久 3D 世界&lt;/strong&gt;（同一份几何 + 材质 + 骨骼 + 光照）的实时渲染快照&lt;/li&gt;
  &lt;li&gt;角色是游戏角色编辑器深度捏脸 + 时装系统 + 第三方外观 mod&lt;/li&gt;
  &lt;li&gt;场景是游戏本体地图 + 家园系统物件摆放&lt;/li&gt;
  &lt;li&gt;镜头是游戏内自由视角（freecam）+ ReShade 后期 LUT&lt;/li&gt;
  &lt;li&gt;多镜跳切无漂移，因为&lt;strong&gt;所有镜头共享同一份 3D 资产&lt;/strong&gt;——这是当前所有 i2v/t2v 模型都做不到的&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;判定特征（怎么一眼认出是游戏引擎拍的）：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;视频里出现游戏标准样式的角色名牌立绘条&lt;/li&gt;
  &lt;li&gt;服饰、骨架、动作都是该游戏典型门派风格&lt;/li&gt;
  &lt;li&gt;群演 NPC、载具、半透片状树叶、雪地材质都是该引擎资源&lt;/li&gt;
  &lt;li&gt;眼睛贴图过亮、皮肤次表面假、嘴唇高光偏卡通——这是上一代 MMO 自研引擎实时渲染的典型特征&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;同类思路还有 MMD 圈（拆 FF14 / 原神模型），是同一方法论的不同载体。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-能否直接复刻到佛经题材项目&quot;&gt;1. 能否直接复刻到佛经题材项目&lt;/h2&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;MMO 仙侠&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;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;现成 MMO 的所有资产（场景/服饰/骨骼/植被）对佛经题材都&lt;strong&gt;零复用&lt;/strong&gt;，必须重做。&lt;/p&gt;

&lt;p&gt;但&lt;strong&gt;思路可移植&lt;/strong&gt;：在另一个引擎里搭建一份”项目专属的持久 3D 世界”，从此每个镜头都是该世界的实时渲染快照。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-替代引擎方案对比&quot;&gt;2. 替代引擎方案对比&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;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;A. UE5 + MetaHuman + Quixel&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Unreal 5.5&lt;/td&gt;
      &lt;td&gt;MetaHuman + CC4&lt;/td&gt;
      &lt;td&gt;Megascans 免费 + Sketchfab/ArtStation 买印度建筑/服饰&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;B. iClone 8 + CC4 → UE5 LiveLink&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;iClone 拍 + UE 渲&lt;/td&gt;
      &lt;td&gt;CC4&lt;/td&gt;
      &lt;td&gt;Reallusion 商店 + 自建&lt;/td&gt;
      &lt;td&gt;中&lt;/td&gt;
      &lt;td&gt;★★★★ 剧情向友好&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;C. Unity HDRP&lt;/td&gt;
      &lt;td&gt;Unity&lt;/td&gt;
      &lt;td&gt;UMA&lt;/td&gt;
      &lt;td&gt;Asset Store&lt;/td&gt;
      &lt;td&gt;中&lt;/td&gt;
      &lt;td&gt;★★★ 资产池不及 UE&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;D. Blender Eevee 实时&lt;/td&gt;
      &lt;td&gt;Blender&lt;/td&gt;
      &lt;td&gt;Daz/自建&lt;/td&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;E. Daz Studio + iClone&lt;/td&gt;
      &lt;td&gt;Daz&lt;/td&gt;
      &lt;td&gt;Genesis 9&lt;/td&gt;
      &lt;td&gt;Daz 商店&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;strong&gt;A 或 B&lt;/strong&gt;。B 更适合剧情向单人作者。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-资产可获得性最大瓶颈&quot;&gt;3. 资产可获得性（最大瓶颈）&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;古印度宫殿 / 精舍 / 竹林精舍&lt;/td&gt;
      &lt;td&gt;Sketchfab / ArtStation 零散，约 30% 可用&lt;/td&gt;
      &lt;td&gt;改建 + 整合需 2-4 周&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;比丘 / 沙门服饰、袈裟&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;几乎没有&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Marvelous Designer 自建，1 件 1-3 天&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;古印度俗人服饰、刹帝利铠&lt;/td&gt;
      &lt;td&gt;少量 Daz / CC4 资产&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;strong&gt;零&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;MetaHuman 改 + ZBrush 雕刻&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;印度植物（菩提、阎浮、莎罗双树）&lt;/td&gt;
      &lt;td&gt;Megascans 有亚热带，需调色&lt;/td&gt;
      &lt;td&gt;中&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;法器（钵、锡杖、贝叶经、佛塔）&lt;/td&gt;
      &lt;td&gt;Sketchfab 零散&lt;/td&gt;
      &lt;td&gt;小量自建&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;印度面孔骨骼比例&lt;/td&gt;
      &lt;td&gt;MetaHuman 调参可达 80%&lt;/td&gt;
      &lt;td&gt;头模改&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;核心痛点&lt;/strong&gt;：佛教题材在全球 3D 资产市场极度冷门，MMO 那种”开箱即拍”在这里不存在。&lt;strong&gt;第一季的资产铺设期会是整个项目最重的成本。&lt;/strong&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-硬件--软件费用&quot;&gt;4. 硬件 &amp;amp; 软件费用&lt;/h2&gt;

&lt;h3 id=&quot;一次性投入人民币&quot;&gt;一次性投入（人民币）&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;项目&lt;/th&gt;
      &lt;th&gt;金额&lt;/th&gt;
      &lt;th&gt;备注&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;RTX 4090 / 5090 整机&lt;/td&gt;
      &lt;td&gt;¥15-25k&lt;/td&gt;
      &lt;td&gt;按小时租的云 GPU 跑 UE 不现实，必须本地&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;iClone 8 + CC4 + plugins&lt;/td&gt;
      &lt;td&gt;约 ¥7k&lt;/td&gt;
      &lt;td&gt;永久&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Marvelous Designer&lt;/td&gt;
      &lt;td&gt;¥3k 永久 / ¥400 月&lt;/td&gt;
      &lt;td&gt;服饰必备&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ZBrush（雕刻头模）&lt;/td&gt;
      &lt;td&gt;¥6k 永久&lt;/td&gt;
      &lt;td&gt;也可订阅&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;初始资产采购（场景+角色+服饰）&lt;/td&gt;
      &lt;td&gt;¥3-15k&lt;/td&gt;
      &lt;td&gt;取决于自建比例&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Mocap（可选）&lt;/td&gt;
      &lt;td&gt;¥0-18k&lt;/td&gt;
      &lt;td&gt;iPhone + Move.ai 起步；正经 Rokoko 套装 ¥18k&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;UE5 / MetaHuman / Quixel&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;¥0&lt;/strong&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;strong&gt;¥30-60k&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;月度运营&quot;&gt;月度运营&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;软件订阅 + 偶发资产：¥500-1500&lt;/li&gt;
  &lt;li&gt;电费：忽略&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;单集边际成本&quot;&gt;单集边际成本&lt;/h3&gt;

&lt;p&gt;电费几十块，&lt;strong&gt;接近 0&lt;/strong&gt;。&lt;/p&gt;

&lt;h3 id=&quot;对比当前-ai-路径&quot;&gt;对比当前 AI 路径&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;维度&lt;/th&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;前期投入&lt;/td&gt;
      &lt;td&gt;已沉没&lt;/td&gt;
      &lt;td&gt;¥30-60k&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;单集成本&lt;/td&gt;
      &lt;td&gt;¥100-300（AI 抽卡）&lt;/td&gt;
      &lt;td&gt;约 ¥0（电费）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;角色一致性&lt;/td&gt;
      &lt;td&gt;抽卡，需 face-lock 协议&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;免费&lt;/strong&gt;，引擎级保证&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;场景一致性&lt;/td&gt;
      &lt;td&gt;3D 重建 + ControlNet 缝合&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;免费&lt;/strong&gt;，引擎级保证&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;镜头自由度&lt;/td&gt;
      &lt;td&gt;受 i2v 时长/可控性限制&lt;/td&gt;
      &lt;td&gt;100% 自由&lt;/td&gt;
    &lt;/tr&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;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;盈亏平衡点&lt;/strong&gt;：约 80-150 集（按单集 AI ¥200 估算）。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;5-时间--人力&quot;&gt;5. 时间 &amp;amp; 人力&lt;/h2&gt;

&lt;h3 id=&quot;单人作者&quot;&gt;单人作者&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;阶段&lt;/th&gt;
      &lt;th&gt;时长&lt;/th&gt;
      &lt;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;3-6 月&lt;/td&gt;
      &lt;td&gt;UE5 sequencer / MetaHuman / iClone / Marvelous Designer / 灯光摄影&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;资产铺设&lt;/td&gt;
      &lt;td&gt;2-4 月&lt;/td&gt;
      &lt;td&gt;主角×5、配角×10、3 套核心场景、20+ 件服饰&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;工艺定型&lt;/td&gt;
      &lt;td&gt;1 月&lt;/td&gt;
      &lt;td&gt;跑通”分镜 → mocap → 表情 → 渲染 → 合成”链路&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;单集稳定产能&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
      &lt;td&gt;3-7 天/集&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;最快第一集试拍出片&lt;/strong&gt;：从启动起约 &lt;strong&gt;5-8 个月&lt;/strong&gt;。&lt;/p&gt;

&lt;h3 id=&quot;多人协作1-2-外援&quot;&gt;多人协作（+1-2 外援）&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;美术外包做服饰 + 印度角色头模：¥3-8k / 角色，省 2-3 月&lt;/li&gt;
  &lt;li&gt;配音保持现有（通用 TTS 已够用）&lt;/li&gt;
  &lt;li&gt;可压缩到约 &lt;strong&gt;3-5 个月&lt;/strong&gt;出第一集&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;行业参考&quot;&gt;行业参考&lt;/h3&gt;

&lt;p&gt;成熟的同类单人作者公开访谈数据：单集 5-8 分钟耗时 &lt;strong&gt;2-4 周&lt;/strong&gt;，且是 2-3 年沉淀后的稳定产能，第一集做了约 3 个月。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;6-致命陷阱&quot;&gt;6. 致命陷阱&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;题材资产稀缺&lt;/strong&gt;：现成 MMO 抄作业不可能，每件袈裟 / 每个佛塔可能都要自建。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;印度面孔的恐怖谷&lt;/strong&gt;：MetaHuman 默认欧亚审美，调成”经像感”印度面孔难度极高，调不好就是”白人涂深粉底”。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;题材尺度 vs 真人 mocap&lt;/strong&gt;：让 mocap 演员演绎宗教场景的尺度问题（这也是为什么全网几乎没人做佛教 3D 剧）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;学习曲线悬崖&lt;/strong&gt;：UE5 sequencer + MetaHuman Animator 不是”丢 prompt 等出片”工艺，前 2 个月会非常难受。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;沉没成本&lt;/strong&gt;：当前 AI 路径已有积累、流水线、角色锁脸、3D 场景库，全切引擎意味着这些全部作废。&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;7-推荐路径不全-pivot&quot;&gt;7. 推荐路径（不全 pivot）&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;不要现在全切。&lt;/strong&gt; 具体做法分四步：&lt;/p&gt;

&lt;h3 id=&quot;phase-1继续-ai-路径出完第一季&quot;&gt;Phase 1：继续 AI 路径出完第一季&lt;/h3&gt;

&lt;p&gt;不耽误进度，用现有 AI 生成 + Blocking + 3D 场景 + face-lock 协议。&lt;/p&gt;

&lt;h3 id=&quot;phase-2用-2-3-周做-ue5-试拍实验并行&quot;&gt;Phase 2：用 2-3 周做 UE5 试拍实验（并行）&lt;/h3&gt;

&lt;p&gt;最小投入验证可行性：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;购买 CC4 + iClone trial&lt;/li&gt;
  &lt;li&gt;买一套印度场景资产（约 ¥1-2k）&lt;/li&gt;
  &lt;li&gt;MetaHuman 改 1 个印度面孔头模&lt;/li&gt;
  &lt;li&gt;做一段 60 秒试拍&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;同一镜头：AI 版 vs 引擎版同台对照&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;phase-3看试拍结果决策&quot;&gt;Phase 3：看试拍结果决策&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;引擎版明显赢 → 第二季全切 UE5&lt;/li&gt;
  &lt;li&gt;引擎版没赢明显 / 学习曲线劝退 → 继续 AI 路径，把预算花在 prompt + 后期&lt;/li&gt;
  &lt;li&gt;不确定 → 再做一组对照样本&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;phase-4混合工艺也是选项&quot;&gt;Phase 4：混合工艺也是选项&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;场景用 UE5 / 3D 重建固化（一致性强）&lt;/li&gt;
  &lt;li&gt;角色 + 表演用 AI（产能强）&lt;/li&gt;
  &lt;li&gt;中间用 i2i / ControlNet 缝合&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;这条路径其实是当前项目已经在走的（3D 场景跨镜空间一致 + AI 角色），UE5 化只是把”场景固化”这一环升级。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;8-下一步可做的研究&quot;&gt;8. 下一步可做的研究&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;列出已用到的所有场景/角色/服饰，标注 UE5 路径下各项的获取/自建成本（资产缺口表）&lt;/li&gt;
  &lt;li&gt;UE5 试拍最小购物清单 + 4 周周计划&lt;/li&gt;
  &lt;li&gt;调研其他”游戏引擎拍剧”案例（FF14 同人剧、原神 MMD、Roblox 短剧），看是否有更接近佛教/印度题材的资产池&lt;/li&gt;
  &lt;li&gt;调研 ZBrush + MetaHuman 印度面孔工艺现状（教程密度）&lt;/li&gt;
  &lt;li&gt;评估”MMO mod 改造”路径在法律/技术上的可行性（结论很可能是否定）&lt;/li&gt;
  &lt;li&gt;调研 Unreal Marketplace 上”古印度 / 东南亚 / 东方寺院”资产包覆盖度&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;9-一句话结论&quot;&gt;9. 一句话结论&lt;/h2&gt;

&lt;p&gt;游戏引擎实时渲染模式技术上可移植到佛经题材短剧，&lt;strong&gt;但前期投入 ¥30-60k + 5-8 个月学习与资产铺设&lt;/strong&gt;才能出第一集，&lt;strong&gt;且约 70% 的精力会花在自建佛教/印度资产上&lt;/strong&gt;（现成 MMO 那种开箱即拍的红利不存在）。建议小成本试拍验证，不要现在就全 pivot 放弃 AI 路径的既有积累。&lt;/p&gt;</content>
    <category term="AIGC"/>
    <category term="游戏引擎"/>
    <category term="短剧"/>
    <category term="工艺评估"/>
    <summary type="html">抖音上一些&quot;3D 同人剧&quot;账号，场景一致性和画面质感明显优于纯 AI 生成路径。调研发现它们根本不是 AI 生成，而是用游戏客户端实时渲染拍出来的。本文评估这套工艺能否移植到一个 AIGC 佛经题材短剧项目，并把游戏引擎路径与 AI 生成路径做成本、时间、一致性的全面对照。</summary>
  </entry>
  <entry>
    <title type="html">ComfyUI + Z-Image Turbo 角色形象设计工艺实录</title>
    <link href="https://jinzi.cyou/posts/2026-05-10-aigc-comfyui-zimage-character-design/" rel="alternate" type="text/html" title="ComfyUI + Z-Image Turbo 角色形象设计工艺实录"/>
    <published>2026-05-10T04:00:00+00:00</published>
    <updated>2026-05-10T04:00:00+00:00</updated>
    <id>https://jinzi.cyou/posts/aigc-comfyui-zimage-character-design</id>
    <content type="html" xml:base="https://jinzi.cyou/posts/2026-05-10-aigc-comfyui-zimage-character-design/">&lt;h2 id=&quot;tldr&quot;&gt;TL;DR&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Base 模型选型反转&lt;/strong&gt;：FLUX.2 Dev → &lt;strong&gt;Z-Image Turbo&lt;/strong&gt;（阿里 Tongyi-MAI，2025-10 发布）。第三方实测 Z-Image 皮肤细节优于 Flux.1 / Qwen-Image / HiDream / &lt;strong&gt;Flux.2 Dev&lt;/strong&gt;，中文原生强、HF 不 gated、单卡 32GB 富裕。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;ComfyUI 全栈在单卡 5090 部署完成&lt;/strong&gt;：Z-Image 31G + IPAdapter 6.3G + ControlNet Union 2.4G + 5 个关键节点。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;自托管视频通道&lt;/strong&gt;（Wan 2.2）调研出场：Animate V2 是”AI 演员替身”杀器，潜在全季可省约 ¥7700-7900。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;一个神话角色形象迭代失败案例&lt;/strong&gt;：v0→v3 始终调不对，暴露出文生图在”多个神话特征叠加约束”下的执行力短板。&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-base-模型选型反转&quot;&gt;1. Base 模型选型反转&lt;/h2&gt;

&lt;h3 id=&quot;调研结论&quot;&gt;调研结论&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;模型&lt;/th&gt;
      &lt;th&gt;写实/皮肤&lt;/th&gt;
      &lt;th&gt;LoRA VRAM&lt;/th&gt;
      &lt;th&gt;中文&lt;/th&gt;
      &lt;th&gt;HF gating&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Z-Image Turbo&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;第三方实测优于 Flux.2 Dev&lt;/td&gt;
      &lt;td&gt;12-16 GB&lt;/td&gt;
      &lt;td&gt;双语强&lt;/td&gt;
      &lt;td&gt;不 gated&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Qwen-Image-2512&lt;/td&gt;
      &lt;td&gt;强写实 + 强文字&lt;/td&gt;
      &lt;td&gt;32 GB+&lt;/td&gt;
      &lt;td&gt;强&lt;/td&gt;
      &lt;td&gt;不 gated&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Flux.2 Dev&lt;/td&gt;
      &lt;td&gt;“脸软糊、AI 感明显”&lt;/td&gt;
      &lt;td&gt;30 GB int8 / 96 GB full&lt;/td&gt;
      &lt;td&gt;中等&lt;/td&gt;
      &lt;td&gt;gated&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Flux.2 Klein&lt;/td&gt;
      &lt;td&gt;蒸馏版速度优先&lt;/td&gt;
      &lt;td&gt;12 GB&lt;/td&gt;
      &lt;td&gt;中等&lt;/td&gt;
      &lt;td&gt;gated&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Flux.1 Dev&lt;/td&gt;
      &lt;td&gt;老牌 2024 标杆&lt;/td&gt;
      &lt;td&gt;24 GB&lt;/td&gt;
      &lt;td&gt;弱&lt;/td&gt;
      &lt;td&gt;gated&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;为什么反转&lt;/strong&gt;：上一阶段卡在 Flux 的 license gating，需要官方 token 才能拉权重。而 Z-Image Turbo 不仅在第三方实测里皮肤细节更好，且完全不 gated、中文原生强、单卡 32GB 训练 LoRA 还很富裕——gating 阻塞问题随选型自动消失。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LoRA 训练关键参数&lt;/strong&gt;（针对 Z-Image）：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;linear_rank: 64&lt;/code&gt;（不是 16/32，皮肤细节强相关）&lt;/li&gt;
  &lt;li&gt;推荐 70-80 张数据&lt;/li&gt;
  &lt;li&gt;4000 steps（不是 800-1000）&lt;/li&gt;
  &lt;li&gt;单卡 32GB 可同时训 2 个角色&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;按 5090 约 ¥2.78/h 估算，rank-64 + 4000 steps 的单角色训练成本约 ¥3-5。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-自托管视频通道wan-22调研未启动&quot;&gt;2. 自托管视频通道（Wan 2.2，调研未启动）&lt;/h2&gt;

&lt;h3 id=&quot;经济性&quot;&gt;经济性&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;商用 i2v: 约 ¥0.75/秒，按 60 集 × 30 镜 × 6s 估 ≈ ¥8100
Wan 2.2 自托管: 约 ¥0.5/6s，全季约 ¥150-300 + LoRA 训练 ¥80-230
潜在节省: 约 ¥7700-7900
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;wan-22-animate-v2--ai-演员替身&quot;&gt;Wan 2.2 Animate V2 = “AI 演员替身”&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;单角色参考图 + driving pose video (OpenPose) + 角色 LoRA
  → SAM 2 mask + face crop + CLIP vision embed 多重融合
  → 输出该角色按指定 pose 动作的高写实视频
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;变体：Wan2.2-TI2V-5B（24GB 入门验证）、Wan2.2-14B I2V（FP8 16GB 生产）、Wan 2.2 Animate V2（14B + IP-Adapter，FP8 约 20GB）。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;决策：不立刻上&lt;/strong&gt;。当前 Z-Image 静态生图尚未验证完，同时上两个新模型会让问题源头混淆；且视频 LoRA ≠ 图像 LoRA 需重训。待 Z-Image LoRA 通关后再做 i2v 对照实验。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-comfyui-全栈部署单卡-5090&quot;&gt;3. ComfyUI 全栈部署（单卡 5090）&lt;/h2&gt;

&lt;h3 id=&quot;节点&quot;&gt;节点&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ComfyUI core
+ ComfyUI-Manager
+ ComfyUI_IPAdapter_plus
+ comfyui_controlnet_aux
+ PuLID_ComfyUI
+ ComfyUI-Impact-Pack (FaceDetailer)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;模型&quot;&gt;模型&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;checkpoints/z-image-turbo            31 GB  (Z-Image Turbo 全套)
ipadapter/sdxl_models/*              6.3 GB (IPAdapter Plus + CLIP-ViT-H image_encoder)
controlnet/union-sdxl/*              2.4 GB (xinsir Union promax SDXL)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;重启实例后模型与节点直接可用，无需重下，停机期间只按存储计费。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-神话角色形象迭代失败案例&quot;&gt;4. 神话角色形象迭代（失败案例）&lt;/h2&gt;

&lt;p&gt;这一节是个反面教材：一个佛教/印度神话角色（帝释天）的形象，从 v0 调到 v3 始终不对，最后暂停。它很好地暴露了文生图在叠加约束下的短板。&lt;/p&gt;

&lt;h3 id=&quot;v0--错误的设计&quot;&gt;v0 — 错误的设计&lt;/h3&gt;

&lt;p&gt;最初的 4 张参考图把多个印度神祇的特征拼在了一起：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;✗ 4 只手       ← 实为毗湿奴标志
~ 第三眼       ← 实为可选 canonical（后续保留）
✗ 蓝皮         ← 克里希纳/毗湿奴标志（佛教帝释天应为金身）
✗ 5 层塔冠     ← 应是扇形宽冠
✗ 持莲花       ← 观音/弥勒标志，非帝释天
✓ 金刚杵       ← 正确
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;问题来源&lt;/strong&gt;：原 prompt 把不同神祇特征拼接，造出了一个”伪混合神”。这说明角色考据没做对，后面再怎么生图都是错的——形象设计的源头错误会污染整条训练数据链。&lt;/p&gt;

&lt;h3 id=&quot;经典考据后的正确依据&quot;&gt;经典考据后的正确依据&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;特征&lt;/th&gt;
      &lt;th&gt;经典&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;手数&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;2 手&lt;/strong&gt;（右金刚杵，左施印或持物）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;第三眼&lt;/td&gt;
      &lt;td&gt;壁画/雕塑常见，&lt;strong&gt;保留&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;肤色&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;金身&lt;/strong&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;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;v2--v3--改用中文-prompt--加三目金身男人女相&quot;&gt;v2 / v3 — 改用中文 prompt + 加三目/金身/男人女相&lt;/h3&gt;

&lt;p&gt;依正确考据重做了两轮：v2 给出唐宋宫廷少年帝王、西域金身、天宫云海等 8 个方向，反馈”基本都不行”——缺三目、男人女相不够、金身感弱、过于普通帝王。v3 针对性补三目 + 男人女相 + 金身又出 6 张，最终判定&lt;strong&gt;效果仍不行，暂停&lt;/strong&gt;。&lt;/p&gt;

&lt;h3 id=&quot;推测瓶颈&quot;&gt;推测瓶颈&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;文生图对”三目 + 金身 + 男人女相”叠加约束执行力弱&lt;/strong&gt;：任意 1 个特征可能被丢失。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;写实 prompt 与神话特征（三目/金身）内在矛盾&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;h3 id=&quot;可能的修复方向未实测&quot;&gt;可能的修复方向（未实测）&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;改换工具&lt;/strong&gt;：换中文/古风更强的写实模型（Z-Image Turbo / Qwen-Image）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;i2i 启动&lt;/strong&gt;：先找一张经典壁画/造像（如敦煌壁画）作 ref，i2i 出现代写实版，用真实参考锚住超现实特征。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;概念分层&lt;/strong&gt;：先出”少年男人女相帝王”基础像（无三目无金身），再 i2i 加金身，再 inpaint 加三目——把叠加约束拆成串行步骤。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;找现成 LoRA&lt;/strong&gt;：社区可能已有同名神话角色 LoRA，可作 starting point。&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;5-远端工作流-4-个踩坑&quot;&gt;5. 远端工作流 4 个踩坑&lt;/h2&gt;

&lt;p&gt;把模型权重下到按小时租的云 GPU 上，踩到 4 个值得记的坑：&lt;/p&gt;

&lt;h3 id=&quot;51-huggingface-cli-download-已弃用&quot;&gt;5.1 huggingface-cli download 已弃用&lt;/h3&gt;

&lt;p&gt;新版 huggingface_hub（&amp;gt;=0.26）弃用了 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;huggingface-cli download&lt;/code&gt;，原 setup 脚本里所有 download 步骤静默失败（节点装好了但模型一个没下）。改用 python &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;from huggingface_hub import snapshot_download&lt;/code&gt; 直接调用。&lt;/p&gt;

&lt;h3 id=&quot;52-下载后-copy-导致磁盘翻倍&quot;&gt;5.2 下载后 copy 导致磁盘翻倍&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;snapshot_download&lt;/code&gt; 把模型下到 cache 目录后，如果再 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shutil.copy2()&lt;/code&gt; 到目标位置，&lt;strong&gt;磁盘占用翻倍&lt;/strong&gt;：31GB 的模型 cache + target = 62GB，直接爆掉 50GB 的数据盘。修复：用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;os.rename(src, dst)&lt;/code&gt; 替代 copy——同一文件系统上是 O(1) 的 inode 重命名，不占额外空间。&lt;/p&gt;

&lt;h3 id=&quot;53-国际镜像-ssl-反复-timeout&quot;&gt;5.3 国际镜像 SSL 反复 timeout&lt;/h3&gt;

&lt;p&gt;国际镜像站在密集大文件下载时频繁报 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSL handshake operation timed out&lt;/code&gt;，即使开了学术加速也没救，大模型连下两次都超时。修复：阿里出品的模型（Z-Image / Qwen-Image / Wan）改走 &lt;strong&gt;ModelScope&lt;/strong&gt;——国内通道满速、多文件并发、0 失败。&lt;/p&gt;

&lt;h3 id=&quot;54-cache_dir-与-local_dir-语义不一致&quot;&gt;5.4 cache_dir 与 local_dir 语义不一致&lt;/h3&gt;

&lt;p&gt;不同 SDK 行为不同：HF 的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;snapshot_download(local_dir=...)&lt;/code&gt; 直接放目标位置；ModelScope 的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;snapshot_download(cache_dir=...)&lt;/code&gt; 只指定 cache 根，实际文件落在 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cache_dir/&amp;lt;owner&amp;gt;/&amp;lt;repo&amp;gt;/&lt;/code&gt; 下，需要再 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;os.rename&lt;/code&gt; 移到目标位置。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;6-关键决策小结&quot;&gt;6. 关键决策小结&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Base 模型主通道：FLUX.2 Dev → &lt;strong&gt;Z-Image Turbo&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;ComfyUI 全栈部署完成&lt;/li&gt;
  &lt;li&gt;阿里系模型走 ModelScope 优于国际镜像&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;os.rename&lt;/code&gt; 优于 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shutil.copy2&lt;/code&gt;（受限磁盘下避免翻倍）&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;huggingface-cli download&lt;/code&gt; → &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;snapshot_download&lt;/code&gt; python API&lt;/li&gt;
  &lt;li&gt;自托管视频通道（Wan 2.2）暂缓，待静态生图通关&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;最大的开放问题仍是神话角色形象怎么走：是找现成社区 LoRA、用经典壁画作 i2i seed，还是接受不完美先训起来——这本质上是”超现实角色 + 写实质感”这对矛盾约束在当前文生图工具下的工程取舍。&lt;/p&gt;</content>
    <category term="AIGC"/>
    <category term="ComfyUI"/>
    <category term="Z-Image"/>
    <category term="角色设计"/>
    <category term="文生图"/>
    <summary type="html">这是 AIGC 短剧角色一致性工艺的第二阶段实录：为什么把写实 base 从 FLUX.2 Dev 反转到 Z-Image Turbo，ComfyUI 全栈在消费级显卡上的部署清单，以及一个&quot;神话角色形象怎么也调不对&quot;的失败案例和它暴露出的 text2image 多约束叠加的执行力短板。</summary>
  </entry>
  <entry>
    <title type="html">AIGC 短剧的跨镜空间一致性 + 角色一致性工艺实测</title>
    <link href="https://jinzi.cyou/posts/2026-05-09-aigc-3d-scene-and-character-lora/" rel="alternate" type="text/html" title="AIGC 短剧的跨镜空间一致性 + 角色一致性工艺实测"/>
    <published>2026-05-09T04:00:00+00:00</published>
    <updated>2026-05-09T04:00:00+00:00</updated>
    <id>https://jinzi.cyou/posts/aigc-3d-scene-and-character-lora</id>
    <content type="html" xml:base="https://jinzi.cyou/posts/2026-05-09-aigc-3d-scene-and-character-lora/">&lt;h2 id=&quot;tldr&quot;&gt;TL;DR&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;&lt;strong&gt;World Labs Marble 单图&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;跨镜空间方案的实测最优解&lt;/td&gt;
      &lt;td&gt;¥10-20 / 场景&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Marble 多图（i2i 拼多视角）&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;反向优化&lt;/strong&gt;——i2i 几何不一致让 Marble 拼缝鬼影&lt;/td&gt;
      &lt;td&gt;浪费的 ¥10-20&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Apple SHARP（单卡 monocular）&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;喷泉锥，仅 ±10° 微调，不能跨镜&lt;/td&gt;
      &lt;td&gt;¥0&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Zero123++&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;几何严格一致但风格”3D 玩具感”，对写实剧不适用&lt;/td&gt;
      &lt;td&gt;¥0.5 / 推理&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;SDXL LoRA 角色锁&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;5 张图 800 步即可锁 4 臂/3 眼这种违反常识特征&lt;/td&gt;
      &lt;td&gt;¥0.6 / 角色&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Flux LoRA&lt;/strong&gt;（未实测）&lt;/td&gt;
      &lt;td&gt;写实天花板远高于 SDXL，但被 HF gating 阻塞&lt;/td&gt;
      &lt;td&gt;¥1.5-2 / 角色&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;最终推荐工艺&lt;/strong&gt;：&lt;strong&gt;Marble 单图 anchor（关键场景）+ LoRA 锁角色 + ControlNet 控镜（同场切镜）&lt;/strong&gt;。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;测试对象是一个 AIGC 佛经题材短剧项目，需要大量”同场多镜”和”同角色跨集”的镜头。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-跨镜-3d-场景生成同场切镜不错乱&quot;&gt;1. 跨镜 3D 场景生成（”同场切镜不错乱”）&lt;/h2&gt;

&lt;h3 id=&quot;11-world-labs-marble--主通道&quot;&gt;1.1 World Labs Marble — 主通道&lt;/h3&gt;

&lt;p&gt;World Labs Marble 接受一张图，约 5 分钟产出一个完整 3D 世界，输出：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;splat.spz&lt;/code&gt; 约 30 MB（full）+ 500k/150k/100k 三档精简&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mesh.glb&lt;/code&gt; 1-5 MB（碰撞网格）&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pano.png&lt;/code&gt; 约 12 MB（360 全景）&lt;/li&gt;
  &lt;li&gt;元数据 JSON（含 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;metric_scale_factor&lt;/code&gt; 度量尺度）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;把它作为关键场景的空间锚点：同一场景内的多个镜头都从这一份持久世界里取视角，几何/比例/光照天然一致，这是当前任何 i2v/t2v 模型都做不到的。&lt;/p&gt;

&lt;p&gt;一个值得记的实现坑：user prompt 会被 Marble 的 VLM 自动扩展成一长段场景描述写进 world 元数据，所以输入图本身的信息量决定了重建质量，文字提示只是辅助。&lt;/p&gt;

&lt;h3 id=&quot;12-多图融合的反向优化教训&quot;&gt;1.2 多图融合的反向优化（教训）&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;假设&lt;/strong&gt;：用图生图（i2i）出 4 个不同 azimuth 视角图，喂 Marble 的 multi-image 接口，应该比单图更好。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;实测&lt;/strong&gt;：&lt;strong&gt;比单图差&lt;/strong&gt;。多图版在缩略图角落出现明显的&lt;strong&gt;拼缝鬼影&lt;/strong&gt;，单图版反而干净。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;根因&lt;/strong&gt;：i2i 出的 4 张”伪多视角”&lt;strong&gt;几何不严格一致&lt;/strong&gt;——同一根立柱在 4 张图里位置/比例都在漂移。Marble 把它们当作真实多视角做光束法平差（bundle adjustment）时，不一致的几何被强行对齐，引入鬼影。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;结论&lt;/strong&gt;：除非用专门训练几何一致性的多视角扩散模型（Zero123++ / Wonder3D），否则”i2i 凑多视角”喂 Marble = 浪费算力 + 劣化质量。单图反而是更稳的输入。&lt;/p&gt;

&lt;h3 id=&quot;13-apple-sharp--免费但有限&quot;&gt;1.3 Apple SHARP — 免费但有限&lt;/h3&gt;

&lt;p&gt;Apple 开源的 SHARP 在一块消费级 Apple Silicon（M1 16GB，Metal 后端）上做 monocular 重建，fp32 推理约 33 秒，输出约 118 万 gaussian 的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.ply&lt;/code&gt;（约 64 MB）。&lt;/p&gt;

&lt;p&gt;两个限制：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;其 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;render&lt;/code&gt; 子命令强制 CUDA，Apple Silicon 跑不了它自带的渲染器，需要自己用 Blender Geometry Nodes 把 mesh 转点云 + Cycles GPU 渲染（实测约 12s/帧 1280×720）。SH degree-0 的颜色解码公式是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rgb = clamp(0.5 + 0.28209479 * f_dc, 0, 1)&lt;/code&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;根本限制&lt;/strong&gt;：SHARP 是 monocular depth lift，重建结果是从原相机方向往前的”喷泉锥”，背面/侧面是真空白。&lt;strong&gt;只适合原视角微调（dolly / 微 pan）&lt;/strong&gt;，不能跨镜切场。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;14-zero123--几何对了风格变了&quot;&gt;1.4 Zero123++ — 几何对了风格变了&lt;/h3&gt;

&lt;p&gt;在一块 RTX 5090（32GB，fp16）上推理约 3.1 秒（Apple Silicon fp32 OOM 静默死，fp16 因 MPS NaN 不可用）。输入单图 → 输出 6 个固定视角（azimuth 30/90/150/210/270/330 配 elevation ±20/±10），3×2 网格 320×320。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：6 视角几何严格一致没问题，但&lt;strong&gt;风格变成”3D 玩具 / 塑料”&lt;/strong&gt;——Zero123++ 训练数据偏 Objaverse 几何资产，没学到照片级写实。对写实风格短剧不适用，对玩具/物体题材可能可行。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;替代方向&lt;/strong&gt;（未实测）：Era3D / Wonder3D / EscherNet 据称对 scene 写实保留更好。&lt;/p&gt;

&lt;h3 id=&quot;15-hunyuan-world-20备选未实测&quot;&gt;1.5 Hunyuan World 2.0（备选未实测）&lt;/h3&gt;

&lt;p&gt;腾讯开源、Apache 2.0，自托管需要 24-32 GB VRAM（5090 完全 cover），输出格式比 Marble 还全：mesh + 3DGS + 深度图 + 法线图 + 相机参数。在线 demo 必须登录腾讯账号、无法自动化，所以暂未纳入流水线，但作为”自托管替代 Marble”的长期选项很有吸引力。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-角色-lora-训练跨镜跨集角色不漂&quot;&gt;2. 角色 LoRA 训练（”跨镜跨集角色不漂”）&lt;/h2&gt;

&lt;p&gt;工具栈是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ostris/ai-toolkit&lt;/code&gt;（GitHub）+ SDXL 1.0 / Flux.1-dev，在一块按小时租的云 GPU（5090，约 ¥2.78/h）上训练。&lt;/p&gt;

&lt;p&gt;每个角色用一个不含宗教专名的触发词（这是规避内容过滤的小技巧），配上简化角色描述与姿态修饰，自动生成 caption。示例（佛经/神话公共领域人物）：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;阿阇世王 — 紫袍重金 + 凶相 + 红宝石冠 + 匕首&lt;/li&gt;
  &lt;li&gt;帝释天 — 蓝皮 + &lt;strong&gt;4 臂 + 3 眼&lt;/strong&gt; + 多层冠&lt;/li&gt;
  &lt;li&gt;毗沙门天王 — 金甲 + 红披风 + 持伞和宝塔&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;数据量：每角色仅 4-5 张（远低于推荐的 20-50 张）。&lt;/p&gt;

&lt;h3 id=&quot;21-sdxl-实测结果&quot;&gt;2.1 SDXL 实测结果&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;配置&lt;/strong&gt;：SDXL 1.0 + LoRA dim 32 + bf16 + adamw8bit + 800 steps + lr 1e-4&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;&lt;strong&gt;阿阇世王&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;约 12.5 min&lt;/td&gt;
      &lt;td&gt;¥0.6&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;约 13 min&lt;/td&gt;
      &lt;td&gt;¥0.6&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;4 臂 + 3 眼&lt;/strong&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;关键发现&lt;/strong&gt;：5 张图 + 800 steps 就能锁住&lt;strong&gt;“4 臂 + 3 眼”&lt;/strong&gt;这种违反人体常识的特征——这是 SDXL base 默认完全画不出的（它会把帝释天画成 1-2 臂、无第三眼）。也就是说，对于强角色记忆，训练图数量可以远低于通常建议值，前提是这些图把目标特征讲清楚了。&lt;/p&gt;

&lt;h3 id=&quot;22-sdxl-的天花板也是切-flux-的理由&quot;&gt;2.2 SDXL 的天花板（也是切 Flux 的理由）&lt;/h3&gt;

&lt;p&gt;虽然特征锁定 OK，但 SDXL 输出有挥之不去的&lt;strong&gt;“render 感 / 塑料感”&lt;/strong&gt;——织物纹理不真、金属皮纸糊、皮肤毛孔失真，整体是”AI 海报感”而非”剧照感”。这是 SDXL 的写实天花板，&lt;strong&gt;LoRA 改不了&lt;/strong&gt;，要写实必须换 base 模型。&lt;/p&gt;

&lt;h3 id=&quot;23-flux-路径被阻塞&quot;&gt;2.3 Flux 路径被阻塞&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;FLUX.1-dev    → gated（non-commercial），需 HF token + accept license
FLUX.1-schnell → 早期 Apache 2.0，后被收紧也 gated（实测国内镜像也 403）
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Flux 写实天花板远高于 SDXL，但门槛卡在 license gating（镜像站不绕过 gated repo，仍需官方 token）。重训成本约 30-45 min/角色。这个阻塞在后续的模型选型中被另一条路径绕开了（见姊妹篇 Z-Image Turbo 选型）。&lt;/p&gt;

&lt;h3 id=&quot;24-5-张图也是瓶颈独立于模型选择&quot;&gt;2.4 5 张图也是瓶颈（独立于模型选择）&lt;/h3&gt;

&lt;p&gt;LoRA 通常推荐 15-50 张训练图，5 张容易过拟合或漂移。两条扩充路线：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;(A) 数据增广&lt;/strong&gt;（0 成本）：现有 5 张做 crop / 旋转 / 颜色抖动 → 20-30 张&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;(B) i2i 扩展&lt;/strong&gt;（约 ¥3-5/角色）：从现有 ref 出更多表情/姿态/角度变体&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-gpu-经济性&quot;&gt;3. GPU 经济性&lt;/h2&gt;

&lt;p&gt;按小时租的云 GPU 是这套流水线的算力底座，几档参考单价：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;4090:      ¥1.8-2.18 / h
5090:      ¥2.88 / h
vGPU-32GB: ¥1.68 / h（A100 切片，无 Blackwell FP8）
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;5090 性价比最优&lt;/strong&gt;：相比 4090 仅 +32% 单价，换来 +33% VRAM + 30-60% 速度（Blackwell + FP8），单任务实际成本几乎打平。&lt;/p&gt;

&lt;p&gt;横向对比内容生成本身的开销：一份 ¥260 的 Marble 预算，约等于 90 小时 5090，足够跑完整季的 3DGS 场景 + 多个角色 LoRA + 视频试验还有富余。也就是说，在这套工艺里，3D 场景重建（Marble）才是单位成本的大头，本地训练/推理反而便宜。&lt;/p&gt;

&lt;p&gt;实操上几条铁律：模型权重/数据/训练产物训完立刻拉回本地，不要把唯一副本留在易失的实例临时盘上；阿里系模型（Z-Image / Qwen-Image / Wan 等）走 ModelScope 下载比国际镜像稳得多。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-推荐工艺落地&quot;&gt;4. 推荐工艺（落地）&lt;/h2&gt;

&lt;h3 id=&quot;41-短期已可执行&quot;&gt;4.1 短期（已可执行）&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;关键场景 anchor (5-10 个/集) → Marble 单图    ¥10-20 × N
微调镜头 (dolly / 小 pan)    → SHARP 兜底     ¥0
角色锁                       → SDXL LoRA + ai-toolkit  约 ¥0.6/角色
跨镜切镜空间一致             → Marble splat → Blender depth/flat → i2i ref
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;42-中期&quot;&gt;4.2 中期&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;1. 解决写实 base 的 gating（换不 gated 的写实模型）
2. 数据增广（A）+ i2i 扩展（B）→ 每角色 25-30 训练图
3. 重训角色 LoRA
4. 写 ControlNet pose+depth 流水线，对接 Blender + Marble splat
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;43-长期解锁更省的自托管栈&quot;&gt;4.3 长期（解锁更省的自托管栈）&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;自托管 Hunyuan World 2.0&lt;/strong&gt; 替代 Marble（省 30-50×）&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;自托管视频模型&lt;/strong&gt;（Wan 2.2 / HunyuanVideo）替代商用 i2v（省约 80%）&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;角色专属 TTS&lt;/strong&gt;（GPT-SoVITS / F5-TTS）替代通用 voice&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;唇形同步&lt;/strong&gt;（MuseTalk / LatentSync）&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;5-关键决策&quot;&gt;5. 关键决策&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Marble 是当前空间一致性主通道&lt;/li&gt;
  &lt;li&gt;i2i 凑多视角喂 Marble 这条路排除（拼缝鬼影）&lt;/li&gt;
  &lt;li&gt;SHARP 仅做兜底（monocular 限制）&lt;/li&gt;
  &lt;li&gt;5090 是首选卡（性价比 + Blackwell FP8）&lt;/li&gt;
  &lt;li&gt;ai-toolkit 是 LoRA 训练事实标准&lt;/li&gt;
  &lt;li&gt;触发词避免宗教专名直用，规避内容过滤&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;开放问题主要在写实 base 的选型（Flux gating 待绕开）、训练数据量扩充、以及真正几何一致的多视角解（Zero123++ 风格不对，Wonder3D/Era3D 待实测）。&lt;/p&gt;</content>
    <category term="AIGC"/>
    <category term="3D生成"/>
    <category term="LoRA"/>
    <category term="角色一致性"/>
    <category term="短剧"/>
    <summary type="html">AIGC 短剧有两个绕不开的痛点：同一场景切镜不能错乱（空间一致性），以及角色跨镜跨集不能漂移（身份一致性）。本文把 World Labs Marble、Apple SHARP、Zero123++、SDXL/Flux LoRA 几条路径全部跑了一遍，给出带单位成本的对比结论，以及一个反向优化的教训。</summary>
  </entry>
  <entry>
    <title type="html">Claude Code 信息架构进阶教程：从中级到大师</title>
    <link href="https://jinzi.cyou/posts/2026-05-07-claude-code-context-and-memory-mastery/" rel="alternate" type="text/html" title="Claude Code 信息架构进阶教程：从中级到大师"/>
    <published>2026-05-07T04:00:00+00:00</published>
    <updated>2026-05-07T04:00:00+00:00</updated>
    <id>https://jinzi.cyou/posts/claude-code-context-and-memory-mastery</id>
    <content type="html" xml:base="https://jinzi.cyou/posts/2026-05-07-claude-code-context-and-memory-mastery/">&lt;blockquote&gt;
  &lt;p&gt;一份基于第一性原理推导的 Claude Code 信息组织指南。讲清楚 memory、CLAUDE.md、hooks、skills、subagents 各自存在的物理理由，以及怎样在它们之间分配信息，才能让 agent 在长期、多项目、跨会话场景下保持高密度可用、低噪声。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;阅读顺序&quot;&gt;阅读顺序&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;§1–§3：第一性原理与基本约束（中级必读）&lt;/li&gt;
  &lt;li&gt;§4–§7：八层信息架构与每一层的写作守则（中-高级）&lt;/li&gt;
  &lt;li&gt;§8–§10：决策框架与反模式（高级）&lt;/li&gt;
  &lt;li&gt;§11–§13：大师级模式与实战 case studies&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1--一切的起点claude-code-是什么&quot;&gt;§1 · 一切的起点：Claude Code 是什么&lt;/h2&gt;

&lt;p&gt;把 Claude Code 剥到只剩骨头，它是三件东西：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;一个 LLM&lt;/strong&gt;：单次推理时，只能看见当前 prompt 里的内容。它不”知道”任何运行时之外的状态。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;一组工具（tools）&lt;/strong&gt;：Read/Edit/Bash/Agent/… 让它在每一轮里跟外界交换有限信息。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;一套上下文注入规则（context plumbing）&lt;/strong&gt;：决定每一次推理开始前，prompt 里都被塞进了什么。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;90% 的”使用 Claude Code 进阶问题”——其实是第 3 件事的工程问题：&lt;strong&gt;什么时候、把什么信息、放到哪一层、用什么机制注入&lt;/strong&gt;。memory、CLAUDE.md、hooks、skills、subagents 都只是这套注入规则的不同表现形式。&lt;/p&gt;

&lt;p&gt;理解这一点，你会发现”该把规则写进 memory 还是 CLAUDE.md”这种问题不再是品味之争，而是有 deterministic 答案的。&lt;/p&gt;

&lt;h2 id=&quot;2--五条物理约束first-principle-constraints&quot;&gt;§2 · 五条物理约束（first-principle constraints）&lt;/h2&gt;

&lt;p&gt;所有进阶技巧都是这五条约束的衍生物。&lt;/p&gt;

&lt;h3 id=&quot;约束-a--上下文是稀缺资源&quot;&gt;约束 A — 上下文是稀缺资源&lt;/h3&gt;

&lt;p&gt;模型每次推理读的 prompt 有上限（在你这台 Sonnet 4.6 上是 200K，Opus 4.7 1M context 也是有限）。&lt;strong&gt;每个 token 都要：&lt;/strong&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;/ul&gt;

&lt;p&gt;注意：&lt;strong&gt;总 token 数不是唯一指标&lt;/strong&gt;，”信息密度”才是。1000 行重复废话比 200 行核心契约伤害更大，因为前者既挤掉空间又稀释关注度。&lt;/p&gt;

&lt;h3 id=&quot;约束-b--信息只在被注入-prompt-时才存在&quot;&gt;约束 B — 信息只在被注入 prompt 时才”存在”&lt;/h3&gt;

&lt;p&gt;这条比看上去深刻得多。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;你硬盘上有一份完美的架构文档？除非它出现在 prompt 里，否则 LLM 看不见。&lt;/li&gt;
  &lt;li&gt;你上周和它说过”不要 mock 数据库”？除非这次被记录回 prompt，否则它不知道。&lt;/li&gt;
  &lt;li&gt;你有一个 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.minimax.env&lt;/code&gt; 文件？除非有什么机制把”它存在 + 路径 + 用途”注入进来，否则 agent 不会找。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;工程意义：&lt;strong&gt;所有”agent 应该记住的事”都得有一条注入路径&lt;/strong&gt;。要么自动加载（CLAUDE.md / MEMORY.md 索引 / settings），要么用户当场提（@file / slash），要么 hook 主动塞（system reminder）。&lt;strong&gt;没有路径 = 不存在。&lt;/strong&gt;&lt;/p&gt;

&lt;h3 id=&quot;约束-c--信息的召回成本-vs-失效成本-vs-噪声成本三角&quot;&gt;约束 C — 信息的”召回成本 vs 失效成本 vs 噪声成本”三角&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;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;这条信息没自动出现，下次得重新提供/解释&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;信息陈旧、与现实不符，agent 据此做了错事&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;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;不同信息的衰减率不同：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;“我是 Go 工程师” — 几乎不衰减 → 适合长期 memory&lt;/li&gt;
  &lt;li&gt;“本季度优先重构 auth 模块” — 一两个月衰减 → 短期 memory，要标日期&lt;/li&gt;
  &lt;li&gt;“今天调试这个 bug 试过哪些方案” — 单次会话即衰减 → task list / 对话本身，&lt;strong&gt;绝不&lt;/strong&gt;进 memory&lt;/li&gt;
  &lt;li&gt;“这个 repo 的部署命令是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;make deploy&lt;/code&gt;” — 跟代码同寿 → CLAUDE.md&lt;/li&gt;
  &lt;li&gt;“禁止在 prod 分支强推” — 永久且 deterministic → settings permissions / hook&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;衰减越慢、跨会话越频繁用 → 越靠”内层”（settings / CLAUDE.md / memory）。衰减越快、单次性 → 越靠”外层”（plan / task / 对话）。&lt;/strong&gt;&lt;/p&gt;

&lt;h3 id=&quot;约束-d--deterministic-行为不能靠-prompt-实现&quot;&gt;约束 D — Deterministic 行为不能靠 prompt 实现&lt;/h3&gt;

&lt;p&gt;LLM 是概率系统。如果你需要的是”&lt;strong&gt;每次&lt;/strong&gt; commit 前 &lt;strong&gt;必定&lt;/strong&gt; 跑 lint”“&lt;strong&gt;绝不&lt;/strong&gt; 让 agent 碰 .env”——这种 deterministic 保证，必须放在 LLM 之外的执行层（hooks / permissions），而不是写在 memory / CLAUDE.md 里。&lt;/p&gt;

&lt;p&gt;写在文档里的规则会被遵守 99%，但是 agent 长跑场景下的 1% 偏差会累积。Hook 是 0% 偏差。&lt;/p&gt;

&lt;h3 id=&quot;约束-e--prompt-cache-与稳定性&quot;&gt;约束 E — Prompt cache 与稳定性&lt;/h3&gt;

&lt;p&gt;Anthropic 的 prompt cache 有 5 分钟 TTL（这台机器具体值见 ScheduleWakeup 文档）。命中 cache 的 token 便宜 90%、延时低。&lt;/p&gt;

&lt;p&gt;工程意义：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;CLAUDE.md / MEMORY.md 这种”每次会话都加载”的内容应保持稳定&lt;/strong&gt;，频繁改动会击穿 cache。&lt;/li&gt;
  &lt;li&gt;单次会话内反复跑工具时，文件内容尽量不要在调用之间被改写——否则后续推理 cache miss。&lt;/li&gt;
  &lt;li&gt;把不稳定的内容（比如临时调试日志）放到对话尾部，而不是 system / 文档区。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;3--信息的四种本体ontology&quot;&gt;§3 · 信息的四种本体（ontology）&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;特征&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;（policy）&lt;/td&gt;
      &lt;td&gt;deterministic，”做/不做”&lt;/td&gt;
      &lt;td&gt;“禁止 force push”、”commit 前 lint”&lt;/td&gt;
      &lt;td&gt;hooks / permissions&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;项目知识&lt;/strong&gt;（domain）&lt;/td&gt;
      &lt;td&gt;与代码同寿，多人共享&lt;/td&gt;
      &lt;td&gt;架构、契约、命令&lt;/td&gt;
      &lt;td&gt;CLAUDE.md（项目内）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;个人状态&lt;/strong&gt;（preference + history）&lt;/td&gt;
      &lt;td&gt;跨会话、个人化&lt;/td&gt;
      &lt;td&gt;用户身份、习惯、纠正历史&lt;/td&gt;
      &lt;td&gt;auto-memory&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;会话产物&lt;/strong&gt;（artifact）&lt;/td&gt;
      &lt;td&gt;单次任务的中间物&lt;/td&gt;
      &lt;td&gt;task list、调研笔记、plan&lt;/td&gt;
      &lt;td&gt;task / 对话 / fork&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;很多新手把这四类混着塞 memory，导致 memory 又长又乱、可信度衰减。&lt;strong&gt;先分清本体，再选机制&lt;/strong&gt;。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4--八层信息架构&quot;&gt;§4 · 八层信息架构&lt;/h2&gt;

&lt;p&gt;把 Claude Code 的注入层按”距离 prompt 由近到远 / 自动化由强到弱”展开成八层。每层都有：触发时机、生命周期、写什么、不写什么、典型反模式。&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;┌─ L0  模型权重（训练知识）
├─ L1  system prompt（harness 写的，不可改）
├─ L2  settings.json + hooks（可执行规则层）
├─ L3  项目 CLAUDE.md（项目知识）
├─ L4  用户级 CLAUDE.md（跨项目偏好）
├─ L5  Auto-memory（跨会话个人状态）
├─ L6  Skills + Subagents（按需注入工作流）
├─ L7  当前会话（plan / task / 工具结果 / 对话）
└─ L8  即时引用（@file / slash / 用户当场粘贴）
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;l0--模型权重&quot;&gt;L0 · 模型权重&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;有什么&lt;/strong&gt;：截止 knowledge cutoff（这台 Sonnet 4.6 是 2025-08）的世界知识、编程语言、库的用法。
&lt;strong&gt;进阶要点&lt;/strong&gt;：不要把”通用编程常识”写进 CLAUDE.md/memory（噪声），但要写”我们这个 repo 不要按你训练时的常识来”的反例。&lt;/p&gt;

&lt;h3 id=&quot;l1--system-prompt&quot;&gt;L1 · System prompt&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;有什么&lt;/strong&gt;：harness 注入的工具说明、当前工作目录、平台、日期、agent 行为规范。
&lt;strong&gt;生命周期&lt;/strong&gt;：每次会话启动注入，全程 stable。
&lt;strong&gt;进阶要点&lt;/strong&gt;：你改不了它，但你能感知到它的边界——比如它已经规定”不要主动 commit”，你就别在 CLAUDE.md 重写一遍（噪声 + 可能冲突）。&lt;/p&gt;

&lt;h3 id=&quot;l2--settingsjson--hooks可执行规则层&quot;&gt;L2 · settings.json + hooks（可执行规则层）&lt;/h3&gt;

&lt;h4 id=&quot;文件位置按优先级由低到高&quot;&gt;文件位置（按优先级由低到高）&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;~/.claude/settings.json                # 用户全局
&amp;lt;repo&amp;gt;/.claude/settings.json            # 项目共享（入版本库）
&amp;lt;repo&amp;gt;/.claude/settings.local.json      # 项目个人（不入库，gitignore）
&amp;lt;企业管理&amp;gt; managed settings              # 强制（最高优先）
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;后者覆盖前者。&lt;strong&gt;不要把 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;settings.local.json&lt;/code&gt; 提交到 git&lt;/strong&gt;——里面常含个人 token 路径或允许列表。&lt;/p&gt;

&lt;h4 id=&quot;hooks-的事件模型&quot;&gt;Hooks 的事件模型&lt;/h4&gt;

&lt;p&gt;Claude Code 的 hooks 在生命周期事件上挂 shell 命令，输出会作为 system message 注入进 LLM 上下文。常见事件：&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;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SessionStart&lt;/code&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;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UserPromptSubmit&lt;/code&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;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PreToolUse&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;工具调用前&lt;/td&gt;
      &lt;td&gt;拦截危险命令、补 plan&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PostToolUse&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;工具返回后&lt;/td&gt;
      &lt;td&gt;自动 lint、压缩输出、统计&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Stop&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SubagentStop&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;主/子 agent 完成&lt;/td&gt;
      &lt;td&gt;自动备份、发通知&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Notification&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;harness 通知&lt;/td&gt;
      &lt;td&gt;接管”等待用户”提示&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;最常被错用的设计&lt;/strong&gt;：把 deterministic 规则写成”教 agent 记住”。例：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;❌ memory 写：[feedback] 不要用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npm install&lt;/code&gt;，本 repo 用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pnpm&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;写一年也防不住偶尔翻车。正确做法：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;✅ project settings.json &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;permissions.deny&lt;/code&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[&quot;Bash(npm install*)&quot;]&lt;/code&gt;
✅ 同时项目 CLAUDE.md 一行说明（解释为何 deny，避免 agent 困惑）&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;deny 列表是 deterministic 的物理拦截；CLAUDE.md 的一行只是为了让 agent 在被拦时立刻理解”哦，应该用 pnpm”。两者协作，缺一不可。&lt;/p&gt;

&lt;h4 id=&quot;permissions-的作用域&quot;&gt;Permissions 的作用域&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;permissions:
  allow: [...]
  deny:  [...]
  ask:   [...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;许多人只用 allow 来减少 prompt（典型场景：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/fewer-permission-prompts&lt;/code&gt; 这个 skill 帮你做这件事），但 &lt;strong&gt;deny + ask 用得好可以构造”安全护栏”&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deny&lt;/code&gt;: 永远不允许（破坏性命令、敏感目录）&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ask&lt;/code&gt;: 可以做但每次都要批准（git push、send message）&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;allow&lt;/code&gt;: 不弹窗&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;进阶模式：把同一类工具按子模式分级。例如允许只读 git，但 push 要 ask：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;permissions:
  allow: [&quot;Bash(git status)&quot;, &quot;Bash(git diff*)&quot;, &quot;Bash(git log*)&quot;]
  ask:   [&quot;Bash(git push*)&quot;, &quot;Bash(git commit*)&quot;]
  deny:  [&quot;Bash(git push --force*)&quot;, &quot;Bash(git reset --hard*)&quot;]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;l3--项目-claudemd&quot;&gt;L3 · 项目 CLAUDE.md&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;触发&lt;/strong&gt;：当 cwd 进入该 repo（或它的子目录）时，自动加载到 system context。
&lt;strong&gt;生命周期&lt;/strong&gt;：跟代码同 git 历史。
&lt;strong&gt;写什么&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;项目地图（多模块仓库尤其关键，单纯 ls 无法体现哪是核心）&lt;/li&gt;
  &lt;li&gt;跨模块契约 / 数据流（”&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;A&lt;/code&gt; 写入 X，&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;B&lt;/code&gt; 读取 X，schema 在 Z”）&lt;/li&gt;
  &lt;li&gt;非显然的命令（不是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npm test&lt;/code&gt; 这种从 package.json 能猜出来的，而是”测单文件用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npx vitest run path/to.test.ts -t name&lt;/code&gt;“）&lt;/li&gt;
  &lt;li&gt;不要做的事（容易踩的坑、已经废弃的路径）&lt;/li&gt;
  &lt;li&gt;当前长期目标（如果存在；项目 vision 帮 agent 做权衡）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;不写什么&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;README 已写过的内容（重复）&lt;/li&gt;
  &lt;li&gt;通用最佳实践（”提供有意义的错误信息”——所有项目都该这样）&lt;/li&gt;
  &lt;li&gt;文件清单（可发现的）&lt;/li&gt;
  &lt;li&gt;会高频变化的状态（PR 进度、本周计划——这是 task / project-memory 的事）&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;子目录-claudemdprogressive-disclosure&quot;&gt;子目录 CLAUDE.md（progressive disclosure）&lt;/h4&gt;

&lt;p&gt;monorepo 或多项目 workspace 中，根 CLAUDE.md 应该是”地图 + 公共契约”，每个子目录可以有自己的 CLAUDE.md，&lt;strong&gt;只在工作进入该目录时才加载&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;为什么：上下文是稀缺资源（约束 A）。如果你 30 个子项目的所有细节都灌在根 CLAUDE.md，那么修一个 typo 也得带着 5000 行的工作区描述推理。&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;~/claw/CLAUDE.md                  # 工作区索引（轻量，~150 行）
~/claw/marginalia/CLAUDE.md        # Jekyll 站点细节
~/claw/tv/CLAUDE.md                # AI 短剧流水线细节
~/claw/lotus-academy-design/CLAUDE.md  # 全栈应用细节
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;import-语法&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@import&lt;/code&gt; 语法&lt;/h4&gt;

&lt;p&gt;CLAUDE.md 支持 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@path/to/file.md&lt;/code&gt; 引用其他文档，加载时会展开（一定深度内）。用途：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;把超长的契约说明拆出去：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@docs/architecture.md&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;团队共享 + 个人覆盖：项目 CLAUDE.md &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@~/.claude/my-team-conventions.md&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;多 repo 共享一份”风格指南”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;陷阱&lt;/strong&gt;：被 import 的文件也吃 token；展开后总长还是有上限，别把整个 docs/ 都拉进来。&lt;/p&gt;

&lt;h3 id=&quot;l4--用户级-claudemdclaudeclaudemd&quot;&gt;L4 · 用户级 CLAUDE.md（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.claude/CLAUDE.md&lt;/code&gt;）&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;触发&lt;/strong&gt;：所有 Claude Code 会话都加载（无论 cwd）。
&lt;strong&gt;写什么&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;“我是谁、我的整体技术风格”（覆盖所有项目）&lt;/li&gt;
  &lt;li&gt;跨项目都成立的偏好（语言、回复长度、commit 风格）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;strong&gt;不要把这里当 memory 用&lt;/strong&gt;。memory 系统比这里精细（分类型、有名字、能 grep）。这里只放”整体性、低频变化”的偏好，写成 1-2 段散文最佳。&lt;/p&gt;

&lt;h3 id=&quot;l5--auto-memory跨会话个人状态&quot;&gt;L5 · Auto-memory（跨会话个人状态）&lt;/h3&gt;

&lt;p&gt;详见 §5 专章。这里只点位置：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;~/.claude/projects/&amp;lt;encoded-cwd&amp;gt;/memory/
├── MEMORY.md                # 索引（每会话载入，≤200 行被截）
├── user_*.md                # user 类型
├── feedback_*.md             # feedback 类型
├── project_*.md              # project 类型
└── reference_*.md            # reference 类型
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;注意 memory 是 &lt;strong&gt;per-cwd&lt;/strong&gt; 的（每个工作目录有独立 memory 目录）。这意味着你在 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/claw&lt;/code&gt; 下积累的 memory 不会被 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/some-other-repo&lt;/code&gt; 看到——这是 feature 不是 bug：避免跨项目偏好串味。&lt;/p&gt;

&lt;p&gt;如果你确实有跨所有 cwd 的偏好，写到 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.claude/CLAUDE.md&lt;/code&gt;（L4），不要复制到每个 memory 目录。&lt;/p&gt;

&lt;h3 id=&quot;l6--skills--subagents按需注入工作流&quot;&gt;L6 · Skills + Subagents（按需注入工作流）&lt;/h3&gt;

&lt;h4 id=&quot;skills&quot;&gt;Skills&lt;/h4&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.claude/skills/&amp;lt;name&amp;gt;/SKILL.md&lt;/code&gt;（也可以从 plugin marketplace 安装）。每个 skill 在会话启动时被列在 system reminder 里（&lt;strong&gt;只列名 + 描述&lt;/strong&gt;，不展开 body）；当用户输入 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/&amp;lt;name&amp;gt;&lt;/code&gt; 或 trigger 命中时才注入完整 body 并执行。&lt;/p&gt;

&lt;p&gt;为什么这设计：约束 A（稀缺）。如果 50 个 skill 的全文都加载，token 就崩了。所以 skill 是 “lazy load”：先暴露名字让 agent 知道存在，按需展开。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;写 skill 的核心要点&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;description 必须写得让”agent 一眼就知道何时该用”。”Use to do X-ish things” 太空。”Use when user asks about X / when file matches Y” 才有用。&lt;/li&gt;
  &lt;li&gt;body 写”做这件事的标准动作 + 资源指针”，不要写理论。&lt;/li&gt;
  &lt;li&gt;资源（脚本、模板、配置）放 skill 目录里，body 用相对路径引用。&lt;/li&gt;
  &lt;li&gt;如果 skill 涉及调用其他工具，trigger 条件描述要包含”什么时候&lt;strong&gt;不该&lt;/strong&gt;用”——避免误触。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;subagents&quot;&gt;Subagents&lt;/h4&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.claude/agents/&amp;lt;name&amp;gt;.md&lt;/code&gt; 或内置（claude-code-guide / Plan / Explore / general-purpose）。每个 subagent 是一个&lt;strong&gt;独立上下文&lt;/strong&gt;的 LLM 实例：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;自己的 system prompt&lt;/li&gt;
  &lt;li&gt;自己的工具集（可限定）&lt;/li&gt;
  &lt;li&gt;与主对话&lt;strong&gt;不共享&lt;/strong&gt;上下文（除非通过 fork，见 §11）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;为什么要 subagent：约束 A 又出现了。一个 5 分钟的”读 30 个文件找 X 在哪定义”，会把 30 个文件原文塞进上下文。让 subagent 去做、只回收一段总结，主对话省了 30 个文件的 noise。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subagent 的”代价”&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;它&lt;strong&gt;不知道&lt;/strong&gt;你和主对话之间的所有约定（除非 prompt 里写）&lt;/li&gt;
  &lt;li&gt;第一次调用要付 prompt cache miss&lt;/li&gt;
  &lt;li&gt;它的 working memory 不持久（一次结束就没了）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;所以判断”派 subagent 还是自己干”，看：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;输出能否被压缩成几句话？能 → subagent&lt;/li&gt;
  &lt;li&gt;任务能否独立定义、不依赖大量隐含上下文？能 → subagent&lt;/li&gt;
  &lt;li&gt;耗时长且我想边干边聊？能 → fork（带上下文的 subagent）&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;l7--当前会话plan--task--工具结果--对话&quot;&gt;L7 · 当前会话（plan / task / 工具结果 / 对话）&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;生命周期&lt;/strong&gt;：单次会话。会话结束（关闭终端 / 上下文压缩）就丢失。
&lt;strong&gt;写什么&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;当前任务的 plan（用 Plan 工具锁定方案）&lt;/li&gt;
  &lt;li&gt;task list（用 TaskCreate；分步进度跟踪）&lt;/li&gt;
  &lt;li&gt;工具调用的中间结果&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;最常见错误&lt;/strong&gt;：把”本次任务的进度”写进 memory。&lt;strong&gt;不要&lt;/strong&gt;。memory 是给”未来会话”看的，写一次性进度只会让未来会话困惑（”这个任务做完了吗？”）。&lt;/p&gt;

&lt;h3 id=&quot;l8--即时引用用户当场注入&quot;&gt;L8 · 即时引用（用户当场注入）&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@file.md&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@image.png&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/skill&lt;/code&gt;、用户粘贴的代码段。&lt;/p&gt;

&lt;p&gt;为什么这层重要：它是&lt;strong&gt;用户对 agent 的精确手术工具&lt;/strong&gt;。当你发现 agent 缺某条信息，最快的修复不是改 CLAUDE.md，而是当场 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@&lt;/code&gt;。改 CLAUDE.md 是”把这条修复变成永久”——只在你判断它会反复用到时才升级。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;5--memory-系统深度解剖&quot;&gt;§5 · Memory 系统深度解剖&lt;/h2&gt;

&lt;p&gt;memory 是 Claude Code 中最容易被错用的层。一旦掌握，它的 ROI 也最高。&lt;/p&gt;

&lt;h3 id=&quot;51-为什么是四种类型&quot;&gt;5.1 为什么是四种类型&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;user / feedback / project / reference&lt;/code&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;th&gt;衰减率&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;user&lt;/td&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;feedback&lt;/td&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;project&lt;/td&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;reference&lt;/td&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;&lt;strong&gt;含义&lt;/strong&gt;：写 memory 时先问自己”这条&lt;strong&gt;为什么&lt;/strong&gt;未来会用到、&lt;strong&gt;什么情境&lt;/strong&gt;会用到”。如果情境模糊，那条 memory 多半价值低。&lt;/p&gt;

&lt;h3 id=&quot;52-索引文件memorymd的设计哲学&quot;&gt;5.2 索引文件（MEMORY.md）的设计哲学&lt;/h3&gt;

&lt;p&gt;MEMORY.md 不是 memory 本身，是&lt;strong&gt;给未来会话的”目录页”&lt;/strong&gt;。每条索引行的目标是：让未来会话扫一眼就能判断”这条与当前任务相关吗”。&lt;/p&gt;

&lt;p&gt;✅ 好索引行：&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;- [GitHub 操作规则](feedback_github_ops.md) — force-push 需批准；其他 GH 动作在 gittee-coder 上预授权
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;❌ 差索引行：&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;- [GH](gh.md) — github stuff
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;差在哪：差的版本即使读了也得点开文件才能判断相关性，浪费一次”判断成本”。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;索引行模板&lt;/strong&gt;：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;- [短标题](文件名) — 一句具体钩子（who/what/why）&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;200 行截断不是 nice-to-have：超过这个数 LLM 真的看不到后面的条目。所以维护 MEMORY.md 时永远把最重要的、最跨任务的条目放上面。&lt;/p&gt;

&lt;h3 id=&quot;53-单条-memory-的写作模板&quot;&gt;5.3 单条 memory 的写作模板&lt;/h3&gt;

&lt;h4 id=&quot;user-类型直接陈述事实&quot;&gt;user 类型：直接陈述事实&lt;/h4&gt;
&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;User profile — pyf&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Who pyf is, communication style (terse Chinese), autonomy stance&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;user&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

pyf is the operator. Roles: [...]. Communication: terse, Chinese-preferred.
Autonomy preference: act, don&apos;t propose-and-wait — only confirm for irreversible actions.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;feedback-类型规则--why--how-to-apply强制三段式&quot;&gt;feedback 类型：规则 + Why + How to apply（强制三段式）&lt;/h4&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Visual design quality bar&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Never ship default themes/templates; design quality is mandatory&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;feedback&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

不要使用默认主题、模板或框架自带的样式直接交付。

&lt;span class=&quot;gs&quot;&gt;**Why:**&lt;/span&gt; 用户在多次评审中明确指出&quot;看起来像随手套模板&quot;，要求把视觉作为一等输出。
默认样式没有差异化、传达不了项目意图。

&lt;span class=&quot;gs&quot;&gt;**How to apply:**&lt;/span&gt; 凡是会被用户看到的产出（站点、报告、PPT、视频），都必须经过
独立的视觉决策（配色、排版、信息层次）。即便是内部草稿，初稿也要超出&quot;模板感&quot;。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;为什么强制 Why + How：约束 C（噪声成本）的反面——一条 memory 在未来情境里可能”看起来相关但实际不该套用”。Why 让 agent 判断&lt;strong&gt;这次是不是真的同情境&lt;/strong&gt;；How 让 agent 知道&lt;strong&gt;怎样落地这条规则&lt;/strong&gt;。少了任一项，memory 在边缘情境下要么过度套用（生硬）要么不套用（白记）。&lt;/p&gt;

&lt;h4 id=&quot;project-类型事实--why--how-to-apply&quot;&gt;project 类型：事实 + Why + How to apply&lt;/h4&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;周更视频迁 B 站&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;2026-05 起视频走 B 站托管，Marginalia 嵌 iframe&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;project&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

每周一发的 AI 周报视频，从 marginalia repo 直接托管改为上传 B 站后嵌 iframe。

&lt;span class=&quot;gs&quot;&gt;**Why:**&lt;/span&gt; Pages 仓库容量/流量受限，单期 mp4 ≥ 10MB 撞墙。
2026-05-05 之后所有新视频都按这个流程走。

&lt;span class=&quot;gs&quot;&gt;**How to apply:**&lt;/span&gt; 用 &lt;span class=&quot;sb&quot;&gt;`marginalia/scripts/publish-video.py --upload`&lt;/span&gt;，
脚本会把 BV id 写回 _videos/&lt;span class=&quot;nt&quot;&gt;&amp;lt;slug&amp;gt;&lt;/span&gt;.md（&lt;span class=&quot;sb&quot;&gt;`bvid:`&lt;/span&gt; 字段，去掉 &lt;span class=&quot;sb&quot;&gt;`video:`&lt;/span&gt;）。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;reference-类型where--用途&quot;&gt;reference 类型：where + 用途&lt;/h4&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;MiniMax 开放平台&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;按量 key + 端点 + 模型单价&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;reference&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

&lt;span class=&quot;sb&quot;&gt;`~/.minimax.env`&lt;/span&gt; — 按量 API key
&lt;span class=&quot;sb&quot;&gt;`api.minimaxi.com`&lt;/span&gt; — 唯一端点
模型与单价（2026-05 现状）：
&lt;span class=&quot;p&quot;&gt;  -&lt;/span&gt; speech-2.6-hd: ¥0.432/千字符
&lt;span class=&quot;p&quot;&gt;  -&lt;/span&gt; MiniMax-Hailuo-02 768P 6s: ¥1.944/条
&lt;span class=&quot;gs&quot;&gt;**注意**&lt;/span&gt;：无公开账单查询 API，需要去 web 后台对账。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;54-写入触发什么时候保存&quot;&gt;5.4 写入触发（什么时候保存）&lt;/h3&gt;

&lt;h4 id=&quot;强信号必须立即保存&quot;&gt;强信号（必须立即保存）&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;用户&lt;strong&gt;纠正&lt;/strong&gt;了一个判断：”不要 X，我们用 Y”&lt;/li&gt;
  &lt;li&gt;用户&lt;strong&gt;默许&lt;/strong&gt;了一个非显然选择（agent 选了 A，用户没异议——这是认证的判断）&lt;/li&gt;
  &lt;li&gt;用户告诉了你新的环境信息（新 key、新服务器、新组织账号）&lt;/li&gt;
  &lt;li&gt;用户告知了项目的时间节点 / 决策原因&lt;/li&gt;
  &lt;li&gt;用户解释了一个奇怪 workaround 的理由&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;弱信号克制&quot;&gt;弱信号（克制）&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;你”觉得”将来可能有用——多半不会&lt;/li&gt;
  &lt;li&gt;当前对话的中间结论——不要存，存了也是噪声&lt;/li&gt;
  &lt;li&gt;代码变更——git log 是 source of truth&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;反信号绝不保存&quot;&gt;反信号（绝不保存）&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;一次性 task 的进度&lt;/li&gt;
  &lt;li&gt;你刚 ToolSearch 出来的工具列表&lt;/li&gt;
  &lt;li&gt;用户让你 grep 的结果&lt;/li&gt;
  &lt;li&gt;流水线日志、API 响应原文&lt;/li&gt;
  &lt;li&gt;任何能从 git/grep/ls 重新得到的信息&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;55-读取触发与信任但验证&quot;&gt;5.5 读取触发与”信任但验证”&lt;/h3&gt;

&lt;p&gt;memory 可以快速给出答案，但 &lt;strong&gt;memory 是过去某时刻的快照&lt;/strong&gt;。一条 memory 提到的文件可能已被改名、删除；提到的 API key 可能轮换；提到的服务可能停了。&lt;/p&gt;

&lt;p&gt;所以高级用法：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;用户在询问历史/状态&lt;/strong&gt; → memory 直接回答（”上次你说 X 是这样配的”）&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;用户准备&lt;/strong&gt;基于 memory 行动** → 先验证再行动**&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;例：用户说”按之前那个流程发布报告”。
→ memory 说用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scripts/publish.py&lt;/code&gt;。
→ &lt;strong&gt;不要&lt;/strong&gt;直接跑 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scripts/publish.py path/to.md&lt;/code&gt;。
→ &lt;strong&gt;先&lt;/strong&gt;：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls scripts/publish.py&lt;/code&gt; 确认存在 + 快速 head 一眼参数没变 → 再跑。&lt;/p&gt;

&lt;p&gt;成本仅一次 ls + read，省掉的是”按陈旧记忆办错事的回滚成本”。&lt;/p&gt;

&lt;h3 id=&quot;56-对称记录原则&quot;&gt;5.6 “对称记录”原则&lt;/h3&gt;

&lt;p&gt;新手只在被纠正时记 feedback，结果：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;agent 知道”不要做 X”&lt;/li&gt;
  &lt;li&gt;agent 不知道”上次你认可的做法是 Y”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;下次遇到类似情境，agent 会过度保守——再次询问、再次提议、再次浪费一次确认。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;修正&lt;/strong&gt;：用户&lt;strong&gt;默许&lt;/strong&gt;了一个判断 = 同样要写 memory。例：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;agent 选择”把 4 个独立 PR 合并成 1 个” → 用户没异议直接接受 → 写一条 feedback：
“对此类重构，用户偏好单 PR 而非拆分。&lt;strong&gt;Why:&lt;/strong&gt; 用户在 [日期] 的此选择中默许了此判断。&lt;strong&gt;How to apply:&lt;/strong&gt; 类似情境下默认走单 PR，除非有 reviewer 容量考虑。”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;对称记录是把 memory 从”防错系统”升级到”判断辅助系统”的关键。&lt;/p&gt;

&lt;h3 id=&quot;57-维护去重衰减stale-检测&quot;&gt;5.7 维护：去重、衰减、stale 检测&lt;/h3&gt;

&lt;p&gt;memory 数量到 10+ 后会出现：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;同主题分散&lt;/strong&gt;：A 文件 + B 文件都讲 GitHub 操作。&lt;strong&gt;修&lt;/strong&gt;：合并到一个，更新索引。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;stale 条目&lt;/strong&gt;：写时正确，现在过时（人换了、key 换了、库改名）。&lt;strong&gt;修&lt;/strong&gt;：要么 update 要么删除。&lt;strong&gt;绝不&lt;/strong&gt;留着”添加但保留旧的，避免删错”——这是 memory 腐烂的开始。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;过细&lt;/strong&gt;：每个调试细节都记一条。&lt;strong&gt;修&lt;/strong&gt;：细节属于代码 / git log。删掉。&lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&quot;月度-5-分钟巡检推荐流程&quot;&gt;月度 5 分钟巡检（推荐流程）&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;1. 读 MEMORY.md，对每条问&quot;这条还成立吗？还有用吗？&quot;
2. 不成立 → 删（直接 rm 文件 + 删索引行）
3. 部分成立 → update（不要叠加新内容到旧文件，要 rewrite）
4. 主题分散 → 合并
5. 重要度变化 → 调整索引顺序（重要的上提，避免被 200 行截断）
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;58-进阶memory-当-llm-友好的个人知识库索引&quot;&gt;5.8 进阶：memory 当 LLM 友好的”个人知识库索引”&lt;/h3&gt;

&lt;p&gt;终极用法：memory 不存”事实”，而存”&lt;strong&gt;事实的索引&lt;/strong&gt;“。&lt;/p&gt;

&lt;p&gt;例：你不要把整篇技术决策记录写进 memory（噪声、衰减），而是：&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;ADR — Auth middleware rewrite (2026-Q2)&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;决策记录指针；详情见 docs/decisions/0042&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;reference&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;

Auth middleware 在 2026-Q2 被重写。&lt;span class=&quot;gs&quot;&gt;**完整决策、理由、反对意见**&lt;/span&gt;见
&lt;span class=&quot;sb&quot;&gt;`&amp;lt;repo&amp;gt;/docs/decisions/0042-auth-rewrite.md`&lt;/span&gt;。

&lt;span class=&quot;gs&quot;&gt;**关键 takeaway**&lt;/span&gt;（避免每次都读全文）：
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; 触发原因：legal 合规（不是技术债）
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; 选型：JWT + Redis session（不是纯 stateless JWT）
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; 拒绝的方案：OAuth proxy（运维复杂度太高）

&lt;span class=&quot;gs&quot;&gt;**何时去读全文**&lt;/span&gt;：
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; agent 要修改 auth 流程时
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; 用户问&quot;为什么不用 X 方案&quot;时
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这种”索引型 memory”享受了 memory 的自动注入 + ADR 文档的细节深度，回避了把长文塞 memory 的噪声成本。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;6--claudemd-工程&quot;&gt;§6 · CLAUDE.md 工程&lt;/h2&gt;

&lt;h3 id=&quot;61-加载机制mental-model&quot;&gt;6.1 加载机制（mental model）&lt;/h3&gt;

&lt;p&gt;会话启动时（在 cwd &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;repo&amp;gt;&lt;/code&gt; 下）：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;repo&amp;gt;/CLAUDE.md&lt;/code&gt; 加载（如果存在）&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.claude/CLAUDE.md&lt;/code&gt; 加载（如果存在）&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;repo&amp;gt;&lt;/code&gt; 中&lt;strong&gt;所有父目录&lt;/strong&gt;的 CLAUDE.md 也会按层级加载（如果你在子目录）&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;进入子目录工作时，子目录的 CLAUDE.md 也会进入上下文（progressive disclosure）。&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@path/to/file.md&lt;/code&gt; 会展开 import（一定深度内）。&lt;/p&gt;

&lt;h3 id=&quot;62-写作守则六个是--否&quot;&gt;6.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;/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;通用 npm/pytest/cargo 命令&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;本周计划、PR 进度&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;h3 id=&quot;63-三节模板最经济的-claudemd-骨架&quot;&gt;6.3 三节模板（最经济的 CLAUDE.md 骨架）&lt;/h3&gt;

&lt;p&gt;我推荐对绝大多数项目用这三节：&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gh&quot;&gt;# CLAUDE.md&lt;/span&gt;

This file provides guidance to Claude Code (claude.ai/code) ...

&lt;span class=&quot;gu&quot;&gt;## 项目地图&lt;/span&gt;

[一段 100-300 字概述：这个 repo 做什么、有几个核心组件、谁产数据谁消费。
配一张目录功能表（不是 tree）：模块名 / 角色 / 技术栈 / 关键文件。]

&lt;span class=&quot;gu&quot;&gt;## 跨模块契约 / 工作流&lt;/span&gt;

[多模块协作的部分。&quot;A 写入 X，B 读取 X，schema 在 Z&quot;&quot;build 时 A 必须先于 B&quot;
&quot;添加新 endpoint 时需同步改 OpenAPI + 前端 client&quot;。这是 grep 看不出来的。]

&lt;span class=&quot;gu&quot;&gt;## 不要做的事&lt;/span&gt;

[已经踩过 / 明确禁止的。&quot;不要在 root 跑 git&quot;&quot;不要把 mp4 提到此 repo&quot;
&quot;重构时不要碰 legacy/ 目录直到 v3 上线&quot;。]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;如果有非常关键的命令也可以加 “## 常用命令” 一节，但仅限 README 没写或写得不够 agent-friendly 的部分。&lt;/p&gt;

&lt;h3 id=&quot;64-长度与密度&quot;&gt;6.4 长度与密度&lt;/h3&gt;

&lt;p&gt;实操经验：CLAUDE.md 超过 300 行后边际收益急剧下降。理由：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;agent 每次启动都要”读完 + 索引”，长文吃 attention&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;：写完后自问”如果 CLAUDE.md 砍掉一半，agent 会做错事吗？” 不会就砍。&lt;/p&gt;

&lt;p&gt;如果项目真的复杂到放不下，用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@import&lt;/code&gt; 把不同主题拆开：&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gu&quot;&gt;## 项目地图&lt;/span&gt;

[简版总览]

详细模块说明：
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; @docs/architecture.md
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; @docs/data-flow.md
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; @docs/deployment.md
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;65-多项目-workspace你这个-claw-的情境&quot;&gt;6.5 多项目 workspace（你这个 ~/claw 的情境）&lt;/h3&gt;

&lt;p&gt;工作区不是单 repo 时，根 CLAUDE.md 应该极简：&lt;strong&gt;只做索引&lt;/strong&gt;。&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gu&quot;&gt;## Workspace 性质&lt;/span&gt;

~/claw 不是 git 仓库，是若干独立子项目。每个子项目自己的 CLAUDE.md 在
进入对应目录时加载。&lt;span class=&quot;gs&quot;&gt;**不要在根目录跑 git。**&lt;/span&gt;

&lt;span class=&quot;gu&quot;&gt;## 子项目地图&lt;/span&gt;

[一张表：子目录 / 角色 / 技术栈 / 下游]

&lt;span class=&quot;gu&quot;&gt;## 跨项目契约&lt;/span&gt;

[只有跨项目时才适用的事，比如&quot;报告 → 站点&quot;的发布流程]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;每个子项目的细节由 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;子项目&amp;gt;/CLAUDE.md&lt;/code&gt; 自己承担。这避免根文件膨胀到 1000 行。&lt;/p&gt;

&lt;h3 id=&quot;66-失效检测claudemd-的运维&quot;&gt;6.6 失效检测（CLAUDE.md 的运维）&lt;/h3&gt;

&lt;p&gt;CLAUDE.md 写好后会&lt;strong&gt;腐烂&lt;/strong&gt;——命令改了、文件改名了、契约变了。检测方法：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;每次 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/init&lt;/code&gt; 之前&lt;/strong&gt;：扫一眼现有 CLAUDE.md，对每条具体命令 / 路径，确认它仍然存在。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;被 agent 误导后&lt;/strong&gt;：如果 agent 跑了 CLAUDE.md 里的命令但失败了，根因可能是 CLAUDE.md 过期 → 立刻修。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;重大重构后&lt;/strong&gt;：把 CLAUDE.md 当代码一样改。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;季度 review&lt;/strong&gt;：跟 README、makefile 对照一次。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;很多团队把 CLAUDE.md 写一次扔在 repo 里就再不管。半年后 agent 在它指引下做错事，团队抱怨”AI 不行”——其实是 instruction 烂了。&lt;/p&gt;

&lt;h3 id=&quot;67-团队-vs-个人的-claudemd&quot;&gt;6.7 团队 vs 个人的 CLAUDE.md&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;repo&amp;gt;/CLAUDE.md&lt;/code&gt; 是 git 跟踪的，&lt;strong&gt;会被所有用 Claude Code 的同事用到&lt;/strong&gt;。这意味着：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;不要在里面写个人偏好（”我喜欢中文回复”）→ 用户级 CLAUDE.md&lt;/li&gt;
  &lt;li&gt;不要写你的私人 token 路径 → settings.local.json&lt;/li&gt;
  &lt;li&gt;不要带政治倾向（”老板要求 X，我们就硬着头皮做”）→ 团队 wiki&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;如果你想给”自己 + 这个 repo”加只对自己生效的指引，写 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.claude/CLAUDE.md&lt;/code&gt; 里加上”在 &lt;repo&gt; 中也额外 ...&quot;这样的条件性偏好。&lt;/repo&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;7--skills-与-subagents&quot;&gt;§7 · Skills 与 Subagents&lt;/h2&gt;

&lt;h3 id=&quot;71-skills-的设计第一性&quot;&gt;7.1 Skills 的设计第一性&lt;/h3&gt;

&lt;p&gt;Skill 解决”我有一个&lt;strong&gt;反复使用的工作流&lt;/strong&gt;，每次都要复述步骤太累”的问题。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;何时升级为 skill&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;同一动作做了 ≥ 3 次（启动 5 分钟工作流的开销 &amp;lt; 重写说明的累计开销）&lt;/li&gt;
  &lt;li&gt;步骤多 / 易出错 / 有标准化资源（脚本、模板）&lt;/li&gt;
  &lt;li&gt;需要团队复用（skill 可以入 git）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Skill 的结构&lt;/strong&gt;：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;~/.claude/skills/&amp;lt;name&amp;gt;/
├── SKILL.md           # 入口，含 YAML frontmatter
├── scripts/           # 辅助脚本
├── templates/         # 模板文件
└── README.md          # 给人看的（可选）
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SKILL.md&lt;/code&gt; 的 frontmatter 通常包含 name / description / 触发条件。&lt;strong&gt;description 是最重要的字段&lt;/strong&gt;——它决定 agent 是否会在合适时机想起用这个 skill。&lt;/p&gt;

&lt;h4 id=&quot;写好-description-的三条原则&quot;&gt;写好 description 的三条原则&lt;/h4&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;明确触发条件&lt;/strong&gt;：用 “Use when…“，不要用 “Use to do…“。
    &lt;ul&gt;
      &lt;li&gt;❌ “Use to handle authentication-related tasks.”&lt;/li&gt;
      &lt;li&gt;✅ “Use when the user asks to add/modify auth flows OR when files matching &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;*/auth/*.ts&lt;/code&gt; are edited.”&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;包含负面条件&lt;/strong&gt;：写”什么时候&lt;strong&gt;不该&lt;/strong&gt;用”。
    &lt;ul&gt;
      &lt;li&gt;✅ “SKIP when file imports &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;openai&lt;/code&gt; SDK or filename contains &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-openai&lt;/code&gt;.”&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;具体到 trigger 词&lt;/strong&gt;：列出会触发它的关键词 / 文件 pattern。&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;72-subagents四种典型用法&quot;&gt;7.2 Subagents：四种典型用法&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;用途&lt;/th&gt;
      &lt;th&gt;推荐 subagent&lt;/th&gt;
      &lt;th&gt;理由&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;找 X 在哪定义&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Explore&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;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Plan&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;需要架构判断，输出 step-by-step&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;大型独立任务&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;general-purpose&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;多步、需要 write 权限&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;关于 Claude Code 本身的问题&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;claude-code-guide&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;专门训练过的指引&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h4 id=&quot;fork不带-subagent_type-的-agent&quot;&gt;Fork（不带 subagent_type 的 Agent）&lt;/h4&gt;

&lt;p&gt;特殊：fork &lt;strong&gt;继承当前对话的全部上下文&lt;/strong&gt;，但执行结果不污染主对话。&lt;/p&gt;

&lt;p&gt;何时 fork：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;任务&lt;strong&gt;依赖隐含上下文&lt;/strong&gt;（”按我们刚才聊的方式继续 …“）&lt;/li&gt;
  &lt;li&gt;输出能压成几句话（中间过程是噪声）&lt;/li&gt;
  &lt;li&gt;你想边干边继续主对话（fork 在后台跑）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;fork 守则&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;不要 peek（不要读 fork 的中间输出）&lt;/li&gt;
  &lt;li&gt;不要 race（fork 没回来前别假设结果）&lt;/li&gt;
  &lt;li&gt;prompt 写”指令”而非”背景”（背景已经继承）&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;73-skill--subagent--memory-的协作模式&quot;&gt;7.3 Skill / Subagent / Memory 的协作模式&lt;/h3&gt;

&lt;p&gt;三者分工是不同的”轴”：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Skill&lt;/strong&gt;: 做这件事的 &lt;strong&gt;how&lt;/strong&gt;（步骤）&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Subagent&lt;/strong&gt;: 做这件事的 &lt;strong&gt;环境&lt;/strong&gt;（隔离、专用工具集）&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Memory&lt;/strong&gt;: 做这件事的 &lt;strong&gt;why / for whom&lt;/strong&gt;（用户偏好、历史决策）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;进阶模式：”skill + memory + hook 三件套”：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;skill 定义工作流（步骤）&lt;/li&gt;
  &lt;li&gt;memory 记录这个用户在这个工作流上的非默认偏好&lt;/li&gt;
  &lt;li&gt;hook 在工作流入口拦截 / 自动调用 skill&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;例：你的”周更视频流水线”是个完美的三件套候选：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;skill &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;weekly-video&lt;/code&gt;: 定义”读 script.json → 跑 render.py → publish-video.py”&lt;/li&gt;
  &lt;li&gt;memory: “用户偏好 ≤ ¥12 单期成本，默认 Hailuo-02-Fast”&lt;/li&gt;
  &lt;li&gt;hook (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UserPromptSubmit&lt;/code&gt;): 检测”周更视频”关键词时自动 reminder&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;8--决策框架&quot;&gt;§8 · 决策框架&lt;/h2&gt;

&lt;p&gt;新手最大的问题是&lt;strong&gt;面对一条信息不知道往哪放&lt;/strong&gt;。下面给一组决策树。&lt;/p&gt;

&lt;h3 id=&quot;81-决策树-a--我想让-agent-记住一件事&quot;&gt;8.1 决策树 A — “我想让 agent 记住一件事”&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;这件事是 deterministic 的吗？（&quot;绝不要 X&quot;、&quot;必须 Y&quot;）
├─ 是 → settings.json (permissions / hooks)
└─ 否 → 它的衰减率？
        ├─ 跟代码同寿（&quot;build 命令&quot;、&quot;模块契约&quot;）→ CLAUDE.md
        ├─ 跨项目都成立（&quot;我喜欢中文&quot;）→ user-level CLAUDE.md
        ├─ 跨会话个人偏好（&quot;我接受单 PR&quot;）→ memory (feedback)
        ├─ 跨会话身份信息（&quot;我是 Go 工程师&quot;）→ memory (user)
        ├─ 项目状态有时间窗口（&quot;merge freeze 到 X&quot;）→ memory (project)
        ├─ 外部资源指针（&quot;key 在 ~/.x.env&quot;）→ memory (reference)
        └─ 单次会话（&quot;刚才我们聊到 ...&quot;）→ task / 对话本身
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;82-决策树-b--agent-刚做错了&quot;&gt;8.2 决策树 B — “agent 刚做错了”&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;是模型本身的判断错？
├─ 是 deterministic 错（每次都会错的同类）→ 升级为 hook / permission deny
├─ 是 heuristic 错（情境下做错）→ 写 feedback memory（带 Why）
└─ 是因为信息缺失 → 把信息补到 CLAUDE.md / memory（看衰减率）

是 instruction 烂导致的？（CLAUDE.md / memory 误导）
└─ 修 instruction，**不要**给它叠加补丁规则
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;83-决策树-c--我做了个新工作流&quot;&gt;8.3 决策树 C — “我做了个新工作流”&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;做过几次了？
├─ 1 次 → 写到对话里 / 写在 README
├─ 2-3 次 → 写到 CLAUDE.md（如果 repo 内）或 memory（如果跨项目）
└─ ≥ 3 次 → 升级为 skill
            ├─ 团队共享 → 入 git
            └─ 个人 → ~/.claude/skills/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;84-决策树-d--我手里这条信息要不要存&quot;&gt;8.4 决策树 D — “我手里这条信息要不要存”&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;这条信息能从代码 / git log / grep 重新得到吗？
├─ 能 → 不存（让 agent 当场查）
└─ 不能 → 它在未来什么情境下会再次需要？
          ├─ 答不上来 → 不存
          └─ 答得上来 → 存到对应层
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;9--反模式速查&quot;&gt;§9 · 反模式速查&lt;/h2&gt;

&lt;h3 id=&quot;91-memory-反模式&quot;&gt;9.1 Memory 反模式&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;&lt;strong&gt;Memory 当 todo&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;“TODO: 下周改 X” 写进 memory&lt;/td&gt;
      &lt;td&gt;用 task list；进度别进 memory&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Memory 当报告&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;把整篇调研笔记塞 memory&lt;/td&gt;
      &lt;td&gt;写到 docs/，memory 只存指针&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;被纠正了不记&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;同一错误被纠正 3+ 次&lt;/td&gt;
      &lt;td&gt;第一次就写 feedback memory&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 反复请求确认同样判断&lt;/td&gt;
      &lt;td&gt;用户默许后立刻写 memory&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;混合类型&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;一个文件既 user 又 project&lt;/td&gt;
      &lt;td&gt;拆开，每个文件单一 type&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;巨型 MEMORY.md&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;200+ 行&lt;/td&gt;
      &lt;td&gt;200 行后会被截断；精简、合并、删 stale&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;直接覆盖，留着是 stale 之源&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;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2026-05-07&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;92-claudemd-反模式&quot;&gt;9.2 CLAUDE.md 反模式&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;&lt;strong&gt;复制 README&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;CLAUDE.md = README 重排&lt;/td&gt;
      &lt;td&gt;删，让 README 自己说话&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;删；这是 system prompt 的事&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;文件清单&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;把 tree 粘进去&lt;/td&gt;
      &lt;td&gt;删；ls 能给的不重复&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;1000+ 行根 CLAUDE.md&lt;/td&gt;
      &lt;td&gt;拆子目录或 @import&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;个人偏好混入团队 CLAUDE.md&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;“我用 emacs 所以 …”&lt;/td&gt;
      &lt;td&gt;移到 user-level&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;93-hook-反模式&quot;&gt;9.3 Hook 反模式&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;&lt;strong&gt;Hook 跑慢命令&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;每次工具调用阻塞 5s&lt;/td&gt;
      &lt;td&gt;异步 / cache / 砍掉&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;注入 500 行 git status&lt;/td&gt;
      &lt;td&gt;只输出关键摘要&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;hook 触发 hook&lt;/td&gt;
      &lt;td&gt;加退出条件&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Hook 当 logging&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;用 hook 记录所有动作&lt;/td&gt;
      &lt;td&gt;用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;claude --debug&lt;/code&gt; 或外部日志&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;94-subagent-反模式&quot;&gt;9.4 Subagent 反模式&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;&lt;strong&gt;微任务用 subagent&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;“读这个 100 行的文件” 派 agent&lt;/td&gt;
      &lt;td&gt;直接 Read&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;不写背景就派 fresh agent&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;subagent 困惑、效果差&lt;/td&gt;
      &lt;td&gt;写完整 brief；或改用 fork&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;fork 后 peek&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;读 fork 中间输出&lt;/td&gt;
      &lt;td&gt;等通知；信任完成消息&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;subagent 改了文件不验证&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;“subagent 报告完成”就直接信&lt;/td&gt;
      &lt;td&gt;自己 git diff 看一眼&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;10--治理与维护&quot;&gt;§10 · 治理与维护&lt;/h2&gt;

&lt;h3 id=&quot;101-月度-5-分钟流程&quot;&gt;10.1 月度 5 分钟流程&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;1. ls ~/.claude/projects/&amp;lt;cwd&amp;gt;/memory/ ， 看条目数。
   超过 30 → 触发清理（合并、删 stale）。

2. cat MEMORY.md，对每行问：
   - 还成立吗？
   - 还有用吗？
   - 索引行钩子写得够具体吗？

3. 重新排序：跨任务最常用的提到顶部（避免 200 行截断）。

4. cd 到主要项目，cat CLAUDE.md，
   挑 3 条具体命令 / 路径，验证仍存在。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;102-跨项目搬迁信息&quot;&gt;10.2 跨项目搬迁信息&lt;/h3&gt;

&lt;p&gt;memory 是 per-cwd 的。当你启动新工作区想沿用旧偏好时：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;跨所有项目偏好&lt;/strong&gt; → 已经在 user-level CLAUDE.md / 用户全局 settings 里，新 cwd 自动有&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;某些项目特定的 memory 想搬过去&lt;/strong&gt; → 手动复制对应 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;feedback_*.md&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reference_*.md&lt;/code&gt; 到新 cwd 的 memory 目录，更新 MEMORY.md 索引&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;不要全量复制&lt;/strong&gt;：很多 memory 是上下文特定的（”在 X 项目中 …“），换 cwd 就不适用&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;103-团队中的-memory-边界&quot;&gt;10.3 团队中的 memory 边界&lt;/h3&gt;

&lt;p&gt;memory 是个人的（per-user × per-cwd）。&lt;strong&gt;不要&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;把团队约定写进个人 memory（用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;repo&amp;gt;/CLAUDE.md&lt;/code&gt;，对所有人生效）&lt;/li&gt;
  &lt;li&gt;把秘密写进 memory（虽然本地，但备份/同步可能泄漏）&lt;/li&gt;
  &lt;li&gt;期待”队友的 agent 知道我教过我自己的 agent 的事”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;队友共享的载体：CLAUDE.md（项目）+ skills（项目内或共享 plugin）+ docs/。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;11--大师级模式&quot;&gt;§11 · 大师级模式&lt;/h2&gt;

&lt;h3 id=&quot;111-context-offloading-via-fork&quot;&gt;11.1 Context offloading via fork&lt;/h3&gt;

&lt;p&gt;主对话上下文有限，长任务会污染。模式：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;主对话: 跟用户讨论方案 / 决策 / review
  └─ fork: 实际跑 5 分钟的&quot;读 30 个文件 + 改 5 个&quot; 任务
       └─ 返回: &quot;改完了，关键变更见 a.ts:42 / b.ts:88&quot;
主对话: 看 git diff，确认 / 调整
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;获益：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;主对话 tokens 不被工具结果污染&lt;/li&gt;
  &lt;li&gt;prompt cache 在主对话里仍命中（fork 自己的 cache 独立）&lt;/li&gt;
  &lt;li&gt;能”边干边聊”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;陷阱：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;fork 的工作可能不被你及时审视 → 完成后必看 git diff&lt;/li&gt;
  &lt;li&gt;fork 没法继续接受新指令（要再发 SendMessage 或新派一个）&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;112-memory-as-protocol多-agent-协作时的契约层&quot;&gt;11.2 Memory-as-protocol（多 agent 协作时的契约层）&lt;/h3&gt;

&lt;p&gt;当多个 agent（自定义 subagent / 团队 agent / cron 定时 agent）在同一个工作区操作时，用 memory 做”协议层”。例：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;agent A（每天 06:00 跑）写一条 project memory：”今天的发布完成，BV 号 X”&lt;/li&gt;
  &lt;li&gt;agent B（你手动操作）启动会话时读到这条，知道当前状态&lt;/li&gt;
  &lt;li&gt;agent C（review 用）通过 memory 知道”这个 PR 已经过了 A 的检查”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;这种用法把 memory 从”个人状态”升级为”agent 间传递结构化信息的总线”。配合自定义 schema 写得更紧（每条 frontmatter 加 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;agent_origin&lt;/code&gt; 字段）会更可控。&lt;/p&gt;

&lt;h3 id=&quot;113-progressive-disclosure-三阶段&quot;&gt;11.3 Progressive disclosure 三阶段&lt;/h3&gt;

&lt;p&gt;工作区进 → 子项目进 → 子模块进，每层只加载相关 CLAUDE.md：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;~/claw/CLAUDE.md                           # 工作区索引（150 行）
~/claw/lotus-academy-design/CLAUDE.md       # 全栈应用大图（200 行）
~/claw/lotus-academy-design/server/CLAUDE.md  # 后端契约（100 行）
~/claw/lotus-academy-design/server/src/auth/CLAUDE.md  # auth 子模块（30 行）
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;注意：每一层只写&lt;strong&gt;这一层增量信息&lt;/strong&gt;，不重复上层。最深层往往很短（30 行）但极有价值（”这个目录的代码不要 refactor 直到 X”）。&lt;/p&gt;

&lt;h3 id=&quot;114-prompt-cache-友好的写作&quot;&gt;11.4 Prompt cache 友好的写作&lt;/h3&gt;

&lt;p&gt;CLAUDE.md / MEMORY.md / 全局 settings 是每会话开头加载的，命中 cache 收益巨大。守则：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;不要在文件&lt;strong&gt;顶部&lt;/strong&gt;频繁改动（顶部改一字符，下面整段 cache 失效）&lt;/li&gt;
  &lt;li&gt;把不稳定内容放&lt;strong&gt;底部&lt;/strong&gt;（动态状态、最近变化）&lt;/li&gt;
  &lt;li&gt;把稳定的”框架”放顶部（项目目标、架构、不要做的事）&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;115-用-hook-做在线-instruction-tuning&quot;&gt;11.5 用 hook 做”在线 instruction tuning”&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;UserPromptSubmit hook
  ├─ 检测 prompt 关键词
  └─ 注入相关 CLAUDE.md section / memory 摘要
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这样你可以保持根 CLAUDE.md 极简，让 hook 在用户提到”部署”时再注入 deploy 章节。代价是 hook 复杂度上升、调试难。建议只在 CLAUDE.md 真的撑不下时再用。&lt;/p&gt;

&lt;h3 id=&quot;116-skill-套娃与组合&quot;&gt;11.6 Skill 套娃与组合&lt;/h3&gt;

&lt;p&gt;一个 skill 可以”组合”其他 skill：在 SKILL.md body 里写”先调用 /A，再调用 /B”。或者更优雅地：把通用步骤抽成 sub-skill，主 skill 引用。&lt;/p&gt;

&lt;p&gt;进阶：写一个 meta-skill &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/morning-routine&lt;/code&gt;，body 里依次：检查日历 → 跑 ai-morning-post → 同步 marginalia → 总结。每个子动作可以是更原子的 skill。&lt;/p&gt;

&lt;h3 id=&quot;117-自定义-subagent-的-system-prompt-工程&quot;&gt;11.7 自定义 subagent 的 system prompt 工程&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.claude/agents/&amp;lt;name&amp;gt;.md&lt;/code&gt; 让你定义专用 subagent。关键设计点：&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;：”你是 X 专家，只回答 X 相关问题”&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;限定输出格式&lt;/strong&gt;：要求结构化输出，主对话好消化&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;写 negative behavior&lt;/strong&gt;：明确说不要做什么（避免 fresh agent 自由发挥跑偏）&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;118-三体协同claudemd--memory--hook-的循环&quot;&gt;11.8 三体协同：CLAUDE.md / memory / hook 的循环&lt;/h3&gt;

&lt;p&gt;成熟工作区会形成”自我增强”循环：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;1. 用户告诉 agent 一个新约定
2. agent 写 memory（个人偏好层）
3. 反复用证明这个约定确实跨任务有效
4. 升级到 CLAUDE.md（如果项目特定）或 user-level（如果跨项目）
5. 反复用证明它是 deterministic 的
6. 升级到 hook / permission（机制层）
7. 这时可以从 memory / CLAUDE.md 删除（机制层已保证）
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这是一个&lt;strong&gt;信息从模糊到具体、从启发式到机制&lt;/strong&gt;的”沉淀”过程。掌握节奏的人，工作区会越用越好用，而不是越用越乱。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;12--实战-case-studies&quot;&gt;§12 · 实战 case studies&lt;/h2&gt;

&lt;p&gt;下面以本工作区（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/claw&lt;/code&gt;）实际场景为例。&lt;/p&gt;

&lt;h3 id=&quot;case-1-用户告诉我-github-bot-账号有专用-pat&quot;&gt;Case 1: “用户告诉我 GitHub bot 账号有专用 PAT”&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;信息分类&lt;/strong&gt;：跨会话个人状态（reference 类）+ 跨会话约定（feedback 类）。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;正确归属&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reference&lt;/code&gt; memory: “GitHub bot 账号 gittee-coder 的 PAT 在 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.config/gh/{user,org_pyf-labrary}.token&lt;/code&gt;”&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;feedback&lt;/code&gt; memory: “force-push 需用户批准；其他 GH 操作预授权（Why: 用户已显式授权）”&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;repo&amp;gt;/CLAUDE.md&lt;/code&gt;：&lt;strong&gt;不写&lt;/strong&gt;（个人状态，团队不需要知道你的 token 在哪）&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;settings.json&lt;/code&gt;：可以加 permissions allow &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh ...&lt;/code&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;把 token 路径写进项目 CLAUDE.md（泄漏）&lt;/li&gt;
  &lt;li&gt;只写 feedback 不写 reference（agent 知道”可以做”但不知道 token 在哪）&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;case-2-本-repo-不要把-mp4-提交&quot;&gt;Case 2: “本 repo 不要把 mp4 提交”&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;信息分类&lt;/strong&gt;：项目知识 + deterministic。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;正确归属&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;repo&amp;gt;/CLAUDE.md&lt;/code&gt; “不要做的事”：写一行&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt;：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;*.mp4&lt;/code&gt;（机制层，根本拦下）&lt;/li&gt;
  &lt;li&gt;可选 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.claude/settings.json&lt;/code&gt;：pre-commit hook 校验&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;错误归属&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;只写 memory（每次新 cwd 又得重学；团队成员也不知道）&lt;/li&gt;
  &lt;li&gt;只写 CLAUDE.md 不加 .gitignore（agent 99% 遵守，1% 翻车）&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;case-3-minimax-key-在-minimaxenv单价-x&quot;&gt;Case 3: “MiniMax key 在 ~/.minimax.env，单价 X”&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;信息分类&lt;/strong&gt;：reference（外部资源 + 业务参数）。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;正确归属&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reference&lt;/code&gt; memory：路径 + 单价 + 端点&lt;/li&gt;
  &lt;li&gt;单价部分要标日期（”截至 2026-05-07”），方便未来识别 stale&lt;/li&gt;
  &lt;li&gt;不写进 CLAUDE.md（个人 + 跨项目，不该和某个 repo 绑定）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;进阶：可以把”如何核对账单”也写进同一条 reference（因为没公开 API，要去 web 后台手动）。这种”边界条件”信息能避免未来 agent 浪费 10 分钟找根本不存在的 API。&lt;/p&gt;

&lt;h3 id=&quot;case-4-周更视频要做到-36氪-水准不是精致-ppt&quot;&gt;Case 4: “周更视频要做到 36氪 水准，不是精致 PPT”&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;信息分类&lt;/strong&gt;：feedback（视觉/品质偏好）。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;正确归属&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;feedback&lt;/code&gt; memory（已有：&lt;a href=&quot;feedback_video_quality.md&quot;&gt;视频质量门槛&lt;/a&gt;）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;为什么不进 CLAUDE.md：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;这不是”项目本身的知识”，是”用户对视觉的判断标准”&lt;/li&gt;
  &lt;li&gt;即使搬到另一台机器、另一个项目（如果做视频），这条仍成立 → 是个人偏好&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;关键 Why&lt;/strong&gt;：feedback 必须写”为什么这是 36氪而不是 PPT”——可以引一个具体反例（”上次做的某期被指出像 PPT”）。这样未来 agent 看到”PPT 风”草稿能立刻警觉。&lt;/p&gt;

&lt;h3 id=&quot;case-5-新发现一个-prompt-技巧避免-model-sheet-关键词&quot;&gt;Case 5: “新发现一个 prompt 技巧：避免 model sheet 关键词”&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;信息分类&lt;/strong&gt;：feedback（实操经验，跨会话适用）。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;正确归属&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;feedback&lt;/code&gt; memory（已有：&lt;a href=&quot;feedback_seedream_prompting.md&quot;&gt;Seedream 概念图 prompt 经验&lt;/a&gt;）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why&lt;/strong&gt; 部分要写：试过 X 关键词，结果出 Pixar 卡通；改用 Y 关键词，结果对。&lt;strong&gt;How to apply&lt;/strong&gt;：在写 Seedream 提示词时，避开 X，倾向 Y。&lt;/p&gt;

&lt;p&gt;不进 CLAUDE.md 因为：跨多个项目（tv / bodhi 都用 Seedream），不属于单个 repo。&lt;/p&gt;

&lt;h3 id=&quot;case-6-ai-周报视频每周一发&quot;&gt;Case 6: “AI 周报视频每周一发”&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;信息分类&lt;/strong&gt;：project（有时间属性的工作流）。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;正确归属&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;project&lt;/code&gt; memory（已有：&lt;a href=&quot;video_pipeline.md&quot;&gt;AI 周报视频流水线&lt;/a&gt;）+ Why 解释为何周一&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;repo&amp;gt;/video/CLAUDE.md&lt;/code&gt;：可以引用 memory，但侧重”工程上怎么跑”&lt;/li&gt;
  &lt;li&gt;进阶：起一个 cron / schedule（机制层）每周日提醒收集素材&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;衰减管理&lt;/strong&gt;：如果某天改成隔周更，这条 project memory 必须立刻 update（不是新增另一条）。&lt;/p&gt;

&lt;h3 id=&quot;case-7-agent-跑-publishpy-时把还没确认的文件也发了&quot;&gt;Case 7: “agent 跑 publish.py 时把还没确认的文件也发了”&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;信息分类&lt;/strong&gt;：feedback（需要避免的模式）+ 可能升级 hook。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;正确归属&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;先 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;feedback&lt;/code&gt; memory：解释场景 + Why + How（”publish.py 不要主动跑，先 dry-run / 让用户确认 git status”）&lt;/li&gt;
  &lt;li&gt;如果再发生 → 升级 hook：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PreToolUse&lt;/code&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bash(*publish.py*)&lt;/code&gt;，强制 ask&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;这是 §11.8 沉淀循环的体现：feedback → 验证 → hook。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;13--参考清单每周每月例行&quot;&gt;§13 · 参考清单：每周/每月例行&lt;/h2&gt;

&lt;h3 id=&quot;每周&quot;&gt;每周&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;翻一遍当周的对话（claude &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/resume&lt;/code&gt;），看有哪些用户纠正没被记 → 补 memory&lt;/li&gt;
  &lt;li&gt;看有没有重复 ≥ 3 次的工作流 → 升级 skill&lt;/li&gt;
  &lt;li&gt;看 hook 有没有过期或失败的（看 hook 日志）&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;每月&quot;&gt;每月&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;MEMORY.md 巡检（§5.7、§10.1 的流程）&lt;/li&gt;
  &lt;li&gt;主要项目 CLAUDE.md 失效检测（§6.6）&lt;/li&gt;
  &lt;li&gt;skills 列表清点：哪些没用过 → 删；哪些总用 → 优化 description&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;每季&quot;&gt;每季&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;ADR / docs 是否同步进 reference 类 memory&lt;/li&gt;
  &lt;li&gt;settings.json permissions 清单是否仍合理（有些 deny 可能已不必要）&lt;/li&gt;
  &lt;li&gt;跨项目偏好是否该提升到 user-level CLAUDE.md&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;14--写在最后信息架构是agent-长跑的复利&quot;&gt;§14 · 写在最后：信息架构是”agent 长跑”的复利&lt;/h2&gt;

&lt;p&gt;短期（一次会话）你看不出 memory / CLAUDE.md / hooks 的差别——直接在对话里粘东西也能用。&lt;/p&gt;

&lt;p&gt;中期（一个月）你会看出差别：每次重启 cwd，你的 agent 是一开始就懂规矩，还是要重新教十遍。&lt;/p&gt;

&lt;p&gt;长期（一年）你会看出量级差别：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;成熟工作区的 agent 能直接做”周更视频 + 上传 + 改写 marginalia”这种 7 步链式动作&lt;/li&gt;
  &lt;li&gt;不维护信息架构的工作区，agent 永远停留在”逐步骤手把手”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;差距全在你怎么把信息分配给八层、怎么维护它们的鲜度、怎么把”反复出现的偏好”沉淀成”机制”。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Memory is what you remember. CLAUDE.md is what we agreed. Settings is what won’t bend. Skills is how we do it. Subagent is who does it. The art is fitting each fact in the layer where it costs least to live and pays most when called.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;p&gt;附录：与本指南配套的实操脚手架&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;用户当前工作区索引：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/claw/CLAUDE.md&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;个人 memory 总览：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.claude/projects/-home-pyf-claw/memory/MEMORY.md&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;子项目示范（多项目协作）：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/claw/marginalia/&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/claw/tv/&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/claw/lotus-academy-design/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;如果要把本教程”用起来”——下一步建议是：挑一个最常用的子项目，按 §6.3 三节模板给它写 CLAUDE.md；然后跑一次 §10.1 的 5 分钟巡检。这两个动作的 ROI 最高。&lt;/p&gt;</content>
    <category term="claude-code"/>
    <category term="workflow"/>
    <category term="memory"/>
    <category term="context-engineering"/>
    <summary type="html">基于第一性原理的 Claude Code 信息架构进阶教程：八层注入模型、memory 写作模板、四棵决策树、反模式速查与沉淀循环。从中级到大师水平。</summary>
  </entry>
  <entry>
    <title type="html">Claude Code Agent Teams 功能学习报告</title>
    <link href="https://jinzi.cyou/posts/2026-04-30-agent-teams-report/" rel="alternate" type="text/html" title="Claude Code Agent Teams 功能学习报告"/>
    <published>2026-04-30T04:00:00+00:00</published>
    <updated>2026-04-30T04:00:00+00:00</updated>
    <id>https://jinzi.cyou/posts/agent-teams-report</id>
    <content type="html" xml:base="https://jinzi.cyou/posts/2026-04-30-agent-teams-report/">&lt;blockquote&gt;
  &lt;p&gt;来源：https://code.claude.com/docs/en/agent-teams
状态：实验性（experimental），默认关闭
版本要求：Claude Code ≥ 2.1.32&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-它是什么&quot;&gt;1. 它是什么&lt;/h2&gt;

&lt;p&gt;Agent Teams 让多个独立的 Claude Code 实例&lt;strong&gt;作为团队协同工作&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;一个会话作为 &lt;strong&gt;team lead（团队领导）&lt;/strong&gt;：负责创建团队、派活、汇总成果&lt;/li&gt;
  &lt;li&gt;其他会话作为 &lt;strong&gt;teammates（队友）&lt;/strong&gt;：每人一个独立上下文窗口&lt;/li&gt;
  &lt;li&gt;队友之间&lt;strong&gt;直接互相通信&lt;/strong&gt;，不必经过 lead 中转&lt;/li&gt;
  &lt;li&gt;用户也可以&lt;strong&gt;直接和某个队友对话&lt;/strong&gt;，而不必让 lead 转达&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;这是它和普通 subagent 最大的区别。&lt;/p&gt;

&lt;h2 id=&quot;2-与-subagent-的对比&quot;&gt;2. 与 Subagent 的对比&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th&gt;Subagent&lt;/th&gt;
      &lt;th&gt;Agent Team&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;上下文&lt;/td&gt;
      &lt;td&gt;独立窗口，结果回传给主 agent&lt;/td&gt;
      &lt;td&gt;独立窗口，完全独立&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;通信&lt;/td&gt;
      &lt;td&gt;只能向主 agent 报告&lt;/td&gt;
      &lt;td&gt;队友互相直接发消息&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;协调&lt;/td&gt;
      &lt;td&gt;主 agent 全权管理&lt;/td&gt;
      &lt;td&gt;共享任务列表 + 自协调&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;适合&lt;/td&gt;
      &lt;td&gt;结果导向的小任务&lt;/td&gt;
      &lt;td&gt;需要讨论/挑战/协作的复杂任务&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Token 成本&lt;/td&gt;
      &lt;td&gt;较低&lt;/td&gt;
      &lt;td&gt;显著更高（每个队友是完整 Claude 实例）&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;经验法则&lt;/strong&gt;：单纯并行干活用 subagent；要”互相辩论、互相 review、跨层协作”才上 team。&lt;/p&gt;

&lt;h2 id=&quot;3-核心架构&quot;&gt;3. 核心架构&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;Team Lead&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;创建团队、派活、协调的主会话&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Teammates&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;各自独立的 Claude Code 实例，处理被分配的任务&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Task List&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;共享任务列表，队友自己 claim 任务&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Mailbox&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;队友间消息系统（自动投递，无需 lead 轮询）&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;存储位置：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;团队配置：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.claude/teams/{team-name}/config.json&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;任务列表：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.claude/tasks/{team-name}/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚠️ 这两个文件由 Claude Code 自动维护，&lt;strong&gt;不要手动编辑&lt;/strong&gt;，每次状态变更都会被覆盖。&lt;/p&gt;

&lt;h2 id=&quot;4-启用方法&quot;&gt;4. 启用方法&lt;/h2&gt;

&lt;p&gt;设置环境变量 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1&lt;/code&gt;，可写入 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;settings.json&lt;/code&gt;：&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;env&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;重要&lt;/strong&gt;：这个变量在 &lt;strong&gt;session 启动时&lt;/strong&gt;读取，已经在跑的 session 改了 settings.json 不会即时生效，必须&lt;strong&gt;重启 Claude Code&lt;/strong&gt;。&lt;/p&gt;

&lt;h2 id=&quot;5-显示模式&quot;&gt;5. 显示模式&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;&lt;strong&gt;in-process&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;所有队友在主终端内，Shift+Down 循环切换&lt;/td&gt;
      &lt;td&gt;任意终端&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;split panes&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;每个队友独立面板，可点击交互&lt;/td&gt;
      &lt;td&gt;tmux 或 iTerm2（+ &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;it2&lt;/code&gt; CLI）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;auto&lt;/strong&gt;（默认）&lt;/td&gt;
      &lt;td&gt;在 tmux 内自动用 split panes，否则 in-process&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;强制 in-process：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;claude --teammate-mode in-process&lt;/code&gt;
全局设置：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.claude/settings.json&lt;/code&gt; 里 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;teammateMode&quot;: &quot;in-process&quot;&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;6-启动一个团队&quot;&gt;6. 启动一个团队&lt;/h2&gt;

&lt;p&gt;启用功能后，&lt;strong&gt;用自然语言&lt;/strong&gt;让 lead 创建团队：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;我在设计一个跟踪 TODO 注释的 CLI 工具。创建一个 agent team
从不同角度探索：一个负责 UX，一个负责技术架构，
一个唱反调（devil&apos;s advocate）。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Claude 会自动：&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;创建团队和共享 task list&lt;/li&gt;
  &lt;li&gt;为每个角色 spawn 队友&lt;/li&gt;
  &lt;li&gt;让他们各自探索&lt;/li&gt;
  &lt;li&gt;综合发现&lt;/li&gt;
  &lt;li&gt;完成后清理团队&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;7-控制团队&quot;&gt;7. 控制团队&lt;/h2&gt;

&lt;h3 id=&quot;指定数量和模型&quot;&gt;指定数量和模型&lt;/h3&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;创建 4 个队友的团队来并行重构这些模块，每个队友用 Sonnet。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;要求计划审批高风险任务&quot;&gt;要求计划审批（高风险任务）&lt;/h3&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Spawn 一个 architect 队友来重构鉴权模块，
开工前要求计划审批。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;队友先在只读 plan mode 出方案 → 提交给 lead → lead 决定批/驳回 → 通过后再动手。&lt;/p&gt;

&lt;h3 id=&quot;直接和某个队友对话&quot;&gt;直接和某个队友对话&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;in-process&lt;/strong&gt;: Shift+Down 切换到队友 → 直接打字发消息；Enter 进入队友会话；Esc 打断；Ctrl+T 切换 task list&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;split-pane&lt;/strong&gt;: 直接点对应面板&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;任务分配&quot;&gt;任务分配&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Lead 显式指派：告诉 lead 把哪个任务给谁&lt;/li&gt;
  &lt;li&gt;自助 claim：队友干完一个就自动捡下一个空闲、无依赖的任务&lt;/li&gt;
  &lt;li&gt;用文件锁防并发抢同一任务&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;关闭单个队友&quot;&gt;关闭单个队友&lt;/h3&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;让 researcher 队友关闭
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;队友可同意（优雅退出）或拒绝（带理由）。&lt;/p&gt;

&lt;h3 id=&quot;清理团队&quot;&gt;清理团队&lt;/h3&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;清理团队
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;⚠️ 必须由 &lt;strong&gt;lead&lt;/strong&gt; 执行，不能让队友清。清理前要先关掉所有队友。&lt;/p&gt;

&lt;h2 id=&quot;8-复用-subagent-定义作为队友角色&quot;&gt;8. 复用 Subagent 定义作为队友角色&lt;/h2&gt;

&lt;p&gt;可以引用任意 subagent type 作为队友：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;用 security-reviewer agent type spawn 一个队友，审计 auth 模块。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;队友会继承该定义的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tools&lt;/code&gt; 白名单和 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;model&lt;/code&gt;，定义体作为追加的系统提示。
&lt;strong&gt;注意&lt;/strong&gt;：subagent 定义里的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;skills&lt;/code&gt; 和 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mcpServers&lt;/code&gt; 字段在队友模式下&lt;strong&gt;不生效&lt;/strong&gt;，队友直接从项目和用户设置里加载。&lt;/p&gt;

&lt;h2 id=&quot;9-用-hooks-强制质量门&quot;&gt;9. 用 Hooks 强制质量门&lt;/h2&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;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TeammateIdle&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;队友即将进入 idle&lt;/td&gt;
      &lt;td&gt;退出码 2 → 反馈并让其继续工作&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TaskCreated&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;任务正被创建&lt;/td&gt;
      &lt;td&gt;退出码 2 → 阻止创建并反馈&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TaskCompleted&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;任务正被标记完成&lt;/td&gt;
      &lt;td&gt;退出码 2 → 阻止完成并反馈&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;10-经典使用场景&quot;&gt;10. 经典使用场景&lt;/h2&gt;

&lt;h3 id=&quot;并行-code-review&quot;&gt;并行 Code Review&lt;/h3&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;创建 agent team review PR #142，spawn 三个 reviewer：
- 一个看安全
- 一个看性能
- 一个看测试覆盖率
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;单个 reviewer 倾向于盯一类问题，分工后各域同时被认真覆盖。&lt;/p&gt;

&lt;h3 id=&quot;竞争性假设调试&quot;&gt;竞争性假设调试&lt;/h3&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;用户反馈 app 发完一条消息就退出。Spawn 5 个队友
调查不同假设，让他们互相对话尝试推翻对方理论，
像科学辩论一样。共识写进 findings doc。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;对抗性结构对抗”锚定偏差” —— 单 agent 容易找到一个看似合理的解释就停。&lt;/p&gt;

&lt;h2 id=&quot;11-最佳实践&quot;&gt;11. 最佳实践&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;3-5 个队友为宜&lt;/strong&gt;，每队友 5-6 个任务最舒服&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;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CLAUDE.md&lt;/code&gt;、MCP、skills，&lt;strong&gt;但不继承 lead 的对话历史&lt;/strong&gt;，所以 spawn prompt 必须自包含&lt;/li&gt;
  &lt;li&gt;如果 lead 自己开始干活而非派活，明确告诉它”等队友完成”&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;12-已知限制实验性阶段&quot;&gt;12. 已知限制（实验性阶段）&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;❌ &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/resume&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/rewind&lt;/code&gt; 不能恢复 in-process 队友&lt;/strong&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;❌ 不能嵌套 team：队友不能再 spawn 自己的 team&lt;/li&gt;
  &lt;li&gt;❌ Lead 固定：创建团队的会话终身是 lead，不能转让&lt;/li&gt;
  &lt;li&gt;❌ Spawn 时所有队友共用 lead 的权限模式，事后才能单独改&lt;/li&gt;
  &lt;li&gt;❌ Split panes 在 VS Code 集成终端、Windows Terminal、Ghostty 不支持&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;13-故障排查要点&quot;&gt;13. 故障排查要点&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;/td&gt;
      &lt;td&gt;in-process 下按 Shift+Down 循环；任务可能没复杂到值得开 team&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;权限弹窗太多&lt;/td&gt;
      &lt;td&gt;提前在 permission settings 预批常用操作&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;队友遇错就停&lt;/td&gt;
      &lt;td&gt;直接给指令补救，或 spawn 替补队友&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Lead 提早收工&lt;/td&gt;
      &lt;td&gt;告诉它继续 / 让它等队友完成&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;残留 tmux 会话&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux ls&lt;/code&gt; 找出，&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tmux kill-session -t &amp;lt;name&amp;gt;&lt;/code&gt; 清掉&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;14-总结&quot;&gt;14. 总结&lt;/h2&gt;

&lt;p&gt;Agent Teams 是 Claude Code 把”多 agent 并发”从&lt;strong&gt;主从汇报模式&lt;/strong&gt;升级到&lt;strong&gt;对等协作模式&lt;/strong&gt;的实验功能：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;价值场景：研究/审查、新模块/功能、对抗性调试、跨层协作&lt;/li&gt;
  &lt;li&gt;不适合：顺序任务、同文件编辑、强依赖任务（用单 session 或 subagent 更好）&lt;/li&gt;
  &lt;li&gt;代价：Token 消耗显著增加，协调开销也随队友数增加&lt;/li&gt;
  &lt;li&gt;当前阶段：实验性，明确知道限制再用&lt;/li&gt;
&lt;/ul&gt;</content>
    <category term="claude-code"/>
    <category term="agent-teams"/>
    <category term="multi-agent"/>
    <category term="experimental"/>
    <category term="sub-agents"/>
    <summary type="html">Claude Code 2.1.32 起的实验功能 Agent Teams：sub-agent 之间如何协作、怎么写 agent.md 编排团队、怎么启用、相比单 agent 模式的取舍与坑点整理。</summary>
  </entry>
  <entry>
    <title type="html">Claude Max $100 套餐榨干指南（小白友好版）</title>
    <link href="https://jinzi.cyou/posts/2026-04-28-claude-max-token-guide/" rel="alternate" type="text/html" title="Claude Max $100 套餐榨干指南（小白友好版）"/>
    <published>2026-04-28T04:00:00+00:00</published>
    <updated>2026-04-28T04:00:00+00:00</updated>
    <id>https://jinzi.cyou/posts/claude-max-token-guide</id>
    <content type="html" xml:base="https://jinzi.cyou/posts/2026-04-28-claude-max-token-guide/">&lt;blockquote&gt;
  &lt;p&gt;目标：把 Max $100/月套餐的”请求次数”和”token 量”两方面用到极限。
阅读对象：刚开始用 Claude Code、对 LLM 计费机制不熟悉的用户。
最后更新：2026-04-28。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;0-先理解你的额度到底是什么&quot;&gt;0. 先理解：你的额度到底是什么？&lt;/h2&gt;

&lt;p&gt;很多人以为 “Max $100 = 每月多少次请求”。&lt;strong&gt;错。&lt;/strong&gt;&lt;/p&gt;

&lt;h3 id=&quot;01-llm-是按-token-计费的&quot;&gt;0.1 LLM 是按 token 计费的&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;token 是模型看世界的最小单位&lt;/strong&gt;。一个英文单词约 1.3 token，一个汉字约 1–2 token。一段 1000 字中文 ≈ 1500 token。&lt;/li&gt;
  &lt;li&gt;每次你和 Claude 对话，它都会把&lt;strong&gt;整个会话历史 + 系统提示 + 你新说的话&lt;/strong&gt;全部当成”输入 token”重新读一遍，然后生成”输出 token”作为回复。&lt;/li&gt;
  &lt;li&gt;Anthropic 对 Opus 4.7 的官方价：&lt;strong&gt;输入 $5 / 百万 token，输出 $25 / 百万 token&lt;/strong&gt;。这是地板价，所有产品在这个价位上加价或打包。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;02-max-100-套餐的本质&quot;&gt;0.2 Max $100 套餐的本质&lt;/h3&gt;

&lt;p&gt;不是”无限用”，而是&lt;strong&gt;“按 token 折算的额度，分两个时间窗口结算”&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;5 小时滚动窗口&lt;/strong&gt;：从你第一次发消息开始计时，5 小时内能用的 token 量有上限。Max $100 大约是 Pro 的 5 倍。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;周窗口&lt;/strong&gt;：再叠一层 7 天总量上限，防止你 5h 满血连续刷。&lt;/li&gt;
  &lt;li&gt;触顶后两种选择：等窗口刷新，或开 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/extra-usage&lt;/code&gt; 自动按 API 原价续费。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;关键理解&lt;/strong&gt;：你浪费的不是”次数”，是 token。一次塞满 1M context 的请求 ≈ 几十次小请求的额度。所以&lt;strong&gt;省 token = 省额度 = 多干活&lt;/strong&gt;。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-最大化请求次数压低单次成本&quot;&gt;1. 最大化”请求次数”——压低单次成本&lt;/h2&gt;

&lt;h3 id=&quot;11-让-prompt-cache-真正命中最重要的一条&quot;&gt;1.1 让 prompt cache 真正命中（最重要的一条）&lt;/h3&gt;

&lt;h4 id=&quot;技术原理&quot;&gt;技术原理&lt;/h4&gt;

&lt;p&gt;LLM 推理时，每个 token 都要和&lt;strong&gt;前面所有 token&lt;/strong&gt;做注意力计算，越长的 context 越贵越慢。Anthropic 发现：很多对话的开头部分（system prompt、CLAUDE.md、项目说明）是反复出现的，每次重算太浪费。&lt;/p&gt;

&lt;p&gt;于是他们做了 &lt;strong&gt;prompt cache&lt;/strong&gt;：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;你第一次发请求时，Anthropic 把对话&lt;strong&gt;前缀&lt;/strong&gt;（从开头开始连续的一段）算完后，把中间结果（KV cache，模型内部状态）存到服务器上，打个指纹。&lt;/li&gt;
  &lt;li&gt;下次你再发请求，如果&lt;strong&gt;前缀完全一致&lt;/strong&gt;，直接复用上次的中间结果，不用重算。&lt;/li&gt;
  &lt;li&gt;命中部分的计费：&lt;strong&gt;只收原价的 0.1×&lt;/strong&gt;（即 1/10 价）。&lt;/li&gt;
  &lt;li&gt;默认 cache 存活 5 分钟（5min TTL），写入要付 1.25× 的”建表费”；1 小时版本写入 2×，但适合长任务。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;关键限制&lt;/strong&gt;：cache 是&lt;strong&gt;前缀匹配&lt;/strong&gt;。只要前面有一个 token 变了，后面所有 cache 全失效，得从变动点之后重算。&lt;/p&gt;

&lt;h4 id=&quot;操作建议&quot;&gt;操作建议&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;同一个会话连续干活，别频繁 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/clear&lt;/code&gt;&lt;/strong&gt;。&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/clear&lt;/code&gt; 会把整个对话历史清空，下一条消息等于从零建 cache，等于把前面所有 cache 钱白扔了。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;不要中途改 CLAUDE.md / system prompt / 早期消息&lt;/strong&gt;。这些都在前缀里，改了 = 后面全失效。
    &lt;ul&gt;
      &lt;li&gt;把&lt;strong&gt;稳定内容&lt;/strong&gt;（项目结构、规范、常用命令）放 CLAUDE.md 顶部。&lt;/li&gt;
      &lt;li&gt;把&lt;strong&gt;易变内容&lt;/strong&gt;（当前任务描述、临时笔记）放对话末尾或单独说。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;同一个文件让 Claude 反复 Read 没关系&lt;/strong&gt;——它读过一次后，文件内容就在 context 里了，第二次读会 cache 命中，几乎免费。&lt;/li&gt;
  &lt;li&gt;长会话越用越省，因为前缀越长、cache 占比越大。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;12-选对模型档位省-35&quot;&gt;1.2 选对模型档位（省 3–5×）&lt;/h3&gt;

&lt;h4 id=&quot;技术原理-1&quot;&gt;技术原理&lt;/h4&gt;

&lt;p&gt;Anthropic 一个家族里有多个模型：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Opus 4.7&lt;/strong&gt;：最聪明，最贵（$5/$25 per M token）。适合规划、复杂重构、难 debug。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Sonnet 4.6&lt;/strong&gt;：聪明 80%，价格 1/5（$3/$15 per M token）。适合执行类任务。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Haiku 4.5&lt;/strong&gt;：够用，价格 1/25 左右（$1/$5）。适合格式化、简单脚本、命令解释。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;模型差距主要在&lt;strong&gt;多步推理深度&lt;/strong&gt;。你让它”把这个函数改成异步”，Sonnet 完全够；你让它”重新设计这个模块的并发模型”，才需要 Opus。&lt;/p&gt;

&lt;h4 id=&quot;操作建议-1&quot;&gt;操作建议&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;在 Claude Code 里 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/model sonnet&lt;/code&gt; 或 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/model haiku&lt;/code&gt; 切换。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;经典省钱组合：Opus 规划 + Sonnet 执行&lt;/strong&gt;。
    &lt;ul&gt;
      &lt;li&gt;按 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Shift+Tab&lt;/code&gt; 两次进入 &lt;strong&gt;Plan Mode&lt;/strong&gt;，让 Opus 出方案。&lt;/li&gt;
      &lt;li&gt;方案确认后切 Sonnet 执行。同一个会话内 cache 还在，无缝衔接。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;如果你发现自己每天都顶 5h 上限：八成在用 Opus 干 Sonnet 该干的活。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;13-用-subagent-隔离上下文保护主对话-cache&quot;&gt;1.3 用 subagent 隔离上下文（保护主对话 cache）&lt;/h3&gt;

&lt;h4 id=&quot;技术原理-2&quot;&gt;技术原理&lt;/h4&gt;

&lt;p&gt;Subagent 是”开一个独立子对话”。它有自己的 context、自己的工具调用，完事后&lt;strong&gt;只把摘要返回&lt;/strong&gt;给主对话。&lt;/p&gt;

&lt;p&gt;为什么省钱？&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;探索类任务（”找出所有调用 X 的地方”）要读几十个文件，主对话如果亲自读，context 立刻被几万行代码污染，&lt;strong&gt;后续每条消息都要重读这堆垃圾&lt;/strong&gt;，每次都按现价算（cache 命中部分变少）。&lt;/li&gt;
  &lt;li&gt;让 subagent 去读，主对话只收到 200 字摘要。主对话 context 干净，cache 持续命中。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;操作建议-2&quot;&gt;操作建议&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;探索代码库 → 用内置的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Explore&lt;/code&gt; subagent。&lt;/li&gt;
  &lt;li&gt;复杂规划 → 用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Plan&lt;/code&gt; subagent。&lt;/li&gt;
  &lt;li&gt;代码审查 → 用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;code-reviewer&lt;/code&gt; subagent。&lt;/li&gt;
  &lt;li&gt;在 Claude Code 里直接说”用 Explore agent 找一下 …“，或它会自动调度。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;14-compact-而不是-clear&quot;&gt;1.4 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/compact&lt;/code&gt; 而不是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/clear&lt;/code&gt;&lt;/h3&gt;

&lt;h4 id=&quot;技术原理-3&quot;&gt;技术原理&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/clear&lt;/code&gt;&lt;/strong&gt;：把对话历史完全清空，从零开始。下一条消息发出去是空 cache，要重新建（贵）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/compact&lt;/code&gt;&lt;/strong&gt;：让 Claude 把长对话压缩成一段&lt;strong&gt;摘要&lt;/strong&gt;保留下来，然后基于摘要继续。Claude Code 会把摘要作为新前缀重建 cache，但保留了关键决策、已读文件、当前进度。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;何时该用：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;接近 context 上限（200k 或 1M）时，必须二选一。&lt;/li&gt;
  &lt;li&gt;任务还没完成 → &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/compact&lt;/code&gt;。&lt;/li&gt;
  &lt;li&gt;任务已结束、要换全新任务 → &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/clear&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-最大化token-量把-1m-上下文用满&quot;&gt;2. 最大化”token 量”——把 1M 上下文用满&lt;/h2&gt;

&lt;p&gt;Max 套餐的最大红利：&lt;strong&gt;Opus 4.7 默认 1M context，200k 以上不加价&lt;/strong&gt;。这是 API 直连都享受不到的福利（API 上 1M 是企业版才默认）。&lt;/p&gt;

&lt;h3 id=&quot;21-一次喂够上下文别来回追问&quot;&gt;2.1 一次喂够上下文，别来回追问&lt;/h3&gt;

&lt;h4 id=&quot;技术原理-4&quot;&gt;技术原理&lt;/h4&gt;

&lt;p&gt;每次发消息，模型都要重读整个会话。你做对比：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;方案 A&lt;/strong&gt;：5 轮对话，每轮喂 1 个文件 + 提问 → 5 次推理，每次都带前 N 轮历史。token 总量 ≈ 1+2+3+4+5 = 15 份文件。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;方案 B&lt;/strong&gt;：1 轮对话，喂 5 个文件 + 完整任务 → 1 次推理，token ≈ 5 份文件。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;哪怕考虑 cache，方案 B 也明显便宜（少 60% token），而且&lt;strong&gt;结果更好&lt;/strong&gt;——模型一次看到全貌比逐步喂更容易抓到关联。&lt;/p&gt;

&lt;h4 id=&quot;操作建议-3&quot;&gt;操作建议&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;任务开始前花 30 秒想清楚：”这个任务需要它看哪些文件？”，一次性让它 Read 全。&lt;/li&gt;
  &lt;li&gt;让 Claude 自主探索（用 Bash/Grep/Read 工具）比你手动复制粘贴片段更省——它的工具调用走 cache，你的人工粘贴是全新 input token。&lt;/li&gt;
  &lt;li&gt;任务描述要完整：背景、目标、约束、不要做什么，一次说清。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;22-善用-1-小时长-cache&quot;&gt;2.2 善用 1 小时长 cache&lt;/h3&gt;

&lt;h4 id=&quot;技术原理-5&quot;&gt;技术原理&lt;/h4&gt;

&lt;p&gt;默认 cache 是 5 分钟 TTL，超时就失效。如果你的任务持续超过 5 分钟（Claude 在思考、跑测试、读大文件），cache 会过期，下一条消息又得重建。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 小时 cache&lt;/strong&gt; 的交易：写入收 2× 钱（贵 60%），但保 1 小时。&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;短任务：5min cache 划算。&lt;/li&gt;
  &lt;li&gt;长任务（&amp;gt;10 分钟、跨多个回合）：1h cache 净赚——一次贵的写入，换十几次 0.1× 读取。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;操作建议-4&quot;&gt;操作建议&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Claude Code 在 Max 套餐下会&lt;strong&gt;自动判断&lt;/strong&gt;是否升级到 1h cache，你一般不用管。&lt;/li&gt;
  &lt;li&gt;如果你自己用 API 写脚本，手动设 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cache_control: {type: &quot;ephemeral&quot;, ttl: &quot;1h&quot;}&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;23-避开-token-浪费的几个坑&quot;&gt;2.3 避开 token 浪费的几个坑&lt;/h3&gt;

&lt;h4 id=&quot;坑-1让它读巨型-lock-文件--dist--node_modules&quot;&gt;坑 1：让它读巨型 lock 文件 / dist / node_modules&lt;/h4&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package-lock.json&lt;/code&gt; 动辄几万行，读一次几十万 token，cache 也救不了——因为你只读这一次。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;对策&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;项目根目录建 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.claudeignore&lt;/code&gt;，列出要跳过的路径：
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;node_modules/
dist/
build/
*.lock
*.log
.next/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;CLAUDE.md 里也写一句”不要读 X 目录”。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;坑-2截图比文字贵&quot;&gt;坑 2：截图比文字贵&lt;/h4&gt;

&lt;h4 id=&quot;技术原理-6&quot;&gt;技术原理&lt;/h4&gt;
&lt;p&gt;图片在模型里被切成”图块 token”，一张普通截图 ≈ 1500–2000 token，相当于上千字英文。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;对策&lt;/strong&gt;：能用文字描述清楚的就别贴图。报错信息、代码、配置都是文字，别截图。&lt;/p&gt;

&lt;h4 id=&quot;坑-3原始-git-diff--大日志直接塞&quot;&gt;坑 3：原始 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff&lt;/code&gt; / 大日志直接塞&lt;/h4&gt;

&lt;p&gt;几千行 diff 几万 token 起步。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;对策&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;先 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff --stat&lt;/code&gt; 看哪些文件变了。&lt;/li&gt;
  &lt;li&gt;再针对性看具体文件：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git diff src/foo.ts&lt;/code&gt;。&lt;/li&gt;
  &lt;li&gt;大日志先 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tail -100&lt;/code&gt; 或 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep ERROR&lt;/code&gt; 过滤。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;坑-4让-opus-来回-lint--typecheck&quot;&gt;坑 4：让 Opus 来回 lint / typecheck&lt;/h4&gt;

&lt;p&gt;每次让它”再跑一下 tsc 看看”都是新 token。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;对策&lt;/strong&gt;：用 &lt;strong&gt;hooks&lt;/strong&gt;（在 Claude Code &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;settings.json&lt;/code&gt; 里配）。&lt;/p&gt;
&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;hooks&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;PostToolUse&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;matcher&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Edit|Write&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;command&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;npm run typecheck&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;每次 Edit/Write 后自动跑 typecheck，结果直接喂回 Claude，无需你提示。&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-配额监控与节奏&quot;&gt;3. 配额监控与节奏&lt;/h2&gt;

&lt;h3 id=&quot;31-看准你在哪个窗口&quot;&gt;3.1 看准你在哪个窗口&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/status&lt;/code&gt; 查当前 5h 窗口剩余 + 周限额剩余。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;5h 窗口从你第一次请求时启动&lt;/strong&gt;，不是整点对齐。比如你 09:30 发第一条，窗口到 14:30。&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/cost&lt;/code&gt; 看当前会话烧了多少 token + 等价美元。校准直觉用。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;32-排期策略&quot;&gt;3.2 排期策略&lt;/h3&gt;

&lt;h4 id=&quot;5h-窗口内&quot;&gt;5h 窗口内&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;一个连续大任务 + cache 持续命中&lt;/strong&gt; &amp;gt; 5 个独立小任务。&lt;/li&gt;
  &lt;li&gt;上午 plan、下午 execute 是两个独立窗口、两次冷 cache 起步，不如一气呵成。&lt;/li&gt;
  &lt;li&gt;想休息：让 Claude 在 5h 窗口结束前完成阶段性产出，写到文件或 CLAUDE.md，下个窗口让它自己 Read 续上。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;周窗口内&quot;&gt;周窗口内&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;周一前几个窗口做 Opus 硬活（规划、架构、难 bug）。&lt;/li&gt;
  &lt;li&gt;周中后段切 Sonnet 续命。&lt;/li&gt;
  &lt;li&gt;用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/extra-usage set-limit&lt;/code&gt; 设上限（比如 $50/月），防失控。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;33-红线指标超过说明你在亏&quot;&gt;3.3 红线指标（超过说明你在亏）&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;每天都顶 5h 上限&lt;/td&gt;
      &lt;td&gt;在用 Opus 干 Sonnet 的活&lt;/td&gt;
      &lt;td&gt;切档；区分规划 vs 执行&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Opus 重读同样代码 &amp;gt;3 次&lt;/td&gt;
      &lt;td&gt;cache 没命中&lt;/td&gt;
      &lt;td&gt;检查是否中途 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/clear&lt;/code&gt; 或改了 CLAUDE.md&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/extra-usage&lt;/code&gt; 月超 $50&lt;/td&gt;
      &lt;td&gt;用量已超 Max $100 价值&lt;/td&gt;
      &lt;td&gt;升 Max $200 更划算&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;一次任务 &amp;gt;30 万 token 还没出结果&lt;/td&gt;
      &lt;td&gt;Claude 在打转&lt;/td&gt;
      &lt;td&gt;停掉，重新拆解任务&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-claude-code-必配清单&quot;&gt;4. Claude Code 必配清单&lt;/h2&gt;

&lt;p&gt;按这个顺序配置一次，长期受益：&lt;/p&gt;

&lt;h3 id=&quot;41-claudemd项目根目录&quot;&gt;4.1 CLAUDE.md（项目根目录）&lt;/h3&gt;

&lt;p&gt;每次启动 Claude Code 自动加载，进 cache。范例：&lt;/p&gt;

&lt;div class=&quot;language-markdown highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gh&quot;&gt;# 项目说明&lt;/span&gt;
这是一个 React + Node.js 全栈应用，TypeScript。

&lt;span class=&quot;gh&quot;&gt;# 目录结构&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; src/client: 前端
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; src/server: 后端
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; src/shared: 共享类型

&lt;span class=&quot;gh&quot;&gt;# 常用命令&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; 开发: pnpm dev
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; 测试: pnpm test
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; 构建: pnpm build

&lt;span class=&quot;gh&quot;&gt;# 不要碰&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; node_modules/, dist/, &lt;span class=&quot;err&quot;&gt;*&lt;/span&gt;.lock
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; src/legacy/ (废弃代码)

&lt;span class=&quot;gh&quot;&gt;# 风格&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; 优先编辑现有文件，不要新建
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; 不写注释除非有非显然的 why
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;42-claudeignore项目根目录&quot;&gt;4.2 .claudeignore（项目根目录）&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;node_modules/
dist/
build/
.next/
*.lock
*.log
*.min.js
coverage/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;43-自定义-subagentsclaudeagents-目录&quot;&gt;4.3 自定义 subagents（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.claude/agents/&lt;/code&gt; 目录）&lt;/h3&gt;

&lt;p&gt;为高频任务建专属 agent，复用时省 cache。&lt;/p&gt;

&lt;h3 id=&quot;44-hooksclaudesettingsjson&quot;&gt;4.4 Hooks（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.claude/settings.json&lt;/code&gt;）&lt;/h3&gt;

&lt;p&gt;自动化重复检查，省 token 又快。&lt;/p&gt;

&lt;h3 id=&quot;45-命令速查&quot;&gt;4.5 命令速查&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;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/model opus&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sonnet&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;haiku&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;切模型&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/status&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;看配额剩余&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/cost&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;看本会话消费&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/compact&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;压缩对话保留摘要&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/clear&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;全清（慎用）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/agents&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;管理 subagent&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/extra-usage&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;配置超额自动续费&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Shift+Tab&lt;/code&gt; ×2&lt;/td&gt;
      &lt;td&gt;进 Plan Mode&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;5-tldr三条最高-roi-的动作&quot;&gt;5. TL;DR——三条最高 ROI 的动作&lt;/h2&gt;

&lt;p&gt;如果你只看这一节：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;保持长会话 + 稳定 CLAUDE.md&lt;/strong&gt;
让 prompt cache 持续命中。理论上能省 10×。前提：别频繁 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/clear&lt;/code&gt;，别中途改顶部内容。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Opus 规划 / Sonnet 执行&lt;/strong&gt;
规划用 Opus（Plan Mode），执行切 Sonnet。能省 3–5×，效果不打折。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;一次喂够上下文&lt;/strong&gt;
任务开始时把所有相关文件、完整需求一次说清，让 Claude 自己探索代码库。比来回追问省 2–3× token，结果还更好。&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;附录核心数字速记&quot;&gt;附录：核心数字速记&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;项&lt;/th&gt;
      &lt;th&gt;数值&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Opus 4.7 输入&lt;/td&gt;
      &lt;td&gt;$5 / 百万 token&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Opus 4.7 输出&lt;/td&gt;
      &lt;td&gt;$25 / 百万 token&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Sonnet 4.6 输入/输出&lt;/td&gt;
      &lt;td&gt;$3 / $15 per M&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Cache 写入（5min）&lt;/td&gt;
      &lt;td&gt;1.25× 输入价&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Cache 写入（1h）&lt;/td&gt;
      &lt;td&gt;2× 输入价&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Cache 命中读&lt;/td&gt;
      &lt;td&gt;0.1× 输入价（&lt;strong&gt;省 90%&lt;/strong&gt;）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Max $100 配额折算&lt;/td&gt;
      &lt;td&gt;≈ Pro $20 的 5 倍&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Max 套餐 Opus context&lt;/td&gt;
      &lt;td&gt;默认 1M，200k 以上无溢价&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;5h 窗口&lt;/td&gt;
      &lt;td&gt;从首条消息计时&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;1 张截图&lt;/td&gt;
      &lt;td&gt;≈ 1500–2000 token&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;1000 字中文&lt;/td&gt;
      &lt;td&gt;≈ 1500 token&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</content>
    <category term="claude"/>
    <category term="llm"/>
    <category term="token-economy"/>
    <category term="prompt-cache"/>
    <category term="claude-code"/>
    <summary type="html">理解 Claude Max 套餐的 token 计费本质：最大化 prompt cache 命中率、压低单次请求成本、把 5 小时与 7 天双时间窗口的额度榨干。Claude Code 实战经验整理。</summary>
  </entry>
  <entry>
    <title type="html">Apple 礼品卡内购 Claude Pro 完整指南</title>
    <link href="https://jinzi.cyou/posts/2026-04-27-apple-giftcard-claude-pro/" rel="alternate" type="text/html" title="Apple 礼品卡内购 Claude Pro 完整指南"/>
    <published>2026-04-27T04:00:00+00:00</published>
    <updated>2026-04-27T04:00:00+00:00</updated>
    <id>https://jinzi.cyou/posts/apple-giftcard-claude-pro</id>
    <content type="html" xml:base="https://jinzi.cyou/posts/2026-04-27-apple-giftcard-claude-pro/">&lt;h2 id=&quot;一为什么要走-apple-内购&quot;&gt;一、为什么要走 Apple 内购？&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;维度&lt;/th&gt;
      &lt;th&gt;Web 直接订阅&lt;/th&gt;
      &lt;th&gt;Apple 内购&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;信用卡/PayPal&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;Stripe 直接校验 BIN 归属地&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;不存在&lt;/strong&gt; —— Apple 代收，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;大概率被拒&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;只跟 Apple ID 有关&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;向 Apple 申请退款，成功率高&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;风控门面&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Anthropic → Stripe → 你的卡&lt;/td&gt;
      &lt;td&gt;Anthropic → Apple → (你的余额)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;一句话：Apple 是支付中间层，Anthropic 看到的是 Apple 付的钱，不是你付的。卡片归属地判断完全不存在。&lt;/strong&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;二能否省钱&quot;&gt;二、能否省钱？&lt;/h2&gt;

&lt;h3 id=&quot;21-价格对比&quot;&gt;2.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;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;Web 直接订阅&lt;/td&gt;
      &lt;td&gt;$20&lt;/td&gt;
      &lt;td&gt;$240&lt;/td&gt;
      &lt;td&gt;美国 IP 免税州&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Web 直接订阅（含税）&lt;/td&gt;
      &lt;td&gt;$21.5-22&lt;/td&gt;
      &lt;td&gt;$258-264&lt;/td&gt;
      &lt;td&gt;含美国各州消费税&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;iOS 内购（美区）&lt;/td&gt;
      &lt;td&gt;$20&lt;/td&gt;
      &lt;td&gt;$199.99&lt;/td&gt;
      &lt;td&gt;Apple 显示价格&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;礼品卡 + 内购&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;折后 ¥116-136&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;折后 ¥1160-1360&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;见下文分析&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;22-省钱的两个渠道&quot;&gt;2.2 省钱的两个渠道&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;渠道 1：礼品卡本身打折&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;美区 App Store 礼品卡在多个渠道长期有折扣：&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;亚马逊美区&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;偶尔 85-90 折&lt;/td&gt;
      &lt;td&gt;电子卡，15 分钟&lt;/td&gt;
      &lt;td&gt;极低（官方渠道）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Costco&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;通常 85-90 折&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;Target&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;偶尔 85 折 + 红卡再减 5%&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;¥6.2-6.8 / $1&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;tr&gt;
      &lt;td&gt;&lt;strong&gt;充值平台&lt;/strong&gt;（如网易等）&lt;/td&gt;
      &lt;td&gt;¥6.5-7.0 / $1&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;strong&gt;不建议碰淘宝/闲鱼&lt;/strong&gt;：黑卡充值可能导致 Apple ID 被拉黑，得不偿失。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;推荐方式&lt;/strong&gt;：注册亚马逊美区账号（不需要美国信用卡，礼品卡余额可买苹果礼品卡），等折扣季囤卡。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;渠道 2：免税州 Apple ID&lt;/strong&gt;&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;th&gt;$20/月的实际支出&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;免税州（OR/DE/MT/NH/AK）&lt;/td&gt;
      &lt;td&gt;0%&lt;/td&gt;
      &lt;td&gt;$20.00&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;低税州&lt;/td&gt;
      &lt;td&gt;4-6%&lt;/td&gt;
      &lt;td&gt;$20.80-21.20&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;高税州（NY/CA）&lt;/td&gt;
      &lt;td&gt;8-9%&lt;/td&gt;
      &lt;td&gt;$21.60-21.80&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;把美区 Apple ID 的账单地址设为免税州&lt;/strong&gt;（推荐俄勒冈州 Oregon，波特兰随便找个地址），就不收税。&lt;/p&gt;

&lt;h3 id=&quot;23-实际省钱测算&quot;&gt;2.3 实际省钱测算&lt;/h3&gt;

&lt;p&gt;假设常规汇率 7.15，你买卡 9 折：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;按年订阅（App Store 年费 $199.99）：
  正价 × 汇率 = $199.99 × 7.15 ≈ ¥1,430
  买卡成本   = $200 × 0.9 × 汇率买到价

  如果亚马逊 85 折囤卡：$200 × 0.85 × 汇率 ≈ ¥1,215
  如果 Costco 9 折：$200 × 0.9 × 汇率 ≈ ¥1,287

  对比 Web 直接订阅（免税州）$199.99 × 7.15 ≈ ¥1,430

  年省：¥143 ~ ¥215
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;如果你按月订 $20/月，省得更多因为月付本来就更贵。&lt;/p&gt;

&lt;p&gt;此外，还有一个&lt;strong&gt;间接省钱&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Web 订阅封号 → 钱不退，申诉成功率低&lt;/li&gt;
  &lt;li&gt;Apple 内购封号 → Apple 退款政策友好，90 天内基本能退&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;三完整操作步骤&quot;&gt;三、完整操作步骤&lt;/h2&gt;

&lt;h3 id=&quot;第一步注册美区-apple-id&quot;&gt;第一步：注册美区 Apple ID&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;在 iPhone/iPad 上操作&lt;/strong&gt;：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;打开 App Store → 点右上角头像 → &lt;strong&gt;退出登录&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;点 “创建新 Apple ID”&lt;/li&gt;
  &lt;li&gt;国家/地区选择 &lt;strong&gt;United States&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;邮箱：用 &lt;strong&gt;Gmail / Proton Mail&lt;/strong&gt;（不要 QQ/163）&lt;/li&gt;
  &lt;li&gt;手机号：&lt;strong&gt;可以填 +86&lt;/strong&gt;（Apple 允许中国手机号注册美区账号）&lt;/li&gt;
  &lt;li&gt;付款方式：&lt;strong&gt;选 None&lt;/strong&gt;（一开始没有 None 选项，往下看）&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;关键步骤——让 None 出现：&lt;/p&gt;

&lt;p&gt;注册过程中 App Store 会提示你绑卡。此时：&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;先去 App Store 首页&lt;/strong&gt;，找一个免费 App（任何免费 App）→ 点 “获取”&lt;/li&gt;
  &lt;li&gt;弹出登录提示，选 “创建新 Apple ID”&lt;/li&gt;
  &lt;li&gt;走完注册流程后，付款方式里会出现 &lt;strong&gt;None&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;选 None，然后填写美国账单地址&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;账单地址填什么&lt;/strong&gt;：&lt;/p&gt;

&lt;p&gt;找一个免税州的地址。推荐俄勒冈州：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;街道: 1234 NW Lovejoy St
城市: Portland
州: Oregon (OR)
邮编: 97209
电话: (503) 555-0199
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;第二步购买-apple-礼品卡&quot;&gt;第二步：购买 Apple 礼品卡&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;推荐亚马逊美区&lt;/strong&gt;（不需要美卡）：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;注册 amazon.com 账号（不要求美国信用卡）&lt;/li&gt;
  &lt;li&gt;搜索 “App Store Gift Card”&lt;/li&gt;
  &lt;li&gt;选 &lt;strong&gt;Email delivery&lt;/strong&gt;（电子卡）&lt;/li&gt;
  &lt;li&gt;金额选 $25 / $50 / $100&lt;/li&gt;
  &lt;li&gt;支付方式：
    &lt;ul&gt;
      &lt;li&gt;如果能办美卡（如 BitGet/PokePay），直接付&lt;/li&gt;
      &lt;li&gt;如果没有，可以在亚马逊上买 Gift Card 也要支付方式，这是个鸡生蛋问题&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;解法&lt;/strong&gt;：用支付宝在某些支持平台买（见下方）&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&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;网易 UU&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;支付宝/微信&lt;/td&gt;
      &lt;td&gt;汇率 + 5-10%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;支付宝里搜 “美区App Store”&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;支付宝&lt;/td&gt;
      &lt;td&gt;汇率 + 5-15%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Seagm&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;支付宝/微信&lt;/td&gt;
      &lt;td&gt;汇率 + 10-20%&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;p&gt;如果你能搞到美卡（PokePay / OneKey / BitGet 卡可能是美卡），在亚马逊买是成本最低的。&lt;/p&gt;

&lt;h3 id=&quot;第三步充值&quot;&gt;第三步：充值&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;iPhone/iPad 打开 App Store&lt;/li&gt;
  &lt;li&gt;确认已登录&lt;strong&gt;美区 Apple ID&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;右上角头像 → &lt;strong&gt;兑换礼品卡或代码&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;输入礼品卡代码（或手机扫描卡片背面的码）&lt;/li&gt;
  &lt;li&gt;余额即时到账&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;第四步订阅-claude-pro&quot;&gt;第四步：订阅 Claude Pro&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;保持&lt;strong&gt;美区 Apple ID 登录状态&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;App Store 搜索 “Claude” → 下载 Anthropic 官方 Claude App&lt;/li&gt;
  &lt;li&gt;打开 Claude App → 登录你的 Claude 账号&lt;/li&gt;
  &lt;li&gt;设置 → &lt;strong&gt;Upgrade to Pro&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;弹出 App Store 订阅确认框，点 &lt;strong&gt;订阅&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;扣款从 Apple ID 余额中扣除&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;四费用节省速算&quot;&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;vs Web 直付（¥1,430）&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;亚马逊正价 + 免税州&lt;/td&gt;
      &lt;td&gt;≈ ¥1,430&lt;/td&gt;
      &lt;td&gt;持平，但绕过了卡片风控&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;亚马逊 9 折 + 免税州&lt;/td&gt;
      &lt;td&gt;≈ ¥1,287&lt;/td&gt;
      &lt;td&gt;年省 ¥143&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;亚马逊 85 折 + 免税州&lt;/td&gt;
      &lt;td&gt;≈ ¥1,215&lt;/td&gt;
      &lt;td&gt;年省 ¥215&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;淘宝低价卡（高风险）&lt;/td&gt;
      &lt;td&gt;≈ ¥1,000-1,100&lt;/td&gt;
      &lt;td&gt;年省 ¥300+ 但可能 Apple ID 被拉黑&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;ol&gt;
  &lt;li&gt;绕过了卡片归属地检测（这是最大价值）&lt;/li&gt;
  &lt;li&gt;Apple 退款保护&lt;/li&gt;
  &lt;li&gt;不需要海外信用卡&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;五常见问题&quot;&gt;五、常见问题&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: 要不要打苹果客服电话绑卡？&lt;/strong&gt;
不需要。用 None 方法就能跳过绑卡，全程不需要信用卡。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: 余额不够时怎么办？&lt;/strong&gt;
App Store 会自动尝试续费。如果余额不足，App Store 会发邮件/弹窗提示 “你的订阅即将过期，请充值”。再买一张礼品卡兑换即可。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: 账号被封后订阅怎么办？&lt;/strong&gt;
在 iPhone → 设置 → 你的头像 → 订阅 → Claude → 取消订阅，或直接在 App Store → 账户 → 购买记录 → 报告问题申请退款。Apple 对未消费部分的退款政策相对宽松。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Android 能用吗？&lt;/strong&gt;
不能。Apple 内购只能在 Apple 设备上完成。可以用朋友的 iPhone 登录一次你的 Claude 账号订阅，之后在其他平台上继续使用。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: 能不能只用一个月的 Apple 内购，到期后用回 Web 订阅？&lt;/strong&gt;
可以。Claude 订阅状态是跨平台同步的——不管从哪里订阅，Pro 状态绑定在你的 Claude 账号上。在 App Store 取消后，到期日再去 Web 重新订阅即可。&lt;/p&gt;

&lt;hr /&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;结论&lt;/strong&gt;：Apple 礼品卡内购 = 绕过卡片风控 + 可能 85-9 折 + Apple 退款保护。对国内用户来说这是最稳的支付方案，省钱是附带的。&lt;/p&gt;
&lt;/blockquote&gt;</content>
    <category term="claude-pro"/>
    <category term="apple-app-store"/>
    <category term="subscription"/>
    <category term="china-payment"/>
    <summary type="html">用 Apple 礼品卡走 iOS 内购订阅 Claude Pro 的完整流程：为什么走这条路（绕开发卡归属地校验）、礼品卡获取与兑换、Apple ID 区域配置、订阅续费与坑点整理。</summary>
  </entry>
</feed>
