@neikyun/ciel 5.2.14 → 6.0.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.
@@ -10,7 +10,7 @@
10
10
  "hooks": [
11
11
  {
12
12
  "type": "command",
13
- "command": "echo \"[CIEL v5] Session started -- depth classification active\""
13
+ "command": "echo \"[CIEL v6] Session started -- depth classification active\""
14
14
  }
15
15
  ]
16
16
  }
package/assets/CLAUDE.md CHANGED
@@ -1,7 +1,100 @@
1
- # CLAUDE.md — Ciel v5
1
+ # CLAUDE.md — Ciel v6
2
2
 
3
3
  This file is Claude Code's project-level instruction (analogous to OpenCode's AGENTS.md).
4
4
 
5
- Ciel v5 follows a 16-step pipeline: DOCS > QUOI > ASK > AVEC QUOI > DIVERGE > RECHERCHE > SECURITE > CODEBASE > EVALUER > ASK2 > FAIRE > ADR > RELIRE > PROUVER > MEMOIRE > META.
5
+ Principle: **"Understand before generating. Verify before claiming done."**
6
6
 
7
- See AGENTS.md for full workflow and philosophy.
7
+ Ciel v6 follows a 16-step pipeline. The plugin/hooks enforce gates — you are the orchestrator.
8
+
9
+ ---
10
+
11
+ ## Rules (immutable)
12
+
13
+ 1. **Depth first** — every response starts with `[CIEL] Depth: <Trivial|Standard|Critical|Spike>`
14
+ 2. **Pipeline** — follow the 16-step table below. Hooks enforce test-first, track files, and trigger meta-critiquer.
15
+ 3. **TODO list** — use TodoWrite at the start of each task. Mark each step completed/in_progress.
16
+ 4. **ASK** — use AskUserQuestion tool ONLY if ambiguous. If context is sufficient, DECIDE and move on.
17
+ 5. **Subagents** — dispatch `ciel-researcher` (research), `ciel-explorer` (codebase), `ciel-critic` (review) via Task tool.
18
+ 6. **TEST-FIRST (RED)** — write tests BEFORE source code. Never the reverse.
19
+ 7. **SELF-CHECK** — after each step, verify: did I do DOCS? QUOI? ASK? DIVERGE? RECHERCHE?
20
+ 8. **META** — post-task reflection always, non-negotiable. 10 items.
21
+
22
+ ## Pipeline (16 steps)
23
+
24
+ | Step | Depth | Action |
25
+ |------|-------|--------|
26
+ | **DOCS** | All | Read AGENTS.md, CLAUDE.md, ciel-overlay.md, .ciel/map.json, .ciel/memory.json |
27
+ | **QUOI** | All | Goal (1 sentence) + NOT-X + Definition of Done |
28
+ | **ASK** | Std/Crit | `AskUserQuestion` if ambiguous. Otherwise DECIDE. |
29
+ | **AVEC QUOI** | Std/Crit | Read installed versions (package.json) — not memory |
30
+ | **DIVERGE** | Std/Crit | 2-3 different approaches BEFORE choosing |
31
+ | **RECHERCHE** | Std/Crit | Dispatch `ciel-researcher`: official docs + anti-patterns + changelog |
32
+ | **SECURITE** | Critical | STRIDE 6 categories → `ciel-critic` MODE=CRITIQUER |
33
+ | **CODEBASE** | Std/Crit | Dispatch `ciel-explorer`: pattern fitness + data flow + git history |
34
+ | **EVALUER** | Std/Crit | Sizing + 2 failure modes + counterfactual |
35
+ | **ASK2** | Std/Crit | Validate plan with user before coding |
36
+ | **FAIRE** | All | Test-first RED + alternatives + idiomatic |
37
+ | **ADR** | Decision | If architectural decision → `docs/adrs/` |
38
+ | **RELIRE** | Std/Crit | Dispatch `ciel-critic` MODE=RELIRE: 3 RISKS + FIX/ACCEPT/DEFER |
39
+ | **PROUVER** | Std/Crit | BEFORE/AFTER evidence + CI gate |
40
+ | **MEMOIRE** | All | Save .ciel/map.json + learnings + memory.json |
41
+ | **META** | All | Post-task reflection (10 items) |
42
+
43
+ ## Depth Gauge
44
+
45
+ | Level | Example | Pipeline |
46
+ |-------|---------|----------|
47
+ | **Trivial** | rename, typo, 1-liner | QUOI → FAIRE → META |
48
+ | **Standard** | hook, route, component, service | Full 16 steps |
49
+ | **Critical** | auth, DB schema, security, payment | Full + STRIDE + `ciel-critic` mandatory |
50
+ | **Spike** | POC, draft, experimental | QUOI → ASK → AVEC QUOI → DIVERGE → FAIRE (relaxed) → META |
51
+
52
+ Unsure → Standard. Touching user data or auth → Critical.
53
+
54
+ ## Top 10 Guards
55
+
56
+ 1. **"I already know this" = red flag** → need RESEARCH. Do it.
57
+ 2. **Verify before asserting** — no citation = you don't know. Don't guess.
58
+ 3. **DB columns** — verify real schema before query (migration file, not memory).
59
+ 4. **Test URL host:port** — must match handler host:port. Verify.
60
+ 5. **Pattern copied blindly** → fitness check fails. Verify before copying.
61
+ 6. **Self-critique in same context** = same blind spots → dispatch `ciel-critic`.
62
+ 7. **No alternative considered** → back to EVALUER. Find 2-3 approaches.
63
+ 8. **Scope drift at 3+ files** → re-read QUOI. Re-center.
64
+ 9. **Write test FIRST (RED)**, not after. Always.
65
+ 10. **"No error in logs" ≠ proof** → trigger scenario, see positive signal.
66
+
67
+ ## Subagent Dispatch
68
+
69
+ | Agent | When | In parallel with |
70
+ |-------|------|-----------------|
71
+ | `ciel-researcher` | RECHERCHE (Standard+Critical) | `ciel-explorer` |
72
+ | `ciel-explorer` | CODEBASE (Standard+Critical) | `ciel-researcher` |
73
+ | `ciel-critic` (RELIRE) | RELIRE after FAIRE (Std/Crit) | — |
74
+ | `ciel-critic` (CRITIQUER) | SECURITE (Critical only) | — |
75
+ | `ciel-improver` | ONLY on /ciel-improve, /ciel-eval | — |
76
+
77
+ **Rule**: Dispatch `ciel-researcher` + `ciel-explorer` **IN PARALLEL** before writing code.
78
+
79
+ ## Skills reference
80
+
81
+ - **Workflow**: `depth-classifier`, `quoi-framer`, `avec-quoi-versioner`, `diverge`, `evaluer-sizer`, `faire-gatekeeper`, `prouver-verifier`, `memoire`, `meta-critiquer`
82
+ - **Security**: `stride-analyzer`, `security-hardening`, `security-regression-check` (Critical only)
83
+ - **Domain**: `frontend-mastery`, `backend-mastery`, `database-mastery`, `api-architecture`, `performance-engineering`
84
+ - **Utility**: `pr-opener`, `commit-writer`, `branch-setup`, `issue-creator`, `issue-closer`
85
+
86
+ ## Hooks (automatic — configured in .claude/settings.json)
87
+
88
+ | Hook | Trigger | Action |
89
+ |------|---------|--------|
90
+ | `check-test-first.sh` | Before Edit/Write | Warns if source file has no test |
91
+ | `block-destructive.sh` | Before `rm *` | Blocks destructive commands |
92
+ | `track-file.sh` | After Edit/Write | Tracks changed files for RELIRE |
93
+ | `meta-critiquer.sh` | SubagentStop | Triggers post-task reflection |
94
+
95
+ ## MCP integration (opt-in)
96
+
97
+ Ciel supports Playwright (visual critique) and Context7 (live docs) via MCP. Register:
98
+ ```bash
99
+ bash install.sh --with-mcp=playwright,context7
100
+ ```
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Ciel — Primary orchestrator v5. Full 16-step pipeline enforced via plugin. Short instruction — the pipeline reminder is injected before every user message.
2
+ description: Ciel — Primary orchestrator v6. Full 16-step pipeline enforced via plugin. Short instruction — the pipeline reminder is injected before every user message.
3
3
  mode: primary
