sandcastle 是什么?

Sandcastle 是 Matt Pocock(@ai-hero/sandcastle)做的一个 TypeScript 库,用一行 sandcastle.run() 在隔离 sandbox 里编排 AI 编码 agent:你给它一个 agent(如 claudeCode 或 codex)和一个 sandbox provider,它负责把 agent 关进隔离环境、按配置的分支策略让其在 git worktree/分支上工作,完成后把提交合并回来。它是 provider 无关的,内置 Docker、Podman、Vercel(Firecracker microVM)和 no-sandbox,也可自建。典型用途是并行跑多个无人值守(AFK)agent、搭建评审流水线、或在 CI/脚本里程序化调度自己的 agent。当前为 0.5.x,仍在早期。

⭐ 4,906 Stars 🍴 520 Forks TypeScript MIT 作者: mattpocock 商业引流:低
来源:README What Is/Quick start/How it works;package.json name=@ai-hero/sandcastle v0.5.11 查看 GitHub 仓库 →

为什么值得关注

上线约两个月即超过 4.7k 星,热度首先来自作者 Matt Pocock 在 TypeScript 社区的巨大影响力(Total TypeScript),其次切中了一个正在升温的需求:当下大家都想「同时跑很多个 agent」,但裸跑 Claude Code/Codex 缺乏隔离、分支管理和编排,容易污染工作区或互相干扰。Sandcastle 把「sandbox 隔离 + git 分支策略 + 编排 API」三件事收敛成一个 run() 调用,正好补上这块工程化空白,对想做 AFK/批量 agent 的 TS 开发者很对路。

来源:GitHub 4,745 stars / 506 forks,created 2026-03-17;README 定位与作者署名

核心功能

单函数编排 run() / interactive() / createSandbox()

run() 在脚本/CI 里一次性跑 agent 并返回 iterations、commits({sha})、branch 等结构化结果;interactive() 启交互式 TUI;createSandbox() 复用 sandbox,配合 worktree 方法(wt.run/interactive/createSandbox)做独立 worktree 生命周期管理。

来源:README API/createSandbox/createWorktree;RunResult/IterationResult
三种分支策略控制提交落点

head(agent 直接写宿主工作目录,bind-mount 默认,适合快迭代)、merge-to-head(在临时 worktree 分支上工作、完成合并回 HEAD,出错不污染 HEAD,适合 CI/无人值守)、branch(提交落到指定命名分支,适合直接出 PR)。在 run() 上配置即可,全程本地。

来源:README How it works/Branch strategies 表
provider 无关的 sandbox 抽象

sandbox 选项接受任意 SandboxProvider:内置 Docker/Podman(bind-mount,目录挂载进容器)、Vercel(隔离式 Firecracker microVM)、no-sandbox(直接跑宿主、放弃隔离);可用 createBindMountSandboxProvider / createIsolatedSandboxProvider 自建,并支持挂载缓存目录、SELinux 标签、自定义 UID/GID 与 Dockerfile。

来源:README Sandbox Providers/Custom Sandbox Providers/All options
结构化提示词与流程控制

支持 promptFile/prompt、提示词解析、动态上下文(!`command` 注入命令输出)、{{KEY}} 参数替换与内置参数、模板,以及用 COMPLETE 做早停、结构化输出(structured output)、会话捕获与 resume、hooks 等编排能力。

来源:README Prompts/Structured output/Session capture/Hooks
多 agent provider + CLI 脚手架

agent 抽象支持 claudeCode(可传 effort 等选项)与 codex(CodexOptions),并提供 provider env 注入;CLI 含 sandcastle init 脚手架 .sandcastle 目录、docker/podman build-image / remove-image 等命令。

来源:README ClaudeCodeOptions/CodexOptions/CLI commands

技术架构

