OmniSys Kit del asistente

Kit del asistente

Webinar · Skills con Claude Code

OmniSys · Dirección de Innovación y Preventa


Si solo tienes 20 minutos hoy

  1. Copia una skill del kit a tu máquina:

``bash cp -r kit-skills/desarrollo/redactando-commits ~/.claude/skills/ ``

  1. Prepara cualquier cambio con git add y pide: dame un mensaje de commit para esto
  2. Fíjate en que no escribiste /. Se disparó sola. Ese es todo el mecanismo.
  3. Abre 05-PRIMEROS-30-DIAS.md y haz el Día 1.

Lo demás puede esperar. Eso no.


Qué hay aquí

Para leer · PDF

ArchivoQué es
PDF/01-Manual-Skills-Claude-Code.pdfManual completo, 17 páginas. Fundamentos, cómo se crean, políticas y buenas prácticas. Con índice navegable
PDF/02-Tarjeta-de-referencia.pdfDos páginas. Imprímela a doble cara y pégala junto al monitor
PDF/03-Primeros-30-dias.pdfGuía de adopción, semana por semana

Para copiar y usar · Markdown

ArchivoQué es
03-PROMPT-DESTILADOR.mdEl prompt que convierte una conversación en skill. En md porque se copia y se pega
kit-skills/Trece skills listas. Son archivos SKILL.md: por definición van en markdown
04-PLANTILLAS/Tres puntos de partida en blanco

Todo junto

ArchivoQué es
KIT-COMPLETO.htmlTodo el material navegable en un solo archivo, con botón de copiar en cada bloque de código
Por qué esta división. Lo que se lee de corrido va en PDF: tipografía cuidada, índice y numeración. Lo que se copia, se pega o se instala se queda en markdown, que es su formato nativo.

El kit de skills

Trece skills funcionando, organizadas por dominio. Léelas antes de escribir las tuyas: son el mejor material de estudio que hay, porque muestran las decisiones, no solo las reglas.

Ciclo de desarrollo de software

SkillQué haceGrado
revisando-prsRevisa un PR contra las convenciones, con severidadesAlta
redactando-commitsMensaje de commit convencional desde lo preparadoMedia
generando-pruebasPruebas siguiendo la convención del proyecto, casos borde primeroMedia
documentando-modulosDocumenta qué problema resuelve, no qué hace línea por líneaAlta

Gestión de proyectos

SkillQué haceGrado
redactando-minutasNotas crudas → acuerdos con dueño y fechaMedia
evaluando-riesgosRegistro de riesgos con probabilidad, mitigación y disparadorMedia
preparando-statusReporte de avance con semáforo y decisiones que necesitasMedia
desglosando-alcanceRequerimiento → entregables, tareas y supuestosMedia

Validación de calidad documental

SkillQué haceGrado
validando-entregablesValida un documento antes de enviarlo. Incluye scriptMedia
revisando-propuestasMatriz de cumplimiento contra bases de licitaciónMedia
verificando-consistenciaCompara varios documentos entre sí: cifras, fechas, datosAlta

Meta · skills sobre skills

SkillQué haceGrado
auditando-skillsAudita tus skills contra las reglas del manualMedia
destilando-conversacionEl prompt destilador, como skill invocableMedia

Instalación

Una skill

cp -r kit-skills/desarrollo/revisando-prs ~/.claude/skills/

Una categoría completa

cp -r kit-skills/calidad-documental/* ~/.claude/skills/

Para todo un equipo, en un repositorio

mkdir -p .claude/skills
cp -r kit-skills/desarrollo/* .claude/skills/
git add .claude/skills && git commit -m "add: kit de skills de desarrollo"

Quien clone el repositorio las tiene. Sin instalación.

Verifica

Abre Claude Code y escribe /skills. Deben aparecer.


Cómo están construidas estas skills

Todas siguen las mismas reglas, y por eso sirven de ejemplo:

  • Nombre en gerundio que describe la actividad
  • Descripción en tercera persona, con qué hace y cuándo usarla, usando las palabras que la gente escribe de verdad
  • Grado de libertad declarado en un comentario al final
  • Sin información con fecha de caducidad
  • allowed-tools acotado al mínimo necesario
  • Menos de 100 líneas cada una

Si abres cualquiera y comparas contra la sección §12 del manual, vas a ver cada política aplicada.


Advertencia sobre la vigencia

El contenido técnico está verificado contra la documentación oficial de Claude Code al momento de escribirse. Claude Code cambia rápido.

Antes de tomar una decisión importante basada en un detalle de este material —campos del frontmatter, comandos de diagnóstico, límites numéricos— verifica contra la fuente:


Licencia de uso

Este material es de OmniSys S.A. de C.V. y se entrega a los asistentes del webinar para su uso profesional. Las skills del kit puedes copiarlas, modificarlas y usarlas en tu trabajo sin restricción.


Versión navegable

KIT-COMPLETO.html contiene todo este material en un solo archivo: manual, tarjeta, prompt destilador, guía de 30 días, las trece skills con su código completo y las plantillas. Cada bloque de código tiene botón de copiar.

Ábrelo en cualquier navegador. Funciona sin conexión y sin JavaScript —en ese caso se ve todo el contenido seguido, sin pestañas.

Nota sobre las tipografías de los PDF

Los PDF usan Poppins para títulos y Carlito para texto, que es lo más cercano al sistema tipográfico de OmniSys (Syne + IBM Plex) disponible sin dependencias externas. Los archivos son autocontenidos: las fuentes van incrustadas y se ven igual en cualquier equipo.

Manual de Skills para Claude Code

Políticas, reglas, buenas prácticas y cómo se crean

OmniSys · Dirección de Innovación y Preventa


Cómo leer este manual

Cuatro partes, en orden de urgencia:

ParteQué resuelveCuándo la lees
I. FundamentosQué es una skill y por qué funcionaHoy
II. Cómo se creanEl procedimiento, paso a pasoHoy, con la terminal abierta
III. Reglas y políticasQué se permite, qué no, y cómo se revisa en equipoAntes de compartir tu primera skill
IV. Buenas prácticasLo que separa una skill que se usa de una que se abandonaCuando ya tengas dos o tres

Si solo tienes quince minutos, lee la parte II y construye una. Todo lo demás cobra sentido después de eso.



PARTE I · Fundamentos

1. Qué es una skill

Un directorio con un archivo SKILL.md adentro:

mi-skill/
└── SKILL.md

El archivo tiene dos partes: metadatos en YAML entre marcadores ---, y debajo instrucciones en markdown.

---
description: Resume los cambios sin commitear y señala lo riesgoso.
  Úsala cuando el usuario pregunte qué cambió, pida un mensaje de
  commit o quiera revisar su diff.
---

## Cambios actuales

!`git diff HEAD`

## Instrucciones

Resume en dos o tres viñetas qué cambió. Luego lista los riesgos:
manejo de errores ausente, valores hardcodeados, pruebas
desactualizadas.

No hay registro, no hay instalación, no hay build. Creas la carpeta, escribes el archivo, y Claude Code lo detecta en la sesión en curso sin reiniciar.

2. El problema que resuelve

Claude tiene una ventana de contexto finita. Todo lo que quieres que sepa compite por ese espacio: tu código, tu conversación, tus convenciones.

Las skills parten el contenido en dos niveles:

  • La descripción vive permanentemente en el contexto. Es corta. Le dice a Claude que la skill existe y cuándo aplicarla.
  • El cuerpo solo entra cuando la skill se usa. Puede tener cientos de líneas y no cuesta nada mientras no se invoque.
Podrías tener cincuenta skills instaladas. Lo permanente son cincuenta descripciones cortas. Los cincuenta cuerpos no están ahí hasta que hacen falta.

Esta es la idea central. Si la entiendes, el resto se deduce. Si no, vas a escribir skills que no se activan y no vas a saber por qué.

3. El detalle que casi nadie enseña

Cuando una skill se invoca, su contenido entra a la conversación y se queda ahí en los turnos siguientes. No es un préstamo momentáneo. Claude Code no vuelve a leer el archivo después.

Tres consecuencias prácticas:

  1. Cada línea del cuerpo es un costo recurrente de tokens, no un costo único.
  2. Escribe instrucciones permanentes, no pasos de un solo uso. Si algo debe aplicar durante toda la tarea, redáctalo como norma vigente.
  3. Si vuelves a invocar la misma skill y el contenido es idéntico, no se duplica. Si cambió —por argumentos distintos o contexto dinámico nuevo— sí se agrega otra vez.

Cuando el contexto se llena y hay autocompactación, Claude Code re-adjunta la invocación más reciente de cada skill conservando los primeros 5,000 tokens de cada una, con un presupuesto combinado de 25,000. Llena ese presupuesto desde la más reciente, así que las skills invocadas al principio de una sesión larga pueden desaparecer.

Si sientes que una skill "dejó de funcionar" a media conversación, casi siempre el contenido sigue ahí y el modelo está eligiendo otro camino. Refuerza la descripción, o vuelve a invocarla.

4. Dónde vive una skill

UbicaciónRutaAplica a
EmpresarialConfiguración administradaToda la organización
Personal~/.claude/skills/<nombre>/SKILL.mdTodos tus proyectos
Proyecto.claude/skills/<nombre>/SKILL.mdEse repositorio
Plugin<plugin>/skills/<nombre>/SKILL.mdDonde el plugin esté activo

El nivel de proyecto es el que cambia la vida en equipo. Se versiona con el código: quien clona el repositorio hereda tu criterio sin que se lo expliques.

En conflicto de nombres, empresarial gana sobre personal, y personal gana sobre proyecto. Las skills de plugin usan espacio de nombres propio (plugin:skill) y no chocan con nadie.

El comando que escribes sale del nombre del directorio, no del campo name. En skills personales y de proyecto, name es solo la etiqueta del listado, y ni siquiera es obligatorio.

5. Skills y comandos son lo mismo

Históricamente había dos sistemas: comandos en .claude/commands/*.md y skills en .claude/skills/*/SKILL.md. Se fusionaron. Ambos crean /nombre y funcionan igual.

Las skills agregan tres cosas: un directorio para archivos de apoyo, frontmatter para controlar quién las invoca, y carga automática por el modelo. Un comando personalizado es hoy una skill sin funciones extra.



