MODULO 1.1

🧩 Por que skills existem

Os 4 problemas que matam projetos com agentes β€” e como skills resolvem cada um deles.

7
Secoes
35
Minutos
Basico
Nivel
Teoria
Tipo

Conteudo detalhado

1

πŸ“¦ O que e uma skill no Claude Code

Uma skill e um pacote de instrucoes e ferramentas que muda o comportamento do Claude Code para uma tarefa especifica. Em vez de explicar o mesmo processo todo dia ("antes de codar, escreva um teste"), voce empacota essa logica numa skill e o agente carrega ela quando precisar.

Tecnicamente, uma skill e um diretorio com um arquivo SKILL.md (frontmatter YAML + corpo markdown) que descreve quando ativar e como agir. Pode incluir slash commands, sub-agents, hooks, e referencias a outras skills.

βš™οΈ Tres formas de invocar uma skill

  • β€’ Slash command explicito: usuario digita /grill-me ou /tdd β€” invocacao deliberada.
  • β€’ Trigger automatico: o agente le a description da skill e ativa quando o pedido bate (ex: "vamos refatorar isso" -> /improve-codebase-architecture).
  • β€’ Composicao: uma skill chama outra. /make-plan pode chamar /grill-me internamente.
# Estrutura minima de uma SKILL.md
---
name: grill-me
description: Stress-testa um plano antes de codar.
  Use quando o usuario disser "vou comecar a implementar",
  "tenho uma ideia", "faz sentido fazer assim?".
---

# Grill Me

Voce e um senior cetico. Antes de aceitar qualquer plano:

1. Liste 5 suposicoes implicitas no pedido do usuario.
2. Para cada uma, pergunte "e se essa estiver errada?".
3. Sugira o experimento mais barato para validar cada uma.
4. So entao retorne o plano refinado.

πŸ’‘ Prioridade de instrucoes

Quando ha conflito, a ordem de precedencia e: system prompt > skill ativa > CLAUDE.md > pedido do usuario. Uma skill bem feita "amarra" comportamento mesmo se o usuario tentar atalho.

Exemplo: se /tdd esta ativa e o usuario disser "pula o teste dessa vez", o agente recusa β€” a skill venceu.

2

🎯 Problema #1 β€” Desalinhamento

O problema mais caro nao e codigo errado β€” e codigo certo da coisa errada. O usuario pede X mas quer Y, o agente codifica X perfeitamente, e duas semanas depois o feature e jogado fora.

πŸ“š Citacao β€” David Thomas (The Pragmatic Programmer)

"No-one, not even users, knows exactly what they want. Even when they do, they cannot articulate it. And even when they articulate it, they will change their minds tomorrow."

Conclusao: aceitar o pedido literal do usuario e quase sempre uma armadilha. Skills tipo /grill-me existem pra forcar a conversa de descoberta antes do codigo.

βœ— BEFORE β€” Sem grilling

Usuario:

"Adiciona um botao de exportar CSV na tela de relatorios."

Agente:

  • βœ— Codifica botao CSV em 2 horas.
  • βœ— Usuario testa: "mas eu queria Excel com formatacao."
  • βœ— Retrabalho. CSV vai pro lixo.

βœ“ AFTER β€” Com /grill-me

Agente pergunta:

  • βœ“ "Quem vai abrir esse arquivo? Excel, Sheets, ferramenta de BI?"
  • βœ“ "Precisa de formatacao (cores, totais), ou so dados crus?"
  • βœ“ "Quantas linhas? CSV trava acima de 1M no Excel."

Usuario responde -> agente codifica XLSX com formulas. Zero retrabalho.

πŸ’‘ Sinal de alarme

Se o agente nunca te corrigiu, nunca pediu esclarecimento e nunca discordou de voce β€” ele esta te servindo, nao te ajudando. Uma boa skill de descoberta deve gerar atrito produtivo nas primeiras trocas.

3

πŸ—£οΈ Problema #2 β€” Verbosidade

Quando agente e humano nao compartilham vocabulario, cada conversa precisa ser explicada do zero. Eric Evans (autor de Domain-Driven Design) chama isso de ausencia de linguagem ubiqua: termos que toda a equipe β€” humanos e agentes β€” usa da mesma forma.

