用途
Safe Run 用于为 AI 开发与运维工作选择安全的执行边界。它把任务先分类成「理解这台机器」或「完成一份工作」,再选择最小、最清楚的安全边界,在 Codex、Claude Code 或其他 harness 原生沙盒,与 OpenShell 隔离 worker 之间进行路由。
该技能适用于工作同时可能涉及 host 真实状态、代码修改、跨系统 API、凭证、长时间自主执行或多 agent 的场景,也适用于判断一个任务应留在哪种执行边界内。
核心模型
技能的核心理念是先区分工作物件:
- 工作物件是「这台机器」时,倾向使用 Codex / Claude Code / 当前 harness 原生沙盒,利用 host-native filesystem、host runtime/logs、host process state。
- 工作物件是「一份任务」时,倾向使用 OpenShell isolated worker,使用 cloned/copied workspace、scoped network/API、brokered credentials。
- 若同时需要两者,则拆分为多个阶段(split into phases)。
路由原则
先问:这个 AI 的主要工作物件,是「目前这台 host 的真实状态」,还是「一个可以独立封装、完成后丢弃的 task」?
Route A:harness 原生沙盒
选择 Codex、Claude Code 或当前 harness 的原生 sandbox,条件包括:
- 需要直接读取 host 的 /etc、/var/log、/proc、/sys、package 状态、systemd、socket 或 process state。
- 需要同时理解 repo 与真实部署环境。
- 使用者正在交互式 debug,且会实时监督操作。
- 工作的主要价值来自「看到真实 host」,不是建立干净 worker。
- 可以用原生 sandbox 做「大范围只读 + 少量明确可写路径」。
不要把「原生沙盒」等同于特定技术,应使用当前 harness 在目前 OS 上实际提供的机制:Codex 使用 Codex 原生 sandbox;Claude Code 使用 Claude Code 原生 sandbox;其他 harness 只有在能验证其原生 sandbox 能力时才使用。
Route B:OpenShell isolated worker
选择 OpenShell,条件包括:
- 工作可以从 repo、artifact、task description 或明确输入重建。
- AI 要长时间自主执行,没有人持续盯着。
- 需要跨 Git hosting、cloud API、CI、issue tracker、artifact registry、internal API 等多个外部系统。
- 需要凭证,但不希望 agent process 直接持有真正凭证。
- 需要明确控制 egress、API method/path、provider、credential destination。
- 需要同时跑多个 worker,彼此 filesystem 与生命周期隔离。
- 完成后希望直接 destroy worker,不留下 host runtime 污染。
在 OpenShell 路径中,OpenShell 是主要的外部 capability boundary,不要依赖某个 harness 的内建 approval 来代表整体安全边界。
Route C:混合任务
如果任务同时需要真实 host 状态、isolated worker、外部 API / credential、长时间 autonomous execution,不要直接把整台 host bind mount 到 OpenShell。优先拆成:
- Phase 1:host-aware investigation,使用 harness native sandbox,做读日志、检查配置、检查 runtime/process、提取最小证据,产出 bounded evidence / artifact。
- Phase 2:task execution,使用 OpenShell worker,做 clone/copy repo、修改、测试、调用已批准的 API、创建 patch/branch/PR。
只有当 Phase 2 必须持续读取 live host data,而且无法用 snapshot、log export、API 或明确 artifact 取代时,才考虑 OpenShell explicit read-only bind mount。
使用方式
OpenShell 前置闸门
只要路由结果需要 OpenShell,在执行任何 OpenShell setup、policy、provider 或 sandbox command 前:
- 先确认目前 harness 能读取 NVIDIA OpenShell 的 skills。
- 若无法证明已安装,执行:
npx skills add NVIDIA/OpenShell
- 安装后,先读取本次工作相关的 NVIDIA/OpenShell skill,再产生或修改 OpenShell policy。
NVIDIA/OpenShell skills 不被视为本 Skill 随附内容,而是独立安装的 upstream dependency。如果无法安装或无法读取 upstream skill,不要凭记忆猜 OpenShell 的最新 policy schema 或 CLI 参数;应停在设计/规划层,或改走不依赖 OpenShell 的路径。
Harness 原生沙盒闸门
走 Route A 前:
- 确认当前 harness 与 OS。
- 确认该 harness 的原生 sandbox 目前真的启用。
- 确认至少能表示需要的 read scope、writable workspace、network boundary、必要的 approval / escalation。
若原生 sandbox 不存在、被停用、或无法满足最小边界,不要假装安全;改用 OpenShell、Docker/VM 隔离,或停止高风险 mutation。不要把 bubblewrap 写成跨平台前提;Linux、macOS、Windows 的原生机制不同,路由只依「harness 是否能在目前平台提供所需 boundary」判断。
判断矩阵
| 任务特征 | Harness 原生沙盒 | OpenShell |
|---|---|---|
| 读真实 host /etc / logs / process | 优先 | 不优先 |
| 交互式系统 debug | 优先 | 不优先 |
| 单一 repo、使用者在旁监督 | 优先 | 可选 |
| isolated disposable coding worker | 可用 | 优先 |
| 长时间 autonomous task | 不优先 | 优先 |
| 多 worker 平行 | 有限 | 优先 |
| 多外部系统 API | 可做但分散 | 优先 |
| credential 不可暴露给 agent | harness-specific | 优先 |
| API method/path 细粒度限制 | harness-specific | 优先 |
| 需要直接理解 host runtime | 优先 | 除非明确 RO bind |
| 完成后整个环境可丢弃 | 普通 | 优先 |
快速决策
按顺序判断:
- 需要 live host state 吗?是 → Route A;否 → 下一题。
- 工作能从明确输入重建吗?否 → Route A 或先做 Route A 取证;是 → 下一题。
- 是否长时间自主、跨多外部系统、需要 credential 或多 worker?是 → Route B;否 → 原生 sandbox 通常更简单。
- 两边条件都成立?拆 Route C,不先做大范围 host bind。
典型案例
- 系统故障分析:「分析目前这台 server 的 Nginx / runtime / logs,找出 timeout 根因」→ native-sandbox,理由:真实 host 就是工作物件。
- 交互式 code change:「修改目前 repo,跑测试,我在旁边看结果」→ native-sandbox,理由:单一 workspace、交互监督、原生 sandbox 成本最低。
- Issue 到 PR:「收到 issue 后自动 clone、修改、测试、push branch、开 PR」→ openshell,理由:task-isolated、可重建、需要 Git provider 与长时间自主执行。
- 跨系统调查后修正:「先看 staging host 的实际 logs 与 config,再修 repo 并调用 Git / cloud API」→ native-sandbox -> evidence -> openshell,理由:调查阶段需要 host-native view,实作阶段适合 isolated capability boundary。
OpenShell 使用原则
路由到 OpenShell 后:
- workspace 默认独立建立,不默认 expose host filesystem。
- provider / credential 使用 OpenShell 的机制,不直接把长期 secret 丢进 agent environment。
- egress 与 API scope 只开本 task 需要的最小集合。
- host bind mount 默认不用;若必要,优先 read-only,且明确列出 source、target、理由与移除条件。
- 不把 production mutation 权限和一般 coding 权限放在同一 worker。
- worker 完成后保留必要 artifact / commit / logs,再停止或删除 sandbox。
限制与避免做法
- 不要为了统一而统一:把所有 Codex / Claude Code 都走 OpenShell,再加大量 host bind mounts,会同时失去 host-native debug 的简洁性与 isolated worker 的干净边界。
- 不要把原生 approval 当成 autonomous worker 的完整边界。
- 不要用 OpenShell 模拟整台真实 host;如果工作核心是理解现有 machine,优先使用 harness 原生 sandbox。
路由输出
需要明确记录时,输出一行:
execution_boundary=native-sandbox reason=host-aware
或:
execution_boundary=openshell reason=autonomous-cross-system
或:
execution_boundary=split reason=host-investigation-plus-isolated-execution
若选 OpenShell,再补:
openshell_skill=verified
只有已确认 NVIDIA/OpenShell skill 可读取时才能标记 verified。