返回笔记首页

第 07 集:Claude Code 终端 Agent

主题配置

一、Claude Code 是什么

Claude Code 是 Anthropic 出品的命令行 Agent,和 Cursor 的核心差异在于:

  • Cursor:在 IDE 图形界面里运行,实时看代码变化,适合边开发边使用
  • Claude Code:在终端里运行,直接操作文件系统,适合丢一个完整任务让它在后台跑

Claude Code 的定位不是替代 Cursor,而是补充 Cursor 做不到的场景。

Claude Code 的核心能力

  • 读取整个代码仓库的所有文件,理解完整的项目结构
  • 直接创建、修改、删除文件(不是给你建议,是直接做)
  • 执行 shell 命令(跑测试、跑 lint、跑 build)
  • 跨文件批量操作(批量加注释、批量改类型、批量重构)

二、安装与配置

bash
# 安装
npm install -g @anthropic-ai/claude-code

# 验证安装
claude --version

# 登录(需要 Anthropic 账号)
claude login

登录成功后,终端会显示账号信息。

两种使用方式

方式一:单次任务

bash
claude "任务描述"

适合:快速查询、简单的单次任务

方式二:交互模式(推荐)
bash
claude

进入交互模式后,可以持续输入任务,AI 保留上下文,不需要每次重新说项目背景。

退出:输入 exit 或按 Ctrl+C


三、四大核心场景详解

场景一:analyze(分析代码)

用途:代码体检、发现潜在问题、接手新项目时快速理解代码

基本用法

bash
claude "分析 src/modules/user/user.service.ts,找出所有潜在问题"
进阶 Prompt(指定分析维度,结果更精准)
bash
claude "分析 src/modules/user/user.service.ts,检查以下问题:
1. 安全性问题(密码处理、SQL 注入风险、权限缺失)
2. 错误处理缺失(没有捕获的异常、没有校验的参数)
3. 类型安全问题(any 类型、类型断言滥用)
4. 业务逻辑问题(软删除、事务处理)
用列表格式输出,每个问题注明行号和危害"
分析整个目录
bash
claude "分析 src/ 目录下所有文件,找出代码质量最差的三个文件,说明原因"

场景二:build(根据需求生成代码)

用途:根据需求文档或描述,生成完整的模块代码

基本用法

bash
claude "读取 order-prd.md,根据里面的需求在项目里创建 OrderModule"
进阶 Prompt(指定文件创建路径和技术约束)
bash
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(重构代码)

用途:修复代码质量问题、统一代码风格、消除重复代码

单文件重构

bash
claude "重构 src/modules/user/user.service.ts:
1. 把所有 any 类型替换成正确的 TypeScript 类型
2. 把 remove 方法从硬删除改成软删除(update deletedAt)
3. 所有 public 方法加 JSDoc 注释
修改完后给我展示修改了哪些内容"
批量重构(Claude Code 的核心优势)
bash
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(生成并运行测试)

用途:生成测试文件、运行测试、修复失败的测试

生成并运行

bash
claude "为 src/modules/user/user.service.ts 生成单元测试,
重点覆盖 create 和 findAll 方法的正常流程和异常场景,
生成完之后直接运行测试,告诉我结果"
修复失败的测试
bash
claude "运行 npm test,把所有失败的测试用例修复,修复后重新运行确认全绿"

四、演示操作步骤

准备工作

Step 1:确认 Claude Code 安装成功

bash
claude --version
claude login   # 如果没有登录过

Step 2:准备演示项目,继续使用第 06 集的 agent-demo

bash
cd agent-demo

Step 3:在 src/modules/user/user.service.ts 里故意制造一些问题(用于 analyze 和 refactor 演示)

在文件里加入以下有问题的代码(或者修改现有方法):

typescript
// 在 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 场景演示)

markdown
# 订单模块需求

## 字段
- 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 交互模式

bash
cd agent-demo
claude

Step 2:输入分析任务:

plain
分析 src/modules/user/user.service.ts 这个文件,按照以下维度找出问题:
1. 安全性问题
2. 错误处理缺失
3. 类型安全问题(any 类型)
4. 业务逻辑问题

用列表格式输出,每个问题说明:所在行、问题描述、危害、修复建议

Step 3:等待分析完成,观察输出报告

报告里应该包含:

  • searchUsers 方法的 any 类型问题
  • 没有过滤软删除的问题
  • 如果有密码字段暴露的问题也会被发现

build 场景演示

Step 1:在 Claude Code 交互模式里输入:

plain
读取项目根目录的 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:

bash
npx prisma migrate dev --name add-order-module
npx prisma generate

Step 4:验证生成的文件结构:

bash
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 交互模式里输入:

plain
根据刚才 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 编译检查,确认没有类型错误:

bash
npx tsc --noEmit

test 场景演示

Step 1:在 Claude Code 交互模式里输入:

plain
为 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:如果有测试失败,在交互模式里继续输入:

