Skip to main content

Cairntir

Persistent, local-first memory for AI coding agents. Claude Code, Codex, Cursor, Qwen Code, and other MCP clients share one searchable project history.

PyPI CI Python 3.11+ MIT

Cairntir stores decisions, facts, unfinished work, and outcomes as verbatim drawers in a SQLite database you own. A budgeted handoff restores complete drawers across sessions; semantic and file-anchored recall find deeper evidence.

Current release: 1.11.0. See the release evidence and changelog. Published downloads are on PyPI and GitHub Releases.

Install

pip install --upgrade cairntir
cairntir setup

Python 3.11+ is required. Setup initializes the store and configures supported hosts it detects. Restart your agent afterward.

cairntir version
cairntir doctor

For one host or project, use cairntir init --host codex; add --user for user-scope configuration. Cursor's global User Rule requires a manual paste; setup prints the rule and reports that step.

Follow the getting-started guide for configuration, verification, recovery, and troubleshooting.

Use

Ask your agent to remember a decision in your project's wing, then start the next task with cairntir_handoff(wing="myproject"). A wing is a project, a room is a topic, and a drawer is one verbatim memory.

cairntir handoff myproject
cairntir handoff myproject --task "repair cache invalidation" --budget 8192
cairntir recall "why did we choose Postgres?" --wing myproject
cairntir recall-for-change src/auth.py
cairntir recover --host codex --wing myproject
cairntir cost myproject

Handoff returns whole drawers or names those omitted by its character budget. It includes recent default-layer writes, open predictions, and optional code anchors. Settlements append observed outcomes without rewriting predictions.

Portable evidence preserves source identities and relationships across stores. Evaluated procedures require holdout evidence and local approval; scoped sharing limits access with owner-issued grants.

Host support

Surface Support
Setup Claude Code, Cline, Codex CLI, Copilot CLI, Cursor, Gemini CLI, OpenCode, Qwen Code
Transcript recovery Claude Code, Codex, Qwen Code
Other MCP clients Configure the cairntir-mcp stdio command manually
Cursor transcripts Unsupported; an explicit receipt explains the limitation

Transcript recovery is opt-in, separately budgeted, read-only, and untrusted. It reads bounded host-owned transcript tails; it cannot recover text the host never persisted. Saving a recovered request requires explicit selection with cairntir recover ... --write N. Memory is not automatically made authoritative merely because it appeared in a transcript or imported file.

Data and safety

The authoritative store is local SQLite with sqlite-vec. Embeddings run locally; first use may download the embedding model. Optional update checks contact PyPI, and explicitly selected LLM adapters can contact their provider. Cairntir is not a sandbox for the agent using it.

Portable JSONL verifies content hashes and optionally HMAC signatures through the Python API. The CLI imports as untrusted and does not verify signatures. Version 1 cannot safely import source-local history references; use a database backup for linked history. Export/import also enforce the format's external-URL restriction. See data handling for backup and trust boundaries.

Build and integrate

The MCP server exposes 21 tools over stdio. Stable Python protocols support custom backends; see the integration guide.

src/cairntir/
├── memory/       # SQLite storage, embeddings, retrieval
├── mcp/          # stdio server and backend
├── reason/       # prediction, experiment, observation
├── recipes/      # composable workflows
└── cli.py        # cairntir setup | init | handoff | recover | recall | replay | hotfix | doctor | export | import
tests/            # unit, integration, contract, property, evaluation
docs/             # guides, architecture, recipes, release evidence

Contributing documents the locked development environment and required checks. Tests enforce at least 80% coverage of the measured surface; transport entrypoints are excluded and tested separately. The LongMemEval subset is a regression gate, not a general benchmark claim.

Documentation

Cairntir (CAIRN-teer) combines a cairn, a waypoint of stacked stones, with a seeing-stone. Maintained by Patrick McGuire. MIT licensed.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cairntir-1.12.2.tar.gz (1.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cairntir-1.12.2-py3-none-any.whl (293.6 kB view details)

Uploaded Python 3

File details

Details for the file cairntir-1.12.2.tar.gz.

File metadata

  • Download URL: cairntir-1.12.2.tar.gz
  • Upload date:
  • Size: 1.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cairntir-1.12.2.tar.gz
Algorithm Hash digest
SHA256 cab80aa9b0de69a7076c6c95b70a8951ede5c2c44cce5e78b7e0c89db6b02496
MD5 7c26f217744062c6118a268690c288b5
BLAKE2b-256 7ef2b671a200076a2bfa999dec4caf24143968c8de4044d4ae112889f7a43ac4

See more details on using hashes here.

Provenance

The following attestation bundles were made for cairntir-1.12.2.tar.gz:

Publisher: release.yml on pnmcguire480/cairntir

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cairntir-1.12.2-py3-none-any.whl.

File metadata

  • Download URL: cairntir-1.12.2-py3-none-any.whl
  • Upload date:
  • Size: 293.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cairntir-1.12.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6b79adc1b92db524ad49765cdb1275ef9530b25c37bde6f67e161ba923f35d39
MD5 c056cfdd3efd6158eb69d0d35b62d149
BLAKE2b-256 a87ae27c0be85a9d28f84ce85d56a84ab0462c0cefa694d3b2a9f8b7359080f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for cairntir-1.12.2-py3-none-any.whl:

Publisher: release.yml on pnmcguire480/cairntir

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.12.3

2 files

This release

1.12.2 This release

2 files

1.12.1

2 files

1.11.0

2 files

1.10.0

2 files

1.9.0

2 files

1.8.0

2 files

1.7.1

2 files

1.7.0

2 files

1.6.2

2 files

1.6.1

2 files

1.6.0

2 files

1.5.0

2 files

1.4.1

2 files

1.4.0

2 files

1.3.0

2 files

1.2.0

2 files

1.1.2

2 files

1.1.0

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page