navori AI harness
open source · 5 engines

El harness multi-agente para cualquier repo.

Agentes, skills, hooks, permisos y memoria — versionados en un solo config y reconstruibles con un comando. Se renderiza a Claude Code, Codex, Cursor, Copilot y AGENTS.md sin pisar una línea de lo tuyo.

$ npx navori init
MIT Node ≥ 20 0 runtime deps
Claude Code
~/your-repo  ·  zsh
$ navori init --recommended
✓ stack: Next.js · pnpm
✓ engines: claude · codex
✓ plugins: engram · codegraph · tgrep
→ rendering managed assets
✓ CLAUDE.md · AGENTS.md
✓ .claude/ agents · skills · hooks
✓ .claude/settings.json permisos
✓ Done — 34 created · 0 overwritten
22 comandos 12 presets 7 plugins 5 engines 8 agentes 41 skills
MIT Node ≥ 20 0 deps runtime v0.9.0
Anatomía de una sesión

Sigue un prompt por dentro del harness

Sin harness, tu frase llega sola a un modelo que decide por su cuenta. Esto es todo lo que navori pone en el camino — ocho paradas, de la frase al commit, y de vuelta a la memoria.

tu prompt
arregla el bug del login que reportó soporte
lo guardado vuelve al contexto de la próxima sesión de la sesión anterior SessionStart arranca el harness CLAUDE.md las reglas de este repo skills la guía de esta tarea Dominio hechos de todo el workspace engram lo que ya se decidió orchestrator descompone y reparte codegraph dónde vive · quién lo llama tgrep qué archivos lo contienen scout mapea o investiga implementer escribe el código auditor busca lo que duele PreToolUse bloquea lo destructivo permissions allow · ask · deny semgrep seguridad en el diff jscpd duplicación quality gate lint · tests · formato reviewer aprueba o rechaza commit + PR commit + PR engram guarda la decisión 1 Entra 2 Contexto 3 Orquesta 4 Ubica 5 Trabaja 6 Protege 7 Filtra 8 Cierra

Escribes una frase. Todavía no piensa nadie.

Antes de que el modelo lea tu prompt, un hook de arranque ya corrió. Es la diferencia entre un asistente que empieza en blanco cada mañana y uno que abre la sesión sabiendo dónde está parado.

El recorrido avanza solo. Toca una parada para saltar a ella.
El problema

Cada repo reinventa lo mismo

Si trabajas con varios proyectos y agentes de IA, sabes a qué nos referimos.

01

Cada repo, su propio harness

Copias y pegas .claude/ de un proyecto a otro. Mantenerlo sincronizado es manual y propenso a errores.

02

Cada engine, su propia config

Claude tiene .claude/, Cursor tiene .cursor/, Copilot tiene .github/copilot-instructions.md. La misma intención, tres archivos.

03

El SDD se erosiona

Las skills, los hooks y las convenciones de Spec-Driven Development se pierden con el tiempo si no hay una forma de versionarlas y actualizarlas.

Alcances

El harness ya no vive solo en el repo

Tres alcances aditivos, cada uno opt-in. Ninguno degrada al de abajo: el de la máquina se hace a un lado en cuanto encuentra un repo con navori.

por repo

El repo

navori.config.json checked-in es la fuente de verdad. render reconstruye CLAUDE.md, .claude/ y progress/ desde ahí, idempotente y sin tocar lo que escribiste tú.

navori.config.json

navori init
por máquina

La máquina

Las sesiones que arrancan fuera de un repo con navori —un scratch, un repo ajeno, tu home— hoy no tienen harness de ninguna clase. La capa global instala un piso de doctrina en ~/.claude, y se aparta sola cuando el repo trae el suyo.

~/.claude · ~/.navori/global.json

navori global init
por organización

El workspace

Defaults de toda la org —quality gate, branch base, convenciones— y el Dominio: los hechos durables que cruzan repos y no caben en el CLAUDE.md de ninguno. Un modelo de datos, un contrato entre servicios, un gotcha compartido.

~/.navori/workspaces/<org>/

navori workspace · navori dominio

Huella cero sin opt-in: sin el init correspondiente, navori no escribió un solo byte fuera de tu repo.

Cómo funciona

5 capas en cascada , una sola fuente de verdad

