ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

用 loop-gate 与 gate.yaml 为 AI 编码循环构建静态安全合并门控

用 loop-gate 与 gate.yaml 为 AI 编码循环构建静态安全合并门控 人工智能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-engineering 仓库中的loop-gate工具与gate.yaml策略文件如何把docs/safety.md里的路径黑名单Path Denylist与自动合并白名单Auto-Merge Policy散文规则翻译成机器可读、可强制执行的门控配置并用npx cobusgreyling/loop-gate check在任何commit/merge/auto-merge动作前做一次确定性检查。读完本文你将掌握gate.yaml的version: 1 denylist maxFiles autoMergeAllowlist固定模式、CLI 参数与退出码约定、与loop-context链式编排的典型控制脚本以及loop-audit --auto-fix自动生成gate.yaml、loop-sync检测策略漂移的闭环用法。为什么需要机器可读的安全门在 loop-engineering 的模型中docs/safety.md用散文定义了安全护栏哪些路径绝不能未经人工审批就自动修改如**/.env、**/secrets/**、**/auth/**、**/payments/**、**/billing/**等以及默认不自动合并、只有允许列表内的平凡变更文档、测试才可无人值守合并。问题在于散文规则无法被执行。循环loop是否读过docs/safety.md、是否理解其中的风险模型完全取决于提示词与模型自觉。loop-gate的存在正是为了消除这个不确定性——如 tools/loop-gate/README.md 所述它是docs/safety.md的机器可读孪生the code behind docs/safety.mds Path Denylist and Auto-Merge Policy把LOOP.md中 No auto-merge on main except trivial dependency patches 与 Denylist... without human review 的规则变成了一段可调用的、确定性的检查代码。loop-gate check --action auto-merge --paths a.ts,b.ts || exit 2 # policy basedloop-gate 的设计边界只管改了什么不管跑得如何理解loop-gate的第一步是理解它故意不做什么。从源码注释tools/loop-gate/src/gate.ts可以确认Deliberately has no knowledge of run history. Stagnation, repeated failures, and token/daily budgets already belong to loop-contexts circuit breaker — loop-gate only looks atwhatis being proposed (which paths, what action type), nothow the run has behaved so far.即停滞stagnation、重复失败、token/每日预算等运行历史类信号归 tools/loop-context 的断路器circuit breaker管loop-gate只评估将要做什么涉及哪些路径、什么动作类型两者在源码层面保持解耦但在控制脚本里按约定配对——这与loop-worktree与loop-context的关系一致。典型链式调用摘自 tools/loop-gate/README.mdloop-context --check --ledger run.json ... || exit 2 # run-history based loop-gate check --action auto-merge --paths a.ts,b.ts || exit 2 # policy based do-the-merge安装与快速开始最简方式是使用 npx无需本地安装npx cobusgreyling/loop-gate check --action auto-merge --paths docs/guide.md从本仓库源码运行开发/贡献场景cd tools/loop-gate npm install npm test包信息tools/loop-gate/package.json包名cobusgreyling/loop-gateNode.js18通过bin字段暴露loop-gate命令npm test会先执行tsc构建再跑node --test test/*.test.mjs。gate.yaml固定模式的策略文件而非自由格式门列表gate.yaml不是一堆任意的门gates清单而是三个固定键组成的模式。这是docs/QUICKSTART.md第 4b 小节Set the merge gate与本次 issue 验收标准共同强调的关键点。用 templates/gate.yaml.template 复制到仓库根目录即可开工本仓库自己吃自己的狗粮dogfood的 gate.yaml 是完整参考version: 1 denylist: - **/.env - **/.env.* - **/secrets/** - **/credentials/** - **/*_key* - **/*_secret* - **/.terraform/** - **/k8s/production/** - **/migrations/** - **/auth/** - **/payments/** - **/billing/** maxFiles: 10 autoMergeAllowlist: - docs/** - **/*.md四个键的语义如下键类型默认含义version数字必填当前必须为1不是 1 会被loadGateConfig直接拒绝denylist字符串数组必填命中任一 glob 的路径无论何种--action一律升级escalate到人工审批maxFiles数字可选变更路径数超过该阈值即升级对应docs/safety.md的 Changes touching N files 人工门autoMergeAllowlist字符串数组可选仅在--action auto-merge时检查每个变更路径都必须命中其中一个 glob否则升级从源码tools/loop-gate/src/gate.ts 的GateConfig接口与loadGateConfig看校验是严格的denylist必须是字符串数组、maxFiles必须是有限数字ten这类字符串会被拒绝而不是被静默忽略、autoMergeAllowlist必须是数组、version不匹配或缺少必填字段都会抛错并附明确原因。这些校验都有对应测试用例例如 tools/loop-gate/test/gate.test.mjs 中的loadGateConfig rejects a non-numeric maxFiles instead of silently disabling the check。检查顺序三条规则如何排队checkGatetools/loop-gate/src/gate.ts按先检查最便宜、最严重的顺序执行与loop-context断路器的 most specific trigger first 约定一致denylist—— 任何路径命中黑名单 glob立即升级无论--action是什么maxFiles—— 变更路径数超过阈值升级autoMergeAllowlist—— 仅在--action auto-merge时检查只要有一个路径不在白名单上就升级。每次只返回一个触发原因trigger优先级为denylistfile-countnot-allowlistedok表示放行。测试checkGate denylist takes priority over file-count专门验证了黑名单优先于文件数限制。glob 语义minimatch 与dot: true陷阱所有 glob 匹配走minimatch与.gitignore风格 glob 相同语义**可跨路径段匹配。但checkGate显式传入了dot: true选项这一点在源码中有详细注释是极易踩坑的细节without it,*never matches a path segment starting with., so denylist entries like**/secrets/**or**/*_key*would silently miss.secrets/prod.jsonor.aws_key, exactly the paths a denylist most needs to catch.即若不开dot: true.aws_key、.config/secrets/prod.json这类以点开头的敏感路径会被黑名单静默漏过。对应测试见checkGate denylist globs match dotfile leaves (dot: true)与checkGate denylist ** traverses into a hidden (dot) directory (dot: true)。CLI 用法与退出码约定完整命令格式tools/loop-gate/src/cli.ts 的 HELP 文本loop-gate check --action commit|merge|auto-merge --paths f1,f2,... [--gate-file gate.yaml] [--json]参数默认说明--action commit\|merge\|auto-merge必填循环即将执行的动作取值受限deploy等非法值会报错--paths f1,f2,...必填逗号分隔的变更文件路径空值/纯逗号会被拒绝--gate-file pathgate.yaml当前目录要评估的策略文件路径--json关闭输出机器可读的决策 JSON-h, --help—打印帮助退出码0放行allowed·2升级escalate·1出错非法参数、配置缺失或无效。非 JSON 模式下输出形如ALLOWED [ok] — Within policy — cleared to proceed. ESCALATE [denylist] — 1 path(s) match the denylist: auth/login.ts. Escalating for human review.--json模式输出GateDecision结构含allowed、trigger、reason、matchedPaths便于控制脚本把决策折叠进已有的升级摘要。CLI 层的关键行为都有测试覆盖tools/loop-gate/test/cli.test.mjs非法 action 退出 1、纯空格/纯逗号的--paths退出 1、缺失 gate 文件给出明确提示、--gate-file自定义路径生效、未知子命令退出 1。一个实用的真实场景——直接把 git 暂存区/工作区变更喂给门控loop-gate check --action auto-merge --paths $(git diff --name-only | tr \n ,)在 QUICKSTART 中的落点Set the merge gate本仓库的 docs/QUICKSTART.md 第 4b 小节 Set the merge gate (30 seconds) 就是该 issue 落地的位置。其操作顺序与本文完全一致从 templates/gate.yaml.template 复制gate.yaml到仓库根目录在任何自动合并动作前强制执行npx cobusgreyling/loop gate check --action auto-merge --paths f1,f2,... # 等价于 npx cobusgreyling/loop-gate check --action auto-merge --paths f1,f2,...记住退出码约定0 允许 ·2 升级到人工。与 loop-audit --auto-fix 的闭环自动生成 gate.yaml无需手工从零编写gate.yaml。loop-audit --auto-fix在检测到治理缺口时会自动写出可加载的gate.yamltools/loop-audit/src/autofixer.ts 内嵌了GATE_YAML_TEMPLATE同样以version: 1开头、注释注明是docs/safety.md的机器可读孪生并在审计结果缺少gateYaml信号时执行safeWriteFile(gate.yaml, GATE_YAML_TEMPLATE, Explicit human approval gates)。审计侧tools/loop-audit/src/auditor.ts则会把没有 gate.yaml标记为 warn 级发现建议补充explicit human approval gates。也就是说loop-audit --auto-fix跑一遍gate.yaml就位loop-gate check立即可用。与 loop-sync 的策略漂移检测gate.yaml文件头注释写着 Keep in sync with docs/safety.md when either changes——但注释本身不产生约束。真正把散文策略 ↔ 机器策略同步变成机械不变量的是 tools/loop-sync/src/policy-drift.ts它从gate.yaml中抽取 denylist 与限制与docs/safety.md的 Path Denylist fenced block 逐条比对loop-sync每次运行都会执行checkPolicyDrift见 tools/loop-sync/src/sync.ts若 gate 文件本身无法解析则建议运行npx cobusgreyling/loop-gate check --action commit --paths .查看解析错误。它从不改写任何一侧文件——哪边正确是人工判断。这种文档即真相、配置即执行的对齐正是loop-gate得以长期可信的基础。局限性与正确使用姿势loop-gate明确不做什么见 tools/loop-gate/README.md 的 What this does not do不读取运行台账run ledger未来也不会——这是与loop-context在源码层面保持解耦的设计决定不生成自己的升级摘要格式——用--json把决策折叠进控制脚本从loop-context --inject组装的人工升级信息即可本身不强制任何东西——与loop-worktree的锁一样它是建议性的跳过loop-gate的控制脚本并不会被物理阻止机制的可靠性取决于调用它的脚本。因此正确姿势是把loop-gate check放在do-the-merge之前的控制脚本里并与loop-context --check串联成运行历史 静态策略双门控对超出maxFiles的大改动、黑名单路径、非白名单路径一律退出 2 升级到人。完整的风险/缓解模型见 docs/safety.md安全门在 Five Building Blocks Memory 模型中的位置见 docs/primitives.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点击查看免费下载相关推荐loop-gate 源码实战用 gate.yaml 为 AI 编码 Agent 的自动合并与路径变更装上机械安全闸门loop gate 源码实战用 gate.yaml 为 AI 编码 Agent 的自动合并与路径变更装上机械安全闸门 loop gate 是 loop eng人工智能AI AgentAgent 工作流CLI研发协作AI 技能MCP 服务loop-engineering 的 loop-verifier Agent为 AI 编码循环构建 maker/checker 校验闸门loop engineering 的 loop verifier Agent为 AI 编码循环构建 maker/checker 校验闸门 loop verif人工智能AI AgentAgent 工作流CLI研发协作AI 技能MCP 服务loop-verifier为 AI 编程循环构建 maker/checker 独立验证闸门loop verifier为 AI 编程循环构建 maker/checker 独立验证闸门 导读 loop verifier 是 loop engineeri人工智能AI AgentAgent 工作流CLI研发协作AI 技能MCP 服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表