Claude Code 

是 Anthropic 开发的命令行 AI 编程代理工具,它把 Claude 模型接入本地开发环境,让 Claude 能够读取项目、搜索代码、编辑文件、运行命令、执行测试,并在开发者监督下完成代码理解、修改、调试和自动化任务。

接下来我将重点介绍Claude code 的构造流程和流程中涉及到的功能介绍,方便大家快速理解和上手:

一、Claude code 是如何构造上下文的

启动 Claude Code
  ↓
加载系统级/会话级基础上下文
  ↓
加载项目记忆、规则、skills技能描述、MCP 工具名等
  ↓
用户输入任务
  ↓
Claude 通过搜索/读取/执行命令主动收集上下文
  ↓
工具结果进入上下文,影响下一步决策
  ↓
上下文变大后,清理旧工具输出或 compact 总结

1.1 、CLAUDE.md 文件介绍

** CLAUDE.md 文件是给 Claude Code看的项目说明书**。

它会在 Claude Code 进入项目时被自动加载到上下文里,让 Claude 一开始就知道这个项目的背景、规则和工作方式。

CLAUDE.md = 项目长期上下文 + 工作规则 + 操作说明 

它常用来写这些内容:

项目是什么 
技术栈是什么 
目录结构怎么理解 
用什么包管理器 
怎么运行项目 
怎么跑测试 
代码风格是什么 
哪些文件不能改 
代码提交/拉取有什么要求 
常见坑和注意事项 

比如:

# Project Instructions  项目结果信息
## 项目说明
这是一个 Next.js + Prisma 项目,主要代码在 src/ 目录。
​
## 命令
- 安装依赖:pnpm install
- 启动开发服务:pnpm dev
- 运行测试:pnpm test
- 类型检查:pnpm typecheck
​
## 编码规则
- 使用 pnpm,不要使用 npm 或 yarn。
- 修改业务代码后必须运行相关测试。
- 不要修改 generated/ 目录下的文件。
- API 返回格式统一使用 src/lib/response.ts 里的 helper。
​
## 注意事项
- 数据库 schema 修改后必须生成 migration。
- 前端组件优先使用 components/ui 里的现有组件。

Claude Code 看到这些后,后续做任务时就会受它影响。

例如你说:

帮我修复登录 bug 

1.2、Claude code 规则文件介绍

CLAUDE.md = 项目的主上下文 / 项目记忆入口

全局规则:整个项目都要遵守,全局规则适合放“任何地方都适用”的要求。 路径规则:只有处理某些目录/文件时才要遵守

区别是在规则md文件中是否包含:


---

paths:

  • "src/components/*/.tsx"

  • "src/pages/*/.tsx"

---

#Frontend Rules 前端规则

  • 优先使用现有组件库。

  • 不要新增全局 CSS。


无 paths 的 .claude/rules/.md = 全局规则文件 有 paths 的 .claude/rules/.md = 路径规则文件

为什么要区分

因为上下文空间有限,规则越多,占用越多。

如果所有规则都全局加载,Claude 可能一上来就看到一大堆东西:

前端规则 
后端规则 
数据库规则 
部署规则 
测试规则 
安全规则 
文档规则 

但它这次可能只是改一个按钮,那数据库和部署规则就很浪费,还可能干扰判断。

所以更合理的是:

通用规则 → 全局加载 局部规则 → 按路径加载

