如果你已经把 Claude Code 当成一个“能聊天的终端助手”,经常在项目里让它改几行代码、写个测试、解释报错,那你大概率只用到它 10% 的能力。
我见过很多团队出现同一个现象:新打开一个会话,Claude Code 好像完全“失忆”了。项目背景要重新描述一遍,技术栈要再说一遍,代码规范要再贴一遍,甚至刚讨论过的接口约定,换一个会话它就忘得干干净净。问题不在模型,而在配置:你没有把 Claude Code 的“记忆、技能、工具、任务编排”这四件事做起来。
这篇文章不打算讲提示词技巧,而是给你一套可以直接抄的进阶配置清单,围绕 CLAUDE.md、Skills、MCP、Fork、Subtask 五个模块展开。真正拉开使用效率差距的,往往就是这些配置。文章会从“为什么要配”、到“每个配置怎么写”、再到“怎么组合起来用”完整走一遍,全程带有可直接复制的配置示例。读完之后,你可以对照自己的项目,在 15 分钟内完成第一版工程化配置。
1. 为什么说 Claude Code 的效率瓶颈在配置,不在对话
先看一个最常见的挫败场景:
你在项目里维护一个 Spring Boot + Vue 的仓库,团队约定接口返回结构统一是 { code, message, data },日志必须用 @Slf4j,前端组件不直接写 any。第一次会话,Claude Code 做的事是对的。第二天你重新进入项目,问它“帮我在用户模块加一个接口”,它可能生成一个直接返回字符串的接口,完全不符合团队规范。
这是模型理解能力的问题吗?不是。是记忆没有加载。
Claude Code 本质上是一个“带工具的模型终端”:它的上下文窗口每次都重新开始。如果你没有通过 CLAUDE.md 把项目规范持久化,它每次都要靠对话临时猜;如果你没有通过 Skills 把“一次性的正确做法”沉淀成技能,它每次都要重新发明轮子;如果你没有通过 MCP 让它直接操作项目数据和服务,它就只能在文件系统里“盲人摸象”;如果你没有通过 Fork 和 Subtask 管理会话分支和子任务,几十轮对话之后,上下文会越来越乱,一次偏离就会污染整个任务。
所以我的判断很直接:对于已经在日常使用 Claude Code 的开发者,学习配置的投入产出比,远高于继续学提示词技巧。 配置解决的是“稳定复现问题解决过程”,提示词解决的是“单次激发模型表现”。前者才是工程化。
针对这个目标,我整理了 14 个进阶配置,按五大模块归类如下:
| 模块 | 配置项 | 主要解决什么问题 |
|---|---|---|
| CLAUDE.md | 全局记忆文件 | 所有会话共享的个人偏好 |
| CLAUDE.md | 项目记忆文件 | 项目背景、命令、规范 |
| CLAUDE.md | 目录级记忆文件 | 分层加载不同场景上下文 |
| CLAUDE.md | 文档与变量引用 | 让 Claude 自动读取相关文档 |
| Skills | 技能目录结构 | 把可复用流程沉淀成技能 |
| Skills | SKILL.md 元数据 | 定义技能名称、描述、触发时机 |
| Skills | 技能脚本与模板 | 让技能能执行命令、生成代码 |
| Skills | 技能的触发方式 | 自动触发与手动调用 |
| MCP | stdio 本地工具接入 | 让 Claude 直接运行本地工具 |
| MCP | 远程/HTTP 服务接入 | 跨服务访问数据与能力 |
| MCP | 项目级 .mcp.json | 配置随仓库分发,团队共享 |
| MCP | 工具权限与审批 | 避免危险操作被自动执行 |
| Fork | 会话分叉与恢复 | 在历史会话上开分支,安全实验 |
| Subtask | 子代理定义与任务拆分 | 用子任务隔离上下文,降低复杂度 |
后面每个模块都会给出实际配置示例。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 先把五个核心概念讲明白
2.1 CLAUDE.md:给 Claude Code 的“长期记忆”
CLAUDE.md 是一个 Markdown 文件,核心作用是让 Claude Code 在启动会话时自动加载其中的内容。你可以把它理解成一份“项目入职手册”:里面有项目的技术栈、目录结构、常用命令、代码规范、注意事项等。
没有 CLAUDE.md 的 Claude Code,像一个刚入职但是不看文档的工程师;有 CLAUDE.md 的 Claude Code,像一个已经读过项目 README、开发规范、启动文档的工程师。差别就是这么大。
2.2 Skills:把“做法”沉淀成可复用技能
Skills 是 Claude Code 提供的技能包机制。一个 Skill 通常是一个目录,里面有一个 SKILL.md 文件作为技能说明书,还可以附带脚本、模板、参考文档等资源。
与普通对话不同的是,Skill 自带“触发条件”。当 Claude 判断当前任务匹配某个 Skill 的描述时,它会自动加载这个 Skill 的内容。你不需要在每次会话里重新描述工作流,只需要说“按我们的代码审查流程检查一下”。
2.3 MCP:让 Claude Code 连接外部工具和数据
MCP(Model Context Protocol)是一个标准化协议,用于把外部工具接入到模型应用中。Claude Code 支持通过 MCP 连接文件系统、数据库、内部 API、浏览器工具等。
简单来说,没有 MCP 的 Claude Code,只能读写你给它的文件;有了 MCP 之后,它可以直接调用一个数据库查询工具、一个消息推送接口、一个文档搜索服务。工具的边界,就是它能力的边界。
2.4 Fork:给会话制作“分支”
Fork 指的是在历史会话的某个节点上创建新的会话分支。如果你实验过一条修改路径,发现方向错了,不需要重来,可以直接回到之前的分叉点,重新走另一条路。
这个能力对编码尤其重要:你让 Claude 试了一版重构,但发现改动太大,可以 Fork 到重构前的位置,用另一套更保守的方案继续;两条路径互不污染。
2.5 Subtask:用子代理隔离复杂任务
Subtask 在 Claude Code 中通常对应“子代理”机制。你可以定义多个职责单一的 subagent,例如“代码审查员”“API 设计员”“测试生成员”。当主任务复杂时,Claude Code 会通过 Task 工具把这些子任务分派给对应的子代理执行。
它的价值在于上下文隔离。如果所有事情都堆在同一个上下文里,几十轮对话后,重要信息会被无关内容冲淡。拆成 Subtask 后,每个子代理只关注自己的职责,主会话只负责汇总结果。
3. 环境准备与基础配置
在开始之前,确认你已经安装了 Claude Code 命令行工具。本文的配置方式大多是文件写入,只要你的命令行能正常运行 claude 命令即可。
建议先检查版本:
bash复制claude --version
如果版本过旧,部分能力可能不可用。升级方式请参考官方文档,通常通过包管理器即可完成。版本细节以你实际安装的版本为准,本文内容不绑定具体版本号。
有几个目录你需要知道:
- 用户级配置目录:
~/.claude/ - 项目级配置目录:
.claude/(相对项目根目录) - 会话配置:项目根目录下的
.mcp.json、CLAUDE.md
我的建议是先在空目录里建好下面这些文件,跑通一个最小配置,再扩展到真实项目。
4. CLAUDE.md 的三层记忆配置
4.1 全局记忆:让每个项目都继承你的偏好
全局记忆文件路径为 ~/.claude/CLAUDE.md。这里的配置对所有项目生效,适合放你个人的通用偏好,例如:
markdown复制# 全局偏好
- 回答问题先给结论,再给解释
- 代码注释使用中文
- 默认不要输出无意义的问候语
- 修改文件前先展示影响范围
- 不使用容易混淆的缩写
写完后,重启 Claude Code 会话即可生效。你可以在任意会话中问“你知道我的全局规范吗?”来验证。
4.2 项目记忆:项目上下文的主入口
项目根目录下的 CLAUDE.md 是使用频率最高的记忆文件。它应该包含这个项目最核心、最不可变的信息。一个比较稳妥的结构如下:
markdown复制# 项目:云商管理后台
## 技术栈
- 后端:Spring Boot 3.2,Java 17
- 前端:Vue 3 + TypeScript + Vite
- 数据库:MySQL 8,Redis 7
## 常用命令
- 后端构建:./mvnw -q clean package
- 前端启动:npm run dev
- 测试:./mvnw test
## 代码规范
- 接口返回统一使用 R 类:R.success(data), R.fail(code, msg)
- 数据库字段禁用驼峰,使用下划线
- 所有新增接口必须在 controller 包中,并标注 @Tag
注意,CLAUDE.md 不要写成一本百科全书。它的定位是“高频使用的关键约束”,不是“完整文档库”。如果写得太长,反而会让重要信息淹没在细节里。
4.3 目录级记忆:按场景精细化加载
Claude Code 也支持在工作目录或子目录中放置 CLAUDE.md。当 Claude 的工作范围进入某个子目录时,它会自动加载该目录及其父级目录中相关的记忆文件。
例如,在 backend/CLAUDE.md 中可以写后端特有规范:
markdown复制# 后端服务特有规范
- Service 层必须面向接口编程,禁止直接 new 实现类
- 所有外部 API 调用必须走 Feign Client
- 事务方法必须显式标注 @Transactional(rollbackFor = Exception.class)
有了目录级记忆之后,你不需要在项目根目录里堆砌所有细节,分层管理会更清晰。
4.4 让 CLAUDE.md 引用外部文档
除了直接写入内容,CLAUDE.md 中还可以使用目录或文档引用,让 Claude Code 主动读取指定的文档。比如在项目根目录的 CLAUDE.md 中加入:
markdown复制## 参考文档
- 团队接口规范:请阅读 docs/api-guideline.md
- 数据库设计说明:请阅读 docs/database-design.md
当任务涉及接口设计或数据库变更时,Claude 会优先读取这些文档再动手。这比把文档全部复制进 CLAUDE.md 更高效。
5. Skills:把常用工作流变成技能包
5.1 技能目录的标准结构
一个技能通常放在 ~/.claude/skills/<skill-name>/(用户级)或 .claude/skills/<skill-name>/(项目级)目录下。最小结构如下:
text复制backend-review/
├── SKILL.md
└── scripts/
└── check_controller.sh
SKILL.md 是技能的唯一入口。它的文件头带有元数据字段,例如 name 和 description。description 是 Claude 判断是否触发该技能的关键,建议写得具体一些,说明“在什么条件下使用”。
5.2 创建第一个 Skill:后端接口审查
下面是一个项目级 Skill 的示例,用于后端 Controller 接口审查:
markdown复制---
name: backend-review
description: 审查 Spring Boot Controller 是否符合团队接口规范。当用户要求检查接口、审查 Controller、校验 API 规范时使用。
---
你是一名资深 Java 后端架构师。执行接口审查时:
1. 先读取项目 CLAUDE.md 中的接口规范
2. 找到用户指定或最近修改的 Controller 文件
3. 检查返回结构是否为 R 类,错误是否使用统一异常
4. 检查是否缺少参数校验注解
5. 输出问题清单和修改建议
将这个文件保存为 .claude/skills/backend-review/SKILL.md。之后在项目里说“帮我审查一下用户模块的 Controller”,Claude 会自动加载这个技能并执行。
5.3 带脚本的 Skill:让技能可以执行命令
如果技能需要执行命令,可以在 SKILL.md 中指示 Claude 调用同目录下的脚本。例如先创建脚本文件:
bash复制#!/usr/bin/env bash
# 文件路径:.claude/skills/backend-review/scripts/check_controller.sh
# 用法:check_controller.sh <controller-file>
FILE="$1"
echo "检查文件:$FILE"
grep -n "public R<" "$FILE" || echo "未发现 R<T> 返回类型"
然后在 SKILL.md 中补充说明:
markdown复制执行审查前,先运行 scripts/check_controller.sh 检查目标文件:
- 脚本参数为目标 Controller 文件路径
- 根据脚本输出判断是否存在返回类型不符合规范的文件
这样,Skill 就从一个“提示模板”升级为“可执行的工程工具”。
5.4 技能的自动触发与手动调用
Claude Code 的技能触发方式是描述匹配,而不是输入特定命令。所以 description 字段必须覆盖真实场景中的常见说法,比如“审查接口”“检查 API”“Controller 规范”,这样才容易被准确触发。
如果你明确知道某个技能需要执行,也可以在对话中直接说“使用 backend-review 技能”。当前的交互模式通常会支持按名称指定技能,你可以把它当成一个手动开关。
实际项目中,我建议技能只做“单一职责”:一个技能负责代码审查,另一个负责生成接口文档,不要揉在一起。技能越多,描述越要克制,避免多个技能互相抢触发。
6. MCP:连接外部工具与数据
6.1 MCP 能做什么
MCP 让 Claude Code 不再局限于“读写文件”和“执行命令”,而是可以接入更多工具。比如连接一个本地文档数据库,连接公司内部的工单系统,或者连接你的私有 API。每一次接入,实际上就是给 Claude Code 增加一种能力。
配置 MCP 的方式主要有两种:通过 CLI 命令动态添加,或者通过项目根目录下的 .mcp.json 声明。
6.2 用命令行添加一个 stdio MCP 服务
stdio MCP 是最常见的类型,Claude Code 通过标准输入输出与子进程通信。例如添加一个名为 docs-search 的本地服务:
bash复制claude mcp add docs-search --transport stdio -- env NODE_ENV=production node /path/to/mcp-docs-server.js
这里的 node /path/to/mcp-docs-server.js 是启动 MCP 服务的实际命令。添加完成后,你在会话中让 Claude“搜索文档中关于订单状态的定义”,它就会调用这个服务。
6.3 项目级 MCP 配置:.mcp.json
如果希望团队所有成员共享同一个 MCP 配置,可以把配置放在项目根目录 .mcp.json 中:
json复制{
"mcpServers": {
"docs-search": {
"type": "stdio",
"command": "node",
"args": ["/path/to/mcp-docs-server.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}
这个文件建议提交到 Git 仓库,让每个开发者拉取代码后都能直接使用。不过要注意环境差异:本地绝对路径不应写死在 .mcp.json 中,尽量使用环境变量替代。
6.4 MCP 的安全边界
MCP 本质上是把外部工具暴露给 Claude Code。工具越强大,误操作的风险越高。务必做好三件事:
- 最小权限:只给 Claude 需要的范围,不要给它完整的数据库写权限。
- 操作审批:对于删除、批量修改、生产环境变更等高风险操作,要求 Claude 必须先给出执行计划,等待你确认。
- 日志留痕:在 MCP 服务端记录所有请求,便于追溯。
7. Fork:会话分支与实验式开发
7.1 什么时候应该 Fork
日常使用中,最容易产生“路径依赖”的场景是:你让 Claude 做了多轮修改,改到一半发现设计有问题。如果继续在当前会话中补救,聊天记录里的错误决策会持续干扰后续判断;如果新建会话,又需要重新描述背景。
Fork 的价值就在这里:从出问题之前的那个节点分叉出一个新会话,保留原有会话作为备份,然后走另一条方案。
7.2 如何管理历史会话
Claude Code 提供会话恢复能力。常见操作包括:
bash复制# 继续最近一次会话
claude --continue
# 查看历史会话列表并按提示选择恢复
claude --resume
至于 Fork 的具体命令,不同版本可能略有差异。你可以执行 claude --help 查看当前版本支持的 fork 相关参数,或者在会话中输入 /help 查看斜杠命令列表。核心用法是一致的:先让模型清楚“这是从历史会话的某个节点分叉出来的新分支”,然后从分支点继续推进。
7.3 用 Fork 做“改造实验”
我比较推荐在两类任务中使用 Fork:
- 大规模重构:在改动前 Fork 一条基线会话,如果重构失败,可以从分支点重新开始。
- AI 方案对比:针对同一个需求,让两个分支分别采用不同技术方案,最后人工合并。
这会明显减少“改崩了要全部重来”的挫败感。
8. Subtask:用子代理拆分复杂任务
8.1 子代理是什么
子代理是 Claude Code 中一种预定义的、有独立上下文的工作模式。它适合处理“步骤明确、目标单一”的任务,例如代码审查、生成 API 文档、写单元测试。通过把任务拆成 Subtask,主会话不需要承载所有细节,子代理各自负责一块,最后再汇总。
8.2 定义一个代码审查子代理
在项目 .claude/agents/ 目录下创建一个 Markdown 文件,例如 reviewer.md:
markdown复制---
name: reviewer
description: 代码审查员,负责检查代码风格与潜在风险。当主任务需要独立审查时使用。
tools: Read, Grep, Glob, Write
---
你是一名资深代码审查员。审查规则:
1. 先读取项目 CLAUDE.md 中的规范
2. 使用 Grep 搜索相关代码,定位问题
3. 只输出结构化审查结果:问题严重级别、问题代码位置、修复建议
4. 不直接修改业务代码,除非用户明确要求
子代理的定义核心是 description 和 tools。description 决定 Claude 在何时把任务分配给它;tools 决定它能做什么,不要给它不必要的工具权限。
8.3 子代理与主任务的协作方式
当用户请求“帮我实现一个登录接口并审查一下”,Claude Code 会先实现主任务,然后可能通过 Task 工具把“审查”这个子任务分派给 reviewer 子代理。
这种协作方式的好处是:审查过程中的中间思考不会污染主对话;如果审查发现问题,主会话只需要接收审查结果,再决定如何修复。
8.4 设计 Subtask 时的建议
子代理的提示词要像写岗位说明书一样,职责边界越清楚,质量越稳定。我一般会遵守三条原则:
- 一个子代理只做一类事:“reviewer”不要负责写测试。
- 描述里写清楚“什么时候用、什么时候不用”:“只在需要独立审查时使用,不要在生成代码时自动介入”。
- 限制工具类型:子代理不是越强越好,能读文件就够了,不必给它全局写权限。
9. 一个完整的项目级配置组合
上面几节是分散的,下面做一个组合实例。假设你在做一个名为 order-platform 的项目,目标是把 Claude Code 配置成“懂项目规范、能自动审查、能查数据库文档”的工程助手。
项目配置目录结构如下:
text复制order-platform/
├── CLAUDE.md
├── .mcp.json
└── .claude/
├── agents/
│ └── reviewer.md
└── skills/
└── order-review/
└── SKILL.md
项目根目录的 CLAUDE.md 聚焦最核心的约定:
markdown复制# order-platform 项目规范
- 后端:Spring Boot 3.2,统一返回 R<T>
- 状态字段使用枚举,禁止魔法数字
- 订单金额使用 BigDecimal,禁止 double
- 新建接口必须写单元测试
- 读项目文档时,先查看 docs 目录
项目级 .mcp.json 接入内部文档服务:
json复制{
"mcpServers": {
"order-docs": {
"type": "stdio",
"command": "node",
"args": ["/opt/mcp-servers/order-docs.js"],
"env": {
"DOCS_BASE_URL": "https://docs.internal.example.com"
}
}
}
}
reviewer.md 子代理专注于订单模块审查:
markdown复制---
name: order-reviewer
description: 订单模块代码审查。当任务涉及订单状态、金额计算、支付回调时执行审查。
tools: Read, Grep, Glob
---
你是订单领域专家。审查时需要额外关注:
- 订单状态流转是否合法
- 金额是否使用 BigDecimal
- 支付回调是否幂等
order-review Skill 则用于规范化审查流程:
markdown复制---
name: order-review
description: 按订单平台规范审查代码,重点检查状态枚举、金额精度和幂等性。
---
按以下流程执行:
1. 读取项目 CLAUDE.md
2. 用 Grep 检索订单相关代码
3. 检查金额字段类型和状态流转
4. 输出审查报告
配置完成后,进入项目目录运行 claude,直接说“帮我审查一下最近订单服务的改动”。如果一切正常,你会看到 Claude 自动读取 CLAUDE.md,加载 order-review 技能,确认可用的 MCP 服务,并按流程给出审查结果。
10. 常见问题与排查思路
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| Claude 不遵守 CLAUDE.md 中的规则 | 记忆文件放在错误位置 | 确认文件路径是项目根目录或用户目录 | 调整文件位置,重启会话 |
| CLAUDE.md 内容太多,关键规则被忽略 | 记忆文件过于冗长 | 检查文件字数,是否几百行 | 精简到高频规范,详细文档用引用 |
| Skill 从未被触发 | description 描述不够具体 | 查看技能目录和元数据 | 扩充 description 中的场景关键词 |
| Skill 触发了但没执行脚本 | 脚本不可执行 | 运行 bash 脚本路径 测试 |
添加执行权限 chmod +x |
| MCP 工具连接失败 | 服务地址或命令路径错误 | 直接运行命令看报错 | 修正命令、路径或环境变量 |
| MCP 请求被拦截 | 权限或审批配置未通过 | 检查 MCP 服务端日志 | 调整权限范围或审批策略 |
| 找不到想要恢复的历史会话 | 会话列表太长或已过期 | 使用会话查询命令 | 按时间/关键词筛选后恢复 |
| Subtask 子代理没有按预期执行 | 子代理描述与任务不匹配 | 检查 agents 目录定义 | 调整 description 触发条件 |
| 上下文仍然混乱、频繁遗忘 | 会话过长且未压缩 | 使用会话压缩功能 | 定期压缩上下文或拆分 Subtask |
排查时,第一步永远是看当前会话是否加载了正确的配置。你可以直接问 Claude:“你当前读取了哪些配置文件?”它会给出已加载的文件列表,这是最快定位问题的方式。
11. 最佳实践:配置不是越多越好
11.1 记忆文件要“小而精”
CLAUDE.md 的价值在于高频命中。如果你把所有内容都塞进去,模型在每次加载时都会消耗大量上下文,反而降低对关键信息的敏感度。我的建议是:全局文件控制在 20 行以内,项目文件控制在 80 行以内。更详细的内容用文档引用解决。
11.2 技能和子代理要“单一职责”
一个技能只做一件事,描述要覆盖常用表达。一个子代理只负责一种角色,工具权限要最小化。这样,Claude Code 的自动调度才会稳定,不会出现“每个任务都加载五六个技能”的情况。
11.3 配置纳入版本管理
项目相关的 CLAUDE.md、.claude/skills/、.claude/agents/、.mcp.json 都应该纳入 Git 管理。团队协作时,这些配置是新成员最快了解“AI 助手使用规范”的方式。敏感信息(密码、Token)严禁写入任何配置文件,应通过环境变量注入。
11.4 先跑通最小闭环,再逐步扩展
不要第一次就配置 14 个文件。先加项目 CLAUDE.md,观察一个下午;再加一个 Skill,测试触发效果;确认稳定后再接入 MCP、定义子代理。每加一层,都要验证一个实际任务,而不是配置完就结束。
12. 总结:下一步怎么做
Claude Code 的真正价值,是把它从一个“临时对话工具”变成“懂你项目的工程助手”。这需要一套完整的配置体系:CLAUDE.md 负责记忆,Skills 负责方法论沉淀,MCP 负责工具连接,Fork 负责分支探索,Subtask 负责复杂度治理。
给你的下一步行动建议很简单:先为当前最常用的项目写一个 50 行的 CLAUDE.md,把技术栈、常用命令、代码规范放进去;然后挑一个每周都会做的重复任务,把它做成第一个 Skill;跑通之后,再考虑引入 MCP 和 Subtask。你会发现,告别每次“重新介绍自己”的状态之后,Claude Code 才真正开始帮你解决问题。
