<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>开发工具 on 方糖猫Blog</title>
    <link>https://ftmao.com/blog/tags/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/</link>
    <description>AI 视频、AI Agent 与工程实践笔记</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Sat, 10 Jan 2026 15:00:00 +0800</lastBuildDate><atom:link href="https://ftmao.com/blog/tags/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/index.xml" rel="self" type="application/rss+xml" /><item>
      <title>把 Claude Code 用成工程杠杆：落地心得</title>
      <link>https://ftmao.com/blog/posts/claude-code-engineering-practice/</link>
      <pubDate>Sat, 10 Jan 2026 15:00:00 +0800</pubDate>
      <guid>https://ftmao.com/blog/posts/claude-code-engineering-practice/</guid>
      <description>&lt;h1 id=&#34;把-claude-code-用成工程杠杆落地心得&#34;&gt;把 Claude Code 用成工程杠杆：落地心得&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;我做软件工程 18 年了，在华为和 IBM 做过电信级系统，近四年又一头扎进 AI 工程化，主导过 AI Agent 短视频生成平台和自动化口播剪辑平台。Claude Code 是我最近半年每天都在用的主力工具。它不是替代工程师的魔法，而是一把需要正确握持的杠杆。这篇文章聊聊我怎么把它落地到工程工作流里。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;一先思考再输入&#34;&gt;一、先思考，再输入&lt;/h2&gt;
