loop-sandbox 实战:用临时 git worktree 为 AI Agent 提供可审查的隔离执行环境
人工智能AI AgentAgent 工作流CLI研发协作AI 技能MCP 服务【免费下载链接】loop-engineeringPractical patterns, starters CLI tools for loop engineering with AI coding agents. Design systems that prompt and orchestrate agents (inspired by Addy Osmani and Boris Cherny). Includes loop-audit, loop-init, loop-cost.项目地址https://gitcode.com/gh_mirrors/lo/loop-engineering点击查看免费下载导读loop-sandbox是 loop-engineering 仓库中面向无人值守 AI 循环loop的隔离执行工具它把 Agent 的命令放进一个临时 git worktree 中运行自动把 Agent 的改动包括新增的未跟踪文件捕获成一份可审查的.patch文件然后立即销毁工作树让你的主工作区始终保持干净。本文以仓库中规划该工具进入 QUICKSTART 的 issue 文档为骨架完整覆盖安装、命令参数、Windows 兼容、多循环锁协作与源码级实现原理读完即可在任意 git 仓库中安全地让 Agent 动手改代码。关联文档scripts/issue-bodies/quickstart-loop-sandbox.md。该 issue 的验收标准是用一段话讲清临时 worktree 隔离、给出npx cobusgreyling/loop-sandbox run -- cmd及可选的--shell、说明 Windows 下 npm.cmd垫片遇到ENOENT会自动重试、并链接到补丁审查与安全文档——本文正是围绕这四条验收标准展开并下沉到源码。为什么需要 loop-sandbox无人值守 Agent 的直接风险直接在主工作树里运行无人值守的 AI Agent循环可能造成三类典型事故破坏主工作树——Agent 的失败尝试会留下半成品改动、冲突标记甚至损坏的文件覆盖未跟踪文件——Agent 可能对未纳入 git 管理的文件做出不可恢复的修改难以复盘——一次失败的执行尝试可能掺杂大量噪音改动事后很难把该保留的和该丢弃的拆开。loop-sandbox的核心解决思路是临时 worktree 隔离完整流程见 tools/loop-sandbox/README.md自动为 Agent 创建一个隔离的 git worktreeAgent 在其中运行命令像平时一样自然地操作代码库命令结束后自动把 Agent 的编辑包括新增的未跟踪文件捕获成一份干净的.patch文件销毁 worktree主仓库保持完全干净。随后由人工审查这份 patch一键git apply即可落地。正是这种先隔离、再捕获、后审查的顺序让它成为 L2 及以上自治循环的推荐执行底座——QUICKSTART 中把它编排在loop-worktree与安全工具之后而 loop-actionGitHub Composite Action也通过sandbox: true把 Agent 执行路由进 loop-sandbox说明它已被发布并被 loop-action 使用但新手往往只看到 audit/init——这正是关联文档要补强的入口。安装与前置条件安装npm install -g cobusgreyling/loop-sandbox # 或直接用 npx 运行无需全局安装 npx cobusgreyling/loop-sandbox run -- command从 tools/loop-sandbox/package.json 可以看到包以bin暴露loop-sandbox命令要求 Node.js18核心依赖是cobusgreyling/loop-worktree工作树创建、清单与锁的底层实现。前置条件必须在 git 仓库内运行runInSandbox的第一步就是isGitRepo(root)检查非仓库目录会直接抛出loop-sandbox must be run inside a git repository.见 src/sandbox.ts。必须配置.gitignore把以下两行加入项目.gitignore防止补丁文件与 worktree 清单被误提交.loop-sandbox/ .loop-worktrees/.loop-sandbox/存放生成的 patch位于.loop-sandbox/patches/.loop-worktrees/是 loop-worktree 维护 manifest 与工作树的目录。命令与参数参考loop-sandbox command [options]命令说明run [opts] -- cmd在隔离沙箱内运行一条 Agent 命令review/list列出已捕获、待人工审查的补丁run支持的选项均来自 src/cli.ts 的实际解析逻辑选项说明--shell强制以shell: true运行用于bash -c等 shell 内建场景。在 Windows 上npm 安装的.cmd垫片npx、tsc等遇到ENOENT时会自动通过 shell 重试因此这里很少需要手动指定--base branchworktree 基于的分支默认取当前HEAD所在分支--lock-paths globs逗号分隔的 glob在运行期间对loop-worktree的 advisory lock 持锁防止排程循环并发触碰相同路径。默认关闭--lock-owner name锁的所有者名默认取本次运行的生成 id--lock-ttl dur例如30m透传给loop-worktree的--ttl--lock-wait dur例如5m透传给loop-worktree的--wait注意run的子命令解析CLI 会先找到--分隔符src/cli.ts分隔符之前的参数按上表解析未知选项会报错退出分隔符之后才是真正要在沙箱里执行的命令。缺少--或缺少命令都会得到明确的错误提示。实战示例让 Agent 安全地运行你的工具# 放心让 Agent 跑 linter/formatter不会污染工作树 npx cobusgreyling/loop-sandbox run -- npx my-agent运行原始 shell 命令npx cobusgreyling/loop-sandbox run --shell -- bash -c echo hello test.txt与触碰相同文件的排程循环并行npx cobusgreyling/loop-sandbox run --lock-paths src/**,docs/** -- npx my-agent审查并应用补丁# 列出沙箱捕获的所有补丁 npx cobusgreyling/loop-sandbox review # 示例输出 # Loop Sandbox Patches # sandbox-82f1e394.patch (1.2 KB) # Apply: git apply .loop-sandbox/patches/sandbox-82f1e394.patch运行成功后 CLI 同样会打印两条指引npx cobusgreyling/loop-sandbox review用于审查git apply 相对路径用于立即应用见 src/cli.ts。若无改动则打印Run completed … No changes detected.并透传退出码。在git apply之前务必先人工审查补丁内容详见下文安全边界。Windows 兼容npm.cmd垫片的 ENOENT 自动重试关联文档的第三条验收标准专门强调这一点在 Windows 上npm 安装的 CLInpx、tsc等实际是.cmd/.bat垫片spawn无法直接 exec 它们会报ENOENT。loop-sandbox 的处理是只在出现该特定错误时自动通过 shell 重试一次src/sandbox.tsif (!useShell !options.shell process.platform win32 err.code ENOENT) { supersededByRetry true; attempt(true); return; }为什么要精确到错误码、而不是无条件加--shell因为强制shell: true会破坏依赖精确 argv 引用的命令例如node -e ...。自动重试还带有一个去竞态细节Windows 上失败的 spawn 会在error事件后几毫秒补发一个带合成退出码的close事件supersededByRetry标记让第一次非 shell尝试的过期事件变成 no-op避免它在resolve()竞态中赢过重试的真实结果。因此在 Windows 上跑npx不需要额外传--shell。源码级原理一次沙箱运行的生命周期runInSandbox(root, command, args, options)src/sandbox.ts的完整链路如下前置校验isGitRepo(root)确认在 git 仓库内生成运行 idsandbox-${crypto.randomBytes(4).toString(hex)}作为分支名、锁所有者名与 patch 文件名的唯一标识准备目录创建.loop-sandbox/patches/解析 base 分支options.base优先否则git rev-parse --abbrev-ref HEAD可选获取 advisory locklockPaths({ root, owner, paths, ttl, wait })锁在 worktree 创建之前获取运行结束之后释放创建 worktree调用cobusgreyling/loop-worktree的createWorktree从 base 分支开出新分支loop/${runId}并检出到.loop-worktrees/${runId}见 tools/loop-worktree/src/worktree.ts执行命令spawn(command, args, { cwd: worktreeAbsPath, stdio: inherit, shell })Agent 输出实时透传到终端捕获改动git add -A后检查git diff --cached --stat有改动则用git diff --cached --binary生成 patch 写入.loop-sandbox/patches/${runId}.patch——使用--binary是故意的测试 sandbox.test.mjs 验证了二进制文件如Buffer.from([0x00, 0xFF, ...])能精确捕获并git apply还原不会发生 UTF-8 破坏清理git worktree remove --force删除工作树、git branch -D loop/${runId}删除临时分支、再调用 loop-worktree 的gc对账孤儿工作树与清单。信号安全与清理的只执行一次清理逻辑值得单独说明。CtrlCSIGINT/SIGTERM在任何执行阶段都可能触发而清理必须在每条退出路径上都执行且只执行一次src/sandbox.ts。实现上用单一cleanupPromise共享给所有信号处理器这样即使信号重复触发连按两次 CtrlC后续信号也会等待同一份进行中的清理完成后再process.exit(1)而不会在慢速的git worktree remove中途抢先退出、把一把没有 TTL 的锁遗留在磁盘上。测试 sandbox.test.mjs 专门用双 SIGINT验证了清理必须完成、锁必须释放、.loop-worktrees下不得残留sandbox-*目录。清理顺序也有讲究先 kill 沙箱内的子进程防止它继续写入 worktree 或与受锁路径竞态再释放锁这是其他循环被阻塞的资源不应被慢速的 worktree 拆除拖累最后拆除工作树。补丁提取失败时的数据保护如果git add -A失败例如 worktree 元数据被破坏工具不会强行删除现场extractionFailed标记会让清理阶段跳过 worktree 拆除并打印警告把工作树与loop/${runId}分支留在磁盘上供人工恢复src/sandbox.ts。测试 sandbox.test.mjs 验证了这一行为。同时无论提取是否失败锁都会照常释放——锁的释放与补丁提取是否成功无关src/sandbox.ts 对应的测试。多循环安全--lock-paths 与 advisory lock单独的沙箱运行并不天然防止另一个排程循环同时编辑同一批文件。--lock-paths把本次运行接入loop-worktree的 advisory lock锁在 worktree 创建前获取、运行结束后释放一旦有碰撞的排程循环想对重叠路径持锁其lock调用会响亮地失败而不是静默竞态见 tools/loop-sandbox/README.md 与 docs/multi-loop.md。锁的底层实现在 tools/loop-worktree/src/lock.tspathsOverlap逐段比较两个 glob通配段*/**与任意内容兼容例如src/**能覆盖src/nested/foo.tslockPaths用跨进程互斥文件.mutex原子wx创建串行化检查-写入临界区支持--ttl过期与--wait等待等待中还会做死锁环检测。测试 sandbox.test.mjs 验证了三件事运行期间锁确实持有通过 marker 文件观察到运行中锁存在结束后确实释放另一 owner 持有重叠锁时runInSandbox直接拒绝locked by owner other-loop且不会误打印已释放消息从未获取过的锁不声称释放锁释放与 patch 提取成功与否无关。安全边界这不是容器隔离关联文档与 tools/loop-sandbox/README.md 都明确警告这不是容器化的气隙隔离air-gap。Agent 进程保留完整的文件系统与网络访问权它可以逃逸出 worktree例如../../而 worktree 之外或.gitignored文件的改动不会被捕获进 patch。因此该工具是对 docs/safety.md 的补充不能替代针对恶意代码的 OS 级沙箱始终先审查 patch 再git apply——这正是 QUICKSTART 中week one: report only纪律的延续若需要更高置信度可在此基础上叠加 loop-swarm多 Agent 共识连续在多个隔离 worktree 中运行同一命令仅当多数运行产出字节级一致的 patch 才写入consensus.patch。在 CI/CD 中集成loop-action 的 sandbox 开关loop-sandbox 已被 loop-actionGitHub Composite Action使用这也是关联文档点明包已发布并被使用、但新手只见 audit/init的原因。在 workflow 中开启临时 worktree 隔离- uses: cobusgreyling/loop-engineering/tools/loop-actionmain with: pattern: ci-sweeper level: L2 sandbox: true # 路由到 loop-sandbox临时 worktree 隔离 patch 捕获 sandbox-shell: false # loop-sandbox 兼容旋钮默认即可 command: | npx grok-cli run --skill .grok/skills/ci-sweeper/SKILL.mdcommand总是以bash -eo pipefail脚本形式执行无论是否沙箱化sandbox-shell只控制 loop-sandbox 内部是否再套一层--shell不影响你写管道和多行脚本。注意安全红线不要把 issue/PR 标题、分支名等外部不可信内容直接插值进command存在命令注入风险。与本地跑法的对应关系是sandbox: true≈npx cobusgreyling/loop-sandbox run -- bash -eo pipefail script。与其他工具的关系与定位loop-worktree底层的 worktree 生命周期与锁管理器manifest、分支、advisory lock、gcloop-sandbox 直接复用它创建/销毁工作树并参与多循环锁约定loop-audit / loop-init一个打分就绪度、一个脚手架属于评估与初始化环节loop-sandbox 属于执行隔离环节是新用户最容易忽略的 L2 安全组件loop-swarm基于 loop-sandbox 的升级形态用多 Agent 共识进一步过滤非确定性编辑loop-context熔断器决定是否继续loop-sandbox 决定在哪里执行。两者相互独立、可组合。对应关系可参考 QUICKSTART.md 中从 L1仅报告→ L2worktree 内的一次辅助修复→ L3无人值守的升级路径进入 L2 时loop-sandbox就是那个先隔离、后审查的执行闸门。小结一条可直接落地的使用清单确认在 git 仓库内且.gitignore包含.loop-sandbox/与.loop-worktrees/用npx cobusgreyling/loop-sandbox run -- cmd运行 AgentWindows 上npx无需--shell.cmd垫片遇ENOENT自动重试需要 shell 内建时加--shell需要并发保护时加--lock-paths配合--lock-owner/--lock-ttl/--lock-wait用loop-sandbox review列出 patch人工审查后再git apply牢记隔离边界不是容器worktree 之外与.gitignored文件不在保护范围内恶意代码请用 OS 级沙箱参见 docs/safety.md在 CI 中通过 loop-action 的sandbox: true复用同一套隔离机制。相关资源tools/loop-sandbox/README.md完整命令与示例、src/cli.ts参数解析、src/sandbox.ts核心实现、test/sandbox.test.mjs覆盖隔离、二进制 patch、锁、信号清理的测试、docs/multi-loop.md多循环锁约定。赞分享人工智能AI AgentAgent 工作流CLI研发协作AI 技能MCP 服务【免费下载链接】loop-engineeringPractical patterns, starters CLI tools for loop engineering with AI coding agents. Design systems that prompt and orchestrate agents (inspired by Addy Osmani and Boris Cherny). Includes loop-audit, loop-init, loop-cost.项目地址https://gitcode.com/gh_mirrors/lo/loop-engineering点击查看免费下载相关推荐ZenML Sandbox 组件实战在 Pipeline Step 内为 AI Agent 提供隔离代码执行环境ZenML Sandbox 组件实战在 Pipeline Step 内为 AI Agent 提供隔离代码执行环境 Sandbox沙箱是 ZenML 中一类MLOps机器学习后端工作流自动化AI AgentVoltAgent Blaxel 沙箱提供商用 voltagent/sandbox-blaxel 为 Agent 提供隔离的远程 Shell 执行环境VoltAgent Blaxel 沙箱提供商用 voltagent/sandbox blaxel 为 Agent 提供隔离的远程 Shell 执行环境 导读人工智能AI AgentAgent 框架后端多智能体RAG工具调用Agent 记忆Agent 工作流AI 评测MCP 服务MCP Clients语音ZenML Modal Sandbox 实战指南为 AI Agent 提供亚秒级冷启动的隔离代码执行环境ZenML Modal Sandbox 实战指南为 AI Agent 提供亚秒级冷启动的隔离代码执行环境 本文围绕 ZenML 的 Modal SandboxMLOps机器学习后端工作流自动化AI Agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Terminal.Gui.Editor 渲染管线全解析:从 VisualLineBuilder 到 CellVisualLine 的单元格网格渲染架构

