Skills de IA com Vibecoding e Terminal · Capítulo 7 de 12 · 52 min
Projeto 1: Sua Primeira Skill Funcional
Construa do zero uma skill de auditoria SEO, com script Python, template Markdown e ativação real no Claude Code.
Este capítulo faz parte do curso gratuito Skills de IA com Vibecoding e Terminal.
Teoria sem execução é literatura. Nesta aula você vai construir a skill seo-audit do zero, instalar no seu ambiente e validar em uma URL real. A jornada toda leva 20 a 30 minutos e deixa você com a primeira skill do seu repertório -- algo que você pode reusar infinitamente e pode compartilhar.
Pré-requisitos atendidos nos módulos anteriores: Claude Code instalado, Python 3.11+ no PATH, terminal funcional, CLAUDE.md do projeto decente. Se algum desses itens falta, pause e volte -- skills não compensam falha de setup.
# Passo 1 -- Crie a estrutura da skill
mkdir -p ~/.claude/skills/seo-audit/{scripts,templates,tests}
cd ~/.claude/skills/seo-audit
# Passo 2 -- Abra o Claude Code e peça a estrutura inicial
claude 'Crie o SKILL.md da skill seo-audit. Frontmatter com
name: seo-audit, description: audita SEO tecnico de uma URL
verificando meta title, meta description, H1, H2, H3, imagens
sem alt, links quebrados e schema JSON-LD. Requirements: Python
3.11, requests, beautifulsoup4. No corpo inclua secoes Quando
usar, Passos (5 passos numerados), Criterios de sucesso,
Comando de teste.'O Claude Code vai gerar um SKILL.md razoável em 15 segundos. Ele vai acertar o essencial e errar detalhes -- descrição vaga, passos genéricos, critérios largos. É aqui que o trabalho humano entra. Leia o arquivo, edite com clareza, insira exemplos do seu contexto.
Ajustes típicos que melhoram muito a qualidade: 1) description começando com verbo forte e listando três sinônimos de intenção, 2) passo com comando exato, não 'execute o script', 3) critério de sucesso mensurável, não 'retornar relatório de qualidade'.
# Passo 3 -- Peca ao agente o script de auditoria
claude 'Crie scripts/audit.py que:
1. Recebe URL como argumento de linha de comando
2. Faz GET com User-Agent amigavel (Brasil GEO SEO Audit 1.0)
3. Extrai: meta title, meta description, canonical, robots,
todas as tags h1-h6, todas as imagens com src e alt,
todos os links e schema JSON-LD.
4. Retorna um JSON estruturado com essas informações e
um array de issues detectados (title ausente, h1 duplicado,
imagens sem alt com taxa > 30%, canonical divergente).
5. Salva o JSON em out/audit-<hostname>-<timestamp>.json
6. Trata timeout de 15s, erro 4xx/5xx e SSL invalido sem crashar.
Escreva com docstrings e sem dependencias externas alem de
requests e beautifulsoup4.'Enquanto o agente escreve o script, você escreve o template do relatório em templates/report.md. Um template bom tem placeholders claros entre chaves ({{url}}, {{title}}, {{issues_count}}), seções fixas e exemplos de preenchimento em um comentário HTML para orientar o agente.
Depois do script e do template prontos, o loop de validação é
- 01Rodar o script em uma URL conhecida (a sua própria landing page) e validar que o JSON sai correto.
- 01Pedir ao Claude Code 'use a skill seo-audit para auditar https://seu-dominio.com.br'. O agente deve detectar a skill, executar o fluxo e retornar o relatório preenchido.
- 01Se ele não encontrar a skill, revise a descrição do frontmatter. O problema quase sempre é descrição vaga.
# Passo 4 -- Teste de ativacao
# Abra nova sessão do Claude Code em qualquer diretorio
cd ~/qualquer/pasta
claude 'Audite o SEO tecnico de https://alexandrecaramaschi.com'
# Se a skill foi escrita corretamente, o agente:
# 1. Deteta seo-audit como relevante (Nivel 1)
# 2. Le SKILL.md completo (Nivel 2)
# 3. Executa scripts/audit.py (Nivel 3)
# 4. Preenche o template
# 5. Devolve sumario no chat
# Se nao detetar, execute /skills dentro do Claude Code
# para listar skills instaladas e confirmar que seo-audit
# aparece. Se nao aparecer, problema de path ou frontmatter.Commit sua skill no Git. Skills viram ativos da sua carreira. Crie um repositório pessoal chamado claude-skills e versione tudo que você construir. Você ganha histórico de evolução, portabilidade entre máquinas e pode publicar no ClawHub quando alguma skill amadurecer. Skills boas viram artefatos profissionais -- alguns freelancers da Brasil GEO cobram apenas para configurar o repertório inicial de skills do cliente.
Evite skills que fazem 'tudo'. Uma skill que audita SEO, gera schema, valida acentos e faz deploy é uma skill ruim -- nenhuma descrição consegue capturar a intenção certa. Quebre em quatro skills focadas. A divulgação progressiva só funciona quando cada skill tem um escopo nítido e uma description cirúrgica.
Segundo projeto da aula, agora de marketing puro: a skill briefing-campanha. Ela transforma "produto + objetivo" num briefing completo no modelo do time, com canal, público, mensagem, KPI por etapa do funil e hipóteses de teste. Diferente da seo-audit, ela não deve disparar sozinha: só roda quando alguém digita /briefing-campanha, porque cria arquivo e consome tempo de revisão.
---
name: briefing-campanha
description: Monta o briefing de uma campanha de mídia paga ou de conteúdo a partir de produto e objetivo, no modelo do time. Use quando pedirem briefing, brief de campanha ou plano de campanha.
disable-model-invocation: true
argument-hint: "[produto] [objetivo]"
arguments: [produto, objetivo]
allowed-tools: Read Write
---
# Briefing de campanha
Data de hoje: !`date +%Y-%m-%d`
## Entradas
- Produto: $produto
- Objetivo: $objetivo
Se faltar público, orçamento ou prazo, pergunte antes de escrever.
## Passos
1. Leia references/marca.md (tom de voz, termos proibidos, promessas vetadas).
2. Leia assets/modelo-briefing.md e preencha todas as seções.
3. Para cada canal (Google Ads, Meta, LinkedIn), proponha objetivo,
público, mensagem central e o KPI da etapa do funil.
4. Liste 3 hipóteses de teste com a métrica que decide cada uma.
5. Salve em briefings/<data>-<produto>.md e mostre um resumo de 5 linhas.
## Critério de pronto
- Nenhuma seção do modelo vazia
- Cada KPI com fonte de dado (GA4, plataforma de anúncios ou CRM)
- Nenhum termo da lista de proibidos de references/marca.mdCriar e usar a skill briefing-campanha
Use a pasta .agents/skills/ do projeto, montada no capítulo "Terminal e Claude Code: o Setup que Vai Servir para os Próximos Anos", para a mesma skill valer nos três terminais.
Passo 1: Crie .agents/skills/briefing-campanha/ com SKILL.md, references/marca.md e assets/modelo-briefing.md.
marca.md guarda tom de voz e lista de termos proibidos; modelo-briefing.md guarda as seções fixas (contexto, objetivo, público, canais, KPI, hipóteses, prazo).
Deu certo quando: A árvore tem os três arquivos e o name do frontmatter é igual ao nome da pasta.
Erro comum: Colar o guia de marca inteiro dentro do SKILL.md. Ele vai para references/ e só é lido quando a skill roda.
Passo 2: No Claude Code, rode /skills e confira se briefing-campanha aparece.
Skills novas em pastas que já existiam entram na hora; se a pasta .claude/skills foi criada com a sessão aberta, rode /reload-skills.
Deu certo quando: A skill aparece na lista com a description que você escreveu.
Erro comum: Ela não aparece porque o YAML não abre (aspas ou dois-pontos soltos). Rode claude plugin validate .claude/skills.
Passo 3: Chame com argumentos: /briefing-campanha "curso de GEO" "gerar 200 leads em 30 dias".
Aspas agrupam palavras num argumento só. $produto e $objetivo recebem os dois valores, e a linha com !`date` é trocada pela data antes de o modelo ler.
Deu certo quando: O agente pergunta o que falta (público, orçamento) antes de escrever, como o SKILL.md manda.
Erro comum: Esperar que a skill dispare sozinha: com disable-model-invocation: true, só a barra chama.
Passo 4: Revise o arquivo gerado em briefings/ contra o critério de pronto.
Confira KPI por etapa do funil (visita, cadastro, lead, venda), não só clique, e se cada KPI diz de onde vem o dado.
Deu certo quando: Nenhuma seção vazia, três hipóteses com métrica de decisão e nenhum termo proibido.
Erro comum: Aprovar briefing com "aumentar conversões" genérico. Peça para nomear a etapa e o número.
Passo 5: Teste a mesma pasta no Codex e no Gemini CLI.
No Codex, digite $briefing-campanha seguido de produto e objetivo na frase. No Gemini CLI, peça o briefing e aprove a ativação da skill quando ele perguntar.
Deu certo quando: Os dois seguem os passos e salvam o arquivo no mesmo modelo.
Erro comum: Campos exclusivos do Claude Code são ignorados fora dele: $produto e !`date` aparecem como texto. Escreva os valores na própria frase.
No fim você tem: Um briefing padronizado em menos de cinco minutos, com o mesmo modelo para toda a equipe e em qualquer terminal.
Coordenadora de mídia de uma agência com 12 clientes
Agência de marketing digital
Dor
Cada analista escrevia o briefing do seu jeito; metade chegava sem KPI por etapa do funil e a revisão tomava uma reunião por campanha.
Solução
Skill briefing-campanha versionada no repositório da agência, com modelo único, lista de termos proibidos por cliente em references/ e chamada manual por /briefing-campanha.
Resultado
Briefings no mesmo formato, revisão feita por checklist em vez de reunião e onboarding de analista novo reduzido a uma tarde.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
Estender a seo-audit para auditoria de GEO
A seo-audit deste capítulo cobre SEO técnico. Quatro checagens a mais preparam a página para ser lida e citada por buscadores com IA.
Passo 1: Leia o robots.txt e liste o que ele diz para GPTBot, ClaudeBot, PerplexityBot e Google-Extended.
Bloqueio desses robôs é decisão de negócio; a skill só precisa mostrar o estado atual.
Deu certo quando: O relatório traz uma linha por robô com permitido ou bloqueado.
Erro comum: Marcar bloqueio como erro automático. Registre como achado e deixe a decisão para o dono do site.
Passo 2: Confira se a resposta principal aparece nos primeiros 100 a 150 palavras da página.
Modelos de IA citam trechos curtos e autocontidos; resposta enterrada no quinto parágrafo raramente é citada.
Deu certo quando: O relatório mostra o primeiro parágrafo e diz se ele responde à pergunta do título.
Passo 3: Valide o JSON-LD: Organization ou Person, Article com datePublished e dateModified, FAQPage quando houver perguntas.
Deu certo quando: Cada tipo encontrado aparece com os campos obrigatórios presentes ou ausentes.
Erro comum: Data de atualização no schema diferente da data visível na página.
Passo 4: Acrescente as quatro checagens ao script e ao templates/report.md, e atualize a description com "checar GEO".
Deu certo quando: Pedir "checa o GEO desta página" ativa a seo-audit sem citar o nome dela.
No fim você tem: Uma auditoria única que responde a duas perguntas: a página está bem para o Google e está pronta para ser citada por IA?

