日常开发工作流:用 Claude Code 重塑你的编码习惯
系列文章
本篇是 Claude Code 系列的第 2 篇。系列将从安装入门到高级实战,由浅入深地拆解这个终端原生 Coding Agent 的每一个能力。
入门篇
- Claude Code 是什么?从安装到第一次对话
- 日常开发工作流:用 Claude Code 重塑你的编码习惯(本文)
核心篇
3. 内置命令全解:从 /compact 到 /doctor 的实战指南
4. CLAUDE.md:项目上下文工程的艺术
进阶篇
5. 多文件重构与复杂任务实战
6. Hooks、MCP 与能力扩展
高级篇
7. Headless 模式与 CI/CD 集成
8. 多 Agent 协作:从 Claude Code 到 Codex
一、开篇:从”用工具”到”和工具一起干活”
上一篇我们完成了 Claude Code 的安装和第一次对话。你已经知道它能读文件、写代码、跑测试。但这些只是”能力”,不是”工作流”。
能力 ≠ 生产力。
就像给你一把电钻,你知道它能打孔。但只有当你掌握了”先量尺寸、再定位、再打孔、最后检查”的工作流程,电钻才真正变成生产力工具。
Claude Code 也一样。很多开发者装完之后的使用模式是:遇到问题 → 打开 Claude Code → 问一个问题 → 关掉。这就像用 Google 搜索一样——你只用到了它 10% 的能力。
这篇文章要做的事情是:把 Claude Code 从一个”偶尔用用的问答工具”变成你每天编码节奏的一部分。
我们用 5 个真实场景来拆解:
| 场景 | 传统方式 | 用 Claude Code |
|---|---|---|
| 修 Bug | 读报错 → 猜原因 → 改代码 → 跑测试 → 循环 | 描述问题 → Agent 自动诊断+修复+验证 |
| 写新功能 | 搜参考代码 → 手动创建文件 → 逐个实现 | 描述需求 → Agent 生成完整代码+测试 |
| 代码审查 | 逐行看 diff → 写评论 | git diff | claude -p "review" |
| 重构 | 手动改多个文件 → 跑测试 → 修兼容性 | Agent 跨文件重构+自动保持一致性 |
| 上下文切换 | 重新读代码 → 重新理解背景 | /compact 或 --continue 恢复上下文 |
二、场景一:Bug 修复工作流——从”猜谜”到”诊断”
传统方式的痛点
修 Bug 的典型流程:
- 看到报错日志
- 打开出错的文件
- 猜测原因
- 修改代码
- 跑测试
- 测试失败,回到步骤 2
这个循环可能重复 5-10 次,每次都要重新理解上下文。最大的时间浪费不是写代码,而是在文件之间跳转、重新建立心理模型。
Claude Code 的方式
1 | cd ~/projects/my-spring-boot-app |
启动后,直接描述问题:
1 | > 用户登录接口报 500 错误,日志显示 NullPointerException at UserService.java:42。 |
Claude Code 会执行以下 Agent Loop:
1 | 1. 读取 UserService.java 第 42 行附近代码 |
关键区别:你不需要告诉它”去读哪个文件”或”检查 null”。它会自己追踪调用链、分析上下文、找到根因。这就是 Agent Loop 的价值——它不是一个”你问一步它答一步”的问答机,而是一个自主迭代直到问题解决的代理。
提升效率的技巧
技巧 1:直接粘贴错误日志
1 | > 跑 mvn test 失败了,错误日志如下: |
Claude Code 会从 stack trace 中提取关键信息(类名、行号、异常类型),自动定位到相关代码。
技巧 2:用 @ 引用特定文件
1 | > @src/main/java/com/example/service/OrderService.java |
@ 前缀会触发文件自动补全,确保 Claude Code 精确定位到目标文件。
技巧 3:让它先分析再修复
1 | > 先分析一下这个 NullPointerException 的所有可能原因, |
这个”先诊断后治疗”的模式,特别适合复杂的、原因不明显的 Bug。Claude Code 会列出所有可能的原因,你确认方向后再动手。
三、场景二:新功能开发——从”手工作坊”到”流水线”
传统方式的痛点
写一个新功能(比如”给订单模块加一个分页查询接口”),你需要:
- 创建 Controller 方法
- 创建 Service 方法
- 创建 Mapper 方法 + XML
- 写 DTO/VO
- 写单元测试
- 写集成测试
- 更新 API 文档
7 个文件,每个文件都要遵循项目的现有模式。真正的痛苦不是写代码,而是保持一致性——你的新代码必须和现有代码风格一致、命名规范一致、异常处理一致。
Claude Code 的方式
1 | > 给 OrderController 加一个分页查询接口。 |
Claude Code 会:
- 先读
UserController.java,理解findByPage的代码模式 - 再读
OrderController.java、OrderService.java、OrderMapper.java,理解现有结构 - 然后读 项目的
Result、PageInfo等公共类,确保返回类型正确 - 生成代码:Controller → Service → ServiceImpl → Mapper → XML → VO → 测试
- 展示 diff,等待你确认
- 跑测试,如果有失败自动修复
这就是”上下文工程”的威力。Claude Code 不是在真空中写代码,而是在理解了你的整个项目之后,生成符合项目风格的代码。
为什么它能做到一致性?
因为它在生成代码之前,会读取:
- 相邻的同类文件(从 Controller 学 Controller 的写法)
- 项目的公共组件(Result、PageInfo、异常处理)
- 配置文件(MyBatis-Plus 的配置、分页插件的配置)
- 测试文件(理解测试的写法和断言风格)
这就像一个新入职的高级工程师——他不会上来就写代码,而是先看项目里现有的代码是怎么写的,然后按照同样的模式来写新功能。
渐进式开发:拆分大任务
如果功能比较复杂(比如”实现完整的订单支付流程”),不要一次性扔给 Claude Code。拆分成小任务,每完成一个就验证一次:
1 | # 任务 1:创建支付订单接口 |
为什么要拆分?
- 上下文窗口有限——Claude Code 的上下文窗口虽然有 200K token,但复杂任务的中间状态会快速消耗它。拆分任务可以让每个子任务都在”干净”的上下文中执行。
- 验证频率更高——每完成一步就跑测试,发现问题立刻修,而不是写完 10 个文件才发现根本方向错了。
- 你可以插入决策点——在任务之间,你可以审查代码、调整方向、补充需求。
四、场景三:代码审查——从”人肉 diff”到”AI 助审”
传统方式的痛点
代码审查是必要的,但也是痛苦的。你需要:
- 逐行看 diff
- 检查逻辑正确性
- 检查安全性
- 检查性能问题
- 写评审意见
一个中等规模的 PR(200-500 行改动),认真审查至少需要 30 分钟。
Claude Code 的方式
快速审查(Print 模式):
1 | # 审查当前分支相对于 main 的所有改动 |
深度审查(交互模式):
1 | claude |
审查自己的代码
在提交之前,先让 Claude Code 审查一遍:
1 | > 我刚改完 UserService 的密码重置逻辑。帮我 review 一下, |
这是一个非常好的习惯。Claude Code 会以”第二双眼睛”的视角审视你的代码,经常能发现你自己忽略的问题:
- 密码重置 token 是否有过期机制?
- 是否有重放攻击的风险?
- 错误信息是否泄露了敏感信息(比如”用户不存在”vs”密码错误”)?
五、场景四:重构——从”牵一发动全身”到”安全手术”
传统方式的痛点
重构是开发中最危险的操作之一。把 UserService 的认证逻辑抽到独立的 AuthService,你需要:
- 创建
AuthService类 - 从
UserService中提取认证相关的方法 - 修改
UserService中对这些方法的调用 - 修改
UserController中直接调用认证逻辑的地方 - 更新依赖注入
- 更新测试
- 确保没有遗漏的引用
遗漏任何一个调用点,线上就会报错。
Claude Code 的方式
1 | > 把 UserService 中的认证相关逻辑(login、register、resetPassword、 |
Claude Code 的 Agent Loop 在这里的优势是它能追踪整个调用链。它会:
- 读取
UserService,识别哪些方法属于”认证”逻辑 - 用 Grep 工具搜索整个项目中对这些方法的引用
- 创建
AuthService,移动方法 - 逐个修改所有调用方
- 更新测试文件
- 跑
mvn test验证 - 如果有测试失败,分析原因并修复
关键:它不会遗漏调用点。因为它不是靠”记忆”来找引用,而是用 Grep 工具实际搜索整个代码库。
重构的安全网
在开始重构之前,先确保测试是绿色的:
1 | > 先跑一下全部测试,确认当前状态是绿色的。 |
如果项目没有测试怎么办?先让 Claude Code 补测试:
1 | > UserService 目前没有单元测试。先帮我写一套完整的测试, |
然后再重构。没有测试的重构就是在裸奔。
六、场景五:上下文管理——长对话的秘密武器
为什么需要上下文管理?
Claude Code 的对话是有状态的。你在对话中读过的文件、写过的代码、跑过的命令,都会累积在上下文中。这带来两个问题:
- Token 消耗——上下文越大,每次交互消耗的 token 越多,费用越高
- 上下文污染——旧的对话内容可能干扰新的任务
/compact:智能压缩
1 | > /compact |
/compact 会保留关键信息(CLAUDE.md、最近的代码修改、当前任务状态),丢弃中间过程。就像一个聪明的秘书帮你整理会议纪要——保留决策和结论,丢弃讨论过程。
什么时候用 /compact?
- 完成一个子任务,准备开始下一个
- 对话超过 30 分钟
/context显示上下文使用率超过 70%
**带焦点的 /compact**:
1 | > /compact focus on the authentication refactoring we just did |
这会告诉 Claude Code 在压缩时重点保留认证重构相关的信息,丢弃其他不相关的内容。
/clear:彻底清空
1 | > /clear |
/clear 比 /compact 更激进——它完全清空对话历史,只保留 CLAUDE.md。适合:
- 切换到一个完全不同的任务
- 对话已经严重”跑偏”,想重新开始
- 上下文使用率超过 85%,压缩已经不够了
会话恢复:-c 和 -r
继续上一次会话:
1 | claude -c |
这会恢复当前目录下最近一次会话。适合:下班前关掉终端,第二天继续。
恢复特定会话:
1 | claude -r <session-id> |
适合:你同时在多个任务之间切换,每个任务有不同的会话。
查看会话历史:
1 | claude sessions list |
上下文健康的黄金法则
| 上下文使用率 | 状态 | 建议 |
|---|---|---|
| < 50% | 🟢 健康 | 正常工作 |
| 50-70% | 🟡 注意 | 考虑 /compact |
| 70-85% | 🟠 警告 | 立即 /compact,精度开始下降 |
| > 85% | 🔴 危险 | /clear 或开新会话,幻觉风险飙升 |
你可以用 /context 命令查看当前的上下文使用情况,它会显示一个彩色网格图。
七、模型选择策略:不是所有任务都需要最强大脑
为什么要选模型?
Claude Code 支持多个模型,它们的能力和价格差异很大:
| 模型 | 特点 | 适合场景 | 相对成本 |
|---|---|---|---|
| Opus 4.8 | 最强推理,最慢,最贵 | 复杂架构设计、多文件重构、疑难 Bug | $$$ |
| Sonnet 4.6 | 平衡之选 | 日常开发、功能实现、代码审查 | $$ |
| Haiku 3.5 | 最快,最便宜 | 简单问答、格式化、小修改 | $ |
实战策略
日常开发用 Sonnet:
1 | claude --model sonnet |
Sonnet 是大多数场景的最佳选择。它足够聪明来理解你的项目、写出高质量的代码,同时速度和成本都在可接受范围内。
复杂任务切 Opus:
1 | > /model opus |
当你遇到需要深度推理的任务(比如重构一个有 10 年历史的遗留系统),在会话中切换到 Opus。
简单任务用 Haiku:
1 | claude --model haiku -p "把这个 JSON 文件格式化一下" --max-turns 1 |
格式化文件、简单查找、生成 boilerplate 这些任务,用 Haiku 就够了,省钱又快。
自动降级
1 | claude --fallback-model haiku -p "分析这个错误日志" |
当默认模型过载(Anthropic 的 API 偶尔会繁忙)时,自动降级到 Haiku,避免请求失败。
八、权限模式:速度与安全的平衡
三种权限模式
Claude Code 有三种权限模式,决定了它在执行操作前是否征求你的同意:
默认模式(Normal):
- 读取文件:自动执行
- 编辑文件:展示 diff,等你确认
- 执行命令:需要确认
- Git 操作:需要确认
自动接受编辑(Accept Edits):
- 读取文件:自动执行
- 编辑文件:自动执行
- 执行命令:需要确认
- Git 操作:需要确认
完全自动(Auto-Accept):
- 所有操作自动执行,不征求同意
如何切换
在交互模式中,按 Shift+Tab 循环切换三种模式。
或者在启动时指定:
1 | claude --permission-mode acceptEdits # 自动接受编辑 |
实战建议
写新功能时:用 acceptEdits 模式。你已经明确了需求,让 Claude Code 直接写代码,不要每改一个文件都要确认。
修 Bug 时:用默认模式。你需要审查它的诊断思路和修复方案,确保方向正确。
跑测试/构建时:可以设置自动批准安全命令。在 .claude/settings.json 中配置:
1 | { |
这样,mvn test 会自动执行,但 git commit 和 git push 还是需要你确认。
九、自定义命令:把重复劳动变成一键操作
什么是自定义命令?
如果你发现自己反复输入相同的指令(比如”跑测试、构建、部署”),可以把它们定义为自定义命令。
创建自定义命令
在项目根目录创建 .claude/commands/ 目录:
1 | mkdir -p .claude/commands |
测试命令 .claude/commands/test.md:
1 | 运行项目的完整测试流程: |
部署命令 .claude/commands/deploy.md:
1 | 执行部署流程: |
Code Review 命令 .claude/commands/review.md:
1 | 审查当前分支相对于 main 的改动: |
使用自定义命令
1 | > /test |
$ARGUMENTS 会被替换为你输入的内容。比如 /deploy staging 中的 staging。
全局命令 vs 项目命令
- 项目命令(
.claude/commands/):和项目绑定,可以提交到 Git,团队共享 - 全局命令(
~/.claude/commands/):个人所有项目通用
十、一天的 Claude Code 工作流
把上面的场景串起来,一个典型的 Java 开发者的一天可能是这样的:
早上:开始编码
1 | # 进入项目目录,启动 Claude Code |
1 | > 早上好。先帮我看看有没有未提交的改动,然后我们开始今天的任务。 |
上午:开发新功能
1 | > 今天的任务是给订单模块加一个批量导出功能。 |
Claude Code 分析完后,你分步下达指令:
1 | > 第一步:创建 ExportService,定义 exportOrders 方法的接口。 |
审查接口设计,确认没问题后:
1 | > 第二步:实现 exportOrders,使用 Apache POI 生成 Excel 文件。 |
1 | > 第三步:给 ExportService 写单元测试。 |
1 | > 跑一下测试。 |
中午:快速修复
午餐前收到一个线上 Bug 报告:
1 | > 线上报了一个 NPE,在 OrderService.java 的 calculateDiscount 方法。 |
下午:代码审查
同事提交了一个 PR,你用 Print 模式快速审查:
1 | git fetch origin |
审查完毕,继续开发:
1 | > 继续上午的任务。现在给批量导出加上分批处理逻辑, |
下午:重构
1 | > 我发现 ExportService 和 ReportService 有很多重复的 Excel 生成代码。 |
下班前:整理
1 | > /compact |
压缩上下文,为明天的会话做准备。或者直接用 /cost 看看今天的花费:
1 | > /cost |
十一、效率提升的本质:减少上下文切换
回顾这 5 个场景,Claude Code 提升效率的核心机制不是”帮你写代码”(虽然它确实能写),而是减少上下文切换的成本。
传统开发中,你在这些角色之间频繁切换:
- 读者:读代码、读文档、读报错日志
- 思考者:分析问题、设计方案
- 写手:写代码
- 测试者:跑测试、验证结果
- 审查者:review 代码、检查质量
每次切换,你的大脑都需要重新加载上下文。这就是为什么你一天写了 200 行代码却觉得精疲力尽——不是写代码累,是切换累。
Claude Code 的 Agent Loop 把”读 → 思考 → 写 → 测试 → 审查”这个循环自动化了。你只需要在关键决策点介入:
- 确认方向:”对,就是这个思路”
- 调整方案:”不要用 HashMap,用 ConcurrentHashMap”
- 审查结果:”这里有个边界条件没处理”
你从”执行者”变成了”指挥者”。
这不是偷懒,这是更高级的工作方式。就像将军不需要亲自扛枪一样——你的价值在于决策和方向,不在于一行一行地敲代码。
十二、新手常犯的 5 个错误
错误 1:一次给太多任务
1 | # ❌ 错误 |
原因:任务太大,Claude Code 的上下文会被中间过程占满,后面的代码质量会下降。
错误 2:不审查就提交
Claude Code 生成的代码通常是高质量的,但不是 100% 正确的。特别是:
- 并发场景(它可能用错锁的类型)
- 业务逻辑(它不理解你的业务规则)
- 安全敏感代码(认证、授权、加密)
永远要审查,至少要审查关键路径的代码。
错误 3:不用 CLAUDE.md
没有 CLAUDE.md,Claude Code 每次启动都要”重新认识”你的项目。它会:
- 用错分页方案(用了 Spring Data Pageable 而不是 PageHelper)
- 返回格式不对(没用 Result
包装) - 命名风格不对(驼峰 vs 下划线)
花 10 分钟写一个 CLAUDE.md,能节省未来 10 小时的纠正时间。
错误 4:不在项目目录启动
1 | # ❌ 错误:在 home 目录启动 |
Claude Code 会读取当前目录作为工作目录。在错误的目录启动,它会读到错误的文件。
错误 5:忽略 /compact
长对话不压缩,token 消耗会指数级增长。更严重的是,上下文过大会导致输出质量下降——模型的注意力被分散了。
完成一个子任务后,习惯性地 /compact 一下。
十三、和 AI Agent 系列的关联
如果你读过我们的 AI Agent 系列,你会发现 Claude Code 的工作流和 ReAct 模式是同构的:
| AI Agent 概念 | Claude Code 实现 |
|---|---|
| Plan(规划) | 分析需求,制定实现方案 |
| Action(行动) | 读文件、写代码、执行命令 |
| Observation(观察) | 获取命令输出、测试结果 |
| Reflection(反思) | 分析失败原因,调整方案 |
| Memory(记忆) | CLAUDE.md + 上下文窗口 |
Claude Code 本质上就是一个特化的 AI Agent——它的”行动空间”被限定在了软件开发领域(读写文件、执行命令、搜索代码),但底层的 Agent Loop 和通用 AI Agent 是一样的。
理解这一点,你就能用 AI Agent 的思维方式来优化你和 Claude Code 的协作:
- 任务分解:大任务拆成小步骤,每步都有明确的完成标准
- 反馈循环:让 Claude Code 在每一步都验证自己的输出
- 上下文管理:定期压缩/清空,保持 Agent 的”注意力”集中
总结
Claude Code 不是一个”问一下就完事”的工具。它是一个需要你学会”协作”的 Agent。
核心要点:
- Bug 修复:直接粘贴错误日志,让 Agent 自主诊断+修复+验证
- 新功能开发:参考现有代码模式,分步实现,每步验证
- 代码审查:用
git diff | claude -p快速审查,提交前自己先过一遍 - 重构:让 Agent 追踪整个调用链,确保不遗漏任何引用点
- 上下文管理:
/compact压缩、/clear清空、-c恢复会话
下一篇文章,我们将深入 Claude Code 的内置命令——从 /compact 到 /doctor,每一个命令的使用时机和高级技巧。这些命令是你和 Claude Code 高效协作的基础设施。