TRILHA 1

🌱 Fundamentos do Claude Code

Os alicerces que você precisa antes de construir qualquer coisa — como o Claude Code funciona, o sistema de hooks, slash commands, estado persistente e o ambiente de desenvolvimento.

6
Módulos
36
Tópicos
~4h30
Duração
Inic.
Nível
Conteúdo Detalhado
1.1 ~40 min

🤖 O que é o Claude Code

Claude Code como ferramenta de engenharia — o CLI que age no seu filesystem, não só um chat. O loop de conversa, ferramentas nativas e primeiros passos.

O que é:

O Claude Code é um CLI que executa o modelo Claude diretamente no seu terminal, com acesso real ao filesystem, processos e ferramentas do sistema.

Por que aprender:

Entender que o Claude Code age — não apenas responde — muda como você o instrui. É a base para usar hooks, comandos e automações.

Conceitos-chave:

CLI, agentic AI, ferramentas de ação, filesystem access, diferença entre chat e agente.

O que é:

O modelo processa input, decide quais ferramentas chamar, recebe o resultado e decide o próximo passo — tudo em turnos síncronos.

Por que aprender:

Entender o loop explica por que hooks são executados em momentos específicos e como o Claude decide quando parar.

Conceitos-chave:

Turn-based execution, tool calls, tool results, context window, agentic loop.

O que é:

As quatro ferramentas fundamentais que o Claude usa para agir: Bash (executar comandos), Read (ler arquivos), Edit (modificar), Write (criar).

Por que aprender:

Cada hook intercepta uma dessas ferramentas. Saber o que cada uma faz é pré-requisito para escrever hooks precisos.

Conceitos-chave:

Tool API, Bash, Read, Edit, Write, ToolUse events, intercepção por nome de ferramenta.

O que é:

settings.json registra hooks e comandos; CLAUDE.md fornece instruções persistentes injetadas no contexto de cada sessão.

Por que aprender:

Toda automação que você criar vive nesses dois arquivos. Sem entendê-los, você não consegue registrar hooks nem instruções de projeto.

Conceitos-chave:

settings.json local vs global, CLAUDE.md de projeto, injeção de contexto, registro de hooks, slash commands.

O que é:

O Claude Code usa o diretório atual como âncora — lê CLAUDE.md, settings.json local e passa o cwd para cada ferramenta executada.

Por que aprender:

Saber como o contexto é montado evita confusão sobre qual settings.json está ativo e por que certas instruções não aparecem.

Conceitos-chave:

Working directory, cascading config (local > global), context window, CLAUDE.md hierarchy.

O que é:

Instalação via npm, autenticação com a API Anthropic e estrutura de um primeiro prompt que usa ferramentas de verdade.

Por que aprender:

Um ambiente funcional é o pré-requisito para todos os módulos seguintes. Erros de autenticação bloqueiam tudo.

Conceitos-chave:

npm install -g @anthropic-ai/claude-code, ANTHROPIC_API_KEY, claude --version, primeiro prompt de leitura de arquivo.

Ver Completo
1.2 ~45 min

🎣 Hooks — o Sistema de Eventos

O que é um hook, os 4 tipos disponíveis, como o Claude Code os executa via subprocess e o protocolo de exit codes para bloquear ou aprovar ações.

O que é:

Um hook é um script externo que o Claude Code executa em pontos específicos do seu loop — antes ou depois de usar uma ferramenta, ao parar, ao enviar notificações.

Por que aprender:

Hooks são o mecanismo central de automação e governança do Claude Code. Sem eles, você não tem controle sobre o que o Claude faz.

Conceitos-chave:

Event hook, intercepção, subprocess externo, ponto de extensão, separação de responsabilidades.

O que é:

PreToolUse: antes de executar ferramenta (pode bloquear). PostToolUse: após execução (pode injetar contexto). Stop: quando o Claude finaliza. Notification: eventos assíncronos.

Por que aprender:

Cada tipo tem capacidades diferentes. Usar o tipo errado resulta em hook que não consegue bloquear ou que roda na hora errada.

Conceitos-chave:

PreToolUse (bloqueio), PostToolUse (observação), Stop (cleanup/log), Notification (alertas externos).

O que é:

O Claude Code abre um subprocess com o comando do hook, passa um JSON via stdin com o contexto do evento e lê stdout para decisões de bloqueio.

Por que aprender:

