MÓDULO 2.6 Último Módulo

Seu Próximo Projeto

Projeto guiado: construa um PreToolUse hook de linting aplicando exatamente a metodologia que você acabou de aprender. Do SPEC ao safety pass, passo a passo.

6
Tópicos
60
Minutos
Inter
Nível
Proj.
Tipo
1

Como escrever o SPEC do seu projeto

Template e exemplo real do linting hook

Antes de escrever o primeiro prompt de código do seu linting hook, você precisa de um SPEC. Não uma descrição informal — um documento com as cinco seções que forçam decisões de design. Abaixo está um SPEC plausível para o hook que vamos construir: um PreToolUse hook que intercede em operações de escrita de arquivo e bloqueia saves quando o linter reporta erros.

lint-hook/SPEC.md SPEC do Linting Hook
# Lint Hook — SPEC

## 1. Propósito
PreToolUse hook para Claude Code que intercepta operações Write
e Edit, roda o linter configurado no projeto e bloqueia a
operação se o linter reportar erros com exit code não-zero.

NÃO faz: auto-fix, formatação, type-checking, ou qualquer
modificação nos arquivos.

## 2. Componentes
lint-hook.sh   — o hook principal (registrado em hooks.json)
lint-config.json — qual linter rodar e em qual diretório
state/         — diretório de estado de sessão (opcional)

## 3. Interfaces
Entrada: stdin JSON do Claude Code com tool_name e tool_input
Linter:  chamado via shell com o caminho do arquivo extraído
Saída:   exit 0 (permitir) ou exit 1 + JSON com decision/reason

## 4. Invariantes
- Qualquer falha interna → exit 0 (fail-open obrigatório)
- Nunca modificar o arquivo sendo avaliado
- Nunca bloquear se o linter não estiver instalado
- Mensagem de bloqueio deve incluir o output do linter

## 5. Sequência de Build
Prompt 1: Scaffold + fail-open (hook existe, registra, exit 0)
Prompt 2: Linter integration (extrai path, chama linter, parseia)
Prompt 3: State (log de runs, métricas simples por sessão)
Prompt 4: Safety pass (ERR trap, timeouts, edge cases)
Dica Prática

As 5 perguntas que todo SPEC deve responder

Q1 O que este sistema faz em uma frase? Se você não consegue responder em uma frase, o escopo está indefinido.
Q2 O que ele deliberadamente não faz? Limites de responsabilidade são tão importantes quanto a responsabilidade em si.
Q3 Quais são as interfaces com o mundo externo? O que entra, o que sai, quais sistemas externos são chamados.
Q4 O que deve ser sempre verdade? As invariantes que nenhum estado do sistema pode violar.
Q5 Em qual ordem os componentes vão ser construídos? A sequência que garante que cada camada pode ser verificada antes da próxima.
2

Como quebrar em prompts incrementais

Granularidade certa para o linting hook

O linting hook pode ser construído em 4 prompts. Cada prompt adiciona exatamente uma responsabilidade e produz algo verificável antes do próximo começar. A tentação é juntar tudo em um prompt grande — resistir a isso é a disciplina central da metodologia.

Decomposição do Linting Hook em 4 Prompts
1 Scaffold

Hook shell criado, registrado em hooks.json, retorna exit 0 incondicionalmente, loga no stderr que foi chamado.

Verificação: Claude Code chama o hook e não quebra
2 Linter Integration

Extrai o path do arquivo do JSON de entrada, chama o linter configurado, parseia o exit code e retorna exit 1 com reason quando há erros.

Verificação: hook bloqueia arquivo com erros, permite arquivo limpo
3 State

Log de runs em state/runs.json com timestamp, arquivo avaliado e resultado. Escrita atômica.

Verificação: runs.json existe e é JSON válido após cada execução
4 Safety

ERR trap, timeout no linter (não travar se linter pendurar), validação de path, fail-open explícito em todos os branches de erro.

Verificação: hook fail-open em crash simulado, linter timeout
Granularidade Certa
  • Um prompt por camada verificável independentemente
  • Cada prompt tem critério de "pronto" explícito
  • O output de cada prompt cabe em uma revisão de código razoável
  • Você consegue explicar o que cada prompt adiciona em uma frase
Granularidade Errada
  • Prompt tão grande que produz código difícil de revisar de uma vez
  • Prompt tão pequeno que o output não é verificável isoladamente
  • Linter integration + safety no mesmo prompt (caminhos de erro não testados antes)
  • "Cria o hook completo com logging, linting, timeouts e safety" em um prompt
Dica Prática

Regra prática: um prompt por camada verificável

Antes de escrever um prompt, pergunte: "Se o Claude entregar exatamente isso e nada mais, consigo verificar que está correto sem executar o sistema inteiro?" Se a resposta for não, o prompt está grande demais ou as responsabilidades estão misturadas.

3

Scaffold → Estado → Lógica → Segurança

A sequência obrigatória em ação

Cada prompt do linting hook segue a sequência da metodologia. O scaffold existe para carregar. O estado existe para persistir. A lógica existe para decidir. A segurança existe para garantir que tudo isso funciona mesmo quando algo dá errado. Aqui está o Prompt 1 completo que você vai enviar para o Claude.

