Skip to content
imshengli blog
Go back

Claude Code 最佳实践:让 AI 成为真正靠谱的编程搭档

从 CLAUDE.md 到 Hooks、从 Plan Mode 到多 Agent 并发,这是我日常使用 Claude Code 总结的一套工作方式——让 AI 不只是会写代码,还能稳定、可控地完成复杂任务。

· 9 min

结论先行

大多数人用 Claude Code 的方式是:打开终端,随手输一句需求,看着 AI 噼里啪啦地改代码,然后祈祷它没有搞坏什么。

这种用法能出活,但不稳定。

让 Claude Code 真正可靠的关键,是把它当成一个刚入职的高级工程师来管理——它能力很强,但需要清晰的任务边界、足够的上下文、和合理的工作流。本文记录的,是我日常使用中总结的一套实际可行的做法。


一、CLAUDE.md:给 AI 的项目说明书

这是所有实践里最高回报的一条:在项目根目录写 CLAUDE.md

Claude Code 每次启动都会自动读取这个文件。它不是文档,是给 AI 的”入职手册”——告诉它这个项目的技术栈、命令、约定、禁止事项。

一份够用的 CLAUDE.md 长这样:

# 项目说明

## 技术栈
- Node.js 22, TypeScript 5, React 19
- 数据库:PostgreSQL(通过 Prisma)
- 测试:Vitest + Testing Library

## 常用命令
- 开发:`npm run dev`
- 测试:`npm test`(不要用 `--watch`,CI 里会死循环)
- 构建:`npm run build`

## 约定
- 函数组件,禁止 class component
- 所有 API 调用必须有 error handling
- 禁止 `console.log`,用 `logger` 模块

## 禁止
- 不要修改 `src/legacy/` 下的任何文件
- 不要自作主张升级依赖版本

写这个文件的核心原则是:不要写废话,只写 AI 会猜错的东西。语言规范、框架选型——AI 能从代码里看出来。但”我们的测试不用 --watch”这种项目特有的约定,不写它就一定猜错。


二、Plan Mode:先对齐,再动手

对于任何涉及多个文件的改动,先进 Plan Mode(Shift+Tab 切换),让 AI 把方案写出来,你确认后再执行。

为什么这很重要?

AI 开始写代码之后,想改方向的成本极高——它已经改了十个文件,你说”等等,我想换个思路”,然后就要花时间 undo 或者重新解释。

Plan Mode 把”对齐”和”执行”分成两个阶段。在方案阶段用 30 秒确认方向,比在代码阶段用 10 分钟反复纠偏划算得多。

一个典型的 Plan Mode 对话:

你:在 Plan Mode 下,我要给用户表加一个 soft delete 功能,
    影响到的有数据查询、API 端点、管理后台的展示。

AI:(输出方案)
    1. 给 users 表加 deleted_at 字段(migration)
    2. 修改 Prisma schema,添加软删除过滤
    3. 封装 softDelete / restore 方法
    4. 更新 5 个 API 端点
    5. 管理后台加"已删除"筛选项
    
    预计改动文件:[列表]

你:方案没问题,但第 4 步只改 3 个端点,其他两个暂时不动。
AI:(调整方案确认后)开始执行。

关键点:Plan Mode 下 AI 不写代码,只输出方案。你有机会在”0 行代码”的状态下修正方向。


三、上下文管理:别让 AI 在迷雾里工作

Claude Code 有上下文窗口限制。对话越长,它能看到的”历史”就越少。很多奇怪的行为——突然忘了之前的约定、重复修改同一个地方——都是上下文不足导致的。

几个实用规则:

1. 及时用 /clear 开新对话

完成一个独立任务后,用 /clear 清除上下文,开始新任务。不要把”修复支付 bug”和”重构用户模块”放在同一个对话里——它们没有关联,混在一起只会稀释有效上下文。

2. 每次对话都带关键上下文

不要假设 AI 记得上次说的话。如果这次任务依赖之前的决策,就再说一遍:

上次我们决定用 event sourcing 而不是直接写状态,
基于这个架构,帮我实现订单取消的逻辑。

3. 让 AI 先读文件再动手

遇到复杂改动,先让 AI 读相关文件:

