
Sandcastle Hooks 生命周期钩子完全指南host 与 sandbox 双阶段自动化告别繁琐初始化【免费下载链接】sandcastleOrchestrate sandboxed coding agents in TypeScript with sandcastle.run()项目地址: https://gitcode.com/gh_mirrors/sandcastl/sandcastle如果你在用Sandcastle编排 AI 编码智能体这篇文章就是为你写的。Sandcastle 是运行sandcastle.run()即可在 Docker、Podman 等隔离沙箱中驱动编码智能体的 TypeScript 工具库而它的Hooks生命周期钩子让你能在host宿主机与 sandbox沙箱两个阶段自动执行初始化命令——复制.env、安装依赖、预热缓存……一次配置告别每次手动繁琐初始化。手动初始化的痛点为什么需要生命周期钩子想象一下每启动一个沙箱你都要把.env.example复制成.env进容器执行npm install检查依赖版本、跑一遍冒烟脚本手动做一遍是小事并行跑 10 个 AFK 智能体呢Sandcastle 的hooks选项把这一切收敛成声明式配置命令在正确的时机、正确的环境里自动执行失败即快速终止绝不带着残缺环境跑智能体。两个触发点onWorktreeReady 与 onSandboxReadySandcastle 的钩子按在哪里执行分成两组对应两个生命周期节点钩子阶段执行位置典型用途host.onWorktreeReady① worktree 就绪宿主机复制.env、生成配置、准备本地文件sandbox.onSandboxReady② 沙箱就绪隔离沙箱内npm install、下载依赖、跑初始化脚本host.onSandboxReady② 沙箱就绪宿主机与沙箱钩子并行通知外部系统、更新本地状态执行时序一句话概括worktree 就绪宿主机钩子串行→ 沙箱启动并同步代码 → onSandboxReady沙箱内 宿主机并行→ 智能体开始工作。钩子的类型定义在 src/SandboxLifecycle.ts宿主机钩子执行逻辑见 runHostHooks。最快速上手5 行配置完成双阶段自动化在run()里加上hooks选项即可这是完整的可复制片段await run({ agent: claudeCode(claude-opus-4-8), sandbox: docker(), promptFile: .sandcastle/prompt.md, hooks: { host: { onWorktreeReady: [{ command: cp .env.example .env }] }, sandbox: { onSandboxReady: [{ command: npm install }] }, }, });hooks选项的声明位置见 src/run.ts官方 README 中同样给出了这个标准示例。关键参数详解timeoutMs、sudo 与失败即停每条钩子都是一个对象可精细控制参数可用范围说明command全部要执行的 shell 命令timeoutMs全部单条钩子超时默认 60 秒HOOK_TIMEOUT_MSsudo仅sandbox.*在沙箱内以 root 执行行为细节直接影响你的自动化可靠性⚡失败即停任何一条钩子以非零退出码结束整个 run 立刻失败ExecError/HookTimeoutError定义见 src/errors.ts智能体不会启动并行执行sandbox.onSandboxReady与host.onSandboxReady同时并发运行并发执行处同一组内按数组顺序串行可取消传入signalAbortSignal时正在执行的钩子会被协作式取消信号接入。实用场景清单常见初始化任务怎么配以下场景在模板与文档中被反复验证环境文件落地host.onWorktreeReady: [{ command: cp .env.example .env }]在宿主机 worktree 上完成智能体进入沙箱前文件已就位依赖安装sandbox.onSandboxReady: [{ command: npm install }]官方simple-loop模板正是这么写的src/templates/simple-loop/main.mts依赖加速配合copyToWorktree: [node_modules]先拷贝宿主机依赖进 worktree钩子只做兜底安装——这是模板里的注释原话作为安全网处理平台相关二进制与新增包多命令序列数组天然支持onSandboxReady: [{ command: npm ci }, { command: npm run build, timeoutMs: 120_000 }]按序执行宿主机联动host.onSandboxReady: [{ command: echo setup done }]日志中以[host]前缀区分日志前缀处。更多编排模板可参考 src/templates/ 目录parallel-planner、sequential-reviewer 等。钩子能用在哪run、createSandbox 与 interactive 全覆盖SandboxHooks类型从 src/index.ts 公开导出几乎所有入口都支持入口支持情况run()/wt.run()✅hooks选项createSandbox()✅ 创建时执行一次容器复用期间依赖保持温interactive()/wt.interactive()✅ worktree 钩子见 src/interactive.tscreateWorktree()✅ 仅执行host.onWorktreeReady说明长驻沙箱场景尤其受益createSandbox()创建时执行一次钩子之后多次sandbox.run()共享同一个已装好依赖的热容器省去重复启动成本——README 的 multi-run 示例implement 后 review就依赖这个模式。常见问题排查钩子超时与失败怎么办钩子 60 秒超时慢命令请显式给timeoutMs如npm ci大项目给 5 分钟钩子失败想定位错误信息包含完整命令与 stderrExecError 构造处开启logging: { type: stdout }可实时看到钩子顺序疑问worktree 钩子在copyToWorktree之后、沙箱创建之前执行执行点所以钩子里可以直接引用被拷贝进来的文件沙箱内命令权限不足给该条钩子加sudo: true。小结一次配置处处生效Sandcastle Hooks 的设计哲学很简单声明式、双阶段、失败快速。onWorktreeReady管宿主机侧文件准备onSandboxReady管沙箱侧环境初始化两者可并行、可超时、可取消。把重复的初始化写进hooks你才能真正放手让多个智能体并行工作——这正是 Sandcastle 作为沙箱化智能体编排工具的精髓所在。核心资料延伸阅读src/SandboxLifecycle.ts钩子类型与生命周期编排、ideas/config-and-hooks.md钩子机制的设计初衷。【免费下载链接】sandcastleOrchestrate sandboxed coding agents in TypeScript with sandcastle.run()项目地址: https://gitcode.com/gh_mirrors/sandcastl/sandcastle创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考