简短回答
- 自动记忆是共享的。 一个仓库的所有工作区都使用同一个记忆目录。
CLAUDE.md来自工作区自身的检出。 新工作区从您的默认分支启动,因此它包含该分支上已提交的版本。CLAUDE.local.md不共享。 它仅存在于您创建它的工作区中。- 被 Git 忽略的文件不会存在,除非您在
.worktreeinclude中列出它们。 - 某些配置与主检出共享:插件、权限审批,以及在某些情况下的技能(skills)、智能体(agents)和命令。
自动记忆:整个仓库共用一个目录
自动记忆是 Claude 为自己记录的笔记:您的偏好、纠错以及它无法从代码中推导出的项目上下文。Anthropic 的记忆文档将其范围列为“每个仓库,跨工作区共享”。
存储部分解释了原因:“每个项目在 ~/.claude/projects/<project>/memory/ 都有自己的记忆目录。<project> 路径派生自 Git 仓库,因此同一仓库内的所有工作区和子目录都共享一个自动记忆目录。”
因此,您在一个工作区会话中给 Claude 的纠错,可以出现在您在同一仓库的另一个工作区中启动的下一个会话中。这是无需任何设置即可跨越工作区的唯一一层。不过,它仅限于本地机器:“自动记忆是机器本地的。同一 Git 仓库内的所有工作区 and 子目录都共享一个自动记忆目录。文件不会跨机器或云环境共享。”我们关于为什么 Claude Code 会在不同机器间遗忘的指南涵盖了这一界限。
因为记忆目录位于 ~/.claude/projects/ 下,所以它存在于工作区之外。删除工作区会删除工作区的目录和分支,但不包括该文件夹。
CLAUDE.md:工作区分支所拥有的内容
CLAUDE.md 是您仓库中的一个文件,因此工作区会读取它自己的副本。具体是哪个副本取决于工作区是从哪里启动的。Anthropic 的工作区页面指出,Claude Code “从您仓库的默认分支拉出分支,并且仅检出被追踪的文件”。
默认基准是 fresh,这意味着“从远程仓库的默认分支(通常是 main)拉出分支,因此工作区从与远程匹配的干净树开始。”如果您在主检出中编辑了 CLAUDE.md 且尚未提交和推送,那么新工作区将不会包含该编辑。它的 CLAUDE.md 将是远程默认分支上的版本。
如果想改为从当前工作拉出分支,请将 worktree.baseRef 设置为 head。文档指出,该选项将“从您当前的本地 HEAD 拉出分支,因此工作区会携带您未推送的提交和特性分支状态。”未提交的更改不属于任何提交,因此它们会留在主检出中。
在从桌面应用启动的工作区会话中,文档补充道,“CLAUDE.md 文件和 .claude/rules/ 仍从工作区加载”,即使其他项目配置是从主检出的根目录读取的。如果不同层级开始出现冲突,我们关于调和冲突的 CLAUDE.md 层级的指南介绍了它们是如何合并的。
CLAUDE.local.md:仅存在于您创建它的工作区中
CLAUDE.local.md 用于存放您不提交的私人偏好。因为它是被 Git 忽略的,所以新工作区不会获取它。Anthropic 直接指出了这一点:“如果您在同一个仓库的多个 Git 工作区中工作,被 Git 忽略的 CLAUDE.local.md 仅存在于您创建它的工作区中。”
文档给出的解决方法是将内容移动到您的家目录(home directory)并导入它。将您的个人指令放在诸如 ~/.claude/my-project-instructions.md 的文件中,然后使用 @ 导入进行引用,如 Anthropic 的示例所示。这样,每个工作区都会从您的家目录读取同一个文件。
被 Git 忽略的文件和 .worktreeinclude
同样的规则也适用于其他未追踪的文件。“工作区是一个全新的检出,因此主仓库中未追踪的文件(如 .env 或 .env.local)不会存在。”
要将它们复制进来,请在项目根目录下添加一个 .worktreeinclude 文件。它“使用 .gitignore 语法”,并且“只有匹配模式且同时被 Git 忽略的文件才会被复制,因此被追踪的文件绝不会重复。”它适用于“Claude Code 用 Git 创建的每个工作区”,包括子智能体工作区和桌面应用中的并行会话。
.worktreeinclude 模式会在创建工作区时复制一次文件。复制的 CLAUDE.local.md 或 .env 随后在每个工作区中都是一个独立的文件,在一个工作区中的编辑不会更新其他工作区。对于您不断更改的个人指令,家目录导入是更稳定的选择。
工作区与主检出共享的其他内容
Anthropic 列出了工作区与主检出共享的内容:
- 仓库的
.git目录,因此在工作区中进行的提交会进入同一个仓库。 - 从主检出在项目范围内安装的插件。
- 权限审批。 选择在工作区中始终允许某个 Bash 命令会“将规则保存到主检出的
.claude/settings.local.json中”,因此它适用于仓库的每个工作区。在 Windows 和某些其他情况下,该规则会留在该工作区中。 - 未追踪的技能、智能体和命令(当工作区本身没有
.claude/skills目录时)。“在拥有自己.claude/skills目录的工作区中,仅加载该副本。”
桌面应用工作区会话则更进一步。在桌面应用中,Claude Code “从主检出的根目录读取项目配置,例如设置、钩子(hooks)、技能、智能体、命令和 .mcp.json 服务器。”
工作区中的子智能体从主对话中获取指令
子智能体可以在它们自己的工作区中运行,可以根据请求运行,也可以在自定义子智能体的 frontmatter 中使用 isolation: worktree。它们的指令来自其他地方。“在自己工作区中的子智能体,其启动时使用的指令文件来自您的主对话,而不是来自其工作区。”
对于默认位置的工作区,“子智能体在读取那里的文件时,也不会加载工作区根目录下的 CLAUDE.md 文件或 .claude/rules/ 目录,即使这些文件在工作区之分支上有所不同。”如果您在分支上更改了 CLAUDE.md 并期望工作区子智能体遵循它,它将转而遵循主对话的版本。
会话和记录随工作区移动
对话本身会留在它们运行的工作区中。会话选择器默认显示“当前工作区的会话”,您可以按 Ctrl+W 将其扩大到仓库的所有工作区。按名称恢复会话适用于仓库的所有工作区。
当 Claude 进入或退出工作区时,“记录会随之移动”,因此 --resume 会在其新目录中找到该会话。恢复在工作区内结束的会话会将其返回到该工作区。如果工作区已被删除,Claude Code 会在您启动的目录中恢复,并“清除会话的工作区绑定”。我们关于查找 Claude Code 会话历史记录的指南更详细地介绍了选择器。
人们首先尝试的做法
在主检出中编辑 CLAUDE.md 并启动工作区。 新工作区将包含远程默认分支上的版本,而不是未提交的编辑。
期望在每个工作区中都有 CLAUDE.local.md。 它仅存在于您创建它的地方。
假设工作区会隔离记忆。 自动记忆在仓库的所有工作区之间共享。一个会话中的错误纠正可能会带入其他会话。
在分支上为工作区子智能体更改 CLAUDE.md。 默认位置工作区中的子智能体从主对话的指令文件开始。
仅在工作区中保留笔记。 删除工作区会删除其目录、分支以及其中的工作。
解决方法:将每种上下文放在每个工作区都能访问的地方
步骤 1:提交共享指令,并从家目录导入个人指令
任何每个会话都应遵循的内容都应放入已提交的 CLAUDE.md 中,并推送到默认分支,以便新工作区以此开始。如果您需要工作区获取未推送的指令更改,请将 worktree.baseRef 设置为 head 并先提交更改。
将个人笔记从 CLAUDE.local.md 移动到您家目录中的一个文件中并导入它。一个文件,被每个工作区读取,在一处进行编辑。
步骤 2:列出每个工作区所需的被 Git 忽略的文件
在项目根目录下添加一个 .worktreeinclude 文件,其中列出会话运行所必需的被 Git 忽略的文件,例如 .env 和 .env.local。将这些副本视为起点。如果某个值发生变化,请在主检出中更新它,以便新工作区获得新版本。
也要不时检查自动记忆。由于每个工作区都共享它,一个会话的错误记录会影响所有工作区。记忆文件是 ~/.claude/projects/<project>/memory/ 下的普通 Markdown 文件,您可以对其进行编辑或删除。
步骤 3:在清理工作区之前,写下工作区会话得出的结论
当工作区会话结束时,其结论会保存在其记录中,也可能保存在自动记忆中。在删除工作区之前,写下其他会话所需的决策和发现。持久规则放入 CLAUDE.md。其他所有内容放入您自己的笔记中。
如果会话在运行期间需要交换发现,工作区页面指向跨会话消息传递,这“允许 Claude 在您工作区的会话之间传递发现”。
在 MemoryLake 中进行设置
工作区将您的工作拆分为并行检出,而每一层上下文处理这种拆分的方式都不同。自动记忆跨越工作区,但止于本地机器。CLAUDE.md 遵循分支。个人笔记留在您撰写它们的地方。
MemoryLake 是一个记忆层,用于将这些工作背后的决策保存在您维护的一个列表中,供 Claude Code 以及您连接的其他助手(如 Codex 和 ChatGPT)使用。
您可以用自己的语言亲自编写这些条目。不会从您的工作区、您的 CLAUDE.md 或 CLAUDE.local.md 文件、您的自动记忆目录、您的会话记录或任何供应商的存储中读取、写入或删除任何内容。请将机密信息保存在您的环境文件中,而不是记忆条目中。
步骤 1:创建 API 密钥
登录并从控制面板生成密钥。该密钥属于您的 MemoryLake 工作空间,与您的 Claude 账户是分开的。

