構(gòu)建靜態(tài)安全合并門(mén)控)
人工智能AI AgentAgent 工作流CLI研發(fā)協(xié)作AI 技能MCP 服務(wù)【免費(fèi)下載鏈接】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.項(xiàng)目地址https://gitcode.com/gh_mirrors/lo/loop-engineering點(diǎn)擊查看免費(fèi)下載本文講解 loop-engineering 倉(cāng)庫(kù)中的loop-gate工具與gate.yaml策略文件如何把docs/safety.md里的路徑黑名單Path Denylist與自動(dòng)合并白名單Auto-Merge Policy散文規(guī)則翻譯成機(jī)器可讀、可強(qiáng)制執(zhí)行的門(mén)控配置并用npx cobusgreyling/loop-gate check在任何commit/merge/auto-merge動(dòng)作前做一次確定性檢查。讀完本文你將掌握gate.yaml的version: 1 denylist maxFiles autoMergeAllowlist固定模式、CLI 參數(shù)與退出碼約定、與loop-context鏈?zhǔn)骄幣诺牡湫涂刂颇_本以及l(fā)oop-audit --auto-fix自動(dòng)生成gate.yaml、loop-sync檢測(cè)策略漂移的閉環(huán)用法。為什么需要機(jī)器可讀的安全門(mén)在 loop-engineering 的模型中docs/safety.md用散文定義了安全護(hù)欄哪些路徑絕不能未經(jīng)人工審批就自動(dòng)修改如**/.env、**/secrets/**、**/auth/**、**/payments/**、**/billing/**等以及默認(rèn)不自動(dòng)合并、只有允許列表內(nèi)的平凡變更文檔、測(cè)試才可無(wú)人值守合并。問(wèn)題在于散文規(guī)則無(wú)法被執(zhí)行。循環(huán)loop是否讀過(guò)docs/safety.md、是否理解其中的風(fēng)險(xiǎn)模型完全取決于提示詞與模型自覺(jué)。loop-gate的存在正是為了消除這個(gè)不確定性——如 tools/loop-gate/README.md 所述它是docs/safety.md的機(jī)器可讀孿生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 的規(guī)則變成了一段可調(diào)用的、確定性的檢查代碼。loop-gate check --action auto-merge --paths a.ts,b.ts || exit 2 # policy basedloop-gate 的設(shè)計(jì)邊界只管改了什么不管跑得如何理解loop-gate的第一步是理解它故意不做什么。從源碼注釋tools/loop-gate/src/gate.ts可以確認(rèn)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、重復(fù)失敗、token/每日預(yù)算等運(yùn)行歷史類(lèi)信號(hào)歸 tools/loop-context 的斷路器circuit breaker管loop-gate只評(píng)估將要做什么涉及哪些路徑、什么動(dòng)作類(lèi)型兩者在源碼層面保持解耦但在控制腳本里按約定配對(duì)——這與loop-worktree與loop-context的關(guān)系一致。典型鏈?zhǔn)秸{(diào)用摘自 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安裝與快速開(kāi)始最簡(jiǎn)方式是使用 npx無(wú)需本地安裝npx cobusgreyling/loop-gate check --action auto-merge --paths docs/guide.md從本倉(cāng)庫(kù)源碼運(yùn)行開(kāi)發(fā)/貢獻(xiàn)場(chǎng)景cd tools/loop-gate npm install npm test包信息tools/loop-gate/package.json包名cobusgreyling/loop-gateNode.js18通過(guò)bin字段暴露loop-gate命令npm test會(huì)先執(zhí)行tsc構(gòu)建再跑node --test test/*.test.mjs。gate.yaml固定模式的策略文件而非自由格式門(mén)列表gate.yaml不是一堆任意的門(mén)gates清單而是三個(gè)固定鍵組成的模式。這是docs/QUICKSTART.md第 4b 小節(jié)Set the merge gate與本次 issue 驗(yàn)收標(biāo)準(zhǔn)共同強(qiáng)調(diào)的關(guān)鍵點(diǎn)。用 templates/gate.yaml.template 復(fù)制到倉(cāng)庫(kù)根目錄即可開(kāi)工本倉(cāng)庫(kù)自己吃自己的狗糧dogfood的 gate.yaml 是完整參考version: 1 denylist: - **/.env - **/.env.* - **/secrets/** - **/credentials/** - **/*_key* - **/*_secret* - **/.terraform/** - **/k8s/production/** - **/migrations/** - **/auth/** - **/payments/** - **/billing/** maxFiles: 10 autoMergeAllowlist: - docs/** - **/*.md四個(gè)鍵的語(yǔ)義如下鍵類(lèi)型默認(rèn)含義version數(shù)字必填當(dāng)前必須為1不是 1 會(huì)被loadGateConfig直接拒絕denylist字符串?dāng)?shù)組必填命中任一 glob 的路徑無(wú)論何種--action一律升級(jí)escalate到人工審批maxFiles數(shù)字可選變更路徑數(shù)超過(guò)該閾值即升級(jí)對(duì)應(yīng)docs/safety.md的 Changes touching N files 人工門(mén)autoMergeAllowlist字符串?dāng)?shù)組可選僅在--action auto-merge時(shí)檢查每個(gè)變更路徑都必須命中其中一個(gè) glob否則升級(jí)從源碼tools/loop-gate/src/gate.ts 的GateConfig接口與loadGateConfig看校驗(yàn)是嚴(yán)格的denylist必須是字符串?dāng)?shù)組、maxFiles必須是有限數(shù)字ten這類(lèi)字符串會(huì)被拒絕而不是被靜默忽略、autoMergeAllowlist必須是數(shù)組、version不匹配或缺少必填字段都會(huì)拋錯(cuò)并附明確原因。這些校驗(yàn)都有對(duì)應(yīng)測(cè)試用例例如 tools/loop-gate/test/gate.test.mjs 中的loadGateConfig rejects a non-numeric maxFiles instead of silently disabling the check。檢查順序三條規(guī)則如何排隊(duì)checkGatetools/loop-gate/src/gate.ts按先檢查最便宜、最嚴(yán)重的順序執(zhí)行與loop-context斷路器的 most specific trigger first 約定一致denylist—— 任何路徑命中黑名單 glob立即升級(jí)無(wú)論--action是什么maxFiles—— 變更路徑數(shù)超過(guò)閾值升級(jí)autoMergeAllowlist—— 僅在--action auto-merge時(shí)檢查只要有一個(gè)路徑不在白名單上就升級(jí)。每次只返回一個(gè)觸發(fā)原因trigger優(yōu)先級(jí)為denylistfile-countnot-allowlistedok表示放行。測(cè)試checkGate denylist takes priority over file-count專(zhuān)門(mén)驗(yàn)證了黑名單優(yōu)先于文件數(shù)限制。glob 語(yǔ)義minimatch 與dot: true陷阱所有 glob 匹配走minimatch與.gitignore風(fēng)格 glob 相同語(yǔ)義**可跨路徑段匹配。但checkGate顯式傳入了dot: true選項(xiàng)這一點(diǎn)在源碼中有詳細(xì)注釋是極易踩坑的細(xì)節(jié)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.即若不開(kāi)dot: true.aws_key、.config/secrets/prod.json這類(lèi)以點(diǎn)開(kāi)頭的敏感路徑會(huì)被黑名單靜默漏過(guò)。對(duì)應(yīng)測(cè)試見(jiàn)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]參數(shù)默認(rèn)說(shuō)明--action commit\|merge\|auto-merge必填循環(huán)即將執(zhí)行的動(dòng)作取值受限deploy等非法值會(huì)報(bào)錯(cuò)--paths f1,f2,...必填逗號(hào)分隔的變更文件路徑空值/純逗號(hào)會(huì)被拒絕--gate-file pathgate.yaml當(dāng)前目錄要評(píng)估的策略文件路徑--json關(guān)閉輸出機(jī)器可讀的決策 JSON-h, --help—打印幫助退出碼0放行allowed·2升級(jí)escalate·1出錯(cuò)非法參數(shù)、配置缺失或無(wú)效。非 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結(jié)構(gòu)含allowed、trigger、reason、matchedPaths便于控制腳本把決策折疊進(jìn)已有的升級(jí)摘要。CLI 層的關(guān)鍵行為都有測(cè)試覆蓋tools/loop-gate/test/cli.test.mjs非法 action 退出 1、純空格/純逗號(hào)的--paths退出 1、缺失 gate 文件給出明確提示、--gate-file自定義路徑生效、未知子命令退出 1。一個(gè)實(shí)用的真實(shí)場(chǎng)景——直接把 git 暫存區(qū)/工作區(qū)變更喂給門(mén)控loop-gate check --action auto-merge --paths $(git diff --name-only | tr \n ,)在 QUICKSTART 中的落點(diǎn)Set the merge gate本倉(cāng)庫(kù)的 docs/QUICKSTART.md 第 4b 小節(jié) Set the merge gate (30 seconds) 就是該 issue 落地的位置。其操作順序與本文完全一致從 templates/gate.yaml.template 復(fù)制gate.yaml到倉(cāng)庫(kù)根目錄在任何自動(dòng)合并動(dòng)作前強(qiáng)制執(zhí)行npx cobusgreyling/loop gate check --action auto-merge --paths f1,f2,... # 等價(jià)于 npx cobusgreyling/loop-gate check --action auto-merge --paths f1,f2,...記住退出碼約定0 允許 ·2 升級(jí)到人工。與 loop-audit --auto-fix 的閉環(huán)自動(dòng)生成 gate.yaml無(wú)需手工從零編寫(xiě)gate.yaml。loop-audit --auto-fix在檢測(cè)到治理缺口時(shí)會(huì)自動(dòng)寫(xiě)出可加載的gate.yamltools/loop-audit/src/autofixer.ts 內(nèi)嵌了GATE_YAML_TEMPLATE同樣以version: 1開(kāi)頭、注釋注明是docs/safety.md的機(jī)器可讀孿生并在審計(jì)結(jié)果缺少gateYaml信號(hào)時(shí)執(zhí)行safeWriteFile(gate.yaml, GATE_YAML_TEMPLATE, Explicit human approval gates)。審計(jì)側(cè)tools/loop-audit/src/auditor.ts則會(huì)把沒(méi)有 gate.yaml標(biāo)記為 warn 級(jí)發(fā)現(xiàn)建議補(bǔ)充explicit human approval gates。也就是說(shuō)loop-audit --auto-fix跑一遍gate.yaml就位loop-gate check立即可用。與 loop-sync 的策略漂移檢測(cè)gate.yaml文件頭注釋寫(xiě)著 Keep in sync with docs/safety.md when either changes——但注釋本身不產(chǎn)生約束。真正把散文策略 ? 機(jī)器策略同步變成機(jī)械不變量的是 tools/loop-sync/src/policy-drift.ts它從gate.yaml中抽取 denylist 與限制與docs/safety.md的 Path Denylist fenced block 逐條比對(duì)loop-sync每次運(yùn)行都會(huì)執(zhí)行checkPolicyDrift見(jiàn) tools/loop-sync/src/sync.ts若 gate 文件本身無(wú)法解析則建議運(yùn)行npx cobusgreyling/loop-gate check --action commit --paths .查看解析錯(cuò)誤。它從不改寫(xiě)任何一側(cè)文件——哪邊正確是人工判斷。這種文檔即真相、配置即執(zhí)行的對(duì)齊正是loop-gate得以長(zhǎng)期可信的基礎(chǔ)。局限性與正確使用姿勢(shì)loop-gate明確不做什么見(jiàn) tools/loop-gate/README.md 的 What this does not do不讀取運(yùn)行臺(tái)賬run ledger未來(lái)也不會(huì)——這是與loop-context在源碼層面保持解耦的設(shè)計(jì)決定不生成自己的升級(jí)摘要格式——用--json把決策折疊進(jìn)控制腳本從loop-context --inject組裝的人工升級(jí)信息即可本身不強(qiáng)制任何東西——與loop-worktree的鎖一樣它是建議性的跳過(guò)loop-gate的控制腳本并不會(huì)被物理阻止機(jī)制的可靠性取決于調(diào)用它的腳本。因此正確姿勢(shì)是把loop-gate check放在do-the-merge之前的控制腳本里并與loop-context --check串聯(lián)成運(yùn)行歷史 靜態(tài)策略雙門(mén)控對(duì)超出maxFiles的大改動(dòng)、黑名單路徑、非白名單路徑一律退出 2 升級(jí)到人。完整的風(fēng)險(xiǎn)/緩解模型見(jiàn) docs/safety.md安全門(mén)在 Five Building Blocks Memory 模型中的位置見(jiàn) docs/primitives.md。贊分享人工智能AI AgentAgent 工作流CLI研發(fā)協(xié)作AI 技能MCP 服務(wù)【免費(fèi)下載鏈接】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.項(xiàng)目地址https://gitcode.com/gh_mirrors/lo/loop-engineering點(diǎn)擊查看免費(fèi)下載相關(guān)推薦loop-gate 源碼實(shí)戰(zhàn)用 gate.yaml 為 AI 編碼 Agent 的自動(dòng)合并與路徑變更裝上機(jī)械安全閘門(mén)loop gate 源碼實(shí)戰(zhàn)用 gate.yaml 為 AI 編碼 Agent 的自動(dòng)合并與路徑變更裝上機(jī)械安全閘門(mén) loop gate 是 loop eng人工智能AI AgentAgent 工作流CLI研發(fā)協(xié)作AI 技能MCP 服務(wù)loop-engineering 的 loop-verifier Agent為 AI 編碼循環(huán)構(gòu)建 maker/checker 校驗(yàn)閘門(mén)loop engineering 的 loop verifier Agent為 AI 編碼循環(huán)構(gòu)建 maker/checker 校驗(yàn)閘門(mén) loop verif人工智能AI AgentAgent 工作流CLI研發(fā)協(xié)作AI 技能MCP 服務(wù)loop-verifier為 AI 編程循環(huán)構(gòu)建 maker/checker 獨(dú)立驗(yàn)證閘門(mén)loop verifier為 AI 編程循環(huán)構(gòu)建 maker/checker 獨(dú)立驗(yàn)證閘門(mén) 導(dǎo)讀 loop verifier 是 loop engineeri人工智能AI AgentAgent 工作流CLI研發(fā)協(xié)作AI 技能MCP 服務(wù)創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考