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 目标定义(落地可验收)

  1. 把 Claude Code / Codex 统一纳入云端沙盒执行(同一套运行、存储、观测、调度机制)。
  2. 把“意图”固化成可版本化的工作流vm0.yaml + AGENTS.md 进入代码仓库,变成可 review、可回滚的资产。
  3. 把“状态”变成可追溯的存储对象:Volume(工具/技能/配置)与 Artifact(工作产物)严格分离。
  4. 把“自动化”做成可控的调度系统:内置 schedule + 变量/密钥注入 + 输出落盘。
  5. 把“安全”做成默认值:最小权限、隔离执行、审计与回放、供应链约束(技能 pin)。

2. VM0 机制速记(用于方案设计对齐)

2.1 Agent 的组成

VM0 把一个“智能体”拆成四个部分:

  • Provider:默认 Claude Code;vm0.yamlframework 也支持 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:可稳定自动化、低权限、收益确定

  1. 日报/周报生成:拉取多源数据 -> 汇总 -> 写入 Notion -> Slack 推送。
  2. 技术情报/竞品扫描:Hacker News / RSS / 目标网站 -> Firecrawl 抽取 -> 结构化报告。
  3. GitHub 例行维护:issue triage、PR 列表、变更摘要、release note 草稿(不自动合并)。

P1:中等风险,需要更强治理

  1. CI 失败自诊断:拉日志 -> 定位原因 -> 生成修复 PR(需要分支保护 + 代码 review)。
  2. 依赖升级与安全扫描:生成升级分支、跑测试、输出变更报告(需要成本与失败回滚机制)。

P2:高风险(默认不自动化写生产)

  1. 生产系统操作类:部署/回滚/配置变更(必须引入审批闸门、只读检查、强审计)。

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 三个目录):

  1. agents/:每个 agent 一个目录(vm0.yaml + AGENTS.md + 可选脚本/模板)。
  2. skills-private/:企业内部私有 skills(以 Volume 形式管理)。
  3. 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 运行与发布流程(开发到生产)

定义四个环境态:

  1. dev:手动 vm0 run,不设 schedule。
  2. staging:开启 schedule 但用测试数据/只读 token。
  3. prod-read:生产数据读取 + 报告输出(不写回外部系统)。
  4. 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)。
  • 事故排查路径固定为:
    1. vm0 logs <run-id> 看行为
    2. vm0 artifact pull 看产物
    3. 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 基础接入

  1. 安装 CLI:npm install -g @vm0/cli
  2. 登录:vm0 auth login
  3. 配置模型凭据:
    • 交互式:vm0 model-provider setup
    • 或持久化 credential:vm0 credential set <NAME> <VALUE>

6.2 建立第一个可运行 agent

  1. 初始化项目:vm0 init
  2. AGENTS.md(按 5.2 模板)
  3. vm0.yaml(最小可运行)
  4. vm0 compose vm0.yaml
  5. 绑定 artifact 运行验证:
    vm0 run <agent> "启动并完成一次完整工作流" --artifact-name <artifact>

6.3 上线调度

  1. vm0 schedule setup <agent>(或用非交互 flags)
  2. vm0 schedule enable <agent>
  3. 首次触发后检查:
    • vm0 logs <run-id>
    • vm0 artifact pull

6.4 加入调试与回放

  1. 每次 run 后把 checkpoint 写入 artifact/audit.md
  2. 出现异常直接: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. 风险清单与控制措施(最小集合)

  1. 提示注入/数据污染:外部网页与 issue 内容可诱导智能体。
    控制:AGENTS.md 强制“只读/先输出计划/再执行”;对外部内容做引用隔离(先保存到 sources/ 再总结)。
  2. 技能供应链风险:skill 代码来自 GitHub。
    控制:版本 pin;白名单仓库;私有技能走 volume。
  3. 权限过大:token 一把梭。
    控制:按环境分 token;prod-write 单独凭据;文件闸门审批链。
  4. 成本失控:调度 + 重试 + 大模型 = 无限账单。
    控制:失败次数阈值自动停;模型分层;输出中断规则。
  5. 状态漂移: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 默认关闭,且具备文件闸门审批链

参考链接(原始资料)