Blog · 6 de julio de 2026

Claude Code: guía práctica de marketplaces, plugins y hooks

Domina cómo extender Claude Code: plugins, subagentes, hooks y el marketplace oficial para llevar tus workflows de desarrollo al siguiente nivel.

🔥 ¿Por qué debe importarte Claude Code hoy?

¿Te imaginas delegar tareas repetitivas de ingeniería a agentes especializados y que, además, puedas instalarlos como si fueran extensiones? Claude Code ya lo permite: plugins, subagentes (subagents), hooks y un marketplace para compartir y reutilizar componentes. Esto cambia la forma en que automatizas revisiones, formateo, despliegues y flujos de trabajo CI/CD. Actualizado a 6 de julio de 2026.

¿No es mejor aprovechar componentes probados que reinventar la rueda cada vez?


🔎 Contexto claro: qué es cada pieza y por qué importa

¿Listo para ver cómo combinarlos en proyectos reales?


🛠 Desarrollo práctico: pasos concretos para empezar

✅ 1) Instalar Claude Code y verificar versión

Ejecuta la guía oficial (comprueba docs antes de correr instaladores). Por ejemplo, en muchos entornos Claude Code se instala con un instalador nativo (consulta la URL oficial). Revisa la versión disponible y el canal (Pro, Team, Enterprise) porque algunas capacidades empresariales pueden variar con el plan. (techcrunch.com)

✅ 2) Explora plugins locales y del marketplace

# Lista plugins en Claude Code
claude code plugin list
# (Este comando puede variar; verifica `claude code --help` si tu versión lo cambia)
# Sintaxis de ejemplo — revisa los nombres exactos en tu versión
claude code plugin install official/example-plugin

Consejo: Claude Code copia los plugins al cache local (~/.claude/plugins/cache) para revisión y seguridad. Revisa los archivos del plugin antes de confiarle permisos. (code.claude.com)

✅ 3) Crear un plugin básico (estructura mínima)

Un plugin agrupa directorios como agents/, skills/, hooks/, mcp/. A continuación un ejemplo mínimo de estructura y archivo plugin.json (formato referencial — valida con la docs oficial antes de publicar).

{
  "name": "mi-plugin-ejemplo",
  "version": "0.1.0",
  "description": "Plugin que añade un hook de formato y un subagent básico",
  "directories": ["agents","skills","hooks"]
}

Guarda esto en la raíz del plugin y añade los subdirectorios con la lógica.

✅ 4) Definir un subagent (archivo YAML/JSON de configuración)

Ejemplo de subagent que usa un modelo específico y carga skills:

# .claude/agents/refactor-agent.yaml
name: refactor-agent
model: sonnet-5
preload_skills:
  - code-analysis
  - unit-test-generator
timeout_seconds: 300
# Estos campos están basados en la referencia oficial; verifica el esquema válido en la docs.

Cuando el agente principal invoque este subagent, Claude Code resolverá el modelo según el orden documentado y cargará las skills precargadas. (code.claude.com)

✅ 5) Hooks: automatizar after-edit, lint, CI

Ejemplo de hook que corre ESLint después de una edición de archivos JavaScript (hook local script):

#!/usr/bin/env bash
# .claude/hooks/post-edit-eslint.sh
# Entrada: variables de entorno y JSON stdin con información del evento
# SALIDA: código 0 para éxito, distinto de 0 para fallo y detener flujo

repo_root="${CLAUDE_REPO_ROOT:-.}"
cd "$repo_root" || exit 1
# Instalación local asumida; en CI usar node_modules/.bin/eslint
npx eslint "src/**/*.js" --fix
exit $?

Registra el hook en el manifest del plugin (ejemplo resumido):

{
  "hooks": [
    { "event": "PostFileEdit", "script": "hooks/post-edit-eslint.sh" }
  ]
}

Los hooks reciben variables de entorno exportadas por Claude Code y pueden usar JSON stdin con el payload del evento. Revisa las variables expuestas (CLAUDE_PLUGIN_ROOT, CLAUDE_REPO_ROOT, etc.). (code.claude.com)


💡 Ejemplos aplicados con código (3 ejemplos funcionales)

Ejemplo 1 — Hook HTTP que notifica un canal Slack (Node.js)

Archivo: hooks/http-notify.js

// hooks/http-notify.js
// Este script se puede invocar como hook HTTP por Claude Code
// Requiere: NODE env con SLACK_WEBHOOK_URL