步骤 2:上传您的第一批记忆
从您在解决方法的步骤 3 中写下的内容开始:您即将清理的工作区会话中的决策和发现。每个条目一个要点,注明日期,并标记仓库和分支。

步骤 3:连接您的 AI 和智能体
连接 Claude Code 和您使用的其他助手。无论是在这台机器还是另一台机器上,每个新的工作区会话都可以从相同的决策开始。

这在实践中改变了什么
第一个区别是新工作区会以正确的指令开始。共享规则已被提交,个人规则从家目录导入,会话所需的文件已被复制进来。
第二个区别是并行会话保持一致。您知道自动记忆是共享的,因此您会检查它,并且您知道每个工作区和子智能体读取的是哪个 CLAUDE.md。
第三个区别是清理工作不再以损失上下文为代价。在删除工作区之前,工作区的结论已被写下。如果您还运行云端会话,我们关于 Claude Code 云端会话从本地设置中携带了什么的指南涵盖了跨越该界限的内容。
Claude Code 工作区中上下文的最佳实践
提交并推送指令更改。 新工作区从远程默认分支开始。
从您的家目录导入个人指令。 CLAUDE.local.md 留在单个工作区中。
对环境文件使用 .worktreeinclude。 只有匹配的被 Git 忽略的文件才会被复制。
记住自动记忆是共享的。 当会话开始出现分歧时,请对其进行审查。
期望工作区子智能体使用主对话的指令。 而不是分支的 CLAUDE.md。
将 .claude/worktrees/ 添加到 .gitignore。 Anthropic 推荐这样做,这样工作区内容就不会显示为未追踪的文件。
在删除工作区之前写下发现。 删除会删除其目录和分支。
结论
Claude Code 工作区隔离的是文件编辑,而不是上下文。自动记忆在同一台机器上仓库的每个工作区之间共享。CLAUDE.md 来自每个工作区的检出,默认情况下是远程默认分支。CLAUDE.local.md 和其他被 Git 忽略的文件仅存在于您创建它们的地方,除非 .worktreeinclude 将它们复制进来。工作区中的子智能体从主对话中获取其指令。
提交共享指令,从家目录导入个人指令,列出每个工作区所需的文件,并在清理会话之前写下会话得出的结论。