<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>福鸿的博客</title><description>小工具 · 学习笔记 · AI Coding</description><link>https://fuwari.vercel.app/</link><language>zh_CN</language><item><title>写在前面</title><link>https://fuwari.vercel.app/posts/hello-world/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/hello-world/</guid><description>这个站点是干嘛的，以及接下来会写什么。</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;这是我的个人站点，域名 &lt;a href=&quot;https://yaofuhong.me&quot;&gt;yaofuhong.me&lt;/a&gt;，主要放三类内容：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;工具&lt;/strong&gt;：自己写的一些工具，见&lt;a href=&quot;/tools/&quot;&gt;工具页&lt;/a&gt;，每个都有介绍和源码链接&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;学习笔记&lt;/strong&gt;：系统学习后的整理输出，偏基础设施、Agent 工程方向&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI Coding 实践&lt;/strong&gt;：AI 辅助编程在真实工程里的用法与踩坑&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;站点基于 &lt;a href=&quot;https://github.com/saicaca/fuwari&quot;&gt;Fuwari&lt;/a&gt; 模板，Cloudflare Pages 托管，全程用 Claude Code 搭建。&lt;/p&gt;
</content:encoded></item><item><title>我的 AI Coding 工作流：从&quot;管住它&quot;到&quot;验证它&quot;</title><link>https://fuwari.vercel.app/posts/ai-coding-workflow-2026/</link><guid isPermaLink="true">https://fuwari.vercel.app/posts/ai-coding-workflow-2026/</guid><description>半年 Claude Code 重度使用后沉淀的工作流：三层防御管行为，四阶段流水线验产出，skill 化沉淀经验。</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;用 Claude Code 写代码半年，我的工作流大改过两次。最早的版本发在 &lt;a href=&quot;https://github.com/yaofuhong0311/ai-coding-workflow&quot;&gt;ai-coding-workflow&lt;/a&gt; 仓库里，核心是&quot;怎么管住 Agent&quot;；现在回头看，那只解决了一半问题——&lt;strong&gt;管住它只能保证它不犯低级错误，不能保证它交付的东西是对的&lt;/strong&gt;。这篇把当前完整的工作流写下来。&lt;/p&gt;
&lt;h2&gt;AI Coding Agent 的两个结构性缺陷&lt;/h2&gt;
&lt;p&gt;先说问题。所有 AI Coding Agent（Claude Code / Cursor / Copilot）都有两个绕不开的毛病：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. 没有记忆。&lt;/strong&gt; 每次新 session 都是全新开始。上次踩的坑、团队的约定、某个 API 的 workaround——全忘干净，下次重新踩一遍。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 规则靠自觉。&lt;/strong&gt; 你可以在 prompt 里写&quot;不要用 bare except&quot;、&quot;先读再写&quot;，但 Agent 在复杂任务中会忘。写在 prompt 里的规则，约束力约等于贴在冰箱上的减肥计划。&lt;/p&gt;
&lt;p&gt;先上一张全景图，下面三个部分分别展开：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/ai-coding-workflow.svg&quot; alt=&quot;AI Coding 工作流全景&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;第一部分：三层防御，管住行为&lt;/h2&gt;
&lt;p&gt;这部分是老框架，但依然是地基：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;第一层：软约束 —— 写在 CLAUDE.md 里的行为规则，Agent 自觉遵守
第二层：硬执行 —— PostToolUse hook 每次写文件自动扫描，违规强制修复
第三层：后置记录 —— 自动采集经验，蒸馏后写回规则
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;软约束&lt;/strong&gt;解决意识问题。我的 CLAUDE.md 里最重要的两组规则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;反幻觉&lt;/strong&gt;：读优先于写（改文件前先 read，调函数前先 grep）、不编造（不确定就查源码）、基于现有代码扩展（先看同类模块怎么写）。设计哲学一句话：与其让 AI 更&quot;聪明&quot;，不如让它更&quot;谨慎&quot;——大部分 coding 错误不是能力不足，是太自信。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;YAGNI 最小实现&lt;/strong&gt;：写代码前先过&quot;懒人阶梯&quot;——这东西真的要存在吗？代码库里已有吗？标准库能做吗？一行能搞定吗？停在第一个成立的台阶。AI 特别爱造不需要的抽象（单实现的 interface、永不变的配置项），这组规则专治这个。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;硬执行&lt;/strong&gt;解决遗忘问题。Agent 每次写 &lt;code&gt;.py&lt;/code&gt; 文件，PostToolUse hook 自动跑质量门脚本，有 stdout 输出就把违规信息塞回 Agent 上下文，它被迫看到并修复。机械触发，不可绕过——这是和&quot;贴冰箱规则&quot;的本质区别。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;后置记录&lt;/strong&gt;解决积累问题。命令失败、被我纠正、发现更好做法，都会自动写进 &lt;code&gt;.learnings/&lt;/code&gt;；MCP 工具在 coding 过程中自动记经验。定期蒸馏：去重、分类、原子化，能机械判定的变成 hook 规则，需要判断力的留在 CLAUDE.md。Agent 从&quot;每次重新开始&quot;变成&quot;站在之前的经验上继续&quot;。&lt;/p&gt;
&lt;h2&gt;第二部分：四阶段验证流水线，验证产出&lt;/h2&gt;
&lt;p&gt;这是这半年最大的升级。起因很简单：三层防御跑得很好，Agent 不再写 &lt;code&gt;except: pass&lt;/code&gt;，不再凭空编 API——但交付的功能照样有 bug。&lt;strong&gt;行为规范 ≠ 产出正确&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;于是我把&quot;验证&quot;做成了一个独立的 skill（staged-verify），一段新代码完成后走四道质量门：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/staged-verify.svg&quot; alt=&quot;staged-verify 四道质量门&quot; /&gt;&lt;/p&gt;
&lt;p&gt;几个关键设计：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Phase 1 的&quot;干净 review&quot;&lt;/strong&gt;：刚写完代码的会话里全是实现思路和自我辩护，让同一个上下文 review 等于作者自查。所以 review 必须丢给一个看不到本会话任何历史的全新子代理——prompt 里只给 diff 和 review 维度，严禁给&quot;这段代码是为了…&quot;之类的背景解释，那正是要隔离的污染源。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Phase 3 的&quot;双轨求差集&quot;&lt;/strong&gt;：边界用例从两条正交轨道来。白盒轨从代码出发推导用例，精准，但只能测到已实现的行为；黑盒轨用一个看不到实现的子代理，只拿接口契约推导&quot;应该接受什么、拒绝什么&quot;。两轨对照求差集：&lt;strong&gt;只在黑盒轨出现、白盒轨没有的用例，就是&quot;代码可能漏实现&quot;的高危项&lt;/strong&gt;——漏写的校验、漏处理的分支，这是纯白盒测试的系统性盲区。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;flaky 零容忍&lt;/strong&gt;：变更相关的测试连跑三次，要求每次都绿。&quot;时绿时红&quot;的严禁重跑一下就放行——flaky 往往是真的竞态 bug，尤其是流式、常驻进程、并发相关的改动。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;左移&lt;/strong&gt;：黑盒轨那份&quot;应处理/应拒绝&quot;清单，写代码之后生成是检查表，&lt;strong&gt;写代码之前生成就是施工图纸&lt;/strong&gt;。所以重要功能动手前，我会先让它把契约边界推一遍，拿着清单写代码——同一个动作，写前防 bug，写后兜 bug，预防永远比捕捉便宜。&lt;/p&gt;
&lt;h2&gt;第三部分：经验 skill 化&lt;/h2&gt;
&lt;p&gt;早期我把所有规则都堆在 CLAUDE.md 里，很快发现两个问题：全局规则越长，单条规则被遵守的概率越低；而且很多经验是场景性的，全局加载纯属浪费上下文。&lt;/p&gt;
&lt;p&gt;现在的做法是把成型的方法论抽成 &lt;strong&gt;skill&lt;/strong&gt;（按需加载的指令包），触发词命中才加载：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;staged-verify&lt;/code&gt;：上面的四阶段验证流水线&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fagan-review&lt;/code&gt;：双检查员 code review（结构检查员跑确定性工具，语义检查员看设计逻辑，产出合并去重）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cicd-check&lt;/code&gt; / &lt;code&gt;engineering-standards&lt;/code&gt;：公司部署规范、研发规范的机械化检查清单&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cross-team-debug&lt;/code&gt;：跨团队联调时，两边的 Claude 实例通过共享 markdown 文件异步协作&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CLAUDE.md 管&quot;任何时候都要遵守的行为底线&quot;，skill 管&quot;特定场景下的完整打法&quot;，各司其职。skill 之间还能互相路由——staged-verify 的 Phase 1 就复用 fagan-review 的双检查员模式。&lt;/p&gt;
&lt;h2&gt;效果&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;环节&lt;/th&gt;
&lt;th&gt;之前&lt;/th&gt;
&lt;th&gt;之后&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agent 开始写代码&lt;/td&gt;
&lt;td&gt;凭记忆瞎写&lt;/td&gt;
&lt;td&gt;先读现有代码，遵循已有模式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;低级错误（bare except 等）&lt;/td&gt;
&lt;td&gt;review 时才发现或漏掉&lt;/td&gt;
&lt;td&gt;保存后 1 秒内被 hook 拦截&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;&quot;看起来能跑&quot;&lt;/td&gt;
&lt;td&gt;四道质量门，边界套件沉淀为长期资产&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;我的 review 负担&lt;/td&gt;
&lt;td&gt;检查所有问题&lt;/td&gt;
&lt;td&gt;低级错误已拦干净，只看设计和差集里的高危项&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;几条踩坑心得&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;规则写了不等于会被遵守&lt;/strong&gt;，能机械化的检查一律 hook 化。判断一条规则该放哪的标准：违规能不能用一行 grep/lint 查出来？能就进 hook，不能才留 CLAUDE.md。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;别让写代码的上下文 review 自己的代码&lt;/strong&gt;，永远起干净子代理。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;全局规则要克制&lt;/strong&gt;，场景性经验抽成 skill 按需加载。上下文是稀缺资源。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;验证要左移&lt;/strong&gt;，契约边界清单在写代码之前生成，价值翻倍。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;p&gt;工具链的早期版本（hook 脚本、CLAUDE.md 模板、蒸馏脚本）在 &lt;a href=&quot;https://github.com/yaofuhong0311/ai-coding-workflow&quot;&gt;ai-coding-workflow&lt;/a&gt; 仓库，思路以本文为准——仓库还停在&quot;三层防御&quot;阶段，四阶段验证和 skill 化是之后长出来的。&lt;/p&gt;
</content:encoded></item></channel></rss>