update
Mise à jour Codebloom — met à jour permissions, fichiers manquants, version. Sans confirmation.
Update — Mise à jour Codebloom
Tu exécutes la mise à jour du plugin Codebloom dans le projet courant. Pas de confirmation — chaque étape s'enchaîne automatiquement.
Principes
- Autonome — Pas de question, pas de confirmation, on exécute.
- Non-destructif — On ajoute ou met à jour, on ne supprime rien d'existant.
- Transparent — On affiche ce qu'on fait au fur et à mesure.
ÉTAPE 1 — Nouveautés
Lis le CHANGELOG.md du plugin (${CLAUDE_PLUGIN_ROOT}/CHANGELOG.md).
Cherche dans le CLAUDE.md du projet la ligne **Codebloom** suivie d'un numéro de version (version projet).
Extrais toutes les entrées ## [x.y.z] où x.y.z > version projet ET x.y.z <= version actuelle du plugin.
Affiche :
"🌸 Codebloom v[version projet] → v[version actuelle]
Nouveautés :
[contenu des entrées CHANGELOG extraites — garder les ### Added/Changed/Fixed/Removed et leurs listes, retirer les lignes plugin.json (bruit)]"
Si pas de version projet trouvée → afficher uniquement "🌸 Codebloom → v[version actuelle]" sans changelog.
ÉTAPE 2 — Permissions projet
Lis .claude/settings.json du projet.
- Si absent → créer avec le template complet (voir section PERMISSIONS ci-dessous)
- Si présent → mettre à jour :
- Écraser le marqueur
_codebloomavec la version actuelle - Écraser
permissionsavec le template (allow, deny, ask) - Ajouter
plansDirectory,attribution,$schemas'ils manquent - Préserver :
envet toute clé custom non-Codebloom
- Écraser le marqueur
Affiche : "✅ Permissions projet mises à jour"
ÉTAPE 2b — Cleanup settings.local.json
Claude Code lit .claude/settings.local.json en priorité sur .claude/settings.json. Un fichier local qui traîne écrase les permissions Codebloom et accumule des "toujours autoriser" parasites au fil des sessions (commandes zip inline, powershell, etc.).
Action (Node.js fs, jamais shell rm, cohérent avec hooks/wp-pack.js) :
- Vérifier si
.claude/settings.local.jsonexiste - Si oui → supprimer avec
fs.unlinkSync - Afficher : "🧹 settings.local.json supprimé (écrasait les permissions Codebloom)"
Si absent → silence.
Commande type :
node -e "const fs=require('fs'),p='.claude/settings.local.json';if(fs.existsSync(p)){fs.unlinkSync(p);console.log('removed')}"
ÉTAPE 3 — Settings global
Lis ~/.claude/settings.json.
- Si le global contient une liste
allow→ la supprimer (les permissions sont par projet)- Affiche : "✅
allowglobal supprimé (géré par projet)"
- Affiche : "✅
- Sinon → rien
ÉTAPE 4 — Fichiers manquants
Vérifie et crée silencieusement les fichiers recommandés absents :
TODO.mdabsent → créer depuis${CLAUDE_PLUGIN_ROOT}/references/TODO.mdCHANGELOG.mdabsent → créer depuis${CLAUDE_PLUGIN_ROOT}/references/CHANGELOG.md.claude/agents/absent → créer le dossier (avec.gitkeep)plans/absent → créer le dossier (avec.gitkeep)
Affiche les fichiers créés : "✅ Créé : [liste]" Si rien à créer → "✅ Fichiers projet à jour"
Ne PAS créer DESIGN_SYSTEM.md ni API_DOC.md (dépendent du projet).
ÉTAPE 4b — Cleanup agent-memory orphelin
Les anciens agents Codebloom utilisaient memory: project et stockaient dans .claude/agent-memory/<agent>/. Depuis la v1.18, aucun agent natif n'utilise ce mécanisme — la capitalisation passe par TODO.md. Les dossiers hérités sont donc orphelins.
Action (toujours via Node.js fs, jamais de shell rm, cohérent avec hooks/wp-pack.js) :
- Vérifier si
.claude/agent-memory/existe dans le projet - Si oui → lister les sous-dossiers
- Pour chaque sous-dossier dont le nom commence par
codebloom-→ supprimer avecfs.rmSync(path, { recursive: true, force: true }) - Si le dossier
.claude/agent-memory/est vide après cleanup → le supprimer aussi (fs.rmdirSync) - Ne jamais toucher aux sous-dossiers non préfixés
codebloom-— ce sont des agents custom de l'utilisateur, leur memory leur appartient
Commande type (à exécuter en un seul node -e) :
node -e "const fs=require('fs'),path=require('path'),d='.claude/agent-memory';if(!fs.existsSync(d))process.exit(0);const removed=[];for(const n of fs.readdirSync(d)){if(n.startsWith('codebloom-')){fs.rmSync(path.join(d,n),{recursive:true,force:true});removed.push(n)}}if(fs.readdirSync(d).length===0)fs.rmdirSync(d);console.log(removed.join(','))"
Affiche :
- Si suppressions → "🧹 Cleanup agent-memory : [liste des dossiers supprimés]"
- Si rien à supprimer → silence
ÉTAPE 5 — Version CLAUDE.md
Dans le CLAUDE.md du projet, cherche la ligne contenant **Codebloom** suivie d'un numéro de version.
- Si trouvée → remplacer par
- **Codebloom** : v[version actuelle] - Si absente → ajouter
- **Codebloom** : v[version actuelle]en fin de fichier
Affiche : "✅ CLAUDE.md → v[version actuelle]"
ÉTAPE 5b — Règles inviolables (bloc synchronisé)
Lis ${CLAUDE_PLUGIN_ROOT}/references/RULES.md — source de vérité du bloc. Extrais uniquement la section entre <!-- codebloom:rules:start vN --> et <!-- codebloom:rules:end --> (inclus). Le texte au-dessus du marqueur start est de la méta pour Claude qui lit le template — il ne doit JAMAIS être copié dans les projets.
Dans le CLAUDE.md du projet, cherche le bloc entre <!-- codebloom:rules:start et <!-- codebloom:rules:end --> (inclus).
Trois cas :
-
Bloc absent → insérer le bloc extrait juste avant la ligne
- **Codebloom** : v…(ou à la fin du fichier si cette ligne est absente). Affiche : "✅ Règles inviolables ajoutées (v[N])" -
Bloc présent mais version différente (ex: projet en
v1, template env2) → remplacer intégralement le bloc entre les marqueurs par la nouvelle version extraite du template. Ne pas toucher au reste du CLAUDE.md. Affiche : "✅ Règles inviolables mises à jour (v[ancien] → v[nouveau])" -
Bloc présent même version → ne rien faire. Affiche : "✅ Règles inviolables à jour (v[N])"
Important : ne jamais modifier le contenu à l'intérieur des marqueurs — toujours remplacer le bloc entier (marqueurs compris) par celui extrait du template. L'utilisateur peut éditer en dehors des marqueurs, c'est son fichier.
ÉTAPE 5c — Migration vers le format lean (une seule fois par projet)
Objectif : les anciens projets ont un CLAUDE.md verbeux (sections Stack, Structure arborescence, Dépendances tableau, Principes de travail, Design…). Le nouveau standard Codebloom suit les best practices officielles : lean, dense, <120 lignes, sections minimales. Cette étape propose la migration une seule fois, puis marque le projet comme migré.
Détection : chercher dans le CLAUDE.md du projet le marqueur <!-- codebloom:format:lean vN -->.
- Marqueur présent → projet déjà migré, passer à l'étape 6. Silence.
- Marqueur absent → proposer la migration (ci-dessous).
Principe : pas de fichier backup. Git est le filet de sécurité — si le résultat ne convient pas, un git checkout CLAUDE.md suffit. Si le projet n'est pas sous git, le signaler avant la migration.
Procédure de migration :
-
Audit préalable — compter :
wc -l CLAUDE.md, nombre de sections, présence des anciennes sections typiques (Stack, Structure, Dépendances clés, Principes de travail, Design). Si le fichier est déjà court (< 100 lignes) et ne contient aucune ancienne section → ajouter simplement le marqueurformat:lean v1après la description sans reformuler et passer à l'étape 6. Sinon → migration complète. -
Extraction du contenu précieux de l'ancien CLAUDE.md (en mémoire, avant le prompt) :
- Description (intro du fichier) → garder
- Commandes (section Commandes / Commands / Scripts) → garder, vérifier contre le manifest
- Règles importantes / Pièges / Gotchas → garder (contenu critique user)
- Architecture / décisions structurantes → garder en 2-5 bullets si présent
- Environment / env vars / setup → garder
- Code style (s'il diffère du standard) → garder
- Git workflow / branches / commits → garder si custom
- Fichiers de référence → transformer en imports
@FILE.md - Règles Codebloom inviolables → sera re-injectée par étape 5b
-
Génération du nouveau CLAUDE.md lean en mémoire, basé sur le template de
commands/setup.md(section FORMAT DU CLAUDE.md), rempli avec le contenu extrait ci-dessus. Sections sans contenu extrait → placeholder<!-- À compléter -->. Ajouter le marqueur<!-- codebloom:format:lean v1 -->juste après la description. -
Prompt unique à l'utilisateur (contenu prêt, rien d'écrit sur disque) :
🔄 **Migration CLAUDE.md vers le format lean** Avant : [X] lignes, [Y] sections Après : [X'] lignes, [Y'] sections (format lean, best practices Claude Code) Ce qui change : - Sections Stack / Structure / Dépendances retirées (Claude les devine) - Principes de travail retirés (déjà dans les skills + bloc rules) - Commandes, conventions, gotchas préservés - Filet de sécurité : `git checkout CLAUDE.md` si tu veux annuler Remplacer ? (oui / non / preview)Si le projet n'est pas sous git (pas de
.git), ajouter une ligne d'avertissement avant le prompt :⚠️ Pas de git détecté — pas de filet de sécurité. Fais une copie manuelle si tu veux garder l'ancien. -
Traitement de la réponse :
oui/y/go→ écrire le nouveauCLAUDE.md(écrase l'ancien). Affiche : "✅ CLAUDE.md migré (v[N'] lignes) —git checkout CLAUDE.mdpour annuler"non/n/skip→ ne rien réécrire, juste insérer le marqueur<!-- codebloom:format:lean v1 -->juste après la description dans le CLAUDE.md existant, pour ne plus proposer à chaque update. Affiche : "⏭️ Migration reportée — relance/codebloom:updatepour revenir dessus"preview/voir→ afficher le contenu complet du nouveau CLAUDE.md dans un bloc code, puis re-poser la questionRemplacer ? (oui / non / preview). La question inclut à nouveaupreviewpour permettre plusieurs re-lectures si besoin (l'utilisateur peut vouloir scroll dans le contenu). Sortie de la boucle uniquement surouiounon.
-
Important : cette migration se déclenche uniquement quand le marqueur
format:leanest absent. Une fois que l'utilisateur a accepté OU refusé la migration, le marqueur est présent → plus jamais proposée automatiquement. C'est une opération one-shot par projet. Pas de fichier.backup— on s'appuie sur git.
ÉTAPE 6 — Statusline
Lis ~/.claude/settings.json.
- Si
statusLineest absent → ajouter :
Affiche : "✅ Statusline activée""statusLine": { "type": "command", "command": "node ~/.claude/plugins/marketplaces/codebloom/hooks/statusline.js" } - Si présent → rien (config custom)
ÉTAPE 7 — Récap
"🌸 Codebloom v[version actuelle] — à jour !"
PERMISSIONS
Template .claude/settings.json :
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"_codebloom": "Permissions gérées par Codebloom v[VERSION] — /codebloom:update pour mettre à jour",
"env": {},
"plansDirectory": "./plans",
"permissions": {
"defaultMode": "acceptEdits",
"allow": [
"Read(*)", "Write(*)", "Edit(*)", "WebSearch", "mcp__ide__getDiagnostics",
"Bash(*)"
],
"deny": [
"Bash(rm -rf /)", "Bash(rm -rf ~)",
"Bash(: > *)", "Bash(> *)"
],
"ask": [
"Bash(rm *)",
"Bash(*; rm *)",
"Bash(*&& rm *)",
"Bash(*| rm *)",
"Bash(*-exec rm *)",
"Bash(*xargs rm *)",
"Bash(*$(rm *))",
"Bash(*`rm *`*)",
"Bash(*git push --force*)",
"Bash(*git push -f *)",
"Bash(*git reset --hard*)",
"Bash(*git branch -D *)",
"Bash(*git clean -f*)"
]
},
"attribution": {
"commit": "Co-Authored-By: Claude <[email protected]>",
"pr": "Generated with [Claude Code](https://claude.com/claude-code)"
}
}
[VERSION] = version actuelle du plugin au moment de l'exécution.
RÈGLES
- Aucune question — tout s'exécute d'un coup
- Non-destructif — on ne supprime jamais de contenu existant dans CLAUDE.md ou settings
- Transparent — chaque étape affiche ce qu'elle fait (une ligne par action)
- Idempotent — relancer
/updatesur un projet déjà à jour ne casse rien