🪝 Guia do desenvolvedor · 2026

OpenClaw Hooks: O guia completo do desenvolvedor (2026) — EasyClaw

Domine os ganchos OpenClaw em 2026 – aprenda como escrever proteções PreToolUse, automação PostToolUse e proteções para toda a equipe que oferecem controle total sobre seu agente de IA.

📅 Atualizado: abril de 2026⏱ leitura de 14 minutos✍️ Editorial EasyClaw
  • X(Twitter) icon
  • Facebook icon
  • LinkedIn icon
  • Copy link icon

O que são OpenClaw Hooks? (E por que eles mudam a forma como você trabalha com agentes de IA)

Se você já viu um agente de IA sobrescrever um arquivo que ele não deveria tocar ou desejou que seu conjunto de testes fosse executado automaticamente após cada alteração de código - os ganchos OpenClaw são a resposta. Eles permitem interceptar, reagir e controlar o comportamento do agente precisamente nos momentos que importam.

Hooks são pequenos scripts orientados a eventos que são executados dentro do gateway OpenClaw em pontos específicos do ciclo de vida de um agente. Pense neles como um middleware para o seu agente de IA – eles ficam entre o agente e as ferramentas que ele chama, fornecendo uma camada de interceptação programável.

Existem dois tipos distintos:

  • Internal hooks - scripts que executam dentro o próprio processo do Gateway. Eles têm acesso direto ao estado da sessão, aos metadados de chamada de ferramenta e ao contexto de trabalho do agente. Sobrecarga de rede zero.
  • Webhooks — Retornos de chamada HTTP que são acionados para um endpoint externo quando ocorre um evento de ciclo de vida. O Gateway envia uma solicitação POST; seu servidor lida com a lógica.

A diferença prática: os ganchos internos servem para guarda-corpos rápidos e síncronos e automação local. Webhooks destina-se a qualquer coisa que precise chegar fora de sua máquina – notificações Slack, sistemas CI, plataformas de registro.

Internal Hooks vs. Webhooks – Qual você precisa?

Fator Gancho Interno Webhook
Execution location Inside the Gateway process External HTTP server
Latency Near-zero (synchronous) Network round-trip
Session state access Direct Serialized payload only
Melhor para File guards, auto-formatting, local scripts Slack alerts, audit logging, external APIs
Complexidade de configuração Low — apenas um diretório + arquivo manipulador Medium — requer um endpoint HTTP em execução
Blocking agent execution Yes (PreToolUse hooks can abort) Typically async/non-blocking

Decision rule: Se o seu gancho precisar evitar uma ação ou ler dados da sessão local, use um gancho interno. Se for preciso notificar um sistema externo e não precisa bloquear o agente, use um webhook.

Como funciona a descoberta de gancho OpenClaw

O Gateway usa verificação automática de diretório para descobrir ganchos. Na inicialização, ele verifica os diretórios de ganchos configurados e carrega todos os pacotes de ganchos válidos que encontrar.

Dois pré-requisitos importantes antes da ativação dos ganchos:

  1. Hooks deve ser explicitamente ativado — um diretório de gancho por si só não é suficiente
  2. Pelo menos uma entrada de gancho deve ser configurada nas configurações do seu gateway

Este é um ponto de confusão comum. Você pode ter um gancho perfeitamente escrito no diretório correto, mas se o Gateway não tiver sido instruído a ativar os ganchos, ele os ignorará silenciosamente.

Cada pacote de ganchos requer exatamente dois arquivos:

  • HOOK.md — arquivo de metadados que declara o nome do gancho, versão, descrição, assinaturas de eventos de ciclo de vida e quaisquer permissões necessárias
  • handler.ts (ou handler.js) — o arquivo de implementação que contém a lógica real que é executada quando o evento é acionado

O arquivo HOOK.md é o que o Gateway lê primeiro durante a descoberta. Se estiver malformado ou faltando campos obrigatórios, o gancho não será carregado - nenhum erro, apenas silêncio. Esta é a causa mais comum de relatórios “meu gancho não está funcionando”.

Os quatro eventos do ciclo de vida que todo desenvolvedor deve conhecer

