sandcastle 是什么?

Sandcastle 是用于编排 AI 编码 Agent 的 TypeScript 库。它把 Agent 运行、sandbox provider、Git worktree 与分支合并放进 run() 等 API,适合在脚本或 CI 中执行可隔离、可回收的代码任务。

⭐ 4,906 Stars 🍴 520 Forks TypeScript MIT 作者: mattpocock
来源:github.com/mattpocock/sandcastle 查看 GitHub 仓库 → 📘 使用教程 →

为什么值得关注

run() 负责启动 Agent、传入提示、收集迭代与提交;createSandbox() 可保留一个暖 sandbox,在多次运行之间复用环境。内置 Docker、Podman 与 Vercel provider,也能实现自定义 bind-mount 或 isolated provider。noSandbox() 会直接在宿主执行,不提供隔离。

来源:github.com/mattpocock/sandcastle

核心功能

统一的 Agent 编排入口

run() 负责启动 Agent、传入提示、收集迭代与提交;createSandbox() 可保留一个暖 sandbox,在多次运行之间复用环境。

来源:github.com/mattpocock/sandcastle
可替换的 sandbox provider

内置 Docker、Podman 与 Vercel provider,也能实现自定义 bind-mount 或 isolated provider。noSandbox() 会直接在宿主执行,不提供隔离。

来源:github.com/mattpocock/sandcastle
Git 分支策略

head、merge-to-head 和 branch 控制 Agent 修改落到当前工作区、临时 worktree 后合并,或指定分支。bind-mount 与隔离 provider 的默认策略不同。

来源:github.com/mattpocock/sandcastle
结构化结果与 sandbox.exec

提示词管线支持参数、动态上下文和结构化输出。v0.12.0 又为 Sandbox handle 增加 exec(),可在同一环境运行测试或 lint,并以 ExecResult 返回非零退出码。

来源:github.com/mattpocock/sandcastle/releases/tag/v0.12.0

技术架构

Sandcastle 把 AgentProvider、SandboxProvider、提示词处理和 Git 同步分开。bind-mount provider 把宿主目录或 worktree 挂进 Docker/Podman;isolated provider 把仓库同步进远端或独立环境,再将提交、diff 和文件带回。branchStrategy 决定结果进入当前 HEAD、合并回 HEAD 或保留在命名分支。Orchestrator 串联提示、Agent 事件、sandbox 生命周期、提交和日志。

来源:github.com/mattpocock/sandcastle

项目知识图谱

知识图谱:项目核心节点(中心)+ 核心功能(内环六边形)+ 关键技术依赖(外环 chip) Git npm 与 TypeScript 运行环境npm 与 TypeScr… Docker Desktop、Podman、Vercel Sandbox 或自定义 providerDocker Desktop… 对应 Agent 的凭据或本地认证对应 Agent 的凭… 统一的 Agent 编排入口 可替换的 sandbox provider可替换的 sandbox pro… Git 分支策略 结构化结果与 sandbox.exec结构化结果与 sandbox… sandcastle 项目本体 核心功能 关键依赖

技术栈

语言TypeScript框架Effect、Node.js CLI、Git worktree 与可插拔 Agent/Sandbox provider
Gitnpm 与 TypeScript 运行环境Docker Desktop、Podman、Vercel Sandbox…对应 Agent 的凭据或本地认证
本地容器、rootless Podman、Vercel Firecracker microVM 或自建 sandbox
来源:github.com/mattpocock/sandcastle

快速上手

在已有 Git 仓库执行 npm install --save-dev @ai-hero/sandcastle,再运行 npx @ai-hero/sandcastle init。按生成的 .sandcastle/.env 填写 CLAUDE_CODE_OAUTH_TOKEN 或 ANTHROPIC_API_KEY,检查 .sandcastle/main.ts、prompt 文件、Dockerfile 和 hook 后,以 npx tsx .sandcastle/main.ts 启动。首次应使用可丢弃分支和小任务,明确选择 docker()、podman() 或其他 provider,不要为省事改成 noSandbox()。
来源:github.com/mattpocock/sandcastle

使用场景

