Skip to main content
Glama

Cairn

License: BUSL-1.1 Python 3.11+ PyPI Patent pending Local-first

Build knowledge. Leave signals. — Tools for modern explorers.

Local-first episodic memory for AI agents — and for you.

A cairn is a stack of stones that marks a trail. This one marks the trail of your thinking: every decision, dead end, and reason becomes a node you — and any model — can find again, across sessions and across model generations.

  • Local-first — everything lives in one SQLite file at ~/.cairn/. No cloud, no account, no telemetry.

  • Model-agnostic — any agent that runs a shell command or speaks MCP: Claude, GPT/Codex, Gemini, local models.

  • Append-only — memories are voided, never deleted. The record is the record.

  • Yours — Cairn sends nothing off your machine. Your chat still goes to whatever model you chose, exactly as it would without Cairn — use a local model and nothing leaves at all.

Two ways in:

  • 🧑 A person setting this up? Keep reading — Quick start takes about 5 minutes. Every option and fix: QUICKSTART.md.

  • 🤖 An AI agent installing Cairn for someone? → SETUP_FOR_AGENTS.md is written for you (install, consent, attribution).


See inside Cairn

Keep the decisions, reasons and unfinished work you want to return to. Cairn stores them in a local vault that you and your connected AI tools can read and add to. Each AI keeps its own memory and context. These demos show the optional dashboard for exploring the record.

Explore all five demos and descriptions.

Related MCP server: auxly-memory-cli

Recorded in a local installation. Private text uses examples; controls and source attribution are retained. The filmed installation has not been verified against every control in release 0.3.3. Demo descriptions and recording notes.

Contents


Quick start

