第 3 章:快速上手

让 Claude 理解你的项目

代码库扫描与结构分析

Claude Code 最强大的能力之一,是它能够直接读取和操作你的代码库。但"能读取"和"读得懂"是两个完全不同的层次。一个刚启动的 Claude 会话对你的项目一无所知——它不知道你用的是什么框架,不知道你的目录结构遵循什么约定,不知道哪些文件是核心入口,哪些只是生成的产物。

本章将系统讲解 Claude Code 如何"读取"和理解代码库,以及你如何通过主动提供上下文、使用正确的提问策略,让 Claude 从"盲人摸象"快速进化为"胸有成竹"。无论你是面对一个陌生的开源项目、接手一个遗留系统,还是想在日常开发中最大化 Claude 的效率,这些策略都至关重要。


一、Claude Code 如何"读取"代码库

1.1 Agentic Loop:观察-推理-行动的循环

Claude Code 不是一个静态的代码分析工具,而是一个动态的 Agent。当你向它提出一个涉及代码库的问题时,它会进入一个被称为 Agentic Loop 的三阶段循环^1

┌─────────────────────────────────────────────────────────────┐
│                     Agentic Loop                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   用户提问                                                  │
│      │                                                      │
│      ▼                                                      │
│   ┌──────────────┐    ┌──────────────┐    ┌─────────────┐  │
│   │  Gather      │───▶│  Take        │───▶│  Verify     │  │
│   │  Context     │    │  Action      │    │  Results    │  │
│   │  (收集上下文) │    │  (执行操作)   │    │  (验证结果)  │  │
│   └──────────────┘    └──────────────┘    └─────────────┘  │
│          │                   │                   │          │
│          └───────────────────┴───────────────────┘          │
│                        (循环直到完成)                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

收集上下文(Gather Context):Claude 首先判断需要了解哪些信息才能回答你的问题。它可能会搜索文件、读取目录结构、查看配置文件,甚至运行命令来获取项目状态。

执行操作(Take Action):基于收集到的信息,Claude 决定下一步行动——可能是读取更多文件、编辑代码、运行测试,或者向你请求澄清。

验证结果(Verify Results):执行后,Claude 检查结果是否符合预期。如果测试失败或输出不符合预期,它会回到收集上下文阶段,调整策略后重试。

这个循环的关键在于:Claude 不是一次性读取整个代码库,而是按需、渐进式地探索。这种设计既是优势(节省 token),也是挑战(需要正确引导)。

1.2 自动发现策略:Claude 如何决定读什么

当你问"这个项目做什么"时,Claude 会启动一套启发式的自动发现策略^2

第一层:项目根目录扫描

Claude 首先会查看项目根目录下的"信号文件":

