结论先行
大多数人用 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 场景:
PostToolUse(Write/Edit)→ 自动 lint + 格式化PostToolUse(Bash)→ 记录 AI 执行的命令(审计用)Stop(对话结束时)→ 自动跑测试,把结果写进文件供下次对话参考
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 push、rm -rf、数据库写入——这些永远需要你手动确认。
不要为了省事给太宽的权限(比如 Bash(*)),一旦 AI 判断失误,你会没有任何防线。
六、多 Agent 并发:真正的 10x 提速
Claude Code 支持在多个终端并行运行独立任务。这是从”辅助工具”到”真正加速”的质变。
适合并发的典型场景:
终端 1:重构 auth 模块
终端 2:同时写 auth 模块的测试
终端 3:更新相关文档
三件事如果串行,需要等待。并行跑,时间是最长那个。
并发的前提:任务之间真的没有依赖。如果任务 A 的输出是任务 B 的输入,必须串行。强行并发会让两个 AI 在同一个文件上互相覆盖,场面一度非常混乱。
推荐的并发工作流:
- 把大任务拆分成独立模块
- 每个终端用
/clear保持干净上下文 - 每个终端都带上必要的上下文(不要假设它们共享信息)
- 最后你来做集成和冲突解决
七、给 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 不是魔法棒,是一个需要被合理管理的高级工程师。给它清晰的边界、足够的上下文、合理的工作流,它的回报会远超你的预期。