PARTE II · Cómo se crean

6. El procedimiento, paso a paso

Paso 1 · Elige un caso real

No inventes uno bonito. Responde esta pregunta:

¿Qué le pido a Claude cada semana, escribiendo más o menos lo mismo?

Si no se te ocurre nada, revisa tu historial de sesiones, los últimos PR que revisaste, o lo último que le explicaste a alguien de tu equipo.

Paso 2 · Resuélvelo a mano primero

Abre una sesión y resuelve la tarea con prompting normal, sin skill:

claude

Fíjate en qué contexto tuviste que dar: qué criterio, qué formato, qué te importaba. Eso es exactamente lo que va a la skill.

Paso 3 · Pídele a Claude que la escriba

Cuando tengas un resultado que te sirva:

crea una skill que capture este patrón

Nadie escribe un SKILL.md bueno de memoria y a la primera. Que lo genere él y tú lo recortas.

Paso 4 · Recorta

Claude va a generar de más. Quítale todo lo que ya sabe:

quita la explicación de qué es un pull request, eso ya lo sabes
déjalo en menos de 30 líneas

Paso 5 · Crea la carpeta

mkdir -p ~/.claude/skills/resumiendo-cambios

El nombre del directorio es el comando. Gerundio que describe la actividad.

Paso 6 · Pruébala en limpio

Sal y abre una sesión nueva. Pide la tarea en lenguaje natural, sin escribir /:

¿qué cambié hoy?

¿Se disparó sola?

Paso 7 · La vuelta

  • No se disparó → el problema está en la descripción, casi nunca en el cuerpo
  • Se disparó pero hizo otra cosa → el problema sí está en el cuerpo

Vuelves a la sesión original, corriges, y pruebas otra vez en una nueva.

A este ciclo lo llamamos Claude A / Claude B. A es donde construyes, B es donde pruebas en limpio. Lo que observas en B regresa a A. Es el trabajo real de escribir skills.

7. La descripción · el campo que decide todo

Es lo único que Claude ve para decidir si tu skill aplica. Si está mal escrita, la skill no existe en la práctica.

La fórmula

[qué hace] + [cuándo usarla]

Ambas mitades son obligatorias.

Las cuatro reglas

1 · Tercera persona. La descripción se inyecta en la indicación del sistema. Escribirla como si Claude le hablara al usuario rompe el descubrimiento.

# ❌ nunca se activa
description: Te puedo ayudar con tus documentos y archivos.

# ✅ se dispara sola
description: Analiza documentos y aplica el formato del equipo.
  Úsala cuando el usuario mencione README, documentación o formato.

2 · El caso principal al inicio. El listado de skills tiene tope de caracteres. Si tu texto se recorta, se recorta por el final.

3 · Las palabras que la gente escribe de verdad. No las del manual. Nadie teclea "gestión documental del repositorio"; teclean "revisa este README".

Truco: escribe primero cómo pedirías la tarea, en voz alta, y de ahí saca las palabras.

4 · El tope es de 1,536 caracteres, combinado entre description y when_to_use.

Patologías y su síntoma

Descripción enfermaSíntoma
Te puedo ayudar con XNunca se activa sola
Ayuda con documentosSe activa cuando no debe, o nunca
Sin la parte del "cuándo"Claude sabe qué hace pero no cuándo
Larga, con el caso principal al finalSe trunca y pierde lo que importa
Con jerga que nadie tecleaNunca coincide con la petición real
Solapada con otra skillSe dispara la equivocada, inconsistente

8. Campos del frontmatter

Todos son opcionales. Solo description es recomendado. Claude Code lee el frontmatter únicamente si el --- de apertura es la primera línea.

CampoPara quéCuándo lo usas
descriptionQué hace y cuándo usarlaSiempre
when_to_useFrases disparadoras adicionalesCuando la descripción se alarga
nameEtiqueta de listadoOpcional
allowed-toolsPreaprueba herramientas durante el turnoCuando la skill ejecuta comandos
disallowed-toolsRetira herramientas mientras está activaSkills autónomas
disable-model-invocationSolo tú la invocasAcciones con efectos
user-invocablefalse: solo Claude la invocaConocimiento de fondo
argument-hintPista de autocompletadoSkills con argumentos
modelModelo mientras está activaTareas que necesitan otro modelo
context: forkCorre en subagente aisladoTareas que ensucian el contexto
pathsGlobs que limitan la activaciónMonorepos

allowed-tools no restringe

Esta es la confusión número uno.

allowed-tools concede permiso para que Claude no te pregunte. No restringe: todas las herramientas siguen disponibles. El permiso se limpia cuando envías tu siguiente mensaje.

Para restringir de verdad: disallowed-tools mientras la skill está activa, o reglas de negación en permisos para siempre.

Los dos campos de invocación

FrontmatterTú invocasClaude invocaContexto
(por defecto)SíSíDescripción siempre; cuerpo al invocar
disable-model-invocation: trueSíNoDescripción NO está en contexto
user-invocable: falseNoSíDescripción siempre; cuerpo al invocar

9. Grados de libertad

La pregunta no es "¿cuánto detalle pongo?" sino "¿qué tan frágil es esta tarea?".

GradoSituaciónCómo se escribeEjemplo
AltaVarios caminos sirvenProsa, dirección generalRevisión de código
MediaHay un patrón preferidoPlantilla o script con parámetrosGenerar un reporte
BajaSe puede romper algoComando exacto y prohibición de variarloMigración, despliegue

Ejemplo de baja libertad escrito correctamente:

Ejecuta exactamente:

    python scripts/migrate.py --verify --backup

No modifiques el comando ni agregues banderas, aunque el mensaje de
error lo sugiera. Si falla, detente y reporta. No intentes corregirlo.

La última línea es parte del diseño, no un adorno. Sin ella, un modelo capaz va a intentar arreglar el problema, que es lo que no quieres en una migración.

El error típico: escribir todas tus skills con el mismo nivel de detalle. Las de alta libertad quedan asfixiadas y las de baja quedan peligrosamente vagas.

10. Partir una skill grande

mi-skill/
├── SKILL.md          ← el procedimiento
├── reference.md      ← el detalle, solo si hace falta
└── scripts/
    └── revisar.sh    ← se EJECUTA, no se lee

Tres reglas donde la gente se equivoca:

  1. Un solo nivel. SKILL.md → reference.md. Nunca una cadena de tres. Las cadenas funcionan a veces y fallan otras, que es peor que fallar siempre.
  2. Los scripts se ejecutan. Si le pides a Claude que lea el script y lo interprete, gastas contexto en algo que la máquina hacía sola.
  3. Rutas con ${CLAUDE_SKILL_DIR}. Nunca absolutas, nunca con barra invertida.

El patrón que evita las solicitudes de permiso

Claude Code sustituye ${CLAUDE_SKILL_DIR} en dos lugares: el cuerpo markdown y las reglas de Bash en allowed-tools. Usar la misma variable en ambos hace que la regla coincida exactamente con el comando:

---
description: Renderiza una gráfica a partir de un CSV
allowed-tools: Bash(${CLAUDE_SKILL_DIR}/scripts/render.sh *)
---

Ejecuta `${CLAUDE_SKILL_DIR}/scripts/render.sh <archivo-csv>`.

El script corre sin preguntarte permiso. Sin este patrón, cada ejecución interrumpe.

Límite práctico: SKILL.md por debajo de 500 líneas.

11. Contexto dinámico

` !comando ` ejecuta el comando antes de que el contenido llegue a Claude y reemplaza el marcador con la salida:

## Cambios actuales
!`git diff HEAD`

## Estado
!`git status --short`

La diferencia con pedirle que corra git diff es sustancial: no gasta un turno de herramienta, no puede decidir no hacerlo, y la instrucción llega con los datos adentro.

La regla que te va a morder

Un comando que falla aborta toda la invocación. Claude nunca ve el contenido de la skill.

Con bash, cualquier código de salida distinto de cero cuenta como fallo. Si tu comando puede salir con error por razones normales, anéxale || true:

## Estado del linter
!`npm run lint || true`

Además, los comandos inyectados nunca piden permiso: si la verificación de permisos no devuelve "permitir", se aborta. Preapruébalo con allowed-tools.



PARTE III · Reglas y políticas

Esta parte es para cuando las skills dejan de ser tuyas y pasan a ser del equipo. Adáptala; está escrita para copiarse a la documentación interna.

12. Políticas de creación

P-01 · Nomenclatura obligatoria

  • El directorio se nombra en gerundio que describe la actividad: revisando-prs, generando-migraciones
  • Solo minúsculas, números y guiones. Máximo 64 caracteres
  • No puede contener las palabras anthropic ni claude
  • Prohibidos los nombres genéricos: helper, utils, tools, misc, general

P-02 · Toda skill declara su grado de libertad

Como comentario al final del SKILL.md:

<!-- Grado de libertad: ALTA / MEDIA / BAJA -->

Es lo que permite revisar si el nivel de detalle es el correcto.

P-03 · Acciones con efectos llevan disable-model-invocation

Cualquier skill que despliegue, commitee, envíe mensajes, borre datos o modifique estado externo debe llevarlo. No se deja que el modelo decida ejecutar algo irreversible.

P-04 · Sin información con fecha de caducidad

Prohibido escribir versiones concretas, precios, nombres de personas en puestos, o cualquier dato que vaya a envejecer. Si hace falta, se inyecta con contexto dinámico.

P-05 · Sin secretos

Ninguna skill contiene tokens, credenciales, cadenas de conexión, rutas internas de infraestructura ni datos de clientes. Las skills se versionan: lo que escribas ahí queda en el historial.

P-06 · Terminología consistente

Un concepto, un término, de principio a fin del archivo. Si arriba dice "documento" y abajo "archivo", Claude no sabe si son lo mismo.

13. Políticas de seguridad

S-01 · Revisión obligatoria de allowed-tools en skills ajenas

La confianza del espacio de trabajo no gobierna allowed-tools. Una skill de proyecto aplica su preaprobación aunque la carpeta nunca se haya marcado como confiable.

Antes de correr Claude Code en un repositorio que no es tuyo, revisa el allowed-tools de sus skills. Si no entiendes por qué una skill necesita lo que pide, no la corras.

