$ hornero — cheatsheet

v0.2.0 · github.com/jelitox/hornero · MIT

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