Open source ยท MIT ยท Local-first

How dirty is your AI's memory?

Free, in your browser, about 30 seconds. Then one clean local memory shared by Claude, Codex, and Cursor.

Free ยท No install ยท No upload

๐Ÿ”’ Your notes never reach our servers ยท No silent rewrites ยท MIT ยท macOS

Free ยท Runs in your browser

Diagnose the memory your AI reads

Point nautli at your Obsidian vault, your notes folder, or the CLAUDE.md and AGENTS.md files your assistants load every session. It reads them in your browser and shows you what is repeated, oversized, or left behind. Nothing is uploaded.

Scan a folder

No install, no account, no upload. Your files stay on your machine.

Your memory outlives every model.

Your memory stays with you.

โ†’ Manifesto

What nautli reads, writes, and sends

Reads

  • Only folders you select
  • Markdown notes in the selected scope
  • Top-level folders can be excluded
  • A checkup does not modify source notes

Writes

  • Memory files under ~/.nautli
  • One marked instruction block when enabled
  • MCP and launchd settings only when enabled
  • Each integration has a removal path
See files and removal steps

Sends

  • Note content to nautli servers: none
  • Judgment prompts through your Claude subscription to Anthropic
  • Optional collection is off by default
  • Shared checkups contain numbers, not notes

Trust boundaries you can inspect

Your notes stay off our servers

The local store, event logs, and reports remain under ~/.nautli. Check active connections while nautli runs.

lsof -i -n -P | grep -i nautliRead the data boundary

Files remain the source of truth

Facts and their history stay in local files. The search index can be rebuilt from those files.

find ~/.nautli -maxdepth 2 -type f | sortInspect the architecture

Ambiguity becomes a question

Contradictions are placed in a review queue. A decision becomes active only after you answer.

nautli reviewInspect the review path

A fact keeps the claim, its source, and the decision it replaced.

fact_id
042
claim
auth uses RS256 JWT, rotates 30d
source
claude-code ยท 2026-06-14 ยท project:api
supersedes
fact_id: 019

The models can ask. Only you can settle the record.

While you sleep, nautli surfaces conflicts as questions. Claude Code, Codex, and Cursor read the same approved memory. Nothing is rewritten until you decide.

Before nautli

Claude Code Local development uses PostgreSQL.

Cursor Local development uses SQLite.

You Which decision is current?

With nautli

nautli PostgreSQL and SQLite conflict. Did the decision change?

You Yes. SQLite supersedes PostgreSQL.

Every connected AI SQLite is current. PostgreSQL remains in history.

How healthy is your vault?

Run a checkup to see real contradictions, changed decisions, and duplicates before importing anything.

Run nautli checkup to fill this card.

nautli checkup ~/notes

Contradiction

Two current ports

One note says the API uses port 3000. Another current note says port 4000.

nautli asks which claim is current. It applies neither on its own.

Changed decision

PostgreSQL became SQLite

The later note explicitly replaces the earlier database decision.

This is history, not an error. The new fact supersedes the old one without deleting it.

Duplicate

The same retry rule twice

Two notes state the same retry limit with the same scope and meaning.

The review shows both sources before any consolidation.

โ†’ See the scoring formula

Hosted memory layer and nautli

Hosted memory layernautli
TransmissionMemory may be sent to a hosted serviceNotes do not reach nautli servers
Source of truthService-managed storeFiles under ~/.nautli
Who decidesService policy or modelYou answer review questions

Support the work

Core software stays MIT licensed. Supporter names appear only with explicit opt-in.

Become a Supporter

Talk with maintainers

Use Discord for implementation questions and project discussion.

Open Discord