Buenas Prácticas para Comandos, Hooks y Subagentes Personalizados
Estas son las convenciones que vale la pena adoptar una vez que un proyecto comienza a depender de comandos, hooks y subagentes personalizados más allá de un experimento único.
Busca en todas las páginas de la documentación
Estas son las convenciones que vale la pena adoptar una vez que un proyecto comienza a depender de comandos, hooks y subagentes personalizados más allá de un experimento único.
Cada regla a continuación refleja un modo de fallo real, un matcher ambiguo, un prompt de tarea vago, un hook que se ejecuta de manera demasiado amplia, que aparece rápidamente una vez que estos puntos de extensión se utilizan para trabajo real.
settings.json o .claude/commands/ crezca más allá de un puñado de entradas; las convenciones decaen más rápido bajo una acumulación silenciosa.description en su frontmatter. Sin ella, un comando es invisible en el autocompletado, y los compañeros de equipo recurren a reimplementar la misma solicitud desde cero./pre-review se lee claramente meses después; /chris-check no sobrevive a la salida de la persona del equipo./pr-review, /pr-summarize y /pr-changelog se leen como una familia en el autocompletado; tres nombres no relacionados no lo hacen.Edit|Write, no un match sin delimitar en cada llamada a herramienta.{"decision": "block", "reason": "..."} es la señal confiable; los códigos de salida solos pueden interpretarse de manera inconsistente.*.json que protege un archivo de bloqueo terminará bloqueando cada archivo JSON en el proyecto.Edit o Write en su lista de herramientas, como cuestión de aplicación, no solo de orden..claude/commands/, settings.json, o una definición de subagente.settings.json y .claude/commands/ juntos durante la incorporación. Ambos están controlados en el repositorio y ambos dan forma a lo que significa "escribir una solicitud" o "ocurrir una edición"; omitir cualquiera de ellos deja a un nuevo miembro del equipo con una imagen incompleta.Asignar una description clara a los comandos y delimitar estrechamente los matchers de los hooks. Ambas son baratas de hacer desde el principio y caras de adaptar una vez que un proyecto ha acumulado una docena de comandos indocumentados o un hook demasiado amplio.
Para un comando puramente personal y desechable, sí. Para cualquier cosa controlada en un repositorio compartido, omitirla significa que los compañeros de equipo no pueden descubrir que el comando existe sin abrir el archivo directamente.
Porque un comando sobrevive a la persona que lo escribió; un nombre ligado a la acción (/pre-review) se mantiene significativo mucho después de que un nombre ligado al autor (/chris-check) ha perdido su contexto.
Dejar el matcher sin delimitar, de modo que el hook se active en cada llamada a herramienta en lugar de solo en las herramientas que realmente le importan, agregando ruido y latencia a acciones no relacionadas.
Porque el manejo del código de salida puede variar según la configuración, mientras que una carga útil explícita {"decision": "block", "reason": "..."} es la forma inequívoca y documentada de señalar un bloqueo.
No. Un solo script de protección con una lista de patrones de rutas protegidas es más fácil de auditar en su conjunto que las mismas reglas dispersas en muchas entradas de hook separadas.
Cuando la tarea del subagente realmente requiere el mismo acceso amplio que la sesión principal, como un subagente encargado explícitamente de realizar un conjunto coordinado de ediciones en varios archivos. La delimitación es un valor predeterminado, no un requisito absoluto.
El subagente que necesitaba la información faltante típicamente producirá un informe más débil o incorrecto, ya que no tiene forma de solicitar ese contexto a mitad de la tarea; detectar dependencias antes de generarlos evita esto.
Porque un hook es un comando de shell sin razonamiento de modelo adjunto; pedirle que "decida" algo significa escribir lógica condicional frágil para aproximar una decisión que un comando o subagente podría razonar realmente.
El razonamiento sigue siendo el mismo, pero el costo de omitirlas aumenta drásticamente en un equipo: un comando indocumentado o un hook demasiado amplio afecta a todos los que extraen el repositorio, no solo a la persona que lo escribió.
Revísalos cada vez que settings.json o el directorio de comandos crezca más allá de un puñado de entradas, ya que las convenciones tienden a decaer silenciosamente a medida que se acumulan más automatizaciones sin que nadie audite el conjunto completo.
La disciplina de nomenclatura y descripción es importante para ambos, pero el control de versiones de scripts y la documentación de qué punto de extensión está en uso son más importantes para los comandos y hooks con alcance de proyecto, ya que esos son los que comparte todo el equipo.
Versiones de Stack: Escrito contra la línea de modelos Claude actual a partir de ~junio de 2026 - Claude Fable 5, Claude Opus 4.8, Claude Sonnet 5 (el predeterminado) y Claude Haiku 4.5. Los nombres de modelos, precios y características del producto cambian rápidamente; verifica los detalles actuales en platform.claude.com/docs antes de confiar en ellos.
Revisado por Chris St. John·Última actualización: 16 jul 2026