Route
Arguments : $ARGUMENTS
<base> ci-dessous désigne le "Répertoire de base pour cette compétence" (chemin affiché ci-dessus). Le script est
<base>/scripts/inventory.py. Le catalogue personnel se trouve dans ~/.claude/route-catalog/ (ou dans
$ROUTE_CATALOG_DIR), jamais à l'intérieur du plugin.
0. Trouver la demande
L'utilisateur écrit une invite normale et y ajoute /route. Déterminez la demande à partir de ses propres mots :
/routeest dans le même message que l'invite (avant ou après) : la demande est l'intégralité du message sans le mot/route./routea été envoyé seul : la demande est le message précédent de l'utilisateur (ou les messages, s'ils appartiennent à la même tâche), lu avec la conversation. Ne traitez jamais le mot seul "/route" comme la demande.- Les arguments ci-dessus contiennent du texte : traitez-le comme la demande ou une partie de celle-ci, mais le propre message de l'utilisateur prévaut en cas de différence.
- Si vous avez déjà commencé cette demande avant l'arrivée de
/route, examinez ce qui est fait, et acheminez uniquement le travail restant. Ne refaites pas les étapes terminées. - Si la demande est
build, lisez<base>/BUILD.mdet suivez-le. Si c'estrefresh, passez directement à Refresh.
Conservez l'invite de l'utilisateur comme tâche. Ne la réduisez pas à la partie couverte par une seule compétence : chaque partie de l'invite doit être couverte par une compétence chargée ou par votre propre travail.
1. Comprendre la demande
Écrivez une ligne pour vous-même : l'objectif, le livrable, la technologie ou les fichiers impliqués, et la phase (planifier, construire, déboguer, réviser, vérifier, livrer, documentation, média, opérations). Utilisez la conversation : une demande comme "corrige ça" ou "fais la vidéo" fait référence à ce qui vient d'être discuté. N'explorez pas encore la base de code.
Sortie anticipée : si la demande est triviale (un renommage, une correction d'une ligne, une simple question), affichez "Aucune compétence nécessaire : " et effectuez la tâche. Ne lisez pas le catalogue.
Si le CLAUDE.md du projet exige une première étape avant tout travail (par exemple "recherchez le texte d'erreur dans le runbook avant de diagnostiquer"), exécutez cette étape maintenant. Son résultat peut modifier les compétences nécessaires.
2. Trouver les candidats
- Exécutez
python3 <base>/scripts/inventory.py --checkdepuis le répertoire courant.NO CATALOG: dites à l'utilisateur que le routeur a besoin d'un/route buildunique, proposez de l'exécuter maintenant, et pendant ce temps, traitez la demande avec les compétences que vous voyez dans votre propre liste de compétences.- Sinon, il affiche
catalog in sync, ou les NOUVELLES compétences (installées, pas dans le catalogue, avec leur description) et les entrées SUPPRIMÉES (non installées). Les NOUVELLES compétences sont des candidats valides. Ne choisissez jamais une compétence SUPPRIMÉE.
- Si
--checksignale la présence de surcharges, lisez ce fichier en premier. Il contient les propres règles d'acheminement de l'utilisateur ("polissage UI -> better-ui, jamais impeccable"). Une surcharge qui correspond à la demande l'emporte sur le catalogue, ses choix par défaut et votre propre jugement. Mentionnez la surcharge dans la colonne Pourquoi. - Dans le dossier du catalogue que
--checkaffiche sur sa première ligne, lisezINDEX.mdet, s'il est présent,PROFILE.md(la pile et les habitudes de l'utilisateur). - Choisissez les 1 à 3 catégories qui correspondent à la demande et lisez uniquement ces fichiers de catégorie.
Chaque ligne de compétence se lit ainsi :
- `nom` [charger] UTILISER : ... | PAS : ... | SUIVANT : ... | BESOINS : ...
3. Choisir l'ensemble
- Choisissez le plus petit ensemble qui couvre toute la demande : généralement 1 à 3 compétences, jamais plus de 5.
- Une compétence par tâche. Ne chargez jamais deux compétences qui font la même tâche ; suivez les "Choix par défaut" de la catégorie.
- Respectez le champ PAS de chaque compétence. Si PAS nomme une meilleure compétence pour cette demande, prenez celle-là.
- Pour la même tâche, préférez une compétence de projet (
[projet], depuis.claude/skillsde ce dépôt) ou une des propres compétences personnalisées de l'utilisateur à une compétence générique. - Si une compétence liste des BESOINS qui sont absents ici, dites-le et choisissez la meilleure compétence suivante.
- Si aucune compétence n'ajoute de valeur réelle, dites "Aucune compétence nécessaire" et effectuez la tâche.
- Si deux lectures très différentes de la demande mènent à des compétences différentes, posez une question courte avec les options avant de charger quoi que ce soit.
4. Afficher le plan, puis charger
Affichez ce tableau sous forme de texte visible avant le premier appel de compétence. C'est une sortie obligatoire, pas une narration : imprimez-le même lorsqu'un style concis ou "pas de texte avant les appels d'outil" est actif.
| # | Compétence | Pourquoi celle-ci | Charger |
|---|---|---|---|
| 1 | nom-compétence | une ligne liée à la demande | compétence / lire / intégrée / projet |
Une ligne peut être conditionnelle : écrivez "uniquement si " dans la colonne Pourquoi et chargez-la seulement lorsque la condition est vraie.
Ajoutez une note "Effet secondaire" sous le tableau pour chaque étape qui envoie des messages, déploie, supprime des données, dépense des crédits payants ou écrit en production, que ce soit une compétence ou le travail lui-même. Demandez avant cette étape. Sinon, continuez sans attendre.
Chargez les compétences dans l'ordre du tableau (planifier d'abord, puis construire, puis vérifier) :
[compétence],[intégrée],[projet]: appelez l'outil Compétence avec le nom exact, et passez la partie de la demande que cette compétence doit traiter commeargs.[lire <chemin>]: l'outil Compétence refuse cette compétence (utilisateur uniquement). Lisez le fichier à<chemin>et suivez-le comme s'il était chargé.- Si un appel de compétence échoue, lisez le SKILL.md de la compétence à la place (
inventory.pysans indicateur affiche chaque chemin) et dites-le.
5. Effectuer le travail
Suivez les compétences chargées ensemble. Lorsque deux d'entre elles sont en conflit, la plus spécifique l'emporte pour cette
partie de la tâche. Les fichiers CLAUDE.md de l'utilisateur et les instructions explicites priment sur chaque compétence.
Si un nouveau besoin apparaît à mi-parcours (par exemple, la correction nécessite une migration), chargez une compétence supplémentaire et
annoncez-la en une ligne : "Chargement également de x : ".
6. Vérifier, journaliser, rapporter et suggérer quoi exécuter ensuite
Vérification finale : lorsque deux compétences ou plus ont été chargées ou que la demande comportait plusieurs parties, vérifiez chaque partie avant la réponse finale. Pour chaque compétence chargée, et chaque partie de la demande non couverte par une compétence, évaluez : fait / partiel / bloqué, avec des preuves (un fichier:ligne, un résultat de test, une sortie de commande). Insérez-le dans la réponse finale sous forme de tableau court :
| Partie | Compétence | Statut | Preuve |
|---|
Si une partie est partielle ou bloquée, dites ce qui manque au lieu de considérer la tâche comme terminée. Sautez le tableau pour une demande à une seule compétence et une seule partie.
Journalisation : exécutez python3 <base>/scripts/inventory.py --log '<json>' une fois, avec un objet JSON :
request (la demande en 160 caractères maximum, sans secrets), loaded (compétences chargées), used
(compétences chargées dont les instructions ont réellement façonné le travail), unused (chargées mais non nécessaires),
skipped (lignes prévues qui n'ont pas été exécutées), next (les compétences Suivantes que vous suggérez), no_skill
(vrai si aucune compétence n'était nécessaire), check ("fait", "partiel", "bloqué" ou "n/a"). La journalisation fait partie
de l'acheminement, elle n'est pas facultative. Si la commande échoue, dites-le en une ligne et continuez.
inventory.py --report montre plus tard ce que /route a chargé, ce que le travail a utilisé et combien de compétences Suivantes
l'utilisateur a suivies.
Commencez la réponse finale par une ligne qui indique quelles compétences ont été exécutées, afin que l'utilisateur la voie même si le
tableau a défilé : Compétences utilisées : a, b(ajoutez ignoré c : `` lorsqu'une ligne prévue n'a pas
été exécutée, ou Compétences utilisées : aucune (<raison>)).
Terminez la réponse finale par cette section :
Compétences suivantes
nom-compétence: quand (maintenant / avant commit / avant push / après déploiement / une fois par semaine), et pourquoi.
Donnez-en au maximum 3. Prenez-les des champs SUIVANT des compétences chargées, des "Choix par défaut" des catégories que vous avez lues, et des étapes requises par le CLAUDE.md du projet (par exemple une exécution complète des tests avant push). Ne gardez que celles qui correspondent à ce qui s'est réellement passé, et ne les exécutez pas. Cette section s'applique également lorsqu'aucune compétence n'a été chargée.
Refresh
Exécuté lorsque l'utilisateur installe, supprime ou met à jour des compétences ou des plugins.
- Exécutez
python3 <base>/scripts/inventory.py --check. S'il afficheNO CATALOG, exécutez plutôt la construction. - Pour chaque NOUVELLE compétence : lisez son SKILL.md (frontmatter et les ~80 premières lignes), choisissez le fichier de catégorie
dont le Périmètre correspond (
inventory.pyliste les catégories fixes dans sa TAXONOMIE), et ajoutez une ligne dans le même format que les autres lignes de ce fichier. Utilisez[lire <chemin absolu>]lorsque son frontmatter contientdisable-model-invocation: true, et[projet]lorsqu'elle se trouve dans le.claude/skillsd'un dépôt. Si le fichier de catégorie n'existe pas encore, créez-le avec le même en-tête (# nom,Périmètre :,Choix par défaut :). - Pour chaque entrée SUPPRIMÉE : supprimez sa ligne et retirez-la de tout texte "Choix par défaut".
- Exécutez
inventory.py --index, puis--checkà nouveau jusqu'à ce qu'il affichecatalog in sync. Signalez ce qui a été ajouté et supprimé.