Conteúdo detalhado
📄 O que é, afinal, um SKILL.md
Uma Agent Skill é, na essência, um arquivo de texto Markdown chamado
SKILL.md. Nada de binário compilado, nada de instalação complexa: é um
documento que você consegue abrir num editor de texto e ler de cima a baixo. O que o torna especial não é a tecnologia, e
sim o contrato que ele estabelece — ele ensina o Claude a executar uma tarefa
específica, e diz quando essa tarefa se aplica.
🧬 As duas zonas do arquivo
Todo SKILL.md se divide em duas zonas com papéis bem diferentes:
- •Frontmatter (YAML): o cartão de visita —
nameedescription. É o que o Claude lê para decidir usar a skill. - •Corpo (Markdown): as instruções de verdade — o "como fazer". Só é carregado depois que a skill é escolhida.
---
name: travel-itinerary
description: Generates an interactive HTML travel itinerary.
Use when the user wants to "plan a trip", "create an itinerary",
or types /travel.
---
# TravelWings — AI Travel Itinerary Generator
## Setup Flow
Before generating anything, ask the user the trip basics...
## Output Format
Generate a single self-contained HTML file...
💡 Dica prática
Se você sabe escrever um bom README, você já sabe 80% de escrever um SKILL.md. A diferença está nos dois campos do topo — eles não são documentação, são o gatilho que faz o Claude usar a skill sozinho.
🏷️ O campo name: a identidade
O name é o identificador da skill. Parece o campo mais bobo do arquivo,
mas ele é a chave estável pela qual a skill é referenciada — em comandos, em
outras skills, em logs. Um bom name é curto, em kebab-case,
e diz o que a skill é num relance.
✓ Nomes que funcionam
- ✓
travel-itinerary— diz exatamente o que produz - ✓
vibe-coding— termo memorável e específico - ✓
n8n-workflow-reviewer— domínio + ação claros
✗ Nomes que atrapalham
- ✗
helper— genérico demais, ajuda no quê? - ✗
my_skill_v2_final— ruído, sem significado - ✗
SkillDeViagem— fora da convenção kebab-case
📐 Convenções que valem a pena
- kebab-case: tudo minúsculo, palavras separadas por hífen.
- Estável: mudar o
namepode quebrar referências e comandos — escolha bem e mantenha. - Único: dois
nameiguais criam ambiguidade sobre qual carregar.
🎯 O campo description: o gatilho
Se o name é a identidade, a description é o
cérebro da descoberta. É a única parte da skill que o Claude lê quando decide se
deve ou não usá-la. Por isso, ela não pode ser uma simples definição — precisa dizer o que
a skill faz E quando ela deve ser usada. Esse módulo só apresenta a
ideia; o Módulo 1.3 inteiro é dedicado a escrever descriptions afiadas.
⚖️ A fórmula "Faz + Quando"
Compare a mesma skill descrita de duas formas:
"Generates travel itineraries."
"Generates an interactive HTML travel itinerary. Use when the user wants to plan a trip, create an itinerary, or types /travel."
💡 Dica prática
Releia a sua description fingindo que você é o Claude vendo só essa linha, sem o resto do arquivo. Se você não conseguir decidir "essa skill se aplica a este pedido?", o Claude também não conseguirá.
📝 O corpo: o "como fazer"
Abaixo do frontmatter vem o corpo da skill — Markdown livre onde você escreve o passo a passo da execução. É aqui que a qualidade do resultado é decidida. Um corpo bem estruturado costuma ter quatro blocos recorrentes, como vemos nas skills reais que o curso disseca.
Setup / descoberta
"O que perguntar antes de produzir"
O gerador de itinerários, por exemplo, define um Setup Flow obrigatório: antes de gerar qualquer HTML, o Claude coleta destino, datas, origem e integrações. É o que torna a saída útil em vez de genérica.
Workflow / passos
"A sequência de execução"
A ordem das ações. A skill de correção de frontend, por exemplo, define passos com portões: confirmar o workspace, criar um branch, testar ao vivo, só então editar o código.
Regras duras / limites
"O que nunca fazer"
Restrições inegociáveis — geralmente em maiúsculas ou com avisos. São o que impede o Claude de pular etapas críticas ou tomar ações destrutivas.
Formato de saída
"Como o resultado deve sair"
A definição precisa do entregável: um único arquivo HTML autocontido, um relatório com seções fixas, um JSON. Sem isso, cada execução produz um formato diferente.
📊 O que distingue um corpo bom
- Específico > genérico: "gere um HTML autocontido" vence "gere uma boa saída".
- Princípios no fim: boas skills fecham com uma lista de princípios que resumem a filosofia ("dados reais > placeholder").
- Exemplos embutidos: trechos de entrada/saída ancoram o comportamento melhor que prosa abstrata.
🔍 Como o Claude descobre a skill
Aqui mora o detalhe que muda tudo: o Claude não lê o corpo de todas as skills o tempo
todo. Imagine 50 skills instaladas, cada uma com centenas de linhas — carregar tudo a cada mensagem seria
impraticável. Em vez disso, ele mantém um índice leve: só o
name + a description de cada skill. É contra esse índice que
o pedido do usuário é comparado.
🗂️ O índice de descrições
Pense num catálogo de biblioteca: você não lê todos os livros para achar um — você lê as fichas. A description é a ficha da skill.
- •O pedido do usuário é confrontado com as descriptions disponíveis.
- •A skill cuja descrição melhor casa com a intenção é a candidata.
- •Só então o corpo completo daquela skill entra em contexto.
travel-itinerary → "plan a trip, create an itinerary, /travel"
vibe-coding → "fix CSS/layout live in the browser before editing"
n8n-reviewer → "review an n8n automation as a senior engineer"
rag-architect → "design the right RAG before writing code"
... → (só name + description, nunca o corpo inteiro)
💡 Dica prática
Essa mecânica explica uma frustração comum: "criei a skill perfeita e o Claude nunca usa". Quase sempre o corpo está ótimo — mas a description não diz quando disparar. O Claude nunca chega a ler o corpo brilhante porque a ficha não o convenceu.
⚡ Como o Claude dispara a skill
Descobrir é reconhecer que a skill se aplica; disparar é efetivamente carregar o corpo e passar a seguir suas instruções. Há dois caminhos para isso acontecer, e entender a diferença evita muita confusão.
✓ Disparo automático
O Claude lê o pedido, vê que casa com uma description e usa a skill sozinho.
- ✓Disparado pela intenção: "planeja minha viagem a Tóquio"
- ✓O ideal: o usuário nem precisa saber que a skill existe
- ✓Depende 100% de uma boa description
↳ Invocação explícita
O usuário chama a skill pelo nome ou por um comando de barra.
- →Disparado pelo comando:
/travel - →Útil quando o usuário sabe exatamente o que quer
- →Funciona mesmo com description fraca
⚠️ O erro a evitar
Depender só da invocação explícita é desperdiçar metade do poder das skills. Se a skill nunca dispara sozinha, ela vira um comando manual — e o usuário tem que lembrar dela. O objetivo de uma skill bem feita é desaparecer: ativar na hora certa sem ninguém pedir.
💡 Dica prática
Teste sempre os dois caminhos. Peça a tarefa em linguagem natural (sem citar a skill) e veja se ela dispara. Depois invoque pelo nome. Se só o segundo funciona, sua description precisa de trabalho — e é exatamente isso que o Módulo 1.3 ensina a consertar.
🧰 Prompts copiáveis
Use estes prompts com o Claude para fixar o conteúdo do módulo na prática.
Abra um SKILL.md qualquer que você tenha acesso e me explique,
linha a linha: qual é o frontmatter, o que cada campo (name,
description) faz, e onde começa o corpo de instruções.
Aqui está a description da minha skill: "<cole aqui>".
Lendo SÓ essa linha, sem o corpo, você saberia em quais pedidos
de usuário disparar esta skill? Liste 3 pedidos que disparariam
e 3 que NÃO disparariam.
Vou descrever uma tarefa que faço sempre. Me ajude a separar:
(1) qual seria o name e a description (o gatilho), e
(2) o que vai no corpo (workflow, regras, formato de saída).
A tarefa é: <descreva>.
📤 Exemplo de saída
Um SKILL.md mínimo, mas completo e válido — exatamente o esqueleto que você vai expandir nos próximos módulos.
---
name: changelog-writer
description: Writes a clean CHANGELOG entry from a list of git
commits. Use when the user asks to "write a changelog",
"summarize these commits", or "prep release notes".
---
# Changelog Writer
## Workflow
1. Ask for the version number and the commit list (or read it).
2. Group commits into: Added, Changed, Fixed, Removed.
3. Rewrite each line in plain, user-facing language.
## Rules
- Never invent changes that aren't in the commits.
- Keep each entry to a single line.
## Output Format
Markdown under a `## [version] - YYYY-MM-DD` header,
one section per group, bullets per change.
✏️ Exercícios práticos
1. Disseque um SKILL.md
Pegue qualquer skill que você conheça e marque, com um marcador de cor, onde termina o frontmatter e começa o corpo. Identifique os quatro blocos do corpo (setup, workflow, regras, saída) — anote qual está ausente.
2. Reescreva uma description fraca
Pegue a description "Generates reports." e reescreva no padrão "Faz + Quando", adicionando ao menos dois gatilhos concretos que um usuário diria.
3. Crie um SKILL.md rodável ⭐
Escreva, do zero, um SKILL.md completo para uma tarefa repetitiva sua (ex.: "resumir reuniões", "padronizar nomes de commit"). Ele deve ter: frontmatter com name + description no padrão "Faz + Quando", e um corpo com workflow, ao menos uma regra dura e um formato de saída. Depois peça ao Claude para executá-lo com uma entrada de teste e observe se o resultado sai no formato definido.
🧬 Resumo do módulo
name (identidade) e description (gatilho) decidem o disparo.Próximo módulo:
1.2 — Progressive disclosure & estrutura