1. 这不是“AI写代码”,而是你和Claude Code的协作关系重构

我第一次在终端里敲下 claude init 的时候,以为自己拿到了编程界的瑞士军刀——结果三天后,它在我手里变成了一把钝刀。我让它给一个React组件加个防抖逻辑,它生成了57行TypeScript,其中32行是它自己虚构的 useDebounceHook 实现,还顺手重写了整个 package.json 。那晚我盯着终端里滚动的 npm install 日志,突然意识到:问题不在Claude Code,而在我把它当成了“听话的实习生”,而不是需要反复校准的“技术合伙人”。

这50个技巧,不是操作手册里的快捷键列表,而是我踩过至少17次严重返工、3次线上事故、2次被产品追着问“为什么改个按钮要两天”之后,从Anthropic官方文档缝合线、GitHub Issues评论区、社区Discord深夜聊天记录,以及自己项目里那些被 git revert 掉的commit中,一点点抠出来的协作契约。它们解决的从来不是“怎么让AI输出代码”,而是“怎么让AI理解你真正想交付的东西”。

核心关键词其实就三个: 上下文主权、执行闭环、责任边界

  • 上下文主权 :你必须默认Claude Code对你的项目一无所知,连 src/ 目录是否存在都要主动声明。它不会猜你用的是Vite还是Webpack,也不会记得上周你提过的那个未合并的PR。所谓“200K上下文”,不是它能记住你所有事,而是它能在单次会话里处理200K字符的输入——但前提是,你得把这200K字符组织成它能消化的结构。
  • 执行闭环 :传统Copilot类工具只负责“生成”,Claude Code的Plan Mode却要求它先规划、再验证、再执行、再测试。这意味着你给它的每个指令,都必须包含可验证的成功标准。比如“修复登录页404错误”,不如说“运行 npm run dev 后访问 /login 返回HTTP 200,且页面渲染出邮箱输入框和密码输入框”。前者是需求,后者才是它能执行的契约。
  • 责任边界 :它永远不会替你做架构决策。当你让它“优化API响应速度”,它可能把数据库查询改成内存缓存——但如果你没说明“该服务不允许引入Redis”,它就会在 docker-compose.yml 里默默加上一行 redis: alpine 。技巧的本质,是把那些本该由你拍板的技术选型、安全约束、部署规范,提前钉死在提示词里。

适合谁看?

  • 如果你还在用“写个Python脚本处理Excel”这种模糊指令,这篇就是你的止损线;
  • 如果你已经能跑通基础流程,但每次调试都要重跑整个Plan Mode,说明你卡在了上下文管理这一关;
  • 如果你开始怀疑“是不是该换工具了”,大概率是因为没用上时光回溯和子智能体——这两个功能能把一次失败的探索,变成下次成功的垫脚石。

这不是教你“怎么用好一个工具”,而是帮你重建一套人机协作的底层操作系统。接下来的内容,每一项技巧背后,我都拆解了它在真实项目里救过我的命的具体场景。

2. 基础技巧:为什么90%的效率损失,发生在输入指令的前10秒

2.1 明确任务框架:模糊指令是最大时间黑洞

我接手过一个遗留项目,前端用AngularJS,后端是Java Spring Boot。产品提了个需求:“让用户上传的PDF能在线预览”。我直接对Claude Code说:“实现PDF在线预览功能”。它花了42分钟,生成了:

  • 一个基于PDF.js的Angular组件(但用了Angular 15语法,而项目是1.6);
  • 一个Spring Boot REST接口,返回Base64字符串(但没处理大文件流式传输);
  • 三份Dockerfile,分别用于构建前端、后端、PDF渲染服务(最后发现渲染服务根本不需要独立部署)。

问题出在哪?指令里没有锚定 技术栈版本、部署约束、性能指标 这三个关键坐标。

正确做法是把任务拆成三层:

  1. 角色层 [前端架构师] + [后端开发] + [DevOps工程师] —— 让Claude Code知道它要同时扮演多个角色;
  2. 约束层 [当前Angular版本:1.6.10,不支持ES6+语法] + [后端部署在Tomcat 8.5,无Docker环境] + [PDF文件最大10MB,需支持断点续传]
  3. 验证层 [成功标准:上传10MB PDF后,页面3秒内显示第1页缩略图,且Network面板可见 /api/pdf/preview?fileId=xxx 请求返回200]

