工作区与工作目录
工作区(Workspace)为 Agent 提供项目上下文:限定生效的局部指引范围,并作为工具操作的默认目录。每个 Agent 在同一时间只能有一个活动工作区;它也可以绑定多个可用工作区,但不一定处于激活状态。
要求 Agent 修改代码仓库时,应切换到该项目的项目工作区;而 Agent 自身的角色定位与个人工作记录,则保存在 Agent Home。即使同一个 Agent 会同时用到这两处,它们的定位也各不相同。
涉及的核心位置
| 位置 | 作用 |
|---|---|
| Agent Home | 保存 Agent 本地指引、精选记忆、工作笔记与运行时状态,也是系统回退的默认工作区。 |
| 项目工作区(Project workspace) | 当前工作的项目绑定与指引生效范围。 |
| 执行根(Execution root) | 当前实际用于执行命令的物理根目录,例如主检出目录或关联的 worktree。 |
| 工作目录(Working directory) | 某条命令启动时的当前工作路径(cwd)。 |
同一个代码仓库的工作区绑定可以保持不变,而 Agent 在一个关联的独立 worktree 中工作。该 worktree 是一个独立的物理执行位置;引用产物文件时,路径必须指向实际包含该文件的检出目录。
挂载、切换与切换目录
挂载(Attach)工作区只是让该绑定对 Agent 可用;切换(Switch)才会激活已有绑定或已登记的执行根,供后续操作使用。单纯挂载不会自动切换,切换也不会自动创建新的代码检出。
在终端执行 cd 仅改变当前命令进程的工作目录,不会改变运行时的活动工作区、已加载的工作区指引,也不会改变后续相对 patch 的基准路径。同理,为某条命令指定 workdir 也不等于持久切换了工作区。
假设 Agent 正在审查仓库 A,此时需要修复仓库 B。单次执行 cd 进入 B 虽然可以临时查看 B 的文件,但运行时的全局工作区上下文依然停留在 A。如果要持续对 B 展开工作,应当先挂载 B(若尚未挂载),将其激活,并在修改文件前确认当前生效的执行根。
用于并行改动的 Worktree
通过 Git worktree,任务可以拥有独立的代码检出和分支,同时保留与主仓库的关联。当一个 Agent 在审查改动而另一个 Agent 在准备修复时,独立的 worktree 能够有效避免在工作副本中互相覆盖文件。
不过,worktree 并不会隔离共享的 Git 元数据、外部服务或主机凭据。若两个 Agent 操作相同的外部资源,依然可能产生冲突。在移交产物时,应当明确权属,并使用实际汇报的物理执行路径。
资源清理必须显式进行。离开某个工作区不会自动删除其 worktree;解绑工作区也不会删除项目文件。清理受控 worktree 时,系统会自动检查是否存在未提交修改或正在被任务占用。一个任务执行完毕,并不代表它有权随意删除其他 Agent 的检出目录。
目录组织不等于沙箱隔离
活动工作区决定了命令执行和相对路径修改的默认基准,但它不是文件系统沙箱。在本地宿主执行模式下,只要宿主权限允许,显式绝对路径和 shell 命令仍然可以访问工作区外部的文件。
操作者提出的“仅修改该目录”的要求始终具备约束力,即使运行环境在技术上能够触达更多路径。如果需要强隔离,应在宿主或底层执行环境层面单独配置。详见安全与执行边界。
