Communitygithub.com

GateGuard

Puerta de verificación fáctica que bloquea Editar/Escribir/Bash (incluyendo MultiEdit) y exige una investigación concreta (importadores, esquemas de datos, instrucción del usuario) antes de permitir la acción. Mejora la calidad del resultado en +2.25 puntos frente a agentes sin puerta.

¿Qué es GateGuard?

GateGuard es un hook de PreToolUse para agentes de IA como Claude Code, Cursor o Codex que interrumpe cualquier intento de edición, escritura o comando Bash antes de que se ejecute, exigiendo que el agente presente hechos concretos antes de continuar. En lugar de una autoevaluación ineficaz como "¿estás seguro?", obliga al modelo a investigar —listar archivos que importan el módulo, funciones públicas afectadas, estructura de datos y esquemas— y luego permite la acción solo si se presentan esos hechos. Los resultados de pruebas A/B muestran una mejora promedio de +2.25 puntos en la calidad del código generado. Este skill es útil para proyectos donde las ediciones afectan a múltiples módulos, equipos que necesitan coherencia en patrones de código, y cualquier flujo donde el agente tiende a adivinar en lugar de investigar. Se integra como un hook ECC (sin instalación) o mediante el paquete completo gateguard-ai, con controles graduados: umbral de denegaciones completas, exenciones por glob, y desactivación opcional de la puerta Bash rutinaria manteniendo la destructiva. También maneja lotes paralelos parciales, controlando cada llamada de herramienta de forma independiente para evitar bloqueos en lote completo.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/ECC/tree/main/skills/gateguard

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

GateGuard — Puerta de Verificación Fáctica Pre-Acción

Un hook PreToolUse que obliga a Claude a investigar antes de editar. En lugar de una autoevaluación ("¿estás seguro?"), exige hechos concretos. El acto de investigar crea conciencia que la autoevaluación nunca logró.

Cuándo activarlo

  • Trabajando en cualquier codebase donde las ediciones de archivos afectan a múltiples módulos
  • Proyectos con archivos de datos que tienen esquemas o formatos de fecha específicos
  • Equipos donde el código generado por IA debe coincidir con patrones existentes
  • Cualquier flujo de trabajo donde Claude tiende a adivinar en lugar de investigar

Concepto central

La autoevaluación de LLM no funciona. Preguntar "¿violaste alguna política?" y la respuesta siempre es "no." Esto está verificado experimentalmente.

Pero preguntar "enumera todos los archivos que importan este módulo" obliga al LLM a ejecutar Grep y Read. La investigación en sí misma crea contexto que cambia el resultado.

Puerta de tres etapas:

1. DENEGAR — bloquear el primer intento de Editar/Escribir/Bash
2. FORZAR — indicar al modelo exactamente qué hechos recopilar
3. PERMITIR — permitir reintento después de presentar los hechos

Ningún competidor hace las tres. La mayoría se detiene en denegar.

Evidencia

Dos pruebas A/B independientes, agentes idénticos, misma tarea:

TareaCon puertaSin puertaDiferencia
Módulo de analíticas8.0/106.5/10+1.5
Validador de webhook10.0/107.0/10+3.0
Promedio9.06.75+2.25

Ambos agentes producen código que se ejecuta y pasa las pruebas. La diferencia está en la profundidad del diseño.

Tipos de puerta

Puerta de Editar / MultiEdit (primera edición por archivo)

MultiEdit se maneja de forma idéntica: cada archivo del lote se controla individualmente.

Antes de editar {file_path}, presenta estos hechos:

1. Enumera TODOS los archivos que importan/requieren este archivo (busca en el árbol — Glob/Grep, o find/grep mediante Bash)
2. Enumera las funciones/clases públicas afectadas por este cambio
3. Si este archivo lee/escribe archivos de datos, muestra nombres de campos, estructura
   y formato de fecha (usa valores redactados o sintéticos, no datos reales de producción)
4. Cita textualmente la instrucción actual del usuario

Puerta de Escribir (primera creación de archivo)

Antes de crear {file_path}, presenta estos hechos:

1. Nombra el/los archivo(s) y línea(s) que llamarán a este nuevo archivo
2. Confirma que ningún archivo existente cumple el mismo propósito (busca en el árbol — Glob/Grep, o find/grep mediante Bash)
3. Si este archivo lee/escribe archivos de datos, muestra nombres de campos, estructura
   y formato de fecha (usa valores redactados o sintéticos, no datos reales de producción)
4. Cita textualmente la instrucción actual del usuario

Puerta de Bash destructivo (cada comando destructivo)

