Pular para o conteúdo

Hooks

Hooks são scripts que o runtime do agent dispara em pontos bem definidos da conversa: antes de uma tool rodar, depois que uma tool tem sucesso, quando uma tool falha, quando a sessão começa, quando o contexto é compactado, quando a conversa termina. O Octopus entrega um conjunto curado de hooks que se anexam automaticamente em qualquer repo com hooks: true em .octopus.yml (o padrão para o bundle quality e comum no starter).

Por que hooks ficam abaixo das skills

Skills dizem ao agent como fazer as coisas — instruções em prosa. Hooks dizem ao runtime o que fazer independentemente do agent — shell scripts determinísticos. A separação importa: uma skill que diz “não rode rm -rf” pode ser convencida do contrário por um prompt esperto; um hook que sai com código diferente de zero em rm -rf não pode. Hooks são a camada onde o Octopus impõe garantias que valem independentemente do agent ser Claude Code em modo bypassPermissions, Copilot, Codex, Gemini ou OpenCode.

O outro lado: hooks adicionam latência a cada tool call à qual se anexam, então o conjunto é mantido pequeno e cada hook faz short-circuit de forma agressiva (verifica uma coisa, sai rápido).

Fases do ciclo de vida

FaseQuando disparaPara em código diferente de zero?
session-startA conversa começaNão — a saída é adicionada ao contexto
pre-tool-useAntes de qualquer tool callSim — bloqueia a chamada
post-tool-useDepois que uma tool tem sucessoNão — advisory
post-tool-use-failureDepois que uma tool falhaNão — advisory
pre-compactAntes da compactação de contextoNão — saída salva como estado
post-compactDepois que a compactação terminaNão — saída adicionada ao novo contexto
stopA conversa terminaNão — advisory
session-endA sessão é encerradaNão — advisory
git pre-pushHook nativo do git em git pushNão — advisory

Hooks instalados

Hooks com rationale que merece uma página própria têm uma (com link na tabela). Os demais são listados para completude.

HookFaseO que fazDetalhe
destructive-guardpre-tool-useBloqueia rm -rf, git push --force, DROP TABLE, DELETE FROM sem WHERE, chmod -R 777, curl | bash, etc. Bypass via marcador # destructive-guard-ok: <reason>.
detect-secretspre-tool-useEscaneia arquivos staged em busca de API keys hardcoded, JWTs, tokens de Stripe/SendGrid/Slack/GitHub antes do commit. Sai com 2 para bloquear.
block-no-verifypre-tool-useRecusa git commit --no-verify e git push --no-verify. Pre-commit hooks existem por um motivo.
format-checkpre-tool-useVerifica se o formatter do projeto não reformataria o arquivo que o agent está prestes a escrever.
git-push-reminderpre-tool-useLembrete único para fazer self-review do diff antes do push.
auto-formatpost-tool-useRoda automaticamente o formatter do projeto em cada Write/Edit com base na extensão do arquivo. Idempotente; nunca falha o hook.
typecheckpost-tool-useRoda tsc --noEmit, dotnet build, mypy, etc. depois de edições para expor regressões de tipo antes do próximo prompt.
console-log-warnpost-tool-useAvisa quando console.log / print() aparece em um arquivo que não é de teste.
console-log-checkstopVarredura final para debug statements esquecidos.
mcp-healthpost-tool-use-failureDetecta indisponibilidade de MCP servers e imprime um diagnóstico de uma linha em vez de deixar o agent tentar de novo às cegas.
propose-knowledge-updatestopEscaneia o transcript da sessão atrás de correções, re-reads, re-greps; escreve uma proposta em .octopus/proposals/<ts>.md para revisão humana.
grounding-checkstopDispara ao fim da tarefa com um diff não commitado; enfileira uma revisão de grounding signal-only (convenções inventadas, fatos de domínio sem suporte) em .octopus/proposals/.
load-contextsession-startCarrega ~/.octopus/state/pre-compact.yml e expõe como contexto inicial.
save-statepre-compactCaptura metadados da sessão antes da compactação para que a próxima sessão comece informada.
reload-contextpost-compactReanexa estado relevante depois que a compactação descarta buffers do meio do turno.
lifecycle-markersession-endRegistra fronteiras de sessão para tooling downstream.
rules-syncgit pre-push (custom)Verifica se a árvore de rules do projeto bate com o manifest antes do push.
pre-push-audit-suggestgit pre-pushAdvisory: inspeciona o diff e imprime quais skills de audit do Octopus (audit-security, audit-money, etc.) são relevantes. Nunca bloqueia o push.

Opting out

Dois níveis de granularidade:

# Disable the whole hooks layer
hooks: false
# Keep hooks but disable the destructive guard specifically
hooks: true
destructiveGuard: false

Outros hooks podem ser removidos individualmente editando o .claude/settings.json gerado após o octopus setup, mas isso diverge do manifest — prefira pedir uma flag de opt-out no manifest se você se pegar fazendo isso repetidamente.

Cobertura por agent

Hooks são uma feature da plataforma Claude Code. Para Copilot, Codex, Gemini e OpenCode, o Octopus inlina rules equivalentes de rules/common/quality.md e rules/common/security.md na configuração gerada — mesma intenção, enforcement mais fraco, já que esses agents não têm uma camada de runtime que possa recusar uma tool call.

Fonte: hooks/