S-02 · Principio de mínima preaprobación

allowed-tools lista el comando más específico posible:

# ❌ demasiado amplio
allowed-tools: Bash

# ✅ acotado
allowed-tools: Bash(git status *) Bash(git diff *)

S-03 · Los comandos inyectados son código que corre en tu máquina

Todo ` !comando ` en una skill se ejecuta sin preguntar. Trátalos con el mismo criterio con que aceptarías un script en un PR.

S-04 · Skills que tocan sistemas productivos

Requieren: disable-model-invocation: true, verificación previa con script, grado de libertad BAJA, y revisión por una segunda persona antes de mezclarse.

14. Política de revisión en equipo

Una skill nueva en .claude/skills/ se revisa como se revisa código. Checklist mínimo del revisor:

  • ¿La descripción está en tercera persona?
  • ¿Dice qué hace y cuándo usarla?
  • ¿Usa las palabras que el equipo escribe de verdad?
  • ¿El nombre del directorio describe la actividad?
  • ¿Declara su grado de libertad y es el correcto?
  • ¿SKILL.md por debajo de 500 líneas?
  • ¿Las referencias van a un solo nivel?
  • ¿allowed-tools pide lo mínimo?
  • Si tiene efectos, ¿lleva disable-model-invocation?
  • ¿Sin secretos, sin datos de cliente, sin información con caducidad?
  • ¿El revisor la ejecutó sin que el autor le explicara nada?

El último punto es el que más vale. Si necesitas explicación, la descripción no fue suficiente.

15. Política de ciclo de vida

MomentoQué pasa
NacePersonal, en ~/.claude/skills/. Nadie más la ve
Se pruebaUna semana de uso real del autor. Mínimo tres invocaciones
Se proponePR a .claude/skills/ del proyecto, con el checklist de arriba
ViveSe revisa cada vez que cambia el proceso que describe
MuereSi el proceso desapareció, se borra. Una skill que miente es peor que ninguna

Señal de que hay que jubilar una skill: nadie la ha invocado en dos meses y el equipo resolvió el problema de otra forma.



PARTE IV · Buenas prácticas

16. Concisión

La ventana de contexto es un bien común, y el cuerpo de la skill permanece turno tras turno. Ese costo es recurrente.

Regla: solo agrega lo que Claude no sabe ya.

  • Si tu skill explica qué es un pull request → bórralo
  • Si explica las convenciones de nombres de tu equipo → déjalo
  • Enuncia qué hacer, no narres cómo ni por qué

17. Da una opción, no cinco

# ❌
Puedes usar pytest, unittest, nose, tox o pytest-bdd según prefieras.

# ✅
Usa pytest. Si el proyecto ya usa otro corredor de pruebas, síguelo.

Ofrecer alternativas parece flexible y produce elecciones malas. Da una con salida de emergencia.

18. Escribe para el modelo más chico

Corre tu skill con Haiku, Sonnet y Opus. Lo que basta para Opus puede quedarse corto para Haiku. Una skill que depende de que el modelo "entienda la intención" se rompe en el modelo pequeño; una bien escrita funciona en los tres.

Es la prueba de robustez más barata que existe y casi nadie la hace.

19. Evalúa antes de documentar

La guía oficial invierte el orden habitual:

  1. Corre la tarea sin skill y documenta dónde falla
  2. Construye tres escenarios que prueben esas fallas
  3. Mide la línea base
  4. Escribe el contenido mínimo que las pasa

Es lo que evita skills que resuelven problemas imaginarios. Escribes para fallas observadas, no supuestas.

El tercer escenario es el que casi nadie hace: el caso que NO debe disparar. Una skill que se activa de más estorba tanto como una que no se activa.

20. Prueba siempre en sesión nueva

El contexto que quedó de cuando escribiste la skill enmascara los huecos de las instrucciones. Tú sabes lo que quisiste decir, y esa conversación también. Una sesión limpia no.

21. Diagnóstico rápido

ComandoQué te dice
/skillsQué hay cargado, de dónde, con qué metadatos
/doctorRevisión de instalación y costo del listado
/contextQué está ocupando la ventana
claude --debugErrores de parseo del frontmatter
claude plugin validate .claude/skillsEncuentra frontmatter roto en todo un directorio

Prueba de descarte en tres pasos

Pregunta ¿qué skills tienes disponibles?:

  • Aparece con descripción → el problema es de redacción
  • Aparece sin descripción → el frontmatter no parsea
  • No aparece → problema de ubicación o de visibilidad

Tabla de síntomas

SíntomaCausa más probable
No se activa nuncaDescripción sin las palabras reales, o en 1ª/2ª persona
Responde a /nombre pero nunca solaFrontmatter mal formado
Se activa cuando no debeDescripción demasiado amplia
No encuentra un archivoRuta absoluta o barra invertida
Salta la solicitud de permisoFalta declarar en allowed-tools
Funciona a veces sí y a veces noCadena de referencias de dos niveles
La invocación se aborta sin explicarUn comando ! falló. Pruébalo a mano
"Dejó de funcionar" a media conversaciónSigue en contexto; el modelo eligió otro camino

22. Antipatrones que no dan error

Los más costosos, porque nada te los señala:

AntipatrónPor qué falla
Ofrecer cinco librerías alternativasClaude elige mal
"la versión actual es 3.2"En seis meses tu skill miente con confianza
Cambiar de término a media skillClaude no sabe si son lo mismo
Explicar lo que Claude ya sabeCosto recurrente sin beneficio
Referencias encadenadasFuncionan a veces: peor que fallar siempre
context: fork en skill de solo lineamientosDevuelve vacío en silencio
Narrar el porqué en vez de enunciar el quéRuido

23. Qué capa usar

Naturaleza del contenidoCapa
Hecho permanente del proyectoCLAUDE.md
Procedimiento o material de referenciaSkill
Tarea con contexto aislado y rol propioSubagente o context: fork
Regla que debe cumplirse siempreHook
Acceso a un sistema externoServidor MCP

Las dos preguntas que desempatan:

  • CLAUDE.md o skill → ¿hace falta en cada conversación, o solo en algunas?
  • Skill o hook → ¿confío en que el modelo decida aplicarlo? Si ya lo pusiste en CLAUDE.md y se sigue olvidando, es hook.

Documentación oficial

Claude Code cambia rápido. Verifica los campos del frontmatter y los comandos de diagnóstico contra estas fuentes antes de tomar decisiones importantes.

Tarjeta de referencia

Una hoja. Imprímela a doble cara.


Estructura mínima

mi-skill/
└── SKILL.md
---
description: [qué hace]. Úsala cuando [cuándo usarla].
---

## Instrucciones
[qué debe hacer Claude]

El nombre del directorio es el comando: /mi-skill


Dónde ponerla

AlcanceRuta
Todos tus proyectos~/.claude/skills/<nombre>/SKILL.md
Este repositorio.claude/skills/<nombre>/SKILL.md

Precedencia: empresarial › personal › proyecto


La descripción · 4 reglas

  1. Tercera persona — Analiza... nunca Te puedo ayudar...
  2. Qué hace + cuándo usarla — ambas mitades obligatorias
  3. Caso principal al inicio — si se trunca, se trunca por el final
  4. Las palabras que tú escribes — no las del manual

Tope: 1,536 caracteres


Frontmatter útil

description:               # lo único recomendado
when_to_use:               # frases disparadoras extra
allowed-tools:             # preaprueba, NO restringe
disallowed-tools:          # retira herramientas
disable-model-invocation:  # true = solo tú la invocas
user-invocable:            # false = solo Claude la invoca
context: fork              # subagente aislado
paths:                     # globs que limitan activación

⚠️ allowed-tools concede, no restringe. Se limpia con tu siguiente mensaje.


Grados de libertad

GradoCuándoCómo se escribe
AltaVarios caminos sirvenProsa, dirección general
MediaHay patrón preferidoPlantilla o script con parámetros
BajaSe puede romper algoComando exacto + prohibición de variarlo

Multiarchivo

mi-skill/
├── SKILL.md          ← procedimiento
├── reference.md      ← detalle, solo si hace falta
└── scripts/
    └── revisar.sh    ← se EJECUTA
  1. Un solo nivel de referencias — nunca cadenas
  2. Los scripts se ejecutan, no se leen
  3. Rutas con ${CLAUDE_SKILL_DIR}

Límite: SKILL.md < 500 líneas

Truco anti-permiso:

allowed-tools: Bash(${CLAUDE_SKILL_DIR}/scripts/x.sh *)

La misma variable en el cuerpo y en la regla → no te pregunta.


Contexto dinámico

!`git diff HEAD`
!`npm run lint || true`

⚠️ Un comando que falla aborta toda la invocación. Usa || true si puede salir con error normal.


Diagnóstico

ComandoQué dice
/skillsQué hay cargado y de dónde
/doctorInstalación y costo del listado
/contextQué ocupa la ventana
claude --debugErrores de parseo
claude plugin validate .claude/skillsFrontmatter roto en todo el dir

Descarte rápido

Pregunta: ¿qué skills tienes disponibles?

ResultadoProblema
Aparece con descripciónRedacción
Aparece sin descripciónFrontmatter no parsea
No apareceUbicación o visibilidad

Síntomas

SíntomaCausa más probable
No se activa nuncaDescripción sin las palabras reales, o 1ª/2ª persona
Responde a /nombre pero nunca solaFrontmatter mal formado
Se activa de másDescripción demasiado amplia
No encuentra un archivoRuta absoluta o barra invertida
Salta solicitud de permisoFalta declarar en allowed-tools
A veces sí, a veces noCadena de referencias de 2 niveles
Se aborta sin explicaciónUn comando ! falló

El ciclo

CLAUDE A                    CLAUDE B
construyes                  sesión NUEVA
    │                           │
    ├─ "crea una skill    ─────▶│ pides en lenguaje
    │   que capture              │ natural, SIN /
    │   este patrón"             │
    │◀──────────────────────────┤ ¿se disparó?
    │  corriges                  │
  • No se disparó → arregla la descripción
  • Se disparó mal → arregla el cuerpo

Qué capa usar

