~/skills/sdlc

Le processus de la skill sdlc

La skill /sdlc applique le playbook « AI-native SDLC » d'Anthropic à un projet : chaque étape du développement devient un fichier versionné, relu avant de passer à la suivante. Elle met la structure en place, puis, en option, installe un cycle de chantiers conduit par un coordinateur, qui lance un agent neuf par phase et ne sollicite l'utilisateur que pour trancher.

L'idée directrice

Écrire du code n'est plus le goulot d'étranglement : ce sont le cadrage, le test et le déploiement. Le playbook transforme donc chaque étape en artefact versionné :

intent.md → spec.md → plan.md → code + tests → revue → incident

La configuration (CLAUDE.md, skills, hooks, evals) est traitée comme du code : versionnée et relue. Les humains gardent les décisions ; les hooks (déterministes) bloquent, les skills et CLAUDE.md (consultatifs) guident.

La skill travaille à deux niveaux : elle met en place la structure une fois, puis le cycle de chantiers (brique optionnelle) la maintient au quotidien. Deux règles gouvernent toute la skill :

rien n'est écrit avant validation

Sur un existant, on risque d'écraser des conventions ; sur un neuf, de construire à côté du besoin. Un plan validé par l'utilisateur précède toute modification.

proportionnalité

Un script de 50 lignes n'a pas besoin de spec, de plan, de CI et d'evals. La skill propose la version minimale viable et l'utilisateur monte en charge.

Les questions sont posées par lots de 2 à 4, avec des options concrètes et la recommandation en premier.

Étape 0 : détecter le mode

La skill inspecte le dossier courant en lecture seule : git log, manifestes (pyproject.toml, package.json, go.mod…), code source, CLAUDE.md, .claude/, README, CI.

ConstatMode
code ou historique git présentexistant (étape A)
dossier vide ou quasi videnouveau (étape B)
ambigu (quelques fichiers)demande à l'utilisateur

Le mode détecté est annoncé en une phrase. Si la session est dans un dossier temporaire alors que l'utilisateur parle d'un projet existant, la skill demande ou déplace la session vers le bon dossier avant de lire quoi que ce soit.

