课程大纲 › 领域 3:Claude Code 配置与工作流

3.1 以合适的层级、作用域和模块结构配置 CLAUDE.md

タスクステートメント3.1:適切な階層、スコープ設定、モジュール構成でCLAUDE.mdファイルを設定する

官方大纲原文(日文):知识 4 条 · 技能 4 条

需要掌握的知识

  • CLAUDE.mdの設定階層:ユーザーレベル(~/.claude/CLAUDE.md)、プロジェクトレベル(.claude/CLAUDE.mdまたはルートのCLAUDE.md)、ディレクトリレベル(サブディレクトリのCLAUDE.mdファイル)
  • ユーザーレベルの設定はそのユーザーにのみ適用されること(~/.claude/CLAUDE.md内の指示は、バージョン管理を通じてチームメイトと共有されない)
  • 外部ファイルを参照してCLAUDE.mdをモジュール化しておくための@import構文(例:各パッケージに関連する特定の標準ファイルをインポートする)
  • 単一の巨大なCLAUDE.mdの代替として、トピック別のルールファイルを整理するための.claude/rules/ディレクトリ

需要能做到的事

  • 設定階層の問題を診断する(例:指示がプロジェクトレベルではなくユーザーレベルの設定にあるために、新しいチームメンバーに指示が届いていない)
  • @importを使用し、メンテナーのドメイン知識に基づいて、関連する標準ファイルを各パッケージのCLAUDE.mdに選択的に取り込む
  • 大きなCLAUDE.mdファイルを、.claude/rules/内の焦点を絞ったトピック別ファイルに分割する(例:testing.md、api-conventions.md、deployment.md)
  • /memory貫しない動作を診断する

课程讲解 · AI 草稿,未经人工审核 以官方文档为准

这一条考什么

考你是否理解 CLAUDE.md 的层级(用户级、项目级、目录级)以及哪一层会通过版本控制共享给团队;能否用 @import 把标准文件模块化地引入各个包的 CLAUDE.md,用 .claude/rules/ 把一个臃肿的 CLAUDE.md 拆成主题文件;以及在行为不一致时用 /memory 排查到底加载了哪些记忆文件。

核心概念

三个层级

Claude Code 启动时会把 CLAUDE.md 当作“记忆”加载进上下文,来源分层:

  • 用户级:~/.claude/CLAUDE.md。只对你本人生效,跨所有项目。适合个人偏好(如“回复用中文”“我习惯 pnpm”)。它不在仓库里,不会通过版本控制分享给同事。
  • 项目级:仓库根目录的 CLAUDE.md 或 .claude/CLAUDE.md。提交到 Git,所有团队成员共享。适合团队规范:构建命令、架构说明、编码约定、测试标准。
  • 目录级:子目录中的 CLAUDE.md(如 packages/billing/CLAUDE.md)。当 Claude 在该目录下读取或编辑文件时按需加载,适合只对某个包生效的约定。

Claude Code 还会从当前工作目录向上逐级查找 CLAUDE.md。层级越具体,越贴近当前工作,多个层级的内容会一起进入上下文。

最常考的诊断:指示放错了层级

典型场景:老成员用起来一切正常,新成员加入后 Claude 不遵守团队规范。原因往往是规范写在了老成员自己的 ~/.claude/CLAUDE.md 里,从未进入仓库。修复:把团队规范移到项目级 CLAUDE.md(或 .claude/rules/)并提交,个人偏好留在用户级。

@import:模块化引用

CLAUDE.md 中可以用 @路径 引入其他文件,相对路径相对于当前 CLAUDE.md 所在位置解析,也支持 @~/... 的家目录路径。被引入的文件还能继续 import(有最大递归深度限制)。代码块和行内代码中的 @ 不会被当作 import。

# packages/payments/CLAUDE.md

本包处理支付与退款,所有金额以分(整数)存储。

@../../docs/standards/error-handling.md
@../../docs/standards/pci-logging.md
@../../docs/standards/api-conventions.md
# packages/web-ui/CLAUDE.md

@../../docs/standards/accessibility.md
@../../docs/standards/react-components.md

关键点是有选择地引入:熟悉各包的维护者根据领域知识决定每个包需要哪些标准。支付包需要 PCI 日志规范,前端包需要无障碍规范,彼此不必加载对方的内容,既节省 token 也减少无关指令的干扰。

.claude/rules/:按主题拆分

当根目录 CLAUDE.md 膨胀到几百行、什么都往里塞时,可以拆到 .claude/rules/ 目录下的多个 Markdown 文件:

.claude/
  rules/
    testing.md
    api-conventions.md
    deployment.md
    security.md
CLAUDE.md          # 只保留项目概览和最核心的命令