Cada capa se compone sobre la anterior. Tú decides cuánto control quieres a nivel proyecto.

  1. Core

    El baseline gestionado por navori: agentes, skills, hooks y los bloques de doctrina. Siempre presente.

    navori
  2. Preset

    Configuración por stack — Next.js, NestJS, Astro, Expo, Medusa, monorepos y más. ¿Falta el tuyo? Creas uno local con `navori preset init`.

    preset
  3. Workspace

    Reglas de toda tu organización compartidas entre repos, más el Dominio del workspace.

    org
  4. Project

    Lo específico del repo en navori.config.json: quality gate, áreas críticas, rutas legacy y los plugins que habilitas.

    you
  5. Adapters

    Renderizado por engine para Claude Code, Codex, Cursor, Copilot y AGENTS.md, todos sobre el mismo pipeline.

    engine
navori.config.json source of truth
{
  "$schema": "https://ulisescm.github.io/navori-harness/schema/navori.config.v1.json",
  "name": "your-app",
  "engines": ["claude", "codex"],
  "preset": "nextjs",
  "branchBase": "main",
  "commits": "conventional-es",
  "qualityGate": {
    "full": "pnpm lint && pnpm test"
  },
  "plugins": {
    "engram":    { "enabled": true },
    "codegraph": { "enabled": true },
    "tgrep":     { "enabled": true },
    "semgrep":   { "enabled": true },
    "gh":        { "enabled": true }
  },
  "project": {
    "criticalAreas": ["auth", "billing"],
    "legacyPaths": ["src/legacy"]
  },
  "audit": { "mode": "always" }
}
En vivo

Mira qué aporta cada capa

Haz click en una capa para resaltar qué parte del harness genera. Los adapters lo materializan en el formato nativo de cada engine.

Selecciona una capa para ver su aporte.

Engine adapters → .claude/ + CLAUDE.md output
CLAUDE.md
  • idioma-rol · formato-respuesta · tipado-fuerte · cierre-sesion core
  • engram-protocol project
.claude/agents/
  • orchestrator · implementer · reviewer · scout · … core
.claude/skills/
  • verify-before-done · debug-failure core
  • nextjs-app-router · nextjs-data-fetching preset
.claude/settings.json
  • permisos + hooks base core
  • hooks de plugins (engram, gh) project
.claude/hooks/quality-gate-pre-commit.sh
  • qualityGate.fast heredado workspace
progress/
  • current.md · history.md core
Caja de herramientas

navori no ejecuta las herramientas , le enseña a usarlas

Cada plugin es un bundle: trae su skill, su bloque de protocolo, sus permisos y su check de doctor. Habilitas el que quieres y el harness sabe cuándo recurrir a él — y cuándo no.

acli externo

Jira

Lectura y escritura de tickets por acli, con la cuenta correcta. El intake de un ticket empieza por el ticket, no por una descripción pegada a mano.

codegraph búsqueda

Buscar por estructura

Un grafo AST local del repo. Dónde vive un símbolo, quién lo llama y qué se rompe si lo cambias — una consulta en vez de una ronda de greps y lecturas.

engram contexto

Memoria persistente

Decisiones, causas raíz y convenciones que sobreviven al cierre de sesión y a las compactaciones de contexto. No vuelves a explicar el lunes lo que decidiste el viernes.

gh externo

GitHub

Issues, PRs y checks por gh. El agente lee el ticket, abre el PR con el formato del repo y sabe leer un CI en rojo.

jscpd calidad

Duplicación

Detecta copy-paste antes de que se vuelva deuda. Un agente que no ve el código que ya existe lo reescribe; esto es lo que se lo enseña.

semgrep calidad

Seguridad

Análisis estático de patrones peligrosos sobre el diff, integrado al gate del reviewer en lugar de quedar como un paso que alguien tiene que acordarse de correr.

tgrep búsqueda

Buscar por contenido

Índice de trigramas sobre el repo. Qué archivos contienen esta cadena, con el contrato de exit code intacto y sin pelear con el motor que tenga la máquina.

navori genera el harness; no corre grep, ni los tests, ni el linter por el agente. Dicta qué herramienta usar y con qué doctrina — el resto lo ejecuta quien corresponde.

Observabilidad

El harness que se audita a sí mismo

Escribir doctrina es fácil; saber si alguien la siguió, no. navori audit responde las dos preguntas que ninguna otra cosa responde: a dónde se fueron los tokens y qué instrucciones nadie obedeció.

