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]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.