Have the prerequisites
Node.js 20+, Claude Code and —if the repo uses persistent memory— the engram binary. In step 3, doctor tells you exactly what's missing.
node --version # v20 or higher # Claude Code installed on your machine
navori isn't a generic scaffolder. It's an opinionated harness, built for code that already lives in production —with legacy dependencies and half-finished migrations, not lab repos—. It turns Claude Code into a team with non-negotiable standards, memory that persists, and one shared standard across all your repos. Here's why, layer by layer, it's a foundation worth building on.
New to terms like harness, skill, or SDD? Start with the quick glossary ↓
No jargon. Tap any term to see what it means in one sentence.
The 'harness' around the AI assistant: the rules, agents, and automations that make it work the way your team expects, not on a whim.
An assistant with a specific role (explore, write, review). The main agent splits work across specialized subagents.
A reusable guide for a concrete task ('how to create an endpoint', 'how to verify before calling something done'). The agent loads it when needed.
An automation that fires at a fixed moment —e.g. run the tests before every commit— so nobody has to remember.
The quality bar: the commands (lint, tests) that must pass to call a change done.
Spec-Driven Development: instead of rules living in someone's head, they're written and versioned next to the code, updated with one command.
A config bundle per stack type (Vite + React, NestJS, monorepo…). navori detects your stack and picks the right preset.
The persistent memory: it stores decisions and learnings so the assistant recalls them next session.
A chunk of CLAUDE.md marked 'managed by navori': it updates itself without touching what you wrote around it.
The folders of old code you flag so agents treat them carefully and don't impose new rules on them.
The main agent embodies the orchestrator —the center of gravity—. Instead of doing everything in one thread, it decomposes the task and splits it across subagents that work in parallel and return only their conclusion. Each has a strict role and the right model for it.
Tap a card to see what each role does ↓
The main agent embodies it, not a separate subagent — it's the session's center of gravity. It reads the ticket, decides how many subtasks to split into, launches the workers in parallel, and finally integrates their results into one coherent solution. It uses the most capable model (opus) because its job is to reason and decide, not read files.
publisher
Fast and cheap for mechanical tasks.
scout · implementer · reviewer · auditor
Balance of quality and cost.
orchestrator
The muscle where judgment matters.
All configurable in config.models. You don't pay a premium model to read files: muscle where decisions
happen, speed where you explore.
orchestrator › splits the ticket into 3 subtasks
├─ scout → map the module (own context · sonnet)
├─ scout → how is it validated? (own context · sonnet)
└─ implementer → applies the change → quality gate ✓ (sonnet)
└─ reviewer → approves against CLAUDE.md (sonnet)
orchestrator › synthesizes and delegates the commit → publisher (haiku)
Almost every tool assumes a clean, greenfield repo. navori starts from
a real team's reality: code already running in production, legacy
dependencies, and half-done migrations. From init you pick the terrain, and that choice shapes how the agents work.
You pick the terrain: greenfield (move fast), in production (guard regressions), or legacy migration (watch legacy↔new compatibility). The choice shapes how the agents work.
You flag the legacy folders and the orchestrator, implementer, and reviewer know it: different rules apply there, and they don't impose new conventions on code that isn't theirs to touch.
Facing a structural migration (legacy → new backend, monolith → microservices), the agent dissects root cause, affected areas, and compatibility before anyone writes code.
verify-before-done, debug-failure, and review-diff catch the inconsistent states where legacy and new code coexist — the most expensive bug in a half-done migration.
? What terrain are you on?
greenfield — new code, move fast
› production — in production, guard regressions
migration — legacy migration, watch
legacy↔new compatibility
→ legacyPaths: [ "src/old-api", "legacy/" ]
the orchestrator, implementer, and reviewer
treat those paths with different rules. Orchestration isn't just about speed — it's context economy. The main thread stays clean because the heavy lifting happens in isolated windows —each with its own model— that return only what matters.
Each subagent runs in its own window and returns only the conclusion. The orchestrator's thread never fills with the dump of files it read.
Each agent uses the right model: a light one to read and explore, the powerful one only to decide and review. You don't pay a premium model to read files.
Scout reads the relevant fragments, not whole files. It locates — it does not photocopy.
The skill catalog is referenced by index; the heavy content loads only when the task calls for it.
Canonical ordering sorts and dedupes the rules in CLAUDE.md. No pasted copies, no noise piling up session after session.
without a harness
One thread reads whole files, piles everything into context, and drags it turn after turn until it saturates.
with navori
Subagents explore in parallel and return conclusions. The orchestrator reasons over summaries, not dumps. Engram keeps what must be remembered outside the context window.
An LLM's context is ephemeral: close the session and it's forgotten. Engram is the persistent memory navori enables by default. Decisions, root-caused bugs, and conventions get saved and recalled across sessions — and survive context compactions.
# today — after fixing a bug
mem_save "The 360 report breaks if languages[] is empty.
Root cause: missing guard in report.py. Fix: default []."
# next week — new session, context at zero
mem_search "360 report languages"
→ recalls the decision, the root cause, and the fix.
You don't re-explain it. When you run 15 repos, you don't want 15 standards. The workspace is a cross-repo layer: define your org's quality gate, branch base, and conventions once, and every repo inherits them. The team works the same way no matter which project they're in.
$ navori workspace init acme
$ navori workspace set-default acme \
--branch-base main --commits conventional-es
$ navori workspace add-repo acme ./web-app
$ navori workspace add-repo acme ./api-core
… 13 more repos
$ navori workspace render acme
✓ 15 repos rendered with the same standard An agent with write access needs barriers. navori brings non-negotiable standards —simplicity, strict typing— and security and quality gates as part of the harness, not an optional extra. And it keeps them versioned alongside the rest of the config.
The standard before writing a line: is it the simplest thing? readable in 6 months? does it keep the existing pattern? No clever solutions nobody understands later.
unknown + narrowing, explicit types. The only exception is a // justified any: <reason> — last resort, not a shortcut that turns into debt.
Static analysis of dangerous patterns, tied to the reviewer. Security issues get caught in review, not in production.
Detects copy-paste code before it multiplies. Less surface to maintain, fewer places for a bug to hide.
guard-destructive intercepts dangerous commands; quality-gate runs lint + tests before every commit.
Sensitive operations are blocked or require explicit confirmation. Defense in depth, not a single barrier.
There are many ways to give an AI assistant instructions. Few survive the second month, a real team, or a repo with history. This is what navori does that the alternatives don't — or don't do as polished.
A versioned source of truth and idempotent render. Copying folders between repos doesn't scale or survive an update; navori does.
It detects your real stack —Mantine, Redux, NestJS, pnpm monorepo— and assembles the preset. The standards don't erode because they're versioned and update with one command.
Most tools assume a clean repo. navori starts from reality: code that already runs, legacy dependencies, and half-done migrations.
Persistent memory, security and duplication gates, multi-agent orchestration, and a cross-repo standard. All polished and connected, not a README with manual steps.
You commit the config once to each repo; the team just follows it.
Nobody hand-rolls a harness or copies .claude/ between projects. These are the commands each person runs on the way in.
Node.js 20+, Claude Code and —if the repo uses persistent memory— the engram binary. In step 3, doctor tells you exactly what's missing.
node --version # v20 or higher # Claude Code installed on your machine
The repo already ships navori.config.json (the source of truth). A single command rebuilds every configured engine identically for the whole team. Idempotent: running it twice changes nothing.
$ git clone <repo> && cd <repo> $ npx navori render --apply ✓ configured engines rebuilt from the config
doctor confirms everything is up to date and, if a tool is missing (e.g. engram), hands you the exact install command. No guessing.
$ npx navori doctor
◇ All good — nothing pending.
⇡ engram — missing from PATH:
brew install gentleman-programming/tap/engram \
&& claude plugin install engram Open Claude Code and you're set: same agents, same skills, same quality gate, same team memory. When someone updates the config, run sync to catch up without touching your code.
# already productive with the team's harness # when the repo config changes: $ npx navori@latest sync
In short, for the team: clone → npx navori render --apply → npx navori doctor and start working with the same harness you use.
All of this materializes with a single adoption command. The rest is rendering whenever you change something.
navori wasn't born in a vacuum: it integrates excellent tools and synthesizes ideas from open projects and standards. Credit for each piece belongs to whoever built it.
Anthropic
The agent runtime navori materializes.
Gentleman-Programming
Persistent memory across sessions via MCP.
Semgrep
Static security and pattern analysis.
kucherenko
Copy-paste / duplication detection.
GitHub
Issues and PRs from the terminal.
Atlassian
Jira tickets as a source of work.
colbymchenry
Code graph over MCP: locate and measure impact without reading files.
The universal agent-instructions spec — the multi-engine baseline.
The orchestrator + workers pattern in isolated context.
Versioning skills, rules, and conventions as part of the repo.
navori took ideas from these projects; codegraph is also integrated as
a plugin. Per-project notes live in docs/inspiration.md.
Gentleman-Programming
Ecosystem configurator with SDD, persistent memory, and organic routing by task complexity.
garrytan
Role-chained skills; host auto-detection with a config per host; cross-model review.
betta-tech
EARS notation, requirement↔test traceability, and the filesystem as the spec's state machine.
betta-tech
The Orchestrator/Implementer/Reviewer pattern and state on disk: chat only carries references.
obra
Subagent-driven development: a fresh agent per task and specs a junior can follow.
DietrichGebert
The anti-over-engineering decision ladder: lazy in the solution, never in the reading.
colbymchenry
Surgical context from a pre-indexed graph instead of grep/read loops.
Graphify-Labs
A deterministic knowledge graph of code and docs, committed to the repo like managed assets.
JuliusBrussee
Token efficiency as a cross-cutting skill: brevity without losing technical exactness.
Agentic AI Foundation
Portable YAML recipes to share workflows across a team and CI/CD.
Earendil
Primitives, not features: on-demand skills and extensibility over baked-in workflows.