
nono v0.75.0
安全的代理多路复用执行路径——零信任、零配置、零延迟。
[!NOTE] 在 1.0 版本发布之前,API 正在趋于稳定。必要时仍可能发生 API 变更,但会保持在最低限度。
[!IMPORTANT] 组织迁移: 官方 nono 注册表命名空间已从
always-further迁移至nolabs-ai。请更新你的脚本、配置文件和 CI 中的所有引用。 如果你已经在旧命名空间下安装了某个包,请先将其移除,然后再从新命名空间拉取:nono remove always-further/claude nono pull nolabs-ai/claude旧命名空间将被弃用——请立即迁移。
在几秒内以零延迟沙箱运行 AI 代理,且无需任何设置 — Claude Code、Codex、Pi、CoPilot、Hermes、OpenCode、OpenClaw 等 — nono 让你在几秒内即可启动运行,无需守护进程、无需容器、无需虚拟机,也不占用磁盘空间。开箱即用,nono 强制执行最小权限沙箱,并支持 macOS、Linux 和 Windows(WSL2)。
从这里开始,fork 配置,调整它、定制主题、让它成为你自己的,并通过 nono 注册表与你的团队或社区分享。
想要在团队内或大规模地投入运营和运行? 世界上一些最大科技公司的工程师使用 nono 作为其工作流的一部分,或在生产环境中运行 AI 代理。
“Datadog 的工程师希望他们的代理快速行动,同时我们希望在此过程中保护我们的凭据和生产系统。nono 是唯一一个同时为我们提供细粒度、按命令策略和复杂凭据管理的沙箱,能够适配现有复杂的真实世界工具链。” James Carnegie -- Datadog 高级安全工程师
“安全融入我们在 Okta 构建的一切。nono 让我们有信心通过将 AI 代理的执行隔离在高度安全、策略控制的沙箱中来创新。它确保我们的凭据保持锁定和保护,同时不牺牲开发者的速度。” Leonardo Zanivan,Okta 首席工程师
被众多人效仿 — nono 开创了零延迟、零设置的代理沙箱,并持续在代理沙箱领域创新和引领。
快速开始
curl
curl -fsSL https://nono.sh/install.sh | sh
macOS / Linux (Homebrew)
brew install nono
Nix
该项目提供了一个 Nix flake,包含两个输出:
#default(从源码构建)— 使用buildRustPackage从源码构建(首次运行会编译 crate 及其依赖)#prebuilt— 从 GitHub Releases 获取官方发布二进制文件(快速,无需编译)
# Run without installing (from source)
nix run github:nolabs-ai/nono
# Run the prebuilt binary (no compilation)
nix run github:nolabs-ai/nono#prebuilt
# Install into your profile
nix profile add github:nolabs-ai/nono
# Pin to the latest release
nix run "github:nolabs-ai/nono?ref=$(curl -fsSL https://api.github.com/repos/nolabs-ai/nono/releases/latest | jq -r .tag_name)"
其他平台 — Debian/Ubuntu、Fedora、Arch、RHEL、openSUSE、WSL2:查看安装说明。
运行它!
在注册表中搜索一个代理,然后运行它:
$ nono search opencode
nolabs-ai/opencode - Official Opencode Plugin
$ nono run --profile nolabs-ai/opencode -- opencode
就是这样。opencode 现在以对当前目录的读/写访问权限运行,除此之外什么都没有 — 你的 SSH 密钥、你的云凭据、磁盘的其余部分对它来说都是不可见的。
所有流行代理的配置文件都位于 registry.nono.sh,已加固并可直接拉取。每个配置文件都捆绑了正确的文件系统范围、网络允许列表、钩子、技能等。
让它成为你自己的!
超出了默认配置?搭建一个配置文件并调整它 — 使用你已经熟悉的相同命令:
nono profile init opencode --extends nolabs-ai/opencode
nono run --profile opencode -- opencode
nono profile init 为你的代理导出一个可扩展且可编辑的配置文件,它继承自指定的基础配置文件。该配置文件是可组合的 JSON,因此你可以在与团队分享或向社区发布之前,审查确切的文件系统、网络、凭据和工具规则。
你是代理开发者,想要发布自己的代理包吗?我们非常欢迎你并推广你的工作!查看文档。
沙箱化代理调用的工具
nono 并不止步于“把代理放进沙箱”。代理将实际工作委托给工具:git、gh、curl、kubectl、包管理器、构建脚本、MCP 客户端/服务器,以及 PATH 上的其他任何东西。这些工具往往是秘密、网络访问和副作用出现的地方。大多数沙箱只是给代理一个笼统的策略,其中秘密对整个代理和每个工具都普遍可用,但 nono 不同:
nono 可以将被委托的工具放入它们自己隔离的命令沙箱中,不受代理控制。代理获得其会话沙箱;当它调用受控工具时,nono 的代理会以命令策略启动该工具,并带有自己的文件系统策略、网络策略和凭据。命令沙箱不会继承会话沙箱的宽泛 --allow 授权、CWD 访问、原始凭据路径或网络访问,除非其命令沙箱策略如此规定。
这意味着配置文件可以表达如下规则:
- 代理可以调用
git,但git只能获得仓库、受信任的 Git 配置文件和 Git 对象存储 - 代理可以调用
gh,但gh只能通过 nono 的凭据代理接收 GitHub token - 该 token 只能通过 L7 过滤针对选定的 GitHub API 方法和路径使用
git可以在链式策略下调用ssh,而来自代理的直接ssh保持被拒绝
策略存在于配置文件中,而不是提示词中。代理可以请求一个工具,但它无法扩大该工具的沙箱、铸造新密钥,或从会话内部绕过端点策略。
{
"command_policies": {
"credentials": {
"github-api": {
"type": "proxy",
"upstream": "https://api.github.com",
"credential_key": "keyring://gh:github.com/example?decode=go-keyring",
"env_var": "GH_TOKEN",
"inject_header": "Authorization",
"credential_format": "Bearer {}"
}
},
"commands": {
"gh": {
"from": {
"session": {
"sandbox": {
"fs_read": ["."],
"credentials": [
{
"name": "github-api",
"endpoint_policy": {
"default": "deny",
"allow": [
{ "method": "GET", "path": "/repos/nolabs-ai/nono/issues/**" }
]
}
}
]
},
"invocation_policy": {
"default": "deny",
"allow": [
{ "argv": { "prefix": ["issue", "list"] } },
{ "argv": { "prefix": ["issue", "view"] } }
]
}
}
}
}
}
}
}
在沙箱化工具执行中阅读更多内容。
准备好深入了吗?
前往文档,探索 nono 丰富的可组合策略系统、凭据注入、L7 过滤、供应链安全、回滚、多路复用、审计等。
库支持
nono 为 Rust、Python、TypeScript 和 Go 提供 FFI 绑定。
也可作为 Python、TypeScript 和 Go 绑定使用。
贡献
我们鼓励使用 AI 工具来贡献。但是,在提交之前,你必须理解并仔细审查任何 AI 生成的代码。安全至关重要。如果你不理解某个更改是如何工作的,请先在 Discord 中询问。
安全
如果你发现安全漏洞,请不要公开提交 issue。请遵循我们的安全政策中的流程。
许可证
Apache-2.0