Evento Quando dispara Uso comum
PreToolUse Antes o agente chama qualquer ferramenta Block dangerous operations, validate inputs
PostToolUse Depois uma chamada de ferramenta é concluída Código de formato Run tests,, resultados de log
Stop Quando a sessão do agente termina Send notifications, flush logs, cleanup
SessionStart Quando uma nova sessão do agente começa Load context, set guardrails, warm up state

PreToolUse é o mais poderoso - é o único evento que pode abortar uma chamada de ferramenta antes de ser executada. Se o seu gancho retornar um sinal de rejeição durante PreToolUse, o agente nunca chamará a ferramenta.

PostToolUse é o carro-chefe da automação. Arquivo escrito? Execute seu linter. Teste modificado? Execute o conjunto. Código confirmado? Acione uma compilação.

Step-by-Step: Escrevendo seu primeiro gancho personalizado do zero

A maior parte da documentação mostra comandos. Isso mostra o caminho completo do nada até um gancho funcional.

Goal: Execute automaticamente o ESLint após cada gravação de arquivo.

Step 1 — Crie o diretório de gancho

mkdir -p .openclaw/hooks/auto-lint

Step 2 — Escreva os metadados HOOK.md

# auto-lint

**Version:** 1.0.0
**Event:** PostToolUse
**Description:** Runs ESLint on any file written by the agent
**Tools:** write_file, edit_file

O campo Tools abrange seu gancho para chamadas de ferramentas específicas. Sem ele, o gancho dispara todo Evento PostToolUse - geralmente não é o que você deseja.

Step 3 — Implementar handler.ts

import { PostToolUseEvent } from "@openclaw/sdk";
import { execSync } from "child_process";

export default function handler(event: PostToolUseEvent) {
  const filePath = event.toolResult?.path;
  if (!filePath) return;

  try {
    execSync(`npx eslint --fix "${filePath}"`, { stdio: "inherit" });
  } catch (err) {
    console.error(`[auto-lint] ESLint failed on ${filePath}`);
  }
}

Step 4 — Habilitar via CLI

openclaw hooks enable auto-lint

Step 5 — Verifique se está carregado

openclaw hooks list

Você deverá ver auto-lint com status enabled. Inicie uma sessão, escreva um arquivo e observe o linter disparar.

JavaScript vs. TypeScript para manipuladores de ganchos – O que escolher em 2026

O SDK é fornecido com tipificações TypeScript completas e, a partir das versões 2026 do SDK, TypeScript é o padrão recomendado para novos ganchos.

Fator TypeScript JavaScript
Type safety Full — as formas dos eventos são digitadas None — surpresas em tempo de execução
Compilation step Required (tsc or esbuild) None
SDK compatibility First-class support Supported but no autocomplete
Melhor para Any hook that will be maintained or shared Scripts únicos e rápidos

Se você estiver escrevendo um gancho que irá comprometer com o controle de versão ou compartilhar com uma equipe, use TypeScript. Para uma proteção local descartável, JavaScript simples é adequado - basta nomeá-lo handler.js e pular a etapa de compilação.

OpenClaw Hooks CLI Reference

Comando Flags O que isso faz
lista de ganchos openclaw --json Lists all discovered hooks and their status
ganchos openclaw inspecionam Mostra metadados completos de HOOK.md + configuração atual
ganchos openclaw ativam Activates a hook para o projeto atual
ganchos openclaw desabilitam Deactivates without removing
instalação de ganchos openclaw --yes, --dry-run Installs a hook pack from registry
atualização de ganchos openclaw --all, --dry-run Updates installed hook packs

Managing Hook Packs — Instalação, atualização e fluxo de trabalho --dry-run

Os pacotes de ganchos agrupam vários ganchos relacionados como uma única unidade instalável. O fluxo de trabalho de instalação verifica um hash de integridade antes de gravar qualquer coisa no disco.

# Preview what would be installed without committing
openclaw hooks install productivity-pack --dry-run

# Install non-interactively (for CI environments)
openclaw hooks install productivity-pack --yes

# Update all installed packs
openclaw hooks update --all