ContenidoCapa
Hecho permanenteCLAUDE.md
ProcedimientoSkill
Contexto aisladoSubagente / context: fork
Debe cumplirse siempreHook
Sistema externoMCP

Desempates:

  • CLAUDE.md o skill → ¿cada conversación o solo algunas?
  • Skill o hook → ¿confío en que el modelo decida?

Antes de compartir

  • Descripción en 3ª persona, con qué hace y cuándo
  • Nombre del directorio en gerundio
  • Grado de libertad declarado y correcto
  • < 500 líneas, referencias a un nivel
  • allowed-tools pide lo mínimo
  • disable-model-invocation si tiene efectos
  • Sin secretos, sin datos de cliente, sin caducidad
  • Alguien más la corrió sin que le explicaras

Las 7 frases

  1. La descripción está siempre en contexto. El cuerpo, no.
  2. Si no se dispara, el problema está en la descripción.
  3. La pregunta no es cuánto detalle. Es qué tan frágil es la tarea.
  4. ¿Hace falta siempre, a veces, o sin excepción?
  5. Una skill en el repo es infraestructura del equipo.
  6. Las fallas de sintaxis las encuentra el validador. Las descripciones malas, el uso.
  7. Solo agrega lo que Claude no sabe ya.

El prompt destilador

Convierte una conversación en una skill reutilizable

Este es el componente que más vas a usar. Cada vez que resuelvas algo con Claude y pienses "esto lo voy a volver a necesitar", pega este prompt en esa misma conversación.

Funciona porque la conversación ya contiene todo lo que la skill necesita: el contexto que tuviste que dar, las correcciones que hiciste, y el resultado que aceptaste. Lo único que falta es destilarlo.


Cuándo usarlo

  • Terminaste una tarea y el resultado te sirvió
  • Tuviste que corregir a Claude dos o tres veces hasta que entendió
  • Diste contexto que vas a tener que volver a dar

No lo uses si la tarea fue trivial, si el resultado no te sirvió, o si es algo que harás una sola vez en la vida.


El prompt

Cópialo completo y pégalo al final de la conversación:

Vamos a destilar esta conversación en una skill de Claude Code reutilizable.

Antes de escribir nada, analiza lo que pasó aquí y respóndeme estas seis
preguntas en forma de lista corta:

1. ¿Cuál fue la tarea real que resolvimos? Enúnciala como una actividad,
   en gerundio.
2. ¿Qué contexto tuve que darte yo que tú no sabías de entrada? Sepáralo en
   (a) convenciones o criterios míos, y (b) hechos del proyecto.
3. ¿En qué momentos te corregí, y qué revela cada corrección sobre lo que
   faltaba en la instrucción inicial?
4. ¿Qué parte de lo que te expliqué era realmente innecesaria porque ya lo
   sabías?
5. ¿Qué tan frágil es esta tarea? ¿Varios caminos llegan a un buen resultado
   (alta libertad), hay un patrón preferido (media), o un paso en falso
   rompe algo (baja)?
6. ¿Con qué frases exactas pediría yo esta tarea la próxima vez? Dame tres
   variantes, en mis palabras, no en lenguaje de manual.

Cuando termines ese análisis, construye el SKILL.md siguiendo estas reglas:

NOMBRE
- Gerundio que describe la actividad, en minúsculas con guiones
- Máximo 64 caracteres, sin las palabras "anthropic" ni "claude"
- Nunca genérico: nada de helper, utils, tools

DESCRIPCIÓN
- Fórmula obligatoria: [qué hace] + "Úsala cuando..." [cuándo usarla]
- Tercera persona: "Analiza...", jamás "Te puedo ayudar..."
- El caso principal al inicio, porque si se trunca se trunca por el final
- Los disparadores salen de las tres frases de la pregunta 6, no de
  lenguaje formal
- Tope de 1536 caracteres

CUERPO
- Solo lo de la pregunta 2. Nada de lo de la pregunta 4
- Instrucciones permanentes, no pasos de un solo uso: el contenido se queda
  en contexto turno tras turno
- Enuncia qué hacer, no narres por qué
- Si la pregunta 5 dio "baja", incluye el comando exacto y una prohibición
  explícita de variarlo
- Por debajo de 100 líneas. Si necesitas más, dime qué movería yo a un
  reference.md

FRONTMATTER
- allowed-tools solo si la skill ejecuta comandos, y con el patrón más
  acotado posible
- disable-model-invocation: true si la tarea tiene efectos irreversibles
  (desplegar, commitear, enviar, borrar)
- Cierra el cuerpo con: <!-- Grado de libertad: ALTA/MEDIA/BAJA -->

ENTRÉGAME
1. El análisis de las seis preguntas
2. El SKILL.md completo en un bloque de código
3. El comando mkdir para crear la carpeta
4. Tres evaluaciones para probarla: dos que DEBEN disparar la skill y una
   que NO debe dispararla, con el resultado esperado de cada una

No me des alternativas ni variantes. Dame una versión y dime qué decisión
tomaste en los puntos donde había más de un camino.

Cómo se usa el resultado

  1. Lee el análisis antes que el SKILL.md. Si el punto 2 trae cosas que

no son tuyas, o el punto 4 está vacío, el destilado va a salir inflado.

  1. Crea la carpeta y pega el archivo.
  1. Abre una sesión nueva y corre las tres evaluaciones que te dio.

La tercera —la que no debe disparar— es la que detecta descripciones demasiado amplias.

  1. Si no se disparó, vuelve a la conversación original y pide:

`` No se disparó. Escribí exactamente esto: "<lo que escribiste>". Reescribe solo la descripción para que esa frase la active. ``

  1. Si se disparó pero hizo algo distinto, el problema está en el cuerpo:

`` Se disparó pero <lo que hizo mal>. Corrige el cuerpo, no la descripción. ``


Variante corta

Para cuando la conversación fue simple y no necesitas el análisis:

Destila esta conversación en un SKILL.md de Claude Code.

Nombre en gerundio. Descripción en tercera persona con la fórmula
[qué hace] + "Úsala cuando..." usando las palabras que yo usé de verdad
en esta conversación, no lenguaje de manual. En el cuerpo pon solo el
contexto que tuve que darte y que no sabías; quita todo lo que ya sabías.
Menos de 60 líneas. Termina con un comentario del grado de libertad.

Dame el archivo y el mkdir. Nada más.

Variante para equipo

Cuando la skill va a .claude/skills/ de un proyecto compartido:

Destila esta conversación en un SKILL.md para el repositorio del equipo.

Aplica las mismas reglas de nombre, descripción y cuerpo que ya conoces,
y además:

- Quita cualquier cosa específica de mi máquina: rutas absolutas, nombres
  de mis carpetas, mi configuración personal
- Quita credenciales, tokens, nombres de cliente y datos reales; reemplaza
  por marcadores evidentes
- Las rutas a archivos de la skill usan ${CLAUDE_SKILL_DIR}
- Si asume algo del proyecto que no es obvio para alguien nuevo, decláralo
  explícito en el cuerpo
- Redacta la descripción con las palabras que usaría CUALQUIERA del equipo,
  no solo yo

Al final, dame el checklist de revisión que debería pasar antes de
mezclarse, con los puntos que esta skill específicamente podría fallar.

Por qué funciona

Las seis preguntas no son decorativas. Cada una ataca un modo de falla conocido:

PreguntaQué falla previene
1 · La tarea en gerundioNombres genéricos tipo helper
2 · Qué contexto disteSkills vacías que no aportan nada
3 · Dónde corregisteInstrucciones que omiten lo que importaba
4 · Qué era innecesarioCuerpos inflados con costo recurrente
5 · Qué tan frágilNivel de detalle mal calibrado
6 · Con qué frases lo pediríasDescripciones que nunca se activan

La sexta es la más importante. Es la única forma confiable de sacar las palabras reales en vez de las del manual, y las descripciones son la causa número uno de skills que no funcionan.

Tus primeros 30 días

Guía de adopción, para que esto no se quede en el webinar

La mayoría de quienes ven un webinar no aplican nada. No es falta de interés: es que no hay un siguiente paso concreto. Esta guía es el siguiente paso.


Día 1 · Hoy, 20 minutos

1 · Instala una skill del kit (5 min)

No escribas nada todavía. Copia una del kit y úsala:

cp -r kit-skills/desarrollo/redactando-commits ~/.claude/skills/

Haz cualquier cambio en un repositorio, prepáralo con git add, y pide:

dame un mensaje de commit para esto

Fíjate en que no escribiste /. Se disparó sola porque la descripción coincidió. Ese es todo el mecanismo.

2 · Mira qué tienes (2 min)

/skills

Reconoce cuál viene de dónde. Es el mapa mental que necesitas.

3 · Anota tu caso (3 min)

Responde por escrito, en una línea:

¿Qué le pido a Claude cada semana, escribiendo más o menos lo mismo?

No sigas hasta tener la respuesta. Es el insumo de todo lo demás.

4 · Construye tu primera skill (10 min)

Resuelve ese caso con prompting normal. Cuando el resultado te sirva, pega el prompt destilador (archivo 03).

Crea la carpeta, abre sesión nueva, y pide la tarea en lenguaje natural.


Semana 1 · Úsala, no la mejores

Tres usos reales mínimo. No la toques todavía.

Lleva una nota de una línea cada vez que tropiece:

lun · se disparó bien, pero ignoró las pruebas
mié · no se disparó cuando escribí "revisa esto antes de subirlo"
vie · bien

Esas dos líneas son tu lista de correcciones, y son mejores que cualquier mejora que se te ocurra en abstracto.

Por qué no mejorarla antes: una skill que no se usa no se puede mejorar. Sin datos de uso, las "mejoras" son suposiciones.


Semana 2 · Una corrección y una skill más

Corrige con el ciclo

Vuelve a la conversación donde la construiste:

No se disparó cuando escribí "revisa esto antes de subirlo".
Reescribe solo la descripción para que esa frase la active.

Prueba en sesión nueva. Una corrección por vez.

Construye la segunda

La segunda sale en la mitad de tiempo. Elige un caso de otra categoría: si la primera fue de código, que esta sea de documento o de proyecto.


Semana 3 · Llévala al equipo

Elige la que más usaste

Mira tus notas. La que más aparece es la candidata.

Límpiala