Terminal.Gui.Editor 渲染管线全解析:从 VisualLineBuilder 到 CellVisualLine 的单元格网格渲染架构

UI组件跨平台桌面应用 【免费下载链接】Terminal.Gui Cross Platform Terminal UI toolkit for .NET 项目地址: https://gitcode.com/gh_mirrors/te/Terminal.Gui 点击查看 免费下载 本文深入剖析 Terminal.Gui 生态中可复用文本编辑器 Terminal.Gui.Editor 的渲染…

2026/9/23 19:36:44 阅读更多 →
Win8商店应用隐私声明:从被拒到过审的完整实践

Win8商店应用隐私声明:从被拒到过审的完整实践

从第一版易网新闻阅读器提交到 Windows 8 商店的第三天开始,我的收件箱里躺了一封微软的审核驳回通知,原因一栏写得很直接:application does not provide a privacy statement。当时的我确实有点懵——一个不要求注册、不采集手机号、不做地理…

2026/9/23 19:35:44 阅读更多 →
Ekko Agent 天气 Skill 实战指南:基于 wttr.in 的实时天气查询与 JSON 解析规范

Ekko Agent 天气 Skill 实战指南:基于 wttr.in 的实时天气查询与 JSON 解析规范

AI 应用人工智能AI Agent本地部署前端后端工作流自动化 【免费下载链接】ekko-studio Ekko Studio is a local-first AI workspace for multi-agent chat, coding, and visual workflows, available on desktop and the web. 项目地址: https://gitcode.com/gh_mirr…