Se activa en: rm -rf, git reset --hard, git push --force, drop table, etc.

1. Enumera todos los archivos/datos que este comando modificará o eliminará
2. Escribe un procedimiento de reversión de una línea
3. Cita textualmente la instrucción actual del usuario

Puerta de Bash rutinario (una vez por sesión)

1. La solicitud actual del usuario en una frase
2. Qué verifica o produce este comando específico

Lotes paralelos y aplicación parcial

La puerta de primer toque evalúa cada llamada de herramienta de forma independiente. Cuando se envían varias ediciones a un archivo que aún no se ha tocado en un lote paralelo, la primera llamada es denegada y la denegación marca el archivo como verificado, por lo que las ediciones hermanas en ese lote se aplican. No se revierte nada: el archivo puede terminar conteniendo las ediciones hermanas sin la denegada.

El mensaje de denegación nombra el archivo y advierte que las ediciones hermanas del lote pueden haberse aplicado ya. Trátalo literalmente:

  • Envía las ediciones dependientes a un archivo aún no tocado de forma secuencial, no en un lote paralelo. Una definición y su primer uso, o una importación y su sitio de llamada, no deben viajar en el mismo lote.
  • Después de una denegación de primer toque, presenta los hechos, reintenta la edición denegada y vuelve a leer el archivo antes de construir sobre cualquier otra cosa del lote.

No es posible un bloqueo a nivel de lote: los hooks ven las llamadas a herramientas una a una, por lo que la puerta no puede saber qué llamadas llegaron juntas.

Inicio rápido

Opción A: Usar el hook ECC (sin instalación)

El hook en scripts/hooks/gateguard-fact-force.js está incluido en este plugin. Actívalo mediante hooks.json.

Si GateGuard bloquea tareas de configuración o reparación, inicia la sesión con ECC_GATEGUARD=off. Para control a nivel de hook, sigue usando ECC_DISABLED_HOOKS con el ID del hook GateGuard.