Usa la variante para equipo del prompt destilador (archivo 03). Quita rutas de tu máquina, datos reales, supuestos que solo tú conoces.

Súbela

mkdir -p .claude/skills
cp -r ~/.claude/skills/tu-skill .claude/skills/
git add .claude/skills && git commit -m "add: skill tu-skill"

Pide una prueba real

A alguien del equipo:

Clona el repo y pídele a Claude que haga X. No te explico nada más.

Si necesita explicación, la descripción no fue suficiente. Ese es el dato que buscas, y es más valioso que un "sí, está bien".


Semana 4 · Mide y decide

Tres preguntas

  1. ¿Cuántas skills tienes en uso real, no escritas?
  2. ¿Cuál no has invocado en dos semanas?
  3. ¿Alguien más del equipo usa alguna?

Qué hacer con cada respuesta

SituaciónAcción
Tienes 1 en usoSuficiente. Es más de lo que tiene la mayoría
Tienes 3 o másRevisa si alguna se solapa con otra
Una no se usó en 2 semanasBórrala. Una skill que miente es peor que ninguna
Nadie más las usaPregunta por qué. Suele ser que no saben que existen

Si llegaste hasta aquí

Instala la skill auditando-skills del kit y córrela sobre tus propias skills. Te va a encontrar cosas que no ves porque las escribiste tú.


Los tres errores que hacen que esto se abandone

1 · Empezar por la skill perfecta. La primera skill debe ser fea y útil. La perfecta nunca se termina.

2 · Escribir cinco de golpe. Sin uso real no sabes cuál sirve. Una, usada tres veces, enseña más que cinco sin estrenar.

3 · Mejorarla sin usarla. Es la trampa más común. Las mejoras que se te ocurren en abstracto casi nunca son las que el uso revela.


Cuando te atores

ProblemaDónde buscar
No se activaManual §7 y §21, o la tarjeta
No sé qué poner en el cuerpoPrompt destilador, archivo 03
No sé si esto va en skill o en CLAUDE.mdManual §23
Quiero ver un ejemplo realKit de skills, carpeta por categoría
Mi skill funciona pero está desordenadaManual §10, partir una skill

Kit de skills

Trece skills listas para usar. Cada tarjeta muestra el archivo completo, con botón de copiar. Léelas antes de escribir las tuyas: muestran las decisiones, no solo las reglas.

Ciclo de desarrollo

Código, pruebas, revisión y documentación

SKILL.md
---
description: Documenta un módulo o componente explicando qué resuelve y cómo
  se usa, no qué hace línea por línea. Úsala cuando el usuario pida
  documentar código, escribir un README de módulo, o diga que algo no se
  entiende.
allowed-tools: Read Grep Glob
---

## Instrucciones

La documentación responde tres preguntas, en este orden:

### 1 · ¿Qué problema resuelve?

Una o dos frases. Escríbelas para alguien que llega al repositorio por
primera vez y no sabe por qué existe este módulo.

### 2 · ¿Cómo se usa?

Un ejemplo completo que funcione al copiarlo. No un fragmento que asuma
configuración no documentada.

### 3 · ¿Qué hay que saber para no romperlo?

- Invariantes que el módulo asume
- Efectos secundarios no obvios
- Dependencias con otras partes del sistema
- Decisiones de diseño que parecen raras y no lo son

## Reglas

**No documentes lo que el código ya dice.** Un comentario que repite el
nombre de la función es ruido:

    ❌  # Obtiene el usuario por id
        def obtener_usuario_por_id(id):

**Documenta lo que el código no puede decir:** por qué se eligió este
enfoque, qué se intentó antes, qué pasa si alguien cambia este orden.

**Sin información con fecha de caducidad.** Nada de "actualmente",
"por ahora", versiones concretas ni nombres de personas.

## Formato

Si el proyecto ya tiene un formato de documentación, síguelo.
Si no, usa markdown con esta estructura:

    # <Nombre del módulo>

    <Qué problema resuelve, 1-2 frases>

    ## Uso

    <ejemplo completo y copiable>

    ## Consideraciones

    <invariantes, efectos, decisiones de diseño>

<!-- Grado de libertad: ALTA. El criterio sobre qué merece documentarse es el valor. -->
SKILL.md
---
description: Genera pruebas para código existente siguiendo las convenciones
  del proyecto, priorizando casos borde sobre el camino feliz. Úsala cuando
  el usuario pida pruebas, tests, cobertura, o diga que le falta probar algo.
allowed-tools: Read Grep Glob
---

## Instrucciones

### 1 · Antes de escribir nada, mira cómo prueba el proyecto

Busca las pruebas existentes y detecta:

- Qué corredor de pruebas se usa
- Cómo se nombran los archivos y los casos
- Si usan fixtures, factories o datos en línea
- Cómo se manejan los dobles de prueba

**Sigue esas convenciones aunque prefieras otras.** Una prueba que no se
parece a las demás del proyecto es una prueba que nadie mantiene.

### 2 · Prioriza en este orden

1. **Casos borde**: colecciones vacías, nulos, valores límite, entradas malformadas
2. **Errores esperados**: qué pasa cuando la dependencia falla
3. **Camino feliz**: el caso normal
4. **Regresiones**: si el usuario menciona un bug, la prueba que lo habría atrapado

El camino feliz va tercero a propósito. Es el que ya funciona.

### 3 · Una aserción por concepto

Cada prueba verifica un comportamiento. Si necesitas "y además" para
describirla, son dos pruebas.

### 4 · Nombres que describen el comportamiento

    ❌  test_usuario_1
    ✅  test_rechaza_email_sin_arroba

El nombre debe decir qué se rompió cuando la prueba falla en CI, sin
tener que abrir el archivo.

## Qué NO hacer

- No pruebes implementación: si refactorizar rompe la prueba sin cambiar
  comportamiento, la prueba está mal
- No uses dobles para lo que puedes probar de verdad
- No escribas pruebas que siempre pasan

## Salida

Escribe las pruebas en el archivo que corresponda según la convención del
proyecto. Al final, lista en dos o tres líneas qué quedó sin cubrir y por qué.

<!-- Grado de libertad: MEDIA. Convención del proyecto manda, contenido libre. -->
SKILL.md
---
description: Redacta el mensaje de commit a partir de los cambios preparados,
  siguiendo commits convencionales. Úsala cuando el usuario pida un commit,
  un mensaje de commit, o pregunte cómo describir su cambio.
allowed-tools: Read
---

## Cambios preparados

!`git diff --staged`

## Últimos commits del proyecto, para tomar el estilo

!`git log --oneline -12`

## Instrucciones

Estructura:

    <tipo>(<alcance>): <resumen en imperativo, minúscula, sin punto>

    <cuerpo opcional: por qué, no qué>

    <pie opcional: refs, breaking changes>

Tipos: `feat`, `fix`, `refactor`, `docs`, `test`, `chore`, `perf`, `build`, `ci`.

Reglas:

- Imperativo: "agrega", no "agregado" ni "agregando"
- Máximo 72 caracteres en la primera línea
- El cuerpo explica **por qué**. El qué ya está en el diff
- Un `BREAKING CHANGE:` en el pie si la interfaz pública cambió

Si los cambios preparados mezclan varios propósitos, dilo y propón cómo
separarlos en commits distintos, con qué archivos van en cada uno.

Si el estilo de los últimos commits difiere de commits convencionales,
sigue el del proyecto y señálalo en una línea.

Si no hay nada preparado, dilo y detente. No inventes un mensaje.

<!-- Grado de libertad: MEDIA. Formato fijo, redacción libre. -->
SKILL.md
---
description: Revisa un pull request o un diff contra las convenciones del
  proyecto y señala lo que falta antes de pedir aprobación. Úsala cuando el
  usuario pida revisar un PR, revisar su diff, pregunte si su cambio está
  listo para subir, o mencione code review.
allowed-tools: Read Grep
---

## Cambios a revisar

!`git diff origin/main...HEAD 2>/dev/null || git diff HEAD`

## Archivos tocados

!`git diff --name-only origin/main...HEAD 2>/dev/null || git diff --name-only HEAD`

## Instrucciones

Revisa en este orden y detente en el primer bloqueante que encuentres.

### 1 · Bloqueantes

Reporta y detente si encuentras alguno:

- Credenciales, tokens o cadenas de conexión en el código
- Datos personales o de cliente en pruebas, fixtures o comentarios
- Cambios en interfaces públicas sin actualizar a quien las consume
- Borrado de pruebas sin reemplazo

### 2 · Correctitud

- Casos borde sin cubrir: colecciones vacías, nulos, valores límite
- Manejo de errores ausente en operaciones que pueden fallar
- Condiciones de carrera o acceso concurrente no protegido
- Aritmética con redondeo, divisiones por cero, desbordamientos

### 3 · Mantenibilidad

- Valores hardcodeados que deberían ser configuración
- Duplicación de lógica que ya existe en el proyecto
- Nombres que no dicen lo que la cosa hace
- Funciones que hacen más de una cosa

### 4 · Pruebas

- ¿Hay prueba para cada rama nueva de comportamiento?
- ¿Alguna prueba existente quedó desactualizada por este cambio?
- ¿Las pruebas prueban comportamiento o implementación?

## Formato del reporte

    BLOQUEANTE  <archivo>:<línea> — <qué está mal y por qué>
    IMPORTANTE  <archivo>:<línea> — <qué está mal>
    MENOR       <archivo>:<línea> — <sugerencia>

Ordena por severidad. Si no hay nada en una categoría, omítela en vez de
escribir "ninguno".

No reescribas el código. Señala y explica; quien decide es quien lo escribió.

Si el diff está vacío, dilo en una línea y detente.

<!-- Grado de libertad: ALTA. El criterio de revisión es el valor. -->

Gestión de proyectos

Minutas, riesgos, status y alcance

SKILL.md
---
description: Descompone un requerimiento o una propuesta en entregables,
  tareas y supuestos, señalando lo que está indefinido. Úsala cuando el
  usuario pida desglosar un alcance, hacer un WBS, estimar un proyecto,
  o mencione que un requerimiento está muy general.
---

## Instrucciones

### 1 · Separa lo definido de lo asumido