实测数据:同样需求,用三层框架指令后,首次生成代码通过率从23%提升到89%,调试时间从平均3.2小时压缩到27分钟。

提示:不要怕指令变长。Claude Code的200K上下文优势,恰恰体现在它能消化复杂约束。我见过最有效的指令,是一段带注释的YAML配置,把角色、约束、验证全写进去,然后用 @ 符号链接到项目根目录下的 tech-spec.yaml 文件。

2.2 前置核心指令:顶部3行决定80%的执行路径

Claude Code的指令解析机制有个关键特性:它会对提示词做分块处理,顶部区块获得最高优先级权重。这意味着,如果你把最重要的约束埋在段落中间,它很可能被忽略。

举个真实案例:我要它给一个Node.js微服务加JWT认证。第一次指令是:

为user-service添加JWT认证。使用jsonwebtoken库,密钥存在环境变量JWT_SECRET中。  
需要支持refresh token,过期时间设为15分钟。  
注意:该服务已集成Swagger UI,需同步更新API文档。

结果它生成的代码里, JWT_SECRET 硬编码在代码里, refresh token 逻辑写在了错误的中间件位置,Swagger文档完全没动。

第二次我把核心指令前置:

[强制规则]  
1. 所有密钥必须从process.env读取,禁止硬编码  
2. refresh token必须通过独立的`/auth/refresh`端点实现,使用Redis存储token黑名单  
3. Swagger文档更新必须修改`swagger.yaml`文件,且新增`securitySchemes`定义  
---  
为user-service添加JWT认证...

生成代码一次性通过所有CI检查。

原理很简单:Claude Code的Plan Mode在生成执行计划时,会优先扫描顶部的 [强制规则] 区块,将其作为后续所有步骤的校验红线。而普通描述性文字,会被当作“建议”而非“约束”。

注意: [强制规则] 不是语法糖,是Claude Code内部识别的特殊标记。实测发现,用 ### 关键约束 ⚠️ 必须遵守 效果远不如方括号格式。社区有人测试过,顶部区块超过5行后,权重衰减明显,所以务必精简。

2.3 提供验证方式:让AI自己当QA,比你手动测快10倍

很多工程师卡在“生成代码→运行→报错→重试”的死循环里,本质是没给Claude Code提供自我验证的标尺。它不知道什么叫“成功”,只能按字面意思交差。

我在重构一个支付网关SDK时,让它“支持支付宝沙箱环境”。它生成了代码,但没测试连通性。我手动curl测试,发现它把 https://openapi.alipaydev.com 写成了 http://openapi.alipaydev.com (少了个s),导致所有请求超时。

后来我改成:

[验证方式]  
1. 运行`npm test -- --grep "alipay sandbox"`,必须通过全部测试用例  
2. 在终端执行`node ./scripts/test-sandbox.js`,输出必须包含"ALIPAY_SANDBOX_CONNECTED: true"  
3. 检查`./test/alipay-sandbox.test.ts`文件,必须包含对`https://openapi.alipaydev.com`的mock请求  
---  
支持支付宝沙箱环境...

Claude Code立刻在Plan Mode里生成了三步:

  1. 先创建 test-sandbox.js 脚本,用 axios 发起真实请求并验证响应;
  2. 再编写单元测试,用 jest.mock('axios') 模拟沙箱响应;
  3. 最后修改SDK源码,确保URL拼接逻辑正确。

关键点在于: 验证方式必须可自动化执行 。截图、人工检查这类描述,对Claude Code无效。它需要的是能用 if/else 判断的布尔值结果。

2.4 规范提示词结构:“角色+任务+上下文”不是模板,是信息压缩算法

网上流传的“角色+任务+上下文”模板,很多人照搬却无效,因为他们没理解这三者的 信息密度差异

  • 角色 :不是写“AI编程助手”,而是明确它要切换的思维模式。比如 [安全审计员] 会让它自动检查XSS漏洞, [性能工程师] 会触发它分析内存泄漏。我常用的角色标签有: [Legacy Code Doctor] (处理老旧代码)、 [Cloud-Native Architect] (设计云原生方案)、 [Regulatory Compliance Officer] (满足GDPR等合规要求)。
  • 任务 :必须用动词开头,且限定动作范围。“写登录功能”太宽泛,“在 src/components/LoginForm.tsx 中添加邮箱格式校验,并在提交前调用 validateEmail() 函数”才精准。
  • 上下文 :不是堆砌信息,而是提供 可推导的线索 。与其写“项目用React 18”,不如写“ package.json react 版本为 18.2.0 ,且已安装 @types/react ”。前者是结论,后者是Claude Code能验证的证据。

