ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Claude Code 工作树子代理上下文继承机制解析:从 PARENT_CWD 到 WORKTREE_ROOT 的路径翻译与隔离保障

Claude Code 工作树子代理上下文继承机制解析:从 PARENT_CWD 到 WORKTREE_ROOT 的路径翻译与隔离保障 文档提示工程人工智能【免费下载链接】claude-code-system-promptsAll parts of Claude Codes system prompt, 27 builtin tool descriptions, sub agent prompts (Plan/Explore/Task), utility prompts (CLAUDE.md, compact, statusline, magic docs, WebFetch, Bash cmd, security review, agent creation). Updated for each Claude Code version.项目地址https://gitcode.com/gh_mirrors/cl/claude-code-system-prompts点击查看免费下载导读在 Claude Code 的并行任务编排体系中子代理sub-agent常常需要带着父会话的完整上下文进入一个全新的、隔离的 git worktree 中独立工作。本文基于开源仓库 claude-code-system-prompts 中提取的 Agent Prompt: Inherited context for worktree sub-agent 提示词原文结合仓库内 EnterWorktree/ExitWorktree 工具描述、后台会话隔离指导、/batch 并行编排提示词等一手资料逐句拆解这套继承上下文 工作树隔离机制的设计意图、路径翻译规则、文件读取安全策略与隔离边界并给出可在自己的 Agent 编排中直接复用的实践要点。关联文档全文与作用定位该提示词在仓库 README.md 中被归类于Agent Prompts → Utilities标注为 121 tokens作用描述为Briefs a sub-agent that it has inherited a parent sessions context and is now working in its own isolated git worktree向子代理说明它已继承父会话上下文现在正工作在自己独立的隔离 git worktree 中。原文如下Youve inherited the conversation context above from a parent agent working in ${PARENT_CWD}. You are operating in an isolated git worktree at ${WORKTREE_ROOT} — same repository, same relative file structure, separate working copy. Paths in the inherited context refer to the parents working directory; translate them to your worktree root. Re-read files before editing if the parent may have modified them since they appear in the context. Your changes stay in this worktree and will not affect the parents files.这段提示词虽然只有寥寥数句却定义了子代理在隔离工作树中工作的四项核心契约上下文来源声明、工作树身份声明、路径翻译规则、文件新鲜度与隔离边界规则。下面逐项展开。提示词中的两个关键变量与仓库内其他提示词文件一致本文件头部 frontmatter 声明了两个运行时注入变量见 agent-prompt-inherited-context-for-worktree-sub-agent.md 第 5-7 行变量含义在本提示词中的作用PARENT_CWD父代理所在的工作目录原始 checkout 路径声明继承上下文来自哪个目录WORKTREE_ROOT子代理当前所在隔离工作树的根路径声明新工作副本的位置并作为路径翻译的目标根这两个变量均由 Claude Code 运行时在注入该提示词时动态填充对应提示词中a parent agent working in ${PARENT_CWD}与an isolated git worktree at ${WORKTREE_ROOT}两处插值。可推断该提示词通常在父代理通过 Agent 工具以isolation: worktree派生后台子代理时被附加注入用于在子代理启动的第一时间完成身份 环境的校准。核心机制一同一仓库、相同结构、独立副本提示词用一个高度凝练的排比句定义了 git worktree 的本质特征same repository, same relative file structure, separate working copysame repository同一仓库工作树与父目录共享同一个.git对象库提交历史、远端、引用分支/tag完全一致无需重新 clone。same relative file structure相同相对文件结构这是本机制最关键的设计前提——由于相对路径结构相同子代理从父会话继承的相对路径心智模型依然有效例如上下文里提到的src/main.ts、config/app.yaml这类相对路径在工作树内仍指向同名文件。separate working copy独立工作副本工作树拥有独立的索引index与工作区文件子代理的读写操作与父目录互不可见直到显式 commit 到共享对象库。这一特性与 Tool Description: EnterWorktree 中描述的行为完全吻合在 git 仓库内EnterWorktree 会在.claude/worktrees/下基于新分支创建新的 git worktree并将会话工作目录切换到新工作树分支基点由worktree.baseRef设置控制默认fresh从 origin 默认分支出发head则从当前本地 HEAD 出发。核心机制二继承路径的翻译规则提示词给出的最重要操作指令是Paths in the inherited context refer to the parents working directory; translate them to your worktree root.为什么需要翻译父会话在上下文中留下的路径无论是工具调用结果、代码引用还是文件内容绝大部分是相对路径或针对PARENT_CWD的绝对路径。虽然两个工作副本的相对文件结构相同但绝对路径会直接指向父目录子代理如果照用读写将落在父会话的文件上破坏隔离边界相对路径虽结构相同但如果子代理的当前工作目录cwd与工作树根不一致解析基址也会出错。翻译规则将继承上下文中的路径以其在父目录中的含义为参照统一映射到${WORKTREE_ROOT}下的对应位置。即把父视角的路径换算成工作树视角的路径保证所有文件操作都发生在自己的工作树内。这一规则与仓库中 System Reminder: Workflow isolated worktree 的措辞互为印证——后者同样强调你运行在位于 ${WORKTREE_INFO.worktreePath} 的隔离 git worktree 中仓库的一个独立工作副本你在此处的更改不影响主工作目录或其他代理。核心机制三编辑前重读文件新鲜度保障提示词的第三条规则Re-read files before editing if the parent may have modified them since they appear in the context.为什么继承上下文中的文件内容本质上是父会话读取时刻的快照。从上下文出现在对话中到子代理真正动手编辑之间存在时间窗口父会话或其他并行代理可能已经修改了这些文件。若直接基于陈旧快照编辑会覆盖掉父会话的最新改动会产生与预期不符的 diff甚至引入回归。因此提示词强制要求编辑任何文件之前若父代理可能在其出现在上下文中之后修改过它必须先重新读取磁盘上的最新内容。这与仓库中 Tool Description: Edit 类工具编辑前必须在会话中先读取文件的要求形成双层保障Edit 工具要求在本次会话读取而本提示词进一步要求在继承上下文的场景下以工作树内最新磁盘状态为准。核心机制四隔离边界——你的改动只留在这个工作树提示词的最后一条规则是对隔离语义的明确宣示Your changes stay in this worktree and will not affect the parents files.这意味着子代理可以放心大胆地在工作树内进行任何读写——不会污染父会话正在使用的 checkout父会话的未提交改动也不会反向影响子代理的工作副本双方共享的只有 git 对象库子代理的提交commit会写入共享仓库但工作区与索引完全隔离。这一设计使多个并行子代理可以在同一仓库上互不干扰地工作。仓库中 Agent Prompt: /batch slash command 正是这一机制的规模化应用/batch 命令将大型改动拆分为 5–30 个独立单元强制所有 worker 使用isolation: worktree且后台并行运行每个 worker 在各自隔离的工作树中实现、验证并产出独立 PR——Be independently implementable in an isolated git worktree (no shared state with sibling units)。隔离边界下的一个易踩陷阱共享 stash需要特别提醒的是隔离并不覆盖 git stash。仓库中 System Prompt: Shared git stash safety 明确指出The git stash stack is shared with the main checkout and all other worktrees, and other Claude sessions may push or pop it concurrently.即 stash 栈在主 checkout 与所有工作树之间共享其他 Claude 会话可能并发 push/pop。因此隔离工作树中的子代理绝不应当使用裸git stash/git stash pop否则可能弹出其他会话的改动。推荐做法优先用临时 WIP 提交暂存工作必须 stash 时使用带唯一 tag 的git stash push -u -m unique-tag随后立即用git stash list --format%H %gs记录条目 SHA恢复时用git stash apply sha而非 pop用完再按 tag 定位stash{n}并 drop。源码证据链隔离从何而来又由什么保障虽然本仓库是提示词提取仓库内容来自 Claude Code 编译后源码的字符串抽取见 README.md 的 Extraction 一节不包含可运行的实现代码但可以通过同仓库中相互印证的多份提示词拼出完整的机制证据链1. 隔离的建立EnterWorktree / ExitWorktreeTool Description: EnterWorktree只有在用户或项目指令CLAUDE.md/记忆明确要求 worktree 时才可使用在 git 仓库内于.claude/worktrees/下创建新分支的新工作树并切换会话 cwd支持name新建与path进入已存在的工作树两个互斥参数。Tool Description: ExitWorktree将会话恢复到原工作目录并通过action: keep | remove决定保留或删除工作树仅作用于本次会话由 EnterWorktree 创建的工作树对git worktree add手工创建的或历史会话的工作树一律不触碰若不在工作树会话中调用则是 no-op。2. 强制隔离写入守卫System Reminder: Subagent write blocked pending worktree isolation当父后台会话尚未隔离时子代理对共享 checkout 的写入会被拒绝并给出三条出路——重新以isolation: worktree派生、父代理先调用 EnterWorktree 再派生、或改用git worktree add手工创建链接工作树同时说明了如何通过.claude/settings.json中的worktree: {bgIsolation: none}关闭该守卫。System Prompt: Background worktree isolation guidance后台会话在首次代码改动前必须调用 EnterWorktree 隔离除非 cwd 已在.claude/worktrees/下该隔离是强制的——共享 checkout 上的文件编辑会被拒绝所以应在第一次编辑前就隔离而不是等被拒后再补救纯读、搜索、问答场景则无需隔离原地工作即可EnterWorktree 失败则就地继续。3. 隔离的并行编排/batch 与 fork 语义Agent Prompt: /batch slash commandPhase 2 要求所有 worker 用isolation: worktree加run_in_background: true一次性并行派出每个 worker 的提示词必须完全自包含整体目标 单元任务 代码规范 e2e 验证配方 工作指令模板。System Prompt: Forked conversation worktree isolation guidance被 fork 出的后台会话绝不能进入原会话仍在使用的链接工作树编辑或执行命令在启用隔离时改代码前必须用 EnterWorktree 新建属于自己fork的工作树且若任务基于原会话工作新分支应基于原工作树的分支创建而不是直接检出该分支它仍被原会话占用。Agent Prompt: Worker forkworker fork 继承父会话完整转写transcript但将其视为参考而非自身处境执行单条指令后即止不得再派生子代理。4. 隔离的善后工作树的清理与保留System Reminder: Workflow isolated worktree明确如果没有产生任何改动工作树会被自动清理如果产生了改动则会保留以供审查——这是隔离工作树生命周期的默认策略与本篇关联文档你的改动留在这个工作树的语义衔接。实践要点在自定义 Agent 编排中复用该模式即使不在 Claude Code 内部这套继承上下文 工作树隔离的提示词模式也值得在自研多代理系统中借鉴身份先行子代理启动提示词开头必须声明两件事——上下文继承自哪里父目录、当前工作在哪工作树根一句话消除环境歧义。路径翻译显式化明确告知子代理继承路径需翻译到工作树根避免子代理把绝对路径直接落到父目录上破坏隔离。新鲜度强约束编辑前重读文件这条规则应写入子代理的系统约束而非依赖其自觉可显著减少基于陈旧快照的覆盖写入。隔离边界声明明确你的改动只影响当前工作副本既给子代理操作自由度又防止它误以为需要回写父目录。善后策略前置参考仓库语义预先约定有改动则保留、无改动则清理的工作树生命周期并配套记录 stash 条目 SHA 等防串扰细节参见 system-prompt-shared-git-stash-safety.md。小结Agent Prompt: Inherited context for worktree sub-agent 以 121 tokens 的极小篇幅完成了子代理进入隔离工作树时最关键的四项环境校准声明上下文来源与工作树身份、规定继承路径的翻译规则、强制编辑前重读文件、划定改动只留本工作树的隔离边界。结合仓库中 EnterWorktree/ExitWorktree 的工具语义、写入守卫、/batch 并行编排与 fork 隔离指导可以完整还原 Claude Code 在并行 Agent 架构中上下文复用 物理隔离的工程设计子代理既享受父会话上下文的复用红利无需重新建立对仓库的理解又通过 git worktree 获得与父会话及兄弟代理互不干扰的独立工作区最终以独立 PR 的形式安全汇合。赞分享文档提示工程人工智能【免费下载链接】claude-code-system-promptsAll parts of Claude Codes system prompt, 27 builtin tool descriptions, sub agent prompts (Plan/Explore/Task), utility prompts (CLAUDE.md, compact, statusline, magic docs, WebFetch, Bash cmd, security review, agent creation). Updated for each Claude Code version.项目地址https://gitcode.com/gh_mirrors/cl/claude-code-system-prompts点击查看免费下载相关推荐Context7 Claude Code 插件中的 docs-researcher 子代理把库文档调研隔离到独立上下文保持主会话精简Context7 Claude Code 插件中的 docs researcher 子代理把库文档调研隔离到独立上下文保持主会话精简 docs researMCP 服务AI 应用开发工具Claude Code 子代理 Fork 机制实战指南继承上下文的后台任务与不偷看、不抢跑、不编造三条铁律Claude Code 子代理 Fork 机制实战指南继承上下文的后台任务与不偷看、不抢跑、不编造三条铁律 导读 本文基于开源仓库 claude code文档提示工程人工智能Kimi Code 子代理Agent工具深度指南从任务委派到上下文隔离的完整实践Kimi Code 子代理Agent工具深度指南从任务委派到上下文隔离的完整实践 导读 本文以 agent.md https://link.gitcodeAI Agent代码智能体人工智能大模型CLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表