The engine is free and open. Here it is in full: the four commands, the agents, the MCP tools and the hooks that block, with the figures each release publishes.
Before writing a line: who it's for (ICP) and which job it does for them (JTBD), in a guided conversation.
Leavesdoc/discovery/<feature>/icp_jtbd.md
ControlThe discovery has to be complete (READY_FOR_PRD) to move on to the PRD.
02/prd
Stories, use cases and measurable acceptance criteria, straight on your board.
LeavesUS · UC · AC on the board
ControlDefinition Quality Gate: every criterion has to be specific, measurable and checkable.
03/plan
A technical plan by phases, components and a design for each screen with the system's tokens.
Leavesdoc/plans/<feature>_plan.md + designs
ControlEvery plan records its design source: the system's tokens, not a separate brand kit.
04/implement
Branch, isolated phases, code, tests and PR. The agents split the work and the orchestrator coordinates.
LeavesPR + a receipt per criterion
ControlAG-08 gives GO or NO-GO on every phase and AG-09 accepts or rejects every use case: without both, no merge.
Control
What isn't negotiable.
An instructions file suggests. In the engine, gates decide, hooks block and self-healing repairs, within a limit.
Gates that decide
Definition Quality GateIn /prd. A criterion that isn't specific, measurable and checkable is rejected and a better one is proposed.
AG-08 · Quality AuditorOn every phase of /implement. GO or NO-GO: with NO-GO the phase doesn't move on.
AG-09 · AcceptanceIn /implement. Accepts, accepts with conditions or rejects each use case against its criteria and evidence.
/feedbackWhat a person finds while testing invalidates the verdict: a critical or major issue blocks the merge.
Separate and on demand: /audit runs an ISO/IEC 25010 audit with a PDF report.
Hooks that block
quality-first-guard.mjsNo file is modified without being read first.
spec-guard.mjsNo code without an active use case, or on main.
commit-spec-guard.mjsNo commits on main.
pre-commit-lint.mjsZero lint before every commit.
no-bypass-guard.mjsNo --no-verify, no push --force, no reset --hard.
design-system-gate.mjsIn autopilot, no color or font outside the design system.
healing-budget-guard.mjsEight repair attempts at most.
Self-healing, within a limit
When a phase fails, the engine tries to repair itself before asking for help: two attempts per phase and eight per implementation; if two phases in a row fail, it stops.
1
Auto-fixFixes lint, formatting and imports (for example, eslint --fix).
2
PatchDiagnoses and fixes the cause: a missing import, a wrong type, a badly resolved path.
3
RollbackGoes back to the last clean state, marks the checkpoint as failed and retries the phase.
4
A personIf the phase keeps failing, it stops and escalates with a written diagnosis.
Why they block
In March 2026 an agent implemented nine use cases bypassing the pipeline and left the board empty and untraceable. That day the blocks were born.
Inventory
Everything it ships, counted from the code.
Agents, commands and tools come from the inventory each engine release publishes: no figure is written by hand.
13 agents
The orchestrator never writes code: it coordinates, delegates and consolidates.
Orchestrator
AG-01Feature Generator
AG-02UI/UX Designer
AG-03DB Specialist
AG-04QA & Validation
AG-05n8n Specialist
AG-06Google Stitch MCP
AG-07Apps Script Specialist
AG-08Quality Auditor
AG-09aAcceptance Tester
AG-09bAcceptance Validator
AG-10Developer Tester
/auditISO/IEC 25010
25 commands
The four of the pipeline first; then the ones around them: quality, design, backends, payments and releases.
/discovery
/prd
/plan
/implement
/acceptance-check
/adapt-ui
/app-init
/app-sync
/audit
/check-designs
/compliance
/explore
/feedback
/handoff
/manual-test
/optimize-agents
/quality-gate
/queue-review
/quickstart
/release
/stripe-connect
/stripe-standard
/stripe-switch-account
/switch-backend
/visual-setup
192 MCP tools
In a single server, hosted at mcp.specbox.build. The modules with the most tools:
21spec_drivenStories, use cases and criteria, on any backend
17stitchFull Google Stitch proxy
16stateCheckpoints, healing and sessions
12migrationSwitch backends without losing progress
11onboardingOnboarding, upgrades and version matrix
8milestone_managementMilestones and work across repos
8spec_mutationsCreate and edit stories, cases and criteria
6board_operationsCriteria quality and metadata
And 93 more tools in 30 other modules.
Fits your project
Your board, your stack and your services.
Where your tracking lives
Four backends with the same interface, and migration between them without losing progress.
·La plantilla de los proyectos activa los hooks que el engine instala
·«Comprobar salud» avisa si un hook configurado no existe
·Workflow hooks.yml
·CLAUDE.md nombra lo que hay
v6.19.0
Escaparate2026-10-04
·Escaparate público de la home
·server/db/migration_twins.py
·La foto de actividad cuadra
·El inventario del site cuenta lo que lista el MCP
Security: what this release prevents
·La home pública nunca enseña el detalle de un recibo ni los criterios internos, solo enlaza a specbox.build o al repositorio público del engine, y solo puede enseñar UC del board del orquestador: fijar una de otro proyecto lo rechaza la base de datos.
·Las tablas del escaparate son privadas (seguridad por filas sin políticas ni privilegios para los roles públicos), y las tres vistas públicas (site_activity, site_stats y site_showcase) solo admiten lectura: nadie puede escribir en ellas desde la API pública.
·site_publish se niega a publicar el inventario de un engine que no es el checkout importado, y un inventario vacío nunca vacía las tablas del site.
v6.18.0
Mudanza2026-10-02
·El servidor responde en mcp.specbox.build
·scripts/check-mcp-hosts.mjs
·La extensión y specbox login usan mcp.specbox.build
·Las entradas antiguas se mudan solas, con copia
Security: what this release prevents
·La mudanza nunca saca la credencial del almacén seguro del sistema: se copia de una clave a otra dentro del mismo almacén, sin pasar por un fichero ni por la salida de una orden.
·La copia de las entradas de Claude Code que se guarda antes de reescribirlas solo la puede leer su usuario (0600) y nunca lleva el valor de una cabecera Authorization.
·La comparación de los dos nombres no imprime el token, y la que corre en GitHub lo hace sin token: ningún token con acceso a los boards queda guardado en los secretos del repositorio.
v6.17.1
EngineFirst2026-10-01
·provision_native_project (y setup_board) crean el proyecto aunque no haya organización que asignar
·En el panel, un proyecto sin organización no lo ve ningún tenant (filtros de UC-1304) hasta que el SuperAdmin se la asigna: la «degradación segura» que ya describía la 0020
·CLAUDE.md explica los proyectos sin organización y deja de hablar del NOT NULL de la 0019
·100% backwards-compatible para quien usa el panel: el registro da organización a cada developer, así que sus proyectos siguen cayendo en ella
v6.17.0
Evidencias2026-10-01
·Recibos estructurados en mark_ac y mark_ac_batch
·get_uc devuelve los recibos de cada AC
·Migración 0028 (sin DDL)
·CI native-tests
Security: what this release prevents
·Nadie puede atribuirse ni atribuir una aceptación: quién y cuándo de cada recibo y de cada veredicto los pone el servidor con la sesión que marca, nunca quien llama, y donde el autor no consta se deja vacío en vez de suponerlo.
·Un recibo solo enlaza a http(s): cualquier otro esquema se rechaza al escribirlo.
Earlier releases (25)
v6.16.0
Goma2026-10-01
·delete_uc con purge=true borra de verdad una UC que nunca tuvo trabajo
·Prueba de traducciones de la extensión
·La extensión habla español de principio a fin
·El comprobador de seguridad de cada versión
Security: what this release prevents
·Un borrado real no deja trabajo ni rastro fuera de su sitio: solo alcanza una UC sin trabajo del proyecto de la sesión (se comprueba la membresía del proyecto que se escribe), lo que no cumple las condiciones se archiva y nunca se pierde, y cada borrado deja la copia de la UC y de sus AC en audit_log, que no se borra. Modelo de amenazas: T14.
·El comprobador de cada versión reconoce siempre una credencial aunque el mismo mensaje hable de diseño, de modo que un cambio en mcp_token, dev_token, service_role o una API key no puede pasar como cambio visual.
v6.15.0
Tinta2026-10-01
·Las herramientas de diseño leen el sistema
·El gate de diseño bloquea lo que se sale del sistema
·La extensión de VSCode habla el mismo idioma visual
·La CLI specbox se publica sola en npm con cada etiqueta, con trusted publishing (.github/workflows/publish-specbox-cli.yml)
Security: what this release prevents
·Publicar la CLI no necesita ningún token guardado: npm la publica con trusted publishing (una credencial de un solo uso por ejecución) y cada versión lleva su procedencia firmada, así que no hay un token de npm en los secretos del repositorio que pueda filtrarse ni publicaciones que no salgan de una etiqueta.
·La página de vuelta del inicio de sesión, rehecha con el sistema de diseño, no muestra el token y escapa todo lo que llega en la dirección (el código y la descripción del error), así que un enlace manipulado no puede inyectar contenido; solo ejecuta el cierre de la pestaña.
v6.14.2
Idle Watch2026-09-30
·Revocación por inactividad
·Cinco dispositivos por persona
·specbox login explica ese caso y dónde desconectar un dispositivo
·La sección Security llega al site
Security: what this release prevents
·Un token olvidado deja de valer solo: sin uso real durante 60 días se revoca, y la persona ve el motivo en el panel.
·Nadie acumula dispositivos: el sexto no entra hasta que se desconecta otro, y el intento rechazado no cambia nada.
·La conexión del ordenador no depende de un aviso pendiente: la extensión adopta, renueva y limpia antes de cualquier diálogo de arranque.
·El modelo de amenazas del MCP remoto está escrito y cada tool nueva se contrasta con él antes de registrarse.
v6.14.1
Forward Only2026-09-29
·Política de divulgación responsable
·Comprobación de seguridad del release
·La extensión nunca se degrada al actualizarse
·Tokens anteriores a la caducidad
Security: what this release prevents
·La actualización automática solo instala la versión que toca: un paquete antiguo en la carpeta de la extensión ya no puede sustituir la versión en ejecución por una anterior.
·Los tokens sin caducidad tienen fecha: los emitidos antes de esta versión dejan de valer el 2026-12-28; desde entonces solo conectan los tokens de dispositivo, que caducan y se renuevan solos.
·Cómo avisar de un problema de seguridad queda publicado en SECURITY.md, con un canal privado y plazos de respuesta.
·Cada versión cuenta qué evita: la comprobación del release exige esta sección siempre que haya cambios de seguridad.
v6.14.0
Front Door2026-09-29
·Autenticación en el transporte
·Tokens por dispositivo
·specbox, paquete npm (packages/specbox-cli)
·Registro de accesos por tool
Security: what this release prevents
·Aislamiento por usuario en el servidor remoto: el backend FreeForm remoto trabaja solo con el contenido que envía el cliente y el registro de proyectos solo muestra los proyectos de quien llama.
·Base de datos del board: las vistas se evalúan con los derechos de quien consulta y los roles públicos no pueden escribir en ninguna tabla.
·Operaciones de borrado de estado reservadas al operador.
·Identidad en cada conexión y tokens que caducan (ver Added).
v6.13.0
Tenant Guard2026-08-25
·internal en los criterios de aceptación
·Check de exposición
·Guía de redacción cara-al-cliente en /prd, referenciada desde /plan
·Batería permanente de aislamiento por tenant sobre todos los mutadores native
·5 new tests in tests/test_dual_backend.py exercise the real dirty state the previous suite never hit (the trello_project fixture always pre-seeded the entry
v6.10.1
Reentrant Reserve2026-06-11
·reserve_uc reentrant inside a caller transaction
·New PG-gated test_start_uc_atomic_after_reserve_same_dev_does_not_abort_tx reproduces the bug (fails with asyncpg.exceptions.InFailedSQLTransactionError without the fix, passes wi…
·Trade-off aceptado: las welcome views del sidebar pueden mostrar estado vacío ~1-15s al arrancar (hasta que health.run() resuelve y dispara setContext)