文件类型识别内容
package.json / Cargo.toml / pyproject.toml / go.mod技术栈、依赖、脚本命令
README.md项目描述、使用说明
Dockerfile / docker-compose.yml部署架构、服务依赖
.gitignore项目类型线索(如 node_modulestarget/
CLAUDE.md项目特定的 AI 指令

第二层:目录结构解析

Claude 会递归扫描目录树,识别常见的项目结构模式:

# 典型的 Web 项目结构
src/
  ├── components/     ← 识别为 UI 组件目录
  ├── pages/          ← 识别为路由页面(Next.js/Nuxt 模式)
  ├── api/            ← 识别为 API 路由
  ├── utils/          ← 工具函数
  └── types/          ← 类型定义

# 典型的后端项目结构
app/
  ├── models/         ← 数据库模型
  ├── routes/         ← 路由处理器
  ├── services/       ← 业务逻辑
  └── core/           ← 核心配置

第三层:入口点发现

Claude 会寻找程序的执行入口:

  • 前端index.htmlmain.tsxapp.vue
  • 后端main.pyserver.tsapp.js
  • CLI 工具cli.pycmd/root.go
  • 库/包__init__.pyindex.tslib.rs

第四层:配置文件分析

通过读取框架配置文件,Claude 推断项目使用的技术细节:

  • vite.config.ts → Vite 构建工具
  • next.config.js → Next.js 框架
  • tailwind.config.js → Tailwind CSS
  • jest.config.js → Jest 测试框架
  • .eslintrc → ESLint 规则

1.3 文件选择算法:为什么 Claude 读了 A 而不是 B

Claude Code 内置了一套文件选择优先级算法^3。当你提出一个具体问题时,它会按以下优先级决定读取哪些文件:

优先级 1:显式提及的文件

如果你直接提到了文件路径,Claude 会优先读取:

claude> 检查 src/auth.ts 中的登录逻辑
# Claude 直接读取 src/auth.ts

优先级 2:与问题语义相关的文件

Claude 使用关键词匹配和文件路径推断:

claude> 用户认证是怎么实现的?
# Claude 会搜索包含 "auth"、"login"、"session" 的文件名和内容

优先级 3:入口点和核心配置文件

对于架构级问题,Claude 会读取项目的核心骨架:

claude> 解释这个项目的整体架构
# Claude 读取 package.json、主入口文件、路由配置等

优先级 4:最近修改的文件

Claude 会查看 git 状态,优先关注当前工作区中已更改的文件:

claude> 我最近的改动有什么问题?
# Claude 读取 git diff 中涉及的文件

优先级 5:测试文件

当问题涉及功能验证时,Claude 会查找对应的测试:

claude> 这个函数应该怎么用?
# Claude 可能读取对应的 .test.ts 文件看用法示例

1.4 内置工具集:Claude 的"感官系统"

Claude Code 通过一套内置工具来感知代码库^1

工具类别具体能力用途
文件操作Read、Edit、Write、Glob读取、修改、创建文件,按模式匹配文件
搜索Grep、Glob按正则搜索内容,按模式查找文件
执行Bash运行 shell 命令、测试、git 操作
代码智能类型检查、定义跳转、引用查找理解代码间的依赖关系
委派Task(Subagent)将探索任务交给子代理

这些工具的组合使用,构成了 Claude 探索代码库的基础能力。例如,当 Claude 需要理解一个函数时,它可能会:

  1. Read 读取函数定义
  2. Grep 查找所有调用该函数的地方
  3. Read 读取关键的调用点
  4. Bash 运行测试验证理解

二、项目结构分析:从混沌到清晰

2.1 技术栈识别:Claude 如何"猜"你用什么

Claude Code 的技术栈识别是一个多信号融合的过程。当你首次进入一个项目,可以通过以下方式快速建立技术栈认知:

提问模板 1:技术栈概览

claude> 分析这个项目的技术栈。列出:1) 主要编程语言和框架 2) 构建工具 3) 测试框架 4) 数据库/ORM 5) 部署方式

预期响应

基于对项目文件的分析,技术栈如下:

1. 主要编程语言和框架:
   - TypeScript(主语言)
   - Next.js 15(React 框架,App Router)
   - React 19(UI 库)

2. 构建工具:
   - Vite 6(开发服务器和构建)
   - pnpm(包管理器)

3. 测试框架:
   - Vitest(单元测试)
   - Playwright(E2E 测试)

4. 数据库/ORM:
   - PostgreSQL(数据库)
   - Drizzle ORM(类型安全的数据库操作)

5. 部署方式:
   - Docker(容器化)
   - 从 Dockerfile 推断可能使用 AWS ECS 或类似平台

提问模板 2:依赖分析

claude> 分析 package.json 中的关键依赖。哪些是直接依赖?哪些是开发依赖?有没有已知的安全风险或过时包?

2.2 目录结构解析:理解项目的"地形"

目录结构是项目架构的最直观表达。Claude 可以帮你快速建立对项目"地形"的认知:

提问模板 3:目录结构解释

claude> 解释这个项目的目录结构。每个主要目录的作用是什么?遵循什么设计模式?

预期响应(以典型 Next.js 项目为例):

项目采用 Next.js App Router 的标准结构,遵循功能模块组织原则:

src/
├── app/                    # Next.js App Router 路由
│   ├── (marketing)/        # 路由组:营销页面(无共享布局)
│   ├── dashboard/          # 仪表盘路由
│   ├── api/                # API 路由端点
│   └── layout.tsx          # 根布局
├── components/
│   ├── ui/                 # 基础 UI 组件(Button, Input 等)
│   └── features/           # 功能组件(与业务逻辑耦合)
├── lib/
│   ├── db/                 # 数据库相关(schema, queries)
│   ├── auth/               # 认证工具
│   └── utils/              # 通用工具函数
├── types/                  # 全局 TypeScript 类型
└── hooks/                  # 自定义 React Hooks

