Synthèse automatique
Génère un modèle de spécification pour des changements non triviaux, en créant d'abord une issue GitHub d'ancrage puis un fichier de spec numéroté dans docs/specs, selon le workflow Specify → Clarify → Tasks → Implement.
Points forts
- Automatise l'ensemble de la mécanique : slug sémantique, création d'issue GitHub, numérotation séquentielle à 4 chiffres et nommage du fichier avec référence à l'issue
- Sépare clairement le « quoi/pourquoi » (issue) du « comment » (fichier de spec), ce qui facilite la traçabilité via « Implements #123 »
- Détecte le type de spec (composition, infrastructure, security, platform) à partir de motifs de fichiers et propose une valeur par défaut tout en demandant confirmation
- Indique explicitement les cas à ne pas spécifier (bump de version, docs, correctif mono-fichier), évitant la sur-documentation
Limites
- Fortement lié à un contexte plateforme précis (Crossplane/KCL, OpenTofu/Terramate, EKS, OpenBao), peu réutilisable tel quel ailleurs
- Suppose une arborescence docs/specs/active et docs/specs/completed ainsi que des labels GitHub spec et <type> déjà en place
- Nécessite gh authentifié et des droits de création d'issues ; le contenu de la spec reste un squelette à remplir manuellement
À utiliser avant d'implémenter une composition Crossplane, un changement d'infrastructure majeur, une modification de sécurité ou une fonctionnalité multi-composants.
À éviter pour les bumps de version Renovate, les changements de documentation seule, les correctifs mono-fichier ou les ajustements mineurs de valeurs HelmRelease.
Analyse de sécurité
PrudenceThe skill uses Bash, the GitHub CLI (network), and Write to create issues and spec files, which are powerful but legitimate operations. There are no destructive commands (no rm -rf, no curl|sh), no obfuscated/base64 payloads, and no attempts to exfiltrate secrets or disable safety. All shell activity (git/gh/ls/sed/grep) is scoped to generating spec scaffolding, so it warrants 'caution' rather than 'risky'.
- •Uses Bash with gh CLI (network calls to GitHub: issue create, issue comment)
- •Creates/writes files under docs/specs/active/ via Write and shell redirection
- •Runs shell pipelines (ls, sed, grep, printf) for numbering and slug generation
- •Filename embeds '#' from issue number; unquoted usage could cause minor shell issues in some contexts
Exemples
/specify composition Add a Valkey caching composition for Redis workloads/specify security Zero-trust network policies and RBAC for the payments namespace/specify infrastructure Migrate EKS node groups to Karpenter with spot instancesname: specify description: Generate a specification template for non-trivial changes using Spec-Driven Development. Creates GitHub issue + spec file following the 4-stage workflow (Specify → Clarify → Tasks → Implement). allowed-tools: Read, Write, Bash(git:), Bash(gh:), Glob, Grep
Specify Skill
Generate specification templates for changes that require formal design documentation before implementation. Follows GitHub Spec Kit 4-stage workflow: Specify → Clarify → Tasks → Implement.
Usage
/specify <type> [description]
Types: composition | infrastructure | security | platform
When to Use
Run /specify when making:
- composition: New Crossplane compositions (KCL modules, XRDs)
- infrastructure: Major OpenTofu/Terramate changes (VPC, EKS, IAM)
- security: Network policies, RBAC, secrets management, PKI
- platform: Multi-component features spanning multiple subsystems
When NOT to Use
Skip specs for:
- Version bumps (Renovate PRs)
- Documentation-only changes
- Single-file bug fixes
- Minor HelmRelease value tweaks
Workflow
Step 1: Determine Spec Type
If type argument provided, use it directly.
If type NOT provided, use AskUserQuestion to prompt:
Question: "What type of specification do you want to create?"
Header: "Spec type"
Options:
- composition: "New Crossplane KCL composition, XRD, or managed resource pattern"
- infrastructure: "OpenTofu/Terramate changes (VPC, EKS, IAM, network)"
- security: "Network policies, RBAC, secrets management, PKI changes"
- platform: "Multi-component features spanning multiple subsystems"
Context hints (use to suggest a default, but always confirm with user):
| Type | Trigger Patterns |
|------|-----------------|
| composition | KCL files, *-composition.yaml, *-definition.yaml |
| infrastructure | opentofu/**/*.tf, terramate.tm.hcl, EKS/VPC changes |
| security | *networkpolicy*, *rbac*, openbao/**, secrets |
| platform | Multi-directory changes, new HelmReleases, observability |
Step 2: Get Description
If description provided, use it directly.
If description NOT provided, ask the user:
- "Briefly describe what you want to specify (e.g., 'Add Valkey caching composition for Redis workloads')"
Step 3: Generate Semantic Slug
From description, create a slug:
- Filter out stop words (I, want, to, the, for, a, an, etc.)
- Take 3-4 most meaningful words
- Join with hyphens, lowercase
- Example: "Create a Valkey caching composition" → "valkey-caching-composition"
Step 4: Create GitHub Issue (Anchor)
Create a GitHub issue as the immutable anchor for discussion and tracking:
# Create issue and capture the issue number directly from the output
ISSUE_URL=$(gh issue create \
--title "[SPEC] ${TITLE}" \
--label "spec,${TYPE}" \
--body "## Summary
${DESCRIPTION}
## Spec Type
${TYPE}
## Spec File
Will be created at: \`docs/specs/active/XXXX-#ISSUE-${SLUG}.md\`
---
_This issue tracks a formal specification. See the linked spec file for full details._")
# Extract issue number from the returned URL
ISSUE_NUM=$(echo "$ISSUE_URL" | grep -oP 'issues/\K\d+$')
Why GitHub Issue first?
- Provides discoverability (searchable, project boards)
- Enables discussion (comments, reactions, mentions)
- Creates linkable anchor for PRs (
Implements #123) - Separates "what/why" (issue) from "how" (spec file)
Step 5: Generate Spec Number
# Find next spec number by extracting the highest existing number
MAX_NUM=$(ls -1 docs/specs/active/*.md docs/specs/completed/*.md 2>/dev/null | \
sed 's|.*/||' | \
grep -oP '^\d{4}(?=-)' | \
sort -rn | \
head -1)
SPEC_NUM=$(printf "%04d" $((10#${MAX_NUM:-0} + 1)))
Step 6: Create Spec File
# Include issue number in filename for traceability
SPEC_FILE="docs/specs/active/${SPEC_NUM}-#${ISSUE_NUM}-${SLUG}.md"
Copy the appropriate template:
composition→docs/specs/templates/spec-crossplane-composition.mdinfrastructure→docs/specs/templates/spec-infrastructure.mdsecurity→docs/specs/templates/spec-security.mdplatform→docs/specs/templates/spec-platform-capability.md
Step 7: Pre-fill Context
Replace placeholders in the template:
SPEC-XXXX→SPEC-${SPEC_NUM}YYYY-MM-DD→ current date[Composition Name]/[Title]→ derived from descriptionGitHub Issue: #XXX→GitHub Issue: #${ISSUE_NUM}
Step 8: Update GitHub Issue with Spec Link
gh issue comment ${ISSUE_NUM} --body "Spec file created: [\`${SPEC_FILE}\`](${SPEC_FILE})"
Step 9: Read Related Context
To help fill in the template, scan relevant files (only if they exist):
# Always read these core files
[ -f "CLAUDE.md" ] && echo "Read: CLAUDE.md"
[ -f "docs/specs/constitution.md" ] && echo "Read: constitution.md (platform principles)"
# Type-specific context (only if files exist)
if [ "$TYPE" = "composition" ]; then
[ -f "docs/crossplane.md" ] && echo "Read: docs/crossplane.md"
fi
# Optional architectural context
[ -f "docs/technology-choices.md" ] && echo "Read: docs/technology-choices.md"
# Always scan similar completed specs for patterns
ls docs/specs/completed/*.md 2>/dev/null | head -3
Required context files:
CLAUDE.md- Project patterns and validation requirementsdocs/specs/constitution.md- Platform-wide non-negotiable principles
Optional context files (read if they exist):
docs/crossplane.md- Composition patterns (for composition type)docs/technology-choices.md- Architectural contextdocs/specs/completed/*.md- Similar completed specs for reference
Step 10: Output
Display:
- GitHub issue URL
- Created spec file path
- Template type used
- Quick reference to the 4 personas who should review
- Next steps
Output Format
✅ Specification created!
🔗 GitHub Issue: https://github.com/Smana/cloud-native-ref/issues/XXX
📄 Spec File: docs/specs/active/XXXX-#XXX-slug.md
📋 Type: [composition|infrastructure|security|platform]
## Review Personas
Before implementation, self-review as:
- [ ] PM: Problem clear? User stories valid? Scope defined?
- [ ] Platform Engineer: Patterns consistent? Implementation feasible?
- [ ] Security & Compliance: Zero-trust? Least privilege? Secrets managed?
- [ ] SRE: Observable? Recoverable? Failure modes documented?
## Next Steps
1. Fill in the spec template (especially [NEEDS CLARIFICATION] sections)
2. Run /clarify to resolve clarifications interactively
3. Run /tasks to generate task breakdown
4. Implement the changes
5. Reference issue in PR: `Implements #XXX`
6. After merge: `mv docs/specs/active/XXXX-*.md docs/specs/completed/`
7. Close the GitHub issue
Examples
# Explicit type
/specify composition Create a Valkey caching composition for Redis workloads
# Explicit type
/specify infrastructure Add Karpenter provisioner for GPU nodes
# Explicit type
/specify security Implement network policies for apps namespace
# Explicit type
/specify platform Add distributed tracing with Tempo
Integration with Other Skills
/specify→ Creates GitHub issue + spec file (this skill)/clarify→ Resolves[NEEDS CLARIFICATION]markers interactively/tasks→ Generates task breakdown from spec's Rollout Plan/create-pr→ Auto-detects spec and references issue (Implements #XXX)
Spec Lifecycle
┌─────────────────┐ ┌──────────────────────────────────┐ ┌─────────────────────┐
│ GitHub Issue │────▶│ docs/specs/active/XXXX-#XX.md │────▶│ docs/specs/completed/
│ #XXX (anchor) │ │ (detailed spec) │ │ XXXX-#XX.md │
└─────────────────┘ └──────────────────────────────────┘ └─────────────────────┘
│ │ │
│ ▼ │
│ [Implementation] │
│ │ │
▼ ▼ ▼
Discussion PR: "Implements #XXX" Reference
Comments Code Review History
Reactions Merge
Two-Document Model
| Document | Purpose | Location |
|----------|---------|----------|
| GitHub Issue | Immutable anchor, discussion, "what/why" | GitHub Issues |
| Spec File | Detailed design, checklists, "how" | docs/specs/active/ |
The issue provides discoverability and discussion; the spec file contains implementation details.
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/spec-driven-development-mmbizjsr/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/spec-driven-development-mmbizjsr' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/spec-driven-development-mmbizjsr/download' --output '.skill-downloads/spec-driven-development-mmbizjsr/SKILL.md.part' && mv '.skill-downloads/spec-driven-development-mmbizjsr/SKILL.md.part' '.skill-downloads/spec-driven-development-mmbizjsr/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Outils déclarés par l’auteur (à vérifier dans votre agent) : Read, Write, Bash(git:*), Bash(gh:*), Glob, Grep
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
Claude Code
test -f '.skill-downloads/spec-driven-development-mmbizjsr/SKILL.md' && test -s '.skill-downloads/spec-driven-development-mmbizjsr/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/specify' && cp -R '.skill-downloads/spec-driven-development-mmbizjsr' '.claude/skills/specify'OpenSkills
OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/spec-driven-development-mmbizjsr'openskills read 'spec-driven-development-mmbizjsr'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/spec-driven-development-mmbizjsr/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Bonnes pratiques React Hook Form
Developpement
Maîtrisez React Hook Form : évitez les anti-patterns, gérez les abonnements, et traitez correctement reset, dirty state et entrées contrôlées.
Migration Emotion vers Mantine
Developpement
Migrer les styled-components Emotion vers des composants Mantine avec style props et modules CSS. Pour convertir .styled.tsx ou supprimer les imports @emotion.
Détecteur de dérive de périmètre
Developpement
Analyse les diffs git par rapport à une intention pour détecter la dérive de périmètre, fichiers non liés et PR trop larges, puis suggère de garder, diviser ou justifier.