const https = require('https')

const webhook = process.env.SLACK_WEBHOOK_URL
if (!webhook) {
  console.error('No SLACK_WEBHOOK_URL set')
  process.exit(2)
}

const payload = JSON.stringify({ text: 'Claude Code: evento de hook recibido ✅' })

const url = new URL(webhook)
const options = { method: 'POST', hostname: url.hostname, path: url.pathname + url.search }

const req = https.request(options, res => {
  res.on('data', () => {})
  res.on('end', () => process.exit(res.statusCode >= 400 ? 3 : 0))
})
req.on('error', e => { console.error(e); process.exit(4) })
req.write(payload)
req.end()

Registra el hook como HTTP en el manifest para un evento como SubagentFinished.

Ejemplo 2 — Subagent en JSON que ejecuta pruebas y devuelve resultados (invocable desde CLI)

{
  "name": "test-runner",
  "model": "sonnet-5",
  "preload_skills": ["test-runner-skill"],
  "entrypoint": "skills/run-tests.js",
  "timeout_seconds": 600
}

Y un skill simple skills/run-tests.js que ejecuta pytest o npm test según el repo.

// skills/run-tests.js
const { execSync } = require('child_process')
try {
  // Detecta pytest o npm test
  execSync('pytest -q', { stdio: 'inherit' })
  process.exit(0)
} catch (e) {
  try { execSync('npm test', { stdio: 'inherit' }); process.exit(0) } catch (err) { process.exit(1) }
}

El subagent devuelve código de salida que Claude Code puede usar para decidir pasos siguientes.

Ejemplo 3 — Plugin simple que añade slash-commands para crear tickets

commands/create-ticket.sh (bash que usa GitHub CLI para crear un issue):

#!/usr/bin/env bash
# commands/create-ticket.sh
# Parsea stdin JSON proporcionado por Claude Code
read -r payload
# Aquí parsearías el JSON (jq es práctico)
summary=$(echo "$payload" | jq -r '.summary')
repo="owner/repo"
if [ -z "$summary" ] || [ "$summary" = "null" ]; then
  echo "No summary provided"; exit 2
fi
# Usa gh CLI para crear issue; requiere gh auth previa
gh issue create --repo "$repo" --title "$summary" --body "Creado por Claude Code via plugin"

Registra como una slash command en el plugin para que el agent pueda invocarla desde la conversación.


📊 Resumen visual: comparación rápida

🔧 Concepto ¿Dónde vive? ¿Cuándo usarlo? Ejemplo práctico
Plugin Carpeta raíz del plugin (installable) Reutilizar colecciones de skills/hooks/subagents Plugin que agrega CI+lint automáticos.
Subagent .claude/agents/ o dentro del plugin Tareas especializadas con modelo/config propio Subagent para generación de tests unitarios.
Hook hooks/ en plugin o script local Ejecutar acciones ante eventos (PostEdit, SubagentFinished) Ejecutar ESLint o notificar Slack.
MCP server Binaries/servicio local Integraciones complejas, LSP-like servers Servidor que expone un tool stateful.

(Tabla basada en la documentación y guías oficiales de Claude Code). (code.claude.com)


⚠️ Advertencias honestas: riesgos y cuándo no usarlo


✅ Buenas prácticas y patrones recomendados


🚀 Próximos pasos concretos (tu checklist)

  1. Revisa la documentación oficial de Claude Code (docs.claude.com) y la sección de plugins antes de empezar. (code.claude.com)
  2. Crea un plugin mínimo con un hook que ejecute un linter en tu repo y pruébalo en un branch aislado.
  3. Diseña un subagent para una tarea repetitiva (p. ej. generar tests) y configúralo con timeouts y límites.
  4. Publica internamente en tu equipo antes de subir al marketplace público.

¿Quieres un ejemplo de plugin listo para clonar y probar en 15 minutos? Yo lo tengo en mi repositorio de ejemplos (recuerda revisar la versión de Claude Code antes de ejecutar). Si no puedes correr algo, revisa la docs y verifica comandos exactos porque la CLI y nombres de eventos pueden cambiar entre versiones. (code.claude.com)


📌 Fuentes y documentación (selección)


¿Quieres que te entregue un plugin de ejemplo (zip) con hooks y subagent listo para probar en un repo Node/Python? Puedo generarlo con instrucciones y tests básicos.

Ver todos los artículos →