⚡ AutomationsAI|Portal de Cursos →

Verificando acesso...

MÓDULO 2.2

🧩 Skills, sub-agents e MCP no Claude Code

Onde mora a inteligência customizada do agente — skills bem escritas, sub-agents que disparam sozinhos, MCP servers e a injeção dinâmica que só o Claude tem.

7
Tópicos
35
Minutos
Inter.
Nível
Prático
Tipo

🎯O que você ganha aqui

Sair sabendo escrever skill que dispara sozinha, sub-agent que o Claude principal delega na hora certa, e entender as features exclusivas do Claude Code (injeção dinâmica, allowed-tools) que NÃO existem no Codex.

Conteúdo detalhado

1

📦 Anatomia de uma skill

Skill no Claude Code é uma pasta em .claude/skills/<nome>/ com estrutura convencionada. O coração é SKILL.md, mas tem mais peças com função clara.

Estrutura completa

.claude/skills/minha-skill/
├── SKILL.md              ← obrigatório (frontmatter + body)
├── scripts/             ← scripts auxiliares chamáveis
│   ├── check.sh
│   └── format.py
├── references/          ← docs profundas (lazy-load)
│   ├── api-spec.md
│   └── examples.md
└── assets/              ← imagens, binários, templates
    └── template.html

SKILL.md completo (exemplo real)

---
name: revisar-pr
description: Use quando o usuário pedir pra revisar uma PR ou diff. Triggers: "revisa PR", "review pull request", "olha o diff".
allowed-tools: Bash(git diff:*), Bash(gh pr:*), Read, Grep, Glob
disable-model-invocation: false
---

# Revisar PR

## Passo a passo

