Communitygithub.com

GateGuard

Portão de verificação de fatos que bloqueia edições, escritas e comandos Bash (incluindo MultiEdit) e exige investigação concreta (importadores, esquemas de dados, instruções do usuário) antes de permitir a ação. Melhora mensuravelmente a qualidade da saída em +2,25 pontos em comparação com agentes sem portão.

O que é GateGuard?

GateGuard é um hook PreToolUse que força o Claude a investigar antes de editar, em vez de confiar em autoavaliação ineficaz. Ele implementa um portão de três estágios: primeiro nega a tentativa de edição/escrita/Bash, depois exige que o modelo colete fatos concretos como listar todos os arquivos que importam o módulo, funções afetadas e esquemas de dados, e só então permite a ação após a apresentação desses fatos. Testes A/B independentes mostram uma melhoria média de +2,25 pontos na qualidade da saída, com ganhos maiores em tarefas que exigem verificação profunda de design. O GateGuard suporta todos os editores de código com suporte ECC (Claude Code, Cursor, Codex, Continue.dev, Cline, etc.) através do sistema ECC, e pode ser configurado por projeto com um arquivo `.gateguard.yml` ou totalmente desabilitado por sessão com variáveis de ambiente.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/gateguard

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

GateGuard — Portão de Verificação de Fatos Pré-Ação

Um hook PreToolUse que força o Claude a investigar antes de editar. Em vez de autoavaliação ("você tem certeza?"), ele exige fatos concretos. O ato de investigar cria consciência que a autoavaliação nunca criou.

Quando Ativar

  • Trabalhando em qualquer base de código onde edições de arquivos afetam múltiplos módulos
  • Projetos com arquivos de dados que possuem esquemas ou formatos de data específicos
  • Equipes onde o código gerado por IA deve corresponder a padrões existentes
  • Qualquer fluxo de trabalho onde Claude tende a adivinhar em vez de investigar

Conceito Central

A autoavaliação de LLMs não funciona. Pergunte "você violou alguma política?" e a resposta é sempre "não." Isso é verificado experimentalmente.

Mas perguntar "liste cada arquivo que importa este módulo" força o LLM a executar Grep e Read. A própria investigação cria contexto que muda a saída.

Portão de três estágios:

1. NEGAR — bloquear a primeira tentativa de Edit/Write/Bash
2. FORÇAR — dizer ao modelo exatamente quais fatos coletar
3. PERMITIR — permitir a repetição após os fatos serem apresentados

Nenhum concorrente faz os três. A maioria para em negar.

Evidências

Dois testes A/B independentes, agentes idênticos, mesma tarefa:

TarefaCom PortãoSem PortãoDiferença
Módulo de análise8,0/106,5/10+1,5
Validador de webhook10,0/107,0/10+3,0
Média9,06,75+2,25

Ambos os agentes produzem código que executa e passa nos testes. A diferença está na profundidade do design.

Tipos de Portão

Portão de Edit / MultiEdit (primeira edição por arquivo)

MultiEdit é tratado de forma idêntica — cada arquivo no lote é verificado individualmente.

Antes de editar {caminho_do_arquivo}, apresente estes fatos:

1. Liste TODOS os arquivos que importam/requerem este arquivo (pesquise a árvore — Glob/Grep, ou find/grep via Bash)
2. Liste as funções/classes públicas afetadas por esta alteração
3. Se este arquivo lê/escreve arquivos de dados, mostre nomes de campos, estrutura
   e formato de data (use valores editados ou sintéticos, não dados reais de produção)
4. Cite a instrução atual do usuário literalmente

Portão de Write (primeira criação de arquivo)

Antes de criar {caminho_do_arquivo}, apresente estes fatos:

1. Nomeie o(s) arquivo(s) e linha(s) que chamarão este novo arquivo
2. Confirme que nenhum arquivo existente atende ao mesmo propósito (pesquise a árvore — Glob/Grep, ou find/grep via Bash)
3. Se este arquivo lê/escreve arquivos de dados, mostre nomes de campos, estrutura
   e formato de data (use valores editados ou sintéticos, não dados reais de produção)
4. Cite a instrução atual do usuário literalmente

Portão de Bash Destrutivo (todo comando destrutivo)

Dispara em: rm -rf, git reset --hard, git push --force, drop table, etc.

1. Liste todos os arquivos/dados que este comando modificará ou excluirá
2. Escreva um procedimento de reversão de uma linha
3. Cite a instrução atual do usuário literalmente

Portão de Bash Rotineiro (uma vez por sessão)

1. A solicitação atual do usuário em uma frase
2. O que este comando específico verifica ou produz

Lotes Paralelos e Aplicação Parcial

O portão de primeiro toque avalia cada chamada de ferramenta independentemente. Quando várias edições em um arquivo que ainda não foi tocado são enviadas em um lote paralelo, a primeira chamada é negada e a negação marca o arquivo como verificado, então as edições irmãs nesse lote são aplicadas. Nada é desfeito: o arquivo pode acabar contendo as edições irmãs sem a negada.

A mensagem de negação nomeia o arquivo e avisa que os irmãos do lote podem já ter sido aplicados. Trate-a literalmente:

  • Envie edições dependentes para um arquivo ainda não tocado sequencialmente, não em um lote paralelo. Uma definição e seu primeiro uso, ou uma importação e seu local de chamada, não devem estar no mesmo lote.
  • Após uma negação de primeiro toque, apresente os fatos, repita a edição negada, e releia o arquivo antes de construir qualquer outra coisa do lote.

Um bloqueio de lote inteiro não é possível: hooks veem chamadas de ferramenta uma de cada vez, então o portão não pode saber quais chamadas chegaram juntas.

