regista 🎬
AI agent director — orquestación multi-provider del ciclo completo de desarrollo: PO → QA → Dev → Reviewer → Done.
Compatible con
pi, Claude Code, Codex CLI, y OpenCode.
¿Qué hace?
regista toma un backlog de historias de usuario (archivos .md) y ejecuta
el pipeline completo de desarrollo de forma autónoma y en background,
disparando agentes de codificación según una máquina de estados formal:
Draft ──PO──→ Ready ──QA──→ Tests Ready ──Dev──→ In Review ──Reviewer──→ Business Review ──PO──→ Done
↑ ↑ ↑ ↑ ↑
│ QA corrige tests │ Reviewer rechaza PO rechaza/revalida
└────────────────────────────────────────────────┴──────────────────────────────────────────────────┘
Con detección de deadlocks y desbloqueo automático
- 100% daemon: toda ejecución corre en background. Usa
--logspara ver el progreso. - Spec-first: escribe una especificación en lenguaje natural,
regista autohace el resto. - Multi-provider: elige entre
pi,claude,codexuopencode— o mezcla por rol. - Deadlock detection: si el grafo se estanca, prioriza la historia que más dependencias desbloquea.
- Checkpoint/resume: guarda progreso tras cada iteración. Si algo interrumpe →
--resume. - Dry-run: simula el pipeline completo sin gastar créditos de LLM.
Filosofía
Regista no sabe nada de tu proyecto. No le importa si usas Rust, Python o lo que sea. Solo necesita tres cosas:
- Dónde están tus historias (archivos
.md) - Qué provider y qué instrucciones de rol usar para PO, QA, Dev, Reviewer
- La máquina de estados fija que gobierna las transiciones
Todo lo demás —código, tests, builds— lo manejan los agentes a través de sus instrucciones de rol (skills, agents, commands).
Quick start
# 1. Instalar
# 2. Inicializar regista en tu proyecto
# 3. Escribe tu especificación (specs/mi-app.md) y lánzalo todo
# 4. Ver progreso en otra terminal
Eso es todo. regista auto genera el backlog desde tu spec, ejecuta el
pipeline completo, y el daemon trabaja en background hasta que todas las
historias lleguen a Done.
Instalación
# Desde crates.io
# Desde el repositorio
El binario queda en ~/.cargo/bin/regista (añadido al PATH automáticamente por Rust).
Comandos
regista <subcomando> [args]
Subcomandos de pipeline (daemon):
plan <spec> Generar historias desde una especificación
auto <spec> Generar historias + ejecutar pipeline completo
run Ejecutar pipeline sobre historias existentes
Subcomandos de gestión del daemon:
logs [dir] Ver el log del daemon en vivo (Ctrl+C no lo detiene)
status [dir] Consultar si el daemon está corriendo
kill [dir] Detener el daemon
Subcomandos auxiliares:
validate [dir] Validar configuración e historias
init [dir] Inicializar estructura del proyecto
regista plan — generar backlog
Lee una especificación y genera historias de usuario + épicas en .regista/.
Ejecuta en modo daemon.
regista auto — generar y ejecutar (full-auto)
Hace plan + run en un solo paso. El "fuego y olvido".
regista run — ejecutar pipeline
Ejecuta el pipeline sobre historias ya existentes en .regista/stories/.
regista logs / status / kill — gestión del daemon
regista validate — chequeo pre-vuelo
regista init — scaffolding
Flags comunes a plan, auto, run
| Flag | Descripción |
|---|---|
--logs |
Tail del log tras spawnear el daemon |
--dry-run |
Simulación síncrona (sin agentes, sin coste) |
--config <PATH> |
Ruta al archivo .regista/config.toml |
--provider <NAME> |
Provider a usar (pi, claude, codex, opencode) |
--quiet |
Suprimir logs de progreso |
Flags de pipeline (auto, run)
| Flag | Descripción |
|---|---|
--story <ID> |
Filtrar por historia |
--epic <ID> |
Filtrar por épica |
--epics <RANGO> |
Filtrar por rango (EPIC-001..EPIC-003) |
--once |
Una sola iteración |
--resume |
Reanudar desde checkpoint |
--clean-state |
Borrar checkpoint antes de arrancar |
Flags de planificación (plan, auto)
| Flag | Descripción |
|---|---|
--replace |
Borrar historias existentes antes de generar |
--max-stories <N> |
Límite de historias (0 = sin límite, default) |
Caso de uso: de spec a Done en un solo comando
1. Inicializa el proyecto
Esto crea .regista/config.toml, las instrucciones de rol para Claude Code,
y una historia de ejemplo para que veas el formato.
2. Escribe tu especificación
Crea un archivo como specs/mi-app.md. Este es el único input que necesitas
proporcionar. Aquí tienes un formato recomendado:
Plataforma de blogging con soporte multi-idioma y sistema de comentarios.
- --
- --
- --
- --
- --
- --
- ---
- --
3. Lánzalo todo
¿Qué pasa?
- El Product Owner lee
specs/mi-app.md - La descompone en ~15-25 historias atómicas con criterios de aceptación
- Las agrupa en 5 épicas (una por cada funcionalidad)
- Detecta dependencias entre historias (
Bloqueado por: STORY-XXX) - Valida el grafo de dependencias en bucle hasta que esté limpio
- Escribe todo en
.regista/stories/STORY-NNN.mdy.regista/epics/EPIC-NNN.md - El orquestador arranca el pipeline:
- PO refina cada Draft → Ready
- QA escribe tests → Tests Ready
- Dev implementa → In Review
- Reviewer revisa → Business Review o rechaza
- PO valida → Done (o rechaza para otra iteración)
- El daemon sigue hasta que todas las historias están en
DoneoFailed
Mientras tanto, --logs te muestra el progreso en vivo. Puedes hacer Ctrl+C
en cualquier momento: el daemon sigue corriendo.
# Si cierraste el --logs, puedes volver a verlo
# Consultar cómo va
# → ✅ Daemon corriendo (PID: 12345, log: .regista/daemon.log)
# Si quieres pararlo
4. Itera si hace falta
Si alguna historia queda en Failed (superó max_reject_cycles), revisa qué
falló:
|
Ajusta la spec, y vuelve a lanzar:
O si solo cambiaste instrucciones de rol pero las historias están bien, lanza solo el pipeline:
Flujo de trabajo completo
┌──────────────────────────────────────────────────────────────────────┐
│ Flujo spec-first │
│ │
│ 1. regista init Estructura inicial │
│ 2. Escribe specs/mi-app.md Tu especificación de producto │
│ 3. regista auto specs/mi-app.md Genera backlog + ejecuta pipeline │
│ --logs (daemon, ves progreso en vivo) │
│ 4. regista logs Re-conectar al progreso │
│ 5. Itera sobre Failed ajustando Mejora la spec, repite │
│ la spec o las instrucciones │
└──────────────────────────────────────────────────────────────────────┘
🌍 Tu input │ 📁 .regista/ (gestionado por regista)
────────────────────────────┼─────────────────────────────────────────
specs/mi-app.md │ stories/STORY-*.md ← backlog
(especificación) │ epics/EPIC-*.md ← épicas
│ decisions/ ← logs de agentes
│ state.toml ← checkpoint
│ daemon.log ← log del daemon
│ daemon.pid ← PID
Formato de especificación recomendado
Tu spec es el contrato entre tú y regista. Sé concreto y estructurado. Un buen formato incluye:
[2-3 frases explicando qué hace el producto y para quién]
- -
- -
-
-
Consejos:
- Sé concreto: "Dashboard con gráficos de vistas diarias" > "Analytics".
- Describe el qué, no el cómo: el cómo lo deciden los agentes.
- No hace falta descomponer en historias: el PO lo hace por ti.
- Pon restricciones importantes: "no se puede borrar un artículo publicado" evita que el Dev tome decisiones equivocadas.
Estructura del proyecto
mi-proyecto/
├── specs/ ← tus especificaciones (input)
│ └── mi-app.md
│
├── .regista/ ← gestionado por regista
│ ├── config.toml ← configuración del pipeline
│ ├── stories/ ← historias de usuario (*.md)
│ │ ├── STORY-001.md
│ │ └── STORY-002.md
│ ├── epics/ ← épicas
│ ├── decisions/ ← decisiones documentadas por agentes
│ ├── state.toml ← checkpoint para --resume
│ ├── daemon.pid ← PID del proceso daemon
│ └── daemon.log ← log del daemon
│
├── .pi/skills/ ← instrucciones si provider=pi
│ ├── product-owner/SKILL.md
│ ├── qa-engineer/SKILL.md
│ ├── developer/SKILL.md
│ └── reviewer/SKILL.md
│
├── .claude/agents/ ← instrucciones si provider=claude
│ ├── product_owner.md
│ ├── qa_engineer.md
│ ├── developer.md
│ └── reviewer.md
│
├── .agents/skills/ ← instrucciones si provider=codex
│ ├── product-owner/SKILL.md
│ └── ...
│
├── .opencode/agents/ ← instrucciones si provider=opencode
│ ├── product_owner.md
│ └── ...
│
└── src/ ← tu código
Configuración
.regista/config.toml de referencia
[]
= ".regista/stories"
= "STORY-*.md"
= ".regista/epics"
= ".regista/decisions"
= ".regista/logs"
[]
= "pi" # provider global
# Opcional: sobreescribir provider y/o skill por rol
[]
# provider = "claude" # este rol usa otro provider
# skill = ".claude/agents/po-custom.md" # instrucciones explícitas
[]
= 0 # 0 = auto: nº historias × 6 (mín 10)
= 5
= 3
= 1800
= 28800
= 10
= 5
= true
[]
# Comandos de verificación post-fase. Si fallan → rollback (con git.enabled)
= "cargo check --tests"
= "cargo build && cargo test && cargo clippy -- -D warnings"
= "cargo test"
[]
= true
[]
# Comandos del stack tecnológico. Opcionales: si no se definen,
# los agentes usan instrucciones genéricas y su skill interpreta el stack.
= "npm run build"
= "npm test"
= "eslint ."
= "prettier --check ."
= "src/"
Todos los campos son opcionales. Si no se define [stack], los prompts
usan instrucciones genéricas ("compila/construye el proyecto") y el skill del
agente interpreta el stack automáticamente.
Providers soportados
| Provider | Binario | Directorio de instrucciones |
|---|---|---|
pi |
pi |
.pi/skills/<rol>/SKILL.md |
claude |
claude |
.claude/agents/<rol>.md |
codex |
codex |
.agents/skills/<rol>/SKILL.md |
opencode |
opencode |
.opencode/agents/<rol>.md |
Puedes sobreescribir el provider desde la CLI:
max_iterations = 0 — auto-escalado
Cuando se deja en 0, el orquestador calcula:
máx iteraciones = max(10, historias × 6)
Para 21 historias → 126 iteraciones. Suficiente para todo el backlog.
Formato de historias
Formato que el PO genera en .regista/stories/STORY-NNN.md:
**Draft**
EPIC-001
Como [rol], quiero [acción] para que [beneficio].
- -
-
Estados
| Estado | Significado |
|---|---|
Draft |
Sin refinar |
Ready |
Refinada, lista para QA |
Tests Ready |
Tests escritos, lista para Dev |
In Progress |
Dev implementando |
In Review |
Reviewer evaluando |
Business Review |
PO validando |
Done |
Completada ✅ |
Blocked |
Dependencias sin resolver |
Failed |
Ciclos de rechazo agotados |
Máquina de estados
Flujo feliz
Draft ──PO──→ Ready ──QA──→ Tests Ready ──Dev──→ In Review ──Reviewer──→ Business Review ──PO──→ Done
Rechazos y correcciones
Ready ──QA──→ Draft (no testeable)
Tests Ready ──QA──→ Tests Ready (Dev reporta tests rotos)
In Review ──Reviewer──→ In Progress (rechazo técnico)
Business Review ──PO──→ In Review (rechazo leve)
Business Review ──PO──→ In Progress (rechazo grave)
Transiciones automáticas
| De | A | Disparador |
|---|---|---|
| Cualquiera | Blocked |
Dependencias ≠ Done |
Blocked |
Ready |
Dependencias → Done |
| Cualquiera | Failed |
Supera max_reject_cycles |
Deadlock detection
Cuando no hay historias accionables, el orquestador:
- Identifica historias en Draft → las refina el PO
- Prioriza la que desbloquea más dependencias
- Si hay ciclos, el PO debe romperlos
Arquitectura interna
src/
├── main.rs ← CLI (clap subcommands), handlers, dispatch
├── config.rs ← Config, AgentsConfig, carga TOML
├── state.rs ← Status, Actor, Transition (14 canónicas)
├── story.rs ← Story, parseo .md, set_status() atómico
├── dependency_graph.rs ← Grafo, DFS, ciclos
├── deadlock.rs ← Detección y priorización de bloqueos
├── providers.rs ← trait AgentProvider + 4 implementaciones
├── agent.rs ← invoke_with_retry(), backoff, feedback
├── prompts.rs ← 7 funciones de prompt por transición
├── orchestrator.rs ← Loop principal, dry-run, auto-escalado
├── checkpoint.rs ← Save/load/remove state.toml
├── validator.rs ← validate: chequeo pre-vuelo multi-provider
├── init.rs ← init: scaffolding multi-provider
├── plan.rs ← plan: generación de backlog + bucle validate
├── hooks.rs ← Ejecución de hooks post-fase
├── git.rs ← Snapshots + rollback
└── daemon.rs ← Modo daemon (detach/logs/status/kill)
Tests
Licencia
MIT © 2026 dbareautopi