运行时

文件系统沙箱

使用 Linux bubblewrap 挂载命名空间限制 Agent 任务的文件系统可见性,并按工作区隔离任务数据。

文件系统沙箱

文件系统沙箱将每个 Agent 子进程及其工具放入 Linux bubblewrap(bwrap)挂载命名空间。它控制文件系统的可见性与可写性,不控制网络访问、环境变量内容或可执行文件的运行权限。

MOPHEUS_SANDBOX_ENABLED=true

沙箱默认开启,包括该变量未设置或为空的情况。只有将其设置为 falseoff 才会关闭;其他值仍保持开启。

该能力仅在 Linux 且宿主机安装了 bwrap 时生效。未满足条件时,Daemon 记录 warning 并以非沙箱方式运行任务。

工作区隔离边界

沙箱按工作区隔离,而不是按单个任务隔离。同一工作区中的任务可以协作并共享运行所需的数据;其他工作区的数据不可见。

路径或范围沙箱内权限说明
/只读系统命令、动态库与系统配置可读取和执行,不能修改。
当前任务工作目录可读写可编辑代码、生成文件和写入任务日志。
当前工作区的其他任务目录可读写同工作区任务可见,这是协作范围。
当前工作区 .repos/<workspaceId> bare cache可读写worktree 的 .git 指针依赖该缓存,因此 git 操作可正常执行。
/tmp可读写映射为宿主 /tmp/mopheus-<workspaceId>,同工作区任务共享。
其他工作区任务目录与 bare cache不可见WorkDir 上的 tmpfs 覆盖阻止读取和写入。
宿主其余 /tmp不可见/tmp 先被遮蔽,仅重新挂载当前工作区临时目录。
$HOME可读写Provider 配置、session 和 symlink 继续可用。
MOPHEUS_SANDBOX_DENY 指定路径不可见使用空 tmpfs 覆盖,不能读取或写入。

因此,沙箱提供跨工作区的任务数据隔离,但不将同一工作区的任务彼此隔离,也不默认隔离整个 $HOME

敏感路径

~/.ssh 默认不隐藏,以保留通过 SSH 执行 git pullgit push 的能力。对于不受信任的 Agent,可通过逗号分隔的绝对路径隐藏额外凭据:

MOPHEUS_SANDBOX_DENY=~/.ssh,~/.aws,~/.gnupg

隐藏凭据后,依赖这些凭据的操作会失败。应将最小权限与任务需要的 Git、云服务访问方式一起评估。

个人配置文件

启用沙箱后,Daemon 将已启用的个人配置文件暂存于 <WorkDir>/.config/<workspaceId>/<taskId>/,保留其相对 $HOME 的目录结构,并逐个覆盖到沙箱中的目标位置。暂存目录本身不会挂载。

  • 每个文件按保存的文件模式以只读或读写方式挂载。
  • 任务成功、失败、取消、超时或启动失败后都会清理暂存目录。
  • 沙箱禁用或不可用时,任务继续执行,但不会下发这些配置文件。
  • Daemon 启动时只清理 .config 下 UUID 形式的 Mopheus 任务暂存目录,不影响无关内容。

托管 SSH 密钥与 SSH 配置片段通过这一机制下发。私钥在服务端加密存储,浏览器只能查看安全元数据和公钥;现有主机 SSH 配置不会被修改。

Provider 与降级

所有支持的 CLI Provider 在 Linux 上使用这一外层沙箱。启用时,Codex 会关闭自身内层沙箱,避免嵌套;不支持该能力的 Provider 会告警并以非沙箱方式执行。支持矩阵见 Provider CLI

这是进程级挂载沙箱,可与容器运行时组合使用;它不是网络沙箱,也不替代访问控制、密钥管理或容器隔离。

环境变量默认值说明
MOPHEUS_SANDBOX_ENABLEDtrue为 Agent 子进程启用 bwrap 挂载命名空间。未设置或为空时启用,仅 falseoff 会关闭。
MOPHEUS_SANDBOX_DENY额外隐藏的绝对路径,逗号分隔。