Mode existant : auditer puis adopter

  1. a1Audit en lecture seule

    Comparaison du dépôt à une checklist : CLAUDE.md, commande unique build+test, dossier d'artefacts, source de vérité des exigences, hooks, permissions, subagent verifier, skills de politiques, REVIEW.md, CI et evals, gate de production, surveillance. Chaque ligne est notée présent, partiel ou absent, avec le chemin comme preuve. Les conventions déjà documentées sont repérées pour être préservées.

  2. a2Questions à l'utilisateur

    Ce qui coince aujourd'hui, périmètre d'adoption (tout ou certaines briques), taille d'équipe et hébergement, source de vérité des exigences (dépôt, outil existant type Jira, ou simple lien d'ID), contraintes à respecter, emplacement des artefacts, et le cycle de chantiers : le projet va-t-il évoluer par évolutions successives, qui valide les portes et qui fusionne, quels dossiers non versionnés partager entre worktrees.

  3. a3Plan d'adoption à valider

    Pour chaque brique : créer, fusionner ou ignorer, avec fichiers touchés, risque et ordre. Trois niveaux : gains rapides sans risque, garde-fous (hooks, permissions), optionnel et coûteux (CI d'evals, REVIEW.md, monitoring, cycle de chantiers avec son coordinateur, ses agents de phase, ses hooks et ses scripts de worktree). La skill attend un « oui » explicite.

  4. a4Application brique par brique

    Petits changements relisibles, sans jamais écraser un fichier existant (fusion, diff montré), sans toucher au code applicatif. Les commandes de vérification sont lancées après chaque brique et leur sortie réelle est rapportée. Aucun commit sans permission.

Une limite posée par l'utilisateur prime sur la correction d'un défaut. Si l'audit révèle un défaut dans un fichier interdit (test qui échoue, lint préexistant), la skill ne le corrige pas : elle le note dans une section « Problèmes connus » de CLAUDE.md avec la commande de contournement, le liste dans le plan comme « correctif proposé, hors périmètre », et configure les hooks pour ne pas bloquer dessus.

Mode nouveau : cadrer puis construire

  1. b1Découverte du besoin

    Brainstorming par questions : problème et public, critères de réussite, systèmes concernés, contraintes (stack, hébergement, budget, délais, conformité, données personnelles), hors périmètre, questions ouvertes. Le besoin est reformulé pour faire corriger les malentendus avant d'écrire.

  2. b2Évaluer la complexité

    Simple (script, un seul flux, peu d'inconnues) : intent.md seul et CLAUDE.md. Complexe (plusieurs composants, intégrations, données sensibles, choix d'architecture, jalons) : chaîne complète intent.md → spec.md → plan.md avec validation à chaque étape.

  3. b3Artefacts

    Dans docs/sdlc/, ou dans docs/chantiers/<AAAA-MM>-<slug>/ si le cycle de chantiers est adopté. intent.md (statut ouvert, validé par l'utilisateur, qui joue le product owner). spec.md dérivée de l'intent, politiques appliquées pendant la rédaction, contradictions signalées plutôt que tranchées en silence. plan.md établi en lecture seule : fichiers à créer, ordre, risques, preuves.

  4. b4Squelette du projet

    Version minimale après validation : stack choisie avec l'utilisateur, CLAUDE.md d'une page, une commande unique de vérification et un premier test qui passe (pytest via uv, vitest en JS/TS), hooks essentiels si pertinent. Le subagent verifier, REVIEW.md, les evals en CI et le cycle de chantiers restent optionnels. git init et premier commit seulement avec permission.

Les six phases du playbook

PhaseArtefactIdée cléDécideur
1 Planintent.mdintention en langage naturel, itérée jusqu'à clartéproduct owner
2 Designspec.mdpolitiques appliquées pendant la rédaction, contradictions signaléesPO (+ lead tech)
3 Buildplan.md, code, CLAUDE.mdplan en lecture seule, hooks, worktrees, subagentsingénieur
4 Testtests, evalsClaude vérifie avant la relecture humaineCI
5 DeployREVIEW.md, gatesl'agent qui code n'approuve pascode owner
6 Maintainintent d'incidentsurveillance déterministe, diagnostic en lecture seuleservice owner

Détail : CLAUDE.md, hooks et skills

CLAUDE.md tient sur environ une page : Commands, Conventions, Things Claude gets wrong, Verifying your work (coller la sortie avant de dire terminé, ne jamais supprimer ni ignorer un test). Deux erreurs identiques valent une entrée.

Hooks typiques : bloquer l'édition de chemins protégés, auto-formater après édition, garder les secrets hors des diffs, geler les tests pendant un bug fix, exiger une autorisation avant la production. Un hook bloque en sortant avec le code 2 ; il doit être testé avec du JSON simulé, car un hook qui plante (code 1) ne bloque rien sans prévenir.

Détail : test, revue et maintenance

Test : cible quantifiable, bug fix = test qui échoue d'abord, subagent verifier (lance l'app, exerce le changement et deux flux adjacents, rapporte sans corriger), evals de configuration de 20 à 50 cas rejoués en CI quand CLAUDE.md ou .claude/** changent.

Revue : REVIEW.md avec trois passes (bugs, sécurité, conformité à la spec), nits plafonnés, un même finding deux fois alimente CLAUDE.md.

Maintenance : un script de surveillance déclenche Claude en lecture seule au franchissement d'un seuil ; Claude écrit un intent.md d'incident avec preuves, le correctif suit le pipeline normal et ajoute un eval.

Le cycle de chantiers

Une fois la structure posée, le projet évolue par chantiers : un par évolution, avec ses propres intent.md, spec.md et plan.md, sa branche chantier/<slug> et son worktree. La brique ne convient pas à un script ni à un projet sans évolution prévue.

Le cycle est conduit par un coordinateur : le skill /chantier, qui tourne dans la session de l'utilisateur. Il n'écrit ni document, ni test, ni code. Il lance un agent neuf par phase, trie ses questions, commite et tient un journal. L'utilisateur n'est sollicité que pour trancher : valider l'intention, valider la conception (spec et plan ensemble), merger. Des hooks tiennent chaque agent dans son rôle et réservent le merge à l'utilisateur.

Les phases et les trois portes

PhaseAgentProduitCe qui arrête l'utilisateur
0 Ouverture(coordinateur)worktree, journal.mdune question : le brief et la permission de commit
1 Intentionchantier-intentionintent.mdporte : questions sur les trous du brief, puis validation
2 Conceptionchantier-conception + relecteur neufspec.mdseulement une décision que l'amont ne tranche pas
3 Planchantier-plan + relecteur neufplan.mdporte : validation du dossier de conception (spec + plan)
4 Testschantier-tests + relecteur neuftests en échec pour la bonne raisonrien, sauf escalade
5 Codechantier-codesuite verte, mesure atteinterien, sauf escalade
6 Merge(coordinateur)fusion dans la branche principaleporte : l'utilisateur tape /chantier merge

Le statut vit dans l'en-tête d'intent.md : ouvert, puis clos (avec la date) ou abandonné (avec une ligne de raison). La phase en cours vit dans journal.md. Chaque phase est commitée avant la suivante, ce que le coordinateur vérifie avec git log et git status dans le worktree.

Graphe animé d'un chantier

Le graphe montre qui parle à qui pendant un chantier complet : la session de l'utilisateur, le coordinateur, les six agents, les documents qu'ils ont le droit d'écrire, le hook garde.py qui filtre chaque écriture, et la branche du chantier qui reçoit un commit par porte franchie.

session principale agents de phase docs/chantiers/… garde.py briefdécisions /chantier merge pose tient commitmerge lance · SendMessage refus refus Utilisateurtranche, merge porte commande.pyUserPromptSubmit .claude/etat/approbation de merge Coordinateurskill /chantiertrie · commite journal.mddécisions, déroulé chantier-intention chantier-conception chantier-plan chantier-relecteurun neuf par phase chantier-tests chantier-code intent.md spec.md plan.md tests/ src/ main chantier/<slug> · worktree ouvrir.py intent.md spec + plan tests code · clos merge --no-ff CLAUDE.md
vue d'ensemble

Appuie sur lecture pour suivre un chantier de l'ouverture au merge, ou choisis une phase. Chaque agent est lancé par le coordinateur, n'écrit que son document, et tout passe par garde.py.

échange actiflecture seuleécriture refusée par garde.py

Règles qui valent à toute phase

Trancher, régler ou informer

Chaque agent termine par un rapport YAML (questions, decisions_prises, amont_a_rouvrir, verification). Le coordinateur trie chaque question et chaque remarque bloquante :

il règle

Les fichiers amont, CLAUDE.md ou le code y répondent : il relance l'agent avec la réponse et sa source, et note la décision au journal.

l'utilisateur tranche

Besoin, critère de réussite, périmètre ; choix entre options défendables sans critère amont ; contradiction ; amendement du plan qui change les tests ; budget épuisé ; données partagées ; conflit ; abandon.

il informe

Phase franchie, commit, remarque a_signaler, sortie de tests : au journal, sans interrompre.

Les questions pour l'utilisateur sont groupées, une fois par phase au plus, chacune avec deux à quatre options, la recommandation en premier et la raison pour laquelle elle lui revient.

Le journal

journal.md, dans le dossier du chantier, est tenu par le coordinateur seul et commité avec chaque phase. Il sert à reprendre après un /clear ou dans une autre session, et à contester une décision.

permission_commits: accordée AAAA-MM-JJ, branche chantier/<slug>
phase: intention | conception | plan | tests | code | pret-a-merger | clos | abandonne
relances: <phase> <n>/2
agents: <phase> — <agent> <identifiant>, chantier-relecteur <identifiant>

## En attente de l'utilisateur
## Décisions prises seul        décision — source : fichier §section
## À signaler (relecteur)
## Déroulé                      agent lancé, relance, commit, escalade

Les commandes

CommandeEffet
/chantierreprise : liste les chantiers ouverts de tous les worktrees, avec phase et questions en attente, sans rien démarrer
/chantier nouveau <idée>ouverture, puis phases 1 à 5 d'affilée
/chantier <slug>lit le journal et reprend à sa phase, en commençant par les questions en attente
/chantier mergeaccorde l'approbation de merge pour la session, puis phase 6
/chantier bogue <description>circuit raccourci
/chantier tests, /chantier coderepli manuel du verrou des tests, tapé à la demande du coordinateur

Le circuit bogue n'a qu'une porte, le merge. chantier-intention écrit un intent.md minimal (symptôme, commande qui le reproduit, résultat attendu) portant circuit: bogue ; pour ce circuit, le hook n'exige que cet intent.md commité avant le code. Pas de spec ni de plan si la correction est locale ; sinon le circuit complet reprend. chantier-tests écrit le test qui reproduit le bogue et le voit échouer, puis chantier-code corrige sans toucher au test.

Un worktree par chantier

ouvrir.py, lancé depuis le dossier principal, crée la branche chantier/<slug> et le worktree .claude/worktrees/<slug>/, relie les dossiers non versionnés partagés et installe l'environnement (par exemple uv sync, car le .venv n'est pas versionné et les hooks l'appellent). Le coordinateur reste dans la session de l'utilisateur, dans le dossier principal : ce sont les agents qui partent de zéro. Ce sont donc les hooks du dossier principal qui tournent ; garde.py juge une écriture par chemin absolu dans le worktree qui contient ce chemin. lister.py liste les chantiers ouverts de tous les worktrees, avec leur branche et les portes franchies.

Verrous par agent

Pour un appel fait par un sous-agent, Claude Code transmet au hook le champ agent_type (le nom de sa définition, par exemple chantier-tests) ; il est absent pour la session principale, qui partage le même session_id. garde.py fonde ses verrous sur ce champ :

AgentPeut écrire
chantier-intentionintent.md
chantier-conceptionspec.md
chantier-planplan.md
chantier-relecteurrien, shell compris
chantier-testsle dossier de tests, une fois plan.md commité
chantier-codele dossier de code, une fois les tests commités ; jamais les tests
tousjamais de merge ni de push vers la branche principale

Seule l'approbation de merge reste une commande au quotidien. Le hook commande.py se déclenche à l'envoi d'un message de l'utilisateur (UserPromptSubmit), avant que Claude le voie : /chantier merge pose un marqueur dans .claude/etat/, lié à la session et purgé après deux jours. garde.py interdit à Claude d'écrire dans ce dossier, ce qui garantit que seul l'utilisateur l'ouvre. La commande ne compte qu'au tout début du message, une fois retiré le contexte <ide_…> de l'extension VS Code ; un message venu d'une autre session (enveloppe <cross-session-message>) n'ouvre jamais rien.

Si agent_type n'arrive pas (version de Claude Code qui ne l'envoie pas), le coordinateur passe en repli : il demande à l'utilisateur de taper /chantier tests, puis /chantier code en fin de phase Tests, et dit toujours pourquoi.

Ce que fait garde.py

Garde-fouMécanisme
chemins protégés (verrou de dépendances, miroirs de données, code généré)refus avant écriture
.claude/etat/écriture refusée à Claude
dossier de testsrefusé à tout sous-agent autre que chantier-tests ; à la session principale sans /chantier tests
dossier de code, sur une branche chantier/<slug>refus tant que plan.md n'est pas commité (intent.md en circuit bogue) ; refusé à tout sous-agent autre que chantier-code, et à celui-ci tant que des tests restent non commités
documents de docs/chantiers/chaque agent de phase n'écrit que le sien ; le relecteur rien
git merge, git push vers main/masterrefus sans /chantier merge pour la session, et toujours pour un sous-agent ; git merge --abort reste permis
entrée illisible ou panne du hookappel refusé (code 2) plutôt qu'autorisé

La garde est stricte pour Edit et Write, heuristique pour le shell : un script qui écrit hors de la vue du hook passe, et la relecture reste le filet. L'heuristique refuse parfois à tort (comparaison par sous-chaîne d'un chemin gardé, texte d'un heredoc pris pour des commandes). Les sources d'une copie ne sont que lues : seule la destination est contrôlée. Hors branche de chantier, la garde sur le code ne bloque rien.

Le merge

L'utilisateur seul, en tapant /chantier merge. Aucun agent ne fusionne ; c'est le coordinateur, depuis le dossier principal :

Arborescence

projet/
├─ CLAUDE.md                  commandes, conventions, invariants, décisions
├─ REVIEW.md                  passes de relecture avant commit
├─ docs/
│  └─ chantiers/
│     └─ AAAA-MM-slug/        un dossier par chantier
│        ├─ intent.md          le besoin, sans solution
│        ├─ spec.md            la conception
│        ├─ plan.md            l'exécution et les tests nommés
│        └─ journal.md         tenu par le coordinateur
├─ tests/                    écrits par chantier-tests seul
└─ .claude/
   ├─ settings.json          permissions et hooks
   ├─ skills/chantier/       SKILL.md : le coordinateur
   ├─ agents/                chantier-intention, -conception, -plan,
   │                         -relecteur, -tests, -code
   ├─ hooks/                 garde.py, commande.py
   ├─ chantier/              ouvrir.py, lister.py
   ├─ etat/                  approbations liées à la session, non versionné
   └─ worktrees/             un worktree par chantier en cours, non versionné

Contenu des trois fichiers

Un seul jeu de sections pour intent.md, spec.md et plan.md, avec ou sans le cycle de chantiers. Avec le cycle, les mêmes sections figurent dans les agents de phase.

intent.md : le besoin

---
statut: ouvert
ouvert: AAAA-MM-JJ
---
# Titre

## Besoin
Le problème, tel qu'observé, pour qui ; un exemple concret.

## Pourquoi maintenant
Ce qui le rend utile ou urgent.

## Critère de réussite
Observable et vérifiable : un temps, un résultat de commande, une mesure.

## Hors périmètre
Ce qu'on ne fait pas.

## Contraintes
Stack, délais, conformité, données, budget : si elles comptent.

## Questions ouvertes
À trancher avant la spec.

## Pistes notées en passant
Solutions évoquées, non retenues ; la spec les examinera.

Règle : aucune solution dans l'intention. Le critère de réussite doit pouvoir se vérifier par une commande ou une mesure.

spec.md : la conception

# Spec : titre

## Approche retenue
En quelques paragraphes : comportement, flux, interfaces, modèle de données.

## Invariants de CLAUDE.md touchés
Pour chacun, comment il est respecté. « Aucun » se justifie en une ligne.

## Options écartées
Une phrase chacune, avec la raison.

## Comportement qui change
Ce que l'utilisateur verra de différent : cela décide des tests à modifier.

## Exigences transverses
Sécurité, vie privée, accessibilité, performance, journalisation, politiques appliquées.

## Contradictions et points signalés
Conflits entre exigences ou politiques, non tranchés silencieusement.

## Critères d'acceptation
Liste testable.

## Mesure qui tranchera
La mesure et son seuil, fixés avant d'écrire le code.

plan.md : l'exécution

# Plan : titre

## Étapes et fichiers touchés
Chemins, création ou modification, ordre ; réutiliser l'existant.

## Tests
Liste nominative des tests à ajouter, modifier ou supprimer, avec la raison
de chacun et le critère d'acceptation couvert. Liste vide possible, à justifier.

## Mise à jour de ce qui est visible
Artefact déployé, documentation : si le comportement visible change.

## Risques
Ce qui pourrait casser, dépendances, migrations, retour arrière.

## Vérification
Commandes de CLAUDE.md et mesure de la spec.

## Décisions à reporter
Décisions valables pour tout le projet, reportées dans CLAUDE.md au merge.

Installer la brique

  1. 1Questions

    Décideur des portes (seul ou équipe), délégation des commits de chaque chantier au coordinateur, branche principale, chemins protégés, dossiers de tests et de code, dossiers à partager, commande d'installation, commande de vérification complète, artefact « déployé » éventuel.

  2. 2Adapter les modèles

    Constantes « À ADAPTER » de garde.py et ouvrir.py, champs du skill et des six agents, copiés dans .claude/agents/. Les hooks ne sont pas élargis au-delà de ce que le projet demande.

  3. 3Brancher les hooks

    Fusion dans .claude/settings.json : commande.py sur UserPromptSubmit (sans matcher), garde.py sur PreToolUse pour Edit, Write, NotebookEdit, Bash et PowerShell. .gitignore : /.claude/etat/ et /.claude/worktrees/.

  4. 4Copier et lancer les tests

    Pour chaque hook, un cas qui doit bloquer, un cas qui doit passer et une entrée illisible, plus la création de worktree et la liste des chantiers. Tous doivent passer ; la sortie réelle est montrée.

  5. 5Vérifier en séance réelle

    Les hooks ne se chargent que dans une nouvelle session. Taper /chantier tests et contrôler qu'un marqueur apparaît dans .claude/etat/, avec un fichier ouvert dans l'éditeur : seul le marqueur fait foi, pas ce que répond Claude. Puis, sur une branche de chantier au plan commité, faire écrire un test par chantier-tests (accepté) et par chantier-code (refusé). Un refus pour chantier-tests signifie que agent_type n'arrive pas : rester en repli.

  6. 6Documenter

    Une section « Cycle de développement » d'une demi-page dans CLAUDE.md. Aucun commit sans permission.

Le coordinateur est un skill, donc consultatif : c'est lui qui décide de ne pas déranger l'utilisateur. Les hooks garantissent seulement qu'un agent ne sort pas de son rôle et que le merge reste humain. La session principale garde le mode manuel (code après le plan, tests avec /chantier tests) : le skill interdit au coordinateur de s'en servir, pas le hook. Les hooks et settings.json ne sont pas protégés par défaut ; si le risque compte, les ajouter aux chemins protégés, et leur maintenance se fait alors à la main. Le lien vers les dossiers partagés (lien symbolique, ou jonction sous Windows) n'est pas couvert par les tests.

Principes appliqués partout

Sortie finale

Un résumé court : mode retenu, décisions prises, fichiers créés ou modifiés, commandes de vérification lancées et leur résultat, points en suspens, prochaine étape suggérée : un premier chantier (/chantier nouveau <idée>) si le cycle est installé, sinon un premier intent.md, ou l'activation de la revue automatique des PR.

Source du playbook : claude.com/blog/the-ai-native-sdlc-playbook.