NemoClaw
安全运行 OpenClaw 常驻助手的开源技术栈。基于 NVIDIA OpenShell 运行时,每个网络请求、文件访问和推理调用都由声明式策略管理。
推理通过 NVIDIA 云 路由,属于 NVIDIA Agent Toolkit 的一部分。
关于 NemoClaw
NemoClaw 是 OpenClaw 针对 NVIDIA OpenShell 的插件,将 OpenClaw 移入沙箱环境。
沙箱化 OpenClaw
预配置的 OpenShell 沙箱,从首次启动起就应用严格的文件系统和网络策略
路由推理
代理流量通过 build.nvidia.com 流向云端托管的 Nemotron 3 Super 120B
生命周期管理
蓝图版本控制、摘要验证和可重现的沙箱设置
核心优势
沙箱化执行
Landlock、seccomp 和网络命名空间隔离,默认不授予任何访问权限
NVIDIA 云推理
代理流量通过 build.nvidia.com 路由到云端托管的模型
声明式网络策略
出口规则在 YAML 中定义,未知主机被阻止并显示给操作员审批
单一 CLI 管理
nemoclaw 命令编排整个堆栈
典型用例
🤖
全天候助手
受控网络访问和操作员批准出口
🧪
沙箱化测试
在锁定环境中测试代理行为
🚀
远程 GPU 部署
部署到远程 GPU 实例进行持久运行
工作原理
NemoClaw 结合轻量级 CLI 插件和版本化蓝图,将 OpenClaw 移入受控沙箱。
| 组件 | 角色 |
|---|---|
| 插件 | TypeScript CLI 命令,用于启动、连接、查看状态和日志 |
| 蓝图 | 编排沙箱创建、策略和推理设置的版本化 Python 制品 |
| 沙箱 | 运行 OpenClaw 的隔离 OpenShell 容器,具有策略强制的出站网络和文件系统访问控制 |
| 推理 | NVIDIA 云模型调用,通过 OpenShell 网关路由,对代理透明 |
蓝图生命周期
解析
定位蓝图构件并检查版本兼容性约束
验证
根据预期值检查构件摘要
计划
确定要创建或更新的 OpenShell 资源
应用
通过调用 openshell CLI 命令执行计划
状态
运行器报告当前状态
推理路由
Agent
(sandbox)
OpenShell
gateway
NVIDIA Cloud
build.nvidia.com
保护层
| 层 | 保护内容 | 应用时机 |
|---|---|---|
| 网络 | 阻止未经授权的出站连接 | 运行时可热重载 |
| 文件系统 | 防止在 /sandbox 和 /tmp 之外进行读写操作 | 沙箱创建时锁定 |
| 进程 | 阻止权限提升和危险的系统调用 | 沙箱创建时锁定 |
| 推理 | 将模型 API 调用重定向到受控后端 | 运行时可热重载 |
快速开始
按照以下步骤启动您的第一个沙箱化 OpenClaw 代理。
NemoClaw 目前需要全新安装的 OpenClaw。
先决条件
硬件
| 资源 | 最低 | 推荐 |
|---|---|---|
| CPU | 4 vCPU | 4+ vCPU |
| 内存 | 8 GB | 16 GB |
| 磁盘 | 20 GB | 40 GB |
软件
| 依赖项 | 版本 |
|---|---|
| Linux | Ubuntu 22.04+ |
| Node.js | 20+ |
| npm | 10+ |
| Docker | 已安装并运行 |
| OpenShell | 已安装 |
安装 NemoClaw
下载并运行安装脚本,它会自动安装 Node.js(如尚未安装),然后运行引导向导。
$ curl -fsSL https://nvidia.com/nemoclaw.sh | bash
安装完成后,会显示运行环境的摘要:
────────────────────────────────────────────────── Sandbox my-assistant (Landlock + seccomp + netns) Model nvidia/nemotron-3-super-120b-a12b (NVIDIA Cloud API) ────────────────────────────────────────────────── Run: nemoclaw my-assistant connect Status: nemoclaw my-assistant status Logs: nemoclaw my-assistant logs --follow ────────────────────────────────────────────────── [INFO] === Installation complete ===
与代理聊天
连接到沙箱:
$ nemoclaw my-assistant connect
OpenClaw TUI
打开交互式聊天界面
sandbox@my-assistant:~$ openclaw tui
OpenClaw CLI
发送单条消息并打印回复
sandbox@my-assistant:~$ openclaw agent --agent main --local -m "hello" --session-id test
推理配置
推理请求永远不会直接离开沙箱。OpenShell 拦截每个调用并路由到 NVIDIA 云提供者。
切换推理模型
在沙箱运行时更改活动推理模型,无需重启:
$ openshell inference set --provider nvidia-nim --model nvidia/nemotron-3-super-120b-a12b
可用模型
| 模型 ID | 标签 | 上下文窗口 | 最大输出 |
|---|---|---|---|
nvidia/nemotron-3-super-120b-a12b | Nemotron 3 Super 120B | 131,072 | 8,192 |
nvidia/llama-3.1-nemotron-ultra-253b-v1 | Nemotron Ultra 253B | 131,072 | 4,096 |
nvidia/llama-3.3-nemotron-super-49b-v1.5 | Nemotron Super 49B v1.5 | 131,072 | 4,096 |
nvidia/nemotron-3-nano-30b-a3b | Nemotron 3 Nano 30B | 131,072 | 4,096 |
默认配置使用 Nemotron 3 Super 120B。可在运行时切换到任何模型。从 build.nvidia.com 获取 API 密钥。
网络策略
沙箱以严格的基线策略启动。仅允许策略中列出的端点。未知主机被阻止并显示给操作员审批。
操作员审批流程
代理向未列出的主机发出网络请求
OpenShell 阻止连接并记录尝试
TUI 显示被阻止的请求(主机、端口、请求二进制文件)
操作员批准或拒绝请求
如果批准,端点添加到当前会话的运行策略中
打开 TUI 监控沙箱活动:
$ openshell term
自定义网络策略
静态更改
编辑策略文件并重新运行引导向导,更改在重启间持久存在
$ nemoclaw onboard
动态更改
对运行中的沙箱应用策略更新,无需重启
$ openshell policy set <policy-file>
远程部署
通过 Brev 在远程 GPU 实例上运行 NemoClaw。
nemoclaw deploy 命令是实验性的,可能无法按预期工作。
$ nemoclaw deploy <instance-name>
部署脚本在 VM 上执行以下步骤:
- 安装 Docker 和 NVIDIA Container Toolkit(如果存在 GPU)
- 安装 OpenShell CLI
- 运行 nemoclaw 设置以创建网关、注册提供商并启动沙箱
- 启动辅助服务(Telegram 桥接、cloudflared 隧道)
配置 GPU 类型:
$ export NEMOCLAW_GPU="a2-highgpu-1g:nvidia-tesla-a100:2" $ nemoclaw deploy <instance-name>
Telegram 桥接
在 Telegram 机器人和沙箱内运行的 OpenClaw 代理之间转发消息。
① 创建机器人
在 Telegram 中向 BotFather 发送 /newbot 并获取令牌。
② 设置环境变量
$ export TELEGRAM_BOT_TOKEN=<your-bot-token>
③ 启动服务
$ nemoclaw start
④ 限制访问(可选)
$ export ALLOWED_CHAT_IDS="123456789,987654321" $ nemoclaw start
监控
使用 NemoClaw 状态、日志和 TUI 工具检查沙箱健康状况、跟踪代理行为并诊断问题。
检查健康状况
$ openclaw nemoclaw status
查看日志
$ openclaw nemoclaw logs -f
监控网络活动
$ openshell term
故障排除
| 症状 | 解决方法 |
|---|---|
| 沙箱显示为已停止 | 运行 nemoclaw onboard 重新创建沙箱 |
| 推理请求超时 | 验证提供商端点可到达,检查 openclaw nemoclaw status |
| 代理无法到达外部主机 | 使用 openshell term 打开 TUI 并批准被阻止的请求 |
| 蓝图运行失败 | 运行 openclaw nemoclaw logs --run-id <id> 查看错误 |
| cgroup v2 错误 | 运行 nemoclaw setup-spark 应用修复 |
| 沙箱内状态显示"未运行" | 在主机上运行 openshell sandbox status |
架构
NemoClaw 由 TypeScript 插件和 Python 蓝图两个主要组件构成。
NemoClaw 插件
nemoclaw/ ├── src/ │ ├── index.ts // 插件入口 │ ├── cli.ts // 子命令接线 │ ├── commands/ │ │ ├── launch.ts // 全新安装到 OpenShell │ │ ├── connect.ts // 交互式 shell │ │ ├── status.ts // 运行状态 + 健康状况 │ │ ├── logs.ts // 流式日志 │ │ └── slash.ts // /nemoclaw 聊天命令 │ └── blueprint/ │ ├── resolve.ts // 版本解析 │ ├── fetch.ts // 从 OCI 注册表下载 │ ├── verify.ts // 摘要验证 │ ├── exec.ts // 子进程执行 │ └── state.ts // 持久状态 ├── openclaw.plugin.json └── package.json
NemoClaw 蓝图
nemoclaw-blueprint/ ├── blueprint.yaml // 清单 ├── orchestrator/ │ └── runner.py // CLI 运行器 └── policies/ └── openclaw-sandbox.yaml // 基线策略
设计原则
- ▸ 薄插件,版本化蓝图
- ▸ 尊重 CLI 边界
- ▸ 供应链安全 — 不可变、摘要验证
- ▸ 可重现设置
命令参考
NemoClaw 提供插件命令(openclaw nemoclaw)和独立主机命令(nemoclaw)两个接口。
主机命令
| 命令 | 描述 |
|---|---|
nemoclaw onboard | 交互式设置向导 |
nemoclaw list | 列出所有注册的沙箱 |
nemoclaw deploy <instance> | 通过 Brev 部署到远程 GPU 实例(实验性) |
nemoclaw <名称> connect | 连接到沙箱的交互式 shell |
nemoclaw <名称> status | 显示沙箱状态和推理配置 |
nemoclaw <名称> logs [--follow] | 查看沙箱日志 |
nemoclaw <名称> destroy | 停止 NIM 容器并删除沙箱 |
nemoclaw <名称> policy-add | 向沙箱添加策略预设 |
nemoclaw <名称> policy-list | 列出可用的策略预设 |
nemoclaw start / stop / status | 管理辅助服务 |
nemoclaw setup-spark | 在 DGX Spark 上设置(需 sudo) |
openshell term | 启动 OpenShell TUI |
插件命令
| 命令 | 描述 |
|---|---|
openclaw nemoclaw launch [--profile ...] | 在 OpenShell 沙箱中引导 OpenClaw |
openclaw nemoclaw status [--json] | 显示沙箱健康状况和推理信息 |
openclaw nemoclaw logs [-f] [-n] [--run-id] | 流式传输日志 |
/nemoclaw status | 聊天内斜杠命令显示状态 |
推理配置文件
NemoClaw 附带在 blueprint.yaml 中定义的推理配置文件。
default — NVIDIA 云
提供商类型
nvidia
端点
https://integrate.api.nvidia.com/v1
模型
nvidia/nemotron-3-super-120b-a12b
凭证
NVIDIA_API_KEY 环境变量
$ openshell inference set --provider nvidia-nim --model <model-name>
网络策略参考
基线策略定义在 nemoclaw-blueprint/policies/openclaw-sandbox.yaml 中。
文件系统
| 路径 | 访问 |
|---|---|
/sandbox, /tmp, /dev/null | 读写 |
/usr, /lib, /proc, /dev/urandom, /app, /etc, /var/log | 只读 |
默认允许的端点
| 策略 | 端点 | 二进制文件 | 规则 |
|---|---|---|---|
claude_code | api.anthropic.com:443 等 | /usr/local/bin/claude | 所有方法 |
nvidia | integrate.api.nvidia.com:443 等 | claude, openclaw | 所有方法 |
github | github.com:443 | gh, git | 所有方法 |
github_rest_api | api.github.com:443 | gh | GET, POST, PATCH, PUT, DELETE |
clawhub | clawhub.com:443 | openclaw | GET, POST |
openclaw_api | openclaw.ai:443 | openclaw | GET, POST |
openclaw_docs | docs.openclaw.ai:443 | openclaw | 仅 GET |
npm_registry | registry.npmjs.org:443 | openclaw, npm | 仅 GET |
telegram | api.telegram.org:443 | 任何 | GET, POST on /bot*/** |
所有端点使用 TLS 终止并在端口 443 强制执行。