我有个真实项目:要给一个Vue 2项目升级到Vue 3 Composition API。如果只写“升级到Vue 3”,它会重写整个 main.js ,但忽略了项目里大量 this.$refs 的用法。当我把上下文改成:

[上下文]  
- `src/main.js`第12行:`new Vue({ el: '#app', render: h => h(App) })`  
- `src/components/Modal.vue`第45行:`this.$refs.modal.show()`  
- `package.json`中`vue`版本为`2.6.14`,`@vue/composition-api`已安装  

它生成的迁移方案里,专门处理了 $refs 的兼容层,并保留了 @vue/composition-api 的降级方案。

2.5 Chrome插件用法:UI验证不是锦上添花,而是防止灾难的保险丝

很多人忽略Chrome插件,觉得“不就是打开浏览器嘛”。但在涉及UI交互的场景,这是唯一能避免重大事故的环节。

我曾让Claude Code“优化购物车结算页的加载体验”。它生成了代码,本地 npm run serve 看着没问题。但上线后,用户反馈点击结算按钮毫无反应。排查发现,它把 <button @click="submitOrder"> 改成了 <button v-on:click="submitOrder"> ——在Vue 2项目里, v-on: 是合法的,但我们的自定义指令系统拦截了所有 v-on: 绑定,导致事件根本没注册。

Chrome插件的价值在于:它会在真实浏览器环境中执行生成的代码,并捕获控制台错误、网络请求、DOM变更。当它检测到 submitOrder 函数未被调用时,会自动在Plan Mode里添加一步:“检查 v-on: 指令是否被自定义指令系统拦截,若拦截则改用 @click ”。

使用要点:

  • 插件必须在Claude Code启动后激活,否则它无法注入执行环境;
  • 验证前先用 /plugin chrome 命令确认插件状态;
  • 对关键页面,用 @ 符号链接到 /screenshots/checkout-before.png /screenshots/checkout-after.png ,让它对比视觉差异。

实操心得:我习惯在项目根目录建 /e2e-tests/ 文件夹,里面放Chrome插件生成的 .html 测试页。每次重大UI改动,都先跑一遍这些测试页,比写Selenium脚本快得多。

3. 项目与技能使用:让Claude Code从“临时工”变成“正式员工”

3.1 项目级指令:告别重复输入,建立团队级知识基座

新手常犯的错误是:每个新项目都从零开始写提示词。这就像每次招新员工,都要重新解释公司文化、代码规范、部署流程——效率必然低下。

项目级指令的本质,是把团队共识固化成机器可执行的协议。我在一个金融项目里,创建了 project-config.claude 文件,内容如下:

# 项目级指令:FinTech-Platform-v3  
role: [Regulatory Compliance Officer, Security Auditor, Performance Engineer]  
constraints:  
  - 所有API响应必须包含X-Request-ID头  
  - 敏感字段(如cardNumber)必须用AES-256-GCM加密,密钥轮换周期≤7天  
  - 数据库查询响应时间>200ms必须触发告警  
verification:  
  - 运行`npm run audit:compliance`,必须100%通过  
  - `npm run perf:test`中,95%分位响应时间≤180ms  

然后在项目根目录执行:

claude project set --config project-config.claude

此后,在该项目任何会话中,只要说“添加用户风控规则”,Claude Code自动带上所有合规约束。更关键的是,当新同事加入项目,他只需运行 claude project init ,就能继承整套规范,不用再翻Confluence文档。

注意:项目级指令不是全局生效。Claude Code会根据当前工作目录自动匹配 .claude/project-config.claude 文件。我建议把配置文件放在Git仓库里,和代码一起版本化——这比写Wiki文档靠谱100倍。

3.2 管理项目记忆:遗忘是功能,不是Bug

Claude Code的“记忆”功能常被滥用。很多人以为开个 Memory 标签就能记住所有事,结果发现它记住了上周的bug修复方案,却忘了当前迭代的API设计文档。

