# scan

> Recorre un árbol de carpetas, encuentra tus proyectos, detecta su stack y actividad, y los indexa en el cerebro global para que BMAD+ conozca todo tu portafolio.

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

Documentación de BMAD+ › [Referencia](https://bmad-plus.rochetta.fr/es/docs/reference/) › scan

`scan` responde a la pregunta «¿qué proyectos tengo y cuáles ya usan BMAD+?». Recorre una carpeta, reconoce las raíces de proyecto, adivina el stack, clasifica cada proyecto como activo, en pausa o archivado, y guarda una ficha pequeña por proyecto en el cerebro global, la carpeta de memoria personal compartida por todos tus proyectos (`~/.bmad-plus/brain`). Es para quien guarda muchos repositorios y quiere que un agente, normalmente Zecher, los conozca todos.

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

**En la terminal de tu proyecto**

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

**Opciones de scan**

| Opción | Argumento | Por defecto | Qué hace |
| --- | --- | --- | --- |
| `[path]` | ruta | carpeta actual | Carpeta que recorrer. Si se dan `[path]` y `-d`, gana `[path]`. |
| `-d, --directory <path>` | ruta | carpeta actual | Igual que `[path]`, como opción. |
| `--depth <n>` | entero > 0 | 4 | Cuántos niveles buscar por debajo de la carpeta recorrida. |
| `--active-days <n>` | entero > 0 | 30 | Un proyecto modificado hace menos de estos días es «active». |
| `--paused-days <n>` | entero > 0 | 180 | Modificado hace menos de estos días (sin ser activo) es «paused»; más antiguo, «archived». |
| `-y, --yes` | ninguno | desactivado | Indexa todos los proyectos encontrados sin preguntar. |
| `-l, --lang <code>` | en, fr, es, de, pt-br, ru, zh, he, ja, it | en | Se acepta por coherencia con los demás comandos; scan imprime en inglés. |

<a id="how-it-scans"></a>
## Cómo reconoce los proyectos

- Una carpeta es raíz de proyecto si contiene uno de estos archivos, comprobados en este orden: `package.json`, `Cargo.toml`, `pyproject.toml`, `requirements.txt`, `go.mod`, `composer.json`, `Gemfile`, `pom.xml`, `build.gradle`. El recorrido no desciende dentro de un proyecto cuya raíz ya encontró.
- Una carpeta por debajo del punto de partida que tiene un directorio `.git` pero ninguno de esos archivos también es un proyecto, con el stack «Unknown». La carpeta de partida solo cuenta por los archivos marcadores.
- El stack sale del marcador: Rust, Python, Go, PHP, Ruby, Java o Java/Kotlin, y para `package.json` uno de Next.js, Nuxt, React, Vue.js, Svelte, Express, Fastify, Electron, Tauri (comprobados en ese orden sobre dependencies y devDependencies), si no Node.js.
- Estas carpetas se omiten: `node_modules`, `.git`, `vendor`, `__pycache__`, `dist`, `build`, `.next`, `.nuxt`, `.svelte-kit`, `target`, `.venv`, `venv`, `.cache`, `.output`, `coverage`, `.turbo`, `.angular`, y las carpetas de sistema de Windows `$RECYCLE.BIN`, `System Volume Information`, `Windows`, `Program Files`, `Program Files (x86)`, `ProgramData`, `AppData`, `Recovery`, `PerfLogs`. También se omite cualquier otra carpeta cuyo nombre empiece por un punto. Las carpetas ilegibles se omiten en silencio.
- La actividad es la fecha de modificación de la propia carpeta del proyecto. Cambia cuando se añaden o quitan entradas directamente dentro, no cuando editas un archivo más abajo, así que un proyecto muy activo aún puede salir como «paused». Ajusta `--active-days` y `--paused-days` si las etiquetas no encajan con tu forma de trabajar.
- La columna BMAD+ muestra una marca cuando el proyecto tiene una carpeta `.agents` o `_bmad`.

<a id="reads-writes"></a>
## Qué lee y qué escribe

**Archivos que escribe scan**

| Ruta (bajo tu carpeta personal) | Contenido |
| --- | --- |
| `.bmad-plus/brain/projects/<hash>.yaml` | Una ficha por proyecto indexado: `path`, `name`, `hash`, `stack`, `status`, `bmad_installed`, `has_git`, `last_scanned` (una fecha). El hash de 8 caracteres sale de la ruta del proyecto, así que escanear dos veces el mismo proyecto actualiza su ficha en vez de añadir otra. |
| `.bmad-plus/brain/projects-index.md` | Una tabla Markdown de todas las fichas de la carpeta `projects/` (no solo las de esta pasada), reescrita tras cada scan que indexa algo. |

Los proyectos recorridos solo se leen, nunca se modifican. La ubicación del cerebro es fija, `~/.bmad-plus/brain`: scan no sigue la variable `BMAD_PLUS_BRAIN` ni una carpeta `_brain` de portafolio que `install` haya podido enlazar. No se hace ninguna petición de red.

<a id="exit-codes"></a>
## Códigos de salida

**Códigos de salida de scan**

| Código | Significado |
| --- | --- |
| 0 | Cualquier final normal: indexado, nada encontrado, cancelado, y también «Directory not found». |
| 1 | Se escapó un error inesperado (la CLI imprime `BMAD+: <message>`). scan no fija ningún otro código. |

> **Nota · No te fíes del código de salida en scripts** Una ruta incorrecta termina igualmente con código 0 tras imprimir el error. En un script, comprueba tú la carpeta antes de llamar a scan y pasa `--yes` para que nada espere una respuesta.

<a id="real-output"></a>
## Lo que ves

**Escaneo de una carpeta de trabajo con --yes (simulado)** (Simulado)

```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! 🧠
```

Transcripción ilustrativa, no capturada de una ejecución real. Fuente: Compuesto a partir de las plantillas de mensajes de tools/cli/commands/scan.js; colores, emojis y el marco de la biblioteca de prompts omitidos. Los nombres y las rutas son inventados.

Lee la tabla de izquierda a derecha: el número, la clase de actividad, si BMAD+ está instalado, el stack detectado, el nombre del proyecto (el de `package.json` si lo hay, si no el de la carpeta, cortado a 20 caracteres) y la ruta (cortada a sus últimos 37 caracteres si supera 40). Sin `--yes`, scan pregunta: indexarlo todo, elegir proyectos de una lista, u omitir.

<a id="errors"></a>
## Errores y qué hacer

**Mensajes de scan**

| Mensaje | Causa | Qué hacer |
| --- | --- | --- |
| `Directory not found: <path>` y luego `Scan failed.` | La carpeta no existe. El código de salida sigue siendo 0. | Corrige la ruta. |
| `Invalid --depth "<v>", defaulting to 4` (igual para `--active-days`, por defecto 30, y `--paused-days`, por defecto 180) | El valor no es un entero positivo; se usa el valor por defecto y el escaneo continúa. | Pasa un número entero mayor que cero. |
| `No projects found.` y luego `Try scanning a different directory or increasing --depth` | No hay archivo marcador ni carpeta `.git` dentro de la profundidad, o todo estaba en una carpeta omitida. | Escanea la carpeta superior, o sube `--depth`. |
| `Scan cancelled.` | Elegiste «Skip» o cancelaste una pregunta. No se escribió nada. | Ejecuta de nuevo y elige «Index all» o selecciona proyectos. |

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

<a id="example-cli-scan-index-portfolio"></a>
### Indexar una carpeta de trabajo y encontrar los proyectos sin BMAD+

Guardas una docena de repositorios bajo una misma carpeta y quieres la lista de los activos donde BMAD+ no está instalado.

**En tu asistente de IA**

```text
Ejecuta `npx bmad-plus scan ~/work --yes`. Luego lee ~/.bmad-plus/brain/projects-index.md y lista los proyectos cuyo estado es active y cuya columna BMAD+ está vacía.
```

**Lo que deberías obtener** El comando imprime la leyenda y la tabla, escribe una ficha `<hash>.yaml` por proyecto y reescribe `projects-index.md`. El asistente lee esa tabla (columnas Status, Name, Stack, BMAD+, Path; una marca significa instalado, un punto no instalado) y devuelve las filas activas con un punto. El índice abarca todas las fichas del cerebro, así que también puede citar proyectos de escaneos o instalaciones anteriores.

<a id="example-cli-scan-zecher"></a>
### Dejar que Zecher escanee con tu aprobación proyecto a proyecto

Requiere el pack memory. Es el flujo de escaneo propio del agente, que te pregunta por cada proyecto, no el comando de arriba.

**En tu asistente de IA**

```text
Zecher, escanea los proyectos en ~/work.
```

**Lo que deberías obtener** Zecher recorre la carpeta, muestra una tabla (proyecto, stack, estado, BMAD+, última modificación) y pregunta por cada proyecto: confirmar, editar, omitir o instalar allí BMAD+. Solo los proyectos confirmados se escriben en `~/.bmad-plus/brain/projects/<hash>.yaml`, se actualiza el índice y Zecher informa de cuántos se indexaron, nuevos y actualizados.

**Véase también**

- [memory: leer el cerebro que llena scan](https://bmad-plus.rochetta.fr/es/docs/reference/cli-memory/)
- [install: añadir BMAD+ a un proyecto hallado por scan](https://bmad-plus.rochetta.fr/es/docs/reference/cli-install/)
- [autoconfig: arrancar un solo proyecto](https://bmad-plus.rochetta.fr/es/docs/reference/cli-autoconfig/)
- [Visión general de la CLI](https://bmad-plus.rochetta.fr/es/docs/reference/cli-overview/)

[Documentación de BMAD+](https://bmad-plus.rochetta.fr/es/docs/) · [Referencia](https://bmad-plus.rochetta.fr/es/docs/reference/)

[Código en GitHub](https://github.com/lrochetta/BMAD-PLUS)