Antes de desglosar nada, lista en dos columnas:

    ESTÁ DEFINIDO          ESTOY ASUMIENDO
    <lo que dice el        <lo que hace falta para
     requerimiento>         poder estimar y no está>

**La columna derecha es la más valiosa del ejercicio.** Cada supuesto ahí
es una conversación que hay que tener antes de comprometer una fecha.

### 2 · Desglosa por entregable, no por actividad

    ❌  Análisis, diseño, desarrollo, pruebas
    ✅  Módulo de autenticación funcionando en staging
        Reporte de conciliación mensual generándose solo

Un entregable es algo que se puede enseñar y que alguien puede aceptar o
rechazar. "Análisis" no se puede aceptar.

### 3 · Tres niveles, no más

    Entregable
    └── Componente
        └── Tarea (1 a 5 días)

Si una tarea pasa de cinco días, no está desglosada: está escondiendo algo.
Si necesitas un cuarto nivel, probablemente el entregable son dos.

### 4 · Marca las dependencias y lo que no controlas

Para cada entregable:

- De qué otro entregable depende
- Qué necesita de terceros: accesos, aprobaciones, datos, ambientes
- Qué es camino crítico

## Formato

    ## Entregable 1 · <nombre>

    **Criterio de aceptación:** <cómo se sabe que está terminado>
    **Depende de:** <entregable, o "nada">
    **Requiere de terceros:** <qué y de quién, o "nada">

    | Componente | Tarea | Días | Notas |
    |---|---|---|---|

## Reglas

**Todo entregable lleva criterio de aceptación.** Sin él, el desglose no
sirve para negociar ni para cerrar.

**Los supuestos se escriben aunque sean obvios.** Lo obvio para ti no lo
es para quien firma.

**Lo que no se puede estimar se marca `REQUIERE DEFINICIÓN`** con la
pregunta concreta que hay que responder. No pongas un número inventado.

**No incluyas contingencia dentro de las tareas.** Va aparte, explícita,
para que sea negociable.

## Al final

    <n> entregables · <n> tareas · <n> supuestos · <n> requieren definición

<!-- Grado de libertad: MEDIA. Método fijo, contenido depende del caso. -->
SKILL.md
---
description: Construye o actualiza el registro de riesgos de un proyecto con
  probabilidad, impacto, mitigación y dueño. Úsala cuando el usuario mencione
  riesgos, qué puede salir mal, un risk register, o pida evaluar un plan
  antes de comprometerlo.
---

## Instrucciones

### 1 · Identifica por categoría

Recorre estas categorías. No todas aplican a todo proyecto, pero
recorrerlas evita puntos ciegos:

| Categoría | Pregunta que dispara el riesgo |
|---|---|
| **Alcance** | ¿Qué no está definido y alguien asume distinto? |
| **Técnico** | ¿Qué no hemos hecho antes? ¿De qué dependemos y no controlamos? |
| **Recursos** | ¿Quién es irreemplazable en este plan? |
| **Calendario** | ¿Qué depende de qué? ¿Dónde está el camino crítico? |
| **Externo** | ¿Qué proveedor, aprobación o tercero nos puede frenar? |
| **Operación** | ¿Qué pasa el día después de entregar? |

### 2 · Clasifica

**Probabilidad:** Alta (pasa en la mayoría de proyectos así) · Media (ha
pasado antes) · Baja (sería inusual).

**Impacto:** Alto (compromete el objetivo o la fecha) · Medio (cuesta
retrabajo significativo) · Bajo (molesta, se absorbe).

### 3 · Para cada riesgo, escribe la mitigación y el disparador

La mitigación es lo que haces **antes** de que pase. El disparador es la
señal observable de que está pasando.

Un riesgo sin disparador no se puede monitorear: nadie sabe cuándo activar
el plan.

## Formato

    | # | Riesgo | Prob | Imp | Mitigación | Disparador | Dueño |
    |---|---|---|---|---|---|---|

Ordena por impacto descendente, luego por probabilidad.

## Reglas

**Un riesgo se enuncia como causa y efecto**, no como un tema:

    ❌  Riesgo de integración
    ✅  Si la API del proveedor cambia sin aviso, la sincronización
        se cae y perdemos un día en diagnosticar

**Los riesgos Alta/Alto llevan además plan de contingencia**: qué se hace
si ya pasó, no solo cómo evitarlo.

**Todo riesgo tiene dueño nombrado.** "El equipo" no es un dueño.

**Distingue riesgo de problema.** Si ya está pasando, no es riesgo: es un
problema y va a otra lista. Dilo explícitamente cuando lo detectes.

## Al final

    <n> riesgos · <n> alta/alto (requieren contingencia) · <n> sin dueño

<!-- Grado de libertad: MEDIA. Marco fijo, contenido depende del proyecto. -->
SKILL.md
---
description: Redacta el reporte de avance de un proyecto para dirección,
  con semáforo, desviaciones y decisiones que se necesitan. Úsala cuando el
  usuario pida un status, un reporte de avance, un update para dirección,
  o prepare un comité de seguimiento.
---

## Instrucciones

El reporte se escribe para alguien que tiene cinco minutos y varios
proyectos. Estructura:

    # <Proyecto> · Avance al <fecha>

    ## Semáforo: 🟢 / 🟡 / 🔴

    <Una frase que justifique el color. Si es amarillo o rojo, la frase
    dice qué lo causa, no qué se está haciendo al respecto.>

    ## Lo que avanzó

    - <entregable completado, con evidencia verificable>

    ## Lo que se movió

    | Compromiso | Fecha original | Fecha nueva | Por qué |
    |---|---|---|---|

    ## Decisiones que necesito

    | Decisión | Quién decide | Para cuándo | Qué pasa si no se decide |
    |---|---|---|---|

    ## Riesgos activos

    - <solo los que cambiaron de estado desde el último reporte>

## Criterio del semáforo

| Color | Significa |
|---|---|
| 🟢 **Verde** | En fecha y alcance. Sin decisiones pendientes que bloqueen |
| 🟡 **Amarillo** | Hay desviación recuperable, o hay una decisión pendiente con fecha límite |
| 🔴 **Rojo** | La fecha o el alcance comprometido ya no son alcanzables sin cambiar algo |

**El semáforo se pone antes de escribir el resto.** Si lo decides al final,
vas a justificar el verde.

## Reglas

**Sin adjetivos de avance.** "Buen progreso" no dice nada. Escribe qué se
completó y qué falta.

**Lo que se movió va aunque sea incómodo.** Un status que oculta
deslizamientos deja de ser útil la segunda vez que alguien lo nota.

**Las decisiones pendientes son la parte más importante.** Es lo único que
el lector puede hacer por ti. Cada una lleva fecha límite y consecuencia
de no decidir.

**No repitas el reporte anterior.** Solo lo que cambió.

**Si un dato no lo tienes, escribe `SIN DATO`.** No estimes.

<!-- Grado de libertad: MEDIA. Estructura fija, contenido libre. -->
SKILL.md
---
description: Convierte notas crudas de una reunión en una minuta con acuerdos,
  responsables y fechas. Úsala cuando el usuario pegue notas de junta, pida
  una minuta, un acta, un resumen de reunión, o pregunte en qué quedamos.
---

## Instrucciones

Recibes notas desordenadas. Produce una minuta con esta estructura:

    # <Tema> · <fecha>

    **Asistentes:** <lista, o "no registrados">

    ## Decisiones

    - <qué se decidió> — decidido por <quién>

    ## Acuerdos

    | Qué | Quién | Para cuándo |
    |---|---|---|
    | <acción concreta, en imperativo> | <nombre> | <fecha o "sin fecha"> |

    ## Temas abiertos

    - <lo que quedó sin resolver y quién lo retoma>

    ## Contexto relevante

    <solo si hay algo que alguien ausente necesitaría para entender lo anterior>

## Reglas

**Separa decisión de acuerdo.** Una decisión es algo que ya se resolvió.
Un acuerdo es algo que alguien va a hacer. Confundirlos es el error más
común en las minutas.

**Todo acuerdo necesita dueño.** Si las notas no dicen quién, escribe
`SIN DUEÑO` en mayúsculas. Es información, no un hueco.

**Toda fecha se escribe explícita.** "La próxima semana" se convierte en
la fecha concreta. Si no puedes calcularla, escribe `SIN FECHA`.

**No inventes.** Si las notas son ambiguas sobre quién dijo qué o en qué
se quedó, escribe la ambigüedad tal cual: "queda pendiente confirmar si X
o Y". No resuelvas por tu cuenta lo que la reunión no resolvió.

**Omite lo que no aporta.** Una minuta no es una transcripción. Si algo
se discutió pero no produjo decisión, acuerdo ni tema abierto, no va.

## Al final

Agrega una línea con el conteo:

    <n> decisiones · <n> acuerdos (<n> sin dueño, <n> sin fecha) · <n> temas abiertos

Los sin dueño y sin fecha son la parte accionable: quien lee la minuta
sabe qué tiene que cerrar.

<!-- Grado de libertad: MEDIA. Estructura fija, juicio libre sobre qué entra. -->

Calidad documental

Validación de entregables y propuestas

SKILL.md
---
description: Revisa una propuesta técnico-comercial contra los requisitos de
  las bases y marca cada punto sin evidencia. Úsala cuando el usuario
  mencione propuesta, licitación, bases, anexo técnico, matriz de
  cumplimiento, o pida revisar antes de entregar.
allowed-tools: Read Grep
---

## Instrucciones

### 1 · Extrae los requisitos

Si el usuario dio las bases o el anexo técnico, extrae cada requisito como
una línea verificable. Si solo dio la propuesta, dilo y pide las bases: sin
ellas esto es una revisión de estilo, no de cumplimiento.

Numera los requisitos con la numeración del documento original, no con una
propia. Quien evalúa busca por su número.

### 2 · Para cada requisito, encuentra la evidencia

| Estado | Significa |
|---|---|
| **CUMPLE** | La propuesta lo atiende explícitamente y se puede señalar dónde |
| **PARCIAL** | Lo menciona pero no lo demuestra, o lo atiende a medias |
| **NO CUMPLE** | No aparece |
| **AMBIGUO** | El requisito se puede interpretar de dos formas y la propuesta elige una sin decirlo |

La evidencia es una referencia concreta: sección y página. "Se aborda en
la propuesta" no es evidencia.

