Skip to main content

Hooks

Hooks fornecem um sistema extensível orientado a eventos para automatizar ações em resposta a comandos e eventos do agente. Os hooks são descobertos automaticamente a partir de diretórios e podem ser gerenciados via comandos da CLI, de forma semelhante a como as Skills funcionam no OpenClaw.

Orientação inicial

Hooks são pequenos scripts que são executados quando algo acontece. Existem dois tipos:
  • Hooks (esta página): executam dentro do Gateway quando eventos do agente são disparados, como /new, /reset, /stop ou eventos de ciclo de vida.
  • Webhooks: webhooks HTTP externos que permitem que outros sistemas disparem trabalhos no OpenClaw. Veja Webhook Hooks ou use openclaw webhooks para comandos auxiliares do Gmail.
Hooks também podem ser incluídos dentro de plugins; veja Plugins. Usos comuns:
  • Salvar um snapshot de memória quando você redefine uma sessão
  • Manter uma trilha de auditoria de comandos para solução de problemas ou conformidade
  • Disparar automações de acompanhamento quando uma sessão inicia ou termina
  • Gravar arquivos no workspace do agente ou chamar APIs externas quando eventos são disparados
Se você consegue escrever uma pequena função em TypeScript, você consegue escrever um hook. Os hooks são descobertos automaticamente, e você os habilita ou desabilita via CLI.

Visão geral

O sistema de hooks permite que você:
  • Salve o contexto da sessão na memória quando /new é emitido
  • Registre todos os comandos para auditoria
  • Dispare automações personalizadas em eventos de ciclo de vida do agente
  • Estenda o comportamento do OpenClaw sem modificar o código principal

Primeiros passos

Hooks incluídos

O OpenClaw vem com quatro hooks incluídos que são descobertos automaticamente:
  • 💾 session-memory: Salva o contexto da sessão no workspace do seu agente (padrão ~/.openclaw/workspace/memory/) quando você emite /new
  • 😈 soul-evil: Troca o conteúdo injetado de SOUL.md por SOUL_EVIL.md durante uma janela de purge ou por chance aleatória
  • 📝 command-logger: Registra todos os eventos de comando em ~/.openclaw/logs/commands.log
  • 🚀 boot-md: Executa BOOT.md quando o gateway inicia (requer hooks internos habilitados)
Liste os hooks disponíveis:
Habilite um hook:
Verifique o status do hook:
Obtenha informações detalhadas:

Onboarding

Durante a integração inicial (openclaw onboard), você será solicitado a habilitar hooks recomendados. O assistente descobre automaticamente os hooks elegíveis e os apresenta para seleção.

Descoberta de hooks

Os hooks são descobertos automaticamente a partir de três diretórios (em ordem de precedência):
  1. Hooks do workspace: <workspace>/hooks/ (por agente, maior precedência)
  2. Hooks gerenciados: ~/.openclaw/hooks/ (instalados pelo usuário, compartilhados entre workspaces)
  3. Hooks incluídos: <openclaw>/dist/hooks/bundled/ (enviados com o OpenClaw)
Os diretórios de hooks gerenciados podem ser um hook único ou um pacote de hooks (diretório de pacote). Cada hook é um diretório que contém:

Pacotes de hooks (npm/arquivos)

Pacotes de hooks são pacotes npm padrão que exportam um ou mais hooks via openclaw.hooks em package.json. Instale-os com:
As especificações do Npm são apenas do registry (nome do pacote + versão/tag opcional). Especificações Git/URL/file são rejeitadas. Exemplo de package.json:
Cada entrada aponta para um diretório de hook que contém HOOK.md e handler.ts (ou index.ts). Pacotes de hooks podem incluir dependências; elas serão instaladas em ~/.openclaw/hooks/<id>. Nota de segurança: openclaw hooks install instala dependências com npm install --ignore-scripts (sem scripts de ciclo de vida). Mantenha as árvores de dependências do hook pack “pure JS/TS” e evite pacotes que dependam de builds em postinstall.

Estrutura do hook

Formato do HOOK.md

O arquivo HOOK.md contém metadados em frontmatter YAML mais documentação em Markdown:

Campos de metadados