πŸ“– Eric Evans β€” Domain-Driven Design

A ideia central de Evans: o codigo deve falar a lingua do negocio. Se voce tem que traduzir "PaymentBatch" pra "lote de cobrancas" toda vez que abre um arquivo, o modelo esta errado.

Com agentes a perda e amplificada: cada conversa nova comeca do zero porque o agente nao "viveu" as discussoes anteriores. Skills com glossario fixo (ex: /grill-with-docs) injetam a linguagem ubiqua em todo prompt.

Exemplo concreto. Imagine um curso onde "aula" pode ser um placeholder OU uma instancia real materializada com aluno e progresso. Sem linguagem ubiqua, voce escreve assim:

βœ— Verboso (sem linguagem ubiqua)

"There's a problem when a lesson inside a section of a course is made 'real' for a specific student and the previous lessons in that section weren't made 'real' too β€” the progress bar shows the wrong percentage."

62 palavras. Aspas em "real" tres vezes. Reconstroi o conceito do zero.

βœ“ Conciso (com linguagem ubiqua)

"There's a problem with the materialization cascade β€” when a lesson is materialized out of order, the progress is miscalculated."

21 palavras. Termos "materialization cascade" e "materialized" carregam todo o contexto.

πŸ’‘ Os 3 beneficios da linguagem ubiqua com agentes

  • 1. Brevidade: uma palavra carrega um paragrafo de contexto.
  • 2. Precisao: "materializar" significa exatamente uma coisa, sem ambiguidade.
  • 3. Auditoria: commits, PRs e tickets compartilham o mesmo dicionario.
4

πŸ§ͺ Problema #3 β€” Codigo que nao funciona

LLMs sao treinados pra produzir codigo que parece certo. Tipos batem, imports existem, sintaxe e valida β€” e mesmo assim a logica esta errada. Sem um sinal externo (testes), o agente acredita no proprio output.

A solucao classica e TDD (Test-Driven Development): escrever o teste primeiro, ver ele falhar (vermelho), implementar o minimo pra ele passar (verde), depois refatorar. Skills como /tdd impoem esse ciclo no agente.

πŸ”΄

RED β€” Escreva o teste que falha

Antes de escrever uma linha de implementacao, descreva o comportamento esperado num teste.

Por que funciona: te forca a definir o que antes do como. Se voce nao consegue escrever o teste, voce nao entendeu o requisito. O teste falhando confirma que voce esta testando algo real β€” nao um teste vazio que sempre passa.

🟒

GREEN β€” Implemente o minimo

A regra: codigo mais curto e mais simples que faz o teste passar. Pode ser feio. Pode ser duplicado. Funciona.

Por que funciona: bloqueia a tentacao de "ja vou deixar pronto pro proximo caso". Cada teste compra uma linha de codigo, nada alem disso.

πŸ”΅

REFACTOR β€” Limpe com a rede embaixo

Com os testes verdes, agora voce reorganiza nomes, extrai funcoes, remove duplicacao β€” sem medo de quebrar.

Por que funciona: a refatoracao acontece depois que o comportamento esta cravado em teste. Se um refactor quebrar logica, o teste avisa em segundos.

⚠️ Atencao β€” o anti-padrao TDD com agentes

O erro mais comum: pedir ao agente "implementa X e depois escreve os testes". O agente vai escrever testes que passam no codigo dele, nao testes que validariam o requisito. Teste depois nao e TDD β€” e teatro.

5

🏚️ Problema #4 β€” Ball of mud

Codigo apodrece. Foi documentado por Foote e Yoder em 1997 com o termo "Big Ball of Mud": sistemas que crescem sem arquitetura coerente porque cada feature foi adicionada na pressa, sem refator. Com agentes a velocidade aumenta β€” e o apodrecimento tambem.

A intuicao errada: "vou pedir pro agente refatorar tudo agora". A intuicao certa: refator e oportunidade, nao evento. Voce nao reescreve o sistema; voce identifica uma duplicacao e a unifica quando ja precisa mexer naquela area.

βœ— Refator destrutivo

  • βœ— "Refatora tudo o modulo de pagamento" β€” 2 semanas, 50 arquivos, PR impossivel de revisar.
  • βœ— Muda nome de classe e quebra 14 lugares que ninguem percebeu.
  • βœ— Feature flag fica acesa 3 meses. Codigo novo e velho convivem.
  • βœ— Resultado: bola de lama com mais uma camada por cima.