设计模式:
- 使用 Barrel exports(index.ts)简化导入
- UI 组件与功能组件分离,便于复用
- API 路由与页面路由共存,全栈开发

提问模板 4:寻找关键文件

claude> 列出这个项目中最重要的 10 个文件,并说明每个文件的作用

2.3 入口点发现:程序的"起点"在哪里

理解入口点是理解程序执行流程的关键。不同项目类型的入口点各不相同:

提问模板 5:入口点分析

claude> 找出这个项目的所有入口点:1) 应用程序入口 2) 库/包的导出入口 3) 测试入口 4) CLI 入口(如果有)

预期响应(以全栈项目为例):

入口点分析:

1. 应用程序入口:
   - 前端:src/app/layout.tsx(Next.js 根布局)
   - 后端 API:src/app/api/[[...route]]/route.ts(API 路由聚合)

2. 库/包导出:
   - src/index.ts(主包导出)
   - src/components/ui/index.ts(UI 组件桶文件)

3. 测试入口:
   - vitest.config.ts 中定义的入口
   - src/**/*.test.ts 模式匹配

4. CLI 入口:
   - bin/cli.js(如果项目包含 CLI 工具)

三、代码库导航:精准定位与深度探索

3.1 文件搜索:从"大海捞针"到"精准定位"

Claude Code 提供了多种文件搜索方式,掌握它们可以大幅提升导航效率。

方式 1:自然语言描述搜索

claude> 找到处理用户登录逻辑的文件
# Claude 自动搜索包含 login、auth、signin 等关键词的文件

方式 2:使用 @ 符号快速引用

claude> 看看 @src/auth.ts 里的登录函数有什么问题
# @ 触发文件路径自动补全,直接读取指定文件

方式 3:让 Claude 使用 Grep 精确搜索

claude> 搜索所有包含 "JWT" 这个词的文件,并显示上下文
# Claude 使用 Grep 工具执行正则搜索

方式 4:模式匹配(Glob)

claude> 列出所有以 .service.ts 结尾的文件
# Claude 使用 Glob 工具匹配文件模式

3.2 符号跳转:追踪函数和类型的定义

Claude Code 支持代码智能功能,可以帮助你追踪符号的定义和引用:

提问模板 6:符号追踪

claude> 找到 `validateUser` 函数的定义,以及所有调用它的地方

预期响应

`validateUser` 函数定义在 src/lib/auth.ts:45:

```typescript
export async function validateUser(
  email: string,
  password: string
): Promise<User | null> {
  // ... 实现
}

调用位置:

  1. src/app/api/auth/login/route.ts:12 — 登录 API 端点
  2. src/app/api/auth/refresh/route.ts:8 — Token 刷新端点
  3. src/components/LoginForm.tsx:34 — 前端登录表单

**提问模板 7:类型追踪**

```bash
claude> `User` 类型在哪里定义?哪些文件使用了这个类型?

3.3 依赖关系追踪:理解模块间的"血脉"

理解模块间的依赖关系是掌握大型项目的关键。Claude 可以帮你绘制依赖图谱:

提问模板 8:依赖分析

claude> 分析 src/services/ 目录下各模块的依赖关系。哪个模块被最多其他模块引用?有没有循环依赖?

提问模板 9:数据流追踪

claude> 追踪一个用户注册请求从 API 入口到数据库的完整数据流。列出涉及的所有文件和函数调用链。

预期响应

用户注册数据流:

1. API 入口
   src/app/api/auth/register/route.ts
   └── POST handler (line 15)

2. 输入验证
   └── validateRegistrationInput()
       src/lib/validation/auth.ts:23

3. 业务逻辑
   └── authService.register()
       src/services/auth.ts:45
       ├── checkExistingUser() — src/services/user.ts:12
       ├── hashPassword() — src/lib/crypto.ts:8
       └── createUser() — src/services/user.ts:34

