Decision system for agentic engineering. Surfaces your project's decisions and rationale before AI agents change code.
claude mcp add nauro -- python -m nauro{
"mcpServers": {
"nauro": {
"command": "python",
"args": ["-m", "nauro"]
}
}
}MCP Servers overview
# Nauro
Nauro is a decision system for agentic engineering. It keeps your project's decisions, rationale, and rejected paths in plain markdown files, then surfaces the relevant ones before an AI agent plans or changes code.
It works across Claude, Cursor, Codex, Perplexity, and any MCP client. The result is persistent project judgment that travels with the work, not with a single tool or session.
[](https://pypi.org/project/nauro/) [](https://pypi.org/project/nauro/) [](LICENSE)
https://github.com/user-attachments/assets/9e6c475b-c584-470b-84c2-12f01b3a425a
*A coding agent checks the project's prior decisions before it plans, then records the approved decision and makes the change. Captured in Codex.*
**Status:** Beta (pre-1.0). The local CLI and stdio MCP server are stable; cloud sync is stabilizing.
More at [nauro.ai](https://nauro.ai).
## How it works
Nauro stores your project's decisions as plain markdown files, each with the alternatives you ruled out and the reasoning behind them. When an agent proposes an approach, `check_decision` runs deterministic keyword retrieval (BM25) over those files and surfaces the related ones before the agent plans or writes code.
No model judges your decisions. The check is advisory and never blocks a change. A decision is recorded only by an explicit write call, and the approval gate lives in the conversation. The store is a folder you own; remove Nauro and the markdown stays.
## Install
```bash
uv tool install nauro # uv fetches its own Python — nothing else needed
```
No `uv`? Install it with `curl -LsSf https://astral.sh/uv/install.sh | sh` (macOS/Linux) or the [PowerShell line](https://docs.astral.sh/uv/getting-started/installation/) on Windows. Already on Python 3.10+? `pipx install nauro` (or `pip install nauro`) works too.
## Quickstart
No account, no MCP wiring, no restart:
```bash
mkdir -p /tmp/nauro-demo && cd /tmp/nauro-demo
nauro init --demo
nauro check-decision "Add a WebSocket endpoint for live task updates"
```
The demo store holds thirteen example decisions. One of them ruled out WebSocket in favor of SSE, and `check-decision` surfaces it as the top match before your agent can re-propose it:
```json
{
"store": "local",
"related_decisions": [
{
"id": "decision-004",
"title": "SSE over WebSocket for live updates",
"score": 6.635,
"status": "active",
"date": "2026-03-15",
"rationale_preview": "Server-Sent Events (SSE) for pushing live task updates to the frontend. SSE uses standard HTTP, reconnects automatically on disconnect, and works through every proxy and load balancer..."
}
],
"assessment": "Found 5 related decisions. Top match: D004 \"SSE over WebSocket for live updates\" (status active, decided 2026-03-15, BM25 6.6). Call get_decision on each related decision before proposing.",
"project": { "id": "01K...", "name": "demo-project" }
}
```
Output abbreviated to the top match; the live call returns all five related decisions, ranked by score. The same result reaches your agent through the MCP `check_decision` tool, so it sees the prior decision in the flow rather than after the fact.
`nauro graph` renders the decision history to one self-contained HTML file and opens it. The file has four views: Graph (a node-link map of the whole store on a deterministic layout, the default), Lineage (one drawn supersession DAG per thread, with consolidations as the prominent fan-ins), Timeline (decisions on a true date axis), and Browse (every decision grouped by category, with superseded ones dimmed). By default the file embeds decision titles and metadata plus open-question summaries, no decision bodies, so it lands in the store directory rather than the repo; pass `--output` to write it elsewhere. Add `--include-bodies` to embed each decision's full body behind an expander in the detail panel.
<picture><source media="(prefers-color-scheme: dark)" srcset="docs/images/graph-dark.png"><img src="docs/images/graph-light.png" alt="The nauro graph default view of a project store: decisions as nodes colored by category across five clusters, with the largest node linked to the seven earlier decisions it retired, plus smaller supersession fans and two short supersession chains at the edges." width="900"></picture>
*A project store rendered by nauro graph: supersession threads converge on the decisions that replaced them, and standalone decisions cluster by category.*
## Why not ADRs, grep, or CLAUDE.md?
A decision log in your repo is a good record. The gap is on the read side: a file is read when a person opens it, and a fresh agent session starts with no knowledge that it exists. Nauro closes that gap. The relevant decision reaches your agent automatically, through MCP, at the moment it proposes a change. The store lives outside any single agent's memory, so the same project record is available across tools and sessions instead of being trapped in one prompt file, repo note, or chat history.
## When Nauro helps, and when it doesn't
Nauro pays off when an agent needs project judgment before acting: architecture choices, rejected approaches, migration plans, operational constraints, and decisions that recur across sessions or tools.
The limits are worth knowing. It surfaces only what has been recorded as a decision. It adds an MCP round-trip to the agent's flow. Retrieval is keyword-based, which is fast, offline, and auditable, and can miss a decision phrased in different words than the proposal; an optional embeddings index is available for closer synonym matching.
## Adopt Nauro in your project
**New project:**
```bash
nauro init my-project
nauro setup claude-code # or: nauro setup all
```
`nauro init` writes `.nauro/config.json` into the repo; commit it. For cloud sync from the start, run `nauro auth login` first, then `nauro init --cloud my-project`.
**One project across several repos:** the store lives outside any repo, so multiple repos can share it. Associate another repo with an existing project from inside that repo:
```bash
cd ../my-other-repo
nauro init my-project --add-repo .
```
Re-running plain `nauro init my-project` in a second repo creates a *separate* project that shares no decisions — use `--add-repo` to link them instead.
**Existing repo with docs to seed from:**
```bash
nauro adopt
```
`nauro adopt` registers the project, wires MCP across Claude Code, Cursor, and Codex, and installs a `/nauro-adopt` skill. Restart your agent and invoke `/nauro-adopt`.
Add `--with-subagents` on `nauro adopt` or `nauro setup` to install Nauro's bundled Claude Code subagents into `~/.claude/agents/`. The typical workflow:
- `@nauro-planner` before non-trivial work. Drafts a plan and classifies doctrine risk (GREEN/AMBER/RED) against your decision log.
- `@nauro-executor` after a plan is agreed. Implements it, runs tests, opens a PR.
- `@nauro-reviewer` before merging. Audits the diff for real bugs and for missing decision references.
- `@nauro-tech-lead` to set or correct direction. Reads the decision log, audits PRs against doctrine, files decisions when direction is established.
Chat surfaces (Claude.ai, Perplexity): run `nauro adopt` from a terminal first, then point the chat agent at [`docs/adopt-prompt.md`](docs/adopt-prompt.md).
## Cross-surface sync (optional)
The steps above work fully on your machine with no account. To sync a project to the cloud and reach it from surfaces without a local copy (claude.ai web) or from another machine:
```bash
nauro auth login
nauro link --cloud # one-time: promote the local project to cloud
nauro sync
```
Then add `https://mcp.nauro.ai/mcp` as an MCP connector in your tool's settings.
### Codex (remote connector)
Add it under a name distinct from the local `nauro` stdio server:
```bash
codex mcp add nauro-cloud --url https://mcp.nauro.ai/mcp
```
Then pin the OAuth callback port at the top of `~/.codex/config.toml`. Codex's callback uses a fixed, pre-registered port; without it Codex picks a random port and login fails:
```toml
mcp_oauth_callback_port = 8765
```
Requires Codex 0.131.0 or newer. Enter the URL exactly as shown, with no trailing slash. If login reports a callback-port error, free port 8765.
## MCP tools
11 tools total (8 read, 3 write). The local stdio server registers 10 (7 read, 3 write); `list_projects` is remote-only.
**Read:** `check_decision`, `get_context`, `list_decisions`, `get_decision`, `search_decisions`, `get_raw_file`, `diff_since_last_session`, `list_projects` *(remote-only)*.
**Write:** `propose_decision`, `flag_question`, `update_state`.
`nauro check-decision "<approach>"` runs `check_decision` from the shell. The write tools surface the same way:
```bash
nauro propose-decision "Adopt Redis" "In-memory cache for hot read paths" \
--files-affected src/cache.py --files-affected src/api.py \
--rejected '[{"alternative": "Memcached", "reason": "Less feature-rich"}]'
```
Repeat `--files-affected` for each entry. `--rejected` accepts inline JSON, `@file.json`, or `-` to read from stdin.
## Packages
| Package | Path | Install |
|---|---|---|
| `nauro` | `packages/nauro/` | `uv tool install nauro` |
| `nauro-core` | `packages/nauro-core/` | `pip install nauro-core` |
`nauro-core` is the parsing, validation, and context assembly shared between the CLI and the hosted MCP server. Minimal dependencies; usable by third-party tools that read or write the Nauro decision format.
The hosted MCP server (`mcp.nauro.ai`) lives in a private repository.
## Development
See [CLAUDE.md](CLAUDE.md) for architecture. Bugs and feature requests: [GitHub Issues](https://github.com/Nauro-AI/nauro/issues).
```bash
uv sync --all-packages --all-extras
uv run pytest packages/nauro-core/tests/ -x -q
uv run pytest packages/nauro/tests/What people ask about nauro
What is Nauro-AI/nauro?
+
Nauro-AI/nauro is mcp servers for the Claude AI ecosystem. Decision system for agentic engineering. Surfaces your project's decisions and rationale before AI agents change code. It has 5 GitHub stars and was last updated today.
How do I install nauro?
+
You can install nauro by cloning the repository (https://github.com/Nauro-AI/nauro) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is Nauro-AI/nauro safe to use?
+
Nauro-AI/nauro has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.
Who maintains Nauro-AI/nauro?
+
Nauro-AI/nauro is maintained by Nauro-AI. The last recorded GitHub activity is from today, with 0 open issues.
Are there alternatives to nauro?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy nauro to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/nauro-ai-nauro)<a href="https://claudewave.com/repo/nauro-ai-nauro"><img src="https://claudewave.com/api/badge/nauro-ai-nauro" alt="Featured on ClaudeWave: Nauro-AI/nauro" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!
⭐AI-driven public opinion & trend monitor with multi-platform aggregation, RSS, and smart alerts.🎯 告别信息过载,你的 AI 舆情监控助手与热点筛选工具!聚合多平台热点 + RSS 订阅,支持关键词精准筛选。AI 智能筛选新闻 + AI 翻译 + AI 分析简报直推手机,也支持接入 MCP 架构,赋能 AI 自然语言对话分析、情感洞察与趋势预测等。支持 Docker ,数据本地/云端自持。集成微信/飞书/钉钉/Telegram/邮件/ntfy/bark/slack 等渠道智能推送。