Decidir slash command vs skill y escribir su frontmatter de producción (context fork, allowed-tools whitelist, argument-hint) con el scope correcto, sin contaminar la sesión ni romper la replicabilidad del equipo.
Diseñar e implementar extensiones de Claude Code de producción: slash commands (.claude/commands/X.md) y skills (SKILL.md con context: fork, allowed-tools, argument-hint), eligiendo el artefacto y el scope correctos. La capacidad no es "escribir un .md": es decidir command vs skill por tipo de disparo y scope, economizar contexto con fork, y acotar el blast radius de operaciones mutadoras con whitelist de herramientas, sin contaminar la sesión ni romper la replicabilidad del equipo. [DOC]
/comando arg) → candidato a slash command. [DOC]context: fork. [DOC].claude/commands/, .claude/skills/), nunca user. [DOC]allowed-tools. [DOC]CLAUDE.md. [DOC]No usarla cuando (anti-scope): el pedido es de dominio no-tooling (correos, análisis, contenido) [CONFIG: ver evals negative_*]; el input está vacío; o piden explícitamente violar las reglas (user scope para artefacto de equipo, sin fork, sin allowed-tools) — en ese caso no actives: explica el anti-patrón en vez de obedecerlo. [CONFIG: evals negative_anti_pattern_request]
allowed-tools mínimo justificado; (5) checklist de validación resuelto. [INFERENCE]context: fork. [DOC].claude/ versionado (project). User scope solo para experimentos personales que NO deben llegar al repo de nadie. [DOC]argument-hint para que el invocante sepa qué pasar; en skill, description como contrato de routing (qué la activa, en una línea). [DOC]context: fork para que la sub-tarea no contamine ni infle la sesión principal. [DOC]allowed-tools con el mínimo. Sin mutación → read-only (Read, Grep, Glob). Con ejecución → añade Bash explícito y documenta por qué. [DOC]CLAUDE.md. La skill encapsula solo la capacidad condicional/invocable. [DOC]| Señal | Command | Skill (context: fork) |
|---|---|---|
| Disparo | Explícito por nombre (/x) | Por contexto/semántica |
| Argumentos | Posicionales vía $ARGUMENTS | argument-hint + routing por description |
| Contexto | Inline en sesión actual | Ventana aislada (no infla la principal) |
| Mejor para | Acción corta, predecible | Sub-tarea con herramientas acotadas |
[INFERENCE]
# .claude/skills/release-notes/SKILL.md (project scope, versionado)
---
name: release-notes
description: "Genera notas de versión desde git log entre dos tags; se activa al pedir changelog/release notes."
context: fork # GOOD: aísla y economiza la ventana principal
argument-hint: "<tag-desde> <tag-hasta>"
allowed-tools: # GOOD: whitelist mínima; solo lectura + git
- Read
- Grep
- Bash
---<!-- .claude/commands/deploy-check.md (GOOD: disparo explícito, project scope) -->
---
argument-hint: "<env>"
---
Verifica readiness de deploy para $ARGUMENTS. Solo lectura.# ANTI: user scope -> no se replica al equipo (cada quien la recrearía)
# ~/.claude/skills/release-notes/SKILL.md
---
name: release-notes
# ANTI: sin context: fork -> la sub-tarea contamina e infla la sesión principal
# ANTI: sin allowed-tools -> ops destructivas sin whitelist (blast radius abierto)
description: "hace cosas con git" # ANTI: description vaga, no es contrato de routing
---
# ANTI: la skill incrusta convenciones permanentes (van en CLAUDE.md, no aquí)description multilínea o vaga → el router no activa bien la skill. Reescríbela en una sola línea con el trigger explícito. [INFERENCE]Bash en la whitelist sin justificación → reducir a read-only o añadir la justificación. Whitelist abierta = blast radius abierto. [DOC]CLAUDE.md; la skill solo capacidad condicional. [DOC]Disparadores de autocorrección: si el frontmatter quedó sin argument-hint, o allowed-tools incluye más de lo necesario, o el scope es user pero el artefacto es de equipo → detente y corrige antes de marcar listo. [INFERENCE]
context: fork vs inline. Fork aísla y economiza la ventana pero pierde el contexto vivo de la sesión; úsalo cuando la sub-tarea sea no trivial y autocontenida, no para acciones de una línea. [INFERENCE]allowed-tools reduce blast radius a cambio de fricción si luego necesitas otra herramienta; prefiere ampliar deliberadamente sobre abrir por defecto. [DOC]No marques la skill como lista hasta que TODO sea sí (gate operativo en assets/checklist.md, rúbrica en assets/quality-rubric.json):
context: fork en skills de trabajo no trivial (economía de contexto)? [DOC]allowed-tools es whitelist mínima, read-only salvo justificación explícita para Bash/mutaciones? [DOC]description/argument-hint funcionan como contrato de activación e interfaz? [DOC]CLAUDE.md y NO dentro de la skill? [DOC]name único, description en una sola línea)? [INFERENCE].claude/commands/ o .claude/skills/, para que el plan sea reproducible (artefacto, scope, frontmatter, seguridad, validaciones). [SUPUESTO: el harness de assets/scripts puede no estar provisto; si no existe, documenta el plan inline con la misma estructura]scripts/check.sh, si está disponible en el repo) antes de marcarla lista; si no existe, recorre el checklist-gate a mano. [SUPUESTO]name (id), no rompas referencias cruzadas ni rutas .claude/, y haz minor-bump de version. Nunca renombres el id ni cambies el scope sin migrar las invocaciones. [DOC]context: fork; herramientas irrestrictas; commands con trigger contextual; frontmatter sin interfaz clara. [DOC]katas-custom-commands-skills. [CONFIG]session-lifecycle-management, validation-retry-design. [CONFIG]JaviMontano/jm-adk-beta
fdad39c
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.