4. 数据库操作
   └── db.insert(users).values(...)
       src/lib/db/queries/user.ts:56
       └── 使用 Drizzle ORM 的 schema
           src/lib/db/schema.ts:23 (users 表定义)

5. 响应构造
   └── 返回 { success: true, user: {...} }
       src/app/api/auth/register/route.ts:42

涉及文件:6 个
函数调用深度:4 层

3.4 使用 Subagent 进行并行探索

对于大型代码库,Claude Code 的 Subagent(子代理) 功能是一个强大的探索工具^4。Subagent 在独立的上下文窗口中运行,不会消耗主会话的 token 预算。

提问模板 10:委派探索任务给 Subagent

claude> 使用 subagent 并行探索:1) 认证模块的代码结构 2) 支付模块的代码结构 3) 通知模块的代码结构。每个 subagent 返回该模块的关键文件列表和职责说明。

Subagent 的三种类型^4

类型模型权限用途
ExploreHaiku(快速、低成本)只读代码库搜索和分析
General-purposeSonnet读写复杂多步骤任务
PlanSonnet只读计划阶段的研究

实际使用示例

claude> 使用 explore subagent 查找所有与 WebSocket 相关的代码。返回文件路径、关键代码片段和整体架构说明。

四、上下文构建:Claude 如何决定读什么

4.1 上下文窗口的构成

Claude Code 的上下文窗口是一个有限的"工作记忆"空间,包含以下内容^5

内容类别说明占比估算
系统提示和 CLAUDE.md项目指令、规则~5-10%
用户消息你的提问和指令~10-15%
Claude 的响应生成的回答和代码~25-35%
文件读取读取的文件内容~20-30%
命令输出终端命令的执行结果~5-10%
工具输出搜索、分析结果~5-10%

4.2 优先级策略:什么最重要

Claude Code 在决定保留哪些上下文时,遵循以下优先级^5

最高优先级(始终保留)

  • 系统提示和 CLAUDE.md 内容
  • 最近的 3-5 轮对话
  • 当前正在编辑的文件

高优先级(尽量保留)

  • 用户明确提及的文件
  • 当前任务直接相关的代码
  • 最近的命令输出

可压缩(需要时总结)

  • 早期的对话历史(可用 /compact 压缩)
  • 已完成的探索结果
  • 不相关的文件内容

最低优先级(首先丢弃)

  • 过时的工具输出
  • 已验证通过的测试输出
  • 与当前任务无关的文件

4.3 使用 /context 查看当前上下文状态

Claude Code 提供了 /context 命令,让你实时了解上下文使用情况:

claude> /context

预期输出

Context usage: 68% (142,000 / 200,000 tokens)

Breakdown:
- System prompt + CLAUDE.md: 12,000 tokens (8%)
- Conversation history: 45,000 tokens (32%)
- File reads: 62,000 tokens (44%)
- Command outputs: 18,000 tokens (13%)
- Tool definitions: 5,000 tokens (4%)

Optimization suggestions:
- Run /compact to free up ~20,000 tokens
- 5 files in context haven't been referenced in 10+ turns
- Consider starting a new session for a different task

4.4 使用 /compact 主动管理上下文

当上下文接近上限时,/compact 命令可以总结并压缩对话历史^6

claude> /compact 保留关于认证模块重构的决策

/compact 的工作原理:

  • 保留关键决策和结论
  • 丢弃详细的探索过程和中间步骤
  • 保留文件修改记录
  • 释放 20-40% 的上下文空间

什么在压缩后保留^5

机制压缩后状态
系统提示和输出样式不变(不在消息历史中)
项目根目录 CLAUDE.md从磁盘重新注入
自动记忆从磁盘重新注入
路径限定规则丢失,直到再次读取匹配文件
嵌套 CLAUDE.md丢失,直到再次读取该子目录文件
已调用的 Skill重新注入,但受 5,000 token/Skill 和 25,000 token 总计上限限制

五、与 Claude 对话的最佳实践

5.1 如何描述项目:给 Claude 一张"地图"

最有效的项目描述方式是提供一张清晰的"地图",让 Claude 知道在哪里找什么。

最佳实践 1:使用 CLAUDE.md 提供持久上下文

CLAUDE.md 是 Claude Code 最重要的上下文机制^7。放置在项目根目录的 CLAUDE.md 会在每个会话开始时自动加载,成为系统提示的一部分。

