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,/stopou eventos de ciclo de vida. - Webhooks: webhooks HTTP externos que permitem que outros sistemas disparem trabalhos no OpenClaw. Veja Webhook Hooks ou use
openclaw webhookspara comandos auxiliares do Gmail.
- 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
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.mdporSOUL_EVIL.mddurante 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.mdquando o gateway inicia (requer hooks internos habilitados)
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):- Hooks do workspace:
<workspace>/hooks/(por agente, maior precedência) - Hooks gerenciados:
~/.openclaw/hooks/(instalados pelo usuário, compartilhados entre workspaces) - Hooks incluídos:
<openclaw>/dist/hooks/bundled/(enviados com o OpenClaw)
Pacotes de hooks (npm/arquivos)
Pacotes de hooks são pacotes npm padrão que exportam um ou mais hooks viaopenclaw.hooks em
package.json. Instale-os com:
package.json:
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 arquivoHOOK.md contém metadados em frontmatter YAML mais documentação em Markdown:
Campos de metadados
O objetometadata.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çãorequires: Requisitos opcionaisbins: Binários necessários no PATH (por exemplo,["git", "node"])anyBins: Pelo menos um desses binários deve estar presenteenv: Variáveis de ambiente necessáriasconfig: 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 arquivohandler.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é emitidocommand:reset: Quando o comando/reseté emitidocommand:stop: Quando o comando/stopé emitido
Eventos do agente
agent:bootstrap: Antes que os arquivos de bootstrap do workspace sejam injetados (os hooks podem mutarcontext.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 ouundefinedpara mantê-lo como está. Veja Agent Loop.
Eventos futuros
Tipos de eventos planejados:session:start: Quando uma nova sessão começasession:end: Quando uma sessão terminaagent:error: Quando um agente encontra um erromessage:sent: Quando uma mensagem é enviadamessage: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: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:
- Usa a entrada de sessão pré-reset para localizar o transcript correto
- Extrai as últimas 15 linhas da conversa
- Usa LLM para gerar um slug de nome de arquivo descritivo
- Salva os metadados da sessão em um arquivo de memória datado
2026-01-16-vendor-pitch.md2026-01-16-api-design.md2026-01-16-1430.md(timestamp de fallback se a geração do slug falhar)
bootstrap-extra-files
Troca o conteúdo injetado deSOUL.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:
- 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.mdeTOOLS.mdapenas).
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:
- Captura detalhes do evento (ação do comando, timestamp, chave da sessão, ID do remetente, origem)
- Anexa ao arquivo de log no formato JSONL
- Executa silenciosamente em segundo plano
boot-md
ExecutaBOOT.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:
- Lê
BOOT.mddo seu workspace - Executa as instruções via o runner do agente
- Envia quaisquer mensagens de saída solicitadas via a ferramenta de mensagens
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: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: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 tipossrc/hooks/workspace.ts: Varredura de diretórios e carregamentosrc/hooks/frontmatter.ts: Análise de metadados do HOOK.mdsrc/hooks/config.ts: Verificação de elegibilidadesrc/hooks/hooks-status.ts: Relatório de statussrc/hooks/loader.ts: Carregador dinâmico de módulossrc/cli/hooks-cli.ts: Comandos da CLIsrc/gateway/server-startup.ts: Carrega hooks na inicialização do gatewaysrc/auto-reply/reply/commands-core.ts: Dispara eventos de comando
Fluxo de descoberta
Fluxo de eventos
Solução de problemas
Hook não descoberto
-
Verifique a estrutura de diretórios:
-
Verifique o formato do HOOK.md:
-
Liste todos os hooks descobertos:
Hook não executando
Verifique os requisitos:- Binários (verifique o PATH)
- Variáveis de ambiente
- Valores de configuração
- Compatibilidade com o SO
Hook não elegível
-
Verifique se o hook está habilitado:
- Reinicie o processo do gateway para que os hooks sejam recarregados.
-
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:-
Crie o diretório do hook:
-
Crie o HOOK.md:
-
Atualize a configuração:
-
Verifique e reinicie o processo do gateway:
- Descoberta automática
- Gerenciamento via CLI
- Verificação de elegibilidade
- Documentação melhor
- Estrutura consistente