跳转到主内容Claude Code 最佳实践:从能用到真的好用
Claude Code 的上限远比大多数人想象的高,但前提是你得知道怎么用。
这篇文章结合官方文档和实战经验,整理了我们认为最重要的使用技巧。有些是踩坑教训,有些是读文档才发现的隐藏功能。如果你已经跟着前面的教程上手了 Claude Code,这篇可以帮你把使用效率再拉高一个档次。
如果你只记住这篇文章的一件事,就记这个:写好你的 CLAUDE.md。
CLAUDE.md — 一切的起点
CLAUDE.md 是 Claude Code 在每次对话开始时自动读取的指令文件。它就像你给一个新同事写的 onboarding doc——你希望他知道什么,你就写什么。
很多人不写 CLAUDE.md,或者随便写两行。结果就是每次对话都要从头解释项目结构、编码规范、技术栈选择。这就像每天早上都要重新给同事介绍一遍公司。
应该写什么
# 项目名称
## 构建和测试命令
- 安装依赖:npm install
- 运行测试:npm test
- 单个测试:npm test -- --grep "test name"
- 格式化:npm run format
## 编码规范
- Python 使用 ruff 格式化,行宽 88
- 测试用 pytest,每个 service 对应一个测试文件
- API 路由文件名用复数:users.py, orders.py
- 提交信息用英文,格式:type(scope): description
## 架构决策
- 选 Tailwind 而不是 CSS Modules,因为团队统一了这个规范
- 用户权限校验在 middleware 里做,不要在每个路由重复写
- Redis 缓存的 key 前缀统一用 app:v1:
## 常见陷阱
- 数据库连接池上限是 20,别在循环里开新连接
- 不要 mock 数据库,上次 mock 测试通过但生产迁移失败了
三大原则
项目的"为什么"比"是什么"更重要。你不需要解释 React 怎么用,但你需要告诉它"我们选 Tailwind 是因为团队统一了这个规范"。
原则二
控制在 200 行以内
官方文档明确提到,CLAUDE.md 太长会导致 Claude 忽略规则。用 Markdown 标题和列表,保持可扫描性。
原则三
不要放频繁变化的内容
详细的 API 文档、逐文件描述不适合放在 CLAUDE.md 里。放链接就好。
四级优先级
Claude Code 支持四级 CLAUDE.md,按优先级从高到低:
当前目录 CLAUDE.md — 最高优先级,子目录可覆盖父目录
项目根目录 CLAUDE.md — 项目级约定,团队共享
~/.claude/CLAUDE.md — 全局个人偏好
组织策略文件 — 最低优先级
💡全局 CLAUDE.md 推荐内容
在你的全局 CLAUDE.md(~/.claude/CLAUDE.md)里写上这四行,能省掉几百次重复纠正的时间:
- 我是一名全栈工程师,不需要过度解释基础概念
- 回复尽量简洁,不要加无关的客套话
- 代码改动后不要总结你做了什么,我会看 diff
- 优先用简单方案,不要过度工程
进阶:用 .claude/rules/ 组织规则
当项目大了之后,一个 CLAUDE.md 塞不下所有规则。你可以把规则拆到 .claude/rules/ 目录下:
.claude/rules/
├── testing.md # 测试规范
├── api-style.md # API 编写风格
└── frontend.md # 前端约定
更强大的是,你可以用 YAML frontmatter 把规则限定到特定文件:
---
paths: ["src/api/**/*.ts", "src/routes/**/*.ts"]
---
API 路由必须包含输入验证和错误处理。
所有新端点需要在 tests/api/ 下添加集成测试。
这样这条规则只在 Claude 访问匹配的文件时才会加载,节省上下文空间。
提示词技巧
差的指令 vs 好的指令
差的指令
"给用户列表加个搜索功能"
Claude 不知道你要前端搜索还是后端搜索,不知道 debounce 时间,不知道样式规范。歧义越多,返工越多。
好的指令
"在 @/UserList.tsx 的表格上方加一个搜索框。搜索走后端 API /api/users?search=xxx,不要前端过滤。用 debounce 300ms,样式和现有的 Filter 组件保持一致。"
四大技巧
技巧 1
用 @ 引用具体文件
Claude Code 支持用 @文件路径 直接把文件内容拉进上下文。比起说"那个认证相关的代码",直接写 @/login.ts 精确得多。你甚至可以指定行号范围:@/login.ts#5-30。
技巧 2
贴截图和图片
用 Ctrl+V 直接粘贴图片。调试 UI 问题时,贴一张"现在长这样"和"我想要这样"的截图,比文字描述有效十倍。
技巧 3
给验证标准
给 Claude 一个可以自我验证的标准——测试用例、截图、预期输出——它就能自己检查工作质量,减少来回修改。
技巧 4
明确「不要做」的事
Claude Code 有时候会过度热心——你让它修一个 bug,它顺手把周围的代码也重构了。明确说"只改这个函数,不要动其他代码",能省很多事。
模糊指令也有用武之地
探索阶段
模糊指令
- "这个文件有什么可以改进的地方?"
- "帮我理解一下这个模块的架构"
- "这段代码有什么潜在问题?"
实现阶段
精确指令
- 明确目标、约束、上下文
- 指定文件路径、API 地址
- 给出验证标准和预期结果
判断标准:探索性任务用模糊指令,实现性任务切回精确模式。
Plan Mode — 最被低估的功能
改一个计划只需要一句话,改已经写好的代码要花十倍的时间。
三种进入方式
# 方式一:启动时直接进入
claude --permission-mode plan
# 方式二:对话中切换(按两次 Shift+Tab)
Shift+Tab Shift+Tab
# 方式三:在提示词里说
"先不要改代码,帮我做个计划"
在 Plan Mode 下,Claude Code 只能读取文件、搜索代码,不能做任何修改。它会探索代码库,分析你的需求,然后给出一个详细的实现计划。
关键操作:Ctrl+G
按 Ctrl+G 可以在你的编辑器里打开并编辑计划:
生成初始计划
让 Claude 读相关代码、分析需求,输出一个实现方案。
编辑计划
Ctrl+G 打开计划,删掉你不同意的部分,补充你自己的想法。
执行计划
切回正常模式(Shift+Tab),让 Claude 按修改后的计划执行。
推荐的复杂任务工作流
1. 进入 Plan Mode
2. 让 Claude 阅读相关代码:"读一下 src/auth/ 下的代码,理解 session 处理逻辑"
3. 请求计划:"制定一个 OAuth2 迁移方案"
4. Ctrl+G 审查和编辑计划
5. 切回正常模式
6. "按照计划实现,写完跑测试"
7. 让 Claude 对照需求自查
什么时候不需要 Plan Mode
改一个变量名、修一个明显的 typo、加一行日志——这些直接做就好。判断标准:如果实现方式只有一种,直接做。如果有多种选择,先规划。
子 Agent 机制
子 Agent 可以启动独立的 AI 进程来并行处理任务,每个子 Agent 有自己的上下文窗口,不会污染你的主对话。
三种内置类型
| 类型 | 能力 | 用途 |
|---|
| Explore | 只读,快速搜索代码库 | 探索、找文件、找定义 |
| Plan | 只读,研究分析 | Plan Mode 下的代码分析 |
| General | 完整能力 | 复杂的多步骤任务 |
核心价值:隔离上下文
当你让 Claude 跑测试、分析日志、搜索大量文件时,这些操作会产生海量输出,塞满你的上下文窗口。用子 Agent 来做,输出留在子 Agent 的上下文里,只有摘要返回给你。
"用子 Agent 跑一下全量测试,把失败的用例列出来"
"用子 Agent 搜索所有使用了 deprecated API 的文件"
后台运行:Ctrl+B
按 Ctrl+B 可以把子 Agent 放到后台运行。你可以继续和 Claude 聊其他事,等后台任务完成后会自动通知你。适合跑测试套件、大范围代码搜索、不紧急的代码审查。
自定义 Agent
你可以在 .claude/agents/ 目录下创建自定义 Agent:
---
name: code-reviewer
description: 代码审查专家。代码改动后自动触发。
tools: Read, Grep, Glob, Bash
model: sonnet
---
你是一位资深代码审查者。检查以下维度:
- 代码清晰度和可读性
- 错误处理是否完整
- 有没有暴露敏感信息
- 输入验证
- 性能隐患
然后在对话中用 @"code-reviewer (agent)" 调用它。
上下文管理
Claude Code 的上下文窗口虽然大(最多 1M token),但它不是无限的,而且上下文管理直接决定了输出质量。
上下文里都装了什么
- 你的对话历史
- Claude 读取的所有文件内容
- 命令执行的输出
- CLAUDE.md 文件(每次都加载)
- Memory 文件(前 200 行)
- 加载的 Skill 和 MCP 工具定义
五大策略
策略 1
/clear:一件事做完就清
不要在同一个对话里又修 bug 又加功能又重构。/clear 会清空上下文但保留 CLAUDE.md,相当于一次免费的重启。
策略 2
/compact:手动压缩上下文
当对话变长时,输入 /compact 让 Claude 自动总结和压缩。更好的用法是给压缩加一个焦点:/compact 专注于 API 改动和测试结果,这样 Claude 会优先保留你关心的内容。
策略 3
/context:看看上下文被谁吃了
输入 /context 可以看到当前上下文的使用情况——哪些文件占了多少 token,MCP 工具定义占了多少。经常发现一些没用的 MCP server 占了大量空间。
策略 4
用子 Agent 隔离噪声
跑测试、分析日志这些操作会产生大量输出。让子 Agent 去做,主对话的上下文保持干净。
策略 5
在 CLAUDE.md 里写压缩保留指令
你可以告诉 Claude 压缩时必须保留什么:
# 压缩指令
压缩上下文时,始终保留:
- 已修改文件的完整列表
- 测试命令和结果
- 关键的架构决策
Memory vs CLAUDE.md
Memory 适合存
- 你的偏好("这个人喜欢简洁回复")
- 项目约定("部署有个特殊步骤")
- 历史决策("上次选了方案 A 是因为 X")
Memory 不适合存
- 代码细节 — 从代码里获取更准确
- Git 历史 — 用
git log 查
- 临时状态 — 会话结束即无效
用 /memory 命令可以查看和管理所有已加载的 Memory。
权限与安全
Claude Code 提供了五种权限模式,用 Shift+Tab 在对话中循环切换。
精细权限控制
在 .claude/settings.json 里,你可以精细控制每种工具的权限:
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git commit *)",
"Edit(src/**/*.ts)",
"Read(*.md)"
],
"deny": [
"Bash(rm -rf *)",
"Edit(.env)"
]
}
}
⚠️规则优先级:deny > ask > allow
deny 最优先。你可以大胆地 allow 常用命令,同时用 deny 保护敏感文件。比如 .env 文件,无论如何都不应该被编辑。
Settings 多级继承
组织策略 — 最高优先级
CLI 参数
.claude/settings.local.json — 本地,不提交到 Git
.claude/settings.json — 项目级,团队共享
~/.claude/settings.json — 全局,个人
默认值 — 最低优先级
💡推荐做法
- 团队共享的规则 →
.claude/settings.json
- 个人偏好 →
~/.claude/settings.json
- 敏感配置 →
.claude/settings.local.json(记得加到 .gitignore)
Hooks — 不可忽视的铁律
CLAUDE.md 里的指令是"建议"——Claude 大部分时候会遵守,但偶尔会忘。Hooks 是"铁律"——无论如何都会执行。
Hooks 是在特定生命周期事件上自动触发的 shell 命令,配置在 settings.json 里。
实用示例
示例 1
自动格式化 — 每次编辑后运行 Prettier
{
"hooks": {
"PostToolUse": [{
"matcher": "Edit|Write",
"hooks": [{
"type": "command",
"command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
}]
}]
}
}
示例 2
保护关键文件 — 阻止修改生产配置
{
"hooks": {
"PreToolUse": [{
"matcher": "Edit|Write",
"hooks": [{
"type": "command",
"command": ".claude/hooks/protect-files.sh"
}]
}]
}
}
Hook 命令返回 exit code 0 表示允许,exit code 2 表示阻止。你可以写任意复杂的判断逻辑。
示例 3
压缩后重新注入关键信息
{
"hooks": {
"SessionStart": [{
"matcher": "compact",
"hooks": [{
"type": "command",
"command": "echo '用 Bun 不用 npm。提交前跑 bun test。'"
}]
}]
}
}
解决一个常见痛点:对话太长被压缩后,之前提过的重要指令可能丢失。用 Hook 可以在每次压缩后自动重新注入。
Hook 的四种类型
| 类型 | 说明 |
|---|
| command | 执行 shell 命令,从 stdin 读取 JSON |
| http | 向 URL 发送 POST 请求 |
| prompt | 单次 LLM 调用,做 yes/no 判断 |
| agent | 启动一个子 Agent 进行验证 |
Git 安全
Claude Code 能执行 Git 命令,这是一把双刃剑。官方提供了一个很好的安全网:Worktree。
Git Worktree:隔离的工作空间
# 在隔离的 worktree 中启动 Claude
claude --worktree feature-auth
claude --worktree bugfix-123
# 自动生成名字
claude --worktree
Worktree 会在 .claude/worktrees/ 下创建一个独立的 Git 分支副本。Claude 在里面怎么折腾都不影响你的主分支。退出时:
- 如果没有改动 → 自动清理
- 如果有改动 → 提示你保留或删除
不确定某个重构方案能不能行?开个 worktree 试试,不行就扔掉,零风险。
四条铁律
铁律 1
永远不要让 Claude 自动 push
它可以 commit,但 push 这个动作应该由你来确认。一旦 push 到远端,回退成本就大了。
铁律 2
频繁 commit
做完一个小功能就 commit。用 /rewind 可以回退到任意一个 checkpoint,但前提是你有 commit 记录。
铁律 3
警惕破坏性操作
如果 Claude 要执行 git reset --hard、git push --force、rm -rf,一定要在脑子里过一遍后果再批准。这些操作没有 undo。你也可以在权限规则里直接 deny 掉。
铁律 4
从 PR 恢复上下文
claude --from-pr 123 会自动加载 PR 的改动和讨论作为上下文,非常适合 code review 或者继续别人的工作。
快捷键与常用命令
快捷键
| 快捷键 | 功能 |
|---|
Shift+Tab | 切换权限模式(按两次进入 Plan Mode) |
Ctrl+G | 在编辑器中打开并编辑计划 |
Ctrl+B | 把子 Agent 放到后台运行 |
Ctrl+V | 粘贴图片到对话中 |
Option+T / Alt+T | 切换 Extended Thinking 模式 |
Esc | 中断当前操作 |
斜杠命令
| 命令 | 功能 | 说明 |
|---|
/compact [焦点] | 压缩上下文 | 可指定保留重点 |
/clear | 清空对话 | 保留 CLAUDE.md,相当于免费重启 |
/context | 查看上下文使用情况 | 哪些文件/MCP 占了多少 token |
/memory | 查看和管理 Memory | |
/rewind | 回退到 checkpoint | 需要有 commit 记录 |
/resume [名称] | 恢复之前的对话 | |
/model | 切换模型 | |
/effort [级别] | 设置推理深度 | low / medium / high / max |
/init | 自动生成 CLAUDE.md | 分析代码库生成初稿 |
/mcp | 管理 MCP 服务器 | |
/permissions | 查看权限规则 | |
/cost | 查看 token 消耗 | |
CLI 启动参数
| 参数 | 功能 |
|---|
claude --permission-mode plan | 以 Plan Mode 启动 |
claude --worktree [name] | 在隔离的 Git Worktree 中启动 |
claude --from-pr 123 | 从 PR 恢复上下文 |
💡新项目必做
/init 对新项目特别有用——它会自动分析你的代码库,帮你生成一个 CLAUDE.md 的初稿。虽然通常需要手动调整,但比从零开始快得多。对于复杂问题,试试开启 Extended Thinking 模式(Option+T),让 Claude 在回答前花更多时间推理。