O objeto metadata.openclaw oferece suporte a:
  • emoji: Emoji de exibição para a CLI (por exemplo, "💾")
  • events: Array de eventos para escutar (por exemplo, ["command:new", "command:reset"])
  • export: Export nomeado a ser usado (padrão "default")
  • homepage: URL da documentação
  • requires: Requisitos opcionais
    • bins: Binários necessários no PATH (por exemplo, ["git", "node"])
    • anyBins: Pelo menos um desses binários deve estar presente
    • env: Variáveis de ambiente necessárias
    • config: Caminhos de configuração necessários (por exemplo, ["workspace.dir"])
    • os: Plataformas necessárias (por exemplo, ["darwin", "linux"])
  • always: Ignorar verificações de elegibilidade (boolean)
  • install: Métodos de instalação (para hooks incluídos: [{"id":"bundled","kind":"bundled"}])

Implementação do handler

O arquivo handler.ts exporta uma função HookHandler:

Contexto do evento

Cada evento inclui:

Tipos de evento

Eventos de comando

Disparados quando comandos do agente são emitidos:
  • command: Todos os eventos de comando (listener geral)
  • command:new: Quando o comando /new é emitido
  • command:reset: Quando o comando /reset é emitido
  • command:stop: Quando o comando /stop é emitido

Eventos do agente

  • agent:bootstrap: Antes que os arquivos de bootstrap do workspace sejam injetados (os hooks podem mutar context.bootstrapFiles)

Eventos do Gateway

Disparados quando o gateway inicia:
  • gateway:startup: Depois que os canais iniciam e os hooks são carregados

Hooks de resultado de ferramenta (API de plugin)

Esses hooks não são listeners de fluxo de eventos; eles permitem que plugins ajustem sincronicamente os resultados de ferramentas antes que o OpenClaw os persista.
  • tool_result_persist: transforma resultados de ferramentas antes que sejam gravados no transcript da sessão. Deve ser síncrono; retorne o payload de resultado de ferramenta atualizado ou undefined para mantê-lo como está. Veja Agent Loop.

Eventos futuros

Tipos de eventos planejados:
  • session:start: Quando uma nova sessão começa
  • session:end: Quando uma sessão termina
  • agent:error: Quando um agente encontra um erro
  • message:sent: Quando uma mensagem é enviada
  • message:received: Quando uma mensagem é recebida

Criando hooks personalizados

1. Escolher local

  • Hooks do workspace (<workspace>/hooks/): Por agente, maior precedência
  • Hooks gerenciados (~/.openclaw/hooks/): Compartilhados entre workspaces

2. Criar estrutura de diretórios

3. Criar HOOK.md

4. Criar handler.ts

5. Habilitar e testar

Configuração

Novo formato de configuração (recomendado)

Configuração por hook

Hooks podem ter configuração personalizada:

Diretórios extras

Carregue hooks a partir de diretórios adicionais:

Formato de configuração legado (ainda suportado)

O formato de configuração antigo ainda funciona para compatibilidade retroativa:
Nota: module deve ser um caminho relativo ao workspace. Caminhos absolutos e navegação fora do workspace são rejeitados. Migração: Use o novo sistema baseado em descoberta para novos hooks. Handlers legados são carregados após os hooks baseados em diretório.

Comandos da CLI

Listar hooks

Informações do hook

Verificar elegibilidade

Habilitar/Desabilitar

Referência de hooks incluídos

session-memory

Salva o contexto da sessão na memória quando você emite /new. Eventos: command:new Requisitos: workspace.dir deve estar configurado Saída: <workspace>/memory/YYYY-MM-DD-slug.md (padrão ~/.openclaw/workspace) O que ele faz:
  1. Usa a entrada de sessão pré-reset para localizar o transcript correto
  2. Extrai as últimas 15 linhas da conversa
  3. Usa LLM para gerar um slug de nome de arquivo descritivo
  4. Salva os metadados da sessão em um arquivo de memória datado
Exemplo de saída:
Exemplos de nomes de arquivo:
  • 2026-01-16-vendor-pitch.md
  • 2026-01-16-api-design.md
  • 2026-01-16-1430.md (timestamp de fallback se a geração do slug falhar)
Habilitar:

bootstrap-extra-files

