VM0 云沙盒全天运行智能体落地方案
AI 导读
VM0 云沙盒全天运行智能体落地方案 版本:v1.0面向:研发/数据/运营自动化团队(可作为“智能体运行时”产品化底座)范围:用 VM0 在云端沙盒中运行 Claude Code / Codex 智能体;用自然语言(AGENTS.md/CLAUDE.md)定义工作流;通过内置调度实现 24/7 自动化;以“可回放、可审计、可控权限”为安全底线。 0. 结论摘要 VM0...
VM0 云沙盒全天运行智能体落地方案
版本:v1.0
面向:研发/数据/运营自动化团队(可作为“智能体运行时”产品化底座)
范围:用 VM0 在云端沙盒中运行 Claude Code / Codex 智能体;用自然语言(AGENTS.md/CLAUDE.md)定义工作流;通过内置调度实现 24/7 自动化;以“可回放、可审计、可控权限”为安全底线。
0. 结论摘要
VM0 的核心价值不是“又一个工作流编排器”,而是把智能体的运行时做成一个可复用的基础设施单元:
- 运行环境:智能体在远端隔离沙盒里执行,避免把“会执行命令的模型”直接丢进员工笔记本或生产主机。
- 工作流接口:用自然语言写
AGENTS.md作为系统级指令,VM0 会在运行时把它加载进智能体上下文(Claude Code 默认映射到~/.claude/CLAUDE.md)。 - 能力扩展:用 Skills(GitHub tree URL)挂载 SaaS 集成能力;VM0 下载并挂载到沙盒中固定目录,智能体可直接调用。
- 持久化与回放:用 Artifact 做工作目录的持续状态;用 Session / Checkpoint 做续跑与分支调试;用 Logs 做可观测性闭环。
- 全天运行:用 VM0 内置 scheduler 配置 cron 式运行,不依赖 GitHub Actions 或外部 cron。
落地目标:把“本地跑一跑的智能体脚本”升级为可持续运行、可审计、可控成本、可快速迭代的云端自动化系统。
1. 背景与目标
1.1 典型痛点(你现在就会遇到)
- 本地运行:电脑合盖就停;网络/权限/依赖漂移;无法稳定复现。
- 安全:一旦给了本地智能体高权限,它的“失误”就直接变成“事故半径”。
- 运维:一堆零散脚本 + cron + CI 拼装出来的系统,观察、回滚、复现都很痛。
- 协作:靠口口相传的 prompt、散落的 token、不可追溯的输出,最终变成组织级混乱。
1.2 目标定义(落地可验收)
- 把 Claude Code / Codex 统一纳入云端沙盒执行(同一套运行、存储、观测、调度机制)。
- 把“意图”固化成可版本化的工作流:
vm0.yaml + AGENTS.md进入代码仓库,变成可 review、可回滚的资产。 - 把“状态”变成可追溯的存储对象:Volume(工具/技能/配置)与 Artifact(工作产物)严格分离。
- 把“自动化”做成可控的调度系统:内置 schedule + 变量/密钥注入 + 输出落盘。
- 把“安全”做成默认值:最小权限、隔离执行、审计与回放、供应链约束(技能 pin)。
2. VM0 机制速记(用于方案设计对齐)
2.1 Agent 的组成
VM0 把一个“智能体”拆成四个部分:
- Provider:默认 Claude Code;
vm0.yaml的framework也支持codex(标注为 experimental)。 - Sandbox:运行时环境(含系统工具、依赖、基础配置),可通过
apps预装工具(如 GitHub CLI)。 - Instructions:自然语言工作流(
AGENTS.md/CLAUDE.md),运行时会被加载进智能体上下文。 - Skills:可复用能力包(GitHub tree URL),运行时被下载并挂载到沙盒指定目录。
2.2 关键配置文件
vm0.yaml:定义 agent、framework、skills、apps、volumes、environment。AGENTS.md:定义工作流与行为规则(系统提示词的一部分)。
2.3 Skills(能力扩展)
- skills 以 GitHub tree URL 引用:
https://github.com/{owner}/{repo}/tree/{ref}/{path}。 - VM0 运行时会下载并挂载到沙盒内固定路径(Claude Code 侧为
~/.claude/skills/{skillName}/)。
2.4 存储模型:Volume vs Artifact
- Volume:预置环境与技能/配置的实现形态;适合放私有技能、脚本、dotfiles。
- Artifact:工作目录持久化;运行前加载、运行后自动回写;适合累积产物与状态。
2.5 运行、续跑、回放
vm0 run:执行 agent,可注入 vars/secrets,可绑定 artifact。- Session:延续最近一次会话与 artifact 状态。
- Checkpoint:每次 run 产生快照点;可
vm0 run resume回到某个 checkpoint 进行分支尝试。 vm0 logs:查看运行日志。
2.6 内置调度
vm0 schedule setup:创建/编辑计划任务(daily/weekly/monthly/once)。- 可在 schedule 配置中附带
--var与--secret,每次触发都自动注入。 - VM0 自带调度基础设施,不需要 GitHub Actions 或外部 cron。
3. 目标用例库(优先级从“能稳定落地”到“高风险高收益”)
P0:可稳定自动化、低权限、收益确定
- 日报/周报生成:拉取多源数据 -> 汇总 -> 写入 Notion -> Slack 推送。
- 技术情报/竞品扫描:Hacker News / RSS / 目标网站 -> Firecrawl 抽取 -> 结构化报告。
- GitHub 例行维护:issue triage、PR 列表、变更摘要、release note 草稿(不自动合并)。
P1:中等风险,需要更强治理
- CI 失败自诊断:拉日志 -> 定位原因 -> 生成修复 PR(需要分支保护 + 代码 review)。
- 依赖升级与安全扫描:生成升级分支、跑测试、输出变更报告(需要成本与失败回滚机制)。
P2:高风险(默认不自动化写生产)
- 生产系统操作类:部署/回滚/配置变更(必须引入审批闸门、只读检查、强审计)。
4. 落地总体架构
4.1 逻辑架构(概念图)
开发者/CI
|
| vm0 CLI / VM0 API
v
VM0 控制面
- Agent Compose/版本管理
- Scheduler(内置定时触发)
- Credential/Secret 管理
- Run 编排(创建 run / session / checkpoint)
- Observability(logs/元数据)
|
v
Sandbox Runner(隔离执行环境)
- Provider: Claude Code / Codex
- Apps: 预装工具(如 GitHub CLI)
- Mounted Volume: skills / scripts / configs
- Working Dir + Artifact: 运行产物与状态
|
v
外部系统(Skills 触达)
- GitHub / Slack / Notion / Gmail / Firecrawl / ...
4.2 隔离与沙盒技术栈(对外口径)
- “隔离沙盒”是你对风险的第一道硬边界:把智能体的执行从个人设备与生产主机剥离。
- VM0 开发者在公开讨论中提到其托管沙盒使用 E2B 的 managed sandbox(Firecracker microVMs),并在推进自研 Firecracker runner 与网络防火墙能力;这意味着微虚拟机级隔离是其重要安全叙事基座。(参考:Hacker News 讨论串)
5. 方案设计
5.1 代码与资产组织方式
建立三个仓库(或 monorepo 三个目录):
agents/:每个 agent 一个目录(vm0.yaml+AGENTS.md+ 可选脚本/模板)。skills-private/:企业内部私有 skills(以 Volume 形式管理)。ops/:运行策略与治理(变量命名规范、审计规则、成本配额、Runbook)。
这样做的目的:把“prompt/技能/运行参数/输出”从个人电脑迁移到可审计的仓库结构中。
5.2 Agent 编写规范(AGENTS.md 模板)
把 AGENTS.md 固化成可 review 的“工作说明书”,强制包含以下段落:
# <Agent Name>
## Role
你是谁,你负责什么,不负责什么。
## Inputs
- 触发方式:手动 run / schedule
- 输入参数:vars/secrets/外部数据来源
## Workflow
1. ...
2. ...
3. ...
## Rules (Hard)
- 不做破坏性操作(除非满足条件 X)
- 输出必须写入指定文件
- 遇到不确定:停止在安全点并输出待确认清单(用文件表达)
## Safety / Data Handling
- 不把 secrets 写入 artifact
- 只访问允许域名列表(如需要)
- 记录关键动作到 audit.md
设计要点:把“口头 prompt”变成“可读的规章”,用文件输出替代聊天确认,从而减少不确定性交互。
5.3 配置与凭据策略(vars / secrets / credentials)
VM0 支持三类模板变量:
vars:非敏感配置(每次 run 可以不同)。secrets:敏感值,运行时注入,不持久保存。credentials:敏感值,存 VM0 平台,长期复用(值不可被列出)。
落地约束:
- 业务系统访问统一走
credentials(集中托管、便于轮换)。 - CI 动态注入走
secrets(最小暴露面)。 - 环境/开关走
vars(避免把配置写死在 prompt)。
5.4 Skills 供应链管理
技能引用是 GitHub URL;这既是优势(可复用),也是供应链入口。
落地约束(直接写进团队规范):
- P0 业务只允许 tag 或 commit SHA pin,禁止直接跟随
main。 - 私有技能不走公网:用 Volume 管理(
vm0 volume init/push/pull)。 - 新 skill 引入必须走一次“权限与副作用评审”:它能访问什么 API、会写什么文件、是否可能 exfiltrate 数据。
5.5 状态与产物管理(Artifact 策略)
- 每个长期任务必须绑定 artifact:
--artifact-name <project>。 - artifact 内必须有
audit.md(动作流水)与outputs/(产物目录)。 - artifact 中禁止写入 secrets;输出文件必须做敏感信息脱敏(在 AGENTS.md 里写 Hard Rule)。
5.6 运行与发布流程(开发到生产)
定义四个环境态:
- dev:手动
vm0 run,不设 schedule。 - staging:开启 schedule 但用测试数据/只读 token。
- prod-read:生产数据读取 + 报告输出(不写回外部系统)。
- prod-write:允许写回(例如推送 Notion、评论 PR),必须满足审批闸门规则(见 5.8)。
发布流程(命令级):
vm0 init:初始化结构。vm0 compose vm0.yaml:上传配置与引用技能,生成可运行版本。vm0 run ... --artifact-name ...:验证输出与副作用。vm0 schedule setup ...:上线定时。
5.7 可观测性与可回放(排障基线)
- 每次 run 必须留存:run-id、session-id、checkpoint-id(写入 artifact 的
audit.md)。 - 事故排查路径固定为:
vm0 logs <run-id>看行为vm0 artifact pull看产物vm0 run resume <checkpoint-id>复现/分支修复
- 任何“智能体发疯”问题,先回放 checkpoint,再改 AGENTS.md,而不是改 prompt 口头描述。
5.8 安全与治理(默认安全,按需放权)
把安全控制拆成三层:
A. 隔离层(环境边界)
- 运行必须在沙盒中完成,避免在员工设备/生产主机直接执行。
- 外部网络访问默认收敛:只允许必要域名(可在未来自建 runner 上用网络策略更强约束)。
B. 权限层(凭据与动作)
- 所有 token 必须最小权限:例如 GitHub token 分离 read/write;prod-write 只在 schedule 上启用。
- 任何“破坏性动作”必须触发“文件闸门”:
- 智能体先生成
plan.md(含将要执行的写操作清单) - 另一个只读审计 agent 复核
plan.md并给出approve.txt/reject.txt - 没有
approve.txt,主 agent 不得写回外部系统
- 智能体先生成
这套闸门不依赖聊天确认,完全通过 artifact 文件实现可审计的审批链。
C. 供应链层(skills 与依赖)
- skills 只能来自白名单仓库;版本 pin;定期审计。
- 私有脚本/配置走 volume;volume 版本同样 pin。
5.9 成本与配额(防止“自动化烧钱”)
成本控制四件事:
- 模型选择:把“重推理”与“轻执行”拆成不同 agent(或不同 prompt)分别用不同模型/供应商。
- 调度频率:业务指标允许的最低频率优先(每天一次优先于每小时一次)。
- 失败策略:连续失败 N 次自动 disable schedule(避免无限重试)。
- token/时间限制:对每类任务设定最大运行时长与最大 token(如果平台未提供硬限制,则用 AGENTS.md 强约束 + 输出中断规则)。
6. MVP 实施步骤(按顺序执行即可)
6.1 基础接入
- 安装 CLI:
npm install -g @vm0/cli - 登录:
vm0 auth login - 配置模型凭据:
- 交互式:
vm0 model-provider setup - 或持久化 credential:
vm0 credential set <NAME> <VALUE>
- 交互式:
6.2 建立第一个可运行 agent
- 初始化项目:
vm0 init - 写
AGENTS.md(按 5.2 模板) - 写
vm0.yaml(最小可运行) vm0 compose vm0.yaml- 绑定 artifact 运行验证:
vm0 run <agent> "启动并完成一次完整工作流" --artifact-name <artifact>
6.3 上线调度
vm0 schedule setup <agent>(或用非交互 flags)vm0 schedule enable <agent>- 首次触发后检查:
vm0 logs <run-id>vm0 artifact pull
6.4 加入调试与回放
- 每次 run 后把 checkpoint 写入
artifact/audit.md - 出现异常直接:
vm0 run resume <checkpoint-id> "从这里改方案"
形成分支修复链路。
7. 示例配置(可直接复制改名)
示例 1:GitHub PR/Issue 例行助手(只读)
vm0.yaml
version: "1.0"
agents:
github-triage:
framework: claude-code
instructions: AGENTS.md
apps:
- github
skills:
- https://github.com/vm0-ai/vm0-skills/tree/main/github
environment:
# GH_TOKEN 通过 run/schedule 注入,避免写死
GH_TOKEN: "${{ secrets.GH_TOKEN }}"
AGENTS.md
# GitHub Triage Agent
## Role
你负责每天汇总指定仓库的:新 issue、待 review PR、失败的 CI。
## Workflow
1. 列出 open PR 和最近 24h 的新 issue
2. 生成摘要(按 repo 分组)
3. 输出到 outputs/github_digest.md
4. 只读:不创建、不评论、不合并
## Rules (Hard)
- 只读操作
- 不把 token 写入任何文件
- 任何不确定直接写入 outputs/todo.md
运行:
vm0 run github-triage "生成今天的 triage 报告" \
--secrets GH_TOKEN=ghp_xxx \
--artifact-name github-triage
调度:
vm0 schedule setup github-triage \
--frequency daily --time 09:00 --timezone America/Los_Angeles \
--prompt "生成今天的 triage 报告" \
--artifact-name github-triage \
--secret GH_TOKEN=ghp_xxx
示例 2:多源数据日报(Notion + Slack)
vm0.yaml
version: "1.0"
agents:
daily-report:
framework: claude-code
instructions: AGENTS.md
skills:
- https://github.com/vm0-ai/vm0-skills/tree/main/notion
- https://github.com/vm0-ai/vm0-skills/tree/main/slack
- https://github.com/vm0-ai/vm0-skills/tree/main/firecrawl
environment:
NOTION_API_KEY: "${{ credentials.NOTION_API_KEY }}"
SLACK_BOT_TOKEN: "${{ credentials.SLACK_BOT_TOKEN }}"
FIRECRAWL_API_KEY: "${{ credentials.FIRECRAWL_API_KEY }}"
REPORT_CHANNEL: "${{ vars.REPORT_CHANNEL }}"
AGENTS.md(片段)
# Daily Report Agent
## Workflow
1. 抓取数据源 A/B/C(网页用 Firecrawl)
2. 生成 report.md(结构:摘要/指标/风险/行动项)
3. 写入 Notion:数据库 "Daily Reports"
4. Slack 推送:只发链接 + 3 行摘要
## Rules (Hard)
- Notion/Slack 写入前,先在 outputs/preview.md 生成预览
- 不把任何 credential 写入 artifact
运行:
vm0 run daily-report "生成今天的日报" \
--vars REPORT_CHANNEL=#daily-report \
--artifact-name daily-report
示例 3:Codex 代码维护 agent(experimental)
vm0.yaml
version: "1.0"
agents:
code-maintainer:
framework: codex
instructions: AGENTS.md
# 这里的环境变量以 Codex 框架要求为准;示例用占位符
environment:
OPENAI_API_KEY: "${{ credentials.OPENAI_API_KEY }}"
落地约束:Codex agent 先跑“只生成 patch + 不自动合并”的流程,产物写入 artifact,再由人或审计 agent 复核。
8. 风险清单与控制措施(最小集合)
- 提示注入/数据污染:外部网页与 issue 内容可诱导智能体。
控制:AGENTS.md 强制“只读/先输出计划/再执行”;对外部内容做引用隔离(先保存到 sources/ 再总结)。 - 技能供应链风险:skill 代码来自 GitHub。
控制:版本 pin;白名单仓库;私有技能走 volume。 - 权限过大:token 一把梭。
控制:按环境分 token;prod-write 单独凭据;文件闸门审批链。 - 成本失控:调度 + 重试 + 大模型 = 无限账单。
控制:失败次数阈值自动停;模型分层;输出中断规则。 - 状态漂移:artifact 越滚越乱。
控制:artifact 目录规范(outputs/ sources/ audit.md);定期归档版本。
9. 与 OpenClaw(Clawdbot)对比口径(用于向安全/IT 解释)
- OpenClaw 的核心形态是“你自己设备上的个人助理”,深度接入消息通道与本地权限,因此天然需要你自己做隔离与最小权限。
- VM0 的核心形态是“云端隔离沙盒里的智能体运行时”,把执行面从个人设备剥离,并提供 schedule、artifact、checkpoint、logs 形成可控闭环。
- 对企业场景:把“自动化执行”放到云端沙盒 + 明确的凭据策略 + 可回放审计,比把 agent 直接常驻在员工 Mac Mini 上更接近合规语境。
10. 验收标准(Definition of Done)
P0 上线验收:
- 至少 2 个 agent(只读 GitHub triage + daily report)实现:
- 手动 run 成功率 >= 95%
- schedule 连续运行 7 次无人工干预
- artifact 输出结构稳定(固定目录 + 固定命名)
- logs 可定位关键步骤;checkpoint 可回放一次分支修复
- 安全验收:
- token 最小权限拆分完成
- secrets/credentials 未落盘(artifact 中无明文)
- skills 版本 pin(tag 或 commit)
- prod-write 默认关闭,且具备文件闸门审批链
参考链接(原始资料)
- VM0 Docs(Quick Start / Scheduling / Agent Anatomy / Instructions / Skills / Volume / Artifact / Env Vars / API)
- VM0 官网
- VM0 GitHub
- 公开讨论:VM0 沙盒实现(E2B / Firecracker microVM)
- OpenClaw(对比参照)