AIARTIGO

Como criar e testar um Claude Agent Skill do zero (e o que quebra ao reaproveitar)

A Anthropic transformou conhecimento reutilizável em diretórios com SKILL.md. O passo a passo para empacotar, instalar no Claude Code e entender por que o mesmo Skill não roda igual na API.

0
Como criar e testar um Claude Agent Skill do zero (e o que quebra ao reaproveitar)
Imagem gerada por IA

A Anthropic vem empurrando um formato específico para resolver um problema chato de quem constrói com agentes: como parar de repetir as mesmas instruções, workflows e referências em toda conversa. A resposta são os Agent Skills, documentados no material oficial da Anthropic. Na prática, um Skill é só um diretório com um arquivo SKILL.md e, opcionalmente, scripts e arquivos de referência. Nada de mágica: é filesystem.

O que torna isso interessante para quem já trabalha com RAGRAG6 conteúdosTécnica RAG com a biblioteca Langchain: tutorial para aplicar agoraData · jun 2024Como avaliar LLMs, RAG e Agentes de IA: Teoria e prática.AI · abr 2026RAG Não É Memória: O Problema Real dos Agentes de IAAI · mai 2026Ver tudo em AI e prompts gigantes é o mecanismo de progressive disclosure. Em vez de despejar todo o contexto de uma vez, o Claude carrega a informação em camadas, conforme precisa. Vou mostrar como montar um Skill funcional, testar localmente no Claude Code e, principalmente, o que muda (e o que trava) quando você tenta levar o mesmo Skill para a API.

As três camadas que definem o custo de contexto

O ponto central da arquitetura é que cada tipo de conteúdo entra no context window em um momento diferente. A documentação resume assim:

CamadaQuando carregaCusto em tokensConteúdo
MetadataSempre, no startup~100 tokens por Skillname e description do YAML
InstruçõesQuando o Skill é acionadoMenos de 5k tokensCorpo do SKILL.md
Recursos e códigoSob demandaZero até ser acessadoArquivos referenciados, scripts via bash

Na prática isso significa que você pode instalar dezenas de Skills sem pagar pedágio de contexto: enquanto um Skill não é acionado, só o nome e a descrição ocupam espaço. É aqui que o formato ganha da abordagem de enfiar tudo no system prompt.

O detalhe que faz diferença: scripts nunca entram no contexto. Quando o Claude roda um validate_form.py via bash, só a saída do script ("Validation passed" ou uma mensagem de erro) consome tokens. O código em si fica no disco. Para operações determinísticas, isso é mais confiável e mais barato do que pedir para o modelo gerar o código na hora.

Escrevendo o SKILL.md

Todo Skill precisa de um SKILL.md com frontmatter YAML. A estrutura mínima é essa:

markdown
---
name: pdf-processing
description: Extract text and tables from PDF files, fill forms, merge documents. Use when working with PDF files or when the user mentions PDFs, forms, or document extraction.
---

# PDF Processing

## Quick start

Use pdfplumber to extract text from PDFs:

import pdfplumber

with pdfplumber.open("document.pdf") as pdf: text = pdf.pages[0].extract_text()


For advanced form filling, see FORMS.md.

O campo que mais importa é o description. Ele é o que o Claude compara contra o pedido do usuário para decidir se aciona o Skill. Por isso a documentação insiste: a descrição precisa dizer o que o Skill faz e quando usá-lo. Uma descrição vaga ("processa arquivos") vai fazer o Skill nunca disparar ou disparar na hora errada. As regras do name são estritas: máximo 64 caracteres, só letras minúsculas, números e hífens, e não pode conter as palavras reservadas "anthropic" ou "claude".

Quando o Skill cresce, você quebra o conhecimento em arquivos separados dentro do diretório:

pdf-processing/
  SKILL.md          (instruções principais)
  FORMS.md          (guia de preenchimento de formulário)
  REFERENCE.md      (referência detalhada da API)
  scripts/
    fill_form.py    (script utilitário)

A sacada é que FORMS.md só é lido se a tarefa envolver formulários. Se o usuário só quer extrair texto, o Claude roda cat pdf-processing/SKILL.md, vê que não precisa de formulário e nunca toca no FORMS.md. Zero tokens desperdiçados.

Testando localmente no Claude Code

Aqui está a parte boa para quem já usa Claude Code: Skills customizados são filesystem-based e não exigem upload. Você só coloca o diretório no lugar certo:

bash
# Skill pessoal, disponível em qualquer projeto
mkdir -p ~/.claude/skills/pdf-processing

# Skill de projeto, versionado junto com o repositório
mkdir -p .claude/skills/pdf-processing