<!-- CLAUDE.md 示例 -->
# 项目上下文

## 项目概述
这是一个基于 Next.js 15 的全栈 SaaS 应用,使用 TypeScript 和 Tailwind CSS。

## 关键目录
- `src/app/` — App Router 页面和 API 路由
- `src/components/ui/` — 基础 UI 组件(shadcn/ui)
- `src/components/features/` — 业务功能组件
- `src/lib/db/` — 数据库 schema 和查询
- `src/lib/auth/` — 认证相关工具
- `src/services/` — 业务逻辑层

## 技术栈
- Next.js 15 + React 19
- TypeScript 5.7
- Tailwind CSS 4
- Drizzle ORM + PostgreSQL
- NextAuth.js v5
- Vitest + Playwright

## 代码规范
- 所有函数必须有类型注解
- 使用 async/await,避免回调
- 错误处理使用 Result 模式,不抛异常
- UI 组件使用 cn() 工具合并 Tailwind 类名

## 常用命令
```bash
pnpm dev          # 启动开发服务器
pnpm test         # 运行单元测试
pnpm test:e2e     # 运行 E2E 测试
pnpm db:generate  # 生成 Drizzle 迁移
pnpm db:migrate   # 执行迁移

注意事项

  • 所有 API 路由必须使用 /api/v1 前缀
  • JWT token 24 小时过期,refresh token 7 天过期
  • 不要在组件中直接调用数据库,必须通过 service 层

**最佳实践 2:使用 `/init` 自动生成 CLAUDE.md**

Claude Code 提供了 `/init` 命令,可以自动分析项目并生成初始的 `CLAUDE.md`[^7]:

```bash
claude> /init

Claude 会:

  1. 读取 package.json / 等配置文件
  2. 扫描目录结构
  3. 识别技术栈和框架
  4. 生成包含项目概述、关键目录、常用命令的 CLAUDE.md

注意/init 生成的文件是一个起点,你需要根据实际项目情况补充团队约定、架构决策等它无法推断的内容。

最佳实践 3:分层 CLAUDE.md

对于 monorepo 或大型项目,可以在不同层级放置 CLAUDE.md^8

~/.claude/CLAUDE.md          # 全局:个人偏好、通用标准
./CLAUDE.md                  # 项目根:架构、技术栈
./packages/api/CLAUDE.md     # 子包:API 层的特定约定
./packages/web/CLAUDE.md     # 子包:前端层的特定约定

加载优先级:子目录 > 项目根 > 全局。这让 Claude 在工作的具体位置获得最相关的上下文。

5.2 如何提问:从模糊到精确

提问的质量直接决定了 Claude 的回答质量。以下是不同精确度的提问对比:

模糊提问(低效)

claude> 这个项目有点问题,帮我看看
# Claude 不知道从哪里开始,可能读取大量无关文件

中等精确度

claude> 登录功能有问题,帮我检查一下
# Claude 会搜索 auth 相关文件,但仍需探索

精确提问(高效)

claude>  src/app/api/auth/login/route.ts 中,POST 处理函数(约第 15 行)没有验证请求体。添加 Zod schema 验证,确保 email 是有效邮箱格式,password 至少 8 位。参考 src/lib/validation/user.ts 中的现有验证模式。
# Claude 直接定位到具体文件,理解约束条件,参考现有模式

高效提问的公式

[具体位置] + [当前行为] + [期望行为] + [约束/参考]

5.3 "探索-计划-编码"框架

对于复杂任务,采用分阶段的方法可以显著提高成功率^9

阶段 1:探索(Explore)

claude> 我需要给通知系统添加 Slack 渠道支持。先不要写代码,先探索 /src/notifications/ 目录,了解:1) 文件结构 2) 渠道基类接口 3) 现有渠道(Email、SMS)是如何注册的。只读模式,不要修改任何文件。

阶段 2:计划(Plan)

claude> 基于刚才的探索,制定一个详细的实施计划。需要:1) 创建哪些文件 2) 修改哪些文件 3) 遵循什么模式 4) 测试策略是什么。列出每一步的具体操作。

阶段 3:编码(Code)