Entender o protocolo stdin/stdout é obrigatório para debugar hooks que não funcionam como esperado.

Conceitos-chave:

subprocess, stdin JSON payload, stdout response, exit code protocol, timeout do subprocess.

O que é:

Exit code 0 = aprovado (APPROVE), a ferramenta executa. Exit code 1 = bloqueado (BLOCK), a ferramenta não executa e o Claude recebe a mensagem de erro do hook.

Por que aprender:

O protocolo de exit code é a única forma de o hook comunicar uma decisão ao Claude Code. Errar o código quebra toda a lógica de validação.

Conceitos-chave:

exit 0 (approve), exit 1 (block), stderr para mensagem de erro, stdout para contexto adicional.

O que é:

Fail-open significa que se o hook travar, lançar exceção ou não responder no timeout, o Claude Code ignora o hook e continua — não bloqueia.

Por que aprender:

Sem entender fail-open, você pode escrever um hook que parece funcionar mas silenciosamente falha em produção sem bloquear nada.

Conceitos-chave:

Fail-open vs fail-closed, timeout handling, graceful degradation, logging de falhas do hook.

O que é:

Um hook mínimo em bash: lê o JSON do stdin, extrai o campo relevante com jq, toma uma decisão e retorna o exit code correto.

Por que aprender:

Ter um hook funcional do zero é o ponto de partida para todos os exemplos dos módulos seguintes.

Conceitos-chave:

read stdin, jq para parse JSON, condições shell, exit 0/1, chmod +x, registro no settings.json.

Ver Completo
1.3 ~40 min

⚡ Slash Commands e Skills

Como criar e usar comandos personalizados — a diferença entre local e global, o que é uma skill, como passar argumentos e quando usar cada abordagem.

O que é:

Um slash command é um atalho que mapeia um nome curto para um arquivo de prompt (skill). Ao digitar /meu-comando, o Claude carrega e executa as instruções desse arquivo.

Por que aprender:

Slash commands são a interface do usuário para skills reutilizáveis — permitem acionar comportamentos complexos com um único token.

Conceitos-chave:

Slash command, skill file, prompt injection, reutilização de instruções, interface de usuário para automações.

O que é:

Comandos locais ficam em .claude/settings.json do projeto (só daquele repo). Comandos globais ficam em ~/.claude/settings.json (disponíveis em qualquer projeto).

Por que aprender:

A escolha entre local e global determina o escopo do comando — comandos de projeto não devem vazar para outros contextos.

Conceitos-chave:

.claude/settings.json (local), ~/.claude/settings.json (global), escopo, cascading, override de comandos.

O que é:

Uma skill é um arquivo Markdown (.md) com instruções detalhadas sobre como executar uma tarefa específica — o "cérebro" por trás de um slash command.

Por que aprender:

Skills permitem encapsular expertise complexa em arquivos versionáveis, compartilháveis e iteráveis sem mudar o código.

Conceitos-chave:

Skill file (.md), instruções detalhadas, versionamento de prompt, encapsulamento de expertise, composição de skills.

O que é:

O processo de criação: definir o nome, escrever o arquivo .md com instruções claras, registrar no settings.json e testar no Claude Code.

Por que aprender:

Criar o primeiro comando do zero solidifica o entendimento do sistema completo e produz algo imediatamente útil.

Conceitos-chave:

Nome do comando, arquivo .md, registro em settings.json, campo "description", campo "prompt" vs "file".

O que é:

Ao usar /meu-comando texto adicional, o "texto adicional" fica disponível na skill como $args — permite comandos parametrizados.

Por que aprender:

Argumentos tornam skills genéricas e reutilizáveis. Sem eles, cada variação precisaria de um comando separado.

Conceitos-chave:

$args, argumentos posicionais, template de skill com placeholder, validação de argumentos na skill.

O que é:

Regras para decidir: crie um comando quando a tarefa é repetida frequentemente, requer instruções longas ou precisa ser consistente entre sessões.

Por que aprender:

Criar comandos para tudo polui o settings.json e aumenta o cognitive load. Saber quando não criar é tão importante quanto saber como criar.

Conceitos-chave:

Frequência de uso, complexidade de instrução, consistência necessária, overhead de manutenção, YAGNI para skills.

Ver Completo
1.4 ~45 min

🧠 Estado e Persistência

Como resolver o problema de memória entre sessões — estado em arquivo, escrita atômica, compare-and-swap e lockfiles para concorrência segura.

