Local-first AI memory engine — 4-tier memory, people graph, Bayesian beliefs. Encrypted, 62µs.
io.github.gambletan/cortex MCP Server
Local-first AI memory engine exposed via an MCP server. Cortex implements a 4-tier memory model, a people graph, and Bayesian beliefs. It is positioned as an encrypted system with reported performance of 62µs, and uses embeddings and vector search for memory and knowledge retrieval.
🛠️ Key Features
4-tier memory
People graph
Bayesian beliefs
Encrypted operation
Embeddings and vector search
🚀 Use Cases
Local-first personal AI memory
Knowledge graph–style recall using people relationships
Bayesian updating of beliefs for AI agents
Retrieval for RAG-style workflows using local embeddings and vectors
⚡ Developer Benefits
Local-first privacy and encrypted data handling
MCP integration for connecting memory to LLM/AI agent tooling
Open source (MIT) and Rust-based (per repository topic)
⚠️ Limitations
No additional MCP tool list or capabilities are provided in the available data
Browser/WASM details are referenced, but server-side behavior beyond the description is not specified
Memory for AI agents that never leaves your device.
Private. Free. Local. — a memory engine for personal AI agents.
Your AI's memory lives on your device — your data never leaves, never costs, never spies. Pure Rust. 3.8MB binary. No third-party servers in the data path, zero telemetry, zero cost. Syncs through your own cloud storage. (On-device semantic search downloads a ~30MB model once on first use, then runs fully offline — or go 100% offline with CORTEX_NO_EMBEDDINGS=1. See Security & Privacy.)
Cortex remembering across sessions — a real, local cortex-mcp-server recording
What you get
🔒 Private by default — memories live in a local SQLite file, never leave your device, zero telemetry (CI-enforced).
🧠 Real memory, not a text file — 4 tiers, multi-signal retrieval, self-correcting Bayesian beliefs, a cross-channel people graph.
⚡ Sub-millisecond — 156µs ingest, 568µs search. ~528× faster than cloud memory APIs, with no network round-trip.
🔌 Drop-in for any agent — one MCP server gives Claude Code / Claude Desktop (or any MCP client) persistent cross-session memory.
☁️ Yours across devices — optional end-to-end-encrypted sync through your own iCloud / Drive / Dropbox. No server of ours, ever.
Tell Claude "remember I deploy on Fly.io and always run tests before pushing." Open a brand-new session and ask "how do I deploy this project?" — it answers from memory, 100% on your machine.
⭐ If that's useful, give it a star — it helps others find a memory engine that respects their privacy.
LLMs start blank every session — they forget your name, your preferences, yesterday's conversation, last week's decision. The usual fixes are flat text files (no ranking, no decay), keyword grep, or cloud APIs that add 200–500ms, charge you, and ship your personal data to someone else's server. Cortex gives your AI structured, self-evolving long-term memory that persists across sessions and channels — all local, all yours. Your memories are not a cloud provider's training data, a startup's monetization asset, or a surveillance target.
Cortex vs Mem0 vs OpenAI Memory
Cortex
Mem0
OpenAI Memory
Privacy
100% local, zero cloud
Cloud API (your data on their servers)
OpenAI servers
Latency
156µs ingest, 568µs search
~200-500ms
~300-800ms
Cost
Free, forever
$99+/mo (Pro)
ChatGPT Plus ($20/mo)
Memory tiers
4 (Working/Episodic/Semantic/Procedural)
1 (flat)
1 (flat)
Bayesian beliefs
Self-correcting with evidence
No
No
People graph
Cross-channel identity resolution
Paid tier only
No
Conversation compression
Automatic session summarization
No
No
Relationship inference
Pattern-based (EN + CN)
No
No
Temporal retrieval
Intent-aware ("recently" / "first time")
No
No
Contradiction detection
Automatic with confidence scores
No
No
Consolidation
Episodic → Semantic auto-promotion
No
No
Context injection
Token-budgeted LLM-ready output
Manual
Automatic but opaque
Import/Export
Full JSON backup & restore
API only
No export
Self-hosted
Native binary, Docker, MCP
Cloud only
Cloud only
Binary size
3.8 MB
npm package
N/A
Dependencies
0 runtime services (single binary)
Node.js + cloud
N/A
Open source
MIT
Partial
No
Encryption
AES-256-GCM encrypted sync (opt-in)
No
No
Key rotation
Versioned envelopes, forward secrecy
No
No
Privacy levels
Private (default, never syncs) / Shared / Public — per-memory opt-in, demote retracts from other devices
No
No
Tool authorization
Deny-by-default capability policy on the MCP surface
No
No
Zero telemetry
No analytics, no phone-home, verifiable
Unknown
No
Cost
Free forever, unlimited
$99+/mo (Pro)
$20/mo (Plus)
Chinese NLP
Native (inference, retrieval, relationships)
No
Limited
Namespace isolation
Per-user/context memory separation
No
No
Plugin system
Compile-time hooks for ingest/retrieve/consolidation
No
No
MCP tools
30 tools for Claude/LLM integration
3rd party
N/A
Performance Benchmarks
Operation
Cortex
Mem0 (cloud)
File-based
Ingest
156µs
~200ms
~1ms
Search (top-10)
568µs
~300ms
~10ms
Context generation
621µs
~500ms
manual
Belief update
66µs
N/A
N/A
People graph
51µs
paid tier
N/A
Structured facts
45µs
N/A
N/A
1K memories search
1.6ms
~500ms
~50ms
528x faster than Mem0 cloud. With features neither Mem0 nor OpenAI Memory offer.
Note: Benchmarks include proactive inference (auto-extracting facts, preferences, relationships) on every ingest. Raw ingest without inference is ~15µs. Numbers from cargo bench on M-series Mac.
Overall 73.7% — beats Mem0 (66.9%) by +6.8%, beats OpenAI Memory (52.9%) by +20.8%
Cortex outperforms Mem0 on all 4 categories — while running 100% locally, end-to-end encrypted, at $0 cost.
Setup: Claude Sonnet 4 (QA + judge), nomic-embed-text (embeddings via Ollama), top-30 retrieval. Reproducible with that setup: python3 bench/locomo_bench.py (needs ANTHROPIC_API_KEY + a local Ollama with nomic-embed-text). Numbers measured on the v1.7 engine; the v2.2 retrieval beam fix (paraphrase recall 40%→90% at 5K, see docs/scale-test-2026-06-13.md) has not yet been re-run on LoCoMo, so these are reported as the last verified figures, not a v2.2 claim.
Architecture
Cortex implements a 4-tier memory model inspired by human cognition:
Working holds the current session scratch pad. Episodic stores raw experiences with timestamps and source metadata. The Consolidation Engine periodically promotes recurring patterns into Semantic facts and decays stale episodes. Procedural captures learned workflows and routines.
Key Components
People Graph
Cross-channel identity resolution. The same person messaging you on Telegram, emailing you, and showing up in calendar events gets unified into a single identity node. Interactions, relationship strength, and communication patterns are tracked per-person.
Bayesian Belief System
Self-correcting understanding of the world. Beliefs are formed from evidence, updated with each new observation, and can be contradicted. Confidence scores reflect actual certainty rather than recency bias.
Episodic-to-semantic promotion, decay of stale memories, and pattern extraction. Runs as a background cycle that keeps the memory store lean and queryable. Returns a report of what was promoted, decayed, and merged.
Multi-signal Retrieval
Queries combine five signals for relevance ranking:
Similarity -- vector cosine distance against query embedding
Temporal -- recency weighting with configurable decay
Salience -- importance scoring from access patterns and explicit hints
Social -- boost for memories involving specific people
Channel -- filter or boost by source channel
Context Injection Protocol
Generates LLM-ready context strings from memory state. Pass a token budget, optional channel/person filters, and get back a structured text block your LLM can consume directly.
Storage
SQLite for persistence, in-memory vector index for fast similarity search. Single-file database, no external services required. Designed for edge deployment -- runs on a laptop, a Raspberry Pi, or a server.
Cloud Sync
Sync memories across devices through your own cloud storage — no third-party server involved.
Changelog-based: Each device writes append-only operation logs to its own subfolder
No conflicts: Devices never write to the same file. Merge uses Last-Writer-Wins with Hybrid Logical Clocks
Encrypted: AES-256-GCM encryption (opt-in). Even if your cloud account is compromised, memories stay private
Tamper-evident: the sync manifest and every operation carry an HMAC; tampered or plaintext-injected oplog lines are rejected, and a manifest without integrity protection refuses to load (no key-rollback path)
Key rotation & forward secrecy: rotate to a new key version (ENC2 envelopes) without re-encrypting history; old versions stay readable, new writes are unreadable to a leaked old key
Privacy-aware, per-memory opt-in: Private memories (the default) never leave your device. Mark a memory shared to sync it; demote it back to private and a retraction deletes it from your other devices (local copy kept)
Survives restarts: sync settings persist in the database (passphrase never touches disk — macOS login Keychain or CORTEX_SYNC_PASSPHRASE); the server resumes sync and starts background pull (30s poll + fs watcher) automatically
Supported providers: iCloud Drive, Google Drive, OneDrive, Dropbox (auto-detected).
rust
use cortex_core::sync::SyncConfig;
use cortex_core::types::PrivacyLevel;
// Enable sync with encryption (settings persist; passphrase goes to the OS keychain)letconfig = SyncConfig::new(sync_dir, device_id, device_name)
.with_encryption("my-strong-passphrase");
cortex.enable_sync(config)?;
// Opt a memory into sync — everything is Private unless you say otherwise
cortex.set_memory_privacy(mem_id, PrivacyLevel::Shared { scope: "all".into() })?;
// Pull changes from other devices (also happens automatically in the background)letapplied = cortex.sync_pull()?;
println!("Applied {} remote changes", applied);
Security & Privacy
Feature
Detail
Encryption
AES-256-GCM with Argon2id key derivation (per-line random nonce)
Key rotation
Versioned ENC2 envelopes with per-version passphrase-derived keys — forward secrecy against AES-key exfiltration, no full re-encryption needed
Integrity
HMAC on the sync manifest and on every sync operation; plaintext lines in an encrypted oplog are rejected outright (injection defense)
Privacy levels
Private (default, never syncs), Shared, Public — set at ingest (privacy arg / --privacy) or later (memory_set_privacy); demoting to Private retracts the memory from other devices
Capability policy
Deny-by-default tool authorization on the MCP surface: a capabilities.json grants tool groups (read/write/sync/plugins) or exact tools; ungranted tools are invisible and uncallable; malformed policy fails closed
Query budget
Every retrieval is bounded (candidate cap + wall-clock cap) — query cost never scales with total store size; DoS guard and timing-side-channel bound in one
Secret handling
Sync passphrase is never written to disk by Cortex — macOS login Keychain or env var only; missing passphrase fails safe (sync off, never plaintext)
Memory zeroization
Sensitive data cleared from RAM on drop (zeroize crate)
Zero telemetry
No analytics, no phone-home, no user data ever leaves the device — enforced in CI (scripts/check-no-network-egress.sh): the build fails if any network/telemetry crate enters cortex-core's default tree, and the check also proves the --no-default-features binary is completely zero-network.
Embedding model fetch (one-time)
The default cortex-mcp-server enables on-device semantic search, which downloads a ~30 MB model (all-MiniLM-L6-v2) from the Hugging Face CDN on first ingest, then runs fully offline and sends none of your data. For a 100%-offline setup: run with CORTEX_NO_EMBEDDINGS=1 (keyword/FTS recall, zero network) or build --no-default-features. A one-time stderr notice is printed before any download — nothing is ever fetched silently.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
After installation, either restart your terminal or run:
bash
source"$HOME/.cargo/env"
Verify:
bash
cargo --version
Real-World Example: A Personal AI That Actually Remembers
Imagine your AI assistant across a week of real conversations:
code
# Day 1 — You chat on Telegram
You: "Sarah works at Stripe. She's interested in our API."
Cortex auto-extracts:
├── episodic memory stored (156µs)
├── fact: Sarah → works_at → Stripe (confidence: 0.70)
└── person resolved: sarah_telegram
# Day 2 — Sarah emails you
From: sarah@stripe.com
"Here's the technical spec we discussed."
Cortex:
├── person resolved: sarah@stripe.com → merged with sarah_telegram
│ (same person, different channel — automatic identity resolution)
└── fact: Sarah → sent → technical spec
# Day 3 — You ask your AI
You: "What's the status with Stripe?"
Cortex retrieves (568µs):
├── Sarah works at Stripe (semantic fact)
├── Meeting went well, interested in API (episodic, Day 1)
├── She sent technical spec (episodic, Day 2)
└── Cross-channel context: Telegram + Email unified under one person
Your AI responds with full context — no "sorry, I don't remember" 🎯
# Day 5 — New information arrives
You: "Sarah now works at Anthropic."
Cortex:
├── contradiction detected: Sarah works_at Stripe vs Sarah works_at Anthropic
├── old fact superseded + decayed: Stripe (salience ×0.3, kept as history)
├── new fact stored: Sarah → works_at → Anthropic
└── current employer now ranks first; self-correcting, no manual cleanup
(Third-party relations are extracted from natural-language verbs —
"works at / works for / joined / now works at", "runs on", "hosted in",
"manages", "part of", … — between two proper-noun entities.)
# Day 7 — Consolidation runs
Cortex auto-consolidation:
├── 3 episodic memories about Sarah → promoted to semantic summary
├── stale memories from other topics → decayed
└── pattern detected: you have recurring Monday meetings
All of this happens locally in <1ms per operation. No cloud. No API calls. No one else sees your data.
Install
Homebrew (macOS / Linux)
bash
brew tap gambletan/tap
brew install cortex-mcp-server
Cortex is published under the cortex-ai-memory name. Several similarly-named
packages on npm/PyPI are not affiliated with this project — use exactly these:
Ecosystem
Official package
Use for
Binary / MCP server
GitHub Releases, or brew install gambletan/tap/cortex-mcp-server
the memory engine (primary)
PyPI
cortex-ai-memory
Python bindings
npm
@cortex-ai-memory/cortex-memory (scoped)
OpenClaw memory plugin
⚠️ Not us: npm cortex-mcp, npm cortex-ai-memory (unscoped), PyPI cortex-memory.
The source of truth is always this repo — github.com/gambletan/cortex. When in doubt,
the binary from Releases is the canonical install.
Quick Start
rust
use cortex_core::Cortex;
// Open (or create) a memory databaseletcortex = Cortex::open("memory.db")?;
// Ingest a memory from a Telegram conversationletembedding = your_embedding_fn("Met with Alice about the Q3 roadmap");
cortex.ingest(
"Met with Alice about the Q3 roadmap",
"telegram", // source channelSome("alice_123"), // user ID (triggers identity resolution)Some(0.8), // salience hintSome(embedding), // vector embedding
)?;
// Add a semantic fact directly
cortex.add_fact(
"Alice", "works_at", "Acme Corp",
0.95, "telegram", None,
)?;
// Store a preference
cortex.add_preference("timezone", "America/Los_Angeles", 0.9)?;
// Retrieve relevant memoriesletresults = cortex.retrieve(
"What do I know about Alice?",
5, // top-kNone, // any channelNone, // any personSome(query_embedding), // vector for similarity search
)?;
// Generate LLM-ready context (token-budgeted)letcontext = cortex.get_context(
2000, // max tokensSome("telegram"), // channel filterNone, // no person filter
)?;
// Pass `context` as system/user message prefix to your LLM// Run consolidation (call periodically)letreport = cortex.run_consolidation()?;
println!("Promoted: {}, Decayed: {}", report.promoted, report.decayed);
Python Bindings
Coming soon via PyO3. The cortex-python crate will expose the full API as a native Python module:
python
from cortex import Cortex
cx = Cortex.open("memory.db")
cx.ingest("Had lunch with Bob at the Thai place", channel="imessage", user_id="bob")
results = cx.retrieve("Where does Bob like to eat?", limit=5)
Integration with unified-channel-hub
Cortex is designed as the memory layer for unified-channel-hub. Messages flow in from any channel adapter, Cortex ingests and indexes them, and the context injection protocol feeds relevant memory back to your LLM before each response.
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o")
asyncwith MultiServerMCPClient({
"cortex": {
"command": "cortex-mcp-server",
"args": ["~/.cortex/memory.db"]
}
}) as client:
agent = create_react_agent(model, client.get_tools())
# Agent now has all 30 Cortex memory tools
result = await agent.ainvoke({
"messages": [{"role": "user", "content": "What do you remember about Alice?"}]
})
Your LangGraph agent gets instant access to memory_search, memory_ingest, fact_add, belief_observe, person_resolve, and 25 more tools — all running locally.
Integration with DeerFlow (ByteDance)
Cortex works as a persistent memory layer for DeerFlow — ByteDance's open-source multi-agent orchestration platform. Zero code changes needed.
yaml
# Add to DeerFlow config.yamlmcp_servers:cortex-memory:command:cortex-mcp-serverargs:-~/.cortex/deerflow.db
All DeerFlow agents (Telegram, Slack, Feishu) get instant access to 30 memory tools — cross-session memory, fact storage, people graph, and belief tracking across all channels.
CLI
Cortex doubles as a standalone CLI tool — no MCP client required.
code
$ cortex-mcp-server --help
Cortex memory engine — MCP server & CLI tools
Usage: cortex-mcp-server [DB_PATH] [COMMAND]
Commands:
ingest Store a new memory
search Search memories
stats Show memory statistics
sync Show cloud sync status and detected providers
export Export all data as JSON
import Import data from JSON file
info Show version, DB path, and capabilities
help Print this message or the help of the given subcommand(s)
Arguments:
[DB_PATH] Path to the Cortex database file (default: ~/.cortex/memory.db)
Options:
-h, --help Print help
-V, --version Print version
Examples:
bash
# Store a memory
cortex-mcp-server ~/.cortex/memory.db ingest "Met with Alice about Q3 roadmap"
cortex-mcp-server ~/.cortex/memory.db ingest -c telegram "Sarah now works at Anthropic"# Search
cortex-mcp-server ~/.cortex/memory.db search "Alice"
cortex-mcp-server ~/.cortex/memory.db search -l 10 "Q3 roadmap"# Stats
cortex-mcp-server ~/.cortex/memory.db stats
# Cloud sync
cortex-mcp-server ~/.cortex/memory.db sync# status
cortex-mcp-server ~/.cortex/memory.db syncenable# auto-detect provider
cortex-mcp-server ~/.cortex/memory.db syncenable -p icloud # specific provider
cortex-mcp-server ~/.cortex/memory.db sync pull # pull remote changes# Export / Import (backup & restore)
cortex-mcp-server ~/.cortex/memory.db export -o backup.json
cortex-mcp-server ~/.cortex/new.db import backup.json
# Version & capabilities
cortex-mcp-server ~/.cortex/memory.db info
No subcommand = MCP stdio mode (for Claude Code / Claude Desktop integration).
MCP Server (Claude Code / Claude Desktop)
Cortex ships as an MCP server — works with any MCP-compatible client.
# Global (all projects)
claude mcp add cortex --scope user -- ~/.local/bin/cortex-mcp-server ~/.cortex/memory.db
# Or per-project
claude mcp add cortex -- ~/.local/bin/cortex-mcp-server ~/.cortex/memory.db
Claude Desktop — add to ~/Library/Application Support/Claude/claude_desktop_config.json:
Add to ~/.claude/settings.json → permissions.allow:
json
"mcp__cortex__*"
Note: MCP tool permissions do not support parentheses format (e.g. mcp__cortex__memory_ingest(*)). Use the wildcard mcp__cortex__* instead.
4. Make it automatic — add to your CLAUDE.md (project or global ~/.claude/CLAUDE.md):
markdown
# Memory (Cortex)
You have persistent memory via Cortex MCP tools. Use them automatically:
- Start of conversation: call `memory_context` to load what you know about the user
- When the user shares a preference, fact, or personal info: call `memory_ingest` to store it
- When you learn a structured fact: call `fact_add` (e.g. "User works_at Google")
- When you detect a preference: call `preference_set` (e.g. editor=neovim)
- When evidence supports or contradicts a belief: call `belief_observe`- When talking to someone new: call `person_resolve` to track identity
- Periodically: call `memory_consolidate` to clean up stale memories
Now every new Claude Code session automatically loads your memory context — zero manual effort. Claude learns as you work and remembers across sessions.
Cross-Device Memory Sync
Your Claude's memory follows you across all your devices — MacBook, iMac, work laptop — through your own cloud storage.
Enable sync (one command):
code
You: "Enable cross-device memory sync"
Claude calls sync_enable → auto-detects iCloud Drive →
generates device ID + AES-256-GCM encryption key → done.
Output:
Provider: iCloud Drive
Encryption: AES-256-GCM
Passphrase: a1b2c3... ← save this for your other devices
On your second device — one script does everything (build/install, wait for iCloud, join, restore):
bash
git clone https://github.com/gambletan/cortex && cortex/scripts/setup-device-sync.sh
# Prompts for your passphrase (hidden input; or set CORTEX_SYNC_PASSPHRASE)# → full restore on join, passphrase saved to that device's login Keychain
Or conversationally:
code
You: "Enable sync with passphrase a1b2c3..."
Claude calls sync_enable(passphrase: "a1b2c3...") →
connects to the same iCloud sync folder → pulls all memories.
Now both devices share the same memory — and keep sharing it
automatically (background sync: 30s poll + filesystem watcher).
What syncs and what doesn't:
Private memories (default) never leave your device. Opt in per memory: memory_ingest with privacy: "shared", cortex-mcp-server ingest --privacy shared, or memory_set_privacy on an existing memory
Demote a shared memory back to private and it is retracted (deleted) from your other devices — the local copy stays
All sync data is AES-256-GCM encrypted with HMAC integrity — even if your cloud account is compromised, memories stay private and tampering is detected
Sync survives restarts: settings persist, the passphrase lives in the OS keychain, the server resumes automatically
No server, no API, no account — just your own cloud folder
CLI alternative:
bash
# Device A
cortex-mcp-server syncenable# Save the passphrase from the output# Device B
cortex-mcp-server syncenable --passphrase "your-passphrase-from-device-A"# Manual pull (background sync also pulls automatically)
cortex-mcp-server sync pull
Multi-Project Isolation
Working across multiple projects? Use separate databases for physical memory isolation — no cross-project leakage, zero code changes needed.
code
~/.cortex/
├── global.db # User preferences, people graph, cross-project knowledge
├── my-app.db # Project A memories
└── my-api.db # Project B memories
Global config (~/.claude/settings.json) — user-level knowledge:
Then add these memory isolation rules to your project's CLAUDE.md:
markdown
## Memory Isolation
Two Cortex MCP servers: `cortex-project` (project DB) and `cortex-global` (global DB).
### Write Policy- Save to `cortex-project` if the memory is about this repo's architecture, code,
modules, tests, workflows, configs, bugs, decisions, or terminology.
- Save to `cortex-global` only for long-term user preferences, communication style,
cross-project habits, or personal background useful across repos.
-**Default: if uncertain, save to `cortex-project`.**### Read Policy1. Query `cortex-project` first.
2. Query `cortex-global` second, only for user-level preferences.
3. Prefer project memory when they conflict.
### Anti-Leak Rules- Never auto-copy from `cortex-project` into `cortex-global`.
- Never store repo-specific paths, module names, or account names in `cortex-global`.
- Never treat project implementation details as user-global preferences.
### Update Rule- Cortex is append-only. To update: search old entry → delete → ingest new.
This gives you two independent Cortex instances per project — complete isolation with shared user knowledge.
30 Tools
Tool access is governed by an optional deny-by-default capability policy: drop a
capabilities.json next to your database ({"version":1,"grants":["read","write"]})
and only granted tool groups (read / write / sync / plugins / all) or exact
tool names are listed and callable. No policy file = everything enabled (legacy).
Tool
Purpose
memory_ingest
Store a memory (text, channel, person context, optional privacy)
memory_set_privacy
Change a memory's privacy level — promote to shared to sync it, demote to private to retract it from other devices
Cortex ships a lightweight HTTP server for integration with any language or framework. Binds to 127.0.0.1 by default — your data never leaves your machine.
bash
# Build & run
cargo build --release -p cortex-http
./target/release/cortex-http --port 3315 --db ~/.cortex/memory.db
# Or via Docker (pre-built from GHCR)
docker run -v ~/.cortex:/data -p 3315:3315 ghcr.io/gambletan/cortex/cortex-http:latest
# Or build locally
docker build -t cortex .
docker run -v ~/.cortex:/data -p 3315:3315 cortex
Endpoints
Method
Path
Description
GET
/health
Health check
POST
/v1/memories
Ingest a memory
POST
/v1/memories/search
Semantic search
GET
/v1/memories/context
Generate LLM context
POST
/v1/memories/consolidate
Run consolidation cycle
POST
/v1/memories/infer
Preview inference (no store)
POST
/v1/facts
Add a semantic fact
POST
/v1/facts/contradictions
Check for contradictions
POST
/v1/preferences
Set a preference
GET
/v1/beliefs
List beliefs
POST
/v1/beliefs/observe
Update belief with evidence
POST
/v1/people
Resolve person identity
POST
/v1/memories/compress
Compress old conversation sessions
POST
/v1/relationships/extract
Extract relationships from text
GET
/v1/export
Export all data (JSON backup)
POST
/v1/import
Import data from backup
Examples
bash
# Store a memory
curl -X POST http://localhost:3315/v1/memories \
-H 'Content-Type: application/json' \
-d '{"text": "I prefer dark mode", "channel": "cli"}'# Search
curl -X POST http://localhost:3315/v1/memories/search \
-H 'Content-Type: application/json' \
-d '{"query": "preferences", "limit": 5}'# Export all data (backup to iCloud, NAS, etc.)
curl http://localhost:3315/v1/export > ~/iCloud/cortex-backup.json
# Import from backup
curl -X POST http://localhost:3315/v1/import \
-H 'Content-Type: application/json' \
-d @~/iCloud/cortex-backup.json