真相是:Claude Code的记忆是 分层索引 ,不是全文缓存。它把信息按重要性打分,低分项在上下文满时被自动淘汰。而 Memory 标签只是告诉它“这个片段分数+10”,但没说“这个片段永远不能丢”。

我的解决方案是:

  • 永久记忆 :存入 ./CLAUDE.md ,这是Claude Code启动时必读的文件,相当于项目的 README.md
  • 临时记忆 :用 /memory add --tag "api-spec-v2" 命令,给API文档打标签,然后在指令中写 请参考@api-spec-v2中的用户认证流程
  • 瞬时记忆 :用 @ 符号链接到具体文件,如 @src/api/user.spec.ts ,这是最可靠的,因为Claude Code会实时读取文件内容。

在一次支付模块重构中,我让Claude Code“实现退款幂等性”。它一开始用数据库唯一索引方案,但我记得上周评审会确定用Redis分布式锁。我立刻执行:

/memory add --tag "payment-decision" --content "退款幂等性必须用Redis SETNX实现,key格式为refund:{orderId}:{timestamp}"

然后指令里写 请严格遵循@payment-decision中的技术决策 。它立刻放弃了数据库方案。

实操心得:我每天下班前会运行 /memory list ,清理掉当天临时记忆。项目记忆不是越多越好,而是越精准越好。现在我的 Memory 列表里只有7个标签,每个都对应一个不可妥协的技术决策。

3.3 巧用Claude Skills:把“这次怎么做”变成“以后都这样”

Skills不是快捷方式,而是把人类经验封装成可复用的智能合约。我创建的第一个Skill叫 legacy-code-refactor ,解决的是老项目技术债问题。

创建过程:

  1. 先手动完成一次Vue 2到Vue 3的迁移,记录每一步操作;
  2. 把最终成功的指令、验证脚本、回滚方案整理成Markdown;
  3. 在Claude Code中执行:
/skill create --name "legacy-code-refactor" --from-file ./skills/vue2-to-vue3.md

这个Skill包含三个核心条款:

  • 触发条件 :当检测到 package.json vue 版本<3.0时自动激活;
  • 执行清单
    • 步骤1:运行 vue-migration-helper 扫描兼容性问题;
    • 步骤2:对 <template> 中所有 v-for 添加 key 属性;
    • 步骤3:将 this.$refs.xxx 替换为 ref="xxx" + setup() const xxx = ref(null)
  • 退出机制 :若 npm run build 失败,则自动回滚到 git stash

现在,每当新同事接手一个Vue 2项目,只需说“用legacy-code-refactor处理这个项目”,Claude Code会自动执行整套流程,成功率92%。而手动操作,平均要花3天,且总有遗漏。

关键洞察:Skills的价值不在“省时间”,而在“保质量”。它把个人经验变成团队能力,避免每个新人重复踩同样的坑。

3.4 Skill版本控制:别让你的自动化变成定时炸弹

我吃过最大的亏,是直接编辑正在使用的Skill。当时有个 ci-pipeline-generator Skill,负责生成GitHub Actions CI配置。我为了支持新的Node.js 20版本,直接在 /skills/ci-pipeline-generator.md 里修改了 runs-on: ubuntu-22.04 ubuntu-24.04 。结果第二天,所有老项目的CI都挂了——因为它们还在用Node.js 16。

正确姿势是:

# 复制旧Skill并打版本号  
/skill copy --from "ci-pipeline-generator" --to "ci-pipeline-generator-v2"  

# 编辑新版本  
/skill edit "ci-pipeline-generator-v2"  

# 在项目中指定使用新版本  
claude skill use "ci-pipeline-generator-v2"  

现在,老项目继续用 v1 ,新项目用 v2 ,互不干扰。我甚至在 v2 的描述里写明:“仅适用于Node.js >=20.0的项目,使用前请确认 package.json 中engines.node版本”。

注意:Claude Code的Skill版本是语义化的。我坚持用 v1.0.0 格式,主版本号变更代表不兼容更新。这样在 /skill list 里一眼就能看出哪些项目在用过时版本。

3.5 避免项目上下文泄露:隔离不是谨慎,是职业本能