Timeline dos 4 Prompts — O que cada um adiciona
1
Scaffold — Hook existe e não quebra nada
Cria lint-hook.sh, registra em hooks.json como PreToolUse para Write/Edit, loga no stderr, retorna exit 0 sempre. Sistema operacional do Claude Code não muda.
2
Linter Integration — Hook sabe o que bloquear
Parseia stdin JSON para extrair o path do arquivo, chama linter com timeout básico, retorna exit 1 + JSON {"decision":"block","reason":"..."} quando linter falha.
3
State — Hook lembra o que aconteceu
Adiciona log atômico em state/runs.json com timestamp, arquivo e resultado. Falha de I/O no log não bloqueia a execução principal.
4
Safety — Hook não trava quando algo falha
ERR trap global → exit 0, timeout no linter via timeout 10s, validação de path (não vazio, não relativo perigoso), fail-open explícito em todos os branches.

O que quebra quando a ordem é invertida

Se você adicionar o linter integration antes de verificar o scaffold, um bug de registro no hooks.json vai parecer um bug de parsing de JSON. Se você adicionar o state antes de verificar a linter integration, um bug de escrita atômica vai parecer um bug de bloqueio. A ordem importa porque cada camada adiciona variáveis de debug — e você só quer uma variável nova por vez.

Prompt 1 — Scaffold com fail-open Envie exatamente isso
Leia o SPEC.md neste diretório antes de começar.

Crie um PreToolUse hook chamado lint-hook.sh que intercepta
operações Write e Edit do Claude Code.

Por agora, o hook deve apenas:
1. Existir como shell script executável
2. Ser registrado em .claude/hooks.json para os tool names
   "write_file" e "str_replace_editor"
3. Logar no stderr que foi chamado, com timestamp e o
   tool_name recebido no stdin
4. Retornar exit 0 sempre, sem nenhuma lógica adicional

Fail-open é obrigatório: nenhum caminho de erro deve
retornar exit 1 ou deixar o processo travado.

Ao terminar, mostre como verificar que o hook está sendo
chamado corretamente pelo Claude Code.
4

Como validar cada etapa antes de avançar

Critérios de pronto para cada prompt do linting hook

Critérios de "pronto" precisam ser definidos antes de executar o prompt, não depois. Se você define depois, você vai racionalizá-los para aceitar o que foi entregue. Abaixo estão os critérios para cada um dos 4 prompts do linting hook.

1 Scaffold — Critérios de Pronto
2 Linter Integration — Critérios de Pronto
3 State — Critérios de Pronto
4 Safety — Critérios de Pronto
Critérios Explícitos
  • Critérios definidos antes do prompt ser enviado
  • Critérios testáveis: sim/não, não "parece funcionar"
  • Caminho de erro explicitamente coberto em cada critério
"Parece funcionar"
  • Avançar porque o Claude disse que funcionou
  • Testar só com o arquivo que você sabe que vai funcionar
  • Deixar o safety pass "pra depois que tudo estiver pronto"
5

Aplicando as personas do Claudex no seu contexto

Adaptando as perspectivas para o linting hook e outros projetos

O Claudex usa personas para diversificar a perspectiva durante as revisões — cada persona traz um conjunto diferente de preocupações. Para o linting hook, as personas relevantes não são as mesmas do Claudex. A adaptação é parte do processo.

Personas do Claudex vs. Adaptadas para o Linting Hook
Persona no Claudex Preocupação Adaptação para Linting Hook
Codex AI reviewer Qualidade do código gerado Developer experience — o hook é chato de usar? Mensagens de erro são claras?
Loop orchestrator Continuidade e progresso CI/CD operator — o hook funciona em pipelines automatizados, não só localmente?
Safety guardian Não travar o usuário Security reviewer — o hook pode ser enganado por paths maliciosos?
Token economist Eficiência do contexto Performance — o linter roda em milissegundos ou segundos? Afeta o flow do usuário?
Dica Prática

Como escrever system prompts de persona para seu domínio

Para cada persona, escreva um system prompt que responda: quem é essa persona, o que ela mais teme, o que ela mais valoriza, e quais perguntas ela sempre faz. Exemplo para "Developer Experience" no contexto do linting hook:

# system prompt da persona Developer Experience
Você é um desenvolvedor sênior que usa este hook todos os dias.
Você teme: mensagens de erro crípticas, falsos positivos, latência.
Você valoriza: clareza, velocidade, previsibilidade.
Você sempre pergunta: "Se eu não soubesse nada sobre linting,
conseguiria entender esta mensagem e corrigir o problema?"
6

Checklist de segurança antes de shipar

O safety pass universal — aplica a qualquer hook

Antes de colocar qualquer hook em uso real — seja o linting hook, seja o seu próximo projeto — passe por este checklist sistematicamente. Não como formalidade, mas como verificação real. Cada item representa uma categoria de bug que já foi encontrada em hooks em produção.

Safety Pass — 12 Itens Obrigatórios
Fail-open
Exit Codes
Estado e I/O
Mensagens de Erro
Operacional
🏗️

Você terminou a Trilha 2

Agora você sabe como construir.

Você viu os 7 prompts que construíram o Claudex, extraiu os princípios que tornam esse tipo de construção confiável, e aplicou a metodologia a um projeto novo. Essa sequência — SPEC, scaffold, estado, lógica, utils, safety — é um framework que funciona para qualquer sistema com estado persistente e caminhos de erro.
Explore os build_prompts completos

Os 7 prompts reais que construíram o Claudex estão no repositório. Não são rascunhos — são os prompts que produziram o código que você usou. Leia-os em ordem, compare com o que foi construído, e use como referência para seus próximos projetos.

# no repositório makeclaudex:
ls build_prompts/
# 01_scaffold.md → 07_safety_pass.md

Resumo do Módulo 2.6

O que você aplicou neste projeto guiado: