Runme
Runme 是一个开源 notebook 网页应用,让编码 Agent(尤其是 Codex)以 notebook 作为持久工作产物协作。它像 Jupyter / Colab 一样支持 Markdown、代码 cell 和 HTML,从而可以生成把指令、命令、结果、表格和图表组合在一起的文档。这里指的是由 runmedev/web 维护的网页应用(web.runme.dev);Runme 家族另有 CLI 与 notebook 格式,并作为一个 CNCF 项目持续发展。
notebook 当作 Agent 的共享工作空间
OpenAI 内部的实践(文章作者在 API 团队负责跑模型评测)把 Runme notebook 当作人类与 Codex 之间共享的工作空间:
- 创建 notebook,写一段目标大纲(goal outline),说明要跑一次什么评测、审阅上一轮运行的流程、把详细计划写进 notebook、等人工批准后再开始、记录跑过的命令/输出/对结果的解读。
- 让 Codex 把该目标 cell 当作目标:读 notebook 中的目标、把计划写回 notebook、等人工批准后再动手。
- Codex 边工作边更新 notebook。计划就绪后,人类审阅并修订;作者常帮 Codex 在替代方案之间做取舍——用哪套评测系统、要不要预置新基础设施、已有资源够不够用。
- 人类在 Codex 工作时监控进度(有时在手机上),卡住时给一句提示,例如配额耗尽时建议复用已有环境。
- 收尾时与 Codex 一起把本会消失在对话里的决策捕捉下来:为什么选这个方案、现在偏好哪种做法、下次哪里该做得不同。
结果是 notebook 记录了完成任务所需的步骤,也保留了走不通的死路。
flowchart LR
N["创建 notebook(目标大纲)"] --> G["Codex 读目标 cell"]
G --> P["在 notebook 写计划"]
P --> A{"人类审阅 / 修订计划?"}
A -->|"未批准"| R["修订计划"] --> P
A -->|"批准"| E["Codex 执行并记录命令/输出/解读"]
E --> M["人类监控,卡住时给提示"]
M --> D["收尾:沉淀决策与死路"]
D -.->|"*.index.md 可被检索"| F["下次任务更容易被发现"]
价值:把意图、动作、决策、结果放进同一份 artifact
Runme 让文档化在任务进行时就足够便宜——这是难点所在。很多对 Agent 有用的信息其实已散落在终端历史、Slack、runbook、文档和仪表盘里,难的不是证明文档有用,而是让创建文档的成本低到能在干活的同时顺手完成。notebook 把意图、动作、决策和结果收进同一 artifact:
- persistent goal(即 Goals:线程级完成契约)让 Codex 持续聚焦在任务上;
- 自动审批审查(Auto-review) 可以在不改变既有权限边界的前提下审批合格动作。
人类仍决定计划何时就绪、哪些关键取舍需要人工判断;Codex 做重复性执行,并记下比自己手写更详细的经过。因为 notebook 易于分享,这套实践经验不会困在某个人的聊天历史里。
Google Drive 存储与 Agent 发现
notebook 可直接保存到 Google Drive,给协作者一个熟悉的查找与分享方式,不必引入新的文档仓库。同时,每个 notebook 还会生成一个伴生的 Markdown 索引 *.index.md。Google Drive 能索引这个文件,让 Agent 在需要示例、操作上下文或之前某次运行结果时,更容易发现早期 notebook。
通过 WebMCP 暴露能力
Agent 通过 WebMCP 与 Runme 交互:应用加载时注册浏览器侧工具(browser-side tools),Agent 可用来读取与 Runme 及其 notebook 配合的说明、运行受约束的 JavaScript 程序来读写 notebook 内容、读取应用的文档。
这背后的架构理由对 MCP 部署很重要:Runme 是一个以静态网站提供服务的客户端应用。如果为了暴露传统 MCP endpoint 而加一台服务器,会引入额外的基础设施与运维复杂度,也会改变 notebook 数据的存放位置。WebMCP 让应用直接从浏览器暴露能力,把数据留在客户端。相关权衡见 WebMCP 词条。