claude> 按照计划实施。先创建 SlackChannel 类,然后注册到通知路由器,最后写测试。每完成一步告诉我结果。

这个框架的核心思想是:先理解,再计划,最后执行。它避免了 Claude 在不了解上下文的情况下盲目修改代码。


六、常见提问模板与预期响应

模板 1:"这个项目做什么?"

claude> 用一段话概括这个项目是做什么的。它的核心功能是什么?目标用户是谁?

预期响应

这是一个开源的在线协作白板应用,核心功能包括:

1. 实时多人协作:基于 WebSocket 的同步编辑
2. 丰富的绘图工具:便签、连线、图形、手绘
3. 导出功能:支持 PNG、SVG、PDF 导出
4. 自托管支持:提供 Docker 部署方案

目标用户是需要远程协作进行头脑风暴、流程图绘制、UI 原型设计的团队。

技术亮点:
- 使用 CRDT 算法处理并发编辑冲突
- Canvas 渲染引擎支持万级元素流畅操作
- 端到端加密选项保护敏感内容

模板 2:"技术栈是什么?"

claude> 详细分析这个项目的技术栈。包括:前端、后端、数据库、基础设施、开发工具。对每个主要技术选择,说明它的作用。

模板 3:"目录结构解释"

claude> 用树状图展示项目的目录结构(只显示到 2 级深度),然后解释每个主要目录的设计意图和包含的内容类型。

模板 4:"找到 X 功能的实现"

claude> 找到用户密码重置功能的完整实现。包括:1) 触发重置的 API 端点 2) 生成重置 token 的逻辑 3) 发送邮件的代码 4) 验证 token 并重置密码的逻辑 5) 对应的测试文件。列出每个文件的绝对路径和关键函数名。

模板 5:"这个函数/类是做什么的?"

claude> 解释 src/services/payment.ts 中的 `processRefund` 函数。包括:1) 输入参数和返回值 2) 核心逻辑步骤 3) 错误处理策略 4) 调用的外部服务 5) 可能的边界情况。

模板 6:"数据流/调用链分析"

claude> 追踪"创建订单"这个业务操作的完整调用链。从前端提交表单开始,到数据写入数据库结束。列出每个步骤涉及的文件、函数和数据转换。

模板 7:"找出所有使用 X 的地方"

claude> 找出项目中所有使用 `useAuth` hook 的地方。对每个使用点,说明:1) 文件路径 2) 使用方式(读取了哪些返回值)3) 使用场景(在哪个组件中,做什么用)。

模板 8:"生成架构文档"

claude> 基于代码库生成一份架构文档,包含:1) 系统架构图(用 Mermaid 语法)2) 核心模块说明 3) 数据模型关系 4) API 端点列表 5) 部署架构。保存为 docs/architecture.md。

七、大型代码库的处理策略

7.1 大型代码库的挑战

当代码库超过约 5 万行时,Claude Code 面临三个核心挑战^10

挑战 1:盲目编辑(The Blind Edit)

Claude 修改了一个文件,但没有看到它的调用者、测试或相关类型定义。修改在局部是正确的,但在全局是破坏性的。

挑战 2:上下文抖动(Context Thrashing)

Claude 读取了十个文件来理解问题,消耗了 60% 的上下文窗口。当它开始写代码时,已经忘记了最早读取的文件细节。

挑战 3:过度读取(The Over-read)

你让 Claude 修复一个模块的 bug,它却预先读取了整个目录树、所有相关测试、package.json、README 和三个配置文件。80% 的上下文被无关信息占据。

7.2 "放大-缩小"工作流

这是处理大型代码库的核心工作流^10

缩小模式(Zoomed-out):定向探索

在缩小模式下,Claude 只做一件事:建立对当前任务相关代码区域的心智模型。不编写任何代码。

claude> 我需要给通知系统添加 Slack 渠道。在写任何代码之前,先探索 /src/notifications/。告诉我:1) 文件结构 2) 渠道基类接口 3) 现有渠道(Email、SMS)是如何注册的。只读,不修改。

放大模式(Zoomed-in):精确执行

在放大模式下,Claude 基于缩小阶段建立的心智模型,精确地修改代码。

