Pular para o conteúdo principal
O Sistema de Hooks do ChatCLI permite que você execute ações automaticas em resposta a eventos do ciclo de vida da aplicação. Com hooks, você pode auto-formatar código após edicoes, enviar notificações, bloquear comandos perigosos, registrar logs de auditoria e muito mais.
Hooks são aditivos: configurações globais e de workspace são mescladas. Hooks de workspace complementam os globais, nunca os substituem.

Configuração

Os hooks são definidos em arquivos JSON em dois níveis:
NívelArquivoEscopo
Global~/.chatcli/hooks.jsonTodos os projetos e sessoes
Workspace.chatcli/hooks.jsonApenas o projeto atual
Hooks de workspace são aditivos — eles se somam aos hooks globais. Se o mesmo evento tem hooks em ambos os níveis, todos são executados (globais primeiro, depois workspace).

Estrutura do Arquivo

{
  "hooks": [
    {
      "event": "PostToolUse",
      "type": "command",
      "command": "gofmt -w {{.FilePath}}",
      "toolPattern": "write|patch",
      "description": "Auto-format Go files after edits"
    },
    {
      "event": "SessionEnd",
      "type": "http",
      "url": "https://hooks.example.com/chatcli",
      "description": "Notify team of session end"
    }
  ]
}

Eventos Disponiveis

O ChatCLI emite 9 eventos de lifecycle aos quais hooks podem se vincular:
EventoQuando disparaBlocking
SessionStartAo iniciar uma nova sessao do ChatCLINão
SessionEndAo encerrar a sessao (exit/quit)Não
PromptSubmitQuando o usuário submete um promptNão
PreToolUseAntes de executar uma ferramentaSim
PostToolUseApos executar uma ferramenta com sucessoNão
ToolErrorQuando uma ferramenta falhaNão
AgentStartAo entrar em agent/coder modeNão
AgentEndAo sair de agent/coder modeNão
CompactDoneApós uma compactacao de históricoNão
O evento PreToolUse e blocking: se o hook retornar exit code 2, a execução da ferramenta e bloqueada. Isso permite criar guardrails que impedem operações perigosas.

Tipos de Hook

Executa um comando shell no sistema operacional. O comando tem acesso a variaveis de ambiente com contexto do evento.
{
  "event": "PostToolUse",
  "type": "command",
  "command": "gofmt -w {{.FilePath}}",
  "toolPattern": "write|patch",
  "description": "Auto-format Go files after write/patch"
}
Exit codes:
  • 0 — Sucesso (execução continua normalmente)
  • 1 — Erro (logado, mas não bloqueia)
  • 2Bloqueia a operação (apenas para PreToolUse)
O comando e executado via sh -c no Linux/macOS e cmd /c no Windows.

ToolPattern — Filtro por Ferramenta

O campo toolPattern permite filtrar quais ferramentas acionam o hook. Ele aceita padroes glob:
PatternFerramentas matched
writeApenas write
write|patchwrite ou patch
exec*exec, exec_background, etc.
mcp_*Todas as ferramentas MCP
*Todas as ferramentas (default se omitido)
{
  "event": "PreToolUse",
  "type": "command",
  "command": "echo 'BLOCKED: exec not allowed' && exit 2",
  "toolPattern": "exec*",
  "description": "Block all exec commands"
}

Variaveis de Ambiente

Hooks do tipo command recebem variaveis de ambiente com contexto do evento:
VariávelDescriçãoExemplo
CHATCLI_HOOK_EVENTNome do evento que disparou o hookPostToolUse
CHATCLI_HOOK_TOOLNome da ferramenta (se aplicavel)write
CHATCLI_HOOK_SESSIONID da sessao atualsession_abc123
CHATCLI_HOOK_FILECaminho do arquivo afetado (se aplicavel)/project/main.go
CHATCLI_HOOK_CWDDiretorio de trabalho atual/Users/dev/project
CHATCLI_HOOK_MODEModo atual (chat, agent, coder)agent

Exemplos Completos

Auto-formatar arquivos Go após qualquer edicao:
{
  "hooks": [
    {
      "event": "PostToolUse",
      "type": "command",
      "command": "if [[ \"$CHATCLI_HOOK_FILE\" == *.go ]]; then gofmt -w \"$CHATCLI_HOOK_FILE\"; fi",
      "toolPattern": "write|patch",
      "description": "Auto-format Go files"
    }
  ]
}

Casos de Uso

Auto-Format

Execute formatadores (gofmt, prettier, black) automaticamente após edicoes de arquivo.

Notificações

Envie alertas para Slack, Discord ou email ao final de sessoes ou em erros.

Guardrails

Bloqueie comandos perigosos (rm -rf, DROP TABLE, force push) com PreToolUse.

Auditoria

Registre todas as ações do agent em arquivos de log para compliance.

Testes Automaticos

Execute testes automaticamente após cada edicao de codigo.

Linting

Execute linters (golangci-lint, eslint) após cada write/patch.

Próximos Passos

Coder Security

Politicas de segurança e aprovação para operações do coder.

Seguranca

Entenda o modelo de segurança do ChatCLI.

UI Compacta

Modo de exibicao minimalista para o coder mode.

Modo Coder

O ciclo completo de engenharia com hooks integrados.