Rivet 推出的 Sandbox Agent SDK 提供了一个用于构建编程代理的通用 API,使开发者能够在不同的代理运行时(如 Claude Code、Codex、OpenCode 和 Amp)之间切换,而无需为每种运行时分别重写集成逻辑。该 SDK 旨在解决长期以来困扰开发者的代理 API 碎片化、会话管理差异以及流式数据格式不统一等问题,这些问题使得代理集成复杂且难以维护。
Rivet 联合创始人兼 CTO Nathan Flurry 表示,构建具备自主能力的代理系统主要面临三大挑战:API 碎片化、临时状态问题,以及不同服务提供商之间的部署差异。
构建编程代理并不容易。Claude Code 有一套 API,Codex 有另一套,OpenCode 和 Amp 也各自采用不同方式。即使只选择其中一个,你仍然要面对会话状态在进程崩溃时丢失的问题、为每个沙箱提供商编写不同的集成代码,以及无法将会话记录以流式方式返回到应用程序等挑战。
每个代理都有自己的一套事件格式、会话模型和权限体系。例如,Claude Code 通过 stdout 输出 JSONL 格式的数据,而 Codex 使用 JSON-RPC。这意味着开发者不得不为两者分别构建不同的集成逻辑。部署层面也增加了复杂性,像 Daytona、Vercel 和 E2B 这样的平台都提供各自定制的 API。
相比之下,Rivet 的 Sandbox Agent SDK 允许开发者针对一个统一 API 编写集成代码,只需修改配置即可切换不同代理。这段简单的代码展示了如何用 SDK 创建代理对话:
import { SandboxAgent } from "sandbox-agent";const client = await SandboxAgent.start();await client.createSession("my-session", { agent: "claude", // or "codex", "opencode", "amp" permissionMode: "auto",});for await (const event of client.streamEvents("my-session")) { console.log(event.type, event.data);}
该 SDK 还配套统一的会话数据结构。所有与代理相关的事件(包括会话生命周期、流式输出、人工介入提问、工具执行审批以及错误信息)都遵循一致的格式,从而避免为适配不同代理输出而编写大量定制逻辑。
在 X.com 上这篇发布的评论区中,Gianfranco P. 表示:
这是编程代理生态系统迫切需要的一层抽象。API 碎片化确实是构建 AI 驱动开发工具时的一个痛点。一次集成,通过修改配置就能切换代理 —— 这简直是测试哪种模型表现最佳的理想方式。
一位 Hacker News 读者询问,是否可以将 Rivet 的 Sandbox Agent SDK 理解为“基于 HTTP 的 ACP(agent client protocol)”。Flurry 解释说,这种类比在大方向上是准确的,但 ACP 更侧重于为编辑器场景所需的那部分功能提供统一 API,而 Sandbox Agent SDK 的能力更加全面,重点在于支持完整的代理自动化。
Sandbox Agent SDK 是一个轻量级的 15MB 静态二进制文件,使用 Rust 编写,没有运行时依赖。它可以安装在任何能够执行 Linux 二进制文件的环境中,包括 Daytona、E2B、Vercel Sandboxes、Docker 等。该项目目前已在 GitHub 上开源。
原文链接:





