OpenClaw OpenShell 沙箱后端:使用 NVIDIA OpenShell 托管沙箱,深入 mirror/remote 工作区模式、配置参考与实现机制
2026/9/14 2:55:36 网站建设 项目流程

OpenClaw OpenShell 沙箱后端:使用 NVIDIA OpenShell 托管沙箱,深入 mirror/remote 工作区模式、配置参考与实现机制

【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 🦞项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw

本文讲解如何将 NVIDIA OpenShell 接入 OpenClaw 作为托管沙箱后端:从 CLI 预检、mirror/remote两种工作区同步模式的选择,到plugins.entries.openshell.config下全部配置项的语义、沙箱生命周期管理与安全机制。读完后,你可以完成 OpenShell 沙箱后端的安装、配置、验证与排障,并理解 OpenClaw 在底层如何通过openshellCLI 与 SSH 通道管理沙箱和文件同步。

一、OpenShell 是什么:两套 Gateway 与沙箱后端的分工

OpenShell 是一个托管沙箱后端:OpenClaw 把沙箱生命周期完全委托给openshellCLI,并通过 SSH 在沙箱内执行命令。所选的 OpenShell gateway 可以基于 Docker、Podman 或虚拟化在本地管理沙箱,也可以把沙箱跑在独立的远程基础设施上。

这里有一个容易混淆的命名边界:OpenShell gateway 与 OpenClaw Gateway 是两个不同的进程。OpenClaw Gateway 继续在宿主机上运行 agent 与宿主侧插件;OpenShell gateway 只负责沙箱的创建、销毁与连接。

从源码结构看,这个后端以插件形式实现,入口在 extensions/openshell/index.ts,它通过definePluginEntry声明插件 id 为openshell,并在完整注册模式下调用registerSandboxBackend("openshell", ...),向核心注入三样东西:

  • factory:创建单个 OpenShell 沙箱后端的工厂;
  • manager:负责运行时状态检查(sandbox get)与删除(sandbox delete);
  • resolveWorkdir:把工作目录指向remoteWorkspaceDir(默认/sandbox)。

该插件复用了通用 SSH 后端 的 SSH 传输与远程文件系统桥,在此之上新增 OpenShell 生命周期管理(sandbox create/get/delete/ssh-config)和可选的mirror工作区同步模式。插件的声明元数据(配置 JSON Schema、UI 提示、onStartup激活策略)见 extensions/openshell/openclaw.plugin.json;插件包为@openclaw/openshell-sandbox,README 标注其最低 OpenClaw 宿主版本为2026.5.12-beta.1

二、前置条件与 CLI 预检

启用该后端前,需要满足以下条件:

  • openshellCLI 已安装,且位于OpenClaw Gateway 进程的PATH中(或自定义绝对路径,通过plugins.entries.openshell.config.command指定);
  • Gateway 主机上可用 OpenSSH 客户端;
  • 配置 OpenShell workspace 时要求 OpenShellv0.0.88或更新版本;
  • 一个活跃且可达、有权限创建沙箱的 OpenShell gateway;本地 gateway 不需要云账户;
  • 使用本地沙箱时,OpenShell gateway 主机上有受支持的计算运行时;
  • OpenClaw Gateway 正在宿主机上运行。

安装 CLI 并按 NVIDIA OpenShell 官方文档配置 gateway 之后,务必以运行 OpenClaw Gateway 的同一个操作系统用户验证 OpenShell CLI:

openshell --version openshell gateway list openshell sandbox list

gateway list会用*标记当前活跃的 gateway。如果没有选中任何 gateway,执行openshell gateway select <gateway-name>。要注册一个已存在的本地 gateway 端点:

openshell gateway add http://127.0.0.1:8080 --local

请把端点地址替换为你实际运行的 gateway 地址;对于需要认证的远程 gateway,用openshell gateway login <gateway-name>走它的登录流程。