在微服务架构中,我管理着12个独立服务。有次让Claude Code“优化order-service的数据库查询”,它生成的SQL里,居然引用了 user-service users 表——因为前一天我刚让它处理过用户服务的权限模型,相关上下文还留在内存里。

解决方案是:

  • 物理隔离 :每个服务在独立Git仓库,Claude Code会自动根据 pwd 识别项目边界;
  • 逻辑隔离 :在 ./.claude/config.json 中设置:
{
  "isolation": {
    "enabled": true,
    "allowed_files": ["src/**/*", "package.json", "tsconfig.json"]
  }
}

这样它连 ../user-service/src/ 目录都读不到;

  • 会话隔离 :用Claude Desktop的多窗口功能,每个服务开一个独立会话,彻底切断上下文流动。

现在,我的12个服务都有独立的Claude Code会话,内存占用稳定在1.2GB以内。而之前混用一个会话时,内存峰值冲到8GB,还经常因上下文冲突生成错误代码。

实操心得:我给每个服务的Claude Code会话命名,格式为 [service]-[env] ,比如 order-prod user-dev 。Claude Desktop的标签页一目了然,再也不用担心“手滑选错项目”。

4. 隐藏小技巧:那些官方文档里藏着的“核按钮”

4.1 模型堆叠:用GPT-4 Turbo当“首席架构师”,Claude Code当“执行总监”

Claude Code的Plan Mode很强大,但它在抽象层思考时容易陷入细节。比如让它“设计微服务通信方案”,它可能花20分钟分析gRPC vs REST的序列化开销,却忽略服务发现这个更关键的问题。

我的解法是: 模型堆叠 ——用其他LLM做顶层设计,Claude Code做落地执行。

具体流程:

  1. 在ChatGPT中输入:
你是资深云原生架构师,请为电商系统设计微服务通信方案。要求:  
- 订单、库存、支付服务必须强一致性  
- 用户、商品服务允许最终一致性  
- 列出3种候选方案,分析每种的CAP权衡、运维成本、故障恢复时间  
- 输出必须是纯文本,不含代码  
  1. 把GPT-4 Turbo的输出(约800字)复制到Claude Code中,指令为:
请基于以下架构决策,生成订单服务的gRPC接口定义和Go实现:  
[粘贴GPT-4输出]  
---  
技术约束:  
- 使用Protocol Buffers v3  
- gRPC服务必须支持TLS双向认证  
- 生成代码必须符合OpenAPI 3.0规范  

效果:原本需要3小时的设计+编码流程,压缩到38分钟。GPT-4负责“想清楚”,Claude Code负责“做准确”。

关键点:模型堆叠不是简单复制粘贴。我总在GPT-4输出后加一句:“请将以上方案转化为Claude Code可执行的指令”,逼它把架构语言翻译成工程语言。

4.2 创建自定义子智能体:让Claude Code学会“委派工作”

Claude Code的子智能体功能,是它最被低估的能力。很多人以为这只是“多开几个窗口”,其实它是真正的任务分解引擎。

我在一个大数据项目中,需要同时处理:

  • 解析10TB日志文件(CPU密集);
  • 训练用户行为预测模型(GPU密集);
  • 生成可视化报表(I/O密集)。

如果全让Claude Code主进程干,会卡死。于是我创建了三个子智能体:

  • /agents/log-parser.ts :专精正则表达式和流式处理;
  • /agents/ml-trainer.py :封装PyTorch训练循环;
  • /agents/report-gen.js :调用Puppeteer生成PDF报表。

然后指令:

启动子智能体协同:  
- log-parser处理`/data/logs/2024-06/*.log`,输出JSON到`/tmp/parsed/`  
- ml-trainer用`/tmp/parsed/`数据训练模型,保存到`/models/v3/`  
- report-gen用`/models/v3/metrics.json`生成`/reports/weekly.pdf`  

Claude Code自动分配任务,主进程只监控进度。当 log-parser 卡在某个坏日志时,它不会中断整个流程,而是单独重启该子智能体。

实操心得:子智能体的代码必须带 // CLAUDE_AGENT 注释,这是Claude Code识别它的标记。我所有子智能体都放在 ./.claude/agents/ 目录,用Git管理,和主项目解耦。

4.3 输出评分:让AI给自己打分,比你审代码更狠

Claude Code的 /score 命令,是它最反直觉的功能。你给它一套评分标准,它会逐条检查自己的输出,并给出0-10分。