O que é:

Cada sessão do Claude Code começa do zero — sem memória do que aconteceu antes. Para persistir estado entre sessões, é preciso usar arquivos externos.

Por que aprender:

Sem entender essa limitação, você vai tentar usar variáveis de ambiente ou memória em processo — ambas somem ao fim da sessão.

Conceitos-chave:

Stateless sessions, external state, persistent storage, arquivo como memória, CLAUDE.md como instrução persistente.

O que é:

Arquivos YAML e JSON servem como banco de dados simples para hooks — legíveis por humanos, fáceis de processar com yq/jq no shell.

Por que aprender:

YAML/JSON são o padrão para estado de hooks por serem editáveis manualmente e suportados nativamente pelas ferramentas do kit (jq, yq).

Conceitos-chave:

YAML vs JSON, jq para JSON, yq para YAML, estrutura de estado, campos obrigatórios (version, updated_at, data).

O que é:

Escrever em arquivo temporário e usar mv para substituir o original — garante que o arquivo nunca esteja em estado parcialmente escrito.

Por que aprender:

Escrita direta pode corromper o arquivo se o hook for interrompido no meio. mv é atômico no mesmo filesystem — é tudo-ou-nada.

Conceitos-chave:

Atomic write, mv atomicity, tmpfile, same filesystem, rename syscall, proteção contra corrupção.

O que é:

CAS: lê o estado atual, verifica se ainda é o esperado antes de escrever. Se mudou entre a leitura e a escrita, aborta e retenta — evita overwrites acidentais.

Por que aprender:

Em hooks concorrentes (múltiplos processos rodando em paralelo), sem CAS você cria race conditions que corrompem o estado silenciosamente.

Conceitos-chave:

Compare-and-swap, optimistic locking, version field, retry on conflict, etag pattern.

O que é:

Um lockfile é um arquivo temporário criado no início do hook para sinalizar exclusividade — outros processos verificam sua existência antes de executar.

Por que aprender:

Para operações que NÃO podem ser paralelas (ex: migration de banco), lockfiles garantem que apenas uma instância do hook roda por vez.

Conceitos-chave:

lockfile, mkdir como lock atômico, PID no lockfile, stale lock detection, cleanup no EXIT trap.

O que é:

Padrões para ler campos específicos do arquivo de estado — yq para YAML tipado, jq para JSON, grep como fallback quando as ferramentas não estão disponíveis.

Por que aprender:

Leitura eficiente de estado evita carregar o arquivo inteiro na memória e permite verificações rápidas no caminho crítico do hook.

Conceitos-chave:

yq '.field', jq -r '.field', grep fallback, null check, default values, validação de schema no hook.

Ver Completo
1.5 ~35 min

📂 O Ambiente para Construir

Estrutura de repositório, como testar hooks sem quebrar o fluxo, logs e debugging, SPEC.md como bússola e o kit de ferramentas de apoio.

O que é:

A estrutura padrão: .claude/ para configs, hooks/ para scripts, skills/ para prompts, state/ para estado persistente e tests/ para testes de hooks.

Por que aprender:

Uma estrutura consistente acelera onboarding de novos desenvolvedores e evita que hooks fiquem espalhados pelo repositório.

Conceitos-chave:

.claude/, hooks/, skills/, state/, tests/, SPEC.md, convenções de nomenclatura, separação de responsabilidades.

O que é:

Testar um hook passando JSON de exemplo via stdin manualmente, sem precisar acionar o Claude Code — permite validar a lógica em isolamento.

Por que aprender:

Testar hooks via Claude Code real é lento e inconsistente. Testes unitários com echo/pipe são 100x mais rápidos e repetíveis.

Conceitos-chave:

echo '{}' | ./hook.sh, mock JSON payload, exit code assertion, test fixtures, bats para shell testing.

O que é:

Hooks devem escrever logs em arquivo (não stdout, que é reservado para comunicação com o Claude). O arquivo de log padrão fica em .claude/logs/hooks.log.

Por que aprender:

Sem logs, debugar hooks que falham silenciosamente é impossível. Um bom sistema de log é a diferença entre horas e minutos de diagnóstico.

Conceitos-chave:

stderr para erros, arquivo de log dedicado, timestamp no log, nível de log (DEBUG/INFO/ERROR), tail -f para monitoramento.

O que é:

