Shell 是 B 轴 最强力也最危险的扩展——它把 agent 的动作空间从"我们暴露的几个 tool"瞬间扩成"整个 OS 上能跑的命令"。
建议先读《Permissions + HITL / 安全边界》;如果你是跳读,至少先看本章索引与本页 TL;DR。
课程中段的能力层,用来回答“一个 harness 为什么需要这些补丁”。
Shell 是 B 轴 最强力也最危险的扩展——它把 agent 的动作空间从"我们暴露的几个 tool"瞬间扩成" 整个 OS 上能跑的命令 "。
先看失败模式,再看能力补丁;能力不是越多越好,而是要能对症下药。
课程主线:稳定能力抽象 + 官方机制 + 跨框架共性。
shell tool 是动作空间的一次跳变——它从有限的、可枚举的 tool 集合,瞬间变成"OS 上一切可执行命令"的 open set。这带来巨大能力,也带来巨大风险。对照 00 · 04 节 的 B 轴(动作空间)。一组对比:
read_file / write_file / grep / glob / web_fetch):动作空间 有限、可枚举、可静态分析。shell(command: str):动作空间瞬间扩成"OS 上一切可执行命令的笛卡尔积"。这不是"多了一个工具"——这是"动作空间的拓扑变了"。两个直接后果:
"沙箱"不是一个开关,是 4 个开关:
| 维度 | 能控制什么 | 典型实现手段 | 放任的后果 |
|---|---|---|---|
| 进程 | 能否 fork、能否长跑、CPU 配额 | cgroup / ulimit / process group + kill | fork bomb / 占满 CPU / 后台进程残留 |
| 文件系统 | 能读/写哪些路径 | chroot / mount namespace / overlay fs / AppArmor | 读 ~/.ssh、改 /etc、删用户文件 |
| 网络 | 能否 outbound、能访问哪些 host/port | network namespace / iptables / proxy + 域名白名单 | SSRF 内网、数据外泄、调远端 API |
| 时间 | 单次命令最长跑多久、整个 agent 总时间 | timeout 命令 + watchdog | 挂死的命令吃光 budget;agent 永远不退出 |
4 个维度必须同时考虑——只控其一不算沙箱:只限文件不限网络 = 数据可被外传;只限网络不限进程 = fork bomb。
大多数 production agent 把"4 维沙箱"打包成几档预设。点击切换看每档的 4 维取舍:
| 栈 | 隔离强度 | 启动开销 | 典型场景 |
|---|---|---|---|
| 裸 subprocess + pty | 弱(仅靠 permission |