En sesiones largas, solo las primeras GATEGUARD_FACT_FORCE_FULL_DENIALS denegaciones de verificación fáctica (por defecto 3) emiten el bloque completo de cuatro hechos; denegaciones posteriores se condensan en una sola línea que lleva el ordinal de denegación, de modo que bloques casi idénticos no se acumulen en la ventana de contexto y amplifiquen los bucles de repetición del modelo (#2142). Reintentar el mismo archivo o comando después de presentar hechos nunca vuelve a activar la puerta.

Controles graduados

ECC_GATEGUARD=off (o GATEGUARD_DISABLED=1) desactiva la puerta por completo. Las variables de esta tabla no — cada una reduce un comportamiento mientras las verificaciones de Bash destructivo que soportan carga siguen ejecutándose:

VariableValor por defectoEfecto
GATEGUARD_BASH_ROUTINE_DISABLEDsin definir (puerta activa)Desactiva la puerta Bash rutinario únicamente. La puerta de Bash destructivo (rm -rf, git reset --hard, drop table, dd if=, …) no se ve afectada.
GATEGUARD_EXEMPT_GLOBSsin definir (sin exenciones)Globs separados por comas; un objetivo de Editar/Escribir/MultiEdit que coincida omite la verificación fáctica de primer toque. Destinado a árboles de bajo valor de importación (pruebas, artefactos generados, directorios temporales) donde "quién importa esto / qué esquema" no aporta señal.
GATEGUARD_FACT_FORCE_FULL_DENIALS3Cuántas denegaciones emiten el bloque completo de cuatro hechos antes de que las posteriores se condensen en una sola línea. 0 condensa desde la primera denegación.
GATEGUARD_BASH_EXTRA_DESTRUCTIVEsin definirPatrones adicionales de comandos destructivos, como fuente de regex, añadidos al conjunto integrado. Un regex mal formado se trata como no definido (los integrados aún se aplican) y se registra una vez en stderr.
GATEGUARD_STATE_DIR~/.gateguardDónde se mantiene el estado de la puerta por sesión. Si el estado no se puede persistir, la puerta permite la operación en lugar de repetir en bucle, y nombra esta variable en la advertencia.

GATEGUARD_BASH_ROUTINE_DISABLED acepta 1, true, on, enabled, enable, o yes (insensible a mayúsculas/minúsculas y espacios en blanco); cualquier otro valor deja la puerta activa.

Desactivar la puerta por completo

VariableEfecto
ECC_GATEGUARD=offDesactiva GateGuard para la sesión. Acepta 0, false, off, disabled, o disable.
GATEGUARD_DISABLED=1Mismo efecto. Reconoce solo 1 — las grafías anteriores no aplican aquí.

Para control a nivel de hook, sigue usando ECC_DISABLED_HOOKS con el ID del hook GateGuard.

Semántica de glob para GATEGUARD_EXEMPT_GLOBS

Los patrones coinciden con la ruta completa del objetivo relativa al proyecto. La raíz del proyecto es CLAUDE_PROJECT_DIR, con respaldo al cwd del payload del hook, luego al directorio de trabajo del proceso del hook. Los globs relativos nunca eximen objetivos fuera de esa raíz. Los globs absolutos explícitos coinciden con la ruta absoluta completa del objetivo y pueden eximir deliberadamente rutas fuera del proyecto.

Tanto los patrones como las rutas usan separadores / y coincidencias en minúsculas. * coincide dentro de un segmento, ** a través de segmentos, y ? un carácter que no sea separador. **/ incluye cero directorios, por lo que **/tests/** también coincide con tests/foo.js. Los patrones mal formados se descartan sin conceder una exención.

Desde 2.2.1, services/** solo cubre el árbol de servicios raíz del proyecto, y *.md solo cubre sus archivos Markdown raíz. Usa **/*.md para todos los archivos Markdown dentro del proyecto. Las exenciones existentes sin anclaje pueden necesitar ajuste:

{
  "env": {
    "GATEGUARD_BASH_ROUTINE_DISABLED": "1",
    "GATEGUARD_EXEMPT_GLOBS": "**/tests/**,tests/**,**/*.test.*,**/docs/**,**/dist/**"
  }
}

Opción B: Paquete completo con configuración

pip install gateguard-ai
gateguard init

Esto agrega .gateguard.yml para configuración por proyecto (mensajes personalizados, rutas de ignorar, activación/desactivación de puertas).

Antipatrones

  • No uses autoevaluación en su lugar. "¿Estás seguro?" siempre obtiene "sí." Esto está verificado experimentalmente.
  • No omitas la verificación del esquema de datos. Ambos agentes de la prueba A/B asumieron fechas ISO-8601 cuando los datos reales usaban %Y/%m/%d %H:%M. Verificar la estructura de datos (con valores redactados) previene toda esta clase de errores.
  • No controles cada comando Bash. Las puertas de Bash rutinario se activan una vez por sesión. Las puertas de Bash destructivo se activan cada vez. Este equilibrio evita ralentizaciones mientras detecta riesgos reales.

Mejores prácticas

  • Deja que la puerta se active de forma natural. No intentes responder de antemano las preguntas de la puerta — la investigación en sí misma es lo que mejora la calidad.
  • Personaliza los mensajes de la puerta para tu dominio. Si tu proyecto tiene convenciones específicas, agrégalas a las indicaciones de la puerta.
  • Usa .gateguard.yml para ignorar rutas como .venv/, node_modules/, .git/.

Habilidades relacionadas

  • safety-guard — Verificaciones de seguridad en tiempo de ejecución (complementarias, no superpuestas)
  • code-reviewer — Revisión posterior a la edición (GateGuard es investigación previa a la edición)

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

affaan-m/ECC

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

affaan-m/fal-ai-media

Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.

affaan-m/manim-video

日本語翻訳:このファイルは manim-video 用の日本語翻訳が必要です

affaan-m/remotion-video-creation

Remotion のベストプラクティス - React で動画を作成する。3D、アニメーション、音声、字幕、チャート、トランジションなどをカバーするドメイン固有の29のルール。

affaan-m/video-editing

AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

agent-self-evaluation

Use after completing any non-trivial task. The agent self-rates its output on 5 axes — accuracy, completeness, clarity, actionability, conciseness — with concrete evidence per criterion. Produces a structured 1-5 scorecard with specific improvement suggestions.

agent-sort

Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.

ai-first-engineering

Engineering operating model for teams where AI agents generate a large share of implementation output. Use when setting team process, review gates, or ownership rules for a codebase largely written by agents.

ai-regression-testing

Regression testing strategies for AI-assisted development. Sandbox-mode API testing without database dependencies, automated bug-check workflows, and patterns to catch AI blind spots where the same model writes and reviews code. Use when adding regression coverage to AI-assisted code, or when the same model both wrote and reviewed a change.

android-clean-architecture

Clean Architecture patterns for Android and Kotlin Multiplatform projects — module structure, dependency rules, UseCases, Repositories, and data layer patterns. Use when structuring modules, layers, or data flow in an Android or KMP project.

angular-developer

Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling.

Skills relacionados