# scan

> Parcourez une arborescence, trouvez vos projets, détectez leur pile et leur activité, puis indexez-les dans le cerveau global pour que BMAD+ connaisse tout votre portefeuille.

Canonical: https://bmad-plus.rochetta.fr/fr/docs/reference/cli-scan/
Language: fr
BMAD+ version: 0.23.1
Documentation reviewed: 2026-10-19
Author: Laurent Rochetta
License: MIT

Documentation BMAD+ › [Référence](https://bmad-plus.rochetta.fr/fr/docs/reference/) › scan

`scan` répond à la question « quels projets ai-je, et lesquels utilisent déjà BMAD+ ? ». Elle parcourt un dossier, reconnaît les racines de projet, devine la pile, classe chaque projet en actif, en pause ou archivé, et enregistre une petite fiche par projet dans le cerveau global, le dossier de mémoire personnel partagé par tous vos projets (`~/.bmad-plus/brain`). Elle sert à qui garde beaucoup de dépôts et veut qu’un agent, en général Zecher, les connaisse tous.

<a id="synopsis"></a>
## Synopsis

**Dans le terminal de votre projet**

```sh
npx bmad-plus scan [path] [-d <path>] [--depth <n>] [--active-days <n>] [--paused-days <n>] [-y] [-l <code>]
```

**Options de scan**

| Option | Argument | Défaut | Effet |
| --- | --- | --- | --- |
| `[path]` | chemin | dossier courant | Dossier à parcourir. Si `[path]` et `-d` sont donnés, `[path]` l’emporte. |
| `-d, --directory <path>` | chemin | dossier courant | Identique à `[path]`, sous forme d’option. |
| `--depth <n>` | entier > 0 | 4 | Nombre de niveaux à explorer sous le dossier parcouru. |
| `--active-days <n>` | entier > 0 | 30 | Un projet modifié il y a moins de ce nombre de jours est « active ». |
| `--paused-days <n>` | entier > 0 | 180 | Modifié il y a moins de ce nombre de jours (sans être actif), il est « paused » ; plus ancien, « archived ». |
| `-y, --yes` | aucun | désactivé | Indexe tous les projets trouvés sans demander. |
| `-l, --lang <code>` | en, fr, es, de, pt-br, ru, zh, he, ja, it | en | Acceptée par cohérence avec les autres commandes ; scan affiche en anglais. |

<a id="how-it-scans"></a>
## Comment elle reconnaît les projets

- Un dossier est une racine de projet s’il contient l’un de ces fichiers, testés dans cet ordre : `package.json`, `Cargo.toml`, `pyproject.toml`, `requirements.txt`, `go.mod`, `composer.json`, `Gemfile`, `pom.xml`, `build.gradle`. Le parcours ne descend pas dans un projet dont il a trouvé la racine.
- Un dossier situé sous le point de départ qui a un dossier `.git` mais aucun de ces fichiers est aussi un projet, avec la pile « Unknown ». Le dossier de départ lui-même ne compte que par les fichiers marqueurs.
- La pile vient du marqueur : Rust, Python, Go, PHP, Ruby, Java ou Java/Kotlin, et pour `package.json` l’un de Next.js, Nuxt, React, Vue.js, Svelte, Express, Fastify, Electron, Tauri (testés dans cet ordre sur dependencies et devDependencies), sinon Node.js.
- Ces dossiers sont ignorés : `node_modules`, `.git`, `vendor`, `__pycache__`, `dist`, `build`, `.next`, `.nuxt`, `.svelte-kit`, `target`, `.venv`, `venv`, `.cache`, `.output`, `coverage`, `.turbo`, `.angular`, ainsi que les dossiers système Windows `$RECYCLE.BIN`, `System Volume Information`, `Windows`, `Program Files`, `Program Files (x86)`, `ProgramData`, `AppData`, `Recovery`, `PerfLogs`. Tout autre dossier dont le nom commence par un point l’est aussi. Les dossiers illisibles sont ignorés sans bruit.
- L’activité est la date de modification du dossier du projet lui-même. Elle change quand des entrées sont ajoutées ou retirées directement dedans, pas quand vous éditez un fichier plus profond : un projet très actif peut donc apparaître « paused ». Ajustez `--active-days` et `--paused-days` si les étiquettes ne correspondent pas à votre façon de travailler.
- La colonne BMAD+ affiche une coche quand le projet a un dossier `.agents` ou `_bmad`.

<a id="reads-writes"></a>
## Ce qu’elle lit et écrit

**Fichiers écrits par scan**

| Chemin (sous votre dossier personnel) | Contenu |
| --- | --- |
| `.bmad-plus/brain/projects/<hash>.yaml` | Une fiche par projet indexé : `path`, `name`, `hash`, `stack`, `status`, `bmad_installed`, `has_git`, `last_scanned` (une date). Le hash de 8 caractères vient du chemin du projet : scanner deux fois le même projet met sa fiche à jour au lieu d’en ajouter une seconde. |
| `.bmad-plus/brain/projects-index.md` | Un tableau Markdown de toutes les fiches du dossier `projects/` (pas seulement celles de ce passage), réécrit après chaque scan qui indexe quelque chose. |

Les projets parcourus ne sont que lus, jamais modifiés. L’emplacement du cerveau est fixe, `~/.bmad-plus/brain` : scan ne suit ni la variable `BMAD_PLUS_BRAIN` ni un dossier `_brain` de portefeuille que `install` aurait pu lier. Aucune requête réseau n’est faite.

<a id="exit-codes"></a>
## Codes de sortie

**Codes de sortie de scan**

| Code | Signification |
| --- | --- |
| 0 | Toute fin normale : indexé, rien trouvé, annulé, et aussi « Directory not found ». |
| 1 | Une erreur inattendue s’est échappée (la CLI affiche `BMAD+: <message>`). scan ne fixe aucun autre code. |

> **Remarque · Ne comptez pas sur le code de sortie dans un script** Un mauvais chemin se termine quand même par le code 0 après l’erreur affichée. Dans un script, vérifiez le dossier vous-même avant d’appeler scan, et passez `--yes` pour que rien n’attende de réponse.

<a id="real-output"></a>
## Ce que vous voyez

**Scan d’un dossier de travail avec --yes (simulé)** (Simulé)

```text
$ npx bmad-plus scan ~/work --depth 3 --yes
BMAD+ Project Scanner
Found 3 project(s)
  Legend:
    ● active    modified < 30 days ago     (2 found)
    ◐ paused    modified 30–180 days ago   (1 found)
    ○ archived  modified > 180 days ago    (0 found)
  #   Status    BMAD+  Stack             Name                  Path
  ──────────────────────────────────────────────────────────────────────────────────────────
    1  ● active    ✓      Next.js           invoice-app           /home/me/work/invoice-app
    2  ● active    ·      Python            etl-jobs              /home/me/work/etl-jobs
    3  ◐ paused    ·      Unknown           notes-site            /home/me/work/notes-site
✅ 3 project(s) indexed in /home/me/.bmad-plus/brain/projects
📋 Project index updated: /home/me/.bmad-plus/brain/projects-index.md
Scan complete! 🧠
```

Transcription illustrative, non capturée lors d’une exécution réelle. Source: Composé à partir des modèles de messages de tools/cli/commands/scan.js ; couleurs, émojis et encadrement de la bibliothèque de consignes omis. Les noms et les chemins sont inventés.

Lisez le tableau de gauche à droite : le numéro, la classe d’activité, la présence de BMAD+, la pile détectée, le nom du projet (celui de `package.json` s’il y en a un, sinon le nom du dossier, coupé à 20 caractères) et le chemin (coupé à ses 37 derniers caractères s’il dépasse 40). Sans `--yes`, scan demande : tout indexer, choisir des projets dans une liste, ou passer.

<a id="errors"></a>
## Erreurs et que faire

**Messages de scan**

| Message | Cause | Que faire |
| --- | --- | --- |
| `Directory not found: <path>` puis `Scan failed.` | Le dossier n’existe pas. Le code de sortie reste 0. | Corrigez le chemin. |
| `Invalid --depth "<v>", defaulting to 4` (idem pour `--active-days`, défaut 30, et `--paused-days`, défaut 180) | La valeur n’est pas un entier positif ; la valeur par défaut est utilisée et le scan continue. | Donnez un nombre entier supérieur à zéro. |
| `No projects found.` puis `Try scanning a different directory or increasing --depth` | Aucun fichier marqueur ni dossier `.git` dans la profondeur donnée, ou tout se trouvait dans un dossier ignoré. | Parcourez le dossier parent, ou augmentez `--depth`. |
| `Scan cancelled.` | Vous avez choisi « Skip » ou annulé une question. Rien n’a été écrit. | Relancez et choisissez « Index all » ou sélectionnez des projets. |

<a id="examples"></a>
## Exemples

<a id="example-cli-scan-index-portfolio"></a>
### Indexer un dossier de travail et trouver les projets sans BMAD+

Vous gardez une douzaine de dépôts sous un même dossier et voulez la liste de ceux qui sont actifs et où BMAD+ n’est pas installé.

**Dans votre assistant IA**

```text
Lance `npx bmad-plus scan ~/work --yes`. Lis ensuite ~/.bmad-plus/brain/projects-index.md et liste les projets dont le statut est active et dont la colonne BMAD+ est vide.
```

**Ce que vous devriez obtenir** La commande affiche la légende et le tableau, écrit une fiche `<hash>.yaml` par projet et réécrit `projects-index.md`. L’assistant lit ce tableau (colonnes Status, Name, Stack, BMAD+, Path ; une coche signifie installé, un point non installé) et renvoie les lignes actives avec un point. L’index couvre toutes les fiches du cerveau : il peut donc aussi citer des projets de scans ou d’installations précédents.

<a id="example-cli-scan-zecher"></a>
### Laisser Zecher scanner avec votre accord projet par projet

Nécessite le pack memory. C’est le flux de scan propre à l’agent, qui vous interroge sur chaque projet, et non la commande ci-dessus.

**Dans votre assistant IA**

```text
Zecher, scanne les projets dans ~/work.
```

**Ce que vous devriez obtenir** Zecher parcourt le dossier, affiche un tableau (projet, pile, statut, BMAD+, dernière modification) et demande pour chaque projet : confirmer, modifier, passer, ou y installer BMAD+. Seuls les projets confirmés sont écrits dans `~/.bmad-plus/brain/projects/<hash>.yaml`, l’index est mis à jour, et Zecher indique combien ont été indexés, nouveaux et mis à jour.

**Voir aussi**

- [memory : lire le cerveau que scan remplit](https://bmad-plus.rochetta.fr/fr/docs/reference/cli-memory/)
- [install : ajouter BMAD+ à un projet trouvé par scan](https://bmad-plus.rochetta.fr/fr/docs/reference/cli-install/)
- [autoconfig : amorcer un seul projet](https://bmad-plus.rochetta.fr/fr/docs/reference/cli-autoconfig/)
- [Vue d’ensemble de la CLI](https://bmad-plus.rochetta.fr/fr/docs/reference/cli-overview/)

[Documentation BMAD+](https://bmad-plus.rochetta.fr/fr/docs/) · [Référence](https://bmad-plus.rochetta.fr/fr/docs/reference/)

[Code sur GitHub](https://github.com/lrochetta/BMAD-PLUS)