navori audit
$ navori audit --session latest
◇ navori-harness · 2026-09-12 ─────────╮
│ 1 sesiones · 19 agentes │
│ facturable 2.3M tok │
│ arranque 346k tok │
│ hallazgos 1 alto · 3 medio │
╰──────────────────────────────────────╯
→ report.md · report.json

A dónde se fueron los tokens

Facturable, arranque y por agente. El costo del harness deja de ser una intuición y pasa a ser un número que puedes atacar.

Qué instrucciones nadie siguió

Hallazgos con severidad sobre el ruteo real: la skill que se ignoró, la búsqueda que fue por el camino caro, la delegación que no ocurrió.

Tres fuentes que no se sustituyen

El log que escriben los hooks (qué hizo el harness), el transcript (el único lugar donde viven los tokens) y los eventos OTel del host (qué permiso se aprobó y qué skill estaba activa).

Opt-in y por sesión

Sin un --start previo no hay log que auditar y navori no observa nada. El reporte queda en markdown y JSON dentro de ~/.navori/audits/.

Comandos

El ciclo completo , comando a comando.

Todos los subcomandos que el CLI registra, agrupados por el momento en que los necesitas. Cada uno tiene su página de referencia.

Multi-engine

Una config , cinco engines.

El mismo harness materializado en el formato nativo de cada uno, sobre un solo pipeline de render. Agregar el sexto cuesta una tabla declarativa, no reescribir nada.

disponible

Claude Code

.claude/

agentes · skills · hooks · settings.json con permisos

disponible

Codex

.codex/ + .agents/skills/

agentes propios · skills · hooks · servidores MCP

disponible

AGENTS.md

AGENTS.md

spec universal · la leen Cursor, Codex, Gemini y Copilot

disponible

Cursor

.cursor/rules/

reglas .mdc · contexto de proyecto

disponible

Copilot

.github/copilot-instructions.md

instrucciones de workspace

Quickstart

De cero a productivo en tres pasos

Instala

Sin instalación global. Usa npx.

npx navori init

Inicializa

Responde unas preguntas y obtén navori.config.json + el harness renderizado.

? Project › my-app
? Engine › claude
? Preset › nextjs
✓ Done — 5 created

Renderiza cuando cambies algo

Edita el config, corre 'render --apply' y commitea. Todo idempotente.

$ vim navori.config.json
$ npx navori render --apply
$ git add . && git commit
Preguntas frecuentes

Lo que probablemente te estás preguntando

¿Y si ya tengo un .claude/ que armé a mano?

navori coexiste. init detecta tu harness existente y solo agrega bloques managed con marcadores; tu contenido personalizado queda intacto. Si quieres que navori se haga cargo de un archivo tuyo, 'navori adopt' lo envuelve sin cambiar una palabra de lo que dice. Y si tu setup ya trae su propia orquestación o SDD, blocks.exclude deja que navori opte por no renderear esos bloques para no competir con los tuyos.

¿Qué engines soporta hoy?

Cinco, todos entregados: Claude Code (.claude/), Codex nativo (agentes, skills, hooks y MCP), AGENTS.md universal, Cursor (.cursor/rules/) y Copilot. Corren sobre el mismo pipeline de render, así que un arreglo llega a todos a la vez en lugar de divergir en silencio.

¿Necesito Claude Code para usar navori?

No. navori es un scaffolder: genera el harness y se sale del camino. La herramienta corre en cualquier Node 20+ y renderiza a cinco engines distintos.

¿Qué tan invasivo es? ¿Puedo revertirlo?

render hace preview por default: sin --apply no toca disco. Cuando escribe, deja antes un snapshot restaurable con 'navori backup', y la escritura es atómica. Fuera del repo no existe nada que no hayas pedido por su nombre: sin 'global init' no hay capa global, sin '--start' no hay auditoría.

¿Cómo actualizo mi proyecto cuando sale una versión nueva?

npx navori@latest sync. Actualiza solo los bloques managed sin tocar tu código; con --interactive resuelves bloque por bloque lo que hayas editado a mano. 'navori update' te dice antes qué cambiaría.

¿No sale caro correr un harness multi-agente?

Menos de lo que parece, y ya no hace falta creerlo: 'navori audit' te dice a dónde se fueron los tokens de una sesión real. Cada agente corre con su modelo y su effort — el músculo solo donde hay juicio, lo mecánico en un modelo ligero — y cada subagente devuelve su conclusión en vez del volcado de lo que leyó.