claude> 现在实现 Slack 通知渠道。严格按照 EmailChannel /src/notifications/channels/email.ts 中的模式。在 /src/notifications/channels/slack.ts 创建新文件。使用 /src/lib/slack.ts 中的 SlackWebhookClient 发送消息。

振荡原则:复杂任务需要多次放大-缩小循环。实现(放大)→ 运行测试(缩小看失败)→ 修复(放大)→ 检查集成(缩小)。这种振荡不是低效,而是可靠 AI 辅助开发的节奏。

7.3 外科手术式上下文加载

核心原则:给 Claude 每个步骤所需的最小上下文,让它按需请求更多^10

反模式(不要这样做)

claude> 先读取整个 src/ 目录了解项目结构,然后修复这个 bug
# 消耗大量上下文在探索上

正确做法

claude> 修复 src/auth.ts 中第 45 行的类型错误
# 只读取一个文件,如果需要更多 Claude 会请求

上下文预算心智模型

把上下文窗口想象成一个预算。每次文件读取都是一笔支出。每次推理都是一笔支出。每行生成的代码都是一笔支出。你的工作是确保支出是高价值的——直接与任务相关。

7.4 Monorepo 专项策略

Monorepo 将上下文管理的挑战放大了十倍^10

原则 1:包隔离

把每个包当作独立的代码库。从包根目录开始 Claude 的上下文,而不是 monorepo 根。

claude> 我们在 packages/api 中工作。入口点是 packages/api/src/index.ts。相关类型在 packages/shared/src/types/ 中,但只读取需要的类型文件,不要探索整个 shared 包。

原则 2:顺序修改,不要并行

跨包修改时,一次改一个包。先改共享类型,验证通过。再更新消费者,再次验证。

原则 3:维护依赖关系图

在根目录 CLAUDE.md 中维护一个简单的依赖关系图:

## 包依赖关系
- `packages/api` 依赖 `packages/shared``packages/db`
- `packages/web` 依赖 `packages/shared``packages/ui`
- 无其他跨包依赖

7.5 长会话管理策略

当会话超过 30 轮时,上下文质量会显著下降。以下是管理长会话的策略^6

策略 1:定期使用 /compact

每 10-15 轮运行一次 /compact,压缩对话历史。

策略 2:检查点模式

每完成一个逻辑子任务,让 Claude 总结当前状态:

claude> 总结一下我们目前完成了什么、什么还在进行中、还有什么待做。保存到 /tmp/progress.md。

策略 3:会话拆分

将大功能拆分为多个会话:

  • 会话 1:数据层修改
  • 会话 2:API 端点实现
  • 会话 3:前端组件
  • 会话 4:集成测试

策略 4:新鲜重启

当会话已经深入调试死胡同、Claude 明显在"挣扎"时,最好的策略是开一个新会话,用一个简洁的简报重新开始:

# 新会话
claude> 问题:用户随机被登出。已尝试:1) 检查 token 过期逻辑(无果)2) 检查 cookie 设置(无果)。怀疑:session 刷新中间件有竞态条件。请检查 /src/middleware/session-refresh.ts 找出根本原因。

7.6 使用 .claudeignore 排除无关文件

类似于 .gitignore,你可以创建 .claudeignore 文件来告诉 Claude Code 忽略某些文件和目录^11

# .claudeignore
node_modules/
dist/
build/
.coverage/
*.min.js
*.min.css
public/assets/
test/fixtures/

这可以防止 Claude 在探索时读取生成的文件、测试夹具、构建产物等无关内容。


八、实战案例:从零理解一个陌生项目

让我们通过一个完整的实战案例,展示如何使用本章介绍的技术快速理解一个陌生代码库。

场景:你刚加入一个团队,需要快速理解一个电商平台的代码库。

步骤 1:启动并初始化

cd ecommerce-platform
claude

# 如果项目没有 CLAUDE.md,先运行 /init
claude> /init

步骤 2:获取高层概览

claude> 分析这个项目的技术栈和架构。用 3 句话概括它是做什么的,然后列出主要技术选择和目录结构。

步骤 3:理解核心领域

claude> 这个电商平台有哪些核心领域模块?(如商品、订单、用户、支付等)每个领域的主要文件在哪里?

步骤 4:追踪一个完整业务流程