在修改之前,先读一下 src/auth/ 下所有文件,
理解现有的认证流程,然后再告诉我你的实现思路。

跳过这步,AI 很可能基于猜测写代码,然后你发现它完全没理解现有架构。


四、Hooks:把重复动作变成自动挡

Claude Code 的 Hooks 系统可以在特定事件触发时自动执行 shell 命令。这是把工作流”自动化”的正确姿势。

在项目 .claude/settings.json 里配置:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "npm run lint --fix 2>/dev/null || true"
          }
        ]
      }
    ]
  }
}

这个配置的效果:每次 AI 写或改文件,自动跑 lint 修复。你不需要每次提醒它”别忘了格式化”。

几个高价值的 Hook 场景:

Hooks 的核心价值:把”每次都要提醒 AI”的事情,变成系统行为


五、权限配置:给 AI 划定安全边界

默认情况下,Claude Code 会在执行每个工具调用时征求你的许可。这很安全,但在熟悉的项目里会很烦。

合理的做法是分层配置权限:

全局允许(对所有项目生效),放在 ~/.claude/settings.json

{
  "permissions": {
    "allow": [
      "Bash(git status)",
      "Bash(git diff*)",
      "Bash(npm run lint*)",
      "Bash(npm test*)"
    ]
  }
}

项目级允许,放在 .claude/settings.json

{
  "permissions": {
    "allow": [
      "Bash(npm run dev*)",
      "Bash(npx prisma*)"
    ]
  }
}

原则:只允许只读操作和项目内的确定性命令。git pushrm -rf、数据库写入——这些永远需要你手动确认。

不要为了省事给太宽的权限(比如 Bash(*)),一旦 AI 判断失误,你会没有任何防线。


六、多 Agent 并发:真正的 10x 提速

Claude Code 支持在多个终端并行运行独立任务。这是从”辅助工具”到”真正加速”的质变。

适合并发的典型场景:

终端 1:重构 auth 模块
终端 2:同时写 auth 模块的测试
终端 3:更新相关文档

三件事如果串行,需要等待。并行跑,时间是最长那个。

并发的前提:任务之间真的没有依赖。如果任务 A 的输出是任务 B 的输入,必须串行。强行并发会让两个 AI 在同一个文件上互相覆盖,场面一度非常混乱。

推荐的并发工作流

  1. 把大任务拆分成独立模块
  2. 每个终端用 /clear 保持干净上下文
  3. 每个终端都带上必要的上下文(不要假设它们共享信息)
  4. 最后你来做集成和冲突解决

七、给 AI 提任务的方式

最后说说 Prompt 本身。Claude Code 不像聊天——你不需要礼貌寒暄,但你需要精确描述

差的描述:

帮我优化一下登录功能

AI 不知道”优化”是指性能、安全、UX 还是代码质量,只能猜。

好的描述:

登录接口(src/api/auth/login.ts)目前每次请求都查两次数据库:
一次查用户是否存在,一次查密码 hash。
请把两次查询合并成一次,只返回 email + password_hash 字段。
不要改接口签名,不要动测试文件。

差的描述让 AI 猜,好的描述给 AI 明确的任务边界:改什么、在哪里改、不要碰什么

另一个技巧:让 AI 在动手前解释它的理解

在修改之前,先用一段话描述你准备怎么做,
以及你认为可能有风险的地方。

这一步很便宜,但能早发现方向偏差——比等它改完十个文件再发现问题要强得多。


整体工作流:把以上串起来

一个完整的任务流大概长这样:

1. 打开新终端,CLAUDE.md 自动加载
2. 进 Plan Mode,描述任务,确认方案
3. 退出 Plan Mode,开始执行
4. Hooks 自动处理 lint/格式化
5. AI 完成后,你 review diff
6. 跑测试验证
7. /clear,开始下一个任务

这套流程的本质是:把 AI 的”自由发挥空间”压缩到合理范围内。不是不信任 AI,而是用结构化的工作流让它稳定发挥。


一句话总结

Claude Code 不是魔法棒,是一个需要被合理管理的高级工程师。给它清晰的边界、足够的上下文、合理的工作流,它的回报会远超你的预期。


Share this post on:

Next Post
你可能只用了 Claude Code 20% 的功能