一个高频坑:OpenClaw Gateway 服务必须能看到与这些预检命令完全相同的 OpenShell CLI、gateway 注册、凭据和 workspace 选择。仅在交互 shell 里设置的PATHOPENSHELL_WORKSPACE不会自动传到后台服务。

三、快速开始

安装插件:

openclaw plugins install @openclaw/openshell-sandbox

在 OpenClaw 配置中启用后端并设置插件(json5 格式):

{ agents: { defaults: { sandbox: { mode: "all", backend: "openshell", scope: "session", workspaceAccess: "rw", }, }, }, plugins: { entries: { openshell: { enabled: true, config: { from: "openclaw", mode: "remote", }, }, }, }, }

校验配置并重启 OpenClaw Gateway:

openclaw config validate openclaw gateway restart

在下一个 agent 回合,OpenClaw 会创建一个 OpenShell 沙箱并把工具执行路由进去。用下面的命令同时验证插件与生效的沙箱配置:

openclaw plugins inspect openshell --runtime --json openclaw sandbox list openclaw sandbox explain openshell sandbox list

注意:openclaw sandbox list在第一次沙箱化 agent 回合并需要运行时之前是空的——沙箱是懒创建的。这一点与源码行为一致:extensions/openshell/src/backend.ts 中后端实例首次被调用时才执行sandbox get,未命中才执行sandbox create

四、工作区模式:mirror 与 remote 的选择

这是使用 OpenShell 后端最重要的决策

先厘清一个概念:OpenShell 控制平面里也有一个叫workspace的资源,它用于圈定沙箱、provider、策略与推理路由的归属——这与下文讨论的文件系统工作区模式不是一回事。要用非默认的 OpenShell 控制平面 workspace,设置plugins.entries.openshell.config.workspace。该插件不会创建 OpenShell workspace,也不管理其成员;不设置时,插件沿用 OpenShell CLI 的环境变量OPENSHELL_WORKSPACE选择,再没有环境选择时回退到 CLI 的default

mirror(默认)

plugins.entries.openshell.config.mode: "mirror"保持本地工作区为权威(canonical)

  • exec之前,OpenClaw 把本地工作区同步进沙箱;exec之后,再把远端工作区同步回本地;
  • 在同一个 OpenClaw Gateway 进程内,共享同一工作区的命令与文件工具操作会等待当前操作完成。锁覆盖完整的「上传 + 命令 + 下载」,或完整的「文件读写 + 同步」;不同后端句柄共享同一把锁;
  • 文件工具走沙箱桥,但回合之间本地始终是事实来源;
  • 工作目录检查检查的是将要被上传的宿主机目录,并在返回前释放锁;执行本身拥有自己完整的上传到下载的操作;被放弃的检查不会阻塞后续工具。远端权限与镜像相关的限制在执行开始时检查。

适合开发型工作流:在 OpenClaw 之外对本地做的编辑会在下一次 exec 时生效,沙箱行为接近 Docker 后端。代价是每次 exec 回合都有上传 + 下载开销。

注意:外部编辑器和 Gateway 进程不参与这把锁。避免在 mirror 命令运行期间修改本地工作区,因为其回传下载可能覆盖这些外部编辑。

remote

mode: "remote"远端工作区成为权威

  • 沙箱创建后的首次使用时,OpenClaw 把本地工作区一次性播种(seed)到远端。如果 Gateway 在此之前重启,下次使用时会探测到远端工作区仍为空并补种;已经含有内容的远端工作区永远不会被重新播种
  • 之后execreadwriteeditapply_patch直接操作远端工作区,OpenClaw不会把远端变更同步回本地;
  • 初始化按远端运行时串行化,但初始化完成后,命令与文件工具可以跨 agent 回合并发,因此后台命令可能等待一个更晚回合写入的文件;同一文件的并发写遵循正常的远端文件系统语义;
  • 已物化的 skills 在回合的后端初始化时刷新,而不是在每次文件系统操作前刷新;与其他沙箱后端一样,较晚的回合可能在旧后台命令仍在运行时刷新 skills;
  • 提示期的媒体读取仍然可用(file/media 工具通过沙箱桥读取);
  • 出站图片等附件可以使用配置好的远端工作区下的路径,例如/sandbox/chart.png

