Gestion des compétences (CLI)
Méta-compétence pour gérer les compétences oh-my-claudecode via des commandes de type CLI.
Sous-commandes
/skill list
Affiche toutes les compétences disponibles, organisées par portée.
Comportement :
- Analyse les compétences intégrées (bundled) dans le répertoire
skills/du plugin (lecture seule) - Analyse les compétences utilisateur dans
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/ - Analyse les compétences projet dans
.omc/skills/ - Analyse le frontmatter YAML pour les métadonnées
- Affiche dans un tableau organisé :
COMPÉTENCES INTÉGRÉES (bundled avec oh-my-claudecode) :
| Nom | Description | Portée |
|-------------------|--------------------------------|-----------|
| visual-verdict | Verdicts structurés QA visuels | intégrée |
| ralph | Boucle de persistance | intégrée |
COMPÉTENCES UTILISATEUR (~/.claude/skills/omc-learned/) :
| Nom | Déclencheurs | Qualité | Utilisation | Portée |
|-------------------|-----------------|---------|-------------|--------|
| error-handler | fix, error | 95% | 42 | user |
| api-builder | api, endpoint | 88% | 23 | user |
COMPÉTENCES PROJET (.omc/skills/) :
| Nom | Déclencheurs | Qualité | Utilisation | Portée |
|-------------------|-----------------|---------|-------------|----------|
| test-runner | test, run | 92% | 15 | project |
Solution de repli : Si les statistiques de qualité/utilisation ne sont pas disponibles, afficher "N/D"
Note sur les compétences intégrées : Les compétences intégrées sont fournies avec oh-my-claudecode et sont découvrables/consultables, mais ne peuvent être ni supprimées ni modifiées via /skill remove ou /skill edit.
/skill add [name]
Assistant interactif pour créer une nouvelle compétence.
Comportement :
- Demander le nom de la compétence (si non fourni dans la commande)
- Valider : minuscules, tirets uniquement, pas d'espaces
- Demander la description
- Une ligne claire et concise
- Demander les déclencheurs (mots-clés séparés par des virgules)
- Exemple : "error, fix, debug"
- Demander l'indice d'argument (optionnel)
- Exemple : " [options]"
- Demander la portée :
user→${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/<name>/SKILL.mdproject→.omc/skills/<name>/SKILL.md
- Créer le fichier de compétence avec le modèle :
---
name: <name>
description: <description>
triggers:
- <trigger1>
- <trigger2>
argument-hint: "<args>"
---
# Compétence <Name>
## Objectif
[Décrire ce que fait cette compétence]
## Quand l'activer
[Décrire les déclencheurs et conditions]
## Workflow
1. [Étape 1]
2. [Étape 2]
3. [Étape 3]
## Exemples
/oh-my-claudecode: exemple-arg
## Notes
[Contexte supplémentaire, cas particuliers, pièges]
- Signaler le succès avec le chemin du fichier
- Suggestion : "Modifier avec
/skill edit <name>pour personnaliser le contenu"
Exemple :
Utilisateur : /skill add custom-logger
Assistant : Création de la compétence 'custom-logger'...
Description : Journalisation améliorée avec sortie structurée
Déclencheurs (séparés par des virgules) : log, logger, logging
Indice d'argument (optionnel) : <level> [message]
Portée (user/project) : user
✓ Compétence créée dans ~/.claude/skills/omc-learned/custom-logger/SKILL.md
→ Modifier avec : /skill edit custom-logger
/skill remove <name>
Supprimer une compétence par son nom.
Comportement :
- Rechercher la compétence dans les deux portées :
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/<name>/SKILL.md.omc/skills/<name>/SKILL.md
- Si trouvée :
- Afficher les informations de la compétence (nom, description, portée)
- Demander confirmation : "Supprimer la compétence '' de la portée ? (oui/non)"
- Si confirmé :
- Supprimer tout le répertoire de la compétence (ex.
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/<name>/) - Signaler : "✓ Compétence '' supprimée de la portée "
- Supprimer tout le répertoire de la compétence (ex.
- Si non trouvée :
- Signaler : "✗ Compétence '' introuvable dans les portées utilisateur ou projet"
Sécurité : Jamais supprimer sans confirmation explicite de l'utilisateur.
Exemple :
Utilisateur : /skill remove old-logger
Assistant : Compétence 'old-logger' trouvée dans la portée utilisateur :
Description : Utilitaire de journalisation hérité
Portée : user (~/.claude/skills/omc-learned/)
Supprimer la compétence 'old-logger' ? (oui/non)
Utilisateur : oui
Assistant : ✓ Compétence 'old-logger' supprimée de la portée utilisateur
/skill edit <name>
Modifier une compétence existante de manière interactive.
Comportement :
- Trouver la compétence par nom (rechercher dans les deux portées)
- Lire le contenu actuel via l'outil Read
- Afficher les valeurs actuelles :
Compétence actuelle 'custom-logger' : - Description : Journalisation améliorée avec sortie structurée - Déclencheurs : log, logger, logging - Indice d'argument : <level> [message] - Portée : user - Demander quoi modifier :
description- Mettre à jour la descriptiontriggers- Mettre à jour les mots-clés déclencheursargument-hint- Mettre à jour l'indice d'argumentcontent- Modifier le contenu markdown completrename- Renommer la compétence (déplacer le fichier)cancel- Quitter sans modifications
- Pour le champ sélectionné :
- Afficher la valeur actuelle
- Demander la nouvelle valeur
- Mettre à jour le frontmatter YAML ou le contenu
- Réécrire dans le fichier
- Signaler le succès avec un résumé des modifications
Exemple :
Utilisateur : /skill edit custom-logger
Assistant : Compétence actuelle 'custom-logger' :
- Description : Journalisation améliorée avec sortie structurée
- Déclencheurs : log, logger, logging
- Indice d'argument : <level> [message]
Que souhaitez-vous modifier ? (description/triggers/argument-hint/content/rename/cancel)
Utilisateur : triggers
Assistant : Déclencheurs actuels : log, logger, logging
Nouveaux déclencheurs (séparés par des virgules) : log, logger, logging, trace
✓ Déclencheurs mis à jour pour 'custom-logger'
/skill search <query>
Rechercher des compétences par contenu, déclencheurs, nom ou description.
Comportement :
- Analyser toutes les compétences dans les deux portées
- Faire correspondre la requête (insensible à la casse) avec :
- Le nom de la compétence
- La description
- Les déclencheurs
- Le contenu markdown complet
- Afficher les correspondances avec leur contexte :
3 compétences trouvées correspondant à "typescript error" :
1. typescript-fixer (user)
Description : Corriger les erreurs TypeScript courantes
Correspondance : "typescript error handling patterns"
2. error-handler (user)
Description : Utilitaires génériques de gestion d'erreurs
Correspondance : "Supports TypeScript and JavaScript errors"
3. lint-fix (project)
Description : Correction automatique des erreurs de linting
Correspondance : "TypeScript ESLint error resolution"
Classement : Prioriser les correspondances dans le nom/les déclencheurs par rapport au contenu
Exemple :
Utilisateur : /skill search api endpoint
Assistant : 2 compétences trouvées correspondant à "api endpoint" :
1. api-builder (user)
Description : Générer des endpoints d'API REST
Déclencheurs : api, endpoint, rest
2. backend-scaffold (project)
Description : Structurer des services backend
Correspondance : "Creates API endpoint boilerplate"
/skill info <name>
Afficher des informations détaillées sur une compétence.
Comportement :
- Trouver la compétence par nom (rechercher dans les deux portées)
- Analyser le frontmatter YAML et le contenu
- Afficher les détails complets :
Compétence : custom-logger
Portée : user (~/.claude/skills/omc-learned/custom-logger/)
Description : Journalisation améliorée avec sortie structurée
Déclencheurs : log, logger, logging
Indice d'argument : <level> [message]
Qualité : 95% (si disponible)
Nombre d'utilisations : 42 fois (si disponible)
Chemin du fichier : /home/user/.claude/skills/omc-learned/custom-logger/SKILL.md
--- CONTENU COMPLET ---
[contenu markdown complet]
Si non trouvée : Signaler l'erreur avec suggestion d'utiliser /skill search
Exemple :
Utilisateur : /skill info custom-logger
Assistant : Compétence : custom-logger
Portée : user
Description : Journalisation améliorée avec sortie structurée
Déclencheurs : log, logger, logging
Fichier : ~/.claude/skills/omc-learned/custom-logger/SKILL.md
--- CONTENU ---
# Compétence Custom Logger
## Objectif
Journalisation améliorée avec sortie structurée JSON...
[suite du contenu]
/skill sync
Synchroniser les compétences entre les portées utilisateur et projet.
Comportement :
- Analyser les deux portées :
- Compétences utilisateur :
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/ - Compétences projet :
.omc/skills/
- Compétences utilisateur :
- Comparer et catégoriser :
- Compétences uniquement utilisateur (pas dans le projet)
- Compétences uniquement projet (pas dans l'utilisateur)
- Compétences communes (dans les deux)
- Afficher les opportunités de synchronisation :
RAPPORT DE SYNCHRONISATION :
Compétences uniquement utilisateur (5) :
- error-handler
- api-builder
- custom-logger
- test-generator
- deploy-helper
Compétences uniquement projet (2) :
- test-runner
- backend-scaffold
Compétences communes (3) :
- frontend-ui-ux
- git-master
- planner
Options :
[1] Copier la compétence utilisateur vers le projet
[2] Copier la compétence projet vers l'utilisateur
[3] Afficher les différences
[4] Annuler
- Gérer le choix de l'utilisateur :
- Option 1 : Sélectionner la ou les compétences à copier vers le projet
- Option 2 : Sélectionner la ou les compétences à copier vers l'utilisateur
- Option 3 : Afficher les différences côte à côte pour les compétences communes
- Option 4 : Quitter
Sécurité : Jamais écraser sans confirmation
Exemple :
Utilisateur : /skill sync
Assistant : 5 compétences uniquement utilisateur et 2 compétences uniquement projet trouvées.
Copier 'error-handler' de l'utilisateur vers le projet ? (oui/non/skip)
Utilisateur : oui
Assistant : ✓ Copié 'error-handler' vers .omc/skills/
Copier 'api-builder' de l'utilisateur vers le projet ? (oui/non/skip)
Utilisateur : skip
...
/skill setup
Assistant interactif pour configurer et gérer les compétences locales (auparavant local-skills-setup).
Comportement :
Étape 1 : Vérification et configuration des répertoires
D'abord, vérifier si les répertoires de compétences existent et les créer si nécessaire :
# Vérifier et créer le répertoire des compétences utilisateur
USER_SKILLS_DIR="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/omc-learned"
if [ -d "$USER_SKILLS_DIR" ]; then
echo "Le répertoire des compétences utilisateur existe : $USER_SKILLS_DIR"
else
mkdir -p "$USER_SKILLS_DIR"
echo "Répertoire des compétences utilisateur créé : $USER_SKILLS_DIR"
fi
# Vérifier et créer le répertoire des compétences projet
PROJECT_SKILLS_DIR=".omc/skills"
if [ -d "$PROJECT_SKILLS_DIR" ]; then
echo "Le répertoire des compétences projet existe : $PROJECT_SKILLS_DIR"
else
mkdir -p "$PROJECT_SKILLS_DIR"
echo "Répertoire des compétences projet créé : $PROJECT_SKILLS_DIR"
fi
Étape 2 : Analyse et inventaire des compétences
Analyser les deux répertoires et afficher un inventaire complet :
# Analyser les compétences utilisateur
echo "=== COMPÉTENCES UTILISATEUR (~/.claude/skills/omc-learned/) ==="
if [ -d "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/omc-learned" ]; then
USER_COUNT=$(find "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/omc-learned" -name "*.md" 2>/dev/null | wc -l)
echo "Nombre total de compétences : $USER_COUNT"
if [ $USER_COUNT -gt 0 ]; then
echo ""
echo "Compétences trouvées :"
find "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/omc-learned" -name "*.md" -type f -exec sh -c '
FILE="$1"
NAME=$(grep -m1 "^name:" "$FILE" 2>/dev/null | sed "s/name: //")
DESC=$(grep -m1 "^description:" "$FILE" 2>/dev/null | sed "s/description: //")
MODIFIED=$(stat -c "%y" "$FILE" 2>/dev/null || stat -f "%Sm" "$FILE" 2>/dev/null)
echo " - $NAME"
[ -n "$DESC" ] && echo " Description : $DESC"
echo " Modifié le : $MODIFIED"
echo ""
' sh {} \;
fi
else
echo "Répertoire introuvable"
fi
echo ""
echo "=== COMPÉTENCES PROJET (.omc/skills/) ==="
if [ -d ".omc/skills" ]; then
PROJECT_COUNT=$(find ".omc/skills" -name "*.md" 2>/dev/null | wc -l)
echo "Nombre total de compétences : $PROJECT_COUNT"
if [ $PROJECT_COUNT -gt 0 ]; then
echo ""
echo "Compétences trouvées :"
find ".omc/skills" -name "*.md" -type f -exec sh -c '
FILE="$1"
NAME=$(grep -m1 "^name:" "$FILE" 2>/dev/null | sed "s/name: //")
DESC=$(grep -m1 "^description:" "$FILE" 2>/dev/null | sed "s/description: //")
MODIFIED=$(stat -c "%y" "$FILE" 2>/dev/null || stat -f "%Sm" "$FILE" 2>/dev/null)
echo " - $NAME"
[ -n "$DESC" ] && echo " Description : $DESC"
echo " Modifié le : $MODIFIED"
echo ""
' sh {} \;
fi
else
echo "Répertoire introuvable"
fi
# Résumé
TOTAL=$((USER_COUNT + PROJECT_COUNT))
echo "=== RÉSUMÉ ==="
echo "Nombre total de compétences dans tous les répertoires : $TOTAL"
Étape 3 : Menu d'actions rapides
Après l'analyse, utiliser l'outil AskUserQuestion pour proposer ces options :
Question : "Que souhaitez-vous faire avec vos compétences locales ?"
Options :
- Ajouter une nouvelle compétence - Lancer l'assistant de création de compétence (invoquer
/skill add) - Lister toutes les compétences avec détails - Afficher l'inventaire complet des compétences (invoquer
/skill list) - Analyser la conversation pour des patterns - Analyser la conversation actuelle pour des patterns dignes d'être transformés en compétences
- Importer une compétence - Importer une compétence depuis une URL ou coller du contenu
- Terminé - Quitter l'assistant
Option 3 : Analyser la conversation pour des patterns
Analyser le contexte actuel de la conversation pour identifier des patterns potentiellement dignes d'être transformés en compétences. Rechercher :
- Sessions de débogage récentes avec des solutions non évidentes
- Bugs complexes qui ont nécessité une investigation
- Solutions de contournement spécifiques au codebase découvertes
- Patterns d'erreur qui ont pris du temps à résoudre
Signaler les résultats et demander si l'utilisateur souhaite en extraire des compétences (invoquer /skillify ; /learner est déprécié pour compatibilité).
Option 4 : Importer une compétence
Demander à l'utilisateur de fournir soit :
- URL : Télécharger une compétence depuis une URL (ex. gist GitHub)
- Coller le contenu : Coller directement le contenu markdown de la compétence
Puis demander la portée :
- Utilisateur (~/.claude/skills/omc-learned/) - Disponible dans tous les projets
- Projet (.omc/skills/) - Uniquement pour ce projet
Valider le format de la compétence et enregistrer à l'emplacement choisi.
/skill scan
Commande rapide pour analyser les deux répertoires de compétences (sous-ensemble de /skill setup).
Comportement :
Exécuter l'analyse de l'étape 2 de /skill setup sans l'assistant interactif.
Modèles de compétences
Lors de la création de compétences via /skill add ou /skill setup, proposer des modèles rapides pour les types de compétences courants :
Modèle de solution d'erreur
---
id: error-[unique-id]
name: [Nom de l'erreur]
description: Solution pour [erreur spécifique dans un contexte spécifique]
source: conversation
triggers: ["fragment de message d'erreur", "chemin de fichier", "symptôme"]
quality: high
---
# [Nom de l'erreur]
## Le constat
Quelle est la cause sous-jacente de cette erreur ? Quel principe avez-vous découvert ?
## Pourquoi c'est important
Qu'est-ce qui ne va pas si vous ne le savez pas ? Quel symptôme vous a mené ici ?
## Pattern de reconnaissance
Comment savez-vous quand cela s'applique ? Quels sont les signes ?
- Message d'erreur : "[erreur exacte]"
- Fichier : [chemin de fichier spécifique]
- Contexte : [quand cela se produit-il]
## Le correctif
[Solution détaillée étape par étape]
## Cas particuliers
- [Cas particulier 1] : [Solution]
- [Cas particulier 2] : [Solution]
## Prévention
Comment éviter cette erreur à l'avenir ?
## Exemple
/oh-my-claudecode:[nom] [arguments]
Modèle de compétence de workflow
---
id: workflow-[unique-id]
name: [Nom du workflow]
description: [Description du workflow]
source: conversation
triggers: ["mot-clé 1", "mot-clé 2"]
---
# [Nom du workflow]
## Objectif
[Objectif de ce workflow]
## Quand l'utiliser
[Conditions et contexte d'utilisation]
## Étapes
### Étape 1 : [Nom de l'étape]
[Description et commandes]
### Étape 2 : [Nom de l'étape]
[Description et commandes]
### Étape 3 : [Nom de l'étape]
[Description et commandes]
## Exemple
/oh-my-claudecode:[nom] [arguments]
Modèle de compétence de configuration
---
id: config-[unique-id]
name: [Nom de la configuration]
description: [Description de la configuration]
source: conversation
triggers: ["config", "déploiement", "outil"]
---
# [Nom de la configuration]
## Objectif
[But de cette configuration]
## Prérequis
- [Condition préalable 1]
- [Condition préalable 2]
## Étapes de configuration
### 1. [Étape]
[Commandes et explications]
### 2. [Étape]
[Commandes et explications]
## Vérification
Comment vérifier que la configuration est correcte :
```bash
[Commande de vérification]
Dépannage
[Problème courant] → [Solution]
---
## Exemple complet : Transformation de pattern en compétence
### Exemple de conversation
Utilisateur : Je reçois "TypeError: Cannot read properties of undefined" dans React quand j'essaie d'accéder à state.data.user.name avant le chargement.
Assistant : C'est un problème courant. Vérifiez d'abord que state.data existe
avant d'accéder aux propriétés imbriquées. Utilisez l'optionnel chaining :
state.data?.user?.name ou déstructurez avec des valeurs par défaut.
Utilisateur : D'accord, mais comment appliquer cela systématiquement ?
Assistant : Vous pouvez créer une compétence avec /skill add react-safe-access
qui enregistre ce pattern de gestion sécurisée des accès aux propriétés React.
### Compétence extraite résultante
```markdown
---
name: react-safe-access
description: Pattern d'accès sécurisé aux propriétés dans React avec optionnel chaining
triggers:
- "TypeError: Cannot read properties of undefined"
- "props.children.map"
- "state.data"
- "undefined is not an object"
- "Cannot read property"
argument-hint: "[composant] [chemin de propriété]"
---
# Accès sécurisé aux propriétés React
## Objectif
Éviter les erreurs `TypeError: Cannot read properties of undefined`
lors de l'accès à des propriétés d'objets imbriqués dans les composants React.
## Quand l'activer
Activer lorsque l'utilisateur rencontre des erreurs de lecture de propriétés sur undefined
ou demande des patterns de gestion des valeurs optionnelles en React/JS.
## Workflow
1. **Identifier le point d'accès dangereux** : Repérer les accès au DOM
comme `state.data.user.name` ou `props.items.map(...)`
2. **Appliquer l'optionnel chaining** (`?.`) :
- Utiliser `state.data?.user?.name` au lieu de `state.data.user.name`
- Cela retourne undefined plutôt que de lever une exception si une propriété intermédiaire est null/undefined
3. **Ajouter des valeurs par défaut si nécessaire** :
- Utiliser `??` ou `||` : `state.data?.user?.name ?? 'inconnu'`
4. **Utiliser des gardes de chargement** :
- Vérifier `if (state.isLoading) return <Loader />`
- Vérifier `if (!state.data) return <Empty />`
## Exemples
/oh-my-claudecode:react-safe-access MonComposant "state.user.profile"
## Notes
- Applicable à toutes les versions modernes de React et JavaScript (ES2020+)
- L'optionnel chaining est pris en charge par create-react-app par défaut
- Ne pas utiliser l'optionnel chaining sur des accès garantis (comme "state" si toujours défini)
- Préférer des composants d'état dédiés (chargement, vide, erreur) pour une meilleure UX
Directives pour l'assistant
- Recommander l'extraction de compétence lorsqu'une interaction résout un problème non trivial, documente un pattern de codebase, ou établit un workflow reproductible
- Utiliser
/skillifypour extraire des compétences de la conversation (invoqué par l'utilisateur ;/learnerest déprécié pour compatibilité) - Valider automatiquement les formats et donner un retour immédiat
- Proposer des actions de suivi après toute opération réussie (modifier, ajouter une autre, synchroniser)
- Pas d'édition directe des compétences intégrées ; orienter vers
/skill editpour créer des copies projet