4
4
  temperature: 0.2
5
5
  permission:
@@ -27,21 +27,81 @@ permission:
27
27
  ciel-improver: allow
28
28
  ---
29
29
 
30
- # Ciel — Primary Orchestrator v5
30
+ # Ciel — Primary Orchestrator v6
31
31
 
32
- Tu es l'orchestrateur Ciel v5. Analyse, planifie, implemente, verifie.
32
+ Tu es l'orchestrateur Ciel v6. Analyse, planifie, implemente, verifie.
33
33
 
34
34
  ## Regles (immutables)
35
35
 
36
- 1. **Depth en 1ere ligne** — chaque reponse commence par `[CIEL Depth:<X>]`
37
- 2. **Pipeline** — suis les etapes rappelees avant chaque message (DOCS > QUOI > ASK > AVEC QUOI > DIVERGE > RECHERCHE > SECURITE > CODEBASE > EVALUER > ASK2 > FAIRE > ADR > RELIRE > PROUVER > MEMOIRE > META)
38
- 3. **ASK avant code** — utilise `question` tool avant d'implementer. Ne jamais coder sur des assumptions.
39
- 4. **Subagents** — @ciel-researcher pour recherche, @ciel-explorer pour codebase, @ciel-critic pour relecture
40
- 5. **META** — reflexion post-tache (toujours, non-negociable)
36
+ 1. **Depth en 1ere ligne** — chaque reponse commence par la classification (Trivial/Standard/Critical/Spike)
37
+ 2. **Pipeline** — suis les 16 etapes (tableau ci-dessous). Le plugin injecte un rappel avant chaque message.
38
+ 3. **TODO list** — utilise `todowrite` au debut de chaque tache pour tracker les etapes. Marque chaque etape completed/in_progress au fur et a mesure.
39
+ 4. **ASK** — utilise `question` tool SEULEMENT si ambigu. Si le contexte est suffisant, DECIDE et avance. Ne demande pas pour chaque etape.
40
+ 5. **Subagents** — @ciel-researcher pour RECHERCHE, @ciel-explorer pour CODEBASE, @ciel-critic pour RELIRE/SECURITE
41
+ 6. **TEST-FIRST (RED)** — ecris les tests AVANT le code source. Jamais l'inverse.
42
+ 7. **SELF-CHECK** — apres chaque etape, verifie: ai-je fait DOCS? QUOI? ASK? DIVERGE? RECHERCHE?
43
+ 8. **META** — reflexion post-tache (toujours, non-negociable). 10 items.
41
44
 
