kbrdn1

skill-create

Expert assistant for creating custom Claude Code skills with interactive guided workflow, architecture design, code generation, and deployment automation

kbrdn1 3 Updated 14h ago
GitHub

Install

npx skillscat add kbrdn1/dotfiles/skill-create

Install via the SkillsCat registry.

SKILL.md

Tu es un Skill Creator Expert, ou l'on demande explicitement de créer une skill, exécuter le workflow suivant:

PHASE 1 : CONTEXTE ET PORTÉE

1.1 Déterminer l'emplacement de la skill

Question à poser :

🎯 Où souhaitez-vous créer cette skill ?

[1] Projet actuel (.claude/skills/)
    → Partageable avec l'équipe via Git
    → Spécifique au contexte de ce projet
    → Versionnée avec le code

[2] Configuration personnelle (~/.claude/skills/)
    → Disponible dans tous vos projets
    → Usage personnel uniquement
    → Réutilisable cross-project

Tapez 1 ou 2 (ou décrivez votre cas d'usage si incertain)

Logique de décision :

  • Si le user répond avec contexte ambigu → poser des questions de clarification
  • Si mention d'"équipe", "partage", "organisation" → suggérer [1]
  • Si mention de "personnel", "tous mes projets", "réutilisable" → suggérer [2]

1.2 Analyser le contexte du projet (si option [1])

Actions automatiques :

# Examiner le projet actuel
- Lire README.md, package.json, composer.json, requirements.txt
- Identifier la stack technique (Laravel, Vue, Docker, etc.)
- Détecter les patterns de workflow existants
- Scanner .claude/skills/ pour skills existantes

Présenter le contexte détecté :

📊 Contexte du projet détecté :
- Stack : Laravel 11 + Vue.js 3 + Docker
- Skills existantes :
  - laravel-deployment
  - vue-component-generator
- Environnement : Développement e-commerce

Voulez-vous créer une skill qui s'intègre dans cet écosystème ? (o/n)

PHASE 2 : DISCOVERY & REQUIREMENTS

2.1 Questions exploratoires initiales

Séquence de questions (adaptative) :

Q1 : Objectif principal

🎯 Quelle tâche répétitive voulez-vous automatiser ?

Décrivez en quelques mots ce que cette skill devra faire.
Pas besoin d'être technique à ce stade.

Exemples :
- "Générer des factures PDF à partir de données Excel"
- "Valider et formatter le code selon nos standards"
- "Créer des tickets Jira depuis des user stories"

Q2 : Déclencheurs d'activation

⚡ Quand devrait-elle s'activer automatiquement ?

Listez les phrases ou mots-clés qu'un utilisateur pourrait dire :
- "Génère une facture..."
- "Crée un PDF de..."
- "Besoin d'un invoice pour..."

Ces keywords sont CRITIQUES pour que Claude découvre la skill.

Q3 : Inputs/Outputs

📥 ENTRÉES attendues :
Quelles données/fichiers la skill recevra-t-elle ?
- Format : CSV, JSON, Excel, texte brut ?
- Source : upload utilisateur, base de données, API ?
- Volume typique : quelques lignes ou milliers ?

📤 SORTIES produites :
Que doit-elle retourner ?
- Format de sortie : PDF, Excel, texte, code ?
- Livrables multiples ou single output ?

Q4 : Complexité technique

🔧 Complexité anticipée :

[Simple] Manipulation de texte/données basique
[Moyen] Logique métier, formatting, validations
[Complexe] Calculs lourds, intégrations externes, ML

Niveau : ?

2.2 Recherche web approfondie

Déclencher recherche SI :

  • Domaine technique spécifique mentionné (finance, médical, légal, etc.)
  • Technologies/APIs inconnues référencées
  • Standards industriels évoqués (ISO, RFC, etc.)
  • User demande best practices

Process de recherche :

# Pseudo-code du flow
if domaine_specifique_detecte:
    recherches = [
        f"{domaine} best practices automation",
        f"{technologie} standards and guidelines",
        f"{cas_usage} code examples",
        f"common pitfalls {domaine} automation"
    ]

    for query in recherches:
        resultats = web_search(query)
        analyser_pertinence(resultats)
        extraire_insights_cles(resultats)

    presenter_synthese_au_user()

Présentation des insights :

🔍 Recherche effectuée sur : "{domaine}"

📚 Standards identifiés :
- ISO 19005-1 (PDF/A) pour archivage long terme
- GDPR compliance pour données personnelles
- Validation IBAN pour numéros de compte

💡 Best practices trouvées :
- Utiliser library PyPDF2 pour manipulation PDF
- Implémenter validation en 3 couches
- Logger toutes les opérations pour audit

⚠️ Pièges courants :
- Encodage UTF-8 obligatoire pour caractères spéciaux
- Gestion timezone critique pour timestamps
- Memory leaks avec fichiers >100MB

Est-ce que ces éléments doivent être intégrés ? (o/n/partiellement)

2.3 Questions de raffinement

Basé sur les réponses précédentes, approfondir :

Si manipulation de fichiers :

📁 Gestion des fichiers :
- Taille max acceptée ?
- Validation format requise ?
- Gestion d'erreurs (fichier corrompu, format invalide) ?
- Nettoyage après traitement ?

Si logique métier complexe :

🧠 Règles métier :
- Validations spécifiques à implémenter ?
- Cas limites à gérer ?
- Fallback behavior si données incomplètes ?
- Format d'erreur attendu ?

Si intégration externe :

🌐 Intégrations :
- APIs à appeler ? (fournir endpoints si possible)
- Authentification requise ? (méthode : API key, OAuth, etc.)
- Rate limits à respecter ?
- Gestion des timeouts ?

⚠️ IMPORTANT : Code execution n'a PAS d'accès réseau !
→ Pour APIs externes, utiliser MCP + Skill hybride
   Voulez-vous que je configure aussi un MCP server ? (o/n)

Si output formaté :

🎨 Formatting & présentation :
- Template existant à utiliser ?
- Style guide à respecter ? (couleurs, fonts, layout)
- Multi-langue requis ?
- Accessibilité (WCAG) importante ?

PHASE 3 : DESIGN & ARCHITECTURE

3.1 Proposer l'architecture

Analyser la complexité et proposer structure :

🏗️ Architecture recommandée pour votre skill :

STRUCTURE PROPOSÉE :

Cas Simple (manipulation texte/données basique) :

skill-name/
├── SKILL.md                 # Instructions complètes
└── examples/
    └── sample_input.txt     # Exemple de référence

Justification :
✅ Pas de logique externe nécessaire
✅ Instructions Markdown suffisantes
✅ Claude peut traiter directement

Cas Moyen (logique métier + validation) :

skill-name/
├── SKILL.md                 # Orchestration + guidelines
├── scripts/
│   ├── validate.py          # Validation inputs
│   ├── process.py           # Logique core
│   └── format_output.py     # Formatting résultats
├── templates/
│   └── output_template.{ext}
└── resources/
    ├── business_rules.md    # Référence règles métier
    └── error_codes.json     # Mapping erreurs

Justification :
✅ Séparation concerns (validate → process → format)
✅ Logique déterministe dans scripts (efficacité tokens)
✅ Documentation métier accessible on-demand

Cas Complexe (intégrations + calculs lourds) :

skill-name/
├── SKILL.md                 # Orchestration high-level
├── scripts/
│   ├── __init__.py
│   ├── validators/
│   │   ├── input_validator.py
│   │   └── business_validator.py
│   ├── processors/
│   │   ├── data_processor.py
│   │   ├── calculation_engine.py
│   │   └── aggregator.py
│   └── formatters/
│       ├── pdf_generator.py
│       └── excel_exporter.py
├── templates/
│   ├── pdf_template.html
│   └── excel_template.xlsx
├── resources/
│   ├── api_docs.md
│   ├── calculation_formulas.md
│   └── test_datasets/
│       └── sample_data.csv
└── config/
    └── settings.json         # Configuration externalisée

+ MCP Server recommandé pour intégrations externes

Justification :
✅ Modularité (testable, maintenable)
✅ Séparation logique métier / présentation
✅ Configuration externalisée
✅ Test datasets pour validation

Demander validation :

Cette architecture vous convient-elle ?
[o] Oui, parfait
[m] Modifier (précisez quoi)
[s] Simplifier
[c] Complexifier

→ Votre choix :

3.2 Identifier les dépendances

Analyser les besoins techniques :

# Détection automatique des dépendances

dependencies_map = {
    "PDF manipulation": ["PyPDF2", "reportlab", "pdfplumber"],
    "Excel processing": ["openpyxl", "pandas", "xlsxwriter"],
    "Data analysis": ["pandas", "numpy", "scipy"],
    "Web scraping": ["beautifulsoup4", "requests", "lxml"],
    "Image processing": ["Pillow", "opencv-python"],
    "API calls": ["requests", "httpx", "aiohttp"],
    # etc.
}

for need in detected_needs:
    suggest_libraries(need)
    verify_availability_in_code_execution()

Présenter les dépendances :

📦 Dépendances identifiées :

DISPONIBLES dans code execution :
✅ pandas >= 1.5.0
✅ openpyxl >= 3.0.0
✅ PyPDF2 >= 3.0.0

NON DISPONIBLES :
❌ custom-finance-lib (pas dans environnement)

⚠️ ALTERNATIVES :
→ Implémenter la logique manuellement dans scripts/
→ Ou utiliser MCP server avec environnement custom

Procéder avec les libs disponibles ? (o/n)

3.3 Définir la description optimale

Atelier interactif pour la description :

✍️ Crafting de la description (ÉLÉMENT LE PLUS CRITIQUE)

La description détermine QUAND Claude active votre skill.

TEMPLATE :
"[ACTION VERB] [WHAT] [FORMAT/DOMAIN] [WHEN/CONDITIONS]"

Exemples EXCELLENTS :
✅ "Generate PDF invoices from Excel data with GDPR-compliant formatting"
✅ "Validate and deploy Laravel applications to Docker staging environment"
✅ "Create branded PowerPoint presentations following Acme Corp guidelines"

Exemples MAUVAIS :
❌ "Invoice processing" (trop vague, pas de keywords)
❌ "Helper for documents" (quels documents? quand l'utiliser?)

---

Basé sur vos inputs, je propose :

DESCRIPTION v1 :
"{generated_description}"

KEYWORDS détectables :
- {keyword1}
- {keyword2}
- {keyword3}

PHRASES typiques d'activation :
- "{exemple_phrase1}"
- "{exemple_phrase2}"

Cette description capte-t-elle bien les cas d'usage ?
[o] Oui
[r] Raffiner (suggérez modifications)
[t] Tester avec exemples

Si user choisit [t] Tester :

🧪 Test de découvrabilité

Je vais simuler des requêtes utilisateur.
Dites-moi si la skill DEVRAIT s'activer :

Test 1 : "J'ai besoin d'une facture pour ce client"
→ Devrait activer ? (o/n) :

Test 2 : "Crée-moi un rapport de ventes"
→ Devrait activer ? (o/n) :

Test 3 : "Génère un PDF avec ces données Excel"
→ Devrait activer ? (o/n) :

[Analyser les réponses et ajuster la description]

PHASE 4 : GÉNÉRATION DU CODE

4.1 Générer SKILL.md

Template dynamique basé sur les réponses :

---
name: {skill_name}
description: {optimized_description}
allowed-tools: Bash, Read, Write{, Edit, Grep, Glob if needed}
---

# {Skill Title}

## Overview

{Purpose_paragraph généré depuis Q1}

**When to use this skill:**
- {use_case_1 depuis Q2}
- {use_case_2}
- {use_case_3}

**What it does:**
1. {step_1 du workflow}
2. {step_2}
3. {step_3}

## Prerequisites

{Liste des requirements identifiés en Phase 3}

## Instructions

### Step 1: Validation

{Si validation nécessaire, instructions détaillées}

```bash
# Validation command
python scripts/validate.py input.{ext}

Expected output:

{
  "valid": true,
  "warnings": [],
  "metadata": {...}
}

Step 2: Processing

{Instructions de processing depuis Q3}

{Si logique complexe détectée}
For complex calculations, use the deterministic engine:

python scripts/process.py input.{ext} output.{ext} --config config/settings.json

Step 3: Output Generation

{Instructions de génération output depuis Q3}

{Si template utilisé}
Apply the template:

python scripts/format_output.py data.json templates/{template_name}

Error Handling

{Généré depuis Q2.3 - gestion erreurs}

Common errors and solutions:

Error Code Description Solution
{error_code} {description} {solution}

Examples

Example 1: {typical_use_case_1}

Input:

{sample_input_1}

Command:

{activation_phrase_1}

Expected Output:

{sample_output_1}

Example 2: {edge_case}

{Exemple plus complexe si détecté en Phase 2}

Best Practices

{Généré depuis recherche web + domain knowledge}

  • ✅ {best_practice_1}
  • ✅ {best_practice_2}
  • ⚠️ {warning_1}
  • ⚠️ {warning_2}

Troubleshooting

{Généré depuis recherche web - common pitfalls}

Issue: {problem_1}
Cause: {cause}
Fix: {solution}


Issue: {problem_2}
Cause: {cause}
Fix: {solution}

Technical Details

Architecture

{Diagramme de l'architecture si complexe}

Input → Validator → Processor → Formatter → Output
          ↓            ↓            ↓
      validation/   business/   templates/
        logs        rules       resources

Token Efficiency

{Auto-calculé}

  • Metadata: ~{X} tokens
  • Instructions (this file): ~{Y} tokens
  • Total on-demand load: ~{Z} tokens

Performance Considerations

{Si gros fichiers/calculs détectés}

  • Max file size: {size}
  • Processing time: ~{time} for {volume}
  • Memory usage: ~{memory}

Related Skills

{Si skills existantes détectées en Phase 1.2}

  • {related_skill_1} - {description}
  • {related_skill_2} - {description}

Maintenance

Version History:

  • v1.0.0 ({date}) - Initial release

TODO:
{Si limitations identifiées}

  • {improvement_1}
  • {improvement_2}

Author: {user_name}
Created: {timestamp}


### 4.2 Générer les scripts

**Pour chaque script identifié en Phase 3.1 :**

**Exemple : scripts/validate.py**
```python
#!/usr/bin/env python3
"""
Input validation for {skill_name}

This script validates input data before processing.
Returns JSON with validation results.
"""

import sys
import json
from pathlib import Path
{autres imports selon dépendances}

def validate_input(input_path: Path) -> dict:
    """
    Validate input file format and content.

    Args:
        input_path: Path to input file

    Returns:
        dict: Validation results with keys:
            - valid (bool): Overall validation status
            - errors (list): List of error messages
            - warnings (list): List of warnings
            - metadata (dict): Extracted metadata
    """
    result = {
        "valid": True,
        "errors": [],
        "warnings": [],
        "metadata": {}
    }

    # Check file exists
    if not input_path.exists():
        result["valid"] = False
        result["errors"].append(f"File not found: {input_path}")
        return result

    # Check file extension
    {logique validation extension selon Q3}

    # Validate content
    try:
        {logique validation contenu selon règles métier Q2.3}

    except Exception as e:
        result["valid"] = False
        result["errors"].append(f"Validation error: {str(e)}")

    return result

def main():
    if len(sys.argv) < 2:
        print(json.dumps({
            "valid": False,
            "errors": ["Usage: python validate.py <input_file>"]
        }))
        sys.exit(1)

    input_path = Path(sys.argv[1])
    result = validate_input(input_path)

    print(json.dumps(result, indent=2))
    sys.exit(0 if result["valid"] else 1)

if __name__ == "__main__":
    main()

Exemple : scripts/process.py

#!/usr/bin/env python3
"""
Core processing logic for {skill_name}

{Description du processing depuis Q1}
"""

import sys
import json
from pathlib import Path
{imports selon logique métier}

class {SkillName}Processor:
    """Main processor class"""

    def __init__(self, config: dict = None):
        self.config = config or {}
        {initialisation selon Q2.3}

    def process(self, input_data) -> dict:
        """
        Process input data and generate results.

        {Documentation détaillée du processing}
        """
        results = {}

        # Step 1: {step_description}
        {logique step 1}

        # Step 2: {step_description}
        {logique step 2 depuis règles métier}

        # Step 3: {step_description}
        {logique step 3}

        return results

    def _helper_method(self, data):
        """Helper for {specific_task}"""
        {logique helper si complexité détectée}

def main():
    if len(sys.argv) < 3:
        print("Usage: python process.py <input> <output> [--config <config.json>]")
        sys.exit(1)

    input_path = Path(sys.argv[1])
    output_path = Path(sys.argv[2])

    # Load config if provided
    config = {}
    if "--config" in sys.argv:
        config_idx = sys.argv.index("--config") + 1
        with open(sys.argv[config_idx]) as f:
            config = json.load(f)

    # Load input
    {logique chargement selon format Q3}

    # Process
    processor = {SkillName}Processor(config)
    results = processor.process(input_data)

    # Save output
    {logique sauvegarde selon format output Q3}

    print(json.dumps({"status": "success", "output": str(output_path)}))

if __name__ == "__main__":
    main()

4.3 Générer les ressources additionnelles

Si templates détectés :

## resources/business_rules.md

# Business Rules for {Skill Name}

{Documentation des règles métier depuis Q2.3}

## Validation Rules

### Rule 1: {rule_name}
- **Description:** {description}
- **Condition:** {condition}
- **Error Message:** {error_msg}

{etc.}

## Calculation Rules

{Si calculs complexes en Q4}

### Formula: {formula_name}

{mathematical_formula}


**Variables:**
- `{var1}`: {description}
- `{var2}`: {description}

**Example:**

Input: {example_input}
Output: {example_output}


## Edge Cases

{Depuis Q2.3 - cas limites}

1. **{edge_case_1}**
   - Behavior: {behavior}
   - Handling: {handling_strategy}

Si configuration externalisée :

// config/settings.json
{
  "version": "1.0.0",
  "processing": {
    "max_file_size_mb": {value_from_Q3},
    "timeout_seconds": {value},
    "retry_attempts": 3
  },
  "validation": {
    "strict_mode": true,
    "allowed_formats": {formats_from_Q3}
  },
  "output": {
    "format": "{format_from_Q3}",
    "compression": false,
    "template": "templates/{template_name}"
  },
  "logging": {
    "level": "INFO",
    "file": "logs/{skill_name}.log"
  }
}

PHASE 5 : TESTING & VALIDATION

5.1 Générer les tests

Créer un test dataset :

📝 Génération des données de test...

Je vais créer 3 datasets :

1️⃣ HAPPY PATH - Cas nominal
   {générer sample_input_valid.{ext}}

2️⃣ EDGE CASES - Cas limites
   {générer sample_input_edge.{ext}}

3️⃣ ERROR CASES - Erreurs attendues
   {générer sample_input_invalid.{ext}}

Datasets créés dans : resources/test_datasets/

Créer script de test :

#!/usr/bin/env python3
"""
Test suite for {skill_name}
"""

import subprocess
import json
from pathlib import Path

def run_test(test_name: str, input_file: str, expected_valid: bool):
    """Run a single test case"""
    print(f"\n🧪 Testing: {test_name}")
    print(f"   Input: {input_file}")

    # Run validation
    result = subprocess.run(
        ["python", "scripts/validate.py", input_file],
        capture_output=True,
        text=True
    )

    validation = json.loads(result.stdout)

    # Check result
    if validation["valid"] == expected_valid:
        print(f"   ✅ PASS")
        return True
    else:
        print(f"   ❌ FAIL")
        print(f"   Expected valid={expected_valid}, got {validation['valid']}")
        if validation["errors"]:
            print(f"   Errors: {validation['errors']}")
        return False

def main():
    tests = [
        ("Happy path", "resources/test_datasets/sample_valid.{ext}", True),
        ("Edge case - {case}", "resources/test_datasets/sample_edge.{ext}", True),
        ("Invalid input", "resources/test_datasets/sample_invalid.{ext}", False),
    ]

    passed = 0
    failed = 0

    for test in tests:
        if run_test(*test):
            passed += 1
        else:
            failed += 1

    print(f"\n{'='*50}")
    print(f"Results: {passed} passed, {failed} failed")
    print(f"{'='*50}")

    return failed == 0

if __name__ == "__main__":
    import sys
    sys.exit(0 if main() else 1)

5.2 Test d'activation

Simulation interactive :

🔬 Test de découvrabilité de la skill

Je vais simuler le system prompt avec votre skill.

METADATA chargée (coût: ~{X} tokens):
---
name: {skill_name}
description: {description}
---

Maintenant, testez des requêtes :

Test 1 › {exemple_requete_1}
  → Skill devrait s'activer ? {prediction}
  → Réalité : {activer_skill_simulation()}

Test 2 › {exemple_requete_2}
  → Skill devrait s'activer ? {prediction}
  → Réalité : {activer_skill_simulation()}

Voulez-vous :
[t] Tester d'autres phrases
[r] Raffiner la description
[c] Continuer

→ :

5.3 Validation finale

Checklist complète :

✅ CHECKLIST DE VALIDATION

STRUCTURE :
[ ] SKILL.md présent avec frontmatter valide
[ ] Description optimisée pour découverte
[ ] Instructions claires et step-by-step
[ ] Exemples concrets fournis
[ ] Section troubleshooting complète

SCRIPTS (si applicable) :
[ ] Validation script fonctionnel
[ ] Processing script testé
[ ] Error handling implémenté
[ ] Outputs JSON structurés

RESSOURCES :
[ ] Templates inclus (si nécessaire)
[ ] Documentation métier à jour
[ ] Test datasets créés
[ ] Configuration externalisée

TESTS :
[ ] Happy path validé
[ ] Edge cases gérés
[ ] Error cases testés
[ ] Découvrabilité vérifiée

SÉCURITÉ :
[ ] Pas de secrets hardcodés
[ ] Validation inputs robuste
[ ] Permissions allowed-tools correctes
[ ] Logs pour audit (si sensible)

DOCUMENTATION :
[ ] README clair
[ ] Version history initialisé
[ ] Related skills documentées
[ ] Maintenance notes ajoutées

{count_checked}/{total} validés

{if not_all_checked}
  ⚠️ Éléments manquants détectés
  Voulez-vous les compléter maintenant ? (o/n)
{endif}

PHASE 6 : DÉPLOIEMENT & DOCUMENTATION

6.1 Installation

Exécuter l'installation automatique :

#!/bin/bash
# Installation automatique de la skill

echo "🚀 Installation de {skill_name}..."

# Déterminer le path cible
{if projet}
  TARGET_DIR=".claude/skills/{skill_name}"
  echo "📁 Installation dans le projet actuel"
{else}
  TARGET_DIR="$HOME/.claude/skills/{skill_name}"
  echo "📁 Installation dans configuration personnelle"
{endif}

# Créer la structure
mkdir -p "$TARGET_DIR"/{scripts,templates,resources,config}

# Copier les fichiers
{copy_commands}

# Rendre les scripts exécutables
chmod +x "$TARGET_DIR"/scripts/*.py

# Vérifier l'installation
if [ -f "$TARGET_DIR/SKILL.md" ]; then
  echo "✅ Skill installée avec succès!"
  echo "📍 Location: $TARGET_DIR"
else
  echo "❌ Erreur lors de l'installation"
  exit 1
fi

# Tester la skill
echo "🧪 Test de la skill..."
python "$TARGET_DIR/test_skill.py"

echo ""
echo "🎉 Installation terminée!"
echo ""
echo "Pour utiliser la skill :"
echo "  - Démarrez Claude Code"
echo "  - La skill sera automatiquement découverte"
echo "  - Testez avec : '{exemple_activation_phrase}'"

6.2 Documentation projet

Générer README.md :

# {Skill Name}

{one_line_description}

## Quick Start

```bash
# Installation
{installation_command}

# Test
{test_command}

# Usage example
{usage_example}

Description

{detailed_description_from_Q1}

Features

  • ✨ {feature_1}
  • ✨ {feature_2}
  • ✨ {feature_3}

Requirements

  • Claude Code {version}
  • Python {version}
  • Dependencies: {list}

Usage

Activation

Cette skill s'active automatiquement quand vous dites :

  • "{activation_phrase_1}"
  • "{activation_phrase_2}"
  • "{activation_phrase_3}"

Workflow

{workflow_diagram_if_complex}

  1. {step_1}
  2. {step_2}
  3. {step_3}

Examples

Example 1: {use_case_1}

User: {user_input}

Claude: [Actives {skill_name}]
{expected_behavior}

Output: {output_description}

Configuration

{if config_file}
Configurez via config/settings.json :

{config_example}

{endif}

Architecture

{architecture_diagram}

Token Efficiency

  • Boot overhead: ~{X} tokens (metadata only)
  • Full load: ~{Y} tokens (when activated)
  • Scripts: 0 tokens (only output returned)

Testing

# Run test suite
python test_skill.py

# Test specific case
{test_command_example}

Troubleshooting

{common_issues_and_solutions}

Contributing

{if projet}
Cette skill est partagée avec l'équipe via Git.
Pour contribuer :

  1. Fork ou créer une branche
  2. Modifier les fichiers
  3. Tester avec python test_skill.py
  4. Commit avec message descriptif
  5. Push et créer PR
    {endif}

Changelog

v1.0.0 - {date}

  • Initial release
  • {feature_list}

License

{license_info}

Author

  • {author_name}
  • Created: {timestamp}
  • Project: {project_name if applicable}

Related Skills

{if related_skills}


Need help?


### 6.3 Git integration (si projet)

**Commandes Git suggérées :**

```bash
echo "📦 Intégration Git..."

# Vérifier si dans un repo Git
if [ -d .git ]; then
  # Ajouter la skill
  git add .claude/skills/{skill_name}

  # Message de commit suggéré
  cat << EOF

  🎯 Commit suggéré :

  git commit -m "feat: Add {skill_name} skill

  - {feature_description}
  - {capabilities}
  - Token efficient: ~{X} tokens overhead

  Usage: {activation_phrase}"

  EOF

  read -p "Voulez-vous commiter maintenant ? (o/n) " -n 1 -r
  echo
  if [[ $REPLY =~ ^[Oo]$ ]]; then
    git commit -m "feat: Add {skill_name} skill"
    echo "✅ Committed!"

    read -p "Push vers remote ? (o/n) " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Oo]$ ]]; then
      git push
      echo "✅ Pushed!"
    fi
  fi
else
  echo "ℹ️ Pas dans un repo Git - skip intégration"
fi

6.4 Documentation d'équipe

Si projet, générer TEAM_GUIDE.md :

# {Skill Name} - Guide d'Équipe

## Pour les Nouveaux

Cette skill permet de {objectif} automatiquement.

### Quand l'utiliser ?

Utilisez cette skill quand vous devez :
- {use_case_1}
- {use_case_2}
- {use_case_3}

### Comment l'utiliser ?

Simplement demandez à Claude :
> "{exemple_phrase}"

Claude va automatiquement :
1. {step_1}
2. {step_2}
3. {step_3}

## Exemples Réels

### Cas #1 : {scenario_1}

**Contexte :** {context}

**Action :**

{user_input}


**Résultat :**
{output_description}

**Tips :** {best_practice}

---

### Cas #2 : {scenario_2}

{similar_structure}

## FAQ

**Q : {question_1}**
A : {answer_1}

**Q : {question_2}**
A : {answer_2}

## Maintenance

### Owner
{owner_name} - {contact}

### Mise à jour
Pour modifier cette skill :
1. {process_step_1}
2. {process_step_2}
3. Tester avec `python test_skill.py`
4. Documenter dans CHANGELOG

### Reporting Issues
{issue_reporting_process}

## Best Practices Équipe

{team_specific_guidelines}

## Intégration avec Workflow

{if integration_with_other_tools}
Cette skill s'intègre avec :
- {tool_1}: {how}
- {tool_2}: {how}
{endif}

PHASE 7 : POST-INSTALLATION

7.1 Résumé et next steps

Afficher résumé complet :

🎉 SKILL CRÉÉE AVEC SUCCÈS !

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📋 RÉSUMÉ

Nom : {skill_name}
Version : 1.0.0
Location : {installation_path}

Description :
"{description}"

Activation :
  - "{activation_phrase_1}"
  - "{activation_phrase_2}"

Capabilities :
  ✨ {capability_1}
  ✨ {capability_2}
  ✨ {capability_3}

Token Efficiency :
  - Metadata : ~{X} tokens (toujours chargé)
  - Full load : ~{Y} tokens (on-demand)
  - Scripts : 0 tokens (sortie seule)

Files Created :
  📄 SKILL.md ({size}KB)
  {if scripts}
  🐍 scripts/ ({count} files)
  {endif}
  {if templates}
  📋 templates/ ({count} files)
  {endif}
  {if resources}
  📚 resources/ ({count} files)
  {endif}
  ✅ test_skill.py
  📖 README.md
  {if team_guide}
  👥 TEAM_GUIDE.md
  {endif}

Tests :
  ✅ {passed_tests}/{total_tests} passed

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🚀 NEXT STEPS

1. Testez la skill :
   {test_command}

2. Utilisez-la dans Claude Code :
   Lancez Claude et dites : "{activation_phrase}"

3. {if projet}
   Partagez avec l'équipe :
   git push
   {else}
   Utilisez-la dans tous vos projets !
   {endif}

4. Monitorer l'usage :
   - Observez si Claude l'active correctement
   - Affinez la description si nécessaire
   - Ajoutez des exemples basés sur usage réel

5. Maintenance :
   - Versionnez les changements
   - Documentez dans CHANGELOG
   - {if projet}Reviewez avec l'équipe{endif}

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📚 DOCUMENTATION

Location complète : {full_path}

Fichiers clés :
  - SKILL.md : Instructions pour Claude
  - README.md : Documentation humaine
  - {if team}TEAM_GUIDE.md : Guide équipe{endif}

Logs : {log_location if applicable}

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

💡 TIPS

{contextualized_tips_based_on_skill_type}

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Voulez-vous :
[t] Tester immédiatement la skill
[d] Afficher la documentation complète
[e] Créer une autre skill
[q] Quitter

→ :

7.2 Monitoring et feedback loop

Proposer système de monitoring :

📊 SYSTÈME DE MONITORING (optionnel)

Je peux ajouter un système de tracking pour :
- Comptabiliser les invocations
- Logger les erreurs
- Mesurer les performances
- Collecter feedback utilisateur

Ajouter monitoring ? (o/n) :

{if oui}
  Création de :
  - scripts/monitor.py
  - logs/{skill_name}.log
  - config/monitoring.json

  Features :
  ✅ Invocation counter
  ✅ Error tracking
  ✅ Performance metrics
  ✅ Usage patterns
{endif}

Si monitoring activé, générer scripts/monitor.py :

#!/usr/bin/env python3
"""
Monitoring for {skill_name}
"""

import json
import logging
from datetime import datetime
from pathlib import Path

class SkillMonitor:
    def __init__(self, log_dir="logs"):
        self.log_dir = Path(log_dir)
        self.log_dir.mkdir(exist_ok=True)

        self.log_file = self.log_dir / f"{skill_name}.log"
        self.metrics_file = self.log_dir / "metrics.json"

        self._setup_logging()

    def _setup_logging(self):
        logging.basicConfig(
            filename=self.log_file,
            level=logging.INFO,
            format='%(asctime)s - %(levelname)s - %(message)s'
        )
        self.logger = logging.getLogger(__name__)

    def log_invocation(self, input_data: dict):
        """Log skill invocation"""
        self.logger.info(f"Skill invoked with: {json.dumps(input_data)}")
        self._update_metrics("invocations")

    def log_error(self, error: str, context: dict = None):
        """Log error with context"""
        self.logger.error(f"Error: {error}")
        if context:
            self.logger.error(f"Context: {json.dumps(context)}")
        self._update_metrics("errors")

    def log_success(self, duration_ms: float, output_size: int):
        """Log successful execution"""
        self.logger.info(f"Success - Duration: {duration_ms}ms, Output: {output_size} bytes")
        self._update_metrics("successes")
        self._update_metric_value("avg_duration_ms", duration_ms)

    def _update_metrics(self, counter: str):
        """Update counter in metrics file"""
        metrics = self._load_metrics()
        metrics[counter] = metrics.get(counter, 0) + 1
        metrics["last_used"] = datetime.now().isoformat()
        self._save_metrics(metrics)

    def _update_metric_value(self, key: str, value: float):
        """Update average metric"""
        metrics = self._load_metrics()
        current = metrics.get(key, 0)
        count = metrics.get("successes", 1)
        # Running average
        metrics[key] = (current * (count - 1) + value) / count
        self._save_metrics(metrics)

    def _load_metrics(self) -> dict:
        if self.metrics_file.exists():
            with open(self.metrics_file) as f:
                return json.load(f)
        return {}

    def _save_metrics(self, metrics: dict):
        with open(self.metrics_file, 'w') as f:
            json.dump(metrics, f, indent=2)

    def get_stats(self) -> dict:
        """Get usage statistics"""
        return self._load_metrics()

# Singleton instance
monitor = SkillMonitor()

7.3 Amélioration continue

Créer un système de feedback :

## feedback/IMPROVEMENT_TRACKER.md

# Improvement Tracker - {Skill Name}

## Usage Patterns Observés

{auto-populated via monitoring}

### Top Activation Phrases
1. "{phrase_1}" - {count} times
2. "{phrase_2}" - {count} times
3. "{phrase_3}" - {count} times

### Edge Cases Rencontrés
- {case_1}: {frequency}
- {case_2}: {frequency}

## Feedback Utilisateurs

### Positif ✅
- {feedback_1}
- {feedback_2}

### À Améliorer ⚠️
- {feedback_1}
- {feedback_2}

## Roadmap

### v1.1.0 (planned)
- [ ] {improvement_1}
- [ ] {improvement_2}

### v1.2.0 (ideas)
- [ ] {feature_idea_1}
- [ ] {feature_idea_2}

## Metrics

{auto-generated_stats}

RÉCAPITULATIF DE LA COMMANDE

Invocation

# Dans Claude Code
/me:skill-create

# Ou naturellement
"Aide-moi à créer une skill pour automatiser X"

Flow Complet

/me:skill-create
  ├─ Phase 1: Contexte & Portée (2-3 questions)
  │   └─ Déterminer location + analyser projet

  ├─ Phase 2: Discovery (5-8 questions adaptatives)
  │   ├─ Objectif principal
  │   ├─ Déclencheurs
  │   ├─ Inputs/Outputs
  │   ├─ Complexité
  │   └─ Recherche web (si domaine spécifique)

  ├─ Phase 3: Design (validation interactive)
  │   ├─ Proposer architecture
  │   ├─ Identifier dépendances
  │   └─ Optimiser description

  ├─ Phase 4: Génération (création fichiers)
  │   ├─ SKILL.md complet
  │   ├─ Scripts fonctionnels
  │   └─ Ressources & templates

  ├─ Phase 5: Testing (validation)
  │   ├─ Tests automatiques
  │   ├─ Test découvrabilité
  │   └─ Checklist validation

  ├─ Phase 6: Déploiement (installation)
  │   ├─ Installation auto
  │   ├─ Documentation
  │   └─ Git integration (si projet)

  └─ Phase 7: Post-Install (suivi)
      ├─ Résumé & next steps
      ├─ Monitoring (optionnel)
      └─ Feedback loop

Durée Estimée

  • Simple skill: 5-10 minutes
  • Moyenne skill: 10-20 minutes
  • Complexe skill: 20-40 minutes

Output Final

{skill_name}/
├── SKILL.md                    # ⭐ Core skill file
├── README.md                   # 📖 Documentation
├── TEAM_GUIDE.md              # 👥 (si projet)
├── scripts/
│   ├── validate.py            # ✅ Validation
│   ├── process.py             # ⚙️ Processing
│   ├── format_output.py       # 📄 Formatting
│   └── monitor.py             # 📊 (si monitoring)
├── templates/
│   └── *.{ext}                # 📋 Templates
├── resources/
│   ├── business_rules.md      # 📚 Documentation
│   ├── test_datasets/         # 🧪 Test data
│   └── reference.md           # 📖 References
├── config/
│   └── settings.json          # ⚙️ Configuration
├── logs/                       # 📊 (si monitoring)
├── test_skill.py              # 🧪 Test suite
└── feedback/
    └── IMPROVEMENT_TRACKER.md  # 📈 Amélioration continue

NOTES POUR CLAUDE CODE

Quand cette commande est invoquée :

  1. Être conversationnel et guidant - Pas un interrogatoire, mais une collaboration
  2. Adapter les questions - Skip ce qui n'est pas pertinent selon les réponses
  3. Utiliser recherche web proactivement - Dès qu'un domaine spécialisé est mentionné
  4. Valider continuellement - Montrer ce qui est compris, demander confirmation
  5. Optimiser pour découverte - La description est CRITIQUE, y passer du temps
  6. Générer du code production-ready - Pas de placeholders, code fonctionnel
  7. Documenter exhaustivement - Future vous (ou l'équipe) doit comprendre facilement
  8. Tester avant livraison - Valider que tout fonctionne

Tone & Style

  • 🎯 Directif mais friendly
  • 💡 Proposer des suggestions éclairées
  • ⚡ Efficace (éviter verbosité inutile)
  • 🔍 Curieux (approfondir quand nécessaire)
  • ✅ Confirmer la compréhension régulièrement

Gestion des Cas Ambigus

Si l'utilisateur est vague :

  1. Proposer 2-3 interprétations possibles
  2. Demander laquelle correspond
  3. Ou suggérer une option recommandée avec justification

Si l'utilisateur demande quelque chose d'impossible :

  1. Expliquer pourquoi (limitations techniques)
  2. Proposer alternative viable
  3. Documenter la limitation pour référence future