EL LOOP señales → specs → código → reportes
| hornero init [--hooks] [--no-sdd] [--no-wiki] |
Crea .hornero/ + sdd/ en cualquier repo. Idempotente; nunca pisa la config. |
| cp notes.md .hornero/inbox/ |
Alimentá una señal: minutas, docs, ideas — cualquier archivo de texto. |
| hornero reconcile --dry-run |
Previsualiza los deltas. Garantizado: cero escrituras. |
| hornero reconcile |
Revisión interactiva — aprobar/rechazar/editar/saltar cada delta. Requiere TTY; sin terminal no se aplica nada. |
| hornero build [SPEC-ID] [--backend mock|cli] |
Specs aprobados → briefs → backend de agentes. Cada corrida deja un trace. |
| hornero report [--only NAME] |
Regenera sdd/reports/: capacidades · workflows · trazabilidad. No-op si está al día. |
| hornero reindex |
Reconstruye el índice de conocimiento (determinista). Auto vía --hooks post-merge. |
| hornero status |
Specs por estado · inbox pendiente · salud del índice. |
CONFIG .hornero/config.yaml
signal_sources: [inbox, git] # git = opt-in
tracker: repo
dispatch:
backend_order: [mock] # api nunca se
# agrega solo
models:
reconciler: fake:s.json
wiki: fake:s.json
scribe: fake:s.json
sdd_upstream: git@…/toolkit
sdd_ref: main
clave desconocida = error
TOOLKIT SDD prompts como dependencias — sdd.lock, drift 3-vías
| hornero sdd install --from SRC [--ref R] |
Instala el set gestionado + scaffold + lockfile. Adopta archivos existentes, nunca los pisa. |
| hornero sdd status / diff [FILE] |
Tabla de drift (una línea por archivo) / diff unificado vs upstream. |
| hornero sdd sync [--dry-run] [--force] |
Avanza behind + new; diverged bloquea (exit ≠ 0) hasta resolverse. |
| hornero sdd sync --theirs F / --ours F |
Resuelve un diverged: gana upstream / gana local (lock re-baselineado). |
| hornero sdd sync --push FILE… |
Promueve mejoras al upstream vía PR. Scan de secretos; nunca la rama default. |
| hornero sdd sync --workspace DIR |
Sincroniza cada repo hijo con .hornero/sdd.lock; ignora el resto. |
| hornero sdd hold|unhold|pin FILE |
Política por archivo: local (nunca se trae) · vuelve a sync · congelado. |
ESTADOS DE DRIFT U/L/C
current
behind → pull
modified → ¿push?
diverged → humano
deleted_locally → --force
new_upstream → instala
held · pinned → se salta
# U = upstream ahora
# L = lock (últ. sync)
# C = actual en disco
# sin timestamps, sin
# "gana el más nuevo"
WIKI para el próximo agente
| hornero wiki init |
Primera construcción: quickstart + áreas, links validados. |
| hornero wiki update |
Quirúrgico, acotado a la ventana git. Ventana vacía ⇒ cero llamadas al modelo. |
requiere models.wiki
el no-op dice “already current”
TRACES & DRs la verdad del proceso
| hornero runs list [--spec S] |
Corridas de agentes registradas. |
hornero runs show REF --kind tool_use --range e#2:e#9 |
Cortes exactos de eventos de un trace. |
| hornero runs adopt FILE.jsonl |
Adopta un transcript de Claude Code. |
| hornero scribe REF [--force] |
Trace → DR-NNN. Citas verificadas o el claim se descarta. |
DÓNDE VIVE CADA COSA
sdd/specs/ el tracker
sdd/decisions/ ADRs + DRs
sdd/proposals/ brainstorms
sdd/reports/ auditoría HTML
wiki/ docs p/ agentes
.hornero/inbox/ señales
.hornero/runs/ traces (ignorado)
.hornero/sdd.lock commiteado
.hornero/watermarks.json commiteado
.hornero/ledger.db ignorado
CÓDIGOS DE SALIDA
0 ok / ya está al día
1 falla — o diverged esperando a un humano
2 precondición (sin lock, archivo desconocido)
3 sin modelo configurado
# reconcile sin TTY sale
# SIN escribir nada —
# es la seguridad, no un bug