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:
- Hooks deve ser explicitamente ativado — um diretório de gancho por si só não é suficiente
- 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áriashandler.ts(ouhandler.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
enabledna configuração do projeto — evita que colegas de equipe desativem acidentalmente os protetores de arquivos - Use descrições
HOOK.mdpara 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.mdcompleto — as permissões declaradas correspondem ao propósito declarado? - ☐Leia cada linha de
handler.ts/js- procure o acessofetch(),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-runprimeiro e revise o manifesto do arquivo - ☐Nunca instale pacotes de ganchos com
--yessem 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.mdexiste 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 campoEventemHOOK.mdcorresponde ao evento de ciclo de vida que você espera - Verifique o escopo
Tools— se você definiu o escopo parawrite_file, mas o agente está chamandocreate_file, o gancho não será acionado - Confirme se o status do gancho mostra
enabled, nãoloaded(carregado significa descoberto, mas não ativo)
Hook fires but handler errors are silent
- Adicione blocos
try/catchexplícitos com registroconsole.errorem 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> --logspara revelar a última saída de execução
Hook slowing down every agent action
- Crie um perfil com
openclaw hooks list --timingpara ver o tempo de execução por gancho - Mova chamadas
execSyncsí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
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.