每个文件只讲一个主题,便于维护、审查和定位“哪条规则导致了这个行为”。没有 paths 前置信息的规则文件会像项目 CLAUDE.md 一样在启动时加载;带 paths 的则按文件路径条件加载(见 3.3)。

/memory:排查加载了什么

在会话中运行 /memory,可以看到当前会话加载了哪些记忆文件(用户级、项目级、目录级、规则文件等),并可直接打开编辑。当出现“同一个仓库,两个人得到的行为不一样”或“Claude 好像没看到某条规范”时,先用 /memory 确认:

  • 这条规范所在的文件是否真的被加载了?
  • 是否存在用户级文件里与项目规范冲突的指令?
  • 目录级 CLAUDE.md 是否因为当前工作不在该目录而尚未加载?

正确做法与反模式

  • 正确:团队规范放项目级 CLAUDE.md 或 .claude/rules/ 并提交;个人偏好放 ~/.claude/CLAUDE.md。反模式:把团队约定写在自己的用户级文件里,再奇怪“新人为什么收不到”。
  • 正确:各包的 CLAUDE.md 用 @import 只引入与本包相关的标准文件。反模式:把所有标准全文复制进每个包,或在根 CLAUDE.md 里一次性 import 全部标准。
  • 正确:把巨型 CLAUDE.md 拆成 testing.md、api-conventions.md、deployment.md 等主题文件。反模式:持续往一个文件里追加,直到没人能维护。
  • 正确:行为不一致时先用 /memory 检查加载的文件。反模式:直接在提示里加“IMPORTANT/MUST”等加强语气,而不排查配置层级。

常见陷阱

  • “让新成员自己在 ~/.claude/CLAUDE.md 里配置一遍”:能用但不可维护、不同步,正确答案是放进版本控制的项目级配置。
  • 把目录级 CLAUDE.md 当作全局生效:子目录的 CLAUDE.md 是按需加载的,Claude 没碰那个目录时它可能不在上下文中。
  • 用更强硬的措辞替代结构修复:题干说“规则时有时无”时,选项里“改成全大写 MUST”是干扰项;先查层级和加载情况。
  • 混淆 CLAUDE.md 与硬性约束:CLAUDE.md 是指导性上下文,不是强制机制。题目要求“绝不允许编辑某目录”时,应该用 settings 里的 permissions.deny 或 hooks,而不是只写进 CLAUDE.md。
  • 一次性任务也写进 CLAUDE.md:只为某次任务参考几个模块,直接在提示里用 @文件 引用即可,不必把它们升级成永久的项目约定。

实操练习

目标:亲手复现“指示放错层级”的问题,并用 /memory 诊断、用 @import 和 .claude/rules/ 修复。

  1. 在 ~/.claude/CLAUDE.md 写一条“所有 API 返回 snake_case 字段”,模拟老成员的私有配置。
  2. 在仓库中新建一个分支,切换到另一个用户(或临时重命名 ~/.claude/CLAUDE.md)模拟新成员,启动 Claude Code 让它写一个 API handler,观察字段命名。
  3. 运行 /memory,确认该规则不在新成员的加载列表中。
  4. 把规则移动到 .claude/rules/api-conventions.md 并提交;为 packages/payments/CLAUDE.md 添加 @import。
  5. 重新启动会话,用 /memory 确认加载列表,并再次生成 handler。
mkdir -p .claude/rules docs/standards packages/payments
cat > .claude/rules/api-conventions.md <<'EOF'
# API 约定
- 所有 JSON 响应字段使用 snake_case
- 错误响应统一为 {"error": {"code": "...", "message": "..."}}
EOF

cat > docs/standards/pci-logging.md <<'EOF'
# PCI 日志规范
- 禁止记录完整卡号,只记录后四位
EOF

cat > packages/payments/CLAUDE.md <<'EOF'
本包处理支付,金额一律用整数分。
@../../docs/standards/pci-logging.md
EOF

claude    # 进入后运行 /memory 查看加载的文件

检查结果:/memory 中能看到项目规则文件;在 packages/payments 下工作时,Claude 生成的日志代码只打印卡号后四位。

自测清单

  • 用户级、项目级、目录级 CLAUDE.md 分别在哪里?哪一层会通过 Git 分享给同事?
  • 新同事反映 Claude 不遵守团队规范,你会先检查什么?如何修复?
  • @import 的路径如何解析?为什么要按包“有选择地”引入标准文件?
  • 什么时候应把 CLAUDE.md 拆分到 .claude/rules/?拆分后的好处有哪些?
  • /memory 能帮你回答哪些排查问题?

对应题目(2)

题目归类由 AI 判断,仅供参考。

练习这 2 道题