Decision: accepted 2026-07-27 Priority: foundation / ship blocker Hosts: Codex, Cursor, Claude Code, Qwen Code
A memory written through any supported host is the same memory seen through every other host. “Same” means:
There is no Codex memory, Cursor memory, Claude memory, or Qwen memory. There is Cairntir memory, reached through four adapters.
The core owns:
Host adapters own:
Adapters must not select a different embedder, database, schema, or memory policy.
These are volatile integration details and must remain isolated:
AGENTS.md for project instructions and codex mcp /
config.toml for MCP launchers..cursor/rules/*.mdc for project rules and
.cursor/mcp.json or ~/.cursor/mcp.json for MCP servers. Cursor CLI also
reads root AGENTS.md and CLAUDE.md.CLAUDE.md for instructions and claude mcp for MCP
registration.QWEN.md, .qwen/settings.json, and project-scoped JSONL
under ~/.qwen/projects/<sanitized-cwd>/chats.Primary references:
cairntir init --host claude|codex|cursor|qwen|all [--user] now installs
host-specific MCP wiring while keeping one host-neutral policy body:
.mcp.json or authoritative user registration through the
claude CLI; CLAUDE.md policy;.codex/config.toml or authoritative user registration
through the codex CLI; AGENTS.md policy;mcp.json; project .cursor/rules/cairntir.mdc..qwen/settings.json; QWEN.md policy.Existing JSON/TOML/instruction content is preserved. Cairntir only updates
blocks carrying its own markers and fails closed on ambiguous conflicts.
cairntir doctor inspects both project and user wiring without changing it.
Cursor’s global User Rules are managed through Cursor Settings and have no documented file-backed API. User-scope setup therefore installs the global MCP entry and reports the one manual rule step instead of claiming false success.
Transcript recovery follows the same honesty rule. Qwen Code, Claude Code, and Codex have verified JSONL adapters. Cursor documents local SQLite chat history but no stable transcript schema, so recovery returns an unsupported receipt and never probes private tables. The host-specific reader produces a host-neutral untrusted evidence record; no adapter writes a drawer.
Host/model/session provenance fields are now immutable on every write, and the
automated four-adapter continuity fixture proves that all four hosts can
write and recall through one store without changing drawer identity. Runtime
model is explicitly unknown when a host does not disclose its selected model
to the MCP subprocess; Cairntir records that limitation instead of inventing a
name.
For a temporary project and temporary Cairntir home:
The test may use adapter simulators in CI. A release candidate also requires a human-operated smoke test against current host versions because configuration surfaces change faster than the Cairntir core.
The release-candidate smoke completed on 2026-07-29 against the live canonical store:
host=codex.host=cursor.host=claude, source drawer #126, and complete verbatim content.ok, zero foreign-key errors, and no stranded
workflows.The append-only evidence also records three important integration lessons:
host=unknown and was rejected as
acceptance evidence.