让 AI 智能体自己读文件、装依赖、调 API、用密钥,是今天所有 agent 产品的默认期望。可一旦把不受控的代理放进生产环境,它就不再只是“帮你写代码”——它可能读到本不该看的凭证、把请求发到任意外网、在宿主机上执行任意命令。过去一年里,被 prompt 注入诱导后“顺便删库”或“顺手外传密钥”的案例已经不止一起。开发者要的不是“能不能跑”,而是“它能碰什么、碰不到什么,由我定义”。
NVIDIA 给出的答案不是又一个聊天壳,而是一层跑在系统调用级别的运行时。它把“代理能做什么”从一份靠自觉遵守的提示词,变成由内核强制执行的策略。你不信任模型,你信任一条条写清楚的策略,以及能在策略生效前就证明“这次变更会放宽哪些权限”的验证器。
这就是 OpenShell 的定位:自主 AI 智能体的安全私有运行时。下面从真实工程视角拆解它解决什么、怎么装、怎么用。
项目基本信息
| 信息项 | 详情 |
|---|---|
| 项目名称 | OpenShell |
| GitHub地址 | https://github.com/NVIDIA/OpenShell |
| 项目描述 | 面向自主 AI 智能体的安全、私有运行时 |
| 作者 | NVIDIA |
| 开源协议 | Apache License 2.0 |
| 开源状态 | 公开 |
| Languages | Rust |
| 支持平台 | Linux / macOS / Windows |
| 最后更新 | 2026-10-24 |
一、项目介绍
OpenShell 由 NVIDIA 维护,核心思路是“给每个智能体一个隔离沙箱,并且把访问控制的边界钉死在内核层”。它不像传统 agent 框架那样把安全寄托在系统提示里,而是用两套机制共同保证:其一是内核级拦截,每个代理运行在被内核控制的隔离环境里,能访问哪些文件、能发起哪些系统调用、网络出口去往哪个地址,都在离开沙箱前经过策略检查;其二是形式化验证,任何一次策略变更在生效前,OpenShell 都会预先算出“这次改动会新开放哪些权限”,比如首次允许访问某台带凭证的主机、首次调用某个 API 方法,这类高风险变更会被拦下来等待人工确认。
代理在沙箱里永远看不到真实密钥,OpenShell 只在请求发往白名单端点时才临时注入凭证。整套体系由网关(gateway)、监督器(supervisor)和沙箱(sandbox)三者配合,形成控制平面。最新 0.1.x 系列已经稳定了发布节奏,并新增了隔离原语与扩展接口,当前最新版本为 v0.1.5。
二、核心优势
第一,内核级强制优于提示词自觉。无论模型被怎么诱导,文件系统、系统调用和网络的每一跳都受内核管控,越权行为在源头被挡住,而不是靠模型“记得别乱来”。
第二,策略变更可验证。形式化验证会把“放宽了哪些访问”提前暴露出来,团队可以在合并前评审,而不是等事故后复盘。这对有多人协作、多个 agent 共享一台机器的场景尤其关键。
第三,凭证不外泄。真实密钥只在请求真正发往已批准端点时才注入,沙箱内部进程拿到的永远是占位或拒绝,从根本上切断“密钥被 agent 顺走”的路径。
第四,可观测与可审计。OpenShell 收集的是匿名遥测(操作类别与计数,不含路径、提示词、凭证),并允许用环境变量完全关闭,满足企业合规的底线要求。
三、适用场景
最典型的是“让编码 agent 在真实代码库上干活”——比如跑 OpenCode 对一个免费模型做改动,同时把文件读写、包安装、网络调用都关进沙箱。其次是多 agent 协作的研发平台,当一批自主代理共享算力与网络出口时,用统一策略区分“哪个 agent 能碰生产库、哪个只能读文档”。
它也适合需要在合规边界内试用第三方 agent 的团队:你不必信任对方模型的内部逻辑,只要把出口、文件、凭证策略写清楚,就能在受控环境里放大模型的自主能力。对 Kubernetes 用户,OpenShell 还提供 Helm 部署,要求集群 CNI 能强制 NetworkPolicy。
四、安装教程
OpenShell 需要 Linux、Apple Silicon 上的 macOS,或带 WSL 2 的 Windows(实验性),并依赖 Docker、Podman 或宿主机虚拟化。官方安装脚本一行即可:
curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh安装脚本会同时配置 CLI 与本地网关。随后创建一个名为 demo 的沙箱:
openshell sandbox create --name demo常见报错与处理:
error: docker not found / podman not found说明没有容器运行时。在 macOS 上确认 Docker Desktop 已启动;在 WSL 2 的 Windows 里确认已安装 Docker 或 Podman 并能在终端调用。
permission denied while opening sandbox image多发生在非特权用户或受限虚拟化环境。确认当前用户能操作容器运行时,或改用宿主机虚拟化模式。
若想让编码代理直接驱动 CLI,可安装官方技能:
npx skills add NVIDIA/OpenShell各语言 SDK 的安装方式:Python 用 uv add openshell,TypeScript 用 npm install @nvidia/openshell-sdk(走 GitHub Packages),Go 用 go get github.com/NVIDIA/OpenShell/sdk/go@latest,Rust 通过 cargo 指定 git 与 release tag 安装。
五、使用示例
假设你要让一个代理读取项目源码并调用外部 API,但绝不允许它访问 ~/.ssh 与生产数据库。先在策略里声明:
filesystem:
allow:
- /home/dev/project
deny:
- /home/dev/.ssh
network:
allow_hosts:
- api.example.com然后启动沙箱并运行代理任务:
openshell sandbox create --name demo
openshell run demo --agent opencode --prompt "读取 ./src 并修复类型错误"预期输出里,凡是代理尝试打开 ~/.ssh 或向非白名单主机发请求,都会被网关记录为被拒事件:
[policy] DENY read /home/dev/.ssh/id_rsa (not in allowlist)
[policy] DENY connect db.prod.internal:5432 (host not allowed)
[task] applied 3 edits to ./src/utils.ts这种“默认拒绝 + 显式放行”的反馈,正是 OpenShell 区别于普通 agent 框架的地方。
六、常见问题
问:OpenShell 和直接用 Docker 跑 agent 有什么区别?
答:Docker 提供隔离,但访问规则仍靠你手写的挂载与网络配置,且无法在策略变更前做形式化验证。OpenShell 在内核层强制策略,并在放行前证明“这次会开放什么”。
问:凭证真的不会被代理看到吗?
答:是的。沙箱内进程看到的不是真实密钥,OpenShell 只在请求发往已批准端点时注入,且只注入该端点需要的那一份。
问:Windows 能用吗?
答:支持,但走 WSL 2(实验性)。纯 Windows 原生运行时尚未作为稳定路径提供,生产建议用 Linux 或 Apple Silicon macOS。
问:遥测会泄露我的代码吗?
答:不会。遥测只收集操作类别与计数,不含沙箱名、主机名、文件路径、提示词、凭证或模型名;用 OPENSHELL_TELEMETRY_ENABLED=false 可彻底关闭。
七、总结
OpenShell 把“AI 智能体能做什么”从一句软约束变成内核强制的硬边界。对想在真实环境里放大 agent 自主能力、又不肯把密钥和网络出口完全交出去的团队,它提供了一条清晰的路:写策略、验变更、注入凭证、审日志。开源协议为 Apache 2.0,可自由用于商业场景,建议从官方文档的“运行你的第一个代理”起步,先在小项目上体会“默认拒绝”带来的安心感。
评论 0
还没有评论,来说两句吧。