Inteligência artificial, sem ruído.
Tutoriais4 min

Hooks do Codex: como colocar sua própria lógica no loop agêntico

Guia prático mostra como usar hooks do Codex para adicionar portas de qualidade e validar resultados em diferentes etapas do loop do agente.

Hooks do Codex: como colocar sua própria lógica no loop agêntico

Quando o prompt não é suficiente

A maioria das pessoas personaliza o Codex — o agente de codificação da OpenAI — por meio de prompts. Você descreve a tarefa, dá instruções e diz que tipo de resultado espera. Funciona bem na maioria dos casos, mas há situações em que só o prompt não resolve: quando você quer rodar a sua própria lógica em etapas específicas da execução.

Para isso existem os hooks do Codex. Neste guia, você vai entender onde eles se encaixam no loop agêntico e ver um caso prático completo de como criar uma porta de qualidade para uma pesquisa automatizada.

O que são hooks e o loop agêntico

Quando o Codex trabalha em uma tarefa, ele percorre um ciclo: analisa o problema, chama ferramentas e conclui. Em diferentes pontos desse ciclo, o Codex emite eventos com nomes específicos:

  • SessionStart — emitido quando a sessão começa;
  • PreToolUse — quando o Codex está prestes a chamar uma ferramenta;
  • PostToolUse — depois que a ferramenta termina;
  • Stop — quando o Codex está pronto para finalizar a resposta;
  • SessionEnd — quando a sessão termina.

Um hook é o mecanismo que permite anexar sua própria lógica a esses eventos. Por exemplo, usar SessionStart para carregar contexto extra, PreToolUse para inspecionar um comando antes de executá-lo, ou Stop para validar o resultado final.

Ao configurar um hook, você precisa responder a três perguntas básicas: em que ponto do ciclo ele roda (evento), sob quais condições (matcher) e que ação ele executa (handler).

Caso prático: porta de qualidade em uma pesquisa profunda

Vamos construir um pequeno fluxo de pesquisa. O Codex recebe um tema, faz buscas na web e devolve três tendências importantes dos últimos 90 dias em um formato estruturado. Para demonstrar o conceito de hook, adicionamos uma verificação de qualidade logo antes de o Codex terminar.

Primeiro, definimos o que o hook deve checar: cada tendência precisa ter ao menos duas fontes; o resumo precisa de pelo menos dez fontes únicas; e essas fontes devem vir de pelo menos cinco domínios diferentes.

Como a verificação só faz sentido depois que o Codex preparou a resposta, usamos um hook de Stop. Criamos o script de validação em .codex/hooks/validate_research.py:

import json
import sys
from urllib.parse import urlparse

MIN_PER_TREND = 2
MIN_SOURCES = 10
MIN_DOMAINS = 5

event = json.load(sys.stdin)
brief = json.loads(event["last_assistant_message"])

errors = []
all_urls = set()

for number, trend in enumerate(brief["trends"], 1):
    urls = set(trend["sources"])
    all_urls.update(urls)
    if len(urls) < MIN_PER_TREND:
        errors.append(f"Trend {number} has fewer than {MIN_PER_TREND} sources.")

domains = {urlparse(u).netloc for u in all_urls}
if len(all_urls) < MIN_SOURCES:
    errors.append(f"Add at least {MIN_SOURCES} unique sources.")
if len(domains) < MIN_DOMAINS:
    errors.append(f"Use sources from at least {MIN_DOMAINS} unique domains.")

if errors:
    print(json.dumps({"decision": "block", "reason": "\n".join(errors)}))
else:
    print(json.dumps({"decision": "allow"}))

Quando o evento Stop é emitido, o Codex passa o last_assistant_message para o script, que analisa a resposta e aplica as checagens. Se algo falhar, o script retorna uma decisão de bloqueio. Para o evento Stop, “bloquear” não encerra a execução — apenas impede o Codex de finalizar, permitindo que ele use o feedback para melhorar a resposta na mesma rodada.

Depois, definimos o hook no arquivo .codex/hooks.json, dizendo ao Codex quando e como executá-lo:

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "python3 .codex/hooks/validate_research.py",
            "commandWindows": "python .codex\\hooks\\validate_research.py"
          }
        ]
      }
    ]
  }
}

No teste, o Codex produziu três tendências com sete fontes — cada tendência tinha fontes suficientes, mas o resumo não atingia as dez fontes exigidas. O hook de Stop entrou em ação: o Codex recebeu o feedback, adicionou mais fontes e, na rodada seguinte, entregou um resumo com 12 fontes de 10 domínios diferentes. Só então o hook permitiu a conclusão.

Quando usar cada tipo de hook

O mesmo raciocínio se aplica aos demais eventos do ciclo. Use SessionStart para carregar contexto no início, PreToolUse para inspecionar uma operação antes que aconteça, e PostToolUse para processar o resultado de uma chamada de ferramenta. A chave é sempre responder às três perguntas — ponto do ciclo, condição e ação — para adicionar lógica determinística em volta da execução do Codex.


Descubra mais sobre noticiAI

Assine para receber nossas notícias mais recentes por e-mail.

R
Sobre o autorRedação Noticiai

Equipe editorial dedicada a explicar inteligência artificial com clareza, independência e contexto.