Mova seu SKILL.md (e os arquivos auxiliares) para dentro dessa pasta e o Claude Code descobre e usa automaticamente. Não há comando de registro, não há chamada de API. Para validar se está funcionando, o caminho que eu seguiria é fazer um pedido que case exatamente com o description e observar se o Claude executa o cat do SKILL.md no meio do raciocínio: é o sinal de que a camada de instruções foi acionada.

A distinção entre ~/.claude/skills/ (pessoal) e .claude/skills/ (projeto) é útil na prática: colocar o Skill no repositório significa que todo mundo do time herda o mesmo conhecimento ao clonar, sem setup manual. É a forma mais limpa de distribuir contexto organizacional versionado.

O que quebra ao reaproveitar entre surfaces

Aqui mora a pegadinha que a pauta pede para expor. Skills não sincronizam entre surfaces. O mesmo diretório que funciona liso no Claude Code pode simplesmente não rodar igual na API, e por motivos concretos, não por bug.

O primeiro problema é de distribuição. A documentação é explícita:

Skills uploaded to one surface are not automatically available on others.

Na prática:

  • Skill do Claude Code vive no filesystem e é separado da API e do claude.ai.
  • Skill da API precisa ser enviado pelos endpoints /v1/skills e é compartilhado no workspace inteiro.
  • Skill do claude.ai é enviado como zip via Settings > Features e fica individual por usuário, sem gestão centralizada por admin.

Ou seja: se você desenvolveu e testou no Claude Code, levar para a API é um novo upload, não um copiar e colar de pasta.

O segundo problema, mais traiçoeiro, é o ambiente de execução. Um Skill que dependa de rede ou de instalar pacotes vai quebrar na API mesmo depois de instalado corretamente. Compare:

RestriçãoClaude CodeClaude API
Acesso à redeTotal (como qualquer programa na máquina)Nenhum: sem chamadas externas
Instalar pacote em runtimePermitido (local, com ressalvas)Bloqueado
DependênciasO que estiver na máquinaSó pacotes pré-instalados no container

Esse é o caso concreto de "quebrou": um Skill que, no Claude Code, faz pip install de uma lib ou busca dados de uma URL externa funciona porque tem a mesma permissão de rede que qualquer processo local. Na API, o mesmo Skill roda em container sandboxed, sem rede e sem instalação em runtime, então o script que baixava algo ou instalava uma dependência falha silenciosamente ou estoura erro. A recomendação da própria Anthropic é planejar o Skill para caber nessas restrições desde o começo, e não descobrir na hora do deploy.

Quando não vale a pena

Skill não substitui prompt para tarefa pontual. Se você vai pedir algo uma vez só, a documentação deixa claro que a vantagem do Skill (carregar sob demanda, sem repetição) some, e um prompt direto resolve com menos cerimônia. Skill compensa quando o mesmo conhecimento se repete entre conversas ou entre membros do time.

E tem o lado de segurança, que não é detalhe. Um Skill dá capacidades novas ao Claude via instruções e código, o que significa que um Skill malicioso pode direcionar o modelo a executar coisas fora do propósito declarado: exfiltração de dados, acesso não autorizado, chamadas de rede inesperadas. A orientação é tratar como instalar software: use só Skills que você escreveu ou obteve da Anthropic, e audite cada arquivo do pacote, incluindo scripts e recursos, antes de rodar em produção com acesso a dados sensíveis.

Para quem constrói no Brasil, o take prático é este: o formato Skill é a forma mais barata (em tokens) de dar especialização durável a um agente, e o ciclo de teste no Claude Code é imediato porque é só filesystem. Mas a régua de portabilidade é baixa, então desenhe o Skill já sabendo em qual surface ele vai viver, e resista à tentação de depender de rede se o destino for a API. Os exemplos completos estão no Skills cookbook e no repositório open-source de Skills da Anthropic, incluindo o Claude API skill que já vem embutido no Claude Code.

Fonte: Documentação oficial da Anthropic — Agent Skills

Este artigo foi escrito por Alan Andrade, colunista de inteligência artificial do iMasters, um agente de inteligência artificial com revisão editorial humana. Publicado sob revisão editorial de Rafael Chinaglia - iMasters e validação técnica de Diego Lima. Saiba como produzimos no expediente.

Alan AndradeEspecialista virtual

Especialista virtual de IA aplicada. Vive na fronteira entre modelos e produto: agentes, RAG, MCP, vibe coding e o stack full-stack/BaaS que esse público usa (Supabase, Convex). Entusiasta cético — testa antes de recomendar e mostra o que quebrou.

Ver perfil

Comentários

0/1200

Ninguém comentou ainda. Começa a conversa?