Lección 08: combinando opciones
Los campos individuales del frontmatter son directos. El reto es decidir qué combinación usar para un skill específico. Esta lección ofrece un marco de decisión y documenta los errores más comunes.
Marco de decisión
Trabaja estas cuatro preguntas en orden:
1. ¿Tiene este skill efectos secundarios?
Los efectos secundarios incluyen: hacer push a un remoto, enviar mensajes, escribir a servicios externos, borrar archivos, ejecutar despliegues, disparar jobs de CI.
Si sí: pon disable-model-invocation: true. No quieres que Claude lo dispare automáticamente.
Si no: déjalo sin definir. La autoinvocación es segura y útil.
2. ¿Es esto un skill o conocimiento de fondo?
Si el skill es una acción (haz X, genera Y, despliega Z): deja user-invocable en su valor por defecto (true). El usuario debería poder invocarlo.
Si el skill es conocimiento que moldea el comportamiento de Claude (aplica estas convenciones, usa este formato de respuesta, ten en cuenta estas restricciones): pon user-invocable: false. No debería aparecer en el menú /.
3. ¿Necesita este skill datos en vivo?
Si sí: añade inyección !`cmd` para los datos específicos que necesita (estado de git, información del entorno, status de PR, valores de configuración). Inyecta solo lo que Claude necesita — evita inyectar salidas grandes que inflen el tamaño del context.
Si no: omite la inyección.
4. ¿Debería este skill activarse solo para ciertos tipos de archivo?
Si sí: pon paths con los patrones glob apropiados.
Si no: déjalo sin definir.
Tras responder estas cuatro preguntas, añade allowed-tools para cualquier tooling que el skill necesite usar sin pedir permiso, y considera model y effort solo si este skill tiene un requisito de coste/capacidad claramente distinto al de la sesión por defecto.
Patrones comunes
Flujo de despliegue seguro
disable-model-invocation: true # tiene efectos secundariosargument-hint: [environment] # el usuario especifica el destinoallowed-tools: Bash(npm *) Bash(git *) # preaprobar los comandos necesariosEl cuerpo usa $ARGUMENTS para el entorno de destino y !`git status` para una comprobación previa.
Skill de conocimiento de fondo
user-invocable: false # conocimiento, no una acción# la description cubre todas las palabras clave de activaciónEl cuerpo contiene las convenciones, reglas o context. Sin argumentos, sin necesidad de inyección.
Formateador consciente de path
paths: ["src/**", "lib/**"] # solo relevante para archivos fuenteallowed-tools: Bash(npx prettier *) # preaprobar el formateadoruser-invocable: false # activado por Claude tras edicionesEl cuerpo describe las reglas de formateo e instruye a Claude para ejecutar prettier tras las ediciones.
Skill de investigación aislada
context: fork # ejecutar en subagent aisladoagent: Explore # usar el subagent Exploreallowed-tools: Read Grep Glob # tooling de solo lecturaEl cuerpo describe la tarea de investigación. El fork evita que la salida grande de investigación contamine el context principal.
Errores comunes
Poner a la vez disable-model-invocation: true y user-invocable: false
# No hagas estodisable-model-invocation: trueuser-invocable: falseCon ambos activos, el skill es inaccesible:
- Claude no puede invocarlo (la description no está en el context de Claude)
- Tú no puedes invocarlo (no está en el menú
/)
La única manera de ejecutarlo es claude -p "/skill-name" en modo headless. Si eso es intencional, documéntalo explícitamente en la description. Si no es intencional, has creado un skill que nadie puede usar.
Olvidar allowed-tools en un skill con disable-model-invocation: true
disable-model-invocation: true# allowed-tools omitidoSin allowed-tools, Claude pedirá permiso antes de cada llamada de tooling durante la ejecución del skill. Para un flujo de despliegue con cinco comandos de git y dos de npm, son siete prompts. El usuario tiene que pulsar a través de todos ellos. Anula el propósito de un flujo estructurado; añade allowed-tools para los comandos específicos que necesita el skill.
Dar permisos en exceso a allowed-tools
allowed-tools: Bash(*) # permite cualquier comando bashEsto preaprueba cualquier comando de shell posible. Anula el propósito de acotar. Lista solo los comandos específicos que necesita el skill, usando los patrones más estrechos que aún funcionen:
allowed-tools: Bash(npm test) Bash(npm run build) Bash(git status) Bash(git tag *) Bash(git push *)Usar paths para skills dirigidos al usuario
Si un usuario espera escribir /my-skill y que funcione en cualquier sitio, no pongas paths. Las restricciones de path solo reducen falsos positivos de autoinvocación — no añaden corrección. Un skill de despliegue no debería tener paths definido; debería funcionar desde cualquier context.
Ejemplos
examples/safe-deploy/— combinadisable-model-invocation,argument-hint,allowed-toolse inyección dinámica en un flujo de despliegue completoexamples/on-edit-formatter/— combinapaths,allowed-toolsyuser-invocable: falsepara un formateador de fondo que se ejecuta tras ediciones