📄 一句话概括
实测沙箱是三处接缝+一条策略:bash-sandbox/pwsh-sandbox/fs-sandbox 各管一类动作,sandbox-policy 一句话划定范围。
📝 本节和前面几节的关系
PTC 与 Subagent 讲完,第三个大件是执行环境——能力在哪儿跑,由 Runtime 说了算。
一、三处接缝
bash-sandbox(非 Windows)/pwsh-sandbox(Windows)——按平台二选一,超时 60000ms。fs-sandbox——文件读写,全平台。
沙箱不是一个大开关,而是按动作类别挂的三处接缝——命令归命令、文件归文件,各管一段。
二、一个提供者
sandbox → dsh-sandbox-local。
沙箱本身也是一种可替换的能力(回扣 7.3.1):本地实现是 -local,将来换容器或远端实现,能力名不动。
三、一条策略
sandbox-policy 的两个真实取值:
mode = DSH_PERMISSION_MODE ?? 'workspace-write'workspaceRoot = process.cwd()
也就是说,2.2 那个【工作区】正是从这里被接进权限系统的;不选工作区就发不出消息,因为沙箱不知道圈哪里。
四、三档枚举,配好对给出
- read-only → 沙箱 read-only + 审批 ask。
- workspace-write(默认)→ 沙箱 workspace-write + 审批 ask。
- danger-full-access → 沙箱 danger-full-access + 审批 never。
每一档都是【沙箱+审批】成对给出的,不给自由组合——这就是 4.5.1 讲的单调。
五、动手 Demo:Sandbox 的三处接缝与一条策略
实测沙箱相关条目:
items = [("sandbox", "dsh-sandbox-local", "本地实现"),
("sandbox-policy", "dsh-sandbox-policy", "mode + workspaceRoot"),
("bash-sandbox", "dsh-bash-sandbox", "非 win32"),
("pwsh-sandbox", "dsh-pwsh-sandbox", "win32"),
("fs-sandbox", "dsh-fs-sandbox", "全平台")]
for a, b, c in items:
print(" %-16s %-20s %s" % (a, b, c))
实跑输出:
--------------------------------------------------------------------
Sandbox 的三处接缝与一条策略
--------------------------------------------------------------------
实测沙箱相关条目:
条目 包 条件或取值
--------------------------------------------------------------------
sandbox(提供者) dsh-sandbox-local 本地实现
sandbox-policy dsh-sandbox-policy mode + workspaceRoot
bash-sandbox dsh-bash-sandbox 非 win32;超时 60000ms
pwsh-sandbox dsh-pwsh-sandbox win32
fs-sandbox dsh-fs-sandbox 全平台
--------------------------------------------------------------------
策略里的两个真实取值:
mode = DSH_PERMISSION_MODE ?? 'workspace-write'
workspaceRoot = process.cwd()
三档枚举把【沙箱 + 审批】配好对:read-only、workspace-write、
danger-full-access。**能力在哪个环境里跑,由这条策略说**。
三处接缝一策提供者——沙箱不是一个大开关。
workspaceRoot = process.cwd() 把工作区接进了权限系统。
三档枚举每档都是【沙箱+审批】成对给出——不给自由组合。
30 秒实验
- 在配置树里找出三处沙箱接缝与那个提供者。
- 读一遍 sandbox-policy 的两个取值,说出各自管什么。
- 想想为什么审批与沙箱要成对给出,而不是分开配。
常见误区
- 错误:沙箱就是关了网络或者禁了写。——纠正:它是按动作类别挂的三处接缝——命令与文件各管一段。
- 错误:沙箱范围由模型决定。——纠正:由策略定——
mode与workspaceRoot都在配置里。 - 错误:沙箱与审批可以随意组合。——纠正:三档枚举成对给出——每档内部的配法是定好的。
自测三问(点开对答案)
1. 沙箱有哪三处接缝? —— `bash-sandbox`、`pwsh-sandbox`(按平台二选一)、`fs-sandbox`(全平台)。 2. sandbox-policy 的两个取值? —— `mode`(环境变量,默认 workspace-write)与 `workspaceRoot`(process.cwd())。 3. 三档枚举为什么成对给出? —— 因为**沙箱与审批是两件必须配合的事**——分开配会出现自相矛盾的组合。- ☐ 下一节(7.6 持续任务机制:让工作跨越多个 Turn)
相关笔记
- Approval 与 Sandbox 为什么必须放在不同层 —— 两套配置各管一段
- 为什么 Guard 要【单调】 —— 三档枚举的出处
- Workspace 是 Agent 的【现实世界】 —— 工作区从这里进权限
- 🐳 DeepSeek Harness · 索引