适合并行运行多个后台编码任务、建立实现与复核流水线、在 CI 中让 Agent 修改分支,或在一个暖 sandbox 内连续运行 Agent 和验证命令。单次交互任务可以直接使用原 Agent CLI;没有容器或远程隔离边界时,不应把 noSandbox() 当成安全替代。

来源:github.com/mattpocock/sandcastle

优势与局限

优势

  • 把 Agent、sandbox 生命周期和 Git 结果回收组合成 TypeScript API
  • 支持本地 Docker/Podman、Vercel 和自定义 provider
  • 分支策略、结构化输出、日志与复用 sandbox 便于搭建自动化流程

局限

  • 当前仍是 0.x,CHANGELOG 已记录多次破坏性 API 调整,自动化应锁定版本
  • Docker/Podman bind mount 仍能接触被挂载的宿主目录,隔离范围取决于挂载与权限
  • noSandbox() 直接在宿主运行 Agent,没有 sandbox 保护
  • Vercel provider、模型 API 或订阅可能产生外部费用,但项目本身未发现付费分发或转售漏斗
来源:github.com/mattpocock/sandcastle/blob/main/CHANGELOG.md

最新版本

截至 2026-09-23,最新正式 release 是 v0.12.0,发布于 2026-06-29。该版把默认 Claude Code 模型更新为 claude-opus-4-8,为 createSandbox() 返回的 handle 增加 sandbox.exec(command, options?),并修复 file-mode 日志把流式文本逐行拆开的行为。

来源:github.com/mattpocock/sandcastle/releases/tag/v0.12.0

实测与证据

status: docs-only  |  checked_at: 2026-09-23  |  environment: 只核对官方 README、CHANGELOG、package metadata 和 v0.12.0 release  |  limitations: 未安装 npm 包,未创建容器或 Vercel sandbox,未调用任何编码 Agent、模型或 Git 合并流程  |  observed_output: README 当前安装包为 @ai-hero/sandcastle,内置 Docker、Podman 与 Vercel provider;最新 release 为 v0.12.0,并新增 Sandbox.exec()、更新默认 Claude Code 模型和修复文件日志

来源:github.com/mattpocock/sandcastle/releases/tag/v0.12.0

同类项目对比

E2B 官方项目提供云端隔离 sandbox 基础设施和 JavaScript/Python SDK,重点是创建环境、执行命令、传文件与暴露端口;Sandcastle 位于更上层,负责选择编码 Agent、组织提示、管理分支并把提交带回。需要通用云执行环境时直接看 E2B;需要在 TypeScript 中编排编码 Agent 与 Git 流程时看 Sandcastle。

来源:github.com/e2b-dev/E2B

总结评价

Sandcastle 适合已经把 Git、容器和 Agent 凭据管好的 TypeScript 团队。先锁定版本,选清 provider 与 branchStrategy,再用小任务验证提交回收和失败清理;只要权限、挂载或 noSandbox() 没说明白,就不宜接入自动执行。

来源:github.com/mattpocock/sandcastle

常见问题

Sandcastle 的 Docker provider 等于完全隔离吗?

不等于。bind mount 会让容器访问被挂载的宿主目录,仍需限制挂载、凭据和网络,并在可回滚分支里测试。

可以用 noSandbox() 跑不可信任务吗?

不应该。noSandbox() 直接在宿主执行,只适合外层已经有可信隔离的环境。

v0.5.x 的 Sandcastle 示例还能直接用于 v0.12.0 吗?

不能先假定兼容。0.x 期间公开 API、branchStrategy 和 provider 路径已有变化,应按锁定版本的 README、类型和 CHANGELOG 核对。

使用 Sandcastle 一定要购买 Vercel Sandbox 吗?

不一定。官方也支持本地 Docker Desktop、Podman 和自定义 provider;模型凭据与费用仍需另行评估。

资料与核验范围
本文依据项目公开资料整理。版本、安装命令和功能边界可能随上游更新,请以所列来源和项目当前版本为准。 资料核对时间: 2026-09-23 13:55.

参考材料:README、GitHub API、依赖文件