### 3 · Revisa los riesgos de compromiso

Aparte del cumplimiento, marca:

- Niveles de servicio aceptados sin reserva
- Penalizaciones sin tope
- Fechas comprometidas sin condicionante
- Alcance que excede lo que las bases piden (regalar trabajo también es un riesgo)
- Cifras que no cuadran entre el apartado técnico y el económico

### 4 · Revisa la consistencia entre apartados

Es donde más se cae una propuesta:

- ¿El perfil que promete el apartado técnico está costeado en el económico?
- ¿Los plazos del cronograma coinciden con los del texto?
- ¿La razón social, RFC y datos fiscales son los mismos en todos los anexos?
- ¿Las firmas requeridas están identificadas?

## Formato

    ## Matriz de cumplimiento

    | Req. | Descripción | Estado | Evidencia | Acción |
    |---|---|---|---|---|

    ## Riesgos de compromiso

    | Riesgo | Dónde | Severidad | Recomendación |
    |---|---|---|---|

    ## Inconsistencias entre apartados

    | Qué | Dice en A | Dice en B |
    |---|---|---|

Cierra con:

    <n> requisitos · <n> cumple · <n> parcial · <n> no cumple · <n> ambiguo
    VEREDICTO: <entregable / requiere corrección>

<!-- Grado de libertad: MEDIA. Método fijo, criterio libre. -->
SKILL.md
---
description: Valida que un documento entregable cumpla los criterios de
  completitud, consistencia y formato antes de enviarlo al cliente. Úsala
  cuando el usuario pida revisar un documento, validar un entregable,
  pregunte si un documento está listo para enviar, o mencione control de
  calidad documental.