O sinalizador --dry-run é subutilizado. Execute-o antes de qualquer install ou update para ver exatamente quais arquivos seriam alterados. Em pipelines de CI, emparelhe --yes com --dry-run em uma etapa de validação separada antes da instalação real.

Bundled Hooks Reference: O que vem com OpenClaw

Gancho Estado padrão O que isso faz Melhor usado quando
memória de sessão Enabled Persists key context across sessions Long-running projects with recurring tasks
additional bundled hooks vary by Gateway version Execute openclaw hooks list --builtin para ver o seu

Execute openclaw hooks inspect session-memory para ver todas as opções de configuração. A maioria dos ganchos incluídos vem com padrões razoáveis, mas expõe campos de configuração para personalização.

Casos de uso de ganchos do mundo real (com exemplos práticos)

1. File Protection Guardrail (PreToolUse)

Evite que o agente toque no seu arquivo .env:

import { PreToolUseEvent } from "@openclaw/sdk";

export default function handler(event: PreToolUseEvent) {
  const target = event.toolInput?.path ?? "";
  if (target.includes(".env")) {
    return { abort: true, reason: "Modification of .env files is blocked by policy." };
  }
}

Solte isso em .openclaw/hooks/protect-env/ com o HOOK.md correspondente inscrito em PreToolUse com escopo para write_file e edit_file. O agente recebe o motivo da rejeição em seu contexto e não tentará novamente.

2. Slack Notification on Session Stop

import { StopEvent } from "@openclaw/sdk";

export default async function handler(event: StopEvent) {
  await fetch(process.env.SLACK_WEBHOOK_URL!, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      text: `OpenClaw session ended. Files modified: ${event.session.filesModified ?? 0}`
    })
  });
}

Inscreva este gancho no evento Stop. Cada final de sessão dispara uma mensagem Slack com um resumo. Não é necessário servidor externo — o processo Gateway faz a solicitação de saída diretamente.

3. Auto-Format + Test on PostToolUse

import { PostToolUseEvent } from "@openclaw/sdk";
import { execSync } from "child_process";

export default function handler(event: PostToolUseEvent) {
  const file = event.toolResult?.path;
  if (!file?.endsWith(".ts")) return;

  execSync(`prettier --write "${file}"`);
  execSync("npm test -- --passWithNoTests", { stdio: "inherit" });
}

Isso é acionado após cada gravação do arquivo TypeScript, formata-o e executa seu conjunto de testes. Lento em projetos grandes – faça um escopo rigoroso usando o campo Tools em HOOK.md.

Hooks para equipes — Aplicação de proteções em um projeto compartilhado

Confirme seu diretório .openclaw/hooks/ para controle de versão. Cada desenvolvedor que clona o repositório automaticamente tem a mesma configuração de gancho.

  • Bloqueie ganchos críticos para enabled na configuração do projeto — evita que colegas de equipe desativem acidentalmente os protetores de arquivos
  • Use descrições HOOK.md para documentar a intenção - trate-os como comentários de código, os colegas de equipe irão lê-los
  • Scope hooks to tool-level granularity — ganchos amplos retardam todas as interações dos agentes, criando atrito que faz com que os colegas de equipe os desativem
  • Em monorepos, os ganchos em um diretório pai se aplicam a todos os projetos aninhados, a menos que sejam substituídos no nível do subdiretório

CI/CD Integration — Executando OpenClaw Hooks de forma não interativa

Em ações GitHub ou em qualquer ambiente headless, o prompt de confirmação interativo irá travar seu pipeline. Use --yes para pular:

- name: Install hooks non-interactively
  run: openclaw hooks install qa-pack --yes

- name: Run OpenClaw session
  env:
    OPENCLAW_HOOKS_ENABLED: "true"
    SLACK_WEBHOOK_URL: secrets.SLACK_WEBHOOK_URL
  run: openclaw run --task "audit dependencies" --yes

Defina OPENCLAW_HOOKS_ENABLED=true como uma variável de ambiente para ativar ganchos sem confirmação interativa. Isso substitui o requisito de "pelo menos uma entrada configurada" no modo CI.

Hook Security: o que funciona, o que pode acessar e como se manter seguro