O SPEC.md documenta o que o hook deve fazer, quais inputs aceita, quais invariantes mantém e quais são os casos de borda — antes de qualquer código.

Por que aprender:

Especificar antes de implementar força decisões difíceis quando ainda é fácil mudar e evita reimplementações por requisitos não capturados.

Conceitos-chave:

SPEC.md, invariantes, casos de borda, contratos de interface, decisões de design explícitas, spec-driven development.

O que é:

Tratar arquivos de skill e CLAUDE.md como código — cada iteração commitada com mensagem descritiva, permitindo rollback e comparação.

Por que aprender:

Prompts evoluem. Sem versionamento, você perde o histórico de por que certas instruções existem e não consegue fazer rollback quando algo quebra.

Conceitos-chave:

Prompt versioning, git para prompts, commit atômico, mensagem de commit descritiva, diff de prompt, blame para rastrear decisões.

O que é:

jq processa JSON no terminal. yq processa YAML. shellcheck analisa scripts shell e aponta erros comuns antes de rodar em produção.

Por que aprender:

Essas três ferramentas eliminam as classes de erro mais comuns em hooks — parse incorreto de JSON, corrupção de YAML e bugs de quoting em shell.

Conceitos-chave:

jq -r, yq eval, shellcheck -S error, instalação via package manager, integração no CI/CD de hooks.

Ver Completo
1.6 ~50 min

🎯 Seu Primeiro Hook de Validação

Projeto prático completo — um hook que bloqueia commits sem mensagem descritiva, do SPEC à implementação, testes de fail-open e iteração incremental.

O que é:

Um PreToolUse hook que intercepta chamadas ao Bash contendo "git commit" e valida que a mensagem tem pelo menos 20 caracteres e não é genérica.

Por que aprender:

Este projeto aplica todos os conceitos da trilha — hooks, stdin/stdout, exit codes, fail-open — em um caso de uso real e imediatamente útil.

Conceitos-chave:

PreToolUse, Bash tool interception, regex matching, mensagem de commit, critérios de qualidade, bloqueio seletivo.

O que é:

Documentar antes de codificar: o que é "mensagem ruim", quais flags do git commit capturar (-m, --message), o que fazer com commits de merge/WIP.

Por que aprender:

O SPEC revela edge cases cedo — o que fazer com git commit --amend? com commits assinados? Essas decisões moldam toda a implementação.

Conceitos-chave:

Critérios de qualidade, whitelist de padrões, edge cases de git, invariantes do hook, decisões de design documentadas.

O que é:

O código completo do hook: ler JSON do stdin, extrair o comando com jq, verificar se é git commit, extrair a mensagem, validar e retornar exit code.

Por que aprender:

Ver o código completo e funcional de um hook real consolida o entendimento teórico dos módulos anteriores em algo tangível.

Conceitos-chave:

stdin=$(cat), jq -r, grep com regex, wc -c para comprimento, exit 1 com mensagem, estrutura completa do hook.

O que é:

Testar deliberadamente cenários onde o hook falha — jq não instalado, arquivo corrompido, timeout — e verificar que o Claude Code continua sem bloquear.

Por que aprender:

Confiar em fail-open sem testá-lo é arriscado. Verificar empiricamente garante que erros no hook não travam o workflow de desenvolvimento.

Conceitos-chave:

Cenários de falha, set -e, error handling, graceful degradation, logging de erros do hook, comportamento esperado com fail-open.

O que é:

Registrar o hook no settings.json com o evento correto (PreToolUse), o matcher de ferramenta (Bash) e o caminho do script — e verificar que o Claude Code o executa.

Por que aprender:

O registro correto no settings.json é a etapa que mais falha por erro de path ou de nome de evento. Testar end-to-end confirma que tudo está conectado.

Conceitos-chave:

hooks.PreToolUse, matcher, command path, permissão de execução, teste end-to-end, verificação no log do Claude Code.

O que é:

Iterar sobre o hook funcional — adicionar timestamp no log, melhorar a mensagem de erro, adicionar modo DRY_RUN, commitar cada melhoria separadamente.

Por que aprender:

Hooks de produção são construídos incrementalmente. Ver o processo de iteração demonstra como evoluir um hook sem introduzir regressões.

Conceitos-chave:

Iteração incremental, commit atômico por melhoria, DRY_RUN mode, melhoria de UX da mensagem de erro, changelog do hook.

Ver Completo
← Início do Curso Trilha 2: Construindo →