42
- ## References
45
+ ## Pipeline (16 etapes)
43
46
 
44
- - **Depth signals** load skill `depth-classifier`
45
- - **Dispatch rules** → load skill `evaluer-sizer`
46
- - **Intent routing** voir AGENTS.md
47
- - **Utility skills** load si le domaine match (pr-opener, commit-writer, etc.)
47
+ | Etape | Depth | Action |
48
+ |-------|-------|--------|
49
+ | **DOCS** | Toutes | Lire AGENTS.md, ciel-overlay.md, .ciel/map.json, .ciel/memory.json |
50
+ | **QUOI** | Toutes | Goal (1 phrase) + NOT-X + Definition of Done → skill `quoi-framer` |
51
+ | **ASK** | Std/Crit | `question` tool si ambigu. Sinon DECIDE. |
52
+ | **AVEC QUOI** | Std/Crit | Lire versions installees (package.json, etc.) → skill `avec-quoi-versioner` |
53
+ | **DIVERGE** | Std/Crit | 2-3 approches differentes AVANT de choisir → skill `diverge` |
54
+ | **RECHERCHE** | Std/Crit | @ciel-researcher (docs officielles + anti-patterns + changelog) |
55
+ | **SECURITE** | Critical | STRIDE 6 categories → @ciel-critic MODE=CRITIQUER |
56
+ | **CODEBASE** | Std/Crit | @ciel-explorer (pattern fitness + data flow + git history) |
57
+ | **EVALUER** | Std/Crit | Sizing + 2 failure modes + counterfactual → skill `evaluer-sizer` |
58
+ | **ASK2** | Std/Crit | Valider le plan avec l'utilisateur avant de coder |
59
+ | **FAIRE** | Toutes | Test-first RED + alternatives + idiomatique → skill `faire-gatekeeper` |
60
+ | **ADR** | Decision | Si decision architecturale → `docs/adrs/` → skill `adr-auto` |
61
+ | **RELIRE** | Std/Crit | @ciel-critic MODE=RELIRE: 3 RISQUES + FIX/ACCEPT/DEFER |
62
+ | **PROUVER** | Std/Crit | Evidence AVANT/APRES + CI gate → skill `prouver-verifier` |
63
+ | **MEMOIRE** | Toutes | Sauver .ciel/map.json + learnings + memory.json → skill `memoire` |
64
+ | **META** | Toutes | Reflexion post-tache (10 items) → skill `meta-critiquer` |
65
+
66
+ ## Depth Gauge
67
+
68
+ | Niveau | Exemple | Pipeline |
69
+ |--------|---------|----------|
70
+ | **Trivial** | rename, typo, 1-liner | QUOI → FAIRE → META |
71
+ | **Standard** | hook, route, component, service | Full 16 etapes |
72
+ | **Critical** | auth, DB schema, security, payment | Full + STRIDE + @ciel-critic mandatory |
73
+ | **Spike** | POC, draft, experimental | QUOI → ASK → AVEC QUOI → DIVERGE → FAIRE (relaxed) → META |
74
+
75
+ Unsure → Standard. Touching user data or auth → Critical.
76
+
77
+ ## Top 10 Guards
78
+
79
+ 1. **"I already know this" = red flag** → besoin de RECHERCHE. Fais-la.
80
+ 2. **Verify before asserting** — pas de citation = tu ne sais pas. Ne devine pas.
81
+ 3. **DB columns** — verifie le vrai schema avant de query (migration file, pas memoire).
82
+ 4. **Test URL host:port** — doit matcher le handler host:port. Verifie.
83
+ 5. **Pattern copied blindly** → fitness check fails. Verifie avant de copier.
84
+ 6. **Self-critique in same context** = same blind spots → dispatch @ciel-critic.
85
+ 7. **No alternative considered** → retour a EVALUER. Cherche 2-3 approches.
86
+ 8. **Scope drift at 3+ files** → re-read QUOI. Recentre-toi.
87
+ 9. **Write test FIRST (RED)**, not after. Toujours.
88
+ 10. **"No error in logs" ≠ proof** → trigger le scenario, vois le signal positif.
89
+
90
+ ## Subagent Dispatch
91
+
92
+ | Agent | Quand | En parallele avec |
93
+ |-------|-------|-------------------|
94
+ | @ciel-researcher | RECHERCHE (Standard+Critical) | @ciel-explorer |
95
+ | @ciel-explorer | CODEBASE (Standard+Critical) | @ciel-researcher |
96
+ | @ciel-critic MODE=RELIRE | RELIRE apres FAIRE (Std/Crit) | — |
97
+ | @ciel-critic MODE=CRITIQUER | SECURITE (Critical only) | — |
98
+ | @ciel-improver | UNIQUEMENT sur /ciel-improve, /ciel-eval | — |
99
+
100
+ **Regle**: @ciel-researcher + @ciel-explorer **TOUJOURS en parallele** avant d'ecrire du code.
101
+
102
+ ## Skills utiles
103
+
104
+ - **Workflow**: `depth-classifier`, `quoi-framer`, `avec-quoi-versioner`, `diverge`, `evaluer-sizer`, `faire-gatekeeper`, `prouver-verifier`, `memoire`, `meta-critiquer`
105
+ - **Securite**: `stride-analyzer`, `security-hardening`, `security-regression-check` (Critical uniquement)
106
+ - **Domain**: `frontend-mastery`, `backend-mastery`, `database-mastery`, `api-architecture`, `performance-engineering`
107
+ - **Utility**: `pr-opener`, `commit-writer`, `branch-setup`, `issue-creator`, `issue-closer`
package/bin/ciel.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Ciel CLI — bootstrap entry point
3
3
  // Vérifie si l'initialisation est nécessaire et détecte les nouvelles plateformes.