Troca o conteúdo injetado de SOUL.md por SOUL_EVIL.md durante uma janela de purge ou por chance aleatória. Eventos: agent:bootstrap Requisitos: workspace.dir deve estar configurado Saída: Nenhum arquivo é gravado; as trocas acontecem apenas em memória. Configuração:
Docs: SOUL Evil Hook
  • Os caminhos são resolvidos em relação ao workspace.
  • Os arquivos devem permanecer dentro do workspace (verificados com realpath).
  • Apenas basenames de bootstrap reconhecidos são carregados.
  • A allowlist de subagentes é preservada (AGENTS.md e TOOLS.md apenas).
Habilitar:

command-logger

Registra todos os eventos de comando em um arquivo centralizado de auditoria. Eventos: command Requisitos: Nenhum Saída: ~/.openclaw/logs/commands.log O que ele faz:
  1. Captura detalhes do evento (ação do comando, timestamp, chave da sessão, ID do remetente, origem)
  2. Anexa ao arquivo de log no formato JSONL
  3. Executa silenciosamente em segundo plano
Entradas de log de exemplo:
Ver logs:
Habilitar:

boot-md

Executa BOOT.md quando o gateway inicia (depois que os canais iniciam). Hooks internos devem estar habilitados para que isso seja executado. Eventos: gateway:startup openclaw hooks enable soul-evil O que ele faz:
  1. BOOT.md do seu workspace
  2. Executa as instruções via o runner do agente
  3. Envia quaisquer mensagens de saída solicitadas via a ferramenta de mensagens
Habilitar:

Boas práticas

Mantenha os handlers rápidos

Hooks são executados durante o processamento de comandos. Mantenha-os leves:

Trate erros com cuidado

Sempre envolva operações arriscadas:

Filtre eventos cedo

Retorne cedo se o evento não for relevante:

Use chaves de evento específicas

Especifique eventos exatos nos metadados quando possível:
Em vez de:

Depuração

Habilitar logs de hooks

O gateway registra o carregamento de hooks na inicialização:

Verificar descoberta

Liste todos os hooks descobertos:

Verificar registro

No seu handler, registre quando ele for chamado:

Verificar elegibilidade

Verifique por que um hook não é elegível:
Procure por requisitos ausentes na saída.

Testes

Logs do Gateway

Monitore os logs do gateway para ver a execução dos hooks:

Testar hooks diretamente

Teste seus handlers de forma isolada:

Arquitetura

Componentes principais

  • src/hooks/types.ts: Definições de tipos
  • src/hooks/workspace.ts: Varredura de diretórios e carregamento
  • src/hooks/frontmatter.ts: Análise de metadados do HOOK.md
  • src/hooks/config.ts: Verificação de elegibilidade
  • src/hooks/hooks-status.ts: Relatório de status
  • src/hooks/loader.ts: Carregador dinâmico de módulos
  • src/cli/hooks-cli.ts: Comandos da CLI
  • src/gateway/server-startup.ts: Carrega hooks na inicialização do gateway
  • src/auto-reply/reply/commands-core.ts: Dispara eventos de comando

Fluxo de descoberta

Fluxo de eventos

Solução de problemas

Hook não descoberto

  1. Verifique a estrutura de diretórios:
  2. Verifique o formato do HOOK.md:
  3. Liste todos os hooks descobertos:

Hook não executando

Verifique os requisitos:
Procure por ausências:
  • Binários (verifique o PATH)
  • Variáveis de ambiente
  • Valores de configuração
  • Compatibilidade com o SO

Hook não elegível

  1. Verifique se o hook está habilitado:
  2. Reinicie o processo do gateway para que os hooks sejam recarregados.
  3. Verifique os logs do gateway para erros:

Erros no handler

Verifique erros de TypeScript/importação:

Guia de migração

Do config legado para descoberta

Antes:
Depois:
  1. Crie o diretório do hook:
  2. Crie o HOOK.md:
  3. Atualize a configuração:
  4. Verifique e reinicie o processo do gateway:
Benefícios da migração:
  • Descoberta automática
  • Gerenciamento via CLI
  • Verificação de elegibilidade
  • Documentação melhor
  • Estrutura consistente

Veja também