MemoryLake
返回全部文章
Tutorial2026 年 10 月 21 日·10 分钟阅读

Claude Code 工作区共享记忆吗?每个工作区会话加载什么 (2026)

Git 工作区(worktrees)是 Claude Code 运行并行会话且不发生冲突的一种方式。使用 claude --worktree feature-auth 启动一个工作区,再用不同的名称启动另一个,每个工作区都会获得自己的文件和分支。Anthropic 的文档明确指出了其范围:工作区“隔离文件编辑”。

但它们如何处理上下文就没那么显而易见了。当您在新的工作区中启动第二个会话时,它会知道第一个会话学到了什么吗?它会读取相同的 CLAUDE.md 吗?您在 CLAUDE.local.md 中的个人笔记,或者测试所需的 .env 文件又该如何处理?

对于每种上下文,答案都不同。本指南将详细介绍工作区会话加载的内容、它与主检出(main checkout)共享的内容,以及您必须自己结转的内容。关于在会话之间传递上下文的通用方法,我们关于在 Claude Code 会话之间共享上下文的指南涵盖了这些选项。对于子智能体(subagents),我们关于为什么 Claude Code 子智能体不共享记忆的指南介绍了它们的启动方式。

简短回答

  • 自动记忆是共享的。 一个仓库的所有工作区都使用同一个记忆目录。
  • 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 账户是分开的。

MemoryLake 控制台显示 API 密钥屏幕,在此处创建并复制新密钥以供智能体使用
MemoryLake 控制台显示 API 密钥屏幕,在此处创建并复制新密钥以供智能体使用

步骤 2:上传您的第一批记忆

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

已上传首批文档的 MemoryLake 工作空间,列出了每个文件成为可搜索记忆时的状态
已上传首批文档的 MemoryLake 工作空间,列出了每个文件成为可搜索记忆时的状态

步骤 3:连接您的 AI 和智能体

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

MemoryLake 集成屏幕,列出了可以连接到记忆层的 AI 客户端和智能体框架
MemoryLake 集成屏幕,列出了可以连接到记忆层的 AI 客户端和智能体框架

这在实践中改变了什么

第一个区别是新工作区会以正确的指令开始。共享规则已被提交,个人规则从家目录导入,会话所需的文件已被复制进来。

第二个区别是并行会话保持一致。您知道自动记忆是共享的,因此您会检查它,并且您知道每个工作区和子智能体读取的是哪个 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 将它们复制进来。工作区中的子智能体从主对话中获取其指令。

提交共享指令,从家目录导入个人指令,列出每个工作区所需的文件,并在清理会话之前写下会话得出的结论。

常见问题

Claude Code 工作区共享记忆吗?

自动记忆是共享的。Anthropic 表示,同一 Git 仓库内的所有工作区和子目录都共享一个自动记忆目录。它是机器本地的,因此不会跨机器或云环境共享。

Claude Code 工作区会加载 CLAUDE.md 吗?

会的,从它自己的检出中加载。默认情况下,新工作区从远程仓库的默认分支拉出分支,因此它们会获取那里已提交的版本,而不是您主检出中未提交的编辑。

为什么我的 CLAUDE.local.md 在工作区中缺失了?

因为它被 Git 忽略了,所以它仅存在于您创建它的工作区中。Anthropic 建议将个人指令放在您家目录的文件中并进行导入。

如何将我的 .env file 放入 Claude Code 工作区?

在项目根目录下添加一个列出该文件的 .worktreeinclude 文件。它使用 .gitignore 语法,Claude Code 在创建工作区时会复制匹配的被 Git 忽略的文件。

工作区中的子智能体会读取工作区的 CLAUDE.md 吗?

不会。在自己工作区中的子智能体从您主对话的指令文件开始,并且在默认的工作区位置,它在读取那里的文件时不会加载工作区的 CLAUDE.md 或 .claude/rules/。

删除工作区时,自动记忆会发生什么?

自动记忆保存在 ~/.claude/projects/ 下,位于工作区之外,因此删除工作区的目录和分支不会影响它。保存在工作区内部文件中的笔记会随工作区一起消失。