🎯Lo que obtienes aquí
Salir sabiendo escribir una skill que se active sola, un sub-agent al que Claude delegue en el momento adecuado, y entender las funciones exclusivas de Claude Code (inyección dinámica, allowed-tools) que NO existen en Codex.
Contenido detallado
📦 Anatomía de una skill
La skill en Claude Code es una carpeta en .claude/skills/<nome>/ con una estructura convencional. El corazón es SKILL.md, pero hay más piezas con una función clara.
Estructura 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 (ejemplo 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 bien hecha
- • Body breve y directo (paso a paso)
- • Detalles en
references/(lazy) - •
allowed-toolsrestringido a lo necesario - • description con triggers del mundo real
- • Scripts para acciones deterministas
✗ Antipatrón
- • Body de 200KB con TODO incluido
- • description que solo repite el nombre
- • Sin allowed-tools (puede hacer todo)
- • Scripts en el body en vez de
scripts/ - • Mezclar varias responsabilidades
Conceptos clave
name + description min
Paso a paso, < 5KB
Se carga bajo demanda
Acciones sin LLM
🎯 Description — el arte del disparador
La causa más común de que una "skill no funcione" es description deficiente. No es un bug: falla la coincidencia semántica. Claude lee las descripciones de todas las skills y elige la que mejor se ajusta al contexto actual. Tu descripción compite por atención.
✗ Description deficiente
description: Skill de revisão
→ Vaga. No indica cuándo usarla. No tiene un disparador. La skill queda invisible.
✓ Buena description
description: Use quando o usuário pedir pra revisar PR/diff. Triggers: "revisa PR #123", "review da branch", "olha o diff", "code review".
→ Indica cuándo. Lista triggers reales. Match acierta.
Receta para una description de calidad
💡Prueba empírica
Después de escribir, abre Claude Code y simula 5 prompts reales que deberían activar la skill. Si se activa en 4/5, está bien. Si se activa en 2/5, la descripción es débil. Itera.
Conceptos clave
Claude lee y decide
Estándar de activación
Frases del usuario
5 prompts reales
👤 Sub-agents autoinvocables
Un subagente es un persona especializada con su propio system prompt, una superficie de herramientas restringida y un contexto aislado. Claude principal lee la description y DELEGA — por sí solo, sin que se lo pidas expresamente. Es la función que más diferencia a Claude de Codex.
Ejemplo — .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.
Aislamiento de contexto
El sub-agent abre su propia ventana; no contamina el contexto del agente principal. Devuelve solo el resultado.
Paralelismo
Claude puede ejecutar varios sub-agents en paralelo (Task tool). Es útil para investigar desde varios ángulos.
Modelo dedicado
Cada sub-agent puede usar un modelo diferente. Haiku para búsquedas, Opus para análisis. Ahorro + calidad.
Description con «proactively»: el secreto
La palabra "proactively" en la description es una señal fuerte para Claude principal: "usa esto SIN que el usuario lo pida, cuando el contexto coincida". Sin ella, el sub-agent casi nunca se activa por sí solo.
description: Use proactively when... // dispara sozinho description: Use when the user explicitly asks... // só sob pedido
Conceptos clave
Por descripción
Mecanismo de delegación
tools: [a, b, c]
Palabra clave
🔌 MCP servers — declaración y uso
El servidor MCP expone herramientas externas a Claude. Se declara en .mcp.json (proyecto, va al git) o ~/.claude.json (global). Cada herramienta expuesta se convierte en mcp__servidor__nome-tool.
.mcp.json (proyecto)
{
"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}" }
}
}
}
Lista de permitidos en settings.json
{
"enabledMcpjsonServers": ["github", "postgres"], // só estes ativam
"permissions": {
"allow": [
"mcp__github", // libera tudo do server
"mcp__postgres__query" // libera tool específica
]
}
}
📦 Transporte stdio
El server se ejecuta como proceso hijo mediante stdin/stdout. Es lo más común para MCP local.
Ejemplo: npm/uvx que inicia un proceso, Claude conversa mediante pipe.
🌐 Transporte HTTP/SSE
El server se ejecuta como servicio remoto. Claude se conecta mediante HTTP con Server-Sent Events.
Ejemplo: Linear, Slack, servicios SaaS con endpoint MCP oficial.
Conceptos clave
Proyecto, va al git
Global
Dos transports
mcp__server__tool
🎨 Inyección dinámica (backtick-bang) — exclusiva de Claude
Sintaxis específica de Claude Code: dentro de SKILL.md o commands, código entre crase-bang (`!comando`) se ejecuta en el shell ANTES de que la skill llegue al LLM. El resultado se incorpora directamente al prompt, sin una llamada adicional a una herramienta.
Ejemplo práctico
--- 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.
Cuando invocas /branch-status, Claude ya recibe un SKILL.md completado con los outputs reales. No hace falta pedir "ejecuta git status": ya está ahí.
✓ Buenos usos
- • Instantánea del estado (git, versión, ENV)
- • Listar archivos/branches relevantes
- • Obtener el último log/error
- • Inyectar timestamp/fecha
- • Resultado de un comando idempotente
✗ Cuidado
- • Comandos destructivos (rm, drop)
- • Entrada del usuario interpolada directamente (inyección)
- • Comandos lentos (mantiene la skill ocupada durante segundos)
- • Output enorme (desborda el contexto)
- • Efectos secundarios que cambian el estado
⚠️Cuidado con la portabilidad
Backtick-bang NO existe en Codex. La skill que depende de esto fallará allí. Polyskill lo reescribe como prosa de respaldo ("ejecuta git status y analiza el resultado") cuando compila para Codex, pero pierde la inyección real.
Conceptos clave
Ejecuta antes del prompt
Ya viene en el contexto
Solo Claude tiene
Prosa de respaldo
🚦 disable-model-invocation y allowed-tools
Dos campos del frontmatter que dan control detallado sobre cuándo y cómo se ejecuta la skill. Esencial para skills peligrosas o especializadas.
🔒 disable-model-invocation
disable-model-invocation: true
Impide el auto-trigger. Solo se ejecuta cuando lo invocas explícitamente (/nome-skill).
Cuándo usar: skills destructivas (drop, deploy, push), skills que tienen un costo (llaman a una API paga), skills que SOLO tú invocas conscientemente.
🛡️ allowed-tools
allowed-tools: Read, Grep, Bash(git:*)
Restringe qué herramientas puede usar la skill. Principio de mínimo privilegio.
Cuándo usar: una skill de lectura nunca debería escribir, una skill de análisis nunca debería abrir la terminal. Restringe.
💡Combo de seguridad
Para una skill peligrosa: disable-model-invocation: true + allowed-tools ultrarestrictivo + descripción con aviso explícito. Garantía triple.
Conceptos clave
disable-model-invoke
allowed-tools
Lo mínimo necesario
model: haiku
🛍️ Plugins y marketplace
Plugin es un paquete distribuible: agrupa skills + agents + commands + hooks en un único bundle versionado. Así consumes el trabajo de otras personas (claude-mem, context-mode, superpowers, etc.) y publicas el tuyo.
plugin.json — manifiesto
{
"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
Las Skills del plugin se convierten en plugin:skill-name para evitar colisiones.
Marketplace
Índice de plugins (marketplace.json). Instala mediante /plugins.
Control de versiones
semver al estilo de npm. Se actualiza mediante marketplace.
🦜Polyskill como plugin
Polyskill se distribuye como plugin. Lo instalas una vez y obtienes el CLI + la metaskill que dirige el CLI mediante lenguaje natural. El plugin es la forma moderna de distribuir.
Conceptos clave
Manifiesto del bundle
Índice público
Namespace
Control de versiones
🎯Resumen del módulo
Siguiente ruta:
T3 — Anatomía de Codex (AGENTS.md, .codex/, .agents/, openai.yaml)