plain
有测试失败了,错误信息是:[Claude Code 输出的错误信息]
帮我修复,修复后重新运行测试

Step 4:重复直到测试全绿,确认最终结果:

bash
npm test -- order.service.spec.ts --verbose

五、Claude Code 使用技巧

给 Claude Code 更多项目背景

进入交互模式后,第一条消息可以是项目介绍:

plain
这是一个 NestJS + Prisma + PostgreSQL 的电商后端项目,
使用 TypeScript strict 模式,
Prisma Schema 在 prisma/schema.prisma,
业务模块在 src/modules/ 下,
请先大致了解一下项目结构,然后我会给你具体任务

这样后续的任务不需要每次都解释项目背景。

CLAUDE.md 配置文件

在项目根目录创建 CLAUDE.md,Claude Code 每次启动时会自动读取,功能类似 .cursorrules

markdown
# 项目说明

## 技术栈
- 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 执行批量操作后,运行以下命令验证:

bash
# 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. 安装

bash
npm install -g @anthropic-ai/claude-code

安装完成后,配置 API Key:

bash
export ANTHROPIC_API_KEY="sk-ant-..."

# 或者写进 ~/.zshrc / ~/.bashrc 永久生效
echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.zshrc
source ~/.zshrc

验证安装:

bash
claude --version

3. 基本使用方式

方式一:交互模式(最常用)

bash
cd my-project
claude

进入交互式会话,类似一个能操作你文件系统的对话窗口:

plain
> 分析一下这个项目的整体结构,告诉我哪些地方代码质量有问题

Claude Code 会:

  1. 读取项目文件结构
  2. 扫描关键文件内容
  3. 给出分析报告

方式二:单次命令

bash
claude "帮我查一下 src/modules/user/user.service.ts 里有没有 N+1 查询问题"

方式三:管道输入

bash
cat src/modules/user/user.service.ts | claude "分析这段代码的问题"
bash
npm test 2>&1 | claude "解释这些测试失败的原因,给出修复建议"

4. 常用任务示例

4.1 分析(analyze)

分析项目结构
bash
> 扫描整个 src 目录,告诉我:
  1. 有哪些模块
  2. 模块间的依赖关系
  3. 有没有循环依赖的风险
分析代码质量
bash
> 读取 src/modules/user/user.service.ts,指出:
  - 潜在的 bug
  - 性能问题
  - 安全隐患
  - 不符合 NestJS 最佳实践的写法
分析 git 历史
bash
> 看一下最近 10 次提交,总结这段时间主要改了哪些东西,
  有没有频繁改动同一个文件的情况(可能说明设计有问题)

4.2 构建(build)

生成模块
bash
> 在 src/modules/ 下创建 order 模块,参考 user 模块的结构,
  包含 controller、service、module、dto 文件。
  Order 的字段:id、userId、totalAmount、status(PENDING/PAID/CANCELLED)、
  createdAt、updatedAt。
  使用 Prisma,遵循项目的代码规范。
生成配置文件
bash
> 帮我生成 Docker Compose 配置,包含:
  - app 服务(Node.js 20,挂载当前目录)
  - postgres 服务(PostgreSQL 16,数据持久化)
  - 两个服务在同一个网络里
  - 读取 .env 文件的配置
生成 CI 配置
bash
> 帮我写 GitHub Actions 的 CI 配置:
  - 触发条件:push 到 main 或 PR
  - 步骤:安装依赖 → 运行 lint → 运行单元测试 → 构建
  - Node.js 版本:20
  - 缓存 node_modules

4.3 重构(refactor)

批量重构命名
bash
> 扫描 src/modules/ 下所有文件,
  找出所有用了 pageNum 作为分页参数名的地方,
  统一改成 page(保持和接口规范一致)
提取公共逻辑
bash
> 读取 src/modules/user/user.service.ts 和
  src/modules/product/product.service.ts,
  我发现两个文件里的分页查询逻辑几乎一样。
  帮我提取成一个公共的 paginate 工具函数放在
  src/common/utils/paginate.ts,然后在两个 service 里调用它。
升级写法
bash
> 扫描 src/ 下所有文件,把用了 Promise.then().catch() 链式写法的
  地方改成 async/await + try/catch,逐文件处理

4.4 测试(test)

运行测试并分析失败
bash
npm test 2>&1 | claude "分析这些测试失败原因,哪些是代码 bug,哪些是测试写错了"
生成测试后运行验证
bash
> 为 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 的作用类似,但针对终端操作场景:

markdown
# 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
bash
npm run lint 2>&1 | claude "解释这些 lint 错误,给出批量修复方案"
配合日志
bash
tail -100 logs/app.log | claude "分析最近的日志,有没有异常或值得关注的错误模式"

7. 实际工作流:Code Review 前的自检

这是一个实际可用的工作流,在提 PR 前用 Claude Code 做自检:

bash
# 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 负责"看"和"改"。两者配合,覆盖完整的开发工作流。