regista 🎬
AI agent director for pi.
Automates the full development pipeline with agents: PO → QA → Dev → Reviewer → Done, governed by a formal state machine with deadlock detection, checkpoint/resume, and CI/CD-ready JSON output.
Filosofía
Regista no sabe nada de tu proyecto. No importa si usas Rust, Python, o lo que sea. Solo necesita tres cosas:
- Dónde están tus historias de usuario (archivos
.md) - Qué skills de
piactúan como PO, QA, Dev, Reviewer - La máquina de estados fija que gobierna las transiciones
Instalación
# Instalación oficial desde crates.io
# O desde el repositorio
El binario se instalará en ~/.cargo/bin/regista (añadido al PATH automáticamente por Rust).
Configuración
Crea un archivo .regista.toml en la raíz de tu proyecto, o ejecuta:
Configuración de referencia:
[]
= "product/stories" # dónde están las historias
= "STORY-*.md" # glob para encontrarlas
= "product/epics" # opcional: para filtrar
= "product/decisions" # decisiones de los agentes
= "product/logs" # logs del orquestador
[]
= ".pi/skills/product-owner/SKILL.md"
= ".pi/skills/qa-engineer/SKILL.md"
= ".pi/skills/developer/SKILL.md"
= ".pi/skills/reviewer/SKILL.md"
[]
= 10
= 5
= 3
= 1800
= 28800
= 10
= 5 # bucle groom→validate→corregir
= true # inyectar stderr en reintentos
[]
# Comandos opcionales de verificación post-fase.
# Si fallan, se hace rollback automático.
= "cargo check --tests"
= "cargo build && cargo test && cargo clippy -- -D warnings"
= "cargo test"
[]
= true # snapshots + rollback automáticos
Todos los campos tienen valores por defecto razonables. Un proyecto mínimo
solo necesita definir [agents].
Formato de historias
Tus historias deben seguir este formato .md:
**Draft**
EPIC-001
Como [rol], quiero [acción] para que [beneficio].
- -
-
Estados válidos
Draft · Ready · Tests Ready · In Progress · In Review · Business Review · Done · Blocked · Failed
Uso
Generar el backlog automáticamente
# Desde un documento de requisitos
# Con límite de historias
# Regenerar desde cero
groom invoca al PO para descomponer la spec en historias, escribe los .md,
y ejecuta un bucle de validación de dependencias hasta que el grafo esté limpio.
Validar el proyecto
# Chequeo pre-vuelo (config, historias, skills, dependencias, git)
# Salida JSON para CI
Pipeline completo
# Procesar todo el backlog
# Una sola iteración (procesa una historia y sale)
Simular antes de ejecutar
# Ver qué haría el orquestador sin invocar agentes
# Simular solo una iteración
# Simular con salida JSON
Salida JSON para CI/CD
# Reporte estructurado a stdout, logs a stderr
# Solo el JSON, sin logs de progreso
# Validar en CI y capturar reporte
&&
Exit codes: 0 = éxito, 1 = error de configuración, 2 = hay historias Failed.
Checkpoint y reanudación
# El pipeline guarda su estado en .regista.state.toml tras cada iteración
# Si se interrumpe, reanuda desde donde estaba
# Borrar el checkpoint manualmente
Filtros de historias
# Solo una historia concreta
# Solo historias de una épica
# Rango de épicas (inclusivo)
Archivo de configuración alternativo
Archivo de log personalizado
Modo daemon
# Lanzar en segundo plano
# Consultar si sigue corriendo
# Ver el log en vivo (Ctrl+C para salir)
# Detener el daemon
Máquina de estados
Flujo feliz
Draft ──PO(groom)──→ Ready ──QA──→ Tests Ready ──Dev──→ In Review
│
Reviewer │
▼
Done ←──PO(validate)── Business Review
Rechazos
In Review ──Reviewer──→ In Progress ──Dev(fix)──→ In Review
Business Review ──PO──→ In Review (rechazo leve)
──PO──→ In Progress (rechazo grave)
Transiciones automáticas (sin agente)
| Transición | Condición |
|---|---|
| Cualquier estado → Blocked | Tiene dependencias no resueltas (≠ Done) |
| Blocked → Ready | Todas las dependencias pasan a Done |
| Cualquier estado → Failed | Se superan max_reject_cycles (3 por defecto) |
Feedback rico en reintentos
Cuando un agente falla, regista:
- Guarda stdout/stderr en
product/decisions/ - En el reintento, inyecta el error en el prompt: «Tu intento anterior falló. Corrígelo.»
- Esto aumenta la probabilidad de éxito en reintentos.
Configurable: inject_feedback_on_retry = false para desactivarlo.
Referencia completa de CLI
regista [PROJECT_DIR] [FLAGS] # pipeline normal
regista validate [PROJECT_DIR] [FLAGS] # validación pre-vuelo
regista init [PROJECT_DIR] [FLAGS] # scaffolding de proyecto
regista groom <SPEC.md> [FLAGS] # generación de historias
FLAGS (pipeline):
--config <FILE> Archivo de configuración alternativo
--epics <RANGE> Rango de épicas ("EPIC-001..EPIC-003")
--epic <ID> Una sola épica
--story <ID> Una sola historia
--once Una iteración y salir
--json Salida JSON a stdout
--quiet Suprimir logs de progreso
--dry-run Simular sin invocar agentes
--resume Reanudar desde último checkpoint
--clean-state Borrar checkpoint
--detach Lanzar en segundo plano (daemon)
--follow Ver log en vivo del daemon
--status Consultar si el daemon sigue vivo
--kill Detener el daemon
--log-file <FILE> Archivo de log (por defecto: stderr)
FLAGS (groom):
--max-stories <N> Máximo de historias (0 = sin límite)
--replace Regenerar desde cero (default: merge)
--config <FILE> Archivo de configuración alternativo
FLAGS (init):
--light Solo .regista.toml, sin skills
--with-example Incluir historia y épica de ejemplo
FLAGS (validate):
--json Salida JSON estructurada
--config <FILE> Archivo de configuración alternativo
Estructura del proyecto
regista/
├── src/
│ ├── main.rs ← CLI, subcomandos, JSON output, exit codes
│ ├── config.rs ← Config, carga TOML, defaults
│ ├── state.rs ← Status, Actor, Transition
│ ├── story.rs ← Story, parseo .md, set_status()
│ ├── dependency_graph.rs ← Grafo, ciclos DFS, conteo inverso
│ ├── deadlock.rs ← Detección de bloqueos + priorización
│ ├── agent.rs ← pi con timeout, retry, feedback rico
│ ├── prompts.rs ← Prompts para PO/QA/Dev/Reviewer
│ ├── orchestrator.rs ← Loop principal, dry-run, checkpoint
│ ├── checkpoint.rs ← Save/load/resume del estado
│ ├── validator.rs ← Comando validate (pre-vuelo)
│ ├── init.rs ← Comando init (scaffolding)
│ ├── groom.rs ← Comando groom (generar backlog)
│ ├── hooks.rs ← Comandos post-fase
│ ├── git.rs ← Snapshots + rollback
│ └── daemon.rs ← Modo daemon (detach/follow/status/kill)
└── roadmap/ ← Documentos de diseño de features futuras
Tests
Licencia
MIT