适合长时运行的 agent 与 CI:每回合开销更低,且宿主本地的编辑无法悄悄破坏远端状态。

警告:在初始播种之后,若你在宿主上通过 OpenClaw 之外修改文件,远端沙箱对此不可见。需要重新播种时执行openclaw sandbox recreate

从源码可以印证这些语义:extensions/openshell/src/backend.ts 中,被「收养」的远端沙箱在 remote 模式下会先探测两个受管根目录是否为空(remoteManagedRootsEmpty),只有根目录完全为空才会把 seed 义务重新挂起,避免重启后覆盖操作者数据;初始化逻辑(ensureSandboxExists)仅在 remote 模式下经过runWorkspaceOperation串行队列,注释明确说明这是为了让远端命令不阻塞后续回合。

模式对比

mirrorremote
权威工作区本地宿主远端 OpenShell
同步方向双向(每次 exec)一次性播种
每回合开销较高(上传 + 下载)较低(直接远端操作)
本地编辑可见?是,下一次 exec 时否,直到 recreate
最适合开发工作流长时 agent、CI

五、配置参考:plugins.entries.openshell.config全项说明

OpenShell 的所有配置都位于plugins.entries.openshell.config下:

KeyTypeDefaultDescription
mode"mirror""remote""mirror"工作区同步模式
commandstring"openshell"openshellCLI 的路径或命令名
fromstring"openclaw"首次创建沙箱时使用的沙箱来源
gatewaystring未设置OpenShell gateway 名称(对应顶层--gateway
gatewayEndpointstring未设置OpenShell gateway 端点(对应顶层--gateway-endpoint
workspacestring未设置每次 CLI 操作使用的现有 OpenShell workspace
policystring未设置OpenClaw Gateway 主机上的沙箱策略 YAML 文件路径
providersstring[][]创建沙箱时附加的 provider 名称(去重,每个条目一个--provider标志)
gpubooleanfalse请求 GPU 资源(--gpu
autoProvidersbooleantruecreate 时传--auto-providers(false 时传--no-auto-providers
remoteWorkspaceDirstring"/sandbox"沙箱内主可写工作区
remoteAgentWorkspaceDirstring"/agent"agent 工作区挂载路径(workspace 访问权限非rw时只读)
timeoutSecondsnumber120openshellCLI 操作的超时

这些默认值与 extensions/openshell/src/config.ts 中的常量一一对应(DEFAULT_MODE = "mirror"DEFAULT_COMMAND = "openshell"DEFAULT_SOURCE = "openclaw"DEFAULT_REMOTE_WORKSPACE_DIR = "/sandbox"DEFAULT_REMOTE_AGENT_WORKSPACE_DIR = "/agent"DEFAULT_TIMEOUT_MS = 120_000)。

各配置项的深入语义:

  • 受管根路径约束remoteWorkspaceDirremoteAgentWorkspaceDir必须是绝对路径,且必须位于受管根/sandbox/agent之下,其他绝对路径会被拒绝(config.ts 中的正则^\/(?:sandbox|agent)(?:\/|$)即此规则)。由于 OpenClaw 独立管理这两个目录的内容,请选择互不重叠的目录;为升级兼容,历史上配置过的重叠根仍会被接受。
  • timeoutSeconds:适用于常规 OpenShell CLI 操作;取值范围 1 至 2147000 秒。沙箱创建始终至少获得 300 秒超时(backend.ts 中Math.max(config.timeoutMs, 300_000)),以免镜像构建与首次配置被默认 120 秒的命令超时截断。
  • policy:这是一个文件路径,不是策略名或 ID。建议用绝对路径,例如/etc/openclaw/openshell-policy.yaml;相对路径会在沙箱创建时从 agent 的本地工作区解析。显式 policy 会覆盖 OpenShell CLI 的OPENSHELL_SANDBOX_POLICY环境变量;两者都没设时,OpenShell 走自身的正常策略选择与默认值。
  • providers:指向所选 OpenShell workspace 中已存在的凭据 provider。autoProviders: true时,OpenShell 可能从 Gateway 进程已有凭据自动创建缺失的 provider;autoProviders: false时,需先创建 provider 并用openshell --workspace <workspace-name> provider list验证。API key 应放在 OpenShell provider 里,不要塞进沙箱环境变量。
  • workspace:必须满足 OpenShell 的 workspace 命名契约——1 至 19 个小写字母数字或单个连字符,不允许首尾或连续连字符(config.ts 中的正则^[a-z0-9]+(?:-[a-z0-9]+)*$即该契约)。先用openshell workspace create --name <name>创建它;OpenShell 在所选 workspace 不存在或正在删除时会拒绝沙箱操作。设为"default"可显式覆盖环境里非默认的 OpenShell workspace。
  • workspace 的作用范围:该设置对这个插件实例管理的所有 OpenShell 沙箱生效,不能按 agent 或 session 选择不同 workspace。修改它不会迁移已有沙箱:应在旧 workspace 仍生效时删除 OpenClaw 的 OpenShell 沙箱,再改配置并重启 Gateway。

沙箱级设置(modescopeworkspaceAccess)与其他后端一样放在agents.defaults.sandbox下,完整矩阵见 Sandboxing。

要向沙箱化命令注入非机密环境变量,使用现有的agents.defaults.sandbox.docker.env设置:OpenShell 后端在执行命令时同样会应用这些值(backend.ts 中句柄的env直接取自createParams.cfg.docker.env)。但 OpenShell 目前不会在沙箱创建或后台服务中注入它们。凭据请保留在 OpenShell provider 或其他专门的机密投递机制中。

六、配置示例

最小 remote 配置

{ agents: { defaults: { sandbox: { mode: "all", backend: "openshell", }, }, }, plugins: { entries: { openshell: { enabled: true, config: { from: "openclaw", mode: "remote", }, }, }, }, }

mirror 模式 + GPU

{ agents: { defaults: { sandbox: { mode: "all", backend: "openshell", scope: "agent", workspaceAccess: "rw", }, }, }, plugins: { entries: { openshell: { enabled: true, config: { from: "openclaw", mode: "mirror", gpu: true, providers: ["openai"], timeoutSeconds: 180, }, }, }, }, }

按 agent 启用 OpenShell + 自定义 gateway

{ agents: { defaults: { sandbox: { mode: "off" }, }, entries: { researcher: { default: true, sandbox: { mode: "all", backend: "openshell", scope: "agent", workspaceAccess: "rw", }, }, }, }, plugins: { entries: { openshell: { enabled: true, config: { from: "openclaw", mode: "remote", gateway: "lab", gatewayEndpoint: "https://lab.example", workspace: "research", policy: "/etc/openclaw/openshell-policy.yaml", }, }, }, }, }

按 agent 覆盖的更多细节见 多 agent 沙箱与工具。

七、沙箱生命周期管理

# 列出所有沙箱运行时(Docker + OpenShell) openclaw sandbox list # 检查生效的策略 openclaw sandbox explain # 重建(删除远端工作区,下次使用时重新播种) openclaw sandbox recreate --all # 只重建某一个 agent,或 sandbox list 中显示的精确 session 作用域 openclaw sandbox recreate --agent researcher openclaw sandbox recreate --session "agent:researcher:main"
  • remote模式下 recreate 尤其重要:它会删除该作用域的权威远端工作区,下次使用时从本地重新播种;
  • mirror模式下 recreate 主要重置远端执行环境,因为本地仍是权威。

sandbox listrecreate命令会激活所配置后端所属的插件以及每条已记录运行时的主人,然后再检查或删除它们;无关插件不会被加载,浏览器专用命令与 OpenShell 后端保持独立。

升级兼容与命名规则:OpenClaw 在升级后会保留已注册沙箱的旧版运行时名,以便其远端工作区仍可达;recreate 该作用域会删除旧运行时,下次使用时创建当前 19 字符的运行时名。从源码看(backend.ts),当前命名是对作用域键做 SHA-256 后取十六进制前 16 位、加oc-前缀(19 字符 DNS 标签上限内的设计),而旧版名(openclaw-...-hash)仅在被注册表「收养」时继续使用。

OpenShell v0.0.92 仍能找到 v0.0.68 创建的沙箱记录,但 Docker 承载的沙箱在 gateway 升级后可能停留在非 Ready 阶段。此时 OpenClaw 保留已注册的运行时身份、拒绝隐式创建替身,并在错误信息中报告带作用域的openclaw sandbox recreate命令(buildLegacyRuntimeUnavailableError)。在 remote 模式下应把这次 recreate 视为破坏性操作,因为远端工作区是权威。

以下任一配置变更后需要 recreate

  • agents.defaults.sandbox.backend
  • plugins.entries.openshell.config.from
  • plugins.entries.openshell.config.mode
  • plugins.entries.openshell.config.policy
  • plugins.entries.openshell.config.providersgpuautoProviders
  • plugins.entries.openshell.config.remoteWorkspaceDirremoteAgentWorkspaceDir

切换 OpenShell gateway 或 workspace 时:在旧的 gateway/workspace 仍被选中时重建受影响的沙箱,否则清理操作会指向新位置而不是现有沙箱。

删除失败的重试策略:如果 OpenShell 无法删除沙箱,OpenClaw 会报告失败并保留运行时注册表条目,以便安全地重试 recreate 或 prune。恢复原有的 gateway、workspace、认证与连通性后,用openshell --workspace <workspace-name> sandbox get <sandbox-name>检查运行时,再重跑带作用域的openclaw sandbox recreate。不要为了掩盖失败而切换配置 workspace 或删除注册表条目。

八、安全加固机制

镜像桥的 realpath 校验:mirror 模式的文件系统桥固定本地工作区根,并在每次 read、write、mkdir、remove、rename 之前通过 realpath 重新检查规范路径,拒绝路径中的符号链接。符号链接替换或本地工作区重新挂载都无法把文件访问重定向到镜像树之外。远端一侧同样有防线:backend.ts 中的PINNED_REMOTE_PATH_MUTATION_SCRIPT在远端执行前逐段检查路径组件,任何...、符号链接组件都会直接失败。

仓库凭据与可信钩子不出宿主:工作区同步在双向都排除.githooksgit-hooks(extensions/openshell/src/mirror.ts 中的DEFAULT_OPEN_SHELL_MIRROR_EXCLUDE_DIRS)。仓库凭据、历史与可信钩子代码留在 OpenClaw Gateway 主机上,不会被复制进不可信沙箱。

不可表示条目永不复制:mirror 同步从不把符号链接、FIFO、Unix socket 等无法表示的条目复制进任一侧工作区。宿主上已存在的这类条目在任意深度都保持原样(连同父目录),即使沙箱删除了这些目录或把它们替换成文件;与这些受保护宿主路径冲突的远端替换会被忽略。普通文件与目录仍然正常接收远端的变更和删除(mirror.ts 中reconcileMirrorPath对「既非目录也非普通文件」的目标直接保留)。

九、自定义镜像契约

OpenShell 源镜像负责远端操作系统与包集合。OpenClaw 不会把 Docker 镜像、根文件系统、网络、用户或包配置应用到这个后端。

与 OpenClaw 文件系统桥配合的自定义镜像必须提供:

  • /bin/sh
  • sleep(持久沙箱主进程用;在 OpenShell CLI 支持分离创建(sandbox create --detach)时)。源码会在创建前通过sandbox create --help探测--detach能力(backend.ts 的supportsDetachedSandboxCreation),有该能力则传--detach -- sleep infinity,否则退回-- true
  • python3(固定路径的远端文件读取与变更);
  • GNU 兼容的stat-c)、readlink-f)、find
  • 标准mkdirmvrmrmdir工具。

/agent目录的写权限问题:当 agent 工作区与沙箱工作区不同时,沙箱用户和策略需要对两个受管远端根都有写权限。标准的非特权镜像往往无法创建默认的/agent目录。要么在镜像和策略中创建并授权/agent,要么配置两个位于已可写沙箱根之下的互不重叠目录:

{ plugins: { entries: { openshell: { enabled: true, config: { remoteWorkspaceDir: "/sandbox/workspace", remoteAgentWorkspaceDir: "/sandbox/agent", }, }, }, }, }

包安装与私有证书根必须包含在源镜像中,或从沙箱内部安装。所选 OpenShell 策略必须允许所需网络目的地,且沙箱用户与文件系统必须允许写入。sandbox.docker.networksandbox.docker.readOnlyRootsandbox.docker.usersandbox.docker.setupCommand用于配置 OpenShell。

十、当前限制

  • OpenShell 后端不支持沙箱浏览器;
  • 一个插件实例对应一个 OpenShell workspace,不支持按 agent 或 session 选择不同 workspace;
  • sandbox.docker.binds不适用于 OpenShell;配置了 binds 会导致沙箱创建失败(backend.ts 中会直接抛出 "OpenShell sandbox backend does not support sandbox.docker.binds.");
  • sandbox.docker.*下的 Docker 专用运行时旋钮(env除外)只作用于 Docker 后端;
  • 原生插件代码与 Gateway RPC 仍留在 Gateway 主机上。插件自有工具与 MCP 工具只有在沙箱工具策略允许时才对沙箱化会话可见。

十一、故障排查

先区分三类问题:OpenClaw Gateway 健康度、插件激活状态、OpenShell gateway 连通性:

openclaw gateway status --deep --require-rpc openclaw plugins inspect openshell --runtime --json openclaw sandbox explain openclaw sandbox list openshell gateway list openshell sandbox list openclaw logs --follow
  • 插件缺失或后端不可用:安装@openclaw/openshell-sandbox,设置plugins.entries.openshell.enabled: true,校验配置并重启 OpenClaw Gateway。用openclaw plugins inspect openshell --runtime --json检查的是运行中的 Gateway,而不仅是磁盘上的插件注册。
  • openshellnot found:为运行 Gateway 的用户安装 CLI,或把plugins.entries.openshell.config.command设为可执行文件的绝对路径。交互式 shell 里能用,不代表受管服务有同样的PATH
  • 无活跃 gateway、未授权或连接失败:检查openshell gateway list,选择预期 gateway;部署要求登录时用openshell gateway login <gateway-name>重新认证。当服务不应依赖交互式 CLI 的活跃选择时,显式设置plugins.entries.openshell.config.gateway
  • workspace 缺失或沙箱列表不对:用openshell workspace list核对所选 OpenShell workspace,然后openshell --workspace <workspace-name> sandbox list。缺失的 workspace 先用openshell workspace create --name <workspace-name>创建,再在 OpenClaw 中启用。记住 Gateway 服务可能没有继承交互 shell 的OPENSHELL_WORKSPACE
  • 策略文件读不到或出站流量被拒:用宿主机上的绝对路径配置一个已存在的 YAML 策略文件,检查其权限,并确认策略允许目的地与请求的二进制。用openshell sandbox get <sandbox-name> --policy-only检查运行中的沙箱。Docker 网络设置不会改变 OpenShell 策略。
  • provider 创建失败:用openshell provider list检查所选 OpenShell workspace,然后按 OpenShell 文档的凭据流程创建或刷新所需 provider;autoProviders关闭时,所需 provider 必须已存在。
  • 远端文件在本地缺失:remote 模式下这是预期行为——远端文件是权威的,不会同步回宿主。需要宿主可见的变更时改用mirror模式。重建 remote 沙箱会销毁其仅存在于远端的文件。
  • 图片或附件发不出去:使用配置好的remoteWorkspaceDir下的路径(如/sandbox/report.png),不要假设所有后端都用 Docker 的/workspace目录。
  • mirror 同步报告恢复路径:OpenClaw 因为移动或恢复无法完成,在 workspace 外保留了一个宿主 shadow。错误信息会给出被保留的路径与 workspace 路径并保留原始失败。对比两条路径、恢复所需文件之后再删除任何一份拷贝;部分移动可能导致两个路径里是不同的文件。OpenClaw 会保留剩余 workspace 条目,而不是用不完整或未验证的备份覆盖它们。如果恢复已完成、只是清理保留目录失败,错误会确认已恢复的 workspace 路径并指出遗留目录(对应 backend.ts 中的AggregateError恢复提示逻辑)。
  • recreate 或 prune 删不掉沙箱:恢复对原 OpenShell gateway 与 workspace 的访问,用openshell --workspace <workspace-name> sandbox get <sandbox-name>确认沙箱仍存在,再重试带作用域的 recreate。OpenClaw 会保留注册表条目直到删除成功。

十二、工作原理:沙箱引导的完整调用链

一次 OpenClaw 到 OpenShell 沙箱的执行,按序发生以下事情:

  1. OpenClaw 对所选 OpenShell workspace(以及配置的--gateway/--gateway-endpoint)中的沙箱名运行sandbox get;失败则在同一 workspace 用sandbox create创建,按需传入--name--from、(设置时的)--policy、(启用时的)--gpu--auto-providers/--no-auto-providers,以及每个配置 provider 一个--provider标志。
  2. 对该沙箱名运行sandbox ssh-config获取 SSH 连接信息。
  3. 核心把 SSH 配置写入临时文件,通过与通用 SSH 后端相同的远程文件系统桥打开 SSH 会话。
  4. mirror模式:exec 前本地到远端同步,执行,结束后回同步。
  5. remote模式:首次使用时播种一次,之后直接操作远端工作区。

源码层面可以补充几个细节:

  • CLI 参数装配:extensions/openshell/src/cli.ts 的buildOpenShellBaseArgvcommand+ 可选--gateway+--gateway-endpoint+--workspace的顺序为每条openshell子命令拼装基础 argv,因此配置里的 gateway/workspace 会应用到所有CLI 操作,而不只是创建。
  • SSH 会话建立:cli.ts 的createOpenShellSshSession先执行sandbox ssh-config <name>,再把 stdout 交给createSshSandboxSessionFromConfigText解析;若配置了gatewayEndpoint,会把--server <endpoint>注入到 ssh-proxy 的ProxyCommand中(当其尚未携带--server/--gateway-endpoint时)。
  • mirror 的锁键:mirror 操作租约由两个键组成(backend.ts):本地工作区的规范路径(host:前缀)与远端运行时身份gatewayEndpoint + gateway + workspace + sandboxName的 JSON(runtime:前缀),两者都经过全局KeyedAsyncQueue串行化——这正是文档所述「同一工作区的命令与文件工具操作等待当前操作完成、不同后端句柄共享同一把锁」的实现。
  • 创建参数装配:backend.ts 中sandbox create的完整参数列表与文档完全一致,并对创建单独使用Math.max(timeoutMs, 300_000)超时。

十三、相关资源

  • Sandboxing:沙箱模式、作用域与后端对比(含 SSH 后端一节);
  • Sandbox vs Tool Policy vs Elevated:排查被阻止的工具;
  • 多 agent 沙箱与工具:按 agent 的沙箱覆盖;
  • Sandbox CLI:openclaw sandbox命令参考;
  • 插件源码:extensions/openshell(后端实现 src/backend.ts、配置解析 src/config.ts、镜像同步 src/mirror.ts、CLI 封装 src/cli.ts)。

【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 🦞项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询