单包 TypeScript 库,技术底座选了 Effect 生态(effect + @effect/cli + @effect/platform + @effect/printer),CLI 与平台交互、错误处理都走 Effect 的函数式风格,交互提示用 @clack/prompts。src 目录按职责拆分且每个模块都有同名 .test.ts(测试覆盖意识强):Orchestrator 是编排核心,AgentProvider/AgentStreamEmitter 抽象 agent 与流式输出,DockerLifecycle/PodmanLifecycle 管容器生命周期,SandboxFactory 按分支策略建 sandbox,CopyToWorktree 处理 worktree,PromptResolver/PromptPreprocessor/PromptArgumentSubstitution 处理提示词管线,EnvResolver 管环境变量,Display/Output 管展示,InitService 做 init 脚手架,RecoveryMessage/ErrorHandler 处理失败恢复。整体是「Orchestrator + 可插拔 AgentProvider + 可插拔 SandboxProvider + 提示词管线」的清晰分层。

来源:tree(src/*.ts 与配套 *.test.ts);package.json deps(effect 系列)

项目知识图谱

知识图谱:项目核心节点(中心)+ 核心功能(内环六边形)+ 关键技术依赖(外环 chip) effect @effect/cli @effect/platform / platform-node@effect/platfo… @effect/printer(-ansi)@effect/printer @clack/prompts 单函数编排 run() / interactive() / createSandbox()单函数编排 run() / i… 三种分支策略控制提交落点三种分支策略控制提交落… provider 无关的 sandbox 抽象provider 无关的 san… 结构化提示词与流程控制 多 agent provider + CLI 脚手架多 agent provider +… sandcastle 项目本体 核心功能 关键依赖

中心为项目本体,内环 = 核心功能模块,外环 = 关键技术依赖;按 deep.json 中的 core_features 与 tech_stack.key_deps 自动生成

技术栈

语言TypeScript框架Effect (函数式) + 自研编排层
effect@effect/cli@effect/platform / platform-node@effect/printer(-ansi)@clack/prompts
本地优先(git worktree + 分支);sandbox 经 Docker/Podman 容器或 Vercel Firecracker microVM;agent 经 Claude Code / Codex CLI,需对应 API key 或订阅
来源:package.json dependencies;README Prerequisites/Sandbox Providers

快速上手

`npm install --save-dev @ai-hero/sandcastle` → `npx sandcastle init` 脚手架出 .sandcastle 目录 → `cp .sandcastle/.env.example .sandcastle/.env` 并填 ANTHROPIC_API_KEY(想用 Claude 订阅而非 API key 见 issue #191)→ 编辑 .sandcastle/main.ts 调用 `await run({ agent: claudeCode('claude-opus-4-7'), sandbox: docker(), promptFile: '.sandcastle/prompt.md' })` → `npx tsx .sandcastle/main.ts`。需预装 git 和一个 sandbox provider(Docker Desktop 最常用,或 Podman/Vercel)。返回的 result 含 iterations/commits/branch 可供后续编排。
来源:README Quick start

使用场景

适合:①想并行跑多个无人值守(AFK)编码 agent、又不希望它们互相污染工作区的开发者;②在 CI/脚本里程序化调度 agent 做修 issue、批量改造、生成 PR(用 branch 策略落到 agent/fix-42 这类分支);③搭建「agent 产出 → 自动评审」流水线;④想要可控隔离(容器/microVM)而非裸跑 agent 的团队。不适合:只想交互式用单个 agent 的人(直接用 Claude Code 即可)、以及需要稳定生产 API 的场景(仍是 0.5.x)。

来源:README What Is(parallelizing AFK agents / review pipelines)/Branch strategies,结合定位推断

优势与局限

优势

  • 切口实用:把「sandbox 隔离 + git 分支策略 + 编排」收敛成一个 run() 调用,正好补上批量/AFK agent 的工程化空白
  • provider 无关设计干净:Docker/Podman/Vercel/no-sandbox 可互换,并提供自建 provider 的工厂,扩展性好
  • 分支策略设计周到:head/merge-to-head/branch 三档分别对应快迭代、安全自动化、出 PR,语义清晰
  • 工程质量高:Effect 函数式底座 + src 每模块配 .test.ts,测试覆盖意识强,作者社区影响力带来活跃维护
  • 提示词管线完善:动态命令注入、参数替换、早停、结构化输出、会话 resume、hooks,编排表达力强

局限

  • 仍处早期 0.5.x,版本迭代频繁(近两周连发数个小版本),API 仍可能调整,不宜押注稳定生产
  • 并行跑多个 agent 的真实成本不低:每个 agent 都消耗模型额度,容器/microVM 也有资源与(Vercel)云费用
  • 能力强但概念较多(分支策略、worktree、sandbox provider、提示词管线、hooks),上手有一定学习曲线
  • 依赖外部 agent CLI(Claude Code/Codex)与其行为,sandcastle 本身不解决 agent 质量问题,只解决编排与隔离
  • no-sandbox 模式直接在宿主跑 agent、放弃隔离,便利但有让自主 agent 改坏宿主的风险,需谨慎选用
来源:README 各章 + tree 测试结构 + 版本/发布节奏

最新版本

采用语义化版本,最新为 v0.5.11(2026-05-20,与最近 push 同日),此前 v0.5.10(2026-05-08)、v0.5.8(2026-05-06),发布相当密集,处于早期高频迭代期。仓库用 changeset 管理版本。

来源:GitHub Releases v0.5.11/v0.5.10/v0.5.8;package.json version=0.5.11;.changeset 目录

总结评价

Sandcastle 解决的是一个正在变得真实的工程问题:当人们开始「同时放养很多个编码 agent」时,缺的不是更强的模型,而是隔离、分支管理和可编程编排。它把这三件事用 run() 一个调用收敛得相当优雅,分支策略和 provider 抽象的设计也见功力,加上作者的社区号召力与扎实的测试,4.7k 星名副其实。需要清醒的是它还在 0.5.x、API 会变,且批量 agent 的模型/算力成本要自己买单。对想认真做 AFK/批量 agent 编排的 TS 开发者,这是目前很值得跟进和试用的方案;对只想交互式用一个 agent 的人则没必要。

来源:综合 README 定位、tree 工程结构、发布节奏的事实判断

常见问题

sandcastle 是什么?

Sandcastle 是 Matt Pocock(@ai-hero/sandcastle)做的一个 TypeScript 库,用一行 sandcastle.run() 在隔离 sandbox 里编排 AI 编码 agent:你给它一个 agent(如 claudeCode 或 codex)和一个 sandbox provider,它负责把 agent 关进隔离环境、按配置的分支策略让其在 git…

sandcastle 有哪些核心功能?

sandcastle 的核心功能包括:单函数编排 run() / interactive() / createSandbox()、三种分支策略控制提交落点、provider 无关的 sandbox 抽象、结构化提示词与流程控制、多 agent provider + CLI 脚手架。

sandcastle 为什么最近很受关注?

上线约两个月即超过 4.7k 星,热度首先来自作者 Matt Pocock 在 TypeScript 社区的巨大影响力(Total TypeScript),其次切中了一个正在升温的需求:当下大家都想「同时跑很多个 agent」,但裸跑 Claude Code/Codex 缺乏隔离、分支管理和编排,容易污染工作区或互相干扰。

sandcastle 适合哪些使用场景?

适合:①想并行跑多个无人值守(AFK)编码 agent、又不希望它们互相污染工作区的开发者;②在 CI/脚本里程序化调度 agent 做修 issue、批量改造、生成 PR(用 branch 策略落到 agent/fix-42 这类分支);③搭建「agent 产出 → 自动评审」流水线;④想要可控隔离(容器/microVM)而非裸跑 agent 的团队。

透明度声明
本页内容由 AI(大语言模型)基于以下公开材料自动生成:GitHub README、代码目录结构、依赖文件、Release 信息。 分析时间: 2026-05-22 17:39. 质量评分: 100/100.

数据来源:README、GitHub API、依赖文件