Two places, never mixed up: 🖥️ Your terminal (PowerShell / Terminal) — every command on this page runs here, on your computer. Wiring is always a terminal command or a config-file edit — an AI can run those terminal steps for you (that's the fastest path below), but wiring is never something you paste into the chat box. 💬 The AI chat — where memory shows up, and where you test the wiring by asking the AI to use it.

Fastest — let your AI do it

Open Claude Code, Codex, or Cursor and paste:

Install and set up Cairn for me from https://github.com/CairnRemembers/cairn

Your AI runs the terminal steps and asks before switching memory on — one yes/no per AI on your machine, default No. Nothing records without your yes. (Using Codex? There's one extra paste after that — see Wire up your AI.)

Or do it yourself

1 — Install 🖥️ (installs software only — records nothing, the vault starts empty)

⚠️ Installing [all] on Linux / WSL? Run pip install torch --index-url https://download.pytorch.org/whl/cpu first, or pip pulls a multi-GB CUDA torch stack you don't need. Windows and macOS torch wheels are already CPU-only.

pip install cairn-remembers            # base install
pip install "cairn-remembers[all]"     # + embedder + dashboard

From source

Still the richer path — the installer handles the CPU-torch step for you:

Get the code 🖥️

git clone https://github.com/CairnRemembers/cairn
cd cairn

Run the installer 🖥️

# Windows:      .\install.ps1      (blocked? powershell -ExecutionPolicy Bypass -File .\install.ps1)
# macOS/Linux:  ./install.sh

The installer finds Python 3.11+, installs everything (first run downloads PyTorch — the lean CPU build on Linux/Windows, a few minutes), and checks itself.

2 — Wire up your AI. This is where memory actually turns on, and each AI needs different wiring — a y in setup finishes the job for Claude Code, but not for Codex or Claude Desktop. Find your AI below and follow it to its ✅.


Wire up your AI

Cairn has two separate wires, and knowing the difference prevents every common surprise:

  • Capture — your chats get remembered automatically (writes to the vault).

  • Tools — the AI can search and note your vault from inside the chat (reads + on-demand writes).

Some AIs need one wire, some need both. Don't stop at the first ✓ — follow your AI to its ✅ line.

Claude Code — one command

🖥️ In the terminal:

python -X utf8 -m cairn setup        # answer y for Claude Code

That wires capture: every new Claude Code chat auto-orients (you'll see the banner), records as you work, and compiles when it ends. Machine-wide, one-time, reversible (cairn disconnect --global). Prefer one project only? Run cairn connect inside that repo instead (global and per-project are mutually exclusive — doctor flags it).

✅ Done when: a new chat opens with a "CAIRN — inherited context" banner, and 🖥️ python -X utf8 -m cairn doctor shows ✓ capture.

Optional — native tools: Claude Code can already read the vault by running cairn commands in its shell. For native cairn_* tools instead, register the MCP server user-wide, pointing at the Python that can import cairn (a bare python that can't is the #1 failure — prove the path first, QUICKSTART §6a):

claude mcp add --scope user cairn -- <full-path-to-python> -X utf8 -m cairn mcp

💬 Proof: ask the chat to "call cairn_orient". (doctor can't see this wire — the ask is the test.)

OpenAI Codex — three pieces, each does a different job

  1. Capture 🖥️ — python -X utf8 -m cairn setup → y for Codex (= codex-hook install). Captures turns live as Codex fires notify (deduped by turn id). For a comprehensive sweep of everything on disk, run 🖥️ python -X utf8 -m cairn import codex-sessions --apply anytime.

  2. Tools 📄 — add to ~/.codex/config.toml, then fully restart Codex (full §6 walk-through):

[mcp_servers.cairn]
command = "<full-path-to-python>"
args = ["-X", "utf8", "-m", "cairn", "mcp"]
startup_timeout_sec = 30
tool_timeout_sec = 120
default_tools_approval_mode = "approve"
  1. Habit 📄 — create ~/.codex/AGENTS.md and paste the memory protocol from QUICKSTART §6c so Codex orients, fetches, and notes unprompted. (Needs piece 2 — the protocol calls those tools.)

✅ Done when: 🖥️ python -X utf8 -m cairn codex-hook status prints INSTALLED, and 💬 a Codex chat answers "call cairn_orient" with a digest (with piece 3, its first reply starts [cairn: oriented — N]). ⚠️ Honest note: cairn doctor structurally detects Codex MCP registration (the [mcp_servers.cairn] block), but it does not prove the server launches or that the notify hook captures — the checks above are the real proof of those.

Claude Desktop / Cursor — one paste

📄 Add to claude_desktop_config.json (or Cursor's MCP settings), then restart the app:

{
  "mcpServers": {
    "cairn": { "command": "python", "args": ["-X", "utf8", "-m", "cairn", "mcp"] }
  }
}

That's the tools wire — search, fetch, wander, note from inside the chat. These surfaces have no ambient capture; what you ask the AI to cairn_note is what lands. (If the app can't find Python, use the full path of the Python that installed Cairn.)

✅ Done when: doctor shows ✓ MCP — registered in Claude Desktop config (Desktop), or 💬 the "call cairn_orient" smoke test answers (Cursor).


Applies to every AI above:

  • Wiring is one-time. New chats just remember — you never activate per chat. orient reads memory; it never switches anything on. Scope varies by wire: Claude Code hooks are machine-wide (or one project via cairn connect); Desktop/Cursor and Codex live in each app's own config, per account.

  • Only NEW chats pick up new wiring — finish wiring, then open a fresh chat. (Long-lived MCP clients re-read the tools only on a full restart.)

  • Privacy controls: skip one chat — CAIRN_CAPTURE=0 in that shell (PowerShell $env:CAIRN_CAPTURE="0" · cmd set CAIRN_CAPTURE=0 · bash export CAIRN_CAPTURE=0) · pause everywhere: cairn capture off / on · secrets scrubbed before write (append-only, fail-closed).

  • Undo: cairn disconnect [--global] · cairn codex-hook uninstall · re-run cairn setup to review.


What you get

  • One vault, every model. Any agent that speaks MCP or can run cairn reads and writes the same memory — so one agent builds on what another wrote, even across rival vendors.

  • Keep your place across a usage cap. Hit a limit on one model, continue on another, and point it at where you left off — the trail is in the vault, not in one model's context.

  • Captured as you work — decisions, dead ends, tool calls, and turns become searchable nodes, from the moment you wire it.

  • Nothing worth keeping disappears. Every captured turn stores its complete text: search results are gists — an index — cairn read <id> prints any node in full, and MCP cairn_read pulls it whole with a raised max_chars.

  • A local maintenance pass you run — cairn sleep, nightly by habit or on your own scheduler (it doesn't schedule itself): embed → consolidate → prune → rebuild the graph → compile, all on your machine. One exception to "no network": the very first embed downloads the ~80 MB model, once.

  • A map of your thinking — the dashboard galaxy (cairn dashboard → http://127.0.0.1:7331), plus a human-readable Hub / Book / Index.

  • Backfill — distill old conversations into sharp, connected claim nodes.


Advanced install

By hand (what the installer runs):

# Linux / WSL: install the CPU-only PyTorch first, or pip pulls a ~4.6 GB CUDA
# stack you don't need. (Want a GPU build? Install your torch first, then run the
# line below — it's preserved.) macOS: skip this line — its default wheel is CPU/MPS.
pip install torch --index-url https://download.pytorch.org/whl/cpu

pip install -e ".[all]"      # package + embedder + dashboard

Lighter builds:

pip install -e ".[embeddings]"   # no dashboard
pip install -e ".[dashboard]"    # no embedder

Base install is stdlib + numpy. Extras add the embedder (sentence-transformers — the ~80 MB model downloads once, on first use) and the dashboard (fastapi + uvicorn).

PEP-668 "externally-managed-environment" (Ubuntu/Debian/Homebrew/WSL): install into a venv first —

python3 -m venv .venv && source .venv/bin/activate && ./install.sh

Multiple accounts

One login per AI? Skip this — it just works. Each AI signs in with its own account, and Cairn files that AI's work under its own galaxy automatically — Claude and GPT never mix, with zero setup.

Read on only if you run two accounts of the same AI (two Claude logins, two ChatGPT/Codex logins — say, personal and company). Galaxies are keyed to each login's stable id and never merge — but with two same-AI logins on one machine, Cairn can't always prove which one is active. The rule that keeps it clean:

Declare, don't detect: set CAIRN_ACCOUNT per account, up front.

# Claude Code — launch each account with its label:
export CAIRN_ACCOUNT=work && claude        # bash/zsh (or set it in that profile)
#   PowerShell: $env:CAIRN_ACCOUNT="work"; claude
# Codex — put it in that account's ~/.codex/config.toml:
#   [mcp_servers.cairn]  env = { CAIRN_ACCOUNT = "work" }
# Importing old history? Always pass the flag:
cairn import <export> --source=claude --account=work

Name and manage them anytime:

cairn account                          # list galaxies + node counts
cairn account rename <key> "Company"   # display label only — never merges or deletes
cairn account doctor                   # read-only check — prints the exact fix command per mismatch
cairn account fix-session <session-id> <slug>   # re-file ONE named session (backed up, then locked)
cairn account fix-session <slug>                # same, for the current session only

Honest limits — so you're never surprised:

  • Claude Desktop proves the active account per session automatically. Claude Code CLI and Codex can't — they follow the machine's current login file, so an account switch mid-stream can label sessions with the previous account, silently. CAIRN_ACCOUNT is the guarantee; detection is not.

  • account doctor verifies what's provable (Claude Desktop sessions); it can't audit pure-CLI or Codex history.

  • Append-only applies here too: renames change display labels only; nothing merges, nothing deletes.


What to back up

One folder: your vault at ~/.cairn/ (that's cairn.db — your actual memories). Back that up. Everything else is replaceable — the code lives here on GitHub, and reinstalling never touches your vault.


Common commands

orient · note · fetch · wander · query · read (any node in full) · dashboard · doctor · setup · connect / disconnect / capture · account · backfill · sleep (the maintenance cycle — you run it) · edges · book · import

Full reference with every option: QUICKSTART.md.


License

Free for personal and non-commercial use under the Business Source License 1.1 — read it, run it, modify it, self-host it. Commercial or business use requires a commercial license — email licensing@cairnremembers.com. Source-available (not OSI "open source"); each release converts to the permissive MIT License on the Change Date in its LICENSE.

Patent pending — a U.S. provisional patent application covering Cairn's core mechanisms was filed 2026-07-07. Cairn Remembers™ is a trademark of James Wescott Maitland IV.


Knowledge is a trail, not a destination.

Available Tools

8 tools
cairn_fetchA

Token-saving retrieval: ONE query returns a compact context pack of only the memories/files that matter, fitted to a token budget. Call this INSTEAD of re-reading files or scrolling history — it replaces the re-reading tax with a targeted answer. Top hits come back as capped previews (~1800 chars), the rest as gists — cairn_read returns any node's complete text (raise max_chars for very long nodes).

NameRequiredDescriptionDefault
queryYeswhat you need to know
accountNooptional: only return memories from this account/galaxy (case-insensitive)
budget_tokensNomax tokens in the pack

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and largely delivers: it discloses the output shape (capped previews ~1800 chars for top hits, gists for the rest), that results are budget-fitted, and how to escalate to full text. It does not state permissions, whether the call has side effects (e.g., logging), or behavior on empty/no-match queries, so it falls short of full disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core value proposition and the primary routing instruction. Slightly promotional phrasing ("replaces the re-reading tax") costs a bit of density, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read tool with no annotations and no output schema, the description covers the essential things an agent needs: what comes back, roughly how big it is, and how to get more. Missing only edge-case behavior (no results, errors) and an explicit read-only assurance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains that budget_tokens governs the fitted pack size and that top hits are capped at ~1800 chars while the remainder are gists. The account scoping parameter is left to the schema only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: one query returns a compact context pack of memories/files fitted to a token budget. It clearly contrasts with the anti-pattern (re-reading files, scrolling history) and names cairn_read for full text. It does not explicitly distinguish itself from sibling cairn_search, so the differentiation is strong but not complete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Call this INSTEAD of re-reading files or scrolling history" gives an explicit selection condition, and "cairn_read returns any node's complete text" supplies the alternative for full fidelity. There is no explicit statement of when NOT to use it (e.g., vs cairn_search or cairn_orient), which keeps it at 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cairn_logsA

The LIVE tail of the vault — newest nodes first, ALL kinds including conversation turns, embedded or not. This is how you see what just happened (fetch/search can't see un-embedded nodes until the nightly sleep). Filter by kind, session prefix, or a contains substring; follow up with cairn_read for full text (raise max_chars for very long nodes).

NameRequiredDescriptionDefault
kindNoonly this kind (e.g. conversation_turn, decision)
limitNorows to return (max 60)
sessionNosession id prefix (e.g. codex-)
containsNocase-insensitive substring to search live text
unembedded_onlyNoonly nodes the nightly embed hasn't reached

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the load and does well: it discloses ordering (newest first), that un-embedded nodes are included, the nightly embedding cycle that gates fetch/search visibility, and the effective result cap (max 60 in schema). It stops short of describing the returned row shape or whether any paging beyond limit exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the live-tail/ordering claim, then filters and follow-up. Every clause earns its place — no restating of the name and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-param read tool with no output schema and no annotations, the description supplies the essential mental model (live, unfiltered-by-embedding, newest first) and the escape hatch to cairn_read. Minor gap: nothing about what a returned node row looks like or truncation behavior in the listing itself.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all five parameters including examples for kind and session prefix. The description only restates the filter dimensions and adds a max_chars tip that actually pertains to the follow-up cairn_read call, so it adds little beyond structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: the live tail of the vault, newest-first, covering all node kinds including conversation turns. It explicitly carves out scope against sibling tools (fetch/search can't see un-embedded nodes), so an agent can distinguish it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear when-to-use condition ('this is how you see what just happened') and names fetch/search as the alternatives that fail for un-embedded nodes, plus a follow-up path via cairn_read. It does not address cairn_recent, whose name implies overlapping 'newest nodes' semantics, leaving one sibling comparison to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cairn_noteA

Write a memory to the vault — ambient capture. Use for decisions, insights, ideas, open items, warnings, procedures discovered while working. The vault remembers across sessions and models. Write the complete salient fact, decision, warning, or open item WITHOUT truncating it — but do not paste transcripts (turns are captured separately). For a large artifact, save the file and note its path and purpose.

NameRequiredDescriptionDefault
kindNoinsight
tagsNo
textYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it delivers real behavioral context: writes persist across sessions and models, content should not be truncated, transcripts are excluded, and large artifacts should be stored as files with a path reference. It doesn't disclose what a write returns, whether duplicates are deduplicated, or how soon a note becomes searchable, which leaves a gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with purpose before the usage list and the two capture constraints. Each sentence adds information; a small amount of redundancy between "write the complete salient fact" and "without truncating" keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations exist to offload anything, and the description never says what a successful call produces or how the note becomes retrievable. It also leaves the `tags` parameter entirely unaddressed, so an agent can call it but not fully exploit it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It gives strong guidance for `text` (complete, untruncated, no transcripts) and implicitly maps `kind` via its list of note categories, but `tags` is never mentioned and no parameter is named or typed. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete verb and resource ("Write a memory to the vault") and frames the scope as ambient capture of durable facts. Every sibling tool (cairn_fetch/search/read/recent/logs) is a read path, so the write-vs-read distinction is unmistakable without needing to name a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It enumerates the triggering cases clearly (decisions, insights, ideas, open items, warnings, procedures discovered while working) and adds a negative rule ("do not paste transcripts — turns are captured separately"). What's missing is an explicit pointer to any alternative tool for the cases this doesn't cover, so it stays below a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cairn_orientA

Session-start context: the most recent compiled PROTOCOL digest plus open items. Call once at the beginning of a session to inherit prior context.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden, and it does disclose content composition (compiled digest plus open items) and the call-once cadence. It omits what happens when no prior context exists, whether the digest can be stale, and how large the payload is — meaningful gaps for a context-injection tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with zero waste, and the payoff statement (what you get) is front-loaded before the invocation advice. Nothing repeated from structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-param tool with no output schema, the description adequately explains what the returned context consists of. The only real omission is the empty/first-session behavior, which is minor given the simplicity of the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain; baseline 4 applies. The description correctly signals that no input is required to invoke it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete resource — the most recent compiled PROTOCOL digest plus open items — rather than restating the opaque name 'cairn_orient'. It does not explicitly contrast with siblings such as cairn_recent or cairn_fetch, so the agent must infer that this is the session-bootstrap variant from the timing hint alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Call once at the beginning of a session to inherit prior context' gives an explicit trigger and a frequency constraint ('once'). No explicit when-not or named alternative is provided, but the timing cue effectively separates it from cairn_recent and cairn_search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cairn_readA

Read specific nodes IN FULL by id — the follow-up to the gists that recent/search/fetch return; this is the verbatim layer (long turns carry their complete text here). Accepts full ids or unambiguous prefixes, up to 8 per call; max_chars dials the per-node body budget. Unlike fetch/search this needs no embeddings, so it reads nodes written moments ago.

NameRequiredDescriptionDefault
idsYesnode ids (or prefixes) to read
max_charsNoper-node canonical-body budget in chars (default 24000; total body across ids caps at max(60000, this)) — raise it to pull a very long turn whole, lower it to skim

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, and it does unusually well: it states the batch cap (up to 8 ids per call), the size budget semantics including the total-body cap (max(60000, this)), and the freshness guarantee that it can read just-written nodes. It does not cover failure behavior, such as what happens with an ambiguous or unknown prefix, which is the remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two densely packed sentences with the core action front-loaded and zero filler; every clause (follow-up role, verbatim layer, prefix matching, batch cap, budget knob, freshness) earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description still conveys the return nature (verbatim full text, budget-controlled) and invocation constraints. It stops short of describing result ordering or error cases, which is a minor gap for such a simple two-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: 'full ids or unambiguous prefixes' clarifies how ids are matched, 'up to 8 per call' constrains the array, and max_chars is framed as dialing the per-node body budget ('raise it to pull a very long turn whole, lower it to skim').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read specific nodes IN FULL by id') and immediately positions itself against siblings, calling itself 'the follow-up to the gists that recent/search/fetch return' and 'the verbatim layer'. An agent can tell it apart from cairn_fetch/cairn_search without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names when to use it (after getting gists from recent/search/fetch, when the full text is needed) and names the alternatives, plus a distinguishing condition: 'Unlike fetch/search this needs no embeddings, so it reads nodes written moments ago.' Selection logic is fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cairn_recentB

The working set: recent decisions, open items, and warnings across the vault — what's live right now. Returns gists — pass ids to cairn_read for full text (raise max_chars for very long nodes).

NameRequiredDescriptionDefault
limitNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full behavioral burden. It usefully discloses the return shape ('gists', not full text) and a downstream tip about raising max_chars on the read tool. It says nothing about ordering, what 'recent' means (time window), how limit affects scope, or whether the operation is read-only — meaningful gaps for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the content scope front-loaded and the follow-up action second. The parenthetical about max_chars is slightly muddy since that knob belongs to cairn_read, but the text earns its space overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with no output schema, the description adequately conveys what comes back (gists) and how to get full text. It falls short on the one structured input (limit) and on the meaning of 'recent', leaving the agent to guess scope and pagination.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain the single parameter, and it never mentions 'limit' or its default of 12. Worse, the only parameter-adjacent advice concerns max_chars, which is not a parameter of this tool at all, which risks confusing the caller about what it can tune here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete content set ('recent decisions, open items, and warnings across the vault') and frames it as 'what's live right now', which tells an agent precisely what this returns. It also distinguishes itself from cairn_read by noting it returns gists rather than full text. It lacks an explicit verb (list/retrieve), so it stops just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'what's live right now' and it does route the agent onward to cairn_read for full text, which is a genuine alternative named. But it gives no guidance on when to pick this over cairn_search, cairn_orient, or cairn_wander, and no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cairn_wanderA

The creative complement to cairn_fetch. Walks the memory graph outward from the query's best hits, preferring WEAK ties that cross topic boundaries — surfaces adjacent ideas and unseen connections (a past project, an old conversation, an idea from a different domain) that similarity search will never return. Use when brainstorming, stuck, or asked for fresh angles. Returns gists — cairn_read pulls any hit in full (raise max_chars for very long nodes).

NameRequiredDescriptionDefault
kNo
hopsNohow far to wander (1-5)
queryYeswhat you're working on or thinking about

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and discloses the core behavior well: graph walking, preference for weak ties, and the kind of adjacent ideas it surfaces. It also explains the return format (gists) and points to cairn_read for full content, though it omits side-effect, permission, and performance details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, then usage, then return behavior. Every sentence contributes useful context, and the follow-up guidance about cairn_read is compact and practical.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description is largely complete: it explains the traversal concept, use cases, and that results are returned as gists. The main remaining gap is the unexplained k parameter, but the overall calling context is otherwise clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema describes query and hops, but k is undocumented in both schema and description. The description adds conceptual context around querying and wandering but does not compensate for the missing k semantics, leaving one of three parameters unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: it walks the memory graph outward from a query's best hits, favoring weak ties across topic boundaries. It explicitly distinguishes itself from cairn_fetch and from similarity search, so an agent can identify its unique role without inspecting the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage contexts: brainstorming, being stuck, or being asked for fresh angles. It also positions itself as the creative complement to cairn_fetch and contrasts with similarity search, though it does not explicitly state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.3.4
    • First observedcairn_fetch
    • First observedcairn_logs
    • First observedcairn_note
    • First observedcairn_orient
    • First observedcairn_read
    • First observedcairn_recent
    • First observedcairn_search
    • First observedcairn_wander

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation4/5

Each tool has a reasonably distinct role: fetch for budgeted context packs, search for ranked indexes, read for full text, recent for working set, logs for live tail, wander for creative graph walking, orient for session start, and note for writes. There is some overlap among the retrieval tools—fetch, search, and recent all surface memories—but descriptions clearly differentiate their outputs and intended use.

Naming Consistency4/5

All tools share the cairn_ prefix and snake_case convention, making the set predictable. Most names are verbs except recent and logs, which are nouns/adjectives, but this is a minor deviation in an otherwise consistent scheme.

Tool Count5/5

Eight tools is well-scoped for a memory vault: enough to cover retrieval, writing, orientation, and exploration without feeling bloated. Each tool appears to earn its place.

Completeness3/5

The set covers reading, writing, searching, recent context, live logs, orientation, and creative exploration. However, there are no update, delete, or memory-linking operations, which are notable gaps for a persistent memory system where correcting or removing stale information matters.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    A
    maintenance
    Provides persistent, local-first AI memory across sessions via MCP tools for storing, searching, and retrieving context from past interactions.
    31
    962 PyPI
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Local-first, file-based memory layer for AI agents — one shared Markdown vault across Claude, Codex, Gemini, Cursor and any MCP client. Provides read/write memory tools with an audit trail, per-agent trust levels, and Git sync; no cloud and no lock-in.
    2
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Local-first, auditable memory for AI agents. Provides durable context for MCP hosts with SQLite storage, CLI, and MCP tools for memory management.
    2
    Apache 2.0