2026/9/23 19:35:44 阅读更多 →

最新新闻

YooAsset设计哲学:Manifest契约、Editor沙盒与Runtime可控

YooAsset设计哲学:Manifest契约、Editor沙盒与Runtime可控

1. 这不是一份文档,而是一套资产交付的思维操作系统你打开 Unity 项目,看到 Assets/Plugins/YooAsset 下密密麻麻的 .dll、.json 和 .bytes 文件;你右键点击一个 Prefab,菜单里多出「Build AssetBundle」和「Load Asset」两个选项…

2026/9/24 22:05:06 阅读更多 →
Agent Coding实战:从工作流设计到避坑指南的完整落地规范

Agent Coding实战:从工作流设计到避坑指南的完整落地规范

这篇内容我憋了很久,一直想写。过去三个月我们团队把Agent Coding从“偶尔试一下”提到了“日常开发主力工具”的位置,期间经历了太多翻车现场,有些坑到现在想起来都心疼浪费时间。如果你准备在团队里引入AI编程代理,或者你正打算…

2026/9/24 22:05:06 阅读更多 →
Devo本地调试避坑指南:解决浏览器代理层兼容性问题

Devo本地调试避坑指南:解决浏览器代理层兼容性问题

1. 项目概述:Devo不是浏览器插件,而是独立日志分析平台的本地调试工具链Devo这个名称在当前技术社区里存在显著的认知混淆——它既不是Chrome或Firefox的扩展程序,也不是一段可直接粘贴进地址栏执行的JavaScript代码片段(比如那些…

2026/9/24 22:05:06 阅读更多 →
卫星通信链路计算:从开普勒六根数到多普勒频移的完整推导

卫星通信链路计算:从开普勒六根数到多普勒频移的完整推导

卫星通信这个领域,很多人第一次接触轨道参数时都会被那六个开普勒根数绕晕。我当初做终端接入仿真的时候,对着半长轴、偏心率、倾角这几个词盯了一整天,愣是没搞明白它们跟"我的终端什么时候能收到信号""信号频率会偏多少&quo…

2026/9/24 22:05:06 阅读更多 →
卫星轨道六根数解析:从位置速度到多普勒频移计算

卫星轨道六根数解析:从位置速度到多普勒频移计算

1. 卫星轨道六根数到底在描述什么1.1 从“卫星在哪”这个问题说起搞卫星通信的终端工程师,绕不开一个最基础的问题:我地面上这个终端,跟天上那颗卫星之间,此刻到底隔了多远、相对跑得多快、信号频率偏了多少。这三个量——终端距离…

2026/9/24 22:05:06 阅读更多 →
AI工作流为什么需要微信入口?个人微信API接口在智能应用中的新场景

AI工作流为什么需要微信入口?个人微信API接口在智能应用中的新场景

做AI工作流的团队常陷入一个误区:把精力全放在模型能力和工具链上,对前端入口只挑"技术先进"的渠道——网页Chat、Slack、飞书机器人。结果工作流跑得再顺,用户参与率依然低,因为用户根本不在这些渠道上活跃。微信作为工…

2026/9/24 22:04:06 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →