接手一个陌生项目、追踪一个诡异 bug、把老掉牙的代码翻新一遍------这些几乎是每位开发者都会遇到的场景。Claude Code 像一个随时待命的结对编程伙伴,可以在这些日常任务里搭把手。这篇文章会从旁观者的角度,把开发者们常用的一套流程整理出来,看看它到底能帮上哪些忙。

探索陌生代码库
刚进入一个新项目,最怕的不是代码难,而是不知道从哪儿开始。Claude Code 可以从宏观到微观,帮人一点点摸清脉络。
快速了解整体结构
- 进入项目根目录
cd /path/to/project - 启动 Claude Code
claude - 直接问一个概况
给我一个代码库的概览 - 再深入具体模块
解释一下这里用到的架构模式
关键的数据模型有哪些?
认证是怎么实现的?
小技巧
- 先从宽泛的问题问起,再慢慢缩小到具体领域
- 可以问一下项目里用了哪些编码规范和模式
- 如果项目里有一些特定术语,可以让它做个术语表
定位相关代码
如果想找某个功能对应的代码:
- 让 Claude 帮忙找文件
找出处理用户认证的文件 - 了解这些组件如何协作
这些认证文件是怎么一起工作的? - 梳理执行流程
从前端到数据库,把登录过程串一遍
小技巧
- 描述要具体,尽量用项目里已有的术语
- 如果安装了对应语言的代码智能插件,Claude 能获得更精确的"转到定义"和"查找引用"能力
高效修 bug
遇到报错时,开发者通常会这样用 Claude Code:
- 把错误信息贴出来
运行 npm test 的时候报了这个错 - 让它提几个修复思路
针对 user.ts 里的 @ts-ignore 给几个修复建议 - 应用其中一种方案
按你说的,在 user.ts 里加上空值检查
小技巧
- 告诉 Claude 怎么重现问题,最好附上堆栈
- 说明复现的步骤
- 如果错误是偶发性的,一定要告诉它
重构代码
想把旧代码改成更现代的写法,可以一步步来:
- 先找到需要重构的部分
找出代码库里还在用废弃 API 的地方 - 请它给重构建议
怎么把 utils.js 改成用现代 JavaScript 特性? - 按建议安全地改动
把 utils.js 改成 ES2024 的写法,但行为要保持不变 - 验证改动是否正确
跑一下重构后相关的测试
小技巧
- 让 Claude 解释一下新写法的好处
- 需要保持向后兼容的话,提前说明
- 每次重构的改动尽量小,可以随时测试
使用专用子代理(subagent)
Claude Code 内置了一些专门干杂活的小助手,也可以自己定制。
- 查看有哪些子代理可用
/agents
这个命令会列出所有可用子代理,还能新建。 - 子代理通常会自动被调用
比如:
帮我 review 最近改动的代码,看看有没有安全问题
跑一遍所有测试,把失败的地方修好
------Claude 会自动把任务派给合适的子代理。 - 也可以直接点名让某个子代理干活
用 code-reviewer 子代理检查一下 auth 模块
让 debugger 子代理调查一下为什么用户登不上去 - 创建适合自己项目的子代理
/agents
选"创建新子代理",然后按提示填:- 一个标识符(比如 code-reviewer、api-designer)
- 描述清楚什么时候该用它
- 它能访问哪些工具
- 一个系统提示词,描述它的职责
小技巧
- 项目相关的子代理可以放在
.claude/agents/目录下,方便团队共享 - 描述写清楚,Claude 才会自动调用它
- 给子代理的权限只给必要的,不要多给
计划模式:安全地分析代码
计划模式让 Claude 只读不改,适合在做大改动前先踩点、规划。在这种模式下,Claude 会用 AskUserQuestion 先收集需求,确认目标后再出计划。
什么时候用计划模式
- 改动涉及很多文件
- 想在动手之前先仔细研究代码
- 想和 Claude 一起迭代方向
怎么用
- 在会话中切换
普通模式下按Shift+Tab先进入自动接受模式(终端底部显示⏵⏵ accept edits on),再按一次Shift+Tab就进入计划模式(显示⏸ plan mode on)。 - 新会话直接进入计划模式
claude --permission-mode plan - 在"无头模式"下使用
claude --permission-mode plan -p "分析认证系统,给出改进建议"
示例:规划一次复杂重构
plain
claude --permission-mode plan
我需要把认证系统改成 OAuth2,帮我制定一个详细的迁移计划。
Claude 会先分析现有实现,给出全面计划。可以接着问:
向后兼容性怎么考虑?
数据库迁移怎么搞?
按 Ctrl+G 可以把计划在默认编辑器里打开,手动修改后再让 Claude 执行。
当接受一个计划时,Claude 会自动用计划内容命名会话,这个名字会显示在提示栏和会话选择器里。如果之前已经用 --name 或 /rename 设过名字,接受计划不会覆盖它。
设置为默认模式
可以在 .claude/settings.json 里配:
json
{
"permissions": {
"defaultMode": "plan"
}
}
更多配置见设置文档。
与测试打交道
给代码加测试,Claude 可以这样帮忙:
- 找出没测到的代码
找出 NotificationsService.swift 里没有被测试覆盖的函数 - 生成测试骨架
给通知服务加测试 - 补充有意义的测试用例
给通知服务加一些边界情况的测试 - 跑起来验证
运行新加的测试,修好失败的地方
Claude 会参考项目里已有的测试风格,包括测试框架、断言方式等。如果想覆盖得更全,可以让它主动找找可能漏掉的边缘场景------比如错误条件、边界值、异常输入等。
创建 Pull Request
有两种方式:直接让 Claude 做,或者按步骤来。
直接方式
帮我给这次改动建个 PR
分步方式
- 总结改动
总结一下我对认证模块做的改动 - 生成 PR
创建 PR - 改进描述
在 PR 描述里多补充一点安全改进的背景
如果通过 gh pr create 创建 PR,Claude 会自动把这个 PR 链接到当前会话。之后可以用 claude --from-pr <编号> 直接恢复针对这个 PR 的对话。
提醒一下:PR 生成之后最好自己再看一遍,也可以让 Claude 高亮一下可能的风险点。
处理文档
需要补充或更新文档时:
- 找出缺文档的地方
在 auth 模块里,哪些函数没有 JSDoc 注释? - 生成文档
给 auth.js 里缺注释的函数加上 JSDoc - 检查并完善
把生成的文档改得更好一点,加上上下文和示例 - 验证是否符合规范
检查一下这些文档是否符合我们项目的标准
小技巧
- 明确说明想要哪种文档风格(JSDoc、docstring 等)
- 要求加上示例
- 对公开 API、接口和复杂逻辑尤其要文档完整
处理图片
有些场景里,一张图片比文字描述更管用。
- 把图片加入对话
可以:- 直接拖拽图片到 Claude Code 窗口
- 复制图片,在终端里按
ctrl+v粘贴(注意不是cmd+v) - 告诉它图片路径:
分析这张图片:/path/to/your/image.png
- 请 Claude 分析图片
这张图片里是什么?
描述一下这个截图里的 UI 元素
这个图里有没有什么不合适的地方? - 用图片提供上下文
这是错误截图,问题出在哪?
这是我们现在的数据库 schema,新功能该怎么改它? - 根据图片内容要代码建议
按这个设计稿写 CSS
用什么 HTML 结构能复现这个组件?
小技巧
- 当文字描述不清或太啰嗦时,用图片更直观
- 可以放错误截图、UI 设计稿、架构图等
- 一次对话里可以传多张图
- Claude 提到图片时(比如
[Image #1]),可以用Cmd+点击(Mac)或Ctrl+点击(Windows/Linux)打开查看
引用文件和目录
用 @ 可以快速把文件或目录内容带进对话,不用等 Claude 自己读。
- 引用单个文件
解释一下 @src/utils/auth.js 的逻辑
这会直接把文件全部内容带进对话。 - 引用一个目录
@src/components 的结构是什么样的?
这会显示目录列表和文件信息。 - 引用 MCP 资源
展示 @github:repos/owner/repo/issues 的数据
格式是@服务器名:资源,需要先连接 MCP 服务器。详见 MCP 资源文档。
小技巧
- 路径可以用相对路径或绝对路径
@引用文件时,会把文件所在目录和上级目录的CLAUDE.md也加入上下文- 引用目录只展示文件列表,不展示文件内容
- 一条消息里可以引用多个文件,比如
@file1.js 和 @file2.js
扩展思维模式
扩展思维(Extended Thinking)默认是开启的,让 Claude 在回答前有更多空间做内部推理。开启详细模式(按 Ctrl+O)就能看到这些思考过程,以灰色斜体显示。
Opus 4.6 和 Sonnet 4.6 还支持自适应推理(adaptive reasoning),会根据选择的"努力程度"动态分配思考的 token 数,而不是固定预算。
扩展思维尤其适合:复杂架构决策、难缠的 bug、多步实现规划、评估不同方案的取舍。
注意:像"think"、"think hard"、"think more"这样的词只是普通指令,并不会分配思考 token。
配置思维模式
| 方式 | 说明 |
|---|---|
| 调整努力程度 | 运行 /effort,或在 /model 里调整,或设置环境变量 CLAUDE_CODE_EFFORT_LEVEL。控制 Opus 4.6 和 Sonnet 4.6 的思考深度。 |
ultrathink 关键词 |
在任意 prompt 里包含"ultrathink",单次将努力程度设为高(仅 Opus 4.6 / Sonnet 4.6)。适合临时需要深度推理的任务。 |
| 快捷键切换 | 按 Option+T(Mac)或 Alt+T(Windows/Linux),在当前会话里开关思维模式(对所有模型有效)。可能需要终端允许 Option 快捷键。 |
| 全局默认 | 用 /config 切换思维模式,会影响所有项目。保存在 ~/.claude/settings.json 的 alwaysThinkingEnabled 字段。 |
| 限制 token 预算 | 设置环境变量 MAX_THINKING_TOKENS,限制思考 token 数。对于 Opus 4.6 / Sonnet 4.6,只有设为 0 时才生效(除非禁用自适应推理)。例如 export MAX_THINKING_TOKENS=10000。 |
想看 Claude 的思考过程,按 Ctrl+O 打开详细模式,就能看到内部推理显示为灰色斜体。
扩展思维如何工作
- 更多思考空间,可以探索更多解法、分析边缘情况、自我纠错
- Opus 4.6 / Sonnet 4.6 采用自适应推理,根据努力程度动态分配 token
- 旧模型使用固定的 token 预算,可以通过环境变量限制或
/config/ 快捷键完全关闭
关于收费:所有用掉的思考 token 都会计费,即使 Claude 4 的模型在输出时只显示总结后的思考过程。
恢复之前的对话
Claude Code 会自动保存每次会话。要恢复之前的对话,可以:
- 恢复当前目录最近的一次对话
claude --continue - 打开会话选择器,或按名称恢复
claude --resume
claude --resume auth-refactor - 恢复关联到某个 PR 的会话
claude --from-pr 123
在会话内部,可以用 /resume 切换到其他对话。
会话是按项目目录存储的。/resume 选择器会显示同一个 git 仓库下的所有会话(包括工作树)。
给会话起名字
给会话起个有意义的名字,以后好找:
- 启动时命名
claude -n auth-refactor - 在会话中改名
/rename auth-refactor
改名后名字会显示在提示栏上。 - 在会话选择器里重命名
运行/resume,选中某个会话,按R就能重命名。
之后可以通过名字恢复:
claude --resume auth-refactor
或在会话里用 /resume auth-refactor
会话选择器
/resume(或 claude --resume 不带参数)会打开交互式选择器,功能包括:
| 快捷键 | 作用 |
|---|---|
| ↑ / ↓ | 在会话间移动 |
| → / ← | 展开或折叠分组 |
| Enter | 选择并恢复会话 |
| P | 预览会话内容 |
| R | 重命名选中的会话 |
| / | 搜索过滤 |
| A | 切换"当前目录"和"所有项目" |
| B | 只显示当前分支的会话 |
| Esc | 退出选择器或搜索 |
选择器会显示会话名称或首条 prompt、上次活动时间、消息数量、git 分支等信息。分支出来的会话(通过 /branch、/rewind 或 --fork-session 创建)会归组在根会话下。
小技巧
- 早点给会话起名字:开始一个新任务就用
/rename取名,比之后翻"解释这个函数"要好找得多 - 常用
--continue快速回到当前目录最近的一次会话 - 知道名字用
--resume 名字,不确定时用--resume浏览 - 脚本里可以用
claude --continue --print "prompt"非交互式恢复 - 在选择器里按
P可以先预览会话内容再决定恢复
恢复的会话会沿用原来的模型和配置。
用 Git 工作树运行并行会话
当同时处理多个任务时,每个 Claude 会话需要一份独立的代码副本,避免改动互相干扰。Git 工作树可以做到这一点------每个工作目录都有自己的文件和分支,但共享同一个仓库历史和远端。
使用 --worktree 创建隔离环境
claude --worktree feature-auth
这会创建名为 feature-auth 的工作树目录和同名分支。
如果不指定名字,Claude 会随机生成一个,比如 claude --worktree 会生成类似 bright-running-fox 这样的名字。
工作树创建在 <仓库>/.claude/worktrees/<名字>,分支从远端默认分支(即 origin/HEAD 指向的分支)切出,分支名是 worktree-<名字>。
如果远端默认分支后来改了,但本地 origin/HEAD 没更新,工作树仍会从旧的默认分支切出。可以用以下命令同步:
git remote set-head origin -a
如果想完全控制工作树的创建方式(比如基于其他分支),可以配置 WorktreeCreate hook,它会完全替换 Claude 默认的 git worktree 逻辑。
子代理工作树
子代理也可以使用工作树隔离,实现并行工作。只需对 Claude 说"给你的 agent 用工作树",或者在自定义子代理的前置说明里加上 isolation: worktree,每个子代理就会得到自己的工作树,任务结束后自动清理。
工作树清理
退出工作树会话时,Claude 会根据是否有改动来处理:
- 没有改动:自动删除工作树目录和分支
- 有改动或提交:Claude 会询问是保留还是删除。保留则目录和分支都留着,以后还能回来;删除则丢弃所有未提交的改动和提交。
手动清理可以用常规的 git worktree 命令。
建议把 .claude/worktrees/ 加到 .gitignore,避免工作树内容在主仓库里显示为未跟踪文件。
把 gitignored 文件复制到工作树
Git 工作树是全新检出,不会包含主仓库里未跟踪的文件(如 .env、.env.local)。如果需要自动复制这些文件,可以在项目根目录放一个 .worktreeinclude 文件,用 .gitignore 的语法列出要复制的文件。只有匹配且已被 gitignore 的文件才会被复制,不会复制跟踪的文件。
plain
.env
.env.local
config/secrets.json
这个机制对 --worktree、子代理工作树、桌面版应用中的并行会话都生效。
手动管理工作树
如果需要更灵活地控制工作树位置和分支,可以直接用 Git 创建:
plain
# 新建一个工作树和新分支
git worktree add ../project-feature-a -b feature-a
# 基于已有分支创建工作树
git worktree add ../project-bugfix bugfix-123
# 进入工作树启动 Claude
cd ../project-feature-a && claude
# 清理
git worktree list
git worktree remove ../project-feature-a
每个新工作树需要按项目要求初始化开发环境(安装依赖、设置虚拟环境等)。
如果使用 SVN、Perforce 等非 Git 版本控制系统,可以通过配置 WorktreeCreate 和 WorktreeRemove hook 来自定义工作树逻辑,此时 .worktreeinclude 不会被处理,需要在 hook 脚本里自行复制配置。
当 Claude 需要人注意时
如果让 Claude 跑一个长任务,自己切出去做别的事情,可以配置桌面通知,让它在完成或需要输入时提醒。
- 在设置里添加通知 hook
打开~/.claude/settings.json,添加 Notification hook,调用系统原生通知命令。- macOS
json
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
}
]
}
]
}
}
- **Linux** 和 **Windows** 也有对应的命令示例,可以在文档中找到。
- 可选:缩小匹配范围
matcher字段可以指定只针对某些通知类型触发:
| matcher | 触发时机 |
|---|---|
permission_prompt |
Claude 需要用户批准某个工具操作 |
idle_prompt |
Claude 完成工作,等待下一条 prompt |
auth_success |
认证完成 |
elicitation_dialog |
Claude 向用户提问 |
- 验证
输入/hooks选择 Notification,确认 hook 已显示。选中它会显示要运行的命令。可以故意让 Claude 执行一个需要授权的命令,然后切出终端,看是否能收到通知。
把 Claude 当 Unix 工具用
Claude Code 也可以被当作命令行工具集成进脚本。
加入验证流程
比如在 package.json 里添加一个脚本,让 Claude 做 linter:
json
{
"scripts": {
"lint:claude": "claude -p '你是一个 linter,请检查当前相对于 main 分支的改动,报告所有拼写问题。每行输出文件名和行号,第二行输出问题描述。不要输出其他内容。'"
}
}
这样可以把 Claude 集成到 CI/CD 里做代码审查,还可以根据项目需要定制检查内容。
管道输入输出
可以用管道把数据喂给 Claude,再把结果接出来:
plain
cat build-error.txt | claude -p '简要解释这个构建错误的根本原因' > output.txt
结合其他 Unix 工具,可以组合出很强大的工作流。
控制输出格式
如果需要结构化输出,可以指定格式:
- 纯文本(默认)
cat data.txt | claude -p '总结这些数据' --output-format text > summary.txt - JSON 格式
cat code.py | claude -p '分析这段代码的 bug' --output-format json > analysis.json
输出一个 JSON 数组,包含消息和元数据(耗时、费用等)。 - 流式 JSON
cat log.txt | claude -p '解析这个日志里的错误' --output-format stream-json
实时输出一系列 JSON 对象,每个对象是一段消息。整个输出不是合法的 JSON,因为每行一个独立对象。
小技巧
- 简单集成用
text格式就行 - 需要完整对话日志用
json - 需要实时输出用
stream-json
让 Claude 定时执行任务
想让 Claude 每天早上自动检查 PR、每周审核依赖、或者夜间跑 CI 结果,可以把它放在定时任务里。
根据运行环境不同,有几个选择:
| 选项 | 运行位置 | 适用场景 |
|---|---|---|
| 云端定时任务 | Anthropic 托管的基础设施 | 即使电脑关机也要执行的任务,可在 claude.ai/code 配置 |
| 桌面端定时任务 | 本地电脑(桌面应用) | 需要访问本地文件、工具或未提交改动的任务 |
| GitHub Actions | CI 流水线 | 与仓库事件绑定的任务,比如 PR 打开时,或基于 cron 的计划任务 |
/loop |
当前 CLI 会话 | 在会话打开期间快速轮询,会话退出后任务取消 |
给定时任务写 prompt 时,要明确成功标准和对结果的处理方式。因为是自动执行,它无法再问问题,所以 prompt 要写得足够清楚。例如:"检查所有标记为 needs-review 的未合并 PR,对问题留下行内评论,然后把总结发到 #eng-reviews Slack 频道。"
问 Claude 它自己能做什么
Claude 内置了自己的文档,可以直接问它关于能力的问题。比如:
Claude Code 能创建 PR 吗?权限是怎么处理的?有什么可用的 skills?怎么用 MCP?怎么配置 Amazon Bedrock?Claude Code 有什么限制?
它会基于最新的文档回答这些问题。如果想看具体的可执行示例,可以参考前面的各个工作流部分。
小技巧
- 无论用的是什么版本,Claude 总能访问到最新文档
- 问题越具体,答案越详细
- 它可以解释复杂功能,比如 MCP 集成、企业配置、高级工作流等
以上便是开发者日常使用 Claude Code 时最常见的场景。从第一次走进陌生代码库,到深夜追查 bug,再到给老项目动手术------它像一个耐心、知根知底的伙伴,在需要的时候总能聊上几句,一起把问题理清楚。