Gateguard

affaan-m/ECC/docs/zh-CN/skills/gateguard

作者 affaan-mef648e01899ba3e8dc6371642deaaf64b4477775無授權條款275K 個星標收錄於 2026年10月9日更新於 2026年10月9日儲存庫4 天前更新

强制事实的门控,阻止编辑/写入/Bash(包括MultiEdit),并要求在允许操作之前进行具体调查(导入器、数据模式、用户指令)。与无门控代理相比,可测量地将输出质量提高2.25分。

僅含說明AI & Agents
AI 產生的概覽

一個 PreToolUse 閘門,在代理提出具體調查事實之前,阻擋編輯、寫入與破壞性 Bash 操作。

功能
GateGuard 是僅含說明的技能,描述代理工具呼叫的三階段閘門:拒絕首次編輯、寫入或 Bash 嘗試,強制模型蒐集指定事實,然後允許重試。它為編輯/多重編輯、建立新檔案、破壞性 Bash 指令與一般 Bash 分別定義閘門,每項都要求列出特定事實,例如匯入方、受影響的公開函式、資料結構與日期格式、回復步驟,以及逐字引用使用者指令。文件也包含設定選項、反模式與最佳實務,並引用兩項 A/B 測試,回報平均品質差距為 2.25 分。
適用情境
適用於編輯會影響多個模組的程式碼庫、專案包含具有特定結構或日期格式的資料檔案、AI 產生的程式碼必須符合現有慣例,或代理傾向於猜測而不先調查的工作情境。
執行需求
此技能不附帶指令碼,僅為說明文件。文件中的設定選項涉及一個 ECC 鉤子檔案與 hooks.json、環境變數 ECC_GATEGUARD 與 ECC_DISABLED_HOOKS,以及選用的 pip 套件 gateguard-ai 與 .gateguard.yml 專案設定。

GateGuard — 事实驱动的前置操作门控

一个 PreToolUse 钩子,强制 Claude 在编辑前进行调查。不同于自我评估("你确定吗?"),它要求具体的事实。调查行为本身创造了自我评估永远无法带来的认知。

何时激活

  • 处理任何文件编辑会影响多个模块的代码库时
  • 项目包含具有特定模式或日期格式的数据文件时
  • 团队要求 AI 生成的代码必须匹配现有模式时
  • 任何 Claude 倾向于猜测而非调查的工作流程中

核心概念

LLM 的自我评估不起作用。问"你是否违反了任何策略?"答案永远是"没有"。这已通过实验验证。

但问"列出所有导入此模块的文件"会迫使 LLM 运行 Grep 和 Read。调查本身创造了改变输出的上下文。

三阶段门控:

1. DENY  — 阻止首次编辑/写入/Bash 尝试2. FORCE — 明确告知模型需要收集哪些事实3. ALLOW — 在事实呈现后允许重试

没有竞争对手能同时做到这三步。大多数止步于拒绝。

证据

两个独立的 A/B 测试,相同的代理,相同的任务:

任务有门控无门控差距
分析模块8.0/106.5/10+1.5
Webhook 验证器10.0/107.0/10+3.0
平均9.06.75+2.25

两个代理生成的代码都能运行并通过测试。区别在于设计深度。

门控类型

编辑/多编辑门控(每个文件的首次编辑)

多编辑的处理方式相同——批次中的每个文件都单独进行门控。

在编辑 {file_path} 之前,请先呈现以下事实:
1. 列出所有导入/引用此文件的文件(在代码树中搜索——Glob/Grep,或通过 Bash 用 find/grep)2. 列出受此更改影响的公共函数/类3. 如果此文件读取/写入数据文件,请显示字段名称、结构以及日期格式(使用脱敏或合成值,而非原始生产数据)4. 逐字引用用户当前的指令

写入门控(首次创建新文件)

在创建 {file_path} 之前,请先说明以下事实:
1. 命名将调用此新文件的文件及行号2. 确认没有现有文件具有相同功能(在代码树中搜索——Glob/Grep,或通过 Bash 用 find/grep)3. 如果此文件读取/写入数据文件,请展示字段名称、结构及日期格式(使用脱敏或合成值,而非原始生产数据)4. 逐字引用用户当前的指令

破坏性 Bash 门控(每个破坏性命令)

触发条件:rm -rf、git reset --hard、git push --force、drop table 等。

1. 列出此命令将修改或删除的所有文件/数据2. 编写一行回滚步骤3. 逐字引用用户当前的指令

常规 Bash 门控(每个会话一次)

1. 当前用户请求的一句话概括2. 此特定命令验证或生成的内容

快速开始

选项 A:使用 ECC 钩子(零安装)

scripts/hooks/gateguard-fact-force.js 处的钩子已包含在此插件中。通过 hooks.json 启用它。

如果 GateGuard 阻止了设置或修复工作,请使用 ECC_GATEGUARD=off 启动会话。如需钩子级别的控制,请继续使用 ECC_DISABLED_HOOKS 配合 GateGuard 钩子 ID。

选项 B:带配置的完整包

bash
pip install gateguard-aigateguard init

这会添加 .gateguard.yml 用于按项目配置(自定义消息、忽略路径、门控开关)。

反模式

  • 不要使用自我评估替代。 "你确定吗?"总是得到"确定。"这已通过实验验证。
  • 不要跳过数据模式检查。 两个 A/B 测试代理都假设了 ISO-8601 日期,而实际数据使用的是 %Y/%m/%d %H:%M。检查数据结构(使用脱敏值)可以防止这类错误。
  • 不要对每个 Bash 命令都进行门控。 常规 bash 门控每个会话一次。破坏性 bash 门控每次执行。这种平衡避免了速度下降,同时捕获了真正的风险。

最佳实践

  • 让门控自然触发。不要试图预先回答门控问题——调查本身才是提高质量的关键。
  • 为你的领域自定义门控消息。如果你的项目有特定约定,请将其添加到门控提示中。
  • 使用 .gateguard.yml 忽略 .venv/、node_modules/、.git/ 等路径。

相关技能

  • safety-guard — 运行时安全检查(互补,不重叠)
  • code-reviewer — 编辑后审查(GateGuard 是编辑前调查)

來源與署名

來源:affaan-m/ECC位於docs/zh-CN/skills/gateguard提交ef648e0

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架