1. Identifica a PR (número via $ARGUMENTS ou \`gh pr list\`)
2. Lê diff completo com \`gh pr diff <numero>\`
3. Para cada arquivo mudado, verifica:
   - Bugs de correção (não estilo)
   - Edge cases não tratados
   - Vulnerabilidades comuns
4. Consulta \`references/security-checklist.md\` se tocar em auth
5. Retorna findings categorizados por severity (high/med/low)

## Referências
- Checklist completo: \`references/security-checklist.md\`
- Padrões do repo: \`references/repo-conventions.md\`

✓ Skill bem feita

  • • Body curto e direto (passo-a-passo)
  • • Detalhes em references/ (lazy)
  • allowed-tools restrito ao necessário
  • • description com triggers do mundo real
  • • Scripts pra ações determinísticas

✗ Anti-pattern

  • • Body de 200KB com TUDO inline
  • • description só repetindo o nome
  • • Sem allowed-tools (pode tudo)
  • • Scripts no body em vez de scripts/
  • • Misturar várias responsabilidades

Conceitos-chave

Frontmatter
name + description min
Body curto
Passo-a-passo, < 5KB
references/ lazy
Carregado on-demand
scripts/ determ.
Ações sem LLM
2

🎯 Description — a arte do gatilho

A maior causa de "skill não funciona" é description ruim. Não é bug — é match semântico falhando. Claude lê descriptions de todas skills e escolhe a melhor pro contexto atual. Sua description compete por atenção.

✗ Description ruim

description: Skill de revisão

→ Vaga. Não diz quando usar. Não tem gatilho. Skill morre invisível.

✓ Description boa

description: Use quando o usuário pedir
pra revisar PR/diff. Triggers: "revisa
PR #123", "review da branch", "olha o
diff", "code review".

→ Diz quando. Lista triggers reais. Match acerta.

Receita pra description de qualidade

1.
"Use when..." — começa pelo gatilho situacional
2.
Lista trigger phrases reais — frases que o usuário REALMENTE escreve
3.
Exemplos — 1-2 cenários concretos
4.
Evita repetir o nome — description "skill X faz X" é desperdício
5.
Diz NÃO usar quando — se útil, deixa claro o anti-caso

💡Teste empírico

Depois de escrever, abre Claude Code e simula 5 prompts reais que deveriam ativar a skill. Se ativa em 4/5, ok. Se ativa em 2/5, description está fraca. Itera.

Conceitos-chave

Semantic match
Claude lê e decide
"Use when..."
Padrão de gatilho
Trigger phrases
Frases do usuário
Teste empírico
5 prompts reais
3

👤 Sub-agents auto-invocáveis

Sub-agent é uma persona especializada com system prompt próprio, tool surface restrita e contexto isolado. Claude principal lê a description e DELEGA — sozinho, sem você pedir nominal. É a feature que mais diferencia Claude do Codex.

Exemplo — .claude/agents/code-reviewer.md

---
name: code-reviewer
description: Use proactively when the user finishes implementing a feature or before merging a PR. Specializes in catching correctness bugs.
tools: Read, Grep, Glob, Bash(git diff:*)
model: claude-opus-4-6
---

You are a senior code reviewer focused on correctness.

## Your role
- Read the diff carefully
- Flag correctness bugs (NOT style — linter handles that)
- Check edge cases (null, empty, off-by-one, race conditions)
- Note security risks (SQLi, XSS, path traversal, auth bypass)

## Output format
A numbered list of findings:
1. **[severity]** file:line — what's wrong, why, suggested fix

Be terse. No fluff.
🎯

Isolamento de contexto

Sub-agent abre janela própria — não polui contexto do principal. Devolve só o resultado.

Paralelismo

Claude pode disparar vários sub-agents em paralelo (Task tool). Útil pra research em ângulos múltiplos.

🔬

Modelo dedicado

Cada sub-agent pode usar modelo diferente. Haiku pra busca, Opus pra análise. Economia + qualidade.

Description com "proactively" — o segredo

A palavra "proactively" na description é um sinal forte pro Claude principal: "use isto SEM o usuário pedir, quando o contexto bater". Sem ela, o sub-agent quase nunca dispara sozinho.

description: Use proactively when... // dispara sozinho
description: Use when the user explicitly asks... // só sob pedido

Conceitos-chave

Auto-dispatch
Por description
Task tool
Mecanismo de delega
Tool subset
tools: [a, b, c]
"proactively"
Palavra-chave
4

🔌 MCP servers — declaração e uso

MCP server expõe ferramentas externas ao Claude. Declarado em .mcp.json (projeto, vai pro git) ou ~/.claude.json (global). Cada tool exposta vira mcp__servidor__nome-tool.

.mcp.json (projeto)

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" }
    },
    "postgres": {
      "command": "uvx",
      "args": ["mcp-server-postgres", "--db-url", "${DATABASE_URL}"]
    },
    "linear": {
      "type": "http",
      "url": "https://mcp.linear.app/sse",
      "headers": { "Authorization": "Bearer ${LINEAR_TOKEN}" }
    }
  }
}

Allowlist em settings.json

{
  "enabledMcpjsonServers": ["github", "postgres"],   // só estes ativam
  "permissions": {
    "allow": [
      "mcp__github",                          // libera tudo do server
      "mcp__postgres__query"                  // libera tool específica
    ]
  }
}

📦 stdio transport

Server roda como processo filho via stdin/stdout. Mais comum pra MCP local.

Exemplo: npm/uvx que sobe processo, Claude conversa via pipe.

🌐 HTTP/SSE transport

Server roda como service remoto. Claude conecta via HTTP com Server-Sent Events.

Exemplo: Linear, Slack, serviços SaaS com endpoint MCP oficial.

Conceitos-chave

.mcp.json
Projeto, vai pro git
~/.claude.json
Global
stdio vs HTTP
Dois transports
Naming
mcp__server__tool
5

🎨 Injeção dinâmica (backtick-bang) — exclusiva do Claude

Sintaxe específica do Claude Code: dentro de SKILL.md ou commands, código entre crase-bang (`!comando`) é executado pelo shell ANTES da skill chegar no LLM. O resultado entra direto no prompt — sem tool call adicional.

Exemplo prático

---
name: branch-status
description: Mostra contexto da branch atual antes de propor próxima ação
---

# Status da branch

Branch atual: `!git branch --show-current`
Último commit: `!git log -1 --oneline`

Diff vs main:
`!git diff main...HEAD --stat`

Com base no acima, sugira o próximo passo.

Quando você invoca /branch-status, Claude já recebe um SKILL.md preenchido com os outputs reais. Não precisa pedir "rode git status" — já está lá.

✓ Bons usos

  • • Snapshot do estado (git, versão, ENV)
  • • Listar arquivos/branches relevantes
  • • Pegar último log/erro
  • • Injetar timestamp/data
  • • Resultado de comando idempotente

✗ Cuidado

  • • Comandos destrutivos (rm, drop)
  • • Input do usuário interpolado direto (injection)
  • • Comandos lentos (segura skill por segundos)
  • • Output gigante (estoura contexto)
  • • Side effects que mudam estado

⚠️Cuidado portabilidade

Backtick-bang NÃO existe no Codex. Skill que depende disso vai falhar lá. Polyskill reescreve como prosa de fallback ("rode git status e analise o resultado") quando compila pro Codex — mas perde a injeção real.

Conceitos-chave

Build-time
Roda antes do prompt
Sem tool call
Já vem no contexto
Não portável
Só Claude tem
Polyskill cobre
Prosa de fallback
6

🚦 disable-model-invocation e allowed-tools

Dois campos do frontmatter que dão controle fino sobre quando e como a skill roda. Essencial pra skills perigosas ou focadas.

🔒 disable-model-invocation

disable-model-invocation: true

Impede auto-trigger. Só roda quando você invoca explicitamente (/nome-skill).

Quando usar: skills destrutivas (drop, deploy, push), skills que custam (chamam API paga), skills que SÓ você invoca consciente.

🛡️ allowed-tools

allowed-tools: Read, Grep, Bash(git:*)

Restringe quais ferramentas a skill pode usar. Princípio do menor privilégio.

Quando usar: skill de leitura nunca deveria escrever, skill de análise nunca deveria abrir terminal. Restringe.

💡Combo de segurança

Pra skill perigosa: disable-model-invocation: true + allowed-tools ultra-restrito + descrição com aviso explícito. Garantia tripla.

Conceitos-chave

Opt-in invoke
disable-model-invoke
Tool surface
allowed-tools
Least privilege
Mínimo necessário
Model override
model: haiku
7

🛍️ Plugins e marketplace

Plugin é um pacote distribuível: agrupa skills + agents + commands + hooks em um único bundle versionado. É como você consome trabalho dos outros (claude-mem, context-mode, superpowers, etc.) e publica o seu.

plugin.json — manifesto

{
  "name": "meu-plugin",
  "version": "1.2.0",
  "description": "Conjunto de skills pra refatorar TypeScript",
  "author": "@meu-handle",
  "skills": ["./skills/ts-refactor", "./skills/ts-test-gen"],
  "agents": ["./agents/ts-reviewer.md"],
  "commands": ["./commands/refactor.md"],
  "hooks": [{ "event": "PostToolUse", "matcher": "Edit", "command": "./scripts/format.sh" }]
}
📦

Namespace

Skills do plugin viram plugin:skill-name pra evitar colisão.

🏪

Marketplace

Index de plugins (marketplace.json). Instala via /plugins.

🔄

Versionamento

npm-style semver. Atualiza via marketplace.

🦜Polyskill como plugin

Polyskill se distribui como plugin. Você instala uma vez, ganha o CLI + a meta-skill que dirige o CLI por linguagem natural. Plugin é a forma moderna de distribuir.

Conceitos-chave

plugin.json
Manifesto do bundle
marketplace.json
Index público
plugin:skill
Namespace
Semver
Versionamento

🎯Resumo do módulo

Skill = SKILL.md + scripts/ + references/ + assets/ — body curto, detalhe lazy.
Description boa = "use when" + triggers reais — testa empiricamente.
Sub-agents auto-disparam com "proactively" — contexto isolado, modelo dedicado.
MCP via .mcp.json (projeto) ou ~/.claude.json (global) — stdio ou HTTP.
Backtick-bang injeta output de shell no prompt — exclusivo Claude, NÃO portável.
disable-model-invocation + allowed-tools = controle fino — combo de segurança.
Plugins distribuem skills + agents + commands + hooks — versionados, namespaced.

Próxima trilha:

T3 — Anatomia do Codex (AGENTS.md, .codex/, .agents/, openai.yaml)