Tu primer handbook real
Ocho pasos desde un repositorio que nunca has leído hasta un plan de cambios que puedes aplicar — con los checkpoints baratos en el lugar correcto.
Este es el ciclo completo sobre un repositorio real. Está escrito para seguirse en orden, y coloca a propósito las comprobaciones gratuitas antes que las caras.
alias handbook="node $(pwd)/packages/cli/dist/main.js"
export REPO=~/code/myrepo
export WORK=work/myrepoPaso 1 — Mira antes de saltar
handbook analyze --source $REPO --work $WORK{
"language": "multi",
"files": 412,
"functions": 3187,
"edgesKept": 9042,
"edgesDropped": 611,
"filesUnparsed": 3
}Esto es gratis y es tu prueba de humo. Sin LLM, sin clave, sin tokens.
Lee estos números antes de continuar
- ¿
filesmucho más bajo de lo que esperas? Se está saltando un lenguaje entero, o tu raíz de código fuente está mal. Revisa el log de escaneo con-v. - ¿filesmucho más alto? Estás analizandonode_modules,vendoro un directorio de build. Los habituales se saltan automáticamente; apunta--sourcea la raíz real del código fuente en lugar de a la raíz del repo si no es así. - ¿edgesDroppedenorme en relación conedgesKept? Normal en lenguajes dinámicos. Miraphase1/dropped-calls.json— cada llamada sin resolver está categorizada ahí, no oculta. - ¿filesUnparseddistinto de cero? Esos archivos aparecen con su motivo enphase1/scan-coverage.json. Los marcados comounreadableounparsableno aportan nada y no reciben página, así que un handbook construido ahora tendrá un agujero justo ahí — vale la pena arreglarlo antes de pagar por la prosa.
Corrige cualquiera de los puntos anteriores ahora. Cada problema aquí se convierte en un problema más caro después.
Paso 2 — Genera el handbook
Este es el paso que cuesta tokens. En un repositorio mediano, espera minutos.
Empieza barato:
handbook generate --source $REPO --work $WORKEso equivale a --detail brief y --synth-mode oneshot: una ficha corta por archivo y un
esqueleto de una sola pasada. Es la forma más rápida de ver si la forma del handbook es
la correcta.
Mira $WORK/phase2/skeleton.yaml. ¿La lista de etapas se parece a tu sistema? Si sí, sube
de nivel:
handbook generate --source $REPO --work $WORK \
--phase 2a --detail deep --resume--phase 2a --resume profundiza solo las fichas, saltándose los archivos que ya
tienen una completa. Conservas el esqueleto que ya validaste.
Si el esqueleto está mal, vuelve a ejecutar 2b con el bucle actor–crítico en su lugar:
handbook generate --source $REPO --work $WORK --phase 2b,2c,3 --synth-mode doctorEs reanudable, cancelable y con caché
Las fichas se escriben a medida que se completan. Ctrl-C es seguro. --resume retoma donde se detuvo,
--llm-cache hace que las re-ejecuciones sean casi gratis, y run-manifest.json registra cuánto costó en
tokens la última ejecución buena.
Paso 3 — Renderízalo
handbook render --work $WORK --title "MyRepo Handbook" \
--html --html-single --agent-site --llms-txtSin LLM. Ejecútalo tan a menudo como quieras — en CI, en cada commit.
Añade --source-base-url https://github.com/me/myrepo/blob/main para convertir cada ruta
de archivo del handbook en un enlace al archivo real. Sin él, la salida no contiene
ninguna URL externa, lo que importa en una base de código privada.
Abre $WORK/handbook/html/overview.html y léelo. Este es el momento de juzgar si el
handbook vale algo.
Paso 4 — Empaquétalo para tu agente
handbook skill --handbook $WORK/handbook --out skills/myrepo \
--name myrepo --project "MyRepo" \
--work $WORK --source $REPO \
--agent-dir $WORK/handbook/agent--work + --source juntos producen coverage.json: un hash de contenido por archivo.
Eso es lo que hace que la deriva del handbook sea detectable en lugar de
silenciosamente errónea más adelante.
--agent-dir incluye el índice para agentes y sus tablas de hechos, y le da al protocolo
de enrutamiento de la SKILL sus recetas de grep — de modo que el agente puede convertir el
nombre de un símbolo en path:startLine-endLine con un solo comando, en lugar de leer
prosa y adivinar.
Paso 5 — Valídalo
handbook validate --skill skills/myrepo --source $REPOComprueba la estructura, el contrato del frontmatter, la consistencia índice ↔ página de
etapa, y vuelve a hashear tu código fuente para informar de las páginas que se han quedado
atrás. Sale con código 2 en caso de fallo, así que este es el comando que debes
poner en CI.
Paso 6 — Planifica un cambio real
handbook plan --source $REPO --handbook skills/myrepo/references \
--request "Retry failed uploads three times before giving up" \
--out plan.mdUn bucle de agente de solo lectura: lista, lee y hace grep — no tiene ninguna
herramienta de escritura — enruta con el handbook, verifica contra el código fuente real y
escribe plan.md.
Lee el plan. Léelo de verdad. Termina con un bloque de declaraciones legible por máquina:
### EDIT 1
- file: `src/upload.py`
- where: `Uploader.send (~88)` — wrap the request in the retry helper
```old
response = self._client.put(url, data)
```
```new
response = self._retry(lambda: self._client.put(url, data), attempts=3)
```
```json
{ "will_modify": ["Uploader.send"], "will_add": ["Uploader._retry"], "will_remove": [] }
```Un planner que se rinde sale con código distinto de cero
Si no puede producir un plan usable — se puso a inventar contenidos de archivos, o se quedó sin turnos —
falla ruidosamente en lugar de escribir una disculpa en plan.md que un script luego pasaría alegremente a
apply.
Paso 7 — Aplícalo, con un camino de vuelta
handbook apply --source $REPO --plan plan.md --dry-run # verify only, never writes
handbook apply --source $REPO --plan plan.md # for realEl dry run no es opcional en espíritu. Resuelve cada ancla contra el contenido actual de los archivos y te dice exactamente qué ediciones aterrizarían.
Aplicar imprime el directorio de la copia de seguridad. Cópialo a algún sitio antes de necesitarlo:
handbook rollback --backup $REPO/.handbook-patches/2026-08-08T14-05-11-204ZEl rollback (la reversión) rechaza cualquier archivo que cambió después del parche, a
menos que pases --force — porque restaurarlo destruiría silenciosamente ese trabajo.
Consulta Aplicar cambios para las cuatro reglas de
seguridad.
Paso 8 — Haz avanzar el handbook
El código se movió. No regeneres — haz un resync.
Un caso es un directorio que tú montas:
cases/upload-retry/
edited/ copy of the repo after the change (required)
plan.md the plan from step 6 (optional — sharpens scope)
change.diff unified diff of the change (optional — widens scope)mkdir -p cases/upload-retry
cp -R $REPO cases/upload-retry/edited
cp plan.md cases/upload-retry/
handbook resync --case cases/upload-retry --work $WORKResync vuelve a analizar el árbol editado, hace diff del grafo viejo contra el nuevo y
regenera solo lo que cambió. Las salidas ya renderizadas bajo $WORK/handbook se
refrescan automáticamente.
¿No tienes un endpoint a mano? --no-llm refresca los hechos estructurales y marca la
prosa como obsoleta, en lugar de fingir que está al día.
Si tu repositorio es muy grande
| Síntoma | Qué hacer |
|---|---|
| Miles de archivos | Empieza con --detail brief. Profundiza fases concretas después con --phase 2a --detail deep --resume. |
| La ejecución es lenta | Sube --read-workers / --assign-workers / --narrate-workers, todos por debajo de --llm-concurrency. |
| Límites de tasa | Baja --llm-concurrency. Sube --llm-retries y --llm-retry-backoff. |
| Archivos generados enormes | --max-chars-per-file 20000 trunca lo que se envía por archivo. |
| Solo te importa un subsistema | Apunta --source a ese subdirectorio. El grafo se construye a partir de lo que escaneas. |
| Re-ejecutar mientras iteras | --llm-cache, y --refresh cuando quieras ignorar las cachés deliberadamente. |
Más en Coste y rendimiento.
A continuación
Inicio rápido
Ejecuta la cadena de herramientas completa de principio a fin en unos treinta segundos — sin conexión, sin clave de API y sin gastar un solo token.
El vocabulario
Etapa, ficha, registro, directorio de trabajo, caso, skill, plan — cada palabra que este proyecto usa en un sentido específico, definida una sola vez.