1.3、CLAUDE.md和规则文件的区别
CLAUDE.md = 项目总说明书 .claude/rules/*.md = 拆分出来的规则卡片 

它们都会进入 Claude Code 的上下文,但用途和加载方式不一样。

对比项CLAUDE.md.claude/rules/*.md
核心作用放项目整体说明、长期上下文、总规则放更细的专题规则
适合内容项目介绍、技术栈、目录说明、常用命令、总体约定测试规则、API 规则、前端规则、数据库规则、安全规则
文件位置常见是项目根目录 CLAUDE.md,也可以是 .claude/CLAUDE.md.claude/rules/ 目录下的多个 .md 文件
加载方式通常启动时加载;子目录里的 CLAUDE.md 可能在读取相关子树时加载无 paths 的启动时加载;有 paths 的在匹配文件被读取时加载
组织方式一个主文件,也可以用 @path 导入其他文件天然按多个文件拆分,每个文件讲一个主题
适用项目小项目、总纲、关键说明中大型项目、规则多、不同目录规则不同

1.4、 skills 流程与机制

Claude Code 平时不会把所有 skill 的完整内容都塞进上下文,而是先看它们的名称和描述,等判断“这个任务需要它”时,再把完整 SKILL.md 加载进当前对话。

整体调用流程

发现 skill
  ↓
读取 skill 名称、description、when_to_use 等元信息
  ↓
把可自动调用 skill 的描述放进上下文
  ↓
用户输入任务
  ↓
Claude 根据任务和 skill 描述判断是否调用
  ↓
调用 skill 后,完整 SKILL.md 内容进入对话上下文
  ↓
Claude 按 skill 里的说明执行任务

1. Claude Code 先发现有哪些 skills

skills 可以放在几个地方:

个人级:
~/.claude/skills/<skill-name>/SKILL.md
​
项目级:
项目根目录/.claude/skills/<skill-name>/SKILL.md
​
插件级:
<plugin>/skills/<skill-name>/SKILL.md
​
企业级:
由组织托管配置提供

例如:

.claude/skills/code-review/SKILL.md
.claude/skills/deploy/SKILL.md
.claude/skills/api-conventions/SKILL.md

每个 skill 本质上是一个目录,入口文件必须叫:

SKILL.md 

目录名通常就是 slash command 名称:

.claude/skills/code-review/SKILL.md 

对应:

/code-review 

2. 启动时通常只加载“描述”,不加载完整正文

一个 SKILL.md 大概长这样:

---
name: code-review
description: Use when reviewing code changes for bugs, regressions, security risks, and missing tests.
---
​
Review the code with this process:
​
1. Inspect the diff.
2. Look for correctness issues.
3. Check test coverage.
4. Report findings by severity.

这里分两部分:

frontmatter:
告诉 Claude 什么时候使用这个 skill。
​
markdown 正文:
真正调用 skill 后,Claude 要遵守的详细步骤。

默认情况下,Claude Code 会把这些信息放进上下文:

skill 名称
description
when_to_use
部分调用配置

但不会一开始加载完整正文。完整正文只有在 skill 被调用时才进入上下文。

这就是为什么 skill 适合放长流程、长规范、长参考资料:

CLAUDE.md:适合一直要知道的规则
Skill:适合需要时才加载的流程/手册/检查清单

3. Skill 有两种调用方式

第一种是你手动调用:

/code-review 

或者带参数:

/code-review src/auth/login.ts 
/deploy staging 

第二种是 Claude 自动调用。

比如有一个 skill:

--- name: explain-code description: Use when explaining how code works, teaching a codebase, or answering "how does this work?" --- 

你问:

这个登录模块是怎么工作的? 

Claude 看到你的请求和 description 匹配,就可能自动调用 explain-code。

所以:

手动调用 = 你用 /skill-name 明确触发 自动调用 = Claude 根据 description 判断触发 

12. 和 CLAUDE.md / rules 的核心区别

CLAUDE.md:
启动时加载,适合项目长期总规则。
​
.claude/rules/*.md:
规则型上下文,可全局或按路径加载。
​
skills:
按需加载的流程、手册、检查清单、参考资料。

你可以这样判断:

Claude 永远都应该知道?
→ 放 CLAUDE.md
​
某类文件要遵守?
→ 放 .claude/rules/*.md
​
某个流程需要时才用?
→ 放 skill

例如:

“项目使用 pnpm”
→ CLAUDE.md
​
“src/components 下必须使用设计系统”
→ .claude/rules/frontend.md
​
“发版流程:测试、构建、打 tag、生成 changelog”
→ .claude/skills/release/SKILL.md

一句话总结

Claude Code 的 skill 调用机制是:

先把 skill 的名称和描述作为轻量上下文暴露给 Claude;当用户用 /skill-name 手动触发,或 Claude 根据 description/when_to_use/paths 判断任务相关时,再把完整 SKILL.md 注入当前会话,让 Claude 按其中的流程和约束执行。

1.5、Claulde code 的 Auto memory

自动积累经验 = 自动写笔记 + 下次自动读取笔记

Claude 自动积累经验,就是 Claude Code 把它在项目中学到的长期有用信息写成本地 Markdown 记忆文件;以后每次进入这个项目时,再把 MEMORY.md 的简短索引加载进上下文,必要时读取更详细的主题笔记。

1. Claude Code 官方文档说,Auto memory 主要记这些类型

构建命令
调试经验
架构笔记
代码风格偏好
工作流习惯
你对 Claude 的纠正
项目里的长期模式

它的判断标准大概是:

这条信息以后会不会再次有用? 

适合被记住的内容通常有几个特点:

长期有效
项目相关
会反复用到
能避免以后犯错
不是一次性临时信息
不是敏感 secret

比如适合记:

这个项目必须用 pnpm,不要用 npm。
API 测试前要启动本地 Redis。
数据库 migration 不允许直接删除字段。
登录模块不要再用 oldAuthHelper。
这个项目的 E2E 测试需要先运行 docker compose up -d。

不太适合记:

这次临时先跳过测试。
我今天下午要改这个 bug。
这个 token 是 xxx。
这个分支暂时有个报错。
刚才那个文件第 32 行有问题。

2. 它存在哪里

Auto memory 存在本机:

~/.claude/projects/<project>/memory/ 

里面大概是:

~/.claude/projects/<project>/memory/
├── MEMORY.md
├── debugging.md
├── api-conventions.md
└── patterns.md

其中:

MEMORY.md
= 入口文件 / 索引文件

debugging.md、api-conventions.md 等
= 具体主题的详细笔记 

<project> 通常根据 Git 仓库推导。同一个 Git 仓库下的 worktree 和子目录会共享同一个 auto memory 目录。

3. 下次怎么加载

每次 Claude Code 开启新会话时,会加载:

MEMORY.md 的前 200 行
或者前 25KB
两者取更小的那个 

也就是说,MEMORY.md 不会无限塞进上下文。

更详细的主题文件,例如:

debugging.md
patterns.md
api-conventions.md 

默认不会启动时全部加载。Claude 需要时,会用普通文件读取工具按需读取。

所以它的设计是:

启动时加载简短索引 
需要时再读取详细笔记 

这样可以节省上下文窗口。

4. 它什么时候读写

如果你在 Claude Code 界面看到:

Writing memory 

表示 Claude 正在写入记忆。

如果看到:

Recalled memory 

表示 Claude 正在读取记忆。

你也可以运行:

/memory 

查看当前加载了哪些 CLAUDE.md、规则文件,以及打开 auto memory 文件夹。

5. 怎么开启或关闭

官方文档说 Auto memory 默认开启,要求 Claude Code v2.1.59 或更高版本。

检查版本:

claude --version 

关闭方式可以用 /memory 里的开关,也可以在设置里写:

{  "autoMemoryEnabled": false } 

或者用环境变量:

CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 
1.6、MCP 工具

MCP 工具可以理解成:

让 Claude Code 连接外部系统的标准接口 

全称是:

Model Context Protocol 

官方把 MCP 类比成 AI 应用的 USB-C 接口:不同工具、数据库、API、文档系统、设计系统,都可以通过统一协议接到 Claude Code 上。

1. MCP 是干嘛的

Claude Code 默认能做这些:

读写本地文件
运行 shell 命令
搜索代码
修改代码
运行测试

但是它默认不一定知道你外部系统里的东西,比如:

GitHub issue
Jira ticket
PostgreSQL 数据
Slack 消息
Figma 设计稿
Sentry 错误日志
内部 API 文档
公司知识库

MCP 的作用就是把这些外部系统接进来。

接入以后,你可以这样问 Claude Code:

读取 Jira issue ENG-4521,按里面的需求实现功能。 
查一下 Sentry 最近的登录报错,然后定位代码问题。 
读取 Figma 里的登录页设计,帮我实现对应组件。 
查询 PostgreSQL,找出最近 10 条失败订单记录。 

Claude Code 就可以通过 MCP server 去访问这些系统,而不是让你手动复制粘贴信息。

2. MCP 里面有三个核心能力

MCP server 通常可以暴露三类东西:

Tools 
Resources 
Prompts 

Tools:工具

工具是 Claude 可以主动调用的动作。

例如 GitHub MCP server 可能提供:

get_issue 
list_pull_requests 
create_pull_request 
comment_on_issue 

PostgreSQL MCP server 可能提供:

query 
list_tables 
describe_schema 

Figma MCP server 可能提供:

get_design 
list_components 
export_assets 

在 Claude Code 里,MCP 工具通常会被命名成类似:

mcp__github__get_issue 
mcp__postgres__query 
mcp__figma__get_design 

格式大概是:

mcp__服务器名__工具名 

Resources:资源

资源是 Claude 可以读取的外部内容,类似文件。

比如:

GitHub issue
数据库 schema
API 文档
设计稿节点
知识库页面

在 Claude Code 里,你可以用 @ 引用 MCP resource:

请分析 @github:issue://123 并给出修复方案 
对比 @postgres:schema://users 和 @docs:file://database/user-model 

这类资源会被作为附件放进当前上下文。

Prompts:提示词 / 命令

MCP server 还可以暴露 prompts,这些 prompts 在 Claude Code 里可以变成 slash command。

例如:

/mcp__github__list_prs
/mcp__github__pr_review 456
/mcp__jira__create_issue "登录失败" high

这相当于外部 MCP server 给 Claude Code 增加了一些命令模板。

3. MCP 在 Claude Code 里的工作流程

大概是这样:

配置 MCP server
  ↓
Claude Code 启动时连接 MCP server
  ↓
MCP server 告诉 Claude:我有哪些 tools/resources/prompts
  ↓
用户提出任务
  ↓
Claude 判断需要哪个外部工具
  ↓
请求调用 MCP tool
  ↓
权限确认
  ↓
MCP server 执行动作
  ↓
结果返回给 Claude
  ↓
Claude 继续分析、写代码、验证

举例:

用户:根据 GitHub issue #123 修复 bug 

Claude 可能会:

1. 调用 mcp__github__get_issue 读取 issue
2. 搜索本地代码
3. 修改相关文件
4. 运行测试
5. 调用 mcp__github__comment_on_issue 回复处理结果

4. MCP 和上下文的关系

MCP 不是一上来把所有外部数据都塞进上下文。

Claude Code 官方文档提到,现在默认有 MCP Tool Search 机制:

启动时通常只加载 MCP 工具名称
工具详细 schema 延迟加载
真正用到哪个工具,哪个工具才进入上下文

这样可以节省上下文窗口。

否则如果你接了很多 MCP server,比如:

GitHub
Jira
Slack
Figma
Postgres
Sentry
Linear
Notion

每个 server 又有几十个工具,全部加载会非常占 token。

所以 MCP 的上下文策略是:

先知道有哪些工具
需要时再加载工具定义
调用后把结果放进上下文

这和 skills 很像:

Skill:
先加载名称和 description,需要时加载完整 SKILL.md。
​
MCP:
先加载工具名,需要时加载工具 schema 和调用结果。

5. MCP 怎么配置

Claude Code 支持几种作用域:

local
project
user

local

只对当前项目、当前用户生效,不共享。

适合:

个人私有服务
带敏感 token 的配置
临时实验 MCP

命令示例:

claude mcp add my-server /path/to/server 

project

项目级配置,会写入项目根目录:

.mcp.json 

适合团队共享。

示例:

claude mcp add shared-server --scope project /path/to/server 

.mcp.json 大概长这样:

{
  "mcpServers": {
    "shared-server": {
      "command": "/path/to/server",
      "args": [],
      "env": {}
    }
  }
}

项目级 MCP 配置通常可以提交到 Git,让团队成员都能用同一套 MCP server。

user

用户级配置,跨项目可用,但只属于你自己。

适合:

个人常用工具
跨项目的 GitHub/Jira/Notion MCP
本机开发辅助工具

示例:

claude mcp add my-user-server --scope user /path/to/server 

6. MCP server 的连接方式

常见 MCP server 有几种运行方式:

stdio
SSE
HTTP

stdio

本地启动一个命令行进程,通过标准输入输出通信。

适合:

本地工具
本地数据库辅助
本机脚本
文件系统相关工具

SSE / HTTP

连接远程服务。

适合:

云服务
公司内部 API
远程 MCP server
SaaS 工具

配置里可能会有:

{
  "mcpServers": {
    "api-server": {
      "type": "sse",
      "url": "${API_BASE_URL}/mcp",
      "headers": {
        "Authorization": "Bearer ${API_KEY}"
      }
    }
  }
}

Claude Code 支持环境变量展开,所以敏感值通常不要直接写死在 .mcp.json 里。

7. 权限和安全

MCP 很强,所以也有风险。

因为 MCP 工具可能会:

读取数据库
发 GitHub 评论
创建 PR
访问内部系统
修改远程数据
读取敏感文档

所以 Claude Code 会对 MCP 工具调用做权限控制。

权限名通常类似:

mcp__github
mcp__github__get_issue
mcp__postgres__query

含义是:

mcp__github
= 允许 GitHub server 的所有 MCP 工具
​
mcp__github__get_issue
= 只允许 GitHub server 里的 get_issue 工具

官方文档特别提到:MCP 权限不支持 * 通配符。

也就是说:

正确:
mcp__github
​
正确:
mcp__github__get_issue
​
不推荐/无效:
mcp__github__*

安全建议:

只给必要权限
数据库 MCP 尽量只读
project 级 .mcp.json 不要提交密钥
敏感 token 用环境变量
高风险工具不要自动批准
团队共享 MCP 要经过审查

8. MCP 和 Claude.md / rules / skills 的区别

你前面问过 CLAUDE.md、规则文件、skills。它们和 MCP 的区别可以这样看:

CLAUDE.md
= 告诉 Claude 这个项目是什么、有什么长期规则。
​
.claude/rules/*.md
= 告诉 Claude 处理某类文件时要遵守什么规范。
​
skills
= 给 Claude 一套按需加载的工作流程/操作手册。
​
MCP
= 给 Claude 接入外部工具、数据源和 API 的能力。

举例:

CLAUDE.md:
这个项目使用 pnpm。
​
rules:
src/components 下必须使用设计系统组件。
​
skills:
发布版本时执行 release checklist。
​
MCP:
连接 GitHub、Jira、Postgres、Figma、Sentry,让 Claude 能读取和操作它们。
​

9. 什么时候需要 MCP

当你发现自己经常这样做时,就适合用 MCP:

从 Jira 复制需求给 Claude
从 GitHub 复制 issue 给 Claude
从数据库复制查询结果给 Claude
从 Sentry 复制报错给 Claude
从 Figma 截图/复制设计给 Claude
从内部文档复制接口说明给 Claude

MCP 的目标就是减少这种复制粘贴:

你不用搬运上下文;
Claude 自己通过工具去取。

一句话总结

MCP 工具就是 Claude Code 连接外部系统的标准工具接口。它让 Claude 不只是在本地代码里工作,还能访问 GitHub、Jira、数据库、Figma、Slack、Sentry、内部 API 等外部上下文,并通过工具调用读取或操作这些系统。

最关键的理解是:

CLAUDE.md / rules / skills 是“给 Claude 的说明”;
MCP 是“给 Claude 的外部能力”。

1.7 Claude 是如何通过搜索/读取/执行命令主动收集上下文

Claude Code 不会一开始就把整个项目全部读进上下文,而是会根据你的任务,自己决定要搜索哪些文件、读取哪些代码、运行哪些命令,然后把结果放进当前上下文里继续分析。

也就是:

用户给任务
  ↓
Claude 判断需要哪些信息
  ↓
调用工具搜索 / 读取 / 执行命令
  ↓
工具结果返回给 Claude
  ↓
这些结果进入上下文
  ↓
Claude 基于新上下文继续下一步
​

1. 搜索:先找相关位置

比如你说:

帮我修复登录失败的问题 

Claude 可能不会马上改代码,而是先搜索:

login
auth
signin
password
useAuth

它可能用类似这些工具/命令:

rg "login"
rg "useAuth"
rg "signin"

目的不是解决问题,而是先找到:

登录页面在哪
认证逻辑在哪
接口在哪
测试在哪
错误处理在哪

搜索结果会变成上下文的一部分。

2. 读取:再看具体文件内容

搜索到相关文件后,Claude 会读取具体文件。

比如它发现:

src/pages/login.tsx
src/lib/auth.ts
src/api/auth/login.ts
tests/login.test.ts

然后读取这些文件内容。

这时上下文里就多了:

登录页面代码
auth helper 代码
登录 API 代码
相关测试代码

Claude 才能判断:

bug 是前端表单问题?
还是 API 返回格式问题?
还是 token 存储问题?
还是测试期望不对?

3. 执行命令:用真实结果验证判断

Claude 还会运行命令来收集事实。

比如:

pnpm test
pnpm typecheck
pnpm lint
git status
git diff

或者针对某个测试:

pnpm test login 

这些命令输出也会进入上下文。

例如测试报错:

Expected 200, received 401 

或者类型错误:

Property 'session' does not exist on type User 

Claude 就会根据这些真实输出继续判断,而不是凭感觉改。

举一个完整例子

你说:

帮我修复用户登录后跳转失败的问题 

Claude 可能这样主动收集上下文:

1. 搜索 login / redirect / callback
2. 读取登录页、auth callback、router 相关文件
3. 查看 package.json,确认项目框架和命令
4. 运行相关测试或类型检查
5. 根据报错定位问题
6. 修改代码
7. 再运行测试验证

过程中每一步都会让上下文变丰富:

最开始上下文:
用户任务 + 项目规则

搜索后:
用户任务 + 项目规则 + 相关文件列表

读取后:
用户任务 + 项目规则 + 相关文件列表 + 具体源码

运行命令后:
用户任务 + 项目规则 + 源码 + 测试结果/报错信息

这和普通聊天最大的区别

普通聊天模型通常只能用你粘贴给它的内容:

你不贴代码,它就不知道代码。 

Claude Code 可以自己去项目里找:

你不给文件路径,它可以搜索。
你不给测试报错,它可以运行测试。
你不解释目录结构,它可以读取项目文件。

所以它不是单纯“回答问题”,而是在不断做:

假设 → 搜索证据 → 读取代码 → 执行验证 → 更新判断 

注意一点

“主动收集上下文”不等于它什么都能随便做。

通常仍然受这些限制:

只能访问当前工作区/允许范围内的文件
执行命令可能需要权限确认
不会自动知道没有读取过的文件内容
命令输出太长时可能会被截断或总结
上下文窗口仍然有限

一句话总结

Claude 通过搜索/读取/执行命令主动收集上下文 的意思就是:

Claude Code 会像开发者一样,先在项目里找线索、读相关代码、跑命令看真实结果,再把这些信息加入上下文,基于事实继续分析和修改,而不是一开始凭空猜。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