Reads
- Only folders you select
- Markdown notes in the selected scope
- Top-level folders can be excluded
- A checkup does not modify source notes
Open source ยท MIT ยท Local-first
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
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 folderNo install, no account, no upload. Your files stay on your machine.
Data boundary
Verify it
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 boundaryFacts and their history stay in local files. The search index can be rebuilt from those files.
find ~/.nautli -maxdepth 2 -type f | sortInspect the architectureContradictions are placed in a review queue. A decision becomes active only after you answer.
nautli reviewInspect the review pathA fact keeps the claim, its source, and the decision it replaced.
fact_id042claimauth uses RS256 JWT, rotates 30dsourceclaude-code ยท 2026-06-14 ยท project:apisupersedesfact_id: 019How it works
While you sleep, nautli surfaces conflicts as questions. Claude Code, Codex, and Cursor read the same approved memory. Nothing is rewritten until you decide.
Claude Code Local development uses PostgreSQL.
Cursor Local development uses SQLite.
You Which decision is current?
nautli PostgreSQL and SQLite conflict. Did the decision change?
You Yes. SQLite supersedes PostgreSQL.
Every connected AI SQLite is current. PostgreSQL remains in history.
Memory checkup
Run a checkup to see real contradictions, changed decisions, and duplicates before importing anything.
Run nautli checkup to fill this card.
nautli checkup ~/notesContradiction
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
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
Two notes state the same retry limit with the same scope and meaning.
The review shows both sources before any consolidation.
Compare
| Hosted memory layer | nautli | |
|---|---|---|
| Transmission | Memory may be sent to a hosted service | Notes do not reach nautli servers |
| Source of truth | Service-managed store | Files under ~/.nautli |
| Who decides | Service policy or model | You answer review questions |
Core software stays MIT licensed. Supporter names appear only with explicit opt-in.
Become a SupporterUse Discord for implementation questions and project discussion.
Open Discord