mdma-cli 4.3.0 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/init.js CHANGED
@@ -9,6 +9,10 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
9
9
  const PKG_ROOT = join(__dirname, '..');
10
10
  const TEMPLATES_SRC = join(PKG_ROOT, 'templates');
11
11
  const RULES_DEST = join(process.cwd(), '.claude', 'rules', 'mdma');
12
+ const SKILLS_SRC = join(TEMPLATES_SRC, 'skills');
13
+ const SKILLS_DEST = join(process.cwd(), '.claude', 'skills', 'mdma');
14
+ const SUBAGENTS_SRC = join(TEMPLATES_SRC, 'subagents');
15
+ const SUBAGENTS_DEST = join(process.cwd(), '.claude', 'subagents', 'mdma');
12
16
 
13
17
  const CORE_FILES = ['models.md', 'style.md', 'best-practices.md'];
14
18
 
@@ -60,6 +64,30 @@ function listOptions() {
60
64
  console.log('\nUsage: npx mdma-cli add [preset] or npx mdma-cli add --workflow=X --git=Y\n');
61
65
  }
62
66
 
67
+ function copyDirRecursive(src, dest) {
68
+ if (!existsSync(src)) {
69
+ return 0;
70
+ }
71
+
72
+ mkdirSync(dest, { recursive: true });
73
+ let count = 0;
74
+
75
+ const entries = readdirSync(src, { withFileTypes: true });
76
+ for (const entry of entries) {
77
+ const srcPath = join(src, entry.name);
78
+ const destPath = join(dest, entry.name);
79
+
80
+ if (entry.isDirectory()) {
81
+ count += copyDirRecursive(srcPath, destPath);
82
+ } else if (entry.name.endsWith('.md')) {
83
+ copyFileSync(srcPath, destPath);
84
+ count++;
85
+ }
86
+ }
87
+
88
+ return count;
89
+ }
90
+
63
91
  function updateGitExclude() {
64
92
  const excludePath = join(process.cwd(), '.git', 'info', 'exclude');
65
93
 
@@ -187,6 +215,20 @@ function add(args) {
187
215
  copyFileSync(gitFile, join(RULES_DEST, `git-${git}.md`));
188
216
  console.log(` [ok] git-${git}.md`);
189
217
 
218
+ // Copy skills
219
+ rmSync(SKILLS_DEST, { recursive: true, force: true });
220
+ const skillsCount = copyDirRecursive(SKILLS_SRC, SKILLS_DEST);
221
+ if (skillsCount > 0) {
222
+ console.log(` [ok] skills/ (${skillsCount} files)`);
223
+ }
224
+
225
+ // Copy subagents
226
+ rmSync(SUBAGENTS_DEST, { recursive: true, force: true });
227
+ const subagentsCount = copyDirRecursive(SUBAGENTS_SRC, SUBAGENTS_DEST);
228
+ if (subagentsCount > 0) {
229
+ console.log(` [ok] subagents/ (${subagentsCount} files)`);
230
+ }
231
+
190
232
  // Update .git/info/exclude
191
233
  const excludeResult = updateGitExclude();
192
234
  if (excludeResult === true) {
@@ -208,7 +250,8 @@ function add(args) {
208
250
  console.log(` Run manually: claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp`);
209
251
  }
210
252
 
211
- console.log(`\n5 file(s) installed to .claude/rules/mdma/\n`);
253
+ const totalFiles = CORE_FILES.length + 2 + skillsCount + subagentsCount; // core + workflow + git + skills + subagents
254
+ console.log(`\n${totalFiles} file(s) installed to .claude/\n`);
212
255
  }
213
256
 
214
257
  function main() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mdma-cli",
3
- "version": "4.3.0",
3
+ "version": "4.5.0",
4
4
  "description": "Rules opinionated pour agents de code",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -10,7 +10,7 @@
10
10
  },
11
11
  "author": "privaloops",
12
12
  "scripts": {
13
- "test": "node bin/init.js add"
13
+ "test": "node tests/install.test.js"
14
14
  },
15
15
  "bin": {
16
16
  "mdma-cli": "bin/init.js"
@@ -10,9 +10,21 @@ Utiliser le modèle approprié selon la complexité de la tâche pour optimiser
10
10
  | Exploration de code, recherche | `sonnet` | Bon équilibre |
11
11
  | Implémentation, review, architecture | `opus` | Raisonnement complexe |
12
12
 
13
- ## Syntaxe
13
+ ## Application automatique
14
14
 
15
- Spécifier le modèle dans la demande si besoin :
15
+ Les skills et subagents mdma appliquent cette logique automatiquement :
16
+
17
+ | Skill/Subagent | Modèle | Raison |
18
+ |----------------|--------|--------|
19
+ | `/test` | `haiku` | Exécution de commandes |
20
+ | `review-lint` | `haiku` | Exécution d'outils, pas d'analyse |
21
+ | `review-bundle` | `haiku` | Lecture de métriques |
22
+ | `review-security` | `sonnet` | Analyse des deps, patterns connus |
23
+ | `review-best-practices` | `opus` | Raisonnement sur le code, contexte |
24
+
25
+ ## Tâches ad-hoc
26
+
27
+ Pour les tâches hors skills, spécifier le modèle si besoin :
16
28
  - "Lance les tests avec haiku"
17
29
  - "Explore le code avec sonnet"
18
30
 
@@ -0,0 +1,100 @@
1
+ ---
2
+ name: master-plan
3
+ description: Crée un plan de projet structuré (MASTER-PLAN.md) via questions itératives
4
+ allowed-tools: Read, Glob, Grep, Bash, Write, AskUserQuestion
5
+ model: opus
6
+ ---
7
+
8
+ # Master Plan
9
+
10
+ Génère un plan de projet complet et structuré via un processus itératif de questions/réponses.
11
+
12
+ ## Output
13
+
14
+ Fichier `MASTER-PLAN.md` à la racine du projet.
15
+
16
+ ## Process
17
+
18
+ ### Phase 1 : Comprendre le projet
19
+
20
+ Pose ces questions à l'utilisateur **une par une** (utilise AskUserQuestion avec réponses ouvertes) :
21
+
22
+ #### Question 1 : Nature et contexte
23
+ > "Décris le projet en quelques phrases : qu'est-ce que c'est, pour qui, dans quel contexte ?"
24
+
25
+ #### Question 2 : Objectif principal
26
+ > "Quel est l'objectif principal de ce projet ? Quel problème résout-il ?"
27
+
28
+ #### Question 3 : Livrables prioritaires
29
+ > "Quels sont les prochains livrables concrets que tu veux atteindre ?"
30
+
31
+ #### Question 4 : Contraintes
32
+ > "Y a-t-il des contraintes particulières ? (deadline, stack imposée, dépendances, etc.)"
33
+
34
+ **Note** : Utilise des questions ouvertes. L'utilisateur répond librement. Si une réponse n'est pas claire, demande des précisions.
35
+
36
+ ### Phase 2 : Explorer le codebase (si existant)
37
+
38
+ Si du code existe déjà :
39
+ 1. Analyse la structure des dossiers
40
+ 2. Identifie les technologies utilisées (package.json, Gemfile, go.mod, etc.)
41
+ 3. Compte les fichiers et lignes de code
42
+ 4. Identifie les dépendances principales
43
+ 5. Résume l'état actuel à l'utilisateur
44
+
45
+ ### Phase 3 : Proposer une structure de plan
46
+
47
+ Avant de générer le fichier, propose la structure des phases à l'utilisateur :
48
+
49
+ > "Voici les phases que je propose :
50
+ > - Phase 1 : [nom] - [description courte]
51
+ > - Phase 2 : [nom] - [description courte]
52
+ > - ...
53
+ >
54
+ > Tu valides ? Tu veux ajouter/retirer/modifier des phases ?"
55
+
56
+ Attends validation avant de générer.
57
+
58
+ ### Phase 4 : Générer le plan
59
+
60
+ Structure du fichier `MASTER-PLAN.md` :
61
+
62
+ ```markdown
63
+ # Plan de Projet - [Nom du projet]
64
+
65
+ > **Projet** : [description courte]
66
+ > **Contexte** : [contexte]
67
+ > **Objectif** : [objectif principal]
68
+ > **Date** : [date de création]
69
+
70
+ ---
71
+
72
+ ## Table des matières
73
+
74
+ 1. [Vue d'ensemble](#1-vue-densemble)
75
+ 2. [État actuel](#2-état-actuel)
76
+ 3. [Architecture cible](#3-architecture-cible)
77
+ 4. [Phases d'implémentation](#4-phases-dimplémentation)
78
+ 5. [Stratégie de tests](#5-stratégie-de-tests)
79
+ 6. [Critères d'acceptation](#6-critères-dacceptation)
80
+ 7. [Risques et mitigations](#7-risques-et-mitigations)
81
+ 8. [Conventions](#8-conventions)
82
+
83
+ [... contenu basé sur les réponses de l'utilisateur ...]
84
+ ```
85
+
86
+ ### Phase 5 : Créer les issues (optionnel)
87
+
88
+ Demande à l'utilisateur :
89
+ > "Veux-tu que je crée les issues GitHub pour chaque phase ?"
90
+
91
+ Si oui et que le projet utilise GitHub :
92
+ 1. Crée une issue pour chaque phase
93
+ 2. Ajoute les tâches et critères d'acceptation
94
+
95
+ ## Principes
96
+
97
+ - **Questions ouvertes** : laisse l'utilisateur s'exprimer, ne pas imposer des choix
98
+ - **Itératif** : plusieurs allers-retours, valider chaque étape
99
+ - **Pas d'invention** : ne pas ajouter de features/phases non demandées
100
+ - **STOP fréquents** : valider avant de générer, valider avant de créer les issues
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: review
3
+ description: Analyse qualité du code avant les tests (best practices, sécurité, lint, bundle)
4
+ allowed-tools: Bash, Read, Grep, Glob, Task
5
+ ---
6
+
7
+ # Review
8
+
9
+ Analyse qualité du code modifié via 4 subagents parallèles.
10
+
11
+ ## Contexte à récupérer
12
+
13
+ ```bash
14
+ # Fichiers modifiés
15
+ git diff --name-only HEAD~1 2>/dev/null || git diff --name-only --cached
16
+ ```
17
+
18
+ ## Détection du projet
19
+
20
+ Avant de lancer les subagents, détecte le contexte :
21
+
22
+ | Fichier | Type projet | Outils disponibles |
23
+ |---------|-------------|-------------------|
24
+ | `package.json` | Node.js | npm audit, eslint, prettier |
25
+ | `requirements.txt` / `pyproject.toml` | Python | pip-audit, ruff, black |
26
+ | `go.mod` | Go | govulncheck, golint |
27
+ | `Gemfile` | Ruby | bundle audit, rubocop |
28
+ | `Cargo.toml` | Rust | cargo audit, clippy |
29
+
30
+ ## Subagents à lancer
31
+
32
+ Lance les subagents **en parallèle** avec `run_in_background: true` :
33
+
34
+ 1. **review-best-practices** (toujours)
35
+ - Modèle : opus
36
+ - Analyse : patterns, DRY, KISS, conventions
37
+
38
+ 2. **review-security** (si gestionnaire de deps détecté)
39
+ - Modèle : sonnet
40
+ - Analyse : nouvelles deps, vulnérabilités connues
41
+
42
+ 3. **review-lint** (si linter configuré)
43
+ - Modèle : haiku
44
+ - Analyse : erreurs lint, formatting
45
+
46
+ 4. **review-bundle** (si bundler détecté : webpack, vite, esbuild)
47
+ - Modèle : haiku
48
+ - Analyse : impact sur le bundle size
49
+
50
+ ## Agrégation
51
+
52
+ Une fois tous les subagents terminés :
53
+
54
+ 1. Récupère les résultats via `TaskOutput`
55
+ 2. Agrège dans un rapport unifié :
56
+
57
+ ```markdown
58
+ ## Rapport Review
59
+
60
+ ### Best Practices
61
+ [résultats review-best-practices]
62
+
63
+ ### Sécurité
64
+ [résultats review-security ou "N/A - pas de gestionnaire de deps"]
65
+
66
+ ### Lint
67
+ [résultats review-lint ou "N/A - pas de linter configuré"]
68
+
69
+ ### Bundle
70
+ [résultats review-bundle ou "N/A - pas de bundler"]
71
+
72
+ ### Actions requises
73
+ - [ ] Liste des corrections à faire
74
+ ```
75
+
76
+ 3. Si problèmes critiques détectés → **STOP** → demande correction avant de continuer
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: test
3
+ description: Exécute les tests du projet (détection automatique du runner)
4
+ allowed-tools: Bash, Read, Glob
5
+ model: haiku
6
+ ---
7
+
8
+ # Test
9
+
10
+ Exécute les tests du projet avec détection automatique du runner.
11
+
12
+ ## Détection du runner
13
+
14
+ | Fichier | Runner | Commande |
15
+ |---------|--------|----------|
16
+ | `package.json` | npm/yarn/pnpm | `npm test` ou script défini |
17
+ | `pytest.ini` / `pyproject.toml` (pytest) | pytest | `pytest` |
18
+ | `go.mod` | go test | `go test ./...` |
19
+ | `Gemfile` | rspec/minitest | `bundle exec rspec` ou `bundle exec rake test` |
20
+ | `Cargo.toml` | cargo | `cargo test` |
21
+ | `Makefile` (avec target test) | make | `make test` |
22
+
23
+ ### Priorité
24
+
25
+ 1. Vérifie d'abord `CLAUDE.md` pour une commande explicite
26
+ 2. Sinon, détecte selon le tableau ci-dessus
27
+ 3. Si aucune détection → **STOP** → demande la commande à l'utilisateur
28
+
29
+ ## Exécution
30
+
31
+ ```
32
+ 1. Lance la commande de test
33
+ 2. Si FAIL :
34
+ - Identifie LE test qui échoue
35
+ - Corrige CE test uniquement
36
+ - Relance la suite complète
37
+ - Max 5 itérations
38
+ 3. Si toujours FAIL après 5 itérations → **STOP** → demande quoi faire
39
+ 4. Si PASS → rapport de succès
40
+ ```
41
+
42
+ ## Rapport
43
+
44
+ ```markdown
45
+ ## Rapport Tests
46
+
47
+ - **Runner** : [runner détecté]
48
+ - **Commande** : [commande exécutée]
49
+ - **Résultat** : PASS / FAIL
50
+ - **Itérations** : X/5
51
+
52
+ ### Détails
53
+ [sortie des tests ou résumé]
54
+ ```
55
+
56
+ ## Notes
57
+
58
+ - Ne modifie PAS le code métier pour faire passer les tests
59
+ - Si un test échoue à cause d'un bug dans le code → signale-le, ne le masque pas
60
+ - Les tests de snapshot/baseline sont gérés par `/visual-test`
@@ -0,0 +1,69 @@
1
+ ---
2
+ name: review-best-practices
3
+ description: Analyse les best practices du code (patterns, DRY, KISS, conventions)
4
+ model: opus
5
+ allowed-tools: Read, Grep, Glob
6
+ ---
7
+
8
+ # Review Best Practices
9
+
10
+ Analyse le code modifié pour vérifier le respect des best practices.
11
+
12
+ ## Fichiers à analyser
13
+
14
+ Reçus en argument : liste des fichiers modifiés.
15
+
16
+ ## Critères d'analyse
17
+
18
+ ### 1. Patterns et conventions
19
+ - Cohérence avec le style existant du projet
20
+ - Nommage (variables, fonctions, classes)
21
+ - Structure du code
22
+
23
+ ### 2. DRY (Don't Repeat Yourself)
24
+ - Duplication de code
25
+ - Logique répétée qui pourrait être factorisée
26
+ - Copier-coller détectable
27
+
28
+ ### 3. KISS (Keep It Simple, Stupid)
29
+ - Over-engineering
30
+ - Abstractions prématurées
31
+ - Complexité inutile
32
+
33
+ ### 4. YAGNI (You Ain't Gonna Need It)
34
+ - Code mort ou inutilisé
35
+ - Features non demandées
36
+ - Configurations superflues
37
+
38
+ ### 5. Lisibilité
39
+ - Fonctions trop longues (> 50 lignes)
40
+ - Nesting excessif (> 3 niveaux)
41
+ - Manque de clarté
42
+
43
+ ## Output
44
+
45
+ ```markdown
46
+ ## Best Practices Review
47
+
48
+ ### Score global : X/10
49
+
50
+ ### Problèmes détectés
51
+
52
+ #### Critiques (bloquants)
53
+ - [fichier:ligne] Description du problème
54
+
55
+ #### Majeurs (à corriger)
56
+ - [fichier:ligne] Description du problème
57
+
58
+ #### Mineurs (suggestions)
59
+ - [fichier:ligne] Description du problème
60
+
61
+ ### Points positifs
62
+ - Liste des bonnes pratiques observées
63
+ ```
64
+
65
+ ## Notes
66
+
67
+ - Compare avec les conventions du projet (CLAUDE.md, .editorconfig, etc.)
68
+ - Ne suggère PAS de refactoring massif hors scope
69
+ - Focus sur les fichiers modifiés uniquement
@@ -0,0 +1,83 @@
1
+ ---
2
+ name: review-bundle
3
+ description: Analyse l'impact sur le bundle size (projets frontend)
4
+ model: haiku
5
+ allowed-tools: Bash, Read, Glob
6
+ ---
7
+
8
+ # Review Bundle
9
+
10
+ Analyse l'impact des modifications sur le bundle size.
11
+
12
+ ## Détection du bundler
13
+
14
+ | Fichier | Bundler | Outil d'analyse |
15
+ |---------|---------|-----------------|
16
+ | `webpack.config.*` | Webpack | `webpack --profile --json` |
17
+ | `vite.config.*` | Vite | `vite build --report` |
18
+ | `esbuild.*` / script esbuild | esbuild | `esbuild --metafile` |
19
+ | `rollup.config.*` | Rollup | `rollup --plugin visualizer` |
20
+ | `next.config.*` | Next.js | `next build` (affiche les sizes) |
21
+ | `nuxt.config.*` | Nuxt | `nuxt build --analyze` |
22
+
23
+ ## Vérifications
24
+
25
+ ### 1. Nouvelles dépendances
26
+
27
+ Pour chaque nouvelle dépendance dans package.json :
28
+ - Taille du package (bundlephobia.com)
29
+ - Tree-shaking supporté ?
30
+ - Alternatives plus légères ?
31
+
32
+ ### 2. Build analysis
33
+
34
+ Si possible, compare avant/après :
35
+ ```bash
36
+ # Avant (main branch)
37
+ git stash && npm run build && ls -la dist/
38
+
39
+ # Après (current)
40
+ git stash pop && npm run build && ls -la dist/
41
+ ```
42
+
43
+ ### 3. Imports
44
+
45
+ Vérifie les imports problématiques :
46
+ - Import de librairie entière vs named imports
47
+ - Dynamic imports manquants pour le code splitting
48
+ - Dépendances dupliquées
49
+
50
+ ## Output
51
+
52
+ ```markdown
53
+ ## Bundle Review
54
+
55
+ ### Bundler détecté
56
+ [bundler] avec config [fichier]
57
+
58
+ ### Nouvelles dépendances
59
+
60
+ | Package | Taille (min+gzip) | Tree-shakable | Impact estimé |
61
+ |---------|-------------------|---------------|---------------|
62
+ | lodash | 71kb | Non | CRITIQUE |
63
+ | date-fns | 13kb | Oui | OK |
64
+
65
+ ### Analyse des imports
66
+
67
+ #### Problèmes détectés
68
+ - [fichier:ligne] Import complet de [lib] - utiliser named imports
69
+
70
+ #### Suggestions
71
+ - Lazy load [composant] pour réduire le bundle initial
72
+
73
+ ### Impact estimé
74
+ - Bundle avant : ~Xkb
75
+ - Bundle après : ~Xkb
76
+ - Différence : +X% / -X%
77
+ ```
78
+
79
+ ## Notes
80
+
81
+ - Si pas de bundler détecté → "N/A - pas de bundler frontend"
82
+ - Ne bloque que si augmentation > 10% sans justification
83
+ - Suggère des alternatives mais ne les impose pas
@@ -0,0 +1,69 @@
1
+ ---
2
+ name: review-lint
3
+ description: Vérifie le lint et le formatting du code
4
+ model: haiku
5
+ allowed-tools: Bash, Read, Glob
6
+ ---
7
+
8
+ # Review Lint
9
+
10
+ Exécute les linters et formatters configurés sur les fichiers modifiés.
11
+
12
+ ## Détection des outils
13
+
14
+ | Fichier config | Outil | Commande |
15
+ |----------------|-------|----------|
16
+ | `.eslintrc*` / `eslint.config.*` | ESLint | `npx eslint [files]` |
17
+ | `.prettierrc*` | Prettier | `npx prettier --check [files]` |
18
+ | `pyproject.toml` (ruff) | Ruff | `ruff check [files]` |
19
+ | `.flake8` / `setup.cfg` | Flake8 | `flake8 [files]` |
20
+ | `.golangci.yml` | golangci-lint | `golangci-lint run [files]` |
21
+ | `.rubocop.yml` | RuboCop | `rubocop [files]` |
22
+ | `rustfmt.toml` | rustfmt | `cargo fmt --check` |
23
+ | `.editorconfig` | editorconfig-checker | `editorconfig-checker [files]` |
24
+
25
+ ## Workflow
26
+
27
+ ```
28
+ 1. Identifie les linters configurés dans le projet
29
+ 2. Exécute chaque linter sur les fichiers modifiés
30
+ 3. Collecte les erreurs et warnings
31
+ 4. Catégorise par sévérité
32
+ ```
33
+
34
+ ## Output
35
+
36
+ ```markdown
37
+ ## Lint Review
38
+
39
+ ### Outils détectés
40
+ - ESLint : oui/non
41
+ - Prettier : oui/non
42
+ - [autres]
43
+
44
+ ### Résultats
45
+
46
+ #### Erreurs (bloquantes)
47
+ - [fichier:ligne] [règle] Message
48
+
49
+ #### Warnings
50
+ - [fichier:ligne] [règle] Message
51
+
52
+ ### Commandes de fix automatique
53
+ ```bash
54
+ npx eslint --fix [files]
55
+ npx prettier --write [files]
56
+ ```
57
+
58
+ ### Résumé
59
+ - Erreurs : X
60
+ - Warnings : X
61
+ - Fichiers analysés : X
62
+ ```
63
+
64
+ ## Notes
65
+
66
+ - Si aucun linter configuré → signale "Aucun linter détecté"
67
+ - Les erreurs de lint sont bloquantes
68
+ - Les warnings sont informatifs
69
+ - Propose les commandes de fix quand disponibles
@@ -0,0 +1,89 @@
1
+ ---
2
+ name: review-security
3
+ description: Audit de sécurité des dépendances et du code
4
+ model: sonnet
5
+ allowed-tools: Bash, Read, Grep, Glob
6
+ ---
7
+
8
+ # Review Security
9
+
10
+ Analyse la sécurité des dépendances nouvellement ajoutées et du code.
11
+
12
+ ## 1. Audit des dépendances
13
+
14
+ ### Détection des nouvelles deps
15
+
16
+ ```bash
17
+ # Node.js
18
+ git diff HEAD~1 -- package.json | grep "^\+" | grep -v "^\+\+\+"
19
+
20
+ # Python
21
+ git diff HEAD~1 -- requirements.txt pyproject.toml | grep "^\+"
22
+
23
+ # Go
24
+ git diff HEAD~1 -- go.mod | grep "^\+"
25
+
26
+ # Ruby
27
+ git diff HEAD~1 -- Gemfile | grep "^\+"
28
+ ```
29
+
30
+ ### Outils d'audit
31
+
32
+ | Écosystème | Commande |
33
+ |------------|----------|
34
+ | Node.js | `npm audit` |
35
+ | Python | `pip-audit` ou `safety check` |
36
+ | Go | `govulncheck ./...` |
37
+ | Ruby | `bundle audit check` |
38
+ | Rust | `cargo audit` |
39
+
40
+ ### Vérifications manuelles
41
+
42
+ Pour chaque nouvelle dépendance :
43
+ 1. **Popularité** : nombre de téléchargements, stars GitHub
44
+ 2. **Maintenance** : dernier commit, issues ouvertes
45
+ 3. **Sécurité** : CVE connues, historique de vulnérabilités
46
+
47
+ ## 2. Analyse du code
48
+
49
+ ### Patterns à détecter
50
+
51
+ - Injection SQL : concaténation de strings dans les requêtes
52
+ - XSS : output non échappé
53
+ - Command injection : exec/spawn avec input utilisateur
54
+ - Path traversal : manipulation de chemins fichiers
55
+ - Secrets hardcodés : API keys, passwords dans le code
56
+ - Permissions trop larges : chmod 777, accès root
57
+
58
+ ## Output
59
+
60
+ ```markdown
61
+ ## Security Review
62
+
63
+ ### Dépendances
64
+
65
+ #### Nouvelles dépendances détectées
66
+ | Package | Version | Vulnérabilités | Popularité |
67
+ |---------|---------|----------------|------------|
68
+ | xxx | 1.0.0 | 0 | OK |
69
+
70
+ #### Audit automatique
71
+ [sortie de npm audit / pip-audit / etc.]
72
+
73
+ ### Code
74
+
75
+ #### Vulnérabilités potentielles
76
+ - [fichier:ligne] [CRITIQUE/MAJEUR/MINEUR] Description
77
+
78
+ #### Secrets détectés
79
+ - [fichier:ligne] Type de secret potentiel
80
+
81
+ ### Recommandations
82
+ - Liste des actions correctives
83
+ ```
84
+
85
+ ## Notes
86
+
87
+ - Les vulnérabilités critiques sont **bloquantes**
88
+ - Signale les faux positifs possibles
89
+ - Ne bloque pas sur les vulnérabilités low/info des deps transitives
@@ -24,25 +24,14 @@
24
24
  - Petits commits logiques (conventions dans `git.md`)
25
25
  - **STOP** → montre les modifications, attend validation
26
26
 
27
- ### 3. Test
28
- - Lance les tests (commande dans `CLAUDE.md`)
29
- - Si fail arrête et fixe CE test uniquement
30
- - Si le test passe relance la suite complète
31
- - Max 5 itérations
32
- - Si toujours fail → **STOP** → demande quoi faire
33
-
34
- #### 3.1 Tests visuels (obligatoire si applicable)
35
- - **Vérifie** si `.claude/rules/visual-test.md` existe
36
- - Si oui → exécute `/screenshot` et compare `current/` vs `baseline/`
37
- - Différence intentionnelle → mettre à jour `baseline/`
38
- - Régression détectée → **STOP** → corriger avant de continuer
39
-
40
- - Si tous les tests passent → **STOP** → attend validation
41
-
42
- ### 4. Review
43
- - Review ton propre code
44
- - Vérifie : sécurité, performance, lisibilité
45
- - Propose des améliorations si pertinent
27
+ ### 3. Review
28
+ - Exécute `/review`
29
+ - Corrige les problèmes critiques détectés
30
+ - **STOP** attend validation avant de passer aux tests
31
+
32
+ ### 4. Test
33
+ - Exécute `/test`
34
+ - Si fail persistant après 5 itérations → **STOP** → demande quoi faire
46
35
  - **STOP** → attend validation
47
36
 
48
37
  ### 5. Compound
@@ -12,7 +12,8 @@
12
12
  ### Variables globales (`.zshrc` ou `.bashrc`)
13
13
 
14
14
  ```bash
15
- export ARTE_ATLASSIAN_ROOT_URL="https://mycompany.atlassian.net" # ou URL on-premise
15
+ # IMPORTANT: URL racine SANS /jira/ à la fin, et SANS espace avant le =
16
+ export ARTE_ATLASSIAN_ROOT_URL="https://mycompany.atlassian.net"
16
17
  export ARTE_ATLASSIAN_USER_EMAIL="user@email.com"
17
18
  export ARTE_ATLASSIAN_API_TOKEN="your-api-token"
18
19
  ```
@@ -31,12 +32,37 @@ export ARTE_ATLASSIAN_PROJECT_NAME="PROJ"
31
32
 
32
33
  ### Utilisation API
33
34
 
35
+ **IMPORTANT** : Pour éviter les erreurs de caractères invisibles dans le terminal, toujours passer par un script temporaire :
36
+
34
37
  ```bash
35
- # Exemple de requête JIRA
38
+ # Récupérer un ticket
39
+ cat << 'SCRIPT' > /tmp/jira_req.sh
40
+ #!/bin/bash
36
41
  curl -s -u "$ARTE_ATLASSIAN_USER_EMAIL:$ARTE_ATLASSIAN_API_TOKEN" \
37
42
  "$ARTE_ATLASSIAN_ROOT_URL/rest/api/3/issue/PROJ-123"
43
+ SCRIPT
44
+ chmod +x /tmp/jira_req.sh && /tmp/jira_req.sh
45
+
46
+ # Recherche JQL (endpoint actuel, l'ancien /search est obsolète)
47
+ cat << 'SCRIPT' > /tmp/jira_req.sh
48
+ #!/bin/bash
49
+ curl -s -G -u "$ARTE_ATLASSIAN_USER_EMAIL:$ARTE_ATLASSIAN_API_TOKEN" \
50
+ --data-urlencode 'jql=project=PROJ AND fixVersion="1.0.0"' \
51
+ --data-urlencode 'fields=key,summary,status' \
52
+ "$ARTE_ATLASSIAN_ROOT_URL/rest/api/3/search/jql"
53
+ SCRIPT
54
+ chmod +x /tmp/jira_req.sh && /tmp/jira_req.sh
38
55
  ```
39
56
 
57
+ ### Troubleshooting
58
+
59
+ | Erreur | Cause | Solution |
60
+ |--------|-------|----------|
61
+ | `not found` au source | Espace avant `=` | `export VAR="value"` sans espace |
62
+ | `API a été supprimée` | Ancien endpoint | Utiliser `/rest/api/3/search/jql` |
63
+ | `401 Unauthorized` | Token invalide | Régénérer sur id.atlassian.com |
64
+ | `blank argument` | Caractères invisibles | Utiliser un script temporaire (voir exemples ci-dessus) |
65
+
40
66
  ### Fallback
41
67
 
42
68
  Si l'API REST échoue (erreurs réseau, permissions), utiliser le MCP Atlassian :
@@ -66,17 +92,14 @@ claude mcp add atlassian -- npx -y @anthropic/atlassian-mcp-server
66
92
  - Petits commits logiques (conventions dans `git.md`)
67
93
  - **STOP** → montre les modifications, attend validation
68
94
 
69
- ### 3. Test
70
- - Lance les tests (commande dans `CLAUDE.md`)
71
- - Si fail arrête et fixe CE test uniquement
72
- - Si le test passe relance la suite complète
73
- - Max 5 itérations
74
- - Si toujours fail → **STOP** → demande quoi faire
75
-
76
- ### 4. Review
77
- - Review ton propre code
78
- - Vérifie : sécurité, performance, lisibilité
79
- - Propose des améliorations si pertinent
95
+ ### 3. Review
96
+ - Exécute `/review`
97
+ - Corrige les problèmes critiques détectés
98
+ - **STOP** attend validation avant de passer aux tests
99
+
100
+ ### 4. Test
101
+ - Exécute `/test`
102
+ - Si fail persistant après 5 itérations → **STOP** → demande quoi faire
80
103
  - **STOP** → attend validation
81
104
 
82
105
  ### 5. Git
@@ -1,50 +0,0 @@
1
- # Best Practices
2
-
3
- ## Règle absolue
4
-
5
- > **Toujours coder selon les best practices reconnues** pour chaque langage, framework ou librairie utilisé.
6
-
7
- ## En cas de doute
8
-
9
- Si plusieurs approches sont reconnues comme "best practice" :
10
-
11
- 1. **STOP** - ne pas choisir arbitrairement
12
- 2. Lister les options avec leurs avantages/inconvénients
13
- 3. Demander à l'utilisateur quelle approche privilégier
14
-
15
- ## Sources de référence
16
-
17
- Par ordre de priorité :
18
- 1. Documentation officielle du langage/framework
19
- 2. Style guides officiels (Google, Airbnb, etc.)
20
- 3. Conventions établies dans le projet existant
21
-
22
- ## MCP recommandé
23
-
24
- Le MCP **context7** permet de récupérer la documentation officielle à jour directement dans le contexte.
25
-
26
- ### Configuration
27
-
28
- **mdma-cli** configure automatiquement context7 en scope user lors de `npx mdma-cli add`.
29
-
30
- Configuration manuelle si nécessaire :
31
-
32
- ```bash
33
- claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp
34
- ```
35
-
36
- > **Scope user** : context7 est disponible pour tous vos projets, sans polluer les `.mcp.json` individuels.
37
-
38
- ### Usage
39
-
40
- Inclure `use context7` dans le prompt pour que l'agent récupère la doc à jour :
41
- - "Implémente l'auth avec NextAuth, use context7"
42
- - "Ajoute la validation Zod, use context7"
43
-
44
- ### API Key (optionnel)
45
-
46
- Pour des rate limits plus élevés, obtenir une clé gratuite sur [context7.com/dashboard](https://context7.com/dashboard) :
47
-
48
- ```bash
49
- claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp --api-key YOUR_API_KEY
50
- ```
@@ -1,45 +0,0 @@
1
- # Workflow Git
2
-
3
- ## Règles absolues
4
-
5
- > **Anti-rationalisation** : Ces règles n'ont AUCUNE exception. "JAMAIS" signifie jamais.
6
- > "C'est juste du gitignore" ou "c'est un petit fix" ne justifie PAS de contourner les règles.
7
-
8
- 1. **JAMAIS push sur main**
9
- 2. **JAMAIS commit sans branche** `feature/` ou `fix/`
10
- 3. **JAMAIS merge sans PR**
11
- 4. **JAMAIS `git add -A`** : commiter uniquement les fichiers modifiés intentionnellement
12
-
13
- Si tu envisages de transgresser une règle → **STOP** → demande à l'utilisateur.
14
-
15
- ## Process
16
-
17
- ### Avant de coder
18
- 1. Demander à l'utilisateur s'il souhaite se baser sur `main/master` ou `develop/dev`
19
- 2. Synchroniser la branche de base choisie avec le remote
20
- 3. Si le projet utilise GitHub Issues, créer une issue (titre + description)
21
- 4. Créer une branche depuis la base choisie : `feature/xxx` ou `fix/xxx`
22
- 5. Checkout la nouvelle branche
23
-
24
- ### Commits
25
- - Convention : **conventional commits**
26
- - `feat:` nouvelle fonctionnalité
27
- - `fix:` correction de bug
28
- - `docs:` documentation
29
- - `refactor:` refactoring
30
- - `chore:` maintenance
31
- - `test:` ajout/modification de tests
32
- - Messages clairs et concis
33
- - Un commit = un changement logique
34
-
35
- ### Après validation
36
- 1. `git add <fichiers>` (pas -A)
37
- 2. `git commit -m "XXX: description"`. Remplacer XXX par le prefix de conventionnal commits qui correspond le mieux au sujet traité (voir ### Commits)
38
- 3. `git push -u origin <branche>`
39
- 4. `gh pr create --fill`
40
- 5. Attendre validation utilisateur
41
- 6. `gh pr merge --merge --delete-branch`
42
- 7. `git checkout <branche-base> && git pull`
43
-
44
- ### Tests
45
- Les tests **DOIVENT** passer avant merge.
@@ -1,19 +0,0 @@
1
- # Sélection des modèles
2
-
3
- Utiliser le modèle approprié selon la complexité de la tâche pour optimiser coûts et rapidité.
4
-
5
- ## Correspondance tâche/modèle
6
-
7
- | Tâche | Modèle | Justification |
8
- |-------|--------|---------------|
9
- | Tests, build, lint | `haiku` | Exécution simple, pas de raisonnement |
10
- | Exploration de code, recherche | `sonnet` | Bon équilibre |
11
- | Implémentation, review, architecture | `opus` | Raisonnement complexe |
12
-
13
- ## Syntaxe
14
-
15
- Spécifier le modèle dans la demande si besoin :
16
- - "Lance les tests avec haiku"
17
- - "Explore le code avec sonnet"
18
-
19
- Par défaut, l'agent choisit le modèle selon le tableau ci-dessus.
@@ -1,42 +0,0 @@
1
- # Style de réponse
2
-
3
- ## Profil
4
- - **Niveau** : Senior
5
- - **Style** : Détaillé
6
-
7
- ## Comment répondre
8
-
9
- - Réponses détaillées avec contexte
10
- - Explique les choix importants
11
- - Propose des alternatives quand pertinent
12
- - Va droit au but, pas de fioritures inutiles
13
-
14
- ## Autonomie
15
-
16
- - **Demande TOUJOURS avant d'agir**
17
- - Ne fais rien sans validation explicite
18
- - Expose le plan, attend "ok", puis agis
19
-
20
- ## À éviter
21
-
22
- - **Obséquiosité** : pas de "Excellent choix!", "Très bonne question!", "C'est une super idée!"
23
- - Pas de compliments excessifs
24
- - Pas de formules de politesse superflues
25
- - Pas d'emojis (sauf si demandé)
26
-
27
- ## Principes de dev
28
-
29
- - **DRY** : Don't Repeat Yourself
30
- - **YAGNI** : You Ain't Gonna Need It
31
- - **KISS** : Keep It Simple, Stupid
32
-
33
- ## Contraintes
34
-
35
- ### Ne jamais faire
36
- - Commiter sur main directement
37
- - Over-engineering
38
- - Ajouter des features non demandées
39
-
40
- ### Toujours faire
41
- - Respecter le workflow défini dans `workflow.md` et `git.md`
42
- - Garder les solutions simples
@@ -1,65 +0,0 @@
1
- # Workflow Agent
2
-
3
- > **Note** : Ce workflow est agnostique. Pour les commandes spécifiques (test, build, lint), consulte `CLAUDE.md` qui fait référence pour ce projet.
4
-
5
- > **Règle de conformité** : Les règles définies ici et dans `git.md` sont ABSOLUES.
6
- > - Ne jamais rationaliser ("c'est juste un petit fix", "c'est mineur")
7
- > - Ne jamais faire d'exception, quelle que soit la taille ou nature du changement
8
- > - En cas de doute → STOP → demander à l'utilisateur
9
-
10
- ## Étapes obligatoires
11
-
12
- ### 0. Setup Git
13
- - Vérifie que tu n'es PAS sur `main` : `git branch --show-current`
14
- - Si sur `main` → créer une branche AVANT toute modification
15
- - Ne jamais rationaliser ("c'est juste un petit fix")
16
-
17
- ### 1. Plan
18
- - Explore le codebase (structure documentée dans `CLAUDE.md`)
19
- - Propose un plan d'implémentation
20
- - **STOP** → attend validation avant de coder
21
-
22
- ### 2. Code
23
- - Implémente selon le plan validé
24
- - Petits commits logiques (conventions dans `git.md`)
25
- - **STOP** → montre les modifications, attend validation
26
-
27
- ### 3. Test
28
- - Lance les tests (commande dans `CLAUDE.md`)
29
- - Si fail → arrête et fixe CE test uniquement
30
- - Si le test passe → relance la suite complète
31
- - Max 5 itérations
32
- - Si toujours fail → **STOP** → demande quoi faire
33
-
34
- #### 3.1 Tests visuels (obligatoire si applicable)
35
- - **Vérifie** si `.claude/rules/visual-test.md` existe
36
- - Si oui → exécute `/screenshot` et compare `current/` vs `baseline/`
37
- - Différence intentionnelle → mettre à jour `baseline/`
38
- - Régression détectée → **STOP** → corriger avant de continuer
39
-
40
- - Si tous les tests passent → **STOP** → attend validation
41
-
42
- ### 4. Review
43
- - Review ton propre code
44
- - Vérifie : sécurité, performance, lisibilité
45
- - Propose des améliorations si pertinent
46
- - **STOP** → attend validation
47
-
48
- ### 5. Compound
49
- - Consulte `CHANGELOG.md`, `DECISIONS.md`, `LEARNINGS.md` pour contexte
50
- - Apprends des feedbacks de cette session
51
- - Note les préférences exprimées pour les appliquer ensuite
52
-
53
- ### 6. Document
54
- - Met à jour `CHANGELOG.md` pour chaque feature/fix (obligatoire)
55
- - Met à jour `LEARNINGS.md` si apprentissage important
56
- - Met à jour `DECISIONS.md` si décision structurante
57
- - Si ces fichiers n'existent pas → les créer avec les formats standards :
58
- - CHANGELOG.md : [Keep a Changelog](https://keepachangelog.com/)
59
- - DECISIONS.md : format ADR (Architecture Decision Records)
60
- - LEARNINGS.md : format session avec contexte, décisions, leçons
61
- - **STOP** → attend validation
62
-
63
- ### 7. Git
64
- - Exécute le workflow défini dans `git.md`
65
- - **STOP** → attend validation avant de commiter