一、Claude Code 是什么
Claude Code 是 Anthropic 出品的命令行 Agent,和 Cursor 的核心差异在于:
- Cursor:在 IDE 图形界面里运行,实时看代码变化,适合边开发边使用
- Claude Code:在终端里运行,直接操作文件系统,适合丢一个完整任务让它在后台跑
Claude Code 的定位不是替代 Cursor,而是补充 Cursor 做不到的场景。
Claude Code 的核心能力
- 读取整个代码仓库的所有文件,理解完整的项目结构
- 直接创建、修改、删除文件(不是给你建议,是直接做)
- 执行 shell 命令(跑测试、跑 lint、跑 build)
- 跨文件批量操作(批量加注释、批量改类型、批量重构)
二、安装与配置
# 安装
npm install -g @anthropic-ai/claude-code
# 验证安装
claude --version
# 登录(需要 Anthropic 账号)
claude login
登录成功后,终端会显示账号信息。
两种使用方式
方式一:单次任务
claude "任务描述"
适合:快速查询、简单的单次任务
方式二:交互模式(推荐)
claude
进入交互模式后,可以持续输入任务,AI 保留上下文,不需要每次重新说项目背景。
退出:输入 exit 或按 Ctrl+C
三、四大核心场景详解
场景一:analyze(分析代码)
用途:代码体检、发现潜在问题、接手新项目时快速理解代码
基本用法
claude "分析 src/modules/user/user.service.ts,找出所有潜在问题"
进阶 Prompt(指定分析维度,结果更精准)
claude "分析 src/modules/user/user.service.ts,检查以下问题:
1. 安全性问题(密码处理、SQL 注入风险、权限缺失)
2. 错误处理缺失(没有捕获的异常、没有校验的参数)
3. 类型安全问题(any 类型、类型断言滥用)
4. 业务逻辑问题(软删除、事务处理)
用列表格式输出,每个问题注明行号和危害"
分析整个目录
claude "分析 src/ 目录下所有文件,找出代码质量最差的三个文件,说明原因"
场景二:build(根据需求生成代码)
用途:根据需求文档或描述,生成完整的模块代码
基本用法
claude "读取 order-prd.md,根据里面的需求在项目里创建 OrderModule"
进阶 Prompt(指定文件创建路径和技术约束)
claude "读取项目根目录的 order-prd.md,根据需求:
1. 修改 prisma/schema.prisma,加入 Order model
2. 在 src/modules/order/ 下创建完整的 OrderModule
3. 在 src/app.module.ts 里注册 OrderModule
4. 告诉我需要我手动执行哪些命令(prisma migrate 等)"
Claude Code 不会自动执行数据库 migration,因为这是不可逆操作,需要人工确认。它会告诉你应该执行什么命令,你手动跑。
场景三:refactor(重构代码)
用途:修复代码质量问题、统一代码风格、消除重复代码
单文件重构
claude "重构 src/modules/user/user.service.ts:
1. 把所有 any 类型替换成正确的 TypeScript 类型
2. 把 remove 方法从硬删除改成软删除(update deletedAt)
3. 所有 public 方法加 JSDoc 注释
修改完后给我展示修改了哪些内容"
批量重构(Claude Code 的核心优势)
claude "扫描 src/ 目录下所有 .ts 文件,把所有的 console.log 替换成 NestJS Logger 的对应方法:
- console.log → this.logger.log
- console.error → this.logger.error
- console.warn → this.logger.warn
对于每个文件,确保先在构造函数里注入 Logger"
这种批量操作在 Cursor 里需要逐文件处理,Claude Code 一次命令完成。
场景四:test(生成并运行测试)
用途:生成测试文件、运行测试、修复失败的测试
生成并运行
claude "为 src/modules/user/user.service.ts 生成单元测试,
重点覆盖 create 和 findAll 方法的正常流程和异常场景,
生成完之后直接运行测试,告诉我结果"
修复失败的测试
claude "运行 npm test,把所有失败的测试用例修复,修复后重新运行确认全绿"
四、演示操作步骤
准备工作
Step 1:确认 Claude Code 安装成功
claude --version
claude login # 如果没有登录过
Step 2:准备演示项目,继续使用第 06 集的 agent-demo
cd agent-demo
Step 3:在 src/modules/user/user.service.ts 里故意制造一些问题(用于 analyze 和 refactor 演示)
在文件里加入以下有问题的代码(或者修改现有方法):
// 在 UserService 里加入这个有问题的方法
async searchUsers(keyword: any) {
// 问题1:any 类型
// 问题2:没有过滤软删除
// 问题3:没有错误处理
return await this.prisma.user.findMany({
where: {
username: { contains: keyword }
}
});
}
Step 4:在项目根目录创建 order-prd.md(用于 build 场景演示)
# 订单模块需求
## 字段
- id: 自增主键
- orderNo: 订单号,唯一,格式 ORD + 时间戳
- userId: 关联用户 ID(外键)
- totalAmount: 订单总金额(Decimal,精度 10,小数 2 位)
- status: 枚举 PENDING | PAID | SHIPPED | COMPLETED | CANCELLED,默认 PENDING
- remark: 备注,可为空
- createdAt、updatedAt
## 接口
- POST /api/orders:创建订单
- GET /api/orders:获取列表(分页)
- GET /api/orders/:id:获取详情
- PATCH /api/orders/:id/status:更新状态
- DELETE /api/orders/:id:取消订单(只有 PENDING 状态可以取消)
analyze 场景演示
Step 1:进入项目目录,进入 Claude Code 交互模式
cd agent-demo
claude
Step 2:输入分析任务:
分析 src/modules/user/user.service.ts 这个文件,按照以下维度找出问题:
1. 安全性问题
2. 错误处理缺失
3. 类型安全问题(any 类型)
4. 业务逻辑问题
用列表格式输出,每个问题说明:所在行、问题描述、危害、修复建议
Step 3:等待分析完成,观察输出报告
报告里应该包含:
searchUsers方法的any类型问题- 没有过滤软删除的问题
- 如果有密码字段暴露的问题也会被发现
build 场景演示
Step 1:在 Claude Code 交互模式里输入:
读取项目根目录的 order-prd.md,根据需求:
1. 修改 prisma/schema.prisma,加入 Order model 和 OrderStatus enum
2. 在 src/modules/order/ 目录下创建完整的 OrderModule,包含 DTO、Service、Controller、Module 文件
3. 在 app.module.ts 里注册 OrderModule
4. 完成后告诉我需要手动执行哪些命令
Step 2:观察 Claude Code 执行过程中的文件操作(它会显示每一步在做什么)
Step 3:Claude Code 完成后,按照它的提示手动执行 migration:
npx prisma migrate dev --name add-order-module
npx prisma generate
Step 4:验证生成的文件结构:
ls src/modules/order/
# 期望看到:
# order.controller.ts
# order.service.ts
# order.module.ts
# dto/
# create-order.dto.ts
# update-order-status.dto.ts
# find-orders.dto.ts
refactor 场景演示
Step 1:在 Claude Code 交互模式里输入:
根据刚才 analyze 发现的问题,重构 src/modules/user/user.service.ts:
1. searchUsers 方法的 keyword 参数从 any 改为 string 类型
2. searchUsers 方法加上 where: { deletedAt: null } 过滤软删除
3. 所有没有 JSDoc 注释的 public 方法加上注释
修改完之后显示 diff,说明每处修改的原因
Step 2:检查 Claude Code 输出的 diff,确认修改内容符合预期
Step 3:运行 TypeScript 编译检查,确认没有类型错误:
npx tsc --noEmit
test 场景演示
Step 1:在 Claude Code 交互模式里输入:
为 src/modules/order/order.service.ts 生成单元测试文件。
要求:
- 测试文件路径:src/modules/order/order.service.spec.ts
- 使用 Jest,Mock PrismaService
- 重点测试:
1. create:正常创建订单,orderNo 格式是 ORD + 时间戳
2. cancel:正常取消 PENDING 订单
3. cancel:尝试取消非 PENDING 状态的订单,应抛出 BadRequestException
- 测试描述用中文
生成完成后,运行测试命令:npm test -- order.service.spec.ts --verbose
把测试结果告诉我
Step 2:等待 Claude Code 生成测试文件并运行
Step 3:如果有测试失败,在交互模式里继续输入:
有测试失败了,错误信息是:[Claude Code 输出的错误信息]
帮我修复,修复后重新运行测试
Step 4:重复直到测试全绿,确认最终结果:
npm test -- order.service.spec.ts --verbose
五、Claude Code 使用技巧
给 Claude Code 更多项目背景
进入交互模式后,第一条消息可以是项目介绍:
这是一个 NestJS + Prisma + PostgreSQL 的电商后端项目,
使用 TypeScript strict 模式,
Prisma Schema 在 prisma/schema.prisma,
业务模块在 src/modules/ 下,
请先大致了解一下项目结构,然后我会给你具体任务
这样后续的任务不需要每次都解释项目背景。
CLAUDE.md 配置文件
在项目根目录创建 CLAUDE.md,Claude Code 每次启动时会自动读取,功能类似 .cursorrules:
# 项目说明
## 技术栈
- NestJS 10 + Prisma + PostgreSQL
- TypeScript strict 模式
## 重要约定
- 不要使用 any 类型
- 软删除用 deletedAt 字段
- 所有接口返回 ResponseDto 格式
- 数据库操作涉及多表时必须用事务
## 常用命令
- 启动:npm run start:dev
- 测试:npm test
- 编译检查:npx tsc --noEmit
- Migration:npx prisma migrate dev --name 描述
批量任务后必须验证
Claude Code 执行批量操作后,运行以下命令验证:
# TypeScript 类型检查
npx tsc --noEmit
# 运行所有测试
npm test
# 启动项目,确认没有运行时报错
npm run start:dev
六、Claude Code vs Cursor 使用场景对照
| 任务类型 | 用 Cursor | 用 Claude Code |
|---|---|---|
| 开发新功能,需要实时看效果 | ✅ | |
| 修改单个文件的某个方法 | ✅ | |
| 批量修改 20+ 个文件 | ✅ | |
| 分析整个仓库的代码质量 | ✅ | |
| 生成大量测试文件 | ✅ | |
| 在后台跑,人去做别的事 | ✅ | |
| 需要实时 Diff 审查每个改动 | ✅ |
Spec Coding 实战补充:07 Claude Code 终端 Agent
来源:
Spec Coding实战/07 Claude Code 终端 Agent.md,已合并到本章节。
1. 什么是 Claude Code
Claude Code 是 Anthropic 出的命令行工具,在终端里直接调用 Claude,让 AI 在你的本地环境里读文件、写文件、执行命令、分析代码。
和 Cursor 的区别在于:
| 维度 | Cursor | Claude Code |
|---|---|---|
| 界面 | GUI 编辑器 | 终端命令行 |
| 适合场景 | 写新代码、交互式开发 | 分析、重构、批量操作、自动化 |
| 文件操作 | 在编辑器里直接改 | 通过 shell 命令操作 |
| 与 CI/CD 集成 | 不适合 | 可以 |
| 上下文感知 | 项目文件 + 对话 | 整个文件系统 + git 历史 |
两者是互补的,不是替代关系。日常写功能用 Cursor,分析代码质量、批量重构、自动化任务用 Claude Code。
2. 安装
npm install -g @anthropic-ai/claude-code
安装完成后,配置 API Key:
export ANTHROPIC_API_KEY="sk-ant-..."
# 或者写进 ~/.zshrc / ~/.bashrc 永久生效
echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.zshrc
source ~/.zshrc
验证安装:
claude --version
3. 基本使用方式
方式一:交互模式(最常用)
cd my-project
claude
进入交互式会话,类似一个能操作你文件系统的对话窗口:
> 分析一下这个项目的整体结构,告诉我哪些地方代码质量有问题
Claude Code 会:
- 读取项目文件结构
- 扫描关键文件内容
- 给出分析报告
方式二:单次命令
claude "帮我查一下 src/modules/user/user.service.ts 里有没有 N+1 查询问题"
方式三:管道输入
cat src/modules/user/user.service.ts | claude "分析这段代码的问题"
npm test 2>&1 | claude "解释这些测试失败的原因,给出修复建议"
4. 常用任务示例
4.1 分析(analyze)
分析项目结构
> 扫描整个 src 目录,告诉我:
1. 有哪些模块
2. 模块间的依赖关系
3. 有没有循环依赖的风险
分析代码质量
> 读取 src/modules/user/user.service.ts,指出:
- 潜在的 bug
- 性能问题
- 安全隐患
- 不符合 NestJS 最佳实践的写法
分析 git 历史
> 看一下最近 10 次提交,总结这段时间主要改了哪些东西,
有没有频繁改动同一个文件的情况(可能说明设计有问题)
4.2 构建(build)
生成模块
> 在 src/modules/ 下创建 order 模块,参考 user 模块的结构,
包含 controller、service、module、dto 文件。
Order 的字段:id、userId、totalAmount、status(PENDING/PAID/CANCELLED)、
createdAt、updatedAt。
使用 Prisma,遵循项目的代码规范。
生成配置文件
> 帮我生成 Docker Compose 配置,包含:
- app 服务(Node.js 20,挂载当前目录)
- postgres 服务(PostgreSQL 16,数据持久化)
- 两个服务在同一个网络里
- 读取 .env 文件的配置
生成 CI 配置
> 帮我写 GitHub Actions 的 CI 配置:
- 触发条件:push 到 main 或 PR
- 步骤:安装依赖 → 运行 lint → 运行单元测试 → 构建
- Node.js 版本:20
- 缓存 node_modules
4.3 重构(refactor)
批量重构命名
> 扫描 src/modules/ 下所有文件,
找出所有用了 pageNum 作为分页参数名的地方,
统一改成 page(保持和接口规范一致)
提取公共逻辑
> 读取 src/modules/user/user.service.ts 和
src/modules/product/product.service.ts,
我发现两个文件里的分页查询逻辑几乎一样。
帮我提取成一个公共的 paginate 工具函数放在
src/common/utils/paginate.ts,然后在两个 service 里调用它。
升级写法
> 扫描 src/ 下所有文件,把用了 Promise.then().catch() 链式写法的
地方改成 async/await + try/catch,逐文件处理
4.4 测试(test)
运行测试并分析失败
npm test 2>&1 | claude "分析这些测试失败原因,哪些是代码 bug,哪些是测试写错了"
生成测试后运行验证
> 为 src/modules/user/user.service.ts 的所有方法生成单元测试,
写到 src/modules/user/user.service.spec.ts,
写完后运行 npm test 验证测试能通过
Claude Code 会生成测试文件,然后自动执行 npm test,如果有失败会继续修复,直到全部通过。
5. CLAUDE.md:项目级 AI 说明书
在项目根目录创建 CLAUDE.md,Claude Code 每次启动时会自动读取。
这和 .cursorrules 的作用类似,但针对终端操作场景:
# CLAUDE.md — 项目 AI 操作指南
## 项目概述
NestJS + Prisma + PostgreSQL 的用户管理系统后端。
## 启动命令
```bash
npm run start:dev # 开发模式
npm run build # 构建
npm test # 单元测试
npm run test:e2e # E2E 测试
npx prisma studio # 数据库管理界面
```text
## 代码规范
+ 遵循 .cursorrules 的所有约定
+ 禁止修改 prisma/migrations/ 下的文件
+ 禁止直接修改 dist/ 目录
## 重要文件
+ src/common/constants/error-code.ts:所有业务错误码定义
+ src/common/filters/all-exceptions.filter.ts:全局异常处理
+ prisma/schema.prisma:数据模型
## 数据库操作
+ 修改 schema 后必须执行:npx prisma migrate dev
+ 不要直接修改数据库,所有变更通过 migration
## 禁止操作
+ 禁止删除 .env 文件
+ 禁止在 src/ 外创建业务代码文件
+ 禁止修改 package.json 中已有的脚本
```plain
---
### 6. 与 Shell 工作流集成
Claude Code 可以和常用的 shell 命令组合,形成自动化工作流。
#### 配合 git:
```bash
# 生成 commit message
git diff --staged | claude "根据这个 diff,生成一个符合 Conventional Commits 格式的 commit message"
# 分析某次提交的影响
git show abc123 | claude "分析这次提交做了什么,有没有潜在问题"
配合 lint
npm run lint 2>&1 | claude "解释这些 lint 错误,给出批量修复方案"
配合日志
tail -100 logs/app.log | claude "分析最近的日志,有没有异常或值得关注的错误模式"
7. 实际工作流:Code Review 前的自检
这是一个实际可用的工作流,在提 PR 前用 Claude Code 做自检:
# 1. 查看本次改动
git diff main...HEAD | claude "
审查这次改动:
1. 有没有明显的 bug 或逻辑错误?
2. 有没有安全隐患(SQL 注入、未校验输入、密码明文等)?
3. 有没有遗漏错误处理?
4. 命名是否清晰?
5. 有没有可以改进的地方?
给出具体的文件名和行数。
"
8. Claude Code 的边界:它不擅长什么
不适合实时交互开发 Claude Code 的响应速度比 Cursor 的内联补全慢,不适合"写一行,等一下"这种节奏。交互式写代码还是用 Cursor。
大型文件处理要小心 超过 10000 行的文件,Claude Code 可能无法完整读取。遇到这种情况,把任务拆成按函数/按类处理。
不保留跨次对话的记忆 每次启动 claude 都是新的会话。项目约定要放在 CLAUDE.md,不要依赖上次说过的话。
9. 小结
Claude Code 是终端里的 AI 工程助手,最适合三类场景:
- 分析:读懂一个陌生代码库、找出代码质量问题、分析 git 历史
- 批量操作:跨文件重构、批量改命名、统一代码风格
- 自动化:生成配置文件、CI/CD 脚本、接入 shell 管道
它和 Cursor 的关系是:Cursor 负责"写",Claude Code 负责"看"和"改"。两者配合,覆盖完整的开发工作流。