&lt;p&gt;很多人打开 Claude Code 的第一件事就是开始打字。这往往是最贵的错误。&lt;/p&gt;
&lt;p&gt;我现在的习惯是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;写功能前，先想清楚模块边界、数据流、异常路径；&lt;/li&gt;
&lt;li&gt;重构前，先定义&amp;quot;目标形态&amp;quot;是什么；&lt;/li&gt;
&lt;li&gt;调试前，先列出我已知的事实和假设。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;然后按 &lt;code&gt;Shift+Tab&lt;/code&gt; 两次进入 &lt;strong&gt;Plan 模式&lt;/strong&gt;，把这些思考丢给 Claude。&lt;/p&gt;
&lt;p&gt;Plan 模式不是让 Claude 替我想，而是让它在我已经梳理好的框架里填充细节、发现盲点、提出反例。输入越清晰，输出越可用。这个道理听起来简单，但真正做到的人不多。&lt;/p&gt;
&lt;p&gt;如果你觉得自己还不具备独立想架构的能力，我的建议是：先从描述问题开始，和 Claude 反复对话，让它帮你把模糊的想法磨成可执行的方案。对话是双向的，不是单向许愿。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;二架构描述决定代码质量&#34;&gt;二、架构描述决定代码质量&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;给我做一个认证系统&amp;rdquo; 和 &amp;ldquo;基于现有 User 模型实现邮箱密码登录，会话存 Redis 24 小时过期，给 /api/protected 加中间件&amp;rdquo;，得到的结果天差地别。&lt;/p&gt;
&lt;p&gt;AI 生成代码的问题，往往不在于模型不够聪明，而在于你给的目标太宽泛。自由度太大，模型就会按照它自己的理解去填补，而这些填补常常和你的工程习惯、团队规范、历史包袱不一致。&lt;/p&gt;
&lt;p&gt;我在方糖猫的项目里深有体会。AI Agent 的渲染流水线涉及 Java API 服务、Python Worker、RocketMQ、Remotion 渲染、FFmpeg 后处理多个环节。如果我只说&amp;quot;帮我实现一个视频生成任务调度&amp;quot;，Claude 可能会写出一个看起来合理但完全不符合我们现有架构的方案。但如果我把状态机、消息格式、失败重试策略、SSE 进度推送方式都描述清楚，它就能写出可以直接接入系统的代码。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;好的 Prompt 不是文学，是需求文档的浓缩版。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;三claudemd给-ai-的入职培训&#34;&gt;三、CLAUDE.md：给 AI 的入职培训&lt;/h2&gt;
&lt;p&gt;CLAUDE.md 是 Claude Code 会话启动时自动读取的文件。它的作用很像新员工入职手册，但比那更关键：因为它决定了 Claude 在你项目里的&amp;quot;默认行为&amp;quot;。&lt;/p&gt;
&lt;p&gt;我花了点时间打磨自己的 CLAUDE.md，几条原则：&lt;/p&gt;
&lt;h3 id=&#34;1-保持简短&#34;&gt;1. 保持简短&lt;/h3&gt;
&lt;p&gt;Claude 能稳定遵循的指令数量有限，系统提示已经占了一部分。写太多，它只会随机忽略。我的 CLAUDE.md 一般不超过两屏。&lt;/p&gt;
&lt;h3 id=&#34;2-只写项目特有信息&#34;&gt;2. 只写项目特有信息&lt;/h3&gt;
&lt;p&gt;不要解释&amp;quot;组件目录是什么&amp;quot;这种通用知识。要写真正影响决策的东西：关键 bash 命令、构建脚本、测试命令、提交规范、技术约束。&lt;/p&gt;
&lt;h3 id=&#34;3-写为什么不只是做什么&#34;&gt;3. 写&amp;quot;为什么&amp;quot;，不只是&amp;quot;做什么&amp;quot;&lt;/h3&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;差：&amp;ldquo;使用 Java 17&amp;rdquo;。&lt;/li&gt;
&lt;li&gt;好：&amp;ldquo;使用 Java 17，因为部分依赖在 Java 21 下存在兼容性问题，计划在 Q4 统一升级。&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;原因能让 Claude 在你没想到的地方做出正确判断。&lt;/p&gt;
&lt;h3 id=&#34;4-持续更新&#34;&gt;4. 持续更新&lt;/h3&gt;
&lt;p&gt;工作时长按 &lt;code&gt;#&lt;/code&gt; 键，Claude 会自动把指令写进 CLAUDE.md。我的标准是：当我第二次纠正同一个问题时，就把它固化为规则。&lt;/p&gt;
&lt;p&gt;坏的 CLAUDE.md 像写给新人的文档；好的 CLAUDE.md 像写给&amp;quot;未来失忆的自己&amp;quot;的笔记。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;四上下文窗口不是越用越好&#34;&gt;四、上下文窗口不是越用越好&lt;/h2&gt;
&lt;p&gt;Opus 4.5 的上下文窗口很长，但很多人忽略了一个事实：&lt;strong&gt;上下文用到 20%–40% 时，输出质量就开始下降了。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;每次消息、每个文件、每段生成代码、每次工具输出都会累积。等会话变得臃肿，即使 &lt;code&gt;/compact&lt;/code&gt; 也救不回来，因为能力已经劣化了。&lt;/p&gt;
&lt;p&gt;我的做法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;每个任务一个会话&lt;/strong&gt;：不要在同一会话里既改认证系统又重构数据库。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用外部记忆文件&lt;/strong&gt;：比如 &lt;code&gt;SCRATCHPAD.md&lt;/code&gt; 或 &lt;code&gt;plan.md&lt;/code&gt;，把中间结论落地到文件系统。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;复制-压缩-清空-粘贴法&lt;/strong&gt;：重要信息复制出来，&lt;code&gt;/compact&lt;/code&gt; 总结，再 &lt;code&gt;/clear&lt;/code&gt;，只粘回关键内容。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;知道何时清空&lt;/strong&gt;：会话一旦混乱，直接 &lt;code&gt;/clear&lt;/code&gt;。CLAUDE.md 还在，项目规则不会丢。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;正确的心智模型是：&lt;strong&gt;把 Claude 当成无状态的&lt;/strong&gt;。状态应该由文件系统、版本控制、外部记忆来维护，而不是由会话历史来维护。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;五提示词是沟通不是咒语&#34;&gt;五、提示词是沟通，不是咒语&lt;/h2&gt;
&lt;p&gt;我反复说的一句话是：提示词不是玄学，是沟通。清晰永远优于模糊。&lt;/p&gt;
&lt;p&gt;有效的提示通常包含三层：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;要做什么&lt;/strong&gt;：明确任务目标；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不要做什么&lt;/strong&gt;：Claude 喜欢过度工程化，必须明确限制；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;约束和原因&lt;/strong&gt;：是原型还是生产代码？性能敏感还是可读性优先？为什么？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;比如我会这样写：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;请为 &lt;code&gt;VideoRenderWorker&lt;/code&gt; 添加一个重试机制。要求：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;最多重试 3 次，使用指数退避；&lt;/li&gt;
&lt;li&gt;只对临时性错误重试，业务逻辑错误直接失败；&lt;/li&gt;
&lt;li&gt;不要引入新的依赖，使用现有的 Spring Retry 配置；&lt;/li&gt;
&lt;li&gt;这是生产代码，需要单元测试覆盖。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;这样的输入，输出基本可以直接进入 Code Review。&lt;/p&gt;
&lt;p&gt;另外记住：&lt;strong&gt;输出只来自输入&lt;/strong&gt;。如果你用好模型仍然得到坏结果，问题通常在你——你的提示写法、请求结构、上下文提供方式。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;六模型路由让合适的模型做合适的事&#34;&gt;六、模型路由：让合适的模型做合适的事&lt;/h2&gt;
&lt;p&gt;Claude 的不同模型有明确的分工：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sonnet&lt;/strong&gt;：更快更便宜，适合执行明确的编码任务；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opus&lt;/strong&gt;：更慢更贵，适合复杂规划、架构设计、深度推理。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我的常用模式是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用 &lt;strong&gt;Opus&lt;/strong&gt; 做架构规划和复杂方案设计；&lt;/li&gt;
&lt;li&gt;用 &lt;strong&gt;Sonnet&lt;/strong&gt; 执行实现、补全代码、跑测试；&lt;/li&gt;
&lt;li&gt;用 &lt;strong&gt;CLAUDE.md&lt;/strong&gt; 保证模型切换后仍然遵循相同的项目规则。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这和团队里让资深架构师画蓝图、让工程师写代码是一个道理。Claude Code 里切换模型成本很低，但前提是你知道什么任务该用什么模型。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;七mcphooksslash-命令与-skills&#34;&gt;七、MCP、Hooks、Slash 命令与 Skills&lt;/h2&gt;
&lt;p&gt;Claude Code 的工具生态值得花时间探索。除了前面提到的 MCP 和 Hooks，&lt;strong&gt;Skills（技能）&lt;/strong&gt; 是我最近用得越来越多的能力，它把常用工作流封装成可复用的指令包。&lt;/p&gt;
&lt;h3 id=&#34;1-mcphooks-和-slash-命令&#34;&gt;1. MCP、Hooks 和 Slash 命令&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MCP&lt;/strong&gt;：连接外部服务。如果你还在手动复制粘贴信息进 Claude，很可能 MCP 能帮你自动化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hooks&lt;/strong&gt;：在 Claude 修改代码前后执行操作，比如自动格式化、类型检查、跑 lint。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自定义 Slash 命令&lt;/strong&gt;：把常用的提示词模板化，避免每次重复输入。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我在项目里配了几个常用 Slash 命令：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/review&lt;/code&gt;：让 Claude 按项目规范做 Code Review；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/test&lt;/code&gt;：为当前修改生成单元测试；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/doc&lt;/code&gt;：为新增接口补全文档。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-skills把个人经验变成团队能力&#34;&gt;2. Skills：把个人经验变成团队能力&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Skill 是什么？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Skill 是一个 Markdown 文件（通常是 &lt;code&gt;SKILL.md&lt;/code&gt;），带有 YAML frontmatter。它描述了一个完整的工作流、判断标准或领域知识。Claude 会在合适的时机自动加载它，或者你可以通过 &lt;code&gt;/skill &amp;lt;name&amp;gt;&lt;/code&gt; 手动调用。&lt;/p&gt;
&lt;p&gt;你可以把 Skill 理解为&amp;quot;可插拔的专长&amp;quot;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; 是项目通用的&amp;quot;入职培训&amp;quot;，始终加载；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SKILL.md&lt;/code&gt; 是按需加载的&amp;quot;专项手册&amp;quot;，只在匹配的场景触发。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Skill 放在哪里？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;有两种常见位置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;个人级&lt;/strong&gt;：&lt;code&gt;~/.claude/skills/&amp;lt;skill-name&amp;gt;/SKILL.md&lt;/code&gt;，跨项目可用；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;项目级&lt;/strong&gt;：&lt;code&gt;.claude/skills/&amp;lt;skill-name&amp;gt;/SKILL.md&lt;/code&gt;，跟随仓库走，团队成员共享。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我推荐项目级 Skill，因为团队规范应该和代码放在一起，而不是依赖每个人的本地配置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一个最小 SKILL.md 示例：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;name: spring-api-review
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;description: 当用户请求对 Spring Boot API 代码进行 Review 时调用此 skill。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# Spring Boot API Review 规范
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## 检查项
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;1.&lt;/span&gt; 控制器是否只做参数校验和调用服务层？
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;2.&lt;/span&gt; 服务层是否处理业务逻辑，而不是直接操作 HTTP 上下文？
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;3.&lt;/span&gt; DTO 是否有清晰的入参/出参边界？
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;4.&lt;/span&gt; 异常是否统一处理，而不是在每个方法里 try-catch？
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;5.&lt;/span&gt; 是否有对应的单元测试覆盖核心分支？
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## 输出格式
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;对每个问题，按以下结构输出：
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; 位置：文件路径 + 行号
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; 问题描述
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; 风险等级：高 / 中 / 低
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- 建议修改&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;p&gt;&lt;code&gt;description&lt;/code&gt; 字段非常关键。Claude 会根据它判断何时自动加载这个 Skill。描述越具体，触发越准确。&lt;/p&gt;
&lt;h3 id=&#34;3-有哪些值得尝试的-skill&#34;&gt;3. 有哪些值得尝试的 Skill？&lt;/h3&gt;
&lt;p&gt;Claude Code 本身不内置大量固定 Skill，但社区已经沉淀了不少高质量 Skill 包。以下是我觉得对工程团队最有价值的几个方向：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Skill / Skill 包&lt;/th&gt;
					&lt;th&gt;用途&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;gstack&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;比较完整的一套工程 Skill 集合，覆盖 review、qa、investigate、ship、canary、retro 等&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/review&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;预着陆 PR 审查，检查 SQL 注入、LLM 信任边界、副作用等结构性问题&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/qa&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;系统化 QA 测试，发现 bug 后自动修复并验证&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/investigate&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;系统性根因排查，要求&amp;quot;无根因不修复&amp;quot;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/ship&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;合并主分支、跑测试、生成 PR 的发布工作流&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/canary&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;部署后监控异常、性能回归、页面失败&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/retro&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;基于提交历史做工程复盘&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;heliohq/ship&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;更严格的分阶段流水线：spec → dev → E2E → review → QA → refactor → handoff&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Cavestack&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;强调&amp;quot;Hero Six&amp;quot;核心 Skill，包括 office-hours、investigate、plan-eng-review 等&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;我个人用得比较多的是 &lt;code&gt;/review&lt;/code&gt;、&lt;code&gt;/investigate&lt;/code&gt; 和 &lt;code&gt;/ship&lt;/code&gt;。它们不是替代人的判断，而是把重复性的检查清单和流程自动化，让我把精力放在真正需要决策的地方。&lt;/p&gt;