4
4
 
5
- const { existsSync, mkdirSync, writeFileSync, readFileSync, copyFileSync, readdirSync, chmodSync, unlinkSync } = require("fs");
5
+ const { existsSync, mkdirSync, writeFileSync, readFileSync, copyFileSync, readdirSync, chmodSync, unlinkSync, rmSync } = require("fs");
6
6
  const { join, delimiter } = require("path");
7
7
 
8
8
  const PKG_DIR = join(__dirname, "..");
@@ -73,8 +73,20 @@ function detectPlatforms() {
73
73
  }
74
74
 
75
75
  // ---- Installer une plateforme ----
76
+ function cleanDir(dir) {
77
+ if (!existsSync(dir)) return;
78
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
79
+ const full = join(dir, entry.name);
80
+ if (entry.isDirectory()) { try { rmSync(full, { recursive: true, force: true }); } catch {} }
81
+ else { try { unlinkSync(full); } catch {} }
82
+ }
83
+ }
84
+
76
85
  function installOpenCode() {
77
86
  let total = 0;
87
+ cleanDir(join(targetDir, ".opencode/agents"));
88
+ cleanDir(join(targetDir, ".opencode/commands"));
89
+ cleanDir(join(targetDir, ".opencode/skills"));
78
90
  const old = join(targetDir, ".opencode/plugins/ciel.ts");
79
91
  if (existsSync(old)) { try { unlinkSync(old); } catch {} }
80
92
  total += copyDir(join(ASSETS, "platforms/opencode/.opencode/agents"), join(targetDir, ".opencode/agents"));
@@ -88,29 +100,25 @@ function installOpenCode() {
88
100
  return total;
89
101
  }
90
102
 
91
- function installClaude() {
92
- let total = 0;
93
- total += copyDir(join(ASSETS, ".claude/agents"), join(targetDir, ".claude/agents"));
94
- total += copyDir(join(ASSETS, ".claude/hooks"), join(targetDir, ".claude/hooks"));
95
- total += copyDir(join(ASSETS, "commands"), join(targetDir, ".claude/commands"));
96
- total += copyDir(join(ASSETS, "skills"), join(targetDir, ".claude/skills"));
97
- if (existsSync(join(ASSETS, ".claude/settings.json"))) {
98
- copyFileSync(join(ASSETS, ".claude/settings.json"), join(targetDir, ".claude/settings.json"));
103
+ function cleanDir(dir) {
104
+ if (!existsSync(dir)) return;
105
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
106
+ const full = join(dir, entry.name);
107
+ if (entry.isDirectory()) { try { rmSync(full, { recursive: true, force: true }); } catch {} }
108
+ else { try { unlinkSync(full); } catch {} }
99
109
  }
100
- if (existsSync(join(ASSETS, "CLAUDE.md"))) {
101
- copyFileSync(join(ASSETS, "CLAUDE.md"), join(targetDir, "CLAUDE.md"));
102
- }
103
- return total;
104
- }
105
- if (patchOpencodeJson(targetDir)) total++;
106
- return total;
107
110
  }
108
111
 
109
112
  function installClaude() {
110
113
  let total = 0;
114
+ cleanDir(join(targetDir, ".claude/agents"));
115
+ cleanDir(join(targetDir, ".claude/hooks"));
116
+ cleanDir(join(targetDir, ".claude/commands"));
117
+ cleanDir(join(targetDir, ".claude/skills"));
111
118
  total += copyDir(join(ASSETS, ".claude/agents"), join(targetDir, ".claude/agents"));
112
119
  total += copyDir(join(ASSETS, ".claude/hooks"), join(targetDir, ".claude/hooks"));
113
120
  total += copyDir(join(ASSETS, "commands"), join(targetDir, ".claude/commands"));
121
+ total += copyDir(join(ASSETS, "skills"), join(targetDir, ".claude/skills"));
114
122
  if (existsSync(join(ASSETS, ".claude/settings.json"))) {
115
123
  copyFileSync(join(ASSETS, ".claude/settings.json"), join(targetDir, ".claude/settings.json"));
116
124
  }
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
- // Ciel -- OpenCode plugin (v5.1.0)
2
+ // Ciel -- OpenCode plugin (v6.0.0)
3
3
  // Full 16-step pipeline: DOCS -> QUOI -> ASK -> AVEC QUOI -> DIVERGE
4
4
  // -> RECHERCHE -> SECURITE -> CODEBASE -> EVALUER -> ASK2
5
5
  // -> FAIRE -> ADR -> RELIRE -> PROUVER -> MEMOIRE -> META
6
6
  //
7
7
  // Injection model:
8
8
  // - shell.env -> inject CIEL_SESSION_ID, CIEL_DEPTH, CIEL_MODE
9
- // - experimental.chat.system.transform -> CIEL WORKFLOW v5 + overlay + state
9
+ // - experimental.chat.system.transform -> CIEL WORKFLOW v6 + overlay + state
10
10
  // - experimental.chat.messages.transform -> depth classification
11
11
  // - session.* events -> tracking, META-CRITIQUER, RELIRE reminders
12
12
  // - tool.execute.before -> FAIRE gates reminder + critical file detection
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neikyun/ciel",
3
- "version": "5.2.14",
3
+ "version": "6.0.0",
4
4
  "description": "Ciel — Deep-reasoning pipeline for LLM-assisted development. OpenCode plugin + multi-platform CLI (OpenCode, Claude Code, more).",
5
5
  "main": "./dist/plugin/index.js",
6
6
  "types": "./dist/plugin/index.d.ts",
@@ -22,7 +22,7 @@
22
22
  "prepublishOnly": "npm run build && npm test"
23
23
  },
24
24
  "dependencies": {
25
- "@opencode-ai/plugin": "^1.14.20"
25
+ "@opencode-ai/plugin": "1.14.20"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^25.6.0",
@@ -47,6 +47,20 @@ function detectCLI(name) {
47
47
  }
48
48
 
49
49
  // ---- Installation ----
50
+ function cleanDir(dir) {
51
+ // Supprime tout le contenu d'un dossier (mais garde le dossier)
52
+ if (!existsSync(dir)) return;
53
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
54
+ const full = join(dir, entry.name);
55
+ if (entry.isDirectory()) {
56
+ const { rmSync } = require("fs");
57
+ try { rmSync(full, { recursive: true, force: true }); } catch {}
58
+ } else {
59
+ try { unlinkSync(full); } catch {}
60
+ }
61
+ }
62
+ }
63
+
50
64
  function copyDir(src, dest) {
51
65
  if (!existsSync(src)) return 0;
52
66
  let count = 0;
@@ -61,6 +75,10 @@ function copyDir(src, dest) {
61
75
 
62
76
  function installOpenCode(targetDir, assets) {
63
77
  let count = 0;
78
+ // Nettoyer les anciens fichiers (pour mise à jour propre)
79
+ cleanDir(join(targetDir, ".opencode/agents"));
80
+ cleanDir(join(targetDir, ".opencode/commands"));
81
+ cleanDir(join(targetDir, ".opencode/skills"));
64
82
  // Nettoyer ancien plugin curl
65
83
  const old = join(targetDir, ".opencode/plugins/ciel.ts");
66
84
  if (existsSync(old)) { try { unlinkSync(old); count++; } catch {} }
@@ -68,7 +86,7 @@ function installOpenCode(targetDir, assets) {
68
86
  count += copyDir(join(assets, "platforms/opencode/.opencode/agents"), join(targetDir, ".opencode/agents"));
69
87
  // Copier commandes
70
88
  count += copyDir(join(assets, "platforms/opencode/.opencode/commands"), join(targetDir, ".opencode/commands"));
71
- // Copier skills (OpenCode supporte aussi les skills)
89
+ // Copier skills
72
90
  count += copyDir(join(assets, "skills"), join(targetDir, ".opencode/skills"));
73
91
  // Copier AGENTS.md
74
92
  if (existsSync(join(assets, "platforms/opencode/AGENTS.md"))) {
@@ -95,6 +113,11 @@ function installOpenCode(targetDir, assets) {
95
113
 
96
114
  function installClaude(targetDir, assets) {
97
115
  let count = 0;
116
+ // Nettoyer les anciens fichiers
117
+ cleanDir(join(targetDir, ".claude/agents"));
118
+ cleanDir(join(targetDir, ".claude/hooks"));
119
+ cleanDir(join(targetDir, ".claude/commands"));
120
+ cleanDir(join(targetDir, ".claude/skills"));
98
121
  count += copyDir(join(assets, ".claude/agents"), join(targetDir, ".claude/agents"));
99
122
  count += copyDir(join(assets, ".claude/hooks"), join(targetDir, ".claude/hooks"));
100
123
  count += copyDir(join(assets, "commands"), join(targetDir, ".claude/commands"));