βœ“ Deepening opportunities

  • βœ“ Antes de tocar num arquivo, rode /improve-codebase-architecture nele.
  • βœ“ Skill identifica duplicacao especifica: "essa funcao existe em 3 lugares como variacoes."
  • βœ“ Unifica so aquele caso. PR de 80 linhas, revisavel em 10 min.
  • βœ“ Resultado: cada feature deixa o codigo um pouco melhor (regra do escoteiro).

πŸ’‘ Exemplo pratico β€” identificando duplicacao

Voce vai mexer no UserController. Antes, roda /improve-codebase-architecture UserController. A skill responde:

"Encontrei 3 implementacoes parecidas de validacao de email:
- UserController.create (linha 42)
- AdminController.invite (linha 78)
- WebhookController.signup (linha 31)

Variam apenas no tratamento de dominio bloqueado. Sugiro extrair EmailValidator.validate(email, options) e refatorar os 3 chamadores num PR antes de adicionar o seu codigo novo."
6

πŸ”— Como skills compoem

Skills individuais ja ajudam. Mas o ganho real aparece quando elas se compoem em fluxos β€” cada uma resolve um problema, e o output de uma alimenta a proxima.

Workflow tipico de uma feature, do zero ao codigo em producao:

   /grill-with-docs        Stress-testa a ideia contra docs e ADRs
          β”‚              (elimina desalinhamento, problema #1)
          β–Ό
   /to-prd                 Vira documento de produto curto e cravado
          β”‚              (fixa linguagem ubiqua, problema #2)
          β–Ό
   /to-issues              Quebra o PRD em issues pequenas e testaveis
          β”‚              (escopo pequeno = menos ball of mud)
          β–Ό
   /tdd                    Para cada issue: teste vermelho -> verde -> refactor
          β”‚              (resolve problema #3)
          β–Ό
   /triage                 Revisa diff, sugere refator pontual antes do merge
                         (combate problema #4, deepening opportunity)

Cada seta e uma transicao deliberada. O usuario nao precisa segurar o contexto inteiro na cabeca β€” as skills fazem o handoff. O PRD vira input do /to-issues; a issue vira input do /tdd; o diff vira input do /triage.

🧱 Principio: skills sao tijolos, nao monolitos

Uma skill que tenta fazer "tudo o ciclo de feature" e pior que cinco skills pequenas encadeadas. Razoes:

  • β€’ Reuso: /grill-me serve pra qualquer plano, nao so pra features.
  • β€’ Substituicao: trocar /tdd por /bdd num projeto nao quebra o resto.
  • β€’ Manutencao: skill curta cabe na cabeca, e mais facil de auditar.
  • β€’ Composicao livre: mesma skill em fluxos diferentes (ex: /grill-me antes de PRD, antes de ADR, antes de migracao).

πŸ’‘ Regra pratica

Se voce esta escrevendo uma skill e o description precisa de mais de 2 frases pra explicar quando ativar, ela esta fazendo coisa demais. Quebre.

πŸ“Œ Resumo do Modulo

βœ“
Skill = pacote de comportamento β€” SKILL.md com frontmatter que define quando ativar e como agir.
βœ“
Problema #1: Desalinhamento β€” codigo certo da coisa errada. Resolve com /grill-me e descoberta deliberada.
βœ“
Problema #2: Verbosidade β€” sem linguagem ubiqua cada conversa parte do zero. Resolve com glossario fixo na skill.
βœ“
Problema #3: Codigo errado que parece certo β€” agente acredita no proprio output. Resolve com TDD (red -> green -> refactor) imposto por /tdd.
βœ“
Problema #4: Ball of mud β€” codigo apodrece com velocidade. Resolve com refator-como-oportunidade (/improve-codebase-architecture).
βœ“
Skills compoem em fluxos β€” /grill-with-docs -> /to-prd -> /to-issues -> /tdd -> /triage. Tijolos, nao monolitos.

Proximo Modulo:

1.2 β€” Anatomia de uma SKILL.md: frontmatter, description triggers e corpo