&lt;h3 id=&#34;4-怎么创建自己的-skill&#34;&gt;4. 怎么创建自己的 Skill？&lt;/h3&gt;
&lt;p&gt;创建 Skill 的步骤很简单：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;新建目录&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p .claude/skills/my-skill&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;写 SKILL.md&lt;/strong&gt;：包含 name、description、用途、步骤、输出格式、示例和约束。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;测试触发&lt;/strong&gt;：开一个新会话，描述一个匹配的场景，看 Claude 是否自动加载。如果没加载，调整 description 让它更具体。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;迭代优化&lt;/strong&gt;：使用一段时间后，把新发现的问题和约束补充进去。和 CLAUDE.md 一样，Skill 也是需要持续维护的。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我的建议是：不要一开始就写很多 Skill。先观察团队里哪些工作流是重复的、哪些判断标准是大家口头传颂的，把最常见的两三个固化成 Skill。质量比数量重要。&lt;/p&gt;
&lt;h3 id=&#34;5-skillclaudemdhooks-的分工&#34;&gt;5. Skill、CLAUDE.md、Hooks 的分工&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;能力&lt;/th&gt;
					&lt;th&gt;作用&lt;/th&gt;
					&lt;th&gt;触发方式&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;CLAUDE.md&lt;/td&gt;
					&lt;td&gt;项目通用规则，始终加载&lt;/td&gt;
					&lt;td&gt;每次会话启动&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;SKILL.md&lt;/td&gt;
					&lt;td&gt;专项工作流，按需加载&lt;/td&gt;
					&lt;td&gt;匹配描述时自动加载，或 &lt;code&gt;/skill&lt;/code&gt; 手动调用&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Hooks&lt;/td&gt;
					&lt;td&gt;代码修改前后的强制检查&lt;/td&gt;
					&lt;td&gt;触发编辑操作时&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;MCP&lt;/td&gt;
					&lt;td&gt;连接外部系统的能力&lt;/td&gt;
					&lt;td&gt;需要外部数据或操作时&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这几层叠加起来，才能把 Claude Code 从一个&amp;quot;聊天工具&amp;quot;变成符合团队工程规范的&amp;quot;协作系统&amp;quot;。&lt;/p&gt;
