Como funcionam as skills do Claude Code por dentro (e o que faz o modelo decidir carregar uma)

Entender como funcionam as skills do Claude Code é entender uma cadeia curta: skill é uma pasta com um arquivo SKILL.md dentro, com frontmatter YAML no topo e instruções em Markdown abaixo. No startup, só o name e a description de cada skill entram no system prompt do agente. É por isso que a description funciona como gatilho de ativação: ela é o único sinal que o modelo tem pra decidir se aquela skill serve. Se ele julgar relevante, aí sim lê o SKILL.md completo do disco e traz as instruções pro contexto. Description vaga, skill invisível!
Fala aí, beleza? Skill não é plugin mágico, nem prompt salvo, nem configuração escondida: é uma pasta com um arquivo SKILL.md dentro, e o modelo decide se lê ou não
Se você chegou pelo termo genérico "skill", criou a pasta, escreveu instrução boa e viu o Claude simplesmente ignorar tudo, respira: o problema quase nunca está no conteúdo que você escreveu
Está no gatilho de ativação, que é uma parte bem pequena do arquivo
Então bora destrinchar o mecanismo por dentro, camada por camada, até ficar óbvio por que uma skill sobe e outra fica dormindo pra sempre 😀
(e se a sua dúvida ainda for a diferença entre skills, comandos e subagentes, esse é outro papo, aqui a gente foca no funcionamento da skill)
Anatomia de uma skill: a pasta, o SKILL.md e o que é opcional
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 45min
Uma skill é uma pasta
Dentro dela, o único componente obrigatório é um arquivo chamado SKILL.md
Esse arquivo tem duas partes bem separadas: um frontmatter YAML no topo e as instruções em Markdown logo abaixo
O resto é opcional, e é aí que mora a confusão de quem acha que precisa de uma estrutura enorme pra começar
minha-skill/
SKILL.md (obrigatório)
scripts/ (opcional)
references/ (opcional)
assets/ (opcional)
A especificação prevê diretórios opcionais pra scripts, references e assets
"Mas pra que isso, se as instruções já estão no SKILL.md?"
Porque nem tudo precisa estar na cara do modelo o tempo todo
O SKILL.md é o que o Claude lê quando decide usar a skill, e os arquivos extras são material de apoio, puxados só quando a instrução mandar
Se você já mexeu com NPM ou composer, a lógica é familiar: um arquivo pequeno descreve a coisa, e o peso de verdade fica em arquivos separados
Os campos do frontmatter: name, description e os extras do Claude Code
O frontmatter exige no mínimo dois campos: name e description
E cada um tem regra própria, que não é decorativa:
| Campo | Obrigatório? | Regra / pra que serve |
|---|---|---|
name |
sim | máximo 64 caracteres, só letras minúsculas, números e hífens |
description |
sim | máximo 1.024 caracteres, não pode ficar vazia |
allowed-tools |
não (Claude Code) | restringe as ferramentas que a skill pode usar |
disable-model-invocation |
não (Claude Code) | com true, impede o Claude de carregar a skill automaticamente |
Na prática, o topo do arquivo fica assim:
---
name: revisor-de-migration
description: Revisa arquivos de migration de banco procurando alteração destrutiva e falta de rollback. Use quando o usuário pedir revisão de migration ou for aplicar mudança de schema.
---
# Revisor de migration
Instruções em Markdown daqui pra baixo...
Repara que o --- de abertura é a PRIMEIRA linha do arquivo
Isso não é frescura de formatação: o Claude Code só lê o frontmatter quando o delimitador de abertura está ali na linha 1
Uma linha em branco antes, um título solto, um comentário, e o frontmatter deixa de existir pro Claude Code
Quando usar allowed-tools e disable-model-invocation:
allowed-tools faz sentido quando a skill é de análise e você não quer que ela saia executando coisa que não precisa
É um guardrail (limite) simples, e limite explícito é sempre melhor que torcida
Já disable-model-invocation: true serve pra skill que você quer no repertório mas NÃO quer que o modelo puxe sozinho
Com ele ligado, o carregamento automático some, e a skill vira uma coisa que você chama na mão quando decidir
Divulgação progressiva: os três níveis que economizam contexto
Agora o porquê antes do como
Skills usam divulgação progressiva (progressive disclosure), em três níveis:
| Nível | O que é | Quando entra no contexto |
|---|---|---|
| 1 | name + description |
pré-carregados no system prompt, no startup |
| 2 | corpo do SKILL.md |
lido sob demanda, quando a skill é considerada relevante |
| 3 | arquivos extras da pasta | lidos só quando necessário |
Ou seja: na inicialização, apenas o name e a description de cada skill instalada entram no system prompt do agente
O conteúdo completo NÃO é carregado de saída
E isso é o ponto mais importante do desenho todo: a janela de contexto fica limpa até a skill ser realmente útil
Pensa no custo do contrário
Se cada skill instalada despejasse o arquivo inteiro no começo da conversa, dez skills já comeriam um pedaço absurdo de contexto antes de você digitar a primeira palavra
Com os três níveis, o que fica sempre ligado é só um cartãozinho de apresentação
Por que o Claude decide usar (ou ignorar) uma skill
Aqui está o coração da coisa
Na hora de decidir, o modelo enxerga só o nível 1: name e description
O corpo do SKILL.md, aquele texto lindo que você caprichou, NÃO participa da decisão
Ele só é lido depois, quando o Claude já julgou a skill relevante e foi buscar o arquivo no sistema de arquivos pra trazer as instruções pra janela de contexto
Por isso a description é o sinal primário de ativação
E a documentação é direta na recomendação: ela deve dizer o que a skill faz e quando ela deve ser usada
O quê + quando, na prática:
Description vaga:
description: Ajuda com banco de dados
O modelo não tem sinal nenhum pra agir
"Ajuda" quando? Em qual situação? Com qual tipo de pedido? A skill vira invisível
Description com o "o quê" e o "quando":
description: Revisa arquivos de migration de banco procurando alteração destrutiva e falta de rollback. Use quando o usuário pedir revisão de migration ou for aplicar mudança de schema.
Agora existe um mapa entre o pedido do usuário e a skill
A ativação deixa de ser sorte e vira previsível
A regrinha mental é essa: escreva a description pensando em quem vai ler ela sem ter lido o resto do arquivo, porque é exatamente o que acontece
Skill criada mas o Claude não carrega: causas prováveis
O sintoma é sempre igual: a pasta existe, o arquivo existe, e o Claude segue a vida como se nada estivesse ali
As causas prováveis, essas sim, são poucas e verificáveis
Bora na ordem, da mais comum pra menos:
- Description genérica ou sem o "quando": se o texto não descreve a situação de uso, o modelo não tem gatilho pra ativar. Reescreva com o "o quê" e o "quando" e teste de novo
- O
---não é a primeira linha do arquivo: sem o delimitador de abertura na linha 1, o Claude Code não lê o frontmatter, e sem frontmatter não existenamenemdescriptionpra entrar no system prompt. O erro comum aqui é deixar uma linha em branco ou um título Markdown antes do bloco
namefora do padrão: o campo aceita apenas letras minúsculas, números e hífens, com máximo de 64 caracteres. Maiúscula, espaço, acento ou underline já quebram a regra
disable-model-invocation: trueligado: nesse caso está tudo funcionando como projetado, o carregamento automático é que está bloqueado de propósito. Vale ler o frontmatter linha por linha antes de suspeitar de qualquer outra coisa
- Pasta no lugar errado: skill fora dos diretórios que o Claude Code lê não é skill, é arquivo Markdown perdido no disco (o próximo tópico resolve isso)
Como separar problema de ativação de problema de conteúdo:
Esse é o truque que economiza tempo
Além da ativação automática pelo modelo, você pode chamar uma skill explicitamente digitando /<name> no Claude Code
Então faça o teste:
- se a chamada manual funciona e a automática não, o problema está no frontmatter (
description,name,disable-model-invocation) - se nem a manual funciona, o problema é antes disso: arquivo, delimitador ou localização da pasta
Revise o frontmatter ANTES de mexer em qualquer outra coisa
É onde mora quase todo defeito de ativação
Onde as skills ficam: pessoais, de projeto e distribuídas como plugin
No Claude Code existem dois escopos, e escolher errado é fonte silenciosa de frustração
| Escopo | Caminho | Vale onde |
|---|---|---|
| Pessoal | ~/.claude/skills |
em todos os seus projetos |
| Projeto | .claude/skills (no repositório) |
naquele projeto, versionado com o time |
A decisão é bem direta
Skill que reflete o SEU jeito de trabalhar (padrão de commit, estilo de revisão, atalho pessoal) vai em ~/.claude/skills
Skill que reflete regra DAQUELE código (convenção do time, fluxo de deploy do projeto, formato de teste) vai em .claude/skills e entra no repo junto com o resto
E quando é pra distribuir?
Skills também podem ser distribuídas como plugins no Claude Code
O fluxo tem dois passos: você adiciona um marketplace e depois instala o plugin
/plugin marketplace add <fonte>
/plugin install <plugin>@<marketplace>
É o caminho pra quando a skill deixa de ser sua e passa a ser de mais gente
Para onde ir depois: a spec aberta e o repositório da Anthropic
Um detalhe que muita gente perde: Agent Skills é uma especificação ABERTA, publicada e mantida em site próprio
O agentskills.io tem página de specification, de skill creation e de integração por outros agentes
Ou seja, o formato pasta + SKILL.md não é um detalhe interno de um produto só, é um padrão documentado publicamente
Quem quiser entender melhor onde uma skill roda de verdade tem esse desdobramento inteiro pra explorar
E pra ver estrutura real em vez de exemplo de blog, a Anthropic mantém um repositório público de Agent Skills no GitHub
Lá dentro tem inclusive a skill-creator
Abrir esse arquivo e ler o frontmatter dele vale mais que qualquer template genérico, porque é skill de verdade, escrita por quem definiu o formato 🙂
Conclusão: o resumo do mecanismo (e o próximo passo)
A cadeia inteira, do começo ao fim:
- skill é uma pasta com um
SKILL.mddentro, frontmatter YAML no topo e Markdown abaixo - no startup, só
nameedescriptionentram no system prompt - a
descriptioné o gatilho: é com ela que o modelo decide se aquela skill serve - decidiu que serve, aí o
SKILL.mdcompleto é lido do disco e vai pro contexto - arquivos extras da pasta só entram quando forem realmente necessários
Sabendo disso, a ordem de prioridade quando você escreve uma skill se inverte em relação ao instinto: a description vem primeiro, não por último
O próximo passo concreto é pequeno
Cria uma pasta em ~/.claude/skills com um SKILL.md, --- na primeira linha, name no padrão minúsculo com hífen e uma description que diga o que a skill faz E quando usar
Depois chama com /<name> pra confirmar que o conteúdo funciona, antes de ficar esperando a ativação automática acontecer
Separar as duas coisas é o que transforma "não funciona" em "achei o problema"
Bora escrever a sua primeira? até o próximo post!
Perguntas frequentes
Qual a diferença entre skill pessoal e skill de projeto no Claude Code?
Skill pessoal fica em ~/.claude/skills e vale em qualquer projeto que você abrir. Skill de projeto fica em .claude/skills dentro do repositório e pode ser versionada junto com o código, ficando disponível pra quem clonar o repo.
Como chamar uma skill manualmente sem depender do Claude decidir sozinho?
É só digitar /<name> no Claude Code, usando o mesmo valor que está no campo name do frontmatter. Essa invocação manual funciona independente da description, então é o caminho pra usar uma skill mesmo quando o gatilho automático falha.
Dá pra instalar skills prontas em vez de escrever o SKILL.md do zero?
Sim, skills podem vir empacotadas como plugin. O fluxo é adicionar a fonte com /plugin marketplace add <fonte> e depois instalar com /plugin install <plugin>@<marketplace>.
Existe algum repositório oficial com exemplos de SKILL.md pra copiar a estrutura?
Sim, como o post mostra, a Anthropic mantém um repositório público de Agent Skills no GitHub, que inclui a skill skill-creator. É um bom ponto de partida pra ver a anatomia de pasta e frontmatter na prática.
Agent Skills é uma coisa exclusiva do Claude Code?
Não, Agent Skills é uma especificação aberta, publicada e mantida em site próprio, o agentskills.io, com páginas de spec, criação de skills e integração por outros agentes. O Claude Code é uma implementação dessa especificação, mas o formato de pasta + SKILL.md não é fechado nele.
O que muda quando eu coloco disable-model-invocation: true numa skill?
Esse campo no frontmatter impede o Claude de carregar a skill automaticamente, mesmo que a description combine com o pedido do usuário. A skill continua existindo e pode ser chamada na mão com /<name>, só sai do radar da ativação automática.
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares
Como compartilhar skills do Claude Code com o time e manter todo mundo no mesmo padrão?
Skills compartilhadas em time podem virar bagunça: cada um com sua cópia. Veja 4 formas de manter o mesmo padrão no Claude Code, do repo ao marketplace.
Duas skills do Claude Code em conflito: qual delas vence e como resolver?
Conflito entre skills no Claude Code? Veja quando enterprise vence pessoal, quando skill sobrepõe comando e como ajustar nome e description para resolver.
Como versionar suas skills do Claude Code no Git sem bagunçar o repositório
Aprenda a versionar skills do Claude Code no Git sem bagunçar o projeto: diferença entre skill de projeto e pessoal, .gitignore e settings.json certos.