Início Rápido

Opção A: Usar o hook ECC (instalação zero)

O hook em scripts/hooks/gateguard-fact-force.js está incluído neste plugin. Ative-o via hooks.json.

Se o GateGuard bloquear trabalhos de configuração ou reparo, inicie a sessão com ECC_GATEGUARD=off. Para controle em nível de hook, continue usando ECC_DISABLED_HOOKS com o ID do hook GateGuard.

Em sessões longas, apenas as primeiras GATEGUARD_FACT_FORCE_FULL_DENIALS negações de verificação de fatos (padrão 3) emitem o bloco completo de quatro fatos; negações posteriores são condensadas em uma única linha carregando o ordinal da negação, para que blocos quase idênticos não possam se acumular na janela de contexto e amplificar loops de repetição do modelo (#2142). Repetir o mesmo arquivo ou comando após apresentar os fatos nunca reativa o portão.

Controles graduados

ECC_GATEGUARD=off (ou GATEGUARD_DISABLED=1) desliga o portão completamente. As variáveis nesta tabela não — cada uma estreita um comportamento enquanto as verificações de Bash destrutivo que suportam carga continuam em execução:

VariávelPadrãoEfeito
GATEGUARD_BASH_ROUTINE_DISABLEDnão definido (portão ligado)Desabilita apenas o portão Bash rotineiro. O portão Bash destrutivo (rm -rf, git reset --hard, drop table, dd if=, …) não é afetado.
GATEGUARD_EXEMPT_GLOBSnão definido (sem isenções)Globs separados por vírgula; um alvo de Edit/Write/MultiEdit correspondente pula a verificação de fatos de primeiro toque. Destinado a árvores de baixo valor de importação (testes, artefatos gerados, diretórios temporários) onde "quem importa isso / qual esquema" não carrega sinal.
GATEGUARD_FACT_FORCE_FULL_DENIALS3Quantas negações emitem o bloco completo de quatro fatos antes que as posteriores condensem para uma única linha. 0 condensa desde a primeira negação.
GATEGUARD_BASH_EXTRA_DESTRUCTIVEnão definidoPadrões adicionais de comandos destrutivos, como fonte de regex, adicionados ao conjunto embutido. Um regex malformado é tratado como não definido (embutidos ainda se aplicam) e registrado uma vez em stderr.
GATEGUARD_STATE_DIR~/.gateguardOnde o estado do portão por sessão é mantido. Se o estado não puder ser persistido, o portão permite a operação em vez de entrar em loop, e nomeia esta variável no aviso.

GATEGUARD_BASH_ROUTINE_DISABLED aceita 1, true, on, enabled, enable, ou yes (insensível a maiúsculas/minúsculas e espaços); qualquer outro valor deixa o portão ligado.

Desligando o portão completamente

VariávelEfeito
ECC_GATEGUARD=offDesabilita o GateGuard para a sessão. Aceita 0, false, off, disabled, ou disable.
GATEGUARD_DISABLED=1Mesmo efeito. Reconhece 1 apenas — as grafias acima não se aplicam aqui.

Para controle em nível de hook, continue usando ECC_DISABLED_HOOKS com o ID do hook GateGuard.

Semântica de glob para GATEGUARD_EXEMPT_GLOBS

Padrões correspondem a todo o caminho do alvo relativo ao projeto. A raiz do projeto é CLAUDE_PROJECT_DIR, recuando para o cwd do payload do hook, depois para o diretório de trabalho do processo do hook. Globs relativos nunca isentam alvos fora dessa raiz. Globs absolutos explícitos correspondem a todo o caminho absoluto do alvo e podem isentar deliberadamente caminhos fora do projeto.

Tanto padrões quanto caminhos usam separadores / e correspondência em minúsculas. * corresponde dentro de um segmento, ** através de segmentos, e ? um caractere não separador. **/ inclui zero diretórios, então **/tests/** também corresponde a tests/foo.js. Padrões malformados são descartados sem conceder isenção.

Desde 2.2.1, services/** cobre apenas a árvore de serviços raiz do projeto, e *.md cobre apenas seus arquivos Markdown raiz. Use **/*.md para todos os arquivos Markdown dentro do projeto. Isenções existentes não ancoradas podem precisar de ajuste:

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

Opção B: Pacote completo com configuração

pip install gateguard-ai
gateguard init

Isso adiciona .gateguard.yml para configuração por projeto (mensagens personalizadas, caminhos de ignorar, alternâncias de portão).

Anti-Padrões

  • Não use autoavaliação em vez disso. "Você tem certeza?" sempre obtém "sim." Isso é verificado experimentalmente.
  • Não pule a verificação do esquema de dados. Ambos os agentes do teste A/B assumiram datas ISO-8601 quando os dados reais usavam %Y/%m/%d %H:%M. Verificar a estrutura de dados (com valores editados) previne toda essa classe de bugs.
  • Não coloque portão em todo comando Bash. Portão Bash rotineiro uma vez por sessão. Portão Bash destrutivo toda vez. Este equilíbrio evita lentidão enquanto captura riscos reais.

Melhores Práticas

  • Deixe o portão disparar naturalmente. Não tente pré-responder as perguntas do portão — a própria investigação é o que melhora a qualidade.
  • Personalize as mensagens do portão para seu domínio. Se seu projeto tem convenções específicas, adicione-as aos prompts do portão.
  • Use .gateguard.yml para ignorar caminhos como .venv/, node_modules/, .git/.

Habilidades Relacionadas

  • safety-guard — Verificações de segurança em tempo de execução (complementar, não sobreposto)
  • code-reviewer — Revisão pós-edição (GateGuard é investigação pré-edição)

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/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

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.

Habilidades Relacionadas