Route
Argumentos: $ARGUMENTS
<base> a continuación significa el "Directorio base para esta habilidad" que se muestra arriba de este texto. El script es
<base>/scripts/inventory.py. El catálogo personal reside en ~/.claude/route-catalog/ (o en
$ROUTE_CATALOG_DIR), nunca dentro del plugin.
0. Encontrar la solicitud
El usuario escribe un prompt normal y añade /route. Determina la solicitud a partir de sus propias palabras:
/routeestá en el mismo mensaje que el prompt (antes o después): la solicitud es ese mensaje completo sin la palabra/route./routese envió solo: la solicitud es el mensaje anterior del usuario (o mensajes, si pertenecen a la misma tarea), leídos junto con la conversación. Nunca trates la palabra suelta "/route" como la solicitud.- Los argumentos de arriba contienen texto: trátalo como la solicitud o parte de ella, pero el mensaje del usuario prevalece si difieren.
- Si ya habías comenzado a trabajar en esa solicitud antes de que llegara
/route, revisa lo que está hecho y enruta solo el trabajo restante. No rehagas pasos ya completados. - Si la solicitud es
build, lee<base>/BUILD.mdy síguelo. Si esrefresh, salta a Refrescar.
Mantén el prompt del usuario como la tarea. No lo reduzcas a la parte que cubre una sola habilidad: cada parte del prompt debe estar cubierta por una habilidad cargada o por tu propio trabajo.
1. Comprender la solicitud
Escribe una línea para ti mismo: el objetivo, el entregable, la tecnología o los archivos involucrados y la fase (planificar, construir, depurar, revisar, verificar, lanzar, documentación, multimedia, operaciones). Usa la conversación: una solicitud como "arréglalo" o "haz el video" se refiere a lo que se acaba de discutir. No explores el código base todavía.
Salida temprana: si la solicitud es trivial (un renombrado, una corrección de una línea, una pregunta simple), imprime "No se necesita habilidad: " y realiza la tarea. No leas el catálogo.
Si el CLAUDE.md del proyecto requiere un primer paso antes de cualquier trabajo (por ejemplo, "busca en el runbook el texto del error antes de diagnosticar"), realiza ese paso ahora. Su resultado puede cambiar qué habilidades se necesitan.
2. Encontrar candidatos
- Ejecuta
python3 <base>/scripts/inventory.py --checkdesde el directorio actual.NO CATALOG: dile al usuario que el enrutador necesita un/route buildúnico, ofrécete a ejecutarlo ahora y mientras tanto maneja la solicitud con las habilidades que puedas ver en tu propia lista de habilidades.- De lo contrario, imprime
catalog in sync, o habilidades NUEVAS (instaladas, no en el catálogo, con su descripción) y entradas ELIMINADAS (ya no instaladas). Las habilidades NUEVAS son candidatos válidos. Nunca elijas una ELIMINADA.
- Si
--checkreporta que existen anulaciones, lee ese archivo primero. Contiene las reglas de enrutamiento propias del usuario ("embellecer UI -> better-ui, nunca impeccable"). Una anulación que coincida con la solicitud vence al catálogo, sus selecciones predeterminadas y tu propio juicio. Menciona la anulación en la columna Por qué. - En la carpeta del catálogo que
--checkimprime en su primera línea, leeINDEX.mdy, si existe,PROFILE.md(la pila tecnológica y hábitos del usuario). - Elige de 1 a 3 categorías que coincidan con la solicitud y lee solo esos archivos de categoría.
Cada línea de habilidad dice:
- `nombre` [cargar] USO: ... | NO: ... | SIGUIENTE: ... | NECESITA: ...
3. Elegir el conjunto
- Elige el conjunto más pequeño que cubra toda la solicitud: normalmente de 1 a 3 habilidades, nunca más de 5.
- Una habilidad por trabajo. Nunca cargues dos habilidades que hagan el mismo trabajo; sigue las "Selecciones predeterminadas" de la categoría.
- Obedece el campo NO de cada habilidad. Si NO nombra una habilidad mejor para esta solicitud, toma esa.
- Para el mismo trabajo, prefiere una habilidad de proyecto (
[project], de.claude/skillsde este repositorio) o una de las habilidades personalizadas del usuario sobre una habilidad genérica. - Si una habilidad enumera NECESITA que faltan aquí, dilo y elige la siguiente mejor habilidad.
- Si ninguna habilidad añade valor real, di "No se necesita habilidad" y realiza la tarea.
- Si dos interpretaciones muy diferentes de la solicitud llevan a habilidades distintas, haz una pregunta corta con las opciones antes de cargar nada.
4. Mostrar el plan, luego cargar
Imprime esta tabla como texto visible antes de la primera llamada a Habilidad. Es salida requerida, no narración: imprímela incluso cuando esté activo un estilo conciso o "sin texto antes de llamadas a herramientas".
| # | Habilidad | Por qué esta | Cargar |
|---|---|---|---|
| 1 | nombre-habilidad | una línea vinculada a la solicitud | habilidad / leer / incorporado / proyecto |
Una fila puede ser condicional: escribe "solo si <condición>" en la columna Por qué y cárgala solo cuando se cumpla la condición.
Añade una nota de "Efecto secundario" debajo de la tabla por cada paso que envíe mensajes, despliegue, elimine datos, gaste créditos pagados o escriba en producción, ya sea que lo haga una habilidad o el trabajo mismo. Pregunta antes de ese paso. De lo contrario, continúa sin esperar.
Carga las habilidades en el orden de la tabla (primero planificar, luego construir, luego verificar):
[habilidad],[incorporado],[proyecto]: llama a la herramienta Habilidad con el nombre exacto y pasa la parte de la solicitud que esa habilidad debe manejar comoargs.[leer <ruta>]: la herramienta Habilidad rechaza esta habilidad (solo usuario). Lee el archivo en<ruta>y síguelo como si estuviera cargado.- Si una llamada a Habilidad falla, lee el SKILL.md de la habilidad en su lugar (
inventory.pysin banderas imprime cada ruta) y dilo.
5. Hacer el trabajo
Sigue las habilidades cargadas juntas. Cuando dos entren en conflicto, la más específica gana para esa parte de la tarea. Los archivos CLAUDE.md del usuario y las instrucciones explícitas vencen a cada habilidad.
Si aparece una nueva necesidad a mitad de camino (por ejemplo, la corrección necesita una migración), carga una habilidad más y anúnciala en una línea: "Cargando también x: ".
6. Verificar, registrar, informar y sugerir qué ejecutar a continuación
Verificación final: cuando se hayan cargado dos o más habilidades o la solicitud tuviera varias partes, verifica cada parte antes de la respuesta final. Para cada habilidad cargada y cada parte de la solicitud que ninguna habilidad cubrió, decide hecho / parcial / bloqueado, con evidencia (un archivo:línea, un resultado de prueba, una salida de comando). Ponlo en la respuesta final como una tabla corta:
| Parte | Habilidad | Estado | Evidencia |
|---|
Si una parte está parcial o bloqueada, di qué falta en lugar de dar la tarea por terminada. Omite la tabla para una solicitud de una sola habilidad y una sola parte.
Registro: ejecuta python3 <base>/scripts/inventory.py --log '<json>' una vez, con un objeto JSON: request (la solicitud en máximo 160 caracteres, sin secretos), loaded (habilidades cargadas), used (habilidades cargadas cuyas instrucciones realmente moldearon el trabajo), unused (cargadas pero no necesitadas), skipped (filas planificadas que no se ejecutaron), next (las habilidades Siguientes que sugieres), no_skill (verdadero cuando no se necesitó habilidad), check ("hecho", "parcial", "bloqueado" o "n/a"). El registro es parte del enrutamiento, no opcional. Si el comando falla, dilo en una línea y continúa.
inventory.py --report después muestra qué cargó /route, qué usó el trabajo y cuántas habilidades Siguientes siguió el usuario.
Comienza la respuesta final con una línea que diga qué habilidades se ejecutaron, para que el usuario lo vea incluso si la tabla se desplazó: Habilidades usadas: a, b(añade omitida c: `` cuando una fila planificada no se ejecutó, o Habilidades usadas: ninguna (<motivo>)).
Termina la respuesta final con esta sección:
Siguientes habilidades
nombre-habilidad: cuándo (ahora / antes de commit / antes de push / después de deploy / una vez a la semana), y por qué.
Da máximo 3. Tómalos de los campos SIGUIENTE de las habilidades cargadas, las "Selecciones predeterminadas" de las categorías que leíste y los pasos que requiere el CLAUDE.md del proyecto (por ejemplo, una ejecución completa de pruebas antes de push). Conserva solo los que se ajusten a lo que realmente sucedió y no los ejecutes. Esta sección también aplica cuando no se cargó ninguna habilidad.
Refrescar
Ejecutar cuando el usuario instala, elimina o actualiza habilidades o plugins.
- Ejecuta
python3 <base>/scripts/inventory.py --check. Si imprimeNO CATALOG, ejecuta la construcción en su lugar. - Para cada habilidad NUEVA: lee su SKILL.md (frontmatter y primeras ~80 líneas), elige el archivo de categoría cuyo Alcance encaje (
inventory.pylista las categorías fijas en su TAXONOMÍA) y añade una línea en el mismo formato que las otras líneas de ese archivo. Usa[leer <ruta absoluta>]cuando su frontmatter tengadisable-model-invocation: true, y[proyecto]cuando resida en.claude/skillsde un repositorio. Si el archivo de categoría aún no existe, créalo con el mismo encabezado (# nombre,Alcance:,Selecciones predeterminadas:). - Para cada entrada ELIMINADA: elimina su línea y bórrala de cualquier texto de "Selecciones predeterminadas".
- Ejecuta
inventory.py --index, luego--checkde nuevo hasta que imprimacatalog in sync. Informa qué se añadió y qué se eliminó.