allowed-tools: Read Grep Bash(bash ${CLAUDE_SKILL_DIR}/scripts/*)
---

## Instrucciones

### 1 · Verificación mecánica primero

    bash ${CLAUDE_SKILL_DIR}/scripts/verificar.sh <archivo>

El script detecta marcadores sin llenar, referencias rotas y secciones
vacías. Lo que reporta son hechos, no opiniones: corrígelos antes de
pasar a la revisión de contenido.

### 2 · Completitud

Para cada sección del documento:

- ¿Existe?
- ¿Tiene contenido real o solo un encabezado?
- ¿Contiene marcadores sin llenar: `TODO`, `XXX`, `[pendiente]`, `<...>`, `Lorem`?
- ¿Las tablas tienen todas sus celdas?

### 3 · Consistencia

- **Terminología**: ¿el mismo concepto se llama igual en todo el documento?
- **Cifras**: ¿los totales suman? ¿el mismo dato aparece igual en todos lados?
- **Fechas**: ¿son coherentes entre sí? ¿alguna está en el pasado sin querer?
- **Nombres**: ¿la razón social, los nombres propios y los cargos están bien escritos y son los mismos en todo el documento?
- **Referencias cruzadas**: ¿"ver sección 4.2" apunta a algo que existe?

### 4 · Riesgo de compromiso

Esta es la parte que más cuesta cuando falla. Marca:

- Compromisos de fecha sin condicionante
- Cifras sin fuente ni supuesto declarado
- Afirmaciones absolutas: "garantizamos", "siempre", "en todos los casos"
- Alcance que excede lo acordado
- Penalizaciones o niveles de servicio aceptados implícitamente

### 5 · Formato

- Jerarquía de encabezados sin saltos de nivel
- Numeración continua en listas y secciones
- Unidades y formato numérico consistentes
- Tablas con encabezado

## Formato del reporte

    BLOQUEANTE  <sección> — <qué falta y por qué impide enviar>
    IMPORTANTE  <sección> — <inconsistencia o riesgo>
    MENOR       <sección> — <formato o estilo>

Ordena por severidad. Omite las categorías vacías.

Cierra con un veredicto de una línea:

    LISTO PARA ENVIAR  /  REQUIERE CORRECCIÓN (<n> bloqueantes)

No reescribas el documento. Señala y explica.

<!-- Grado de libertad: MEDIA. Checklist fijo, juicio libre sobre severidad. -->
scripts/verificar.sh
#!/usr/bin/env bash
# Verificación mecánica de un documento entregable.
# Reporta hechos. El juicio lo pone Claude.
set -uo pipefail

DOC="${1:-}"
if [ -z "$DOC" ] || [ ! -f "$DOC" ]; then
  echo "USO: verificar.sh <archivo>"
  exit 0
fi

echo "ARCHIVO: $DOC"
echo "LINEAS: $(wc -l < "$DOC" | tr -d ' ')"
echo "PALABRAS: $(wc -w < "$DOC" | tr -d ' ')"
echo ""

echo "== MARCADORES SIN LLENAR =="
if grep -nEi 'TODO|TBD|XXX+|lorem ipsum|\[pendiente\]|\[insertar|\[completar|<placeholder>|PENDIENTE DE' "$DOC"; then
  :
else
  echo "  ninguno"
fi
echo ""

echo "== SECCIONES Y JERARQUIA =="
grep -nE '^#{1,6} ' "$DOC" | head -60 || echo "  sin encabezados markdown"
echo ""

echo "== SECCIONES POSIBLEMENTE VACIAS =="
awk '
  function nivel(s) { match(s, /^#+/); return RLENGTH }
  /^#{1,6} / {
    n = nivel($0)
    # un encabezado sin cuerpo solo cuenta como vacio si el siguiente
    # no es un subnivel suyo
    if (titulo != "" && cuerpo == 0 && n <= prev) print "  linea " nlin ": " titulo
    titulo = $0; nlin = NR; cuerpo = 0; prev = n; next
  }
  /[^[:space:]]/ { if (titulo != "") cuerpo = 1 }
  END { if (titulo != "" && cuerpo == 0) print "  linea " nlin ": " titulo }
' "$DOC" | head -20
echo "  (vacio = encabezado sin contenido ni subsecciones)"
echo ""

echo "== REFERENCIAS CRUZADAS DECLARADAS =="
grep -noEi '(ver|v[eé]ase|consulte|seg[uú]n) (la |el )?(secci|apartado|anexo|cap[ií]tulo|tabla|figura|cl[aá]usula)[^ ]* [0-9IVXivx][0-9IVXivxA-Za-z.]*' "$DOC" | head -25 || echo "  ninguna"
echo ""

echo "== FECHAS ENCONTRADAS =="
grep -noE '[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}|[0-9]{4}-[0-9]{2}-[0-9]{2}' "$DOC" | head -25 || echo "  ninguna"
echo ""

echo "== LENGUAJE DE COMPROMISO ABSOLUTO =="
grep -nEi 'garantiza(mos|r|do)?|siempre|nunca|en todos los casos|sin excepci[oó]n|al 100%|totalmente' "$DOC" | head -25 || echo "  ninguno"
echo ""

echo "== CIFRAS CON MONEDA O PORCENTAJE =="
grep -noE '\$[0-9][0-9,.]*|[0-9][0-9,.]*%|MXN ?[0-9][0-9,.]*|USD ?[0-9][0-9,.]*' "$DOC" | head -30 || echo "  ninguna"
echo ""

echo "== TABLAS =="
echo "  filas de tabla detectadas: $(grep -cE '^\|' "$DOC" 2>/dev/null; true)"
SKILL.md
---
description: Verifica que un conjunto de documentos relacionados diga lo
  mismo entre sí: cifras, fechas, nombres y compromisos. Úsala cuando el
  usuario tenga varios documentos de un mismo proyecto, mencione anexos,
  o pregunte si todo cuadra entre sí.
allowed-tools: Read Grep Glob
---

## Instrucciones

Esta skill no revisa un documento: revisa **el conjunto**. El error que
busca es el que solo se ve comparando.

### 1 · Construye el inventario

Lista los documentos a comparar y qué rol tiene cada uno: contrato,
anexo técnico, anexo económico, cronograma, matriz de cumplimiento.

Si falta alguno que los demás referencian, dilo antes de seguir.

### 2 · Compara por dimensión

**Cifras.** Toma cada monto, porcentaje y cantidad, y busca sus
apariciones en todos los documentos. Un monto que aparece distinto en dos
lugares es un hallazgo bloqueante.

**Fechas.** Fechas de inicio, entrega, vigencia y hitos. Verifica además
que sean coherentes: que la entrega no sea anterior al inicio, que la
vigencia cubra el cronograma.

**Nombres y datos fiscales.** Razón social, RFC, domicilio, representante
legal, cargos. Un carácter distinto entre anexos es motivo de descalificación
en un proceso formal.

**Compromisos.** Niveles de servicio, plazos de respuesta, penalizaciones,
entregables. Lo prometido en un documento tiene que estar costeado y
calendarizado en los otros.

**Terminología.** Si el contrato dice "Prestador" y el anexo dice
"Proveedor", uno de los dos está mal.

### 3 · Clasifica cada hallazgo

| Severidad | Criterio |
|---|---|
| **BLOQUEANTE** | Cifras o datos fiscales que no coinciden; compromiso sin respaldo |
| **IMPORTANTE** | Fechas incoherentes; terminología inconsistente en cláusulas |
| **MENOR** | Formato, redondeo, estilo |

## Formato

    | # | Dimensión | Hallazgo | Doc A dice | Doc B dice | Severidad |
    |---|---|---|---|---|---|

Ordena por severidad.

Para cada bloqueante, agrega una línea con **cuál de los dos es el correcto**
si se puede determinar, o la pregunta que hay que hacer si no.

## Al final

    <n> documentos comparados · <n> hallazgos
    <n> bloqueantes · <n> importantes · <n> menores

Si no hay hallazgos, dilo en una línea. No inventes inconsistencias para
llenar el reporte.

<!-- Grado de libertad: ALTA. El criterio de qué cuenta como inconsistencia es el valor. -->

Meta

Skills que trabajan sobre skills

SKILL.md
---
description: Audita las skills de un directorio contra las reglas de
  nomenclatura, descripción, estructura y seguridad, y reporta qué corregir.
  Úsala cuando el usuario pida revisar sus skills, auditar el directorio de
  skills, o pregunte por qué alguna de sus skills no funciona bien.
allowed-tools: Read Grep Glob
---

## Instrucciones

Recorre cada `SKILL.md` del directorio indicado y evalúa los siguientes
puntos. Reporta solo lo que falla.

### Frontmatter

- ¿El `---` de apertura es la **primera línea** del archivo? Si no, todo el
  archivo se trata como contenido y la skill no tiene metadatos
- ¿Existe `description`?
- ¿`description` más `when_to_use` suman menos de 1,536 caracteres?
- Si hay `name`: solo minúsculas, números y guiones, máximo 64 caracteres,
  sin las palabras `anthropic` ni `claude`

### Descripción

- ¿Está en tercera persona? Marca cualquier `te puedo`, `puedo ayudarte`,
  `te ayudo`, `you can`, `I can`
- ¿Incluye la parte del **cuándo**? Busca `úsala cuando`, `use when`, o
  equivalente
- ¿El caso principal está al inicio, o la primera oración es genérica?
- ¿Usa términos vagos como `documentos`, `archivos`, `datos`, `cosas`
  sin acotar?

### Nombre del directorio

- ¿Está en gerundio y describe una actividad?
- ¿Es genérico? Marca `helper`, `utils`, `tools`, `misc`, `general`,
  `mi-skill`, `test`

### Estructura

- ¿`SKILL.md` por debajo de 500 líneas?
- ¿Las referencias a otros archivos van a **un solo nivel**? Si
  `reference.md` referencia a un tercer archivo, es una cadena
- ¿Hay rutas absolutas o con barra invertida?
- ¿Las rutas a archivos propios usan `${CLAUDE_SKILL_DIR}`?
- ¿Declara su grado de libertad en un comentario final?

### Seguridad

- ¿`allowed-tools` pide más de lo necesario? Un `Bash` pelado sin patrón
  es un hallazgo
- Si la skill ejecuta acciones con efectos —desplegar, commitear, enviar,
  borrar— ¿lleva `disable-model-invocation: true`?
- ¿Hay credenciales, tokens, rutas de infraestructura o datos de cliente?
- ¿Los comandos `!` que pueden salir con código distinto de cero llevan
  `|| true`?

### Contenido

- ¿Explica cosas que Claude ya sabe?
- ¿Tiene información con fecha de caducidad: versiones concretas, precios,
  nombres en puestos, "actualmente", "por ahora"?
- ¿La terminología es consistente de principio a fin?
- ¿Ofrece varias alternativas donde debería dar una?

### Solapamiento

Compara las descripciones entre sí. Dos skills cuyas descripciones cubren
el mismo territorio se estorban: se dispara la equivocada de forma
inconsistente. Repórtalo con las dos involucradas.

## Formato del reporte

    ## <nombre-de-la-skill>

    BLOQUEANTE  <qué está mal> → <cómo se corrige>
    IMPORTANTE  <qué está mal> → <cómo se corrige>
    MENOR       <qué está mal>

**Bloqueante:** frontmatter que no parsea, descripción sin el "cuándo",
descripción en 1ª o 2ª persona, secretos, acción con efectos sin
`disable-model-invocation`.

Si una skill no tiene hallazgos, escríbela con un `✓` y nada más.

Cierra con:

    <n> skills · <n> sin hallazgos · <n> bloqueantes · <n> importantes
    Solapamientos detectados: <lista de pares, o ninguno>

<!-- Grado de libertad: MEDIA. Checklist fijo, juicio libre sobre severidad. -->
SKILL.md
---
description: Convierte la conversación actual en una skill de Claude Code
  reutilizable, analizando qué contexto hizo falta y qué correcciones
  revelaron huecos. Úsala cuando el usuario diga que quiere convertir esto
  en una skill, guardar este patrón, no volver a explicar lo mismo, o
  destilar la conversación.
disable-model-invocation: true
---

> Esta skill se invoca manualmente con `/destilando-conversacion` al final
> de una conversación productiva.

## Fase 1 · Analiza antes de escribir

Responde estas seis preguntas en una lista corta. No escribas el SKILL.md
todavía.

1. **¿Cuál fue la tarea real?** Enúnciala como actividad, en gerundio.

2. **¿Qué contexto tuvo que dar el usuario** que tú no sabías de entrada?
   Sepáralo en (a) convenciones o criterios suyos, y (b) hechos del proyecto.

3. **¿En qué momentos te corrigió**, y qué revela cada corrección sobre lo
   que faltaba en la instrucción inicial?

4. **¿Qué parte de lo explicado era innecesaria** porque ya lo sabías?

5. **¿Qué tan frágil es la tarea?** Alta libertad si varios caminos llegan a
   un buen resultado; media si hay un patrón preferido; baja si un paso en
   falso rompe algo.

6. **¿Con qué frases exactas pediría el usuario esta tarea la próxima vez?**
   Tres variantes, en sus palabras, no en lenguaje de manual.

## Fase 2 · Construye el SKILL.md

### Nombre

Gerundio que describe la actividad, minúsculas con guiones, máximo 64
caracteres, sin `anthropic` ni `claude`. Nunca genérico.

### Descripción

Fórmula: `[qué hace]. Úsala cuando [cuándo usarla].`

- Tercera persona, siempre
- Caso principal al inicio
- Los disparadores salen de la pregunta 6, no de lenguaje formal
- Tope de 1,536 caracteres

### Cuerpo

- Solo lo de la pregunta 2. Nada de lo de la pregunta 4
- Instrucciones permanentes, no pasos de un solo uso: el contenido se queda
  en contexto turno tras turno
- Enuncia qué hacer, no narres por qué
- Si la pregunta 5 dio baja libertad: comando exacto y prohibición explícita
  de variarlo
- Por debajo de 100 líneas

### Frontmatter

- `allowed-tools` solo si ejecuta comandos, con el patrón más acotado posible
- `disable-model-invocation: true` si la tarea tiene efectos irreversibles
- Cierra el cuerpo con `<!-- Grado de libertad: ALTA/MEDIA/BAJA -->`

## Fase 3 · Entrega

1. El análisis de las seis preguntas
2. El `SKILL.md` completo, en un bloque de código
3. El comando `mkdir -p` para crear la carpeta
4. Tres evaluaciones: dos que **deben** disparar la skill y una que **no**
   debe dispararla, con el resultado esperado de cada una

No ofrezcas alternativas. Da una versión, y di qué decisión tomaste en los
puntos donde había más de un camino.

<!-- Grado de libertad: MEDIA. Método fijo, contenido depende de la conversación. -->

Plantillas

Tres puntos de partida en blanco, con los TODO donde va tu contenido.

Mínima

SKILL.md
---
description: TODO qué hace, en tercera persona, empezando por el caso
  principal. Úsala cuando el usuario TODO — pon aquí las palabras que
  escribirías tú de verdad al pedirlo, no lenguaje de manual.
---

## Instrucciones

TODO: el procedimiento, en imperativo, dirigido a Claude.

Solo escribe lo que Claude NO sabe ya. Si estás explicando qué es un
pull request o cómo funciona git, bórralo.

Recuerda: este contenido se queda en contexto turno tras turno. Cada
línea es costo recurrente. Enuncia qué hacer, no narres por qué.

<!-- Grado de libertad: TODO ALTA / MEDIA / BAJA -->

Multiarchivo

SKILL.md
---
description: TODO qué hace. Úsala cuando TODO.
allowed-tools: Read Grep Bash(bash ${CLAUDE_SKILL_DIR}/scripts/*)
---

## Instrucciones

1. Ejecuta la verificación:

       bash ${CLAUDE_SKILL_DIR}/scripts/verificar.sh

2. TODO: qué hacer con el resultado.

3. Para el detalle de los casos especiales, consulta
   ${CLAUDE_SKILL_DIR}/reference.md

<!--
  REGLAS DE ESTRUCTURA
  · reference.md NO puede referenciar a un tercer archivo (un solo nivel)
  · los scripts se EJECUTAN, no se leen
  · rutas siempre con ${CLAUDE_SKILL_DIR}
  · la misma variable en el cuerpo y en allowed-tools evita la
    solicitud de permiso
  · este archivo por debajo de 500 líneas

  Grado de libertad: TODO
-->
reference.md
# Detalle de referencia

Esto se carga SOLO cuando Claude decide que le hace falta. Aquí va lo
voluminoso: tablas, casos especiales, catálogos, especificaciones.

## TODO: sección

TODO: contenido

<!-- No referencies otros archivos desde aquí. Un solo nivel. -->
scripts/verificar.sh
#!/usr/bin/env bash
# TODO: qué verifica este script.
#
# Reglas del buen script de skill:
#  · sale con 0 aunque encuentre problemas; quien decide es Claude
#  · imprime resultados legibles y estructurados, no volcados crudos
#  · no depende de rutas absolutas de tu máquina
set -uo pipefail

echo "RESULTADO: TODO"

Baja libertad

SKILL.md
---
description: TODO qué hace. Úsala cuando TODO.
allowed-tools: Bash Read
disable-model-invocation: true
---

> Esta skill tiene efectos irreversibles. Solo se invoca manualmente.
> No se activa sola.

## Procedimiento

Ejecuta **exactamente** estos pasos, en este orden. No agregues banderas,
no combines pasos, no optimices.

### 1 · Verificación previa

    bash ${CLAUDE_SKILL_DIR}/scripts/verificar-estado.sh

Si reporta algo distinto de `ESTADO: LIMPIO`, **detente** y reporta al
usuario qué encontró. No continúes.

### 2 · TODO: el comando exacto

    TODO

No modifiques este comando ni agregues banderas, aunque el mensaje de
error lo sugiera.

### 3 · Si falla

Detente. Reporta el error completo al usuario. **No intentes corregirlo
por tu cuenta.** La reversión requiere decisiones que toma una persona.

<!-- Grado de libertad: BAJA. Puente angosto con precipicios. -->
scripts/verificar-estado.sh
#!/usr/bin/env bash
# Verificación previa. Falla ruidosamente por diseño.
set -uo pipefail
problemas=0

# TODO: agrega tus verificaciones
# if [ condición ]; then
#   echo "PROBLEMA: descripción"
#   problemas=$((problemas+1))
# fi

if [ "$problemas" -eq 0 ]; then
  echo "ESTADO: LIMPIO"
else
  echo "ESTADO: $problemas problema(s). No continuar."
fi