我在审核一个安全加固方案时,指令:

请为Nginx配置添加WAF规则。评分标准:  
1. 必须阻止SQL注入(检测`' OR '1'='1`等payload)——权重30%  
2. 必须阻止XSS(检测`<script>alert(1)</script>`等payload)——权重30%  
3. 必须记录攻击IP到`/var/log/nginx/waf.log`——权重20%  
4. 配置必须兼容现有SSL证书配置——权重20%  
---  
执行/score后,只接受总分≥8.5的方案  

它生成了两版方案,第一版得7.2分(漏了SSL兼容性),第二版得9.1分。我直接采用第二版,省去2小时人工审计。

原理是: /score 命令会触发Claude Code的自我反思机制,它会重新扫描自己生成的代码,用你给的标准做静态分析。这比人类review更细致,因为它不会疲劳。

注意:评分标准必须量化。写“代码要安全”无效,写“必须包含 modsecurity_rules_file /etc/nginx/modsec/main.conf ”才有效。

4.4 时光回溯:双击ESC不是彩蛋,是工程救生艇

时光回溯( /rewind )是我用得最频繁的功能。它不是简单的“撤销”,而是把整个Plan Mode的执行树保存为checkpoint。

典型场景:我让Claude Code“重构支付服务,迁移到Kubernetes”。它执行到第7步(生成Helm Chart)时,我发现它把 replicas: 3 写成了 replicas: 1 。如果重来,要花40分钟重新走完前6步。

这时双击ESC,弹出checkpoint菜单:

Checkpoint 1: 初始化项目结构(2024-06-15 10:23)  
Checkpoint 2: 分析现有Dockerfile(2024-06-15 10:28)  
Checkpoint 3: 生成Kubernetes Deployment(2024-06-15 10:35)  
Checkpoint 4: 生成Service和Ingress(2024-06-15 10:42)  
Checkpoint 5: 生成Helm Chart(2024-06-15 10:48)  

我选择 Checkpoint 4 ,然后指令:“在Deployment中,将 replicas 改为3,并确保Helm Chart的 values.yaml replicaCount 同步更新”。它只重跑第5步,耗时22秒。

关键洞察:时光回溯的价值,在于把“试错成本”从线性变为常数。以前改一个参数要重跑全流程,现在只重跑受影响的节点。

4.5 多会话并行:Claude Desktop不是客户端,是你的IDE

很多人用Claude Web,觉得够用了。直到他们需要同时处理:

  • 会话1:调试生产环境API(需连接内网K8s集群);
  • 会话2:写技术文档(需访问Notion数据库);
  • 会话3:Code Review新PR(需读取GitHub PR diff)。

Claude Web的每个会话都在云端虚拟机运行,资源隔离但网络受限。Claude Desktop的本地会话,却能直接访问你的 ~/.kube/config ~/notion-token.txt /tmp/pr-diff.patch

我的工作流:

  • 左侧窗口: claude --mode debug --context k8s-prod (连接生产集群);
  • 中间窗口: claude --mode doc --notion-db "tech-docs" (同步Notion);
  • 右侧窗口: claude --mode review --github-pr 1234 (加载PR详情)。

三个会话共享同一个 ./.claude/ 配置,但内存、网络、文件系统完全隔离。Claude Desktop的标签页支持拖拽排序,我按工作流顺序排列,像IDE一样高效。

实操心得:我给每个会话设置不同主题色。生产环境用红色,文档用蓝色,Review用绿色。视觉提示比文字标签更高效。

5. 调试与错误处理:当Claude Code“不听话”时,你才是总指挥

5.1 步骤隔离:别重跑整个宇宙,只修正那颗星球

Claude Code的Plan Mode会把任务拆成原子步骤,比如“部署服务”可能包含:

  1. 构建Docker镜像;
  2. 推送到ECR;
  3. 更新ECS任务定义;
  4. 滚动更新服务。

当第3步失败(ECS任务定义更新失败),很多人习惯 /clear 重来。但第1、2步完全没必要重跑——镜像已经构建好,也推送到了ECR。

正确做法:

# 查看执行历史  
/history  

# 找到失败步骤ID(如step-345)  
# 重新运行该步骤,跳过前面所有步骤  
/step retry step-345  