Se a figura ultrapassar a área visível, deslize para os lados. Pelo teclado, foque a figura e use as setas.
Laboratório de UTMs: auditar antes de corrigir. No cenário fictício Escola Horizonte, a mesma campanha recebe links com Google e google, e um anúncio fica sem utm_campaign. A primeira entrega da skill será um relatório de diferenças. Se o agente normalizar tudo sem perguntar, pode inventar uma campanha ou misturar nomes que o time usa com sentidos diferentes.
Executar a auditoria de UTMs com uma amostra fictícia
Use uma pasta nova chamada laboratorio-marketing. Os scripts usam apenas a biblioteca padrão do Python 3.11 ou posterior e não acessam a internet.
Passo 1: Prepare os arquivos em uma pasta separada.
Crie entradas/, scripts/ e a pasta da skill. Salve os três blocos a seguir como links-demo.csv, auditar_utm.py e SKILL.md. No Claude Code, use .claude/skills/auditoria-utm-csv/; no Codex, .agents/skills/auditoria-utm-csv/. Execute os comandos na raiz laboratorio-marketing.
Deu certo quando: A amostra tem três anúncios fictícios e só o domínio example.com.
Passo 2: Confira a amostra manualmente antes da IA.
anuncio-01 está no padrão do exercício; anuncio-02 usa inicial maiúscula; anuncio-03 não informa campanha.
Deu certo quando: Você sabe quais dois achados o programa deve produzir.
Passo 3: Execute o script e confira o resultado.
Rode python scripts/auditar_utm.py entradas/links-demo.csv. No PowerShell, confira $LASTEXITCODE; no Bash, echo $?.
Deu certo quando: JSON com linhas igual a 3, dois achados e código de saída 1.
Erro comum: Código 1 com relatório significa revisão necessária; traceback indica arquivo, formato ou caminho errado.
Passo 4: Invoque a skill e peça apenas o relatório.
No Claude Code, /auditoria-utm-csv. No Codex, $auditoria-utm-csv. Peça que o agente diferencie normalização de valor e dado ausente.
Deu certo quando: A proposta de anuncio-02 é google; anuncio-03 pede a campanha ao responsável.
Passo 5: Revise e só então produza uma cópia corrigida.
Neste cenário, o responsável confirma curso_outubro para anuncio-03. Salve manualmente entradas/links-revisados.csv e rode o mesmo script nesse arquivo.
Deu certo quando: A cópia gera achados vazios e saída 0; o original continua com os dois problemas.
Erro comum: Zero achados valida somente a convenção de UTM. Não comprova clique, visita, cadastro ou atribuição no GA4.
No fim você tem: Você entrega o CSV original, a proposta por ID e a cópia revisada, com resultados reproduzíveis.
id,url
anuncio-01,https://example.com/curso?utm_source=google&utm_medium=cpc&utm_campaign=curso_outubro
anuncio-02,https://example.com/curso?utm_source=Google&utm_medium=cpc&utm_campaign=curso_outubro
anuncio-03,https://example.com/curso?utm_source=linkedin&utm_medium=paid_social
# scripts/auditar_utm.py
import csv
import json
import re
import sys
from pathlib import Path
from urllib.parse import parse_qs, urlsplit
obrigatorios = ("utm_source", "utm_medium", "utm_campaign")
achados = []
with Path(sys.argv[1]).open(encoding="utf-8-sig", newline="") as arquivo:
linhas = list(csv.DictReader(arquivo))
for linha in linhas:
parametros = parse_qs(urlsplit(linha["url"]).query, keep_blank_values=True)
for campo in obrigatorios:
valores = parametros.get(campo, [])
if not valores or not valores[0].strip():
motivo = "ausente"
elif len(valores) != 1:
motivo = "repetido"
elif not re.fullmatch(r"[a-z0-9_]+", valores[0]):
motivo = "fora_do_padrao_do_laboratorio"
else:
continue
achados.append({"id": linha["id"], "campo": campo, "motivo": motivo})
print(json.dumps({"linhas": len(linhas), "achados": achados}, ensure_ascii=False, indent=2))
sys.exit(1 if achados else 0)
---
name: auditoria-utm-csv
description: Audita parâmetros UTM de um CSV fictício de anúncios e propõe correções por ID. Use para revisar links antes de uma campanha; não use para editar anúncios ou consultar contas.
---
# Auditar UTMs antes de alterar
1. Confirme que entradas/links-demo.csv contém somente dados fictícios.
2. Leia scripts/auditar_utm.py e a convenção abaixo antes de executar.
3. Execute python scripts/auditar_utm.py entradas/links-demo.csv.
4. Trate saída 1 com JSON como achados; traceback é falha de execução.
5. Entregue no chat uma tabela: ID, campo, achado, proposta e justificativa.
6. Não edite o CSV nem anuncie que a correção já foi aplicada.
7. Aguarde revisão das propostas. Nunca invente o nome de uma campanha.
Convenção deste exercício: utm_source, utm_medium e utm_campaign
obrigatórios; valores com minúsculas ASCII, números e sublinhado.
Essa é uma convenção do time fictício, não uma exigência universal do GA4.
Pronto: todas as linhas avaliadas e arquivo original preservado.
# PowerShell: execute antes e depois da conversa com o agente
Get-FileHash -LiteralPath entradas/links-demo.csv -Algorithm SHA256
python scripts/auditar_utm.py entradas/links-demo.csv
$LASTEXITCODE
# Após criar e revisar a cópia
python scripts/auditar_utm.py entradas/links-revisados.csv
$LASTEXITCODEO hash SHA-256 do original deve ser igual antes e depois da conversa. O script não chama serviços pagos. A conversa com o agente usa a assinatura ou os créditos configurados na ferramenta; confirme a origem antes de rodar em lote. Uma amostra pequena evita transmitir listas de clientes e mantém o relatório revisável.
Primeira skill funcionando: estrutura no disco, SKILL.md bem escrito, script Python executável, template de relatório e ativação validada em URL real. Este é o padrão que vai se repetir em todas as próximas skills.
Seu caderno neste capítulo
Abrir o caderno completoSelecione um trecho do capítulo para destacar ou anotar. Nos vídeos e áudios, use Anotar este momento. No teclado, selecione com Shift e as setas e use Alt+Shift+D para destacar ou Alt+Shift+N para anotar.
Salvo neste navegador. Entre na sua conta para levar o caderno a outros aparelhos.
Entre na sua conta para compartilhar o que aprendeu e convidar alguém para estudar com você.
Conexões deste capítulo
Veja o que estudar antes e para onde seguir depois, explore os conceitos e compare abordagens em outros cursos. Sugestões marcadas como “sugerido pelo grafo” vêm dos assuntos em comum, não do índice do curso.
Estude antes
- CursoClaude Code CLI: Programação com IA
- Veja o que o Claude Code faz antes de instalarsugerido pelo grafoApresenta o conceito “Claude Code”, usado em “Projeto 1: Sua Primeira Skill Funcional”.
- As linhas que ninguém orça: build, medição e logsugerido pelo grafoApresenta o conceito “Build”, usado em “Projeto 1: Sua Primeira Skill Funcional”.
- CursoSetup Completo: do zero ao Claude Codesugerido pelo grafo5 capítulos de “Skills de IA com Vibecoding e Terminal” usam conceitos apresentados em “Setup Completo: do zero ao Claude Code”.
Depois, siga para
- CursoFrontends com Vibecodingsugerido pelo grafo9 capítulos de “Frontends com Vibecoding” usam conceitos apresentados em “Skills de IA com Vibecoding e Terminal”.
- CursoPrompt Engineering para Executivossugerido pelo grafo3 capítulos de “Prompt Engineering para Executivos” usam conceitos apresentados em “Skills de IA com Vibecoding e Terminal”.
- CursoRLM 2027sugerido pelo grafo2 capítulos de “RLM 2027” usam conceitos apresentados em “Skills de IA com Vibecoding e Terminal”.
Conceitos deste capítulo
O mesmo assunto em outros cursos
- Setup de Vibecoding no MacCasos de uso de marketing digital, passo a passoExaminar conexões de Casos de uso de marketing digital, passo a passo
- Agentes de IA Autônomos: Do Conceito à ProduçãoFerramentas e function callingExaminar conexões de Ferramentas e function calling
- Vibecoding para SEOOrquestrando Tudo: Seu Toolkit SEO CompletoExaminar conexões de Orquestrando Tudo: Seu Toolkit SEO Completo
- Claude Code CLI: Programação com IAOperar uma semana real com IA e medir o que mudouExaminar conexões de Operar uma semana real com IA e medir o que mudou
Voltar ao capítulo anterior: Anatomia de uma Skill: Divulgação Progressiva em Três Níveis
Leve uma ideia para a prática
Escolha uma atividade no painel e volte a este curso quando quiser.
Atividades e evolução ficam reunidas no painel da sua conta.