Esta é a parte que a maioria da documentação ignora completamente — e é a seção mais importante se você estiver instalando pacotes de ganchos da comunidade.

Quais ganchos podem acessar: Os scripts de gancho herdam o permissões completas do processo Gateway. Se o Gateway for executado como sua conta de usuário, seus ganchos poderão ler qualquer arquivo que a conta possa ler, fazer solicitações de rede, executar subprocessos e acessar variáveis ​​de ambiente, incluindo segredos.

O risco de pacotes de ganchos não revisados: Um pacote de ganchos malicioso pode exfiltrar seu .env, suas chaves SSH ou seus tokens de API - ao mesmo tempo que parece fazer algo benigno como "formatar código".

Hook Pack Audit Checklist

Execute isto antes de instalar qualquer pacote de terceiros:

  • Leia o HOOK.md completo — as permissões declaradas correspondem ao propósito declarado?
  • Leia cada linha de handler.ts/js - procure o acesso fetch(), execSync, process.env
  • Verifique a proveniência do npm se o pacote for distribuído pelo registro (npm info <pack> --json | grep provenance)
  • Verifique a identidade do editor – é um mantenedor conhecido ou uma conta nova?
  • Execute --dry-run primeiro e revise o manifesto do arquivo
  • Nunca instale pacotes de ganchos com --yes sem primeiro concluir as etapas acima

O comando openclaw hooks inspect mostra o caminho de origem completo de um gancho instalado — use-o para revisar novamente o código do manipulador após as atualizações.

Troubleshooting OpenClaw Hooks – Quando eles não disparam

Hook not discovered at all

  • Verifique se o diretório está dentro de um caminho de ganchos verificados: openclaw hooks list --verbose
  • Confirme que HOOK.md existe e é válido - campos obrigatórios ausentes ignoram silenciosamente o gancho
  • Verifique se os ganchos estão habilitados globalmente e pelo menos uma entrada está configurada

Hook discovered but not firing

  • Execute openclaw hooks inspect <name> — verifique se o campo Event em HOOK.md corresponde ao evento de ciclo de vida que você espera
  • Verifique o escopo Tools — se você definiu o escopo para write_file, mas o agente está chamando create_file, o gancho não será acionado
  • Confirme se o status do gancho mostra enabled, não loaded (carregado significa descoberto, mas não ativo)

Hook fires but handler errors are silent

  • Adicione blocos try/catch explícitos com registro console.error em seu manipulador
  • Os logs do gateway são gravados em ~/.openclaw/logs/ — verifique o log de sessão mais recente para linhas prefixadas [hook]
  • Use openclaw hooks inspect <name> --logs para revelar a última saída de execução

Hook slowing down every agent action

  • Crie um perfil com openclaw hooks list --timing para ver o tempo de execução por gancho
  • Mova chamadas execSync síncronas para assíncronas onde o resultado não precisa bloquear o agente
  • O escopo se conecta a ferramentas específicas em vez de assinar todos os eventos PostToolUse

Leve o fluxo de trabalho do seu agente de IA ainda mais com EasyClaw

Os ganchos OpenClaw fornecem controle no nível do agente. EasyClaw oferece esse controle, além de um ambiente nativo de desktop completo criado para desenvolvedores e equipes de conteúdo que precisam de confiabilidade, privacidade e velocidade sem dependência da nuvem.

  • Execute ganchos, agentes e automação inteiramente em sua própria máquina – nenhum dado sai do seu ambiente
  • Integração nativa com seu conjunto de ferramentas de desenvolvimento existente – linters, executores de testes, formatadores, pipelines de CI
  • Gerenciamento visual de ganchos — habilite, desabilite e inspecione ganchos sem memorizar sinalizadores CLI
  • Pronto para Team: compartilhe configurações de gancho, bloqueie proteções e registre sessões de auditoria em um painel
Experimente EasyClaw gratuitamente →

Perguntas frequentes

P: Um gancho pode impedir completamente o agente de executar uma chamada de ferramenta?