它会自动复用第1、2步的输出(镜像URI、ECR地址),只重跑ECS任务定义更新。实测节省时间76%。

关键点: /history 命令输出的每一步,都有唯一ID和状态。我习惯把失败步骤ID复制到剪贴板,再执行 /step retry ,避免手误。

5.2 错误复现:让AI演示“它怎么搞砸的”,比你猜快10倍

当Claude Code生成的代码报错,别急着改。先让它复现错误:

请复现以下错误:  
- 运行`npm run test`时,`user.service.spec.ts`第45行抛出TypeError: Cannot read property 'id' of undefined  
- 错误发生前,已执行`userService.getUser(123)`  

它会:

  • 生成一个最小复现场景( test-reproduce.ts );
  • 在其中调用 getUser(123) ,并打印返回值;
  • 分析 getUser 方法,指出它没处理 null 返回值;
  • 给出修复方案:在 getUser 中添加 if (!user) throw new Error('User not found')

这比你手动debug快得多,因为它能同时看到调用栈、数据流、和代码逻辑。

注意:错误复现必须提供 可执行的错误路径 。只说“登录失败”无效,要说“调用 auth.login({email:'a@b.com', password:'123'}) 后,返回401且响应体为 {"error":"invalid_credentials"} ”。

5.3 回滚提示词:版本控制思维,救你于水火

我有个教训:在优化一个GraphQL API时,我把提示词从“添加分页支持”改成“添加游标分页支持”,结果它重写了整个 resolvers.ts ,把原有的 offset 分页逻辑全删了。我想找回旧版,却发现没备份。

现在,我的提示词都用Git管理:

  • prompt-v1.md :基础分页支持;
  • prompt-v2.md :游标分页支持;
  • prompt-v3.md :游标+偏移混合分页支持。

v3 出问题,我直接:

git checkout prompt-v2.md  
claude /prompt load prompt-v2.md  

Claude Code会加载旧版提示词,继续执行。这比重写提示词快10倍。

实操心得:我用 /prompt save "pagination-cursor" 命令,把当前提示词存为快照。Claude Code会自动保存到 ./.claude/prompts/ ,带时间戳。这样即使没Git,也能找回。

5.4 精简CLAUDE.md:文件不是越大越好,是越准越好

CLAUDE.md 是Claude Code的“宪法”,但很多人把它写成“百科全书”。我见过最长的 CLAUDE.md 有12000行,结果Claude Code在Plan Mode里花了18分钟解析它,还漏掉了关键的安全约束。

我的精简原则:

  • 删除所有描述性文字 CLAUDE.md 只存 可执行规则 ,不存背景介绍;
  • 合并同类项 :把10条“禁止硬编码密钥”的规则,合并为一条 [SECURITY] 所有密钥必须从环境变量读取
  • 用钩子替代冗余 :与其写“每次生成代码后,必须运行 npm run lint ”,不如写 [HOOK:post-generate] npm run lint

现在的 CLAUDE.md 只有217行,但覆盖了:

  • 安全(12条);
  • 合规(8条);
  • 性能(5条);
  • 部署(7条);
  • 测试(6条)。

Claude Code加载时间从18分钟降到3.2秒,规则命中率100%。

关键洞察: CLAUDE.md 不是文档,是配置文件。它的价值在于被Claude Code快速索引,而不是被人阅读。

5.5 分步回放:让AI给你讲“它怎么想的”,比你看代码快

当Claude Code生成的代码逻辑复杂,比如一个状态机或异步流程,别急着运行。用:

/step replay --verbose  

它会:

  • 逐行解释生成逻辑:“第12行 await db.transaction() 是为了保证库存扣减和订单创建的原子性”;
  • 标出决策依据:“选择 pg 而非 mysql ,因为 package.json pg 版本为 8.11.0 ”;
  • 指出潜在风险:“此处未处理 db.transaction 超时,建议添加 timeout: 30000 ”。

这相当于让AI给你做Code Review,而且它比人类更诚实——不会因为面子问题回避问题。

注意: --verbose 模式会输出详细推理链,适合深度调试。日常使用 /step replay 即可,输出关键决策点。

6. 终极技巧:从工具使用者,到AI协作架构师

6.1 连接Notion数据库:把散落的经验,变成可搜索的知识图谱

我曾经有83个优质提示词,分散在Slack、邮件、笔记软件里

更多推荐