&lt;p&gt;这些小投入会不断复利。模型每周都在变好，但你的工具链、Skill 库和流程才是属于自己的护城河。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;八当-claude-卡住时换策略&#34;&gt;八、当 Claude 卡住时，换策略&lt;/h2&gt;
&lt;p&gt;Claude 有时会陷入循环：改了 A 导致 B 错，改了 B 又导致 A 错。这时候继续补充说明往往没用。&lt;/p&gt;
&lt;p&gt;我常用的策略：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;清空会话&lt;/strong&gt;：从头开始，减少污染；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;拆分任务&lt;/strong&gt;：把大问题拆成几个独立的小问题；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;给示例而不是解释&lt;/strong&gt;：&amp;ldquo;参考 &lt;code&gt;UserService.java&lt;/code&gt; 里的错误处理模式&amp;rdquo; 比 &amp;ldquo;请优雅地处理异常&amp;rdquo; 有效得多；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;换种表述方式&lt;/strong&gt;：同一个需求用不同结构说一遍，有时能绕过模型的固化模式。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;关键技能不是让 Claude 永远不出错，而是&lt;strong&gt;尽早识别循环，并及时切换策略&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;九构建系统而不是一次性工具&#34;&gt;九、构建系统，而不是一次性工具&lt;/h2&gt;
&lt;p&gt;Claude Code 最大的价值，不在于帮你完成单次任务，而在于把它嵌入工程系统。&lt;/p&gt;
&lt;p&gt;它支持 headless 模式（&lt;code&gt;-p&lt;/code&gt;），可以脚本化、自动化、串联命令。企业已经在用它做：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自动审 PR；&lt;/li&gt;
&lt;li&gt;处理支持请求；&lt;/li&gt;
&lt;li&gt;更新文档；&lt;/li&gt;
&lt;li&gt;批量重构；&lt;/li&gt;
&lt;li&gt;生成测试用例。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我们的飞轮是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Claude 出错 → 改进 CLAUDE.md 或工具链 → 下次更好。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;几个月后，即使模型没变，整个系统也会显著提升。这就是复利。&lt;/p&gt;
&lt;p&gt;如果你只把 Claude Code 当成一个交互式聊天工具，你正在浪费它的大部分价值。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;十写给老工程师的话&#34;&gt;十、写给老工程师的话&lt;/h2&gt;
&lt;p&gt;用了 Claude Code 一段时间后，我发现一个有意思的现象：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;经验丰富的工程师反而更容易用好它。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因为你知道什么是好的架构，什么是坏的妥协，什么是可以自动化的重复劳动，什么是必须人工把关的关键决策。Claude Code 不会替你承担责任，但它能把你的判断力和工程经验放大很多倍。&lt;/p&gt;
&lt;p&gt;对我来说，它最大的帮助不是写代码更快，而是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;把重复性工作交给它，我腾出时间思考架构；&lt;/li&gt;
&lt;li&gt;用它快速验证想法，减少原型阶段的沉没成本；&lt;/li&gt;
&lt;li&gt;通过 CLAUDE.md 和工具链，把个人经验沉淀为团队能力。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;
&lt;p&gt;把 Claude Code 用好，核心就几句话：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先思考，再输入；&lt;/li&gt;
&lt;li&gt;架构描述决定代码质量；&lt;/li&gt;
&lt;li&gt;CLAUDE.md 是杠杆点；&lt;/li&gt;
&lt;li&gt;上下文在用到 30% 时就开始劣化；&lt;/li&gt;
&lt;li&gt;提示词是沟通，输出来自输入；&lt;/li&gt;
&lt;li&gt;让 Opus 规划，让 Sonnet 执行；&lt;/li&gt;
&lt;li&gt;善用 MCP、Hooks、Slash 命令，更要善用 Skills；&lt;/li&gt;
&lt;li&gt;卡住时换策略；&lt;/li&gt;
&lt;li&gt;构建系统，而不是只做一次性任务。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;现代 AI 工具已经强得离谱。你是在和工具对抗，还是顺势而行，往往取决于这些细节。&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;我在 ftmao.com/blog 持续记录 AI 工程、Agent 设计与 Claude Code 等工具的落地实践，欢迎关注和交流。&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>
    
  </channel>
</rss>