R: Sim — apenas ganchos PreToolUse podem abortar uma chamada de ferramenta. Retorne { abort: true, reason: "..." } do seu manipulador e o Gateway impedirá a execução da ferramenta. O agente recebe a sequência de motivos em seu contexto. Os ganchos PostToolUse, Stop e SessionStart não podem abortar ações retroativamente.

P: O que acontece se meu manipulador de gancho gerar um erro não tratado?

R: Por padrão, um erro não tratado em um manipulador de gancho é registrado no log da sessão do Gateway, mas não trava a sessão do agente. O agente continua como se o gancho não tivesse disparado. Isso ocorre por design - os ganchos nunca devem bloquear a funcionalidade principal do agente. Sempre envolva sua lógica de manipulador em try/catch e trate os erros explicitamente para ter visibilidade das falhas.

P: Posso usar async/await em manipuladores de gancho?

R: Sim, os manipuladores PreToolUse e PostToolUse suportam funções assíncronas. Para PreToolUse, o Gateway aguarda o manipulador antes de decidir se deve prosseguir - portanto, a lógica de interrupção assíncrona funciona corretamente. Esteja ciente de que operações assíncronas de longa duração em PreToolUse atrasarão cada chamada de ferramenta, portanto, mantenha-as rápidas.

P: Os ganchos se aplicam a todos os projetos ou apenas àquele em que eles estão?

R: Hooks colocados no diretório .openclaw/hooks/ de um projeto têm escopo de projeto e são ativados apenas para sessões nesse projeto. Ganchos globais podem ser colocados em ~/.openclaw/hooks/ e aplicados em todos os projetos. Em monorepos, os ganchos em um diretório pai se aplicam a projetos aninhados, a menos que sejam substituídos no nível do subdiretório.

P: Existe um custo de desempenho na execução de muitos ganchos?

R: Cada gancho adiciona latência ao evento que assina. Um gancho rápido e bem definido (menos de 50 ms) é imperceptível. Os problemas surgem quando os ganchos executam operações síncronas pesadas em cada evento PostToolUse sem escopo no nível da ferramenta. Use openclaw hooks list --timing para criar perfil, escopo de ganchos para ferramentas específicas em HOOK.md e mova o trabalho sem bloqueio para assíncrono sempre que possível.

P: Os hooks podem acessar segredos de variáveis ​​de ambiente com segurança?

R: Hooks herda todo o ambiente do processo Gateway, então process.env.MY_SECRET funciona dentro de qualquer manipulador. Para ambientes de CI, injete segredos por meio do gerenciador de segredos do pipeline (por exemplo, segredos de ações GitHub) em vez de codificá-los. Nunca envie segredos para HOOK.md ou arquivos manipuladores - trate os arquivos fonte do gancho como código que será revisado e controlado por versão.

Considerações finais – Escolhendo a estratégia de gancho certa para o seu fluxo de trabalho

Cenário Abordagem recomendada
Solo dev — protege arquivos confidenciais Gancho interno, PreToolUse, com escopo para escrever ferramentas
Solo dev — testes de execução automática Gancho interno, PostToolUse, com escopo para tipos de arquivo adjacentes ao teste
Team – impor proteções compartilhadas Confirmar ganchos para controle de versão, bloquear ganchos críticos habilitados na configuração do projeto
Team — trilha de auditoria Stop postagem de gancho de evento em um endpoint de registro compartilhado
CI pipeline — sessões automatizadas --yes flag + OPENCLAW_HOOKS_ENABLED env var, --dry-run na etapa de validação
External notifications Webhook ou gancho de evento Stop com fetch() para Slack/PagerDuty

Comece com um gancho que resolva um problema real – um protetor de arquivo ou um linter pós-gravação. Faça com que funcione de ponta a ponta antes de aplicar mais camadas. O poder dos ganchos se compõe: uma sessão com três ganchos com bom escopo funcionando perfeitamente é significativamente mais confiável do que uma com dez ganchos com escopo ruim em que você não confia.

O primeiro gancho de maior aproveitamento para a maioria dos desenvolvedores: um protetor PreToolUse em seu .env e arquivos secretos. Leva dez minutos para escrever, nenhuma manutenção para ser executada e elimina permanentemente uma classe inteira de erros do agente.