claude> 追踪"用户下单"的完整业务流程。从点击"购买"按钮开始,到订单创建成功结束。列出涉及的所有文件、API 端点、数据库表和外部服务调用。

步骤 5:理解数据模型

claude> 列出所有数据库表(或模型),并说明它们之间的关系。用 Mermaid ER 图语法表示。

步骤 6:识别关键约定和模式

claude> 这个项目使用了哪些设计模式?代码中有哪些反复出现的约定?(如错误处理、API 响应格式、认证检查等)

步骤 7:生成个人速查文档

claude> 基于以上分析,生成一份我个人的 onboarding 速查文档,保存为 ONBOARDING.md。包含:1) 项目一句话描述 2) 技术栈 3) 关键文件速查表 4) 常见任务的操作指南 5) 需要注意的坑。

通过这 7 个步骤,你可以在 30 分钟内建立起对一个陌生中大型项目的系统性理解,而传统方式可能需要数天。


九、常见错误与避免方法

错误后果正确做法
一次性让 Claude "理解整个代码库"上下文爆炸,什么都记不住给 Claude 地图(CLAUDE.md),让它按需探索
把完整文件粘贴到对话中消耗大量上下文引用文件路径,让 Claude 用工具读取
会话过长不清理上下文质量下降,回答变糟定期 /compact,任务完成后开新会话
让 Claude 做搜索而非推理浪费推理能力用 grep/fd 做搜索,Claude 做分析和决策
不提供约束条件Claude 做出不符合项目约定的选择在 CLAUDE.md 中记录约定,提问时明确约束
忽略验证步骤代码有 bug 未被发现每次修改后要求运行测试和类型检查
在 monorepo 中从根目录开始所有工作上下文被无关包污染从具体包的目录开始,明确指定工作范围

十、参考来源

本文档内容综合整理自以下权威来源:

  1. Claude Code 官方文档 - How Claude Code works — Agentic Loop、工具集和核心架构的官方说明
  2. Claude Code 官方文档 - Explore the context window — 上下文窗口的交互式模拟和机制说明
  3. Claude Code 官方博客 - Using CLAUDE.md files — CLAUDE.md 的使用方法和最佳实践
  4. Nate Ross - Claude Code Tutorials Part 3 — 使用 Claude Code 理解新代码库的系统方法
  5. eesel.ai - How to navigate any codebase with Claude Code — 代码库导航的核心技巧和高级工作流
  6. Kane.mx - Context Engineering Secrets for Claude Code — 上下文工程的四个关键模式
  7. Osvaldo Restrepo - Claude Code context limits — 上下文限制管理的实战经验
  8. Iceberg Lakehouse - Context Management Strategies — 完整的上下文管理策略指南
  9. Ralphable - Navigate 100K+ Line Codebases — 大型代码库处理的实战系统
  10. Hashbuilds - Handle Large Codebases — 大型项目的上下文管理策略
  11. John Lindquist - Claude Code Task Tool Deep Dive — Subagent 的深入技术解析
  12. AGI In Progress - Dissecting Claude Code — Claude Code 的技术架构深度分析
  13. Claude Code 官方文档 - Subagents — 子代理的官方文档
  14. Claude Code 官方文档 - CLI reference — 命令行参考
  15. CometAPI - Managing Claude Code's Context — 上下文管理的实用手册

十一、本章速查卡

我想做...命令/操作
让 Claude 了解项目先运行 /init 生成 CLAUDE.md,然后补充团队约定
分析技术栈分析这个项目的技术栈,列出主要框架和工具
解释目录结构解释这个项目的目录结构和设计模式
找到功能实现找到 [功能] 的完整实现,列出涉及的文件
追踪数据流追踪 [操作] 的完整调用链,从入口到数据库
理解单个函数解释 [文件] 中 [函数] 的功能、参数和返回值
并行探索多个模块使用 subagent 并行探索 [模块A] 和 [模块B]
查看上下文使用/context
压缩对话历史/compact [保留重点]
排除无关文件创建 .claudeignore 文件
探索但不修改先不要写代码,先探索...
切换任务时/clear 或开新会话
引用文件@path/to/file
精确修改[文件] + [当前行为] + [期望行为] + [约束]