Cortex Memory Engine

io.github.gambletan由 GitHub 帳號 gambletan 發布v1.8.0更新於 Nov 3, 2026

Local-first AI memory engine — 4-tier memory, people graph, Bayesian beliefs. Encrypted, 62µs.

發布方自己的服務:Memory.fit

已驗證STDIO僅桌面知識與記憶AI 與機器學習

概覽

AI 產生的概覽

本地優先的記憶引擎,讓 AI 助理擁有保存在本機 SQLite 檔案中的持久化結構化長期記憶。

可以做什麼
  • 在四個記憶層級中儲存、檢索記憶,並產生受 token 預算限制的上下文,支援批次寫入、壓縮、衰減、整併、封存、還原與刪除。
  • 記錄與查詢結構化事實、偏好與貝氏信念,並偵測事實矛盾。
  • 跨頻道解析、列出與合併人物身分,並從文字中擷取關係。
  • 啟用、檢視並拉取經使用者自有雲端儲存的端對端加密同步,並設定單筆記憶的隱私等級。
適用情境
適合希望助理跨工作階段、跨頻道記住偏好、事實與過往對話,又不願把個人資料交給託管記憶服務的情境。適用於個人代理、Claude Code 或 Desktop、LangGraph 以及需要本機記憶層的多代理系統。
執行需求
以本機程序執行;清單列出透過 stdio 執行的 Docker 映像(ghcr.io/gambletan/cortex),README 另提供 Homebrew、Rust/cargo 建置與本機 HTTP 服務方式。本機使用不需帳號或 API 金鑰。裝置端語意檢索會在首次寫入時從 Hugging Face CDN 下載約 30 MB 模型,除非以 CORTEX_NO_EMBEDDINGS=1 關閉。選用同步需要來自 macOS 鑰匙圈或環境變數的通行碼。
安裝前請注意
助理可以寫入、修改並永久刪除記憶,建議設定預設拒絕的能力政策檔案。選用的 Muse 分享會把經核准的摘錄傳送到託管雲端服務及 Meta,對方可能保留無法刪除的副本。選用同步會把加密資料存入使用者自己的雲端儲存。README 提醒名稱相近的 npm 與 PyPI 套件並非官方發布。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Cortex Memory Engine,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Cortex

[GitHub stars] [License: MIT]

🧠 Try Cortex in your browser — zero install, 124KB WASM, runs entirely client-side.

If Cortex helps your AI remember, give it a ⭐ — it takes 1 second and helps others discover the project.

中文 | 日本語 | 한국어

Local memory for personal AI agents.

Private. Free. Local. — a memory engine for personal AI agents.

Your AI's memory archive lives on your device. Pure Rust. 3.8MB binary. The local engine needs no hosted service and collects zero telemetry. Optional encrypted sync uses your own cloud storage; optional Muse sharing sends only the excerpts you approve to Cortex Cloud and Meta. (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; sync and Muse sharing require explicit opt-in. 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.
  • 🤝 Connect Meta Muse to chosen excerpts — your archive stays local. The optional service at https://cortex.alvinsclub.ai serves only your approved export, with daily disclosure limits and revocation. The server and Meta can read shared excerpts. Setup and privacy limits →
  • ☁️ Yours across devices — optional end-to-end-encrypted sync through your own iCloud / Drive / Dropbox; this sync needs no Cortex server.

See it remember across sessions — ~30 seconds:

bash
brew install gambletan/tap/cortex-mcp-server          # or: cargo build --release -p cortex-mcp-serverclaude mcp add cortex-memory -- cortex-mcp-server ~/.cortex/memory.db

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

CortexMem0OpenAI Memory
PrivacyLocal archive; optional Muse export to cloudCloud API (your data on their servers)OpenAI servers
Latency156µs ingest, 568µs search~200-500ms~300-800ms
CostFree, forever$99+/mo (Pro)ChatGPT Plus ($20/mo)
Memory tiers4 (Working/Episodic/Semantic/Procedural)1 (flat)1 (flat)
Bayesian beliefsSelf-correcting with evidenceNoNo
People graphCross-channel identity resolutionPaid tier onlyNo
Conversation compressionAutomatic session summarizationNoNo
Relationship inferencePattern-based (EN + CN)NoNo
Temporal retrievalIntent-aware ("recently" / "first time")NoNo
Contradiction detectionAutomatic with confidence scoresNoNo
ConsolidationEpisodic → Semantic auto-promotionNoNo
Context injectionToken-budgeted LLM-ready outputManualAutomatic but opaque
Import/ExportFull JSON backup & restoreAPI onlyNo export
Self-hostedNative binary, Docker, MCPCloud onlyCloud only
Binary size3.8 MBnpm packageN/A
Dependencies0 runtime services (single binary)Node.js + cloudN/A
Open sourceMITPartialNo
EncryptionAES-256-GCM encrypted sync (opt-in)NoNo
Key rotationVersioned envelopes, forward secrecyNoNo
Privacy levelsPrivate (default, never syncs) / Shared / Public — per-memory opt-in, demote retracts from other devicesNoNo
Tool authorizationDeny-by-default capability policy on the MCP surfaceNoNo
Zero telemetryNo analytics, no phone-home, verifiableUnknownNo
CostFree forever, unlimited$99+/mo (Pro)$20/mo (Plus)
Chinese NLPNative (inference, retrieval, relationships)NoLimited
Namespace isolationPer-user/context memory separationNoNo
Plugin systemCompile-time hooks for ingest/retrieve/consolidationNoNo
MCP tools30 tools for Claude/LLM integration3rd partyN/A

Performance Benchmarks

OperationCortexMem0 (cloud)File-based
Ingest156µs~200ms~1ms
Search (top-10)568µs~300ms~10ms
Context generation621µs~500msmanual
Belief update66µsN/AN/A
People graph51µspaid tierN/A
Structured facts45µsN/AN/A
1K memories search1.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.

LoCoMo Benchmark (ACL 2024)

Academic-grade long-term conversation memory evaluation — 10 conversations, 1540 QA pairs across 4 categories.

SystemSingle-hopMulti-hopOpen-domainTemporalOverall
Backboard89.4%75.0%91.2%91.9%90.0%
MemMachine v0.2————84.9%
Cortex72.5%59.5%88.8%74.1%73.7%
Mem0-Graph65.7%47.2%75.7%58.1%68.4%
Mem067.1%51.2%72.9%55.5%66.9%
OpenAI Memory————52.9%

Key findings:

  • Open-domain 88.8% — leads Mem0 (72.9%) by +15.9%
  • Temporal 74.1% — leads Mem0 (55.5%) by +18.6%
  • Single-hop 72.5% — leads Mem0 (67.1%) by +5.4%
  • Multi-hop 59.5% — leads Mem0 (51.2%) by +8.3%
  • 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 Memory    |  Current session context                    +---------------------+                              |                    +---------------------+                    |   Episodic Memory   |  Raw experiences: conversations, events, observations                    +---------------------+                              |  consolidation (decay, promotion, pattern extraction)                    +---------------------+                    |   Semantic Memory   |  Distilled facts, preferences, relationships                    +---------------------+                              |                    +---------------------+                    | Procedural Memory   |  Learned routines, user-specific workflows                    +---------------------+

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.

Bot integration architecture

For a hosted Bot with existing PostgreSQL memory and account permissions, Cortex is an optional derived retrieval backend behind its MemoryManager. PostgreSQL remains the authority for confirmed values, scope, provenance, revisions and withdrawal; ContextProjector remains the single model-context composer, and Workflow keeps execution and approvals. Search hits must pass current authoritative validation before entering model context. A controlled projection store must not import personal archives or enable sync, automatic inference or consolidation by default.

The controlled API contract documents the implemented ControlledStore Python interface, snapshot/replay lifecycle and error codes. The implementation plan separates Cortex-side acceptance from host-owned PostgreSQL and Bot integration. Package publication and Bot deployment are separate steps; existing personal-agent interfaces remain available.

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.

rust
cortex.observe_belief("user_prefers_morning_meetings", true, 0.8)?;cortex.observe_belief("user_prefers_morning_meetings", false, 0.6)?;// Confidence adjusts automatically via Bayesian update

Consolidation Engine

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.

Device A (Mac)              Your Cloud Storage              Device B (iPhone)┌──────────┐         ┌──────────────────────┐         ┌──────────┐│ SQLite DB │ ──W──>  │ iCloud / GDrive /    │  <──R── │ SQLite DB││ (local)   │         │ OneDrive / Dropbox   │         │ (local)  ││           │ <──R──  │                      │  ──W──> │          │└──────────┘         └──────────────────────┘         └──────────┘
  • 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)let config = 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 otherwisecortex.set_memory_privacy(mem_id, PrivacyLevel::Shared { scope: "all".into() })?;
// Pull changes from other devices (also happens automatically in the background)let applied = cortex.sync_pull()?;println!("Applied {} remote changes", applied);

Security & Privacy

FeatureDetail
EncryptionAES-256-GCM with Argon2id key derivation (per-line random nonce)
Key rotationVersioned ENC2 envelopes with per-version passphrase-derived keys — forward secrecy against AES-key exfiltration, no full re-encryption needed
IntegrityHMAC on the sync manifest and on every sync operation; plaintext lines in an encrypted oplog are rejected outright (injection defense)
Privacy levelsPrivate (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 policyDeny-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 budgetEvery 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 handlingSync passphrase is never written to disk by Cortex — macOS login Keychain or env var only; missing passphrase fails safe (sync off, never plaintext)
Memory zeroizationSensitive data cleared from RAM on drop (zeroize crate)
Zero telemetryNo analytics or telemetry. Network dependencies for the local core are 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.
Muse sharing (opt-in)Hosted Cortex Cloud serves only approved excerpts, using OAuth, signed device management, daily budgets and metadata-only audits. muse_unshare removes an excerpt; muse_disconnect deletes the cloud tenant. A self-hosted gateway is also available. Muse may retain disclosed copies; Cortex cannot erase them. Guide
No accounts for local useThe local engine needs no API key, registration or cloud service. Hosted Muse sharing creates a device-managed cloud tenant without a web account.

See SECURITY.md for the full threat model.

Prerequisites

Install the Rust toolchain (provides cargo):

bash
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:

# Day 1 — You chat on TelegramYou: "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 youFrom: [email protected]"Here's the technical spec we discussed."
  Cortex:  ├── person resolved: [email protected] → merged with sarah_telegram  │   (same person, different channel — automatic identity resolution)  └── fact: Sarah → sent → technical spec
# Day 3 — You ask your AIYou: "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 arrivesYou: "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/tapbrew install cortex-mcp-server

From source

bash
cargo build --release -p cortex-mcp-servercp target/release/cortex-mcp-server ~/.local/bin/

Official packages (avoid look-alikes)

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:

EcosystemOfficial packageUse for
Binary / MCP serverGitHub Releases, or brew install gambletan/tap/cortex-mcp-serverthe memory engine (primary)
PyPIcortex-ai-memoryPython 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 databaselet cortex = Cortex::open("memory.db")?;
// Ingest a memory from a Telegram conversationlet embedding = your_embedding_fn("Met with Alice about the Q3 roadmap");cortex.ingest(    "Met with Alice about the Q3 roadmap",    "telegram",               // source channel    Some("alice_123"),         // user ID (triggers identity resolution)    Some(0.8),                 // salience hint    Some(embedding),           // vector embedding)?;
// Add a semantic fact directlycortex.add_fact(    "Alice", "works_at", "Acme Corp",    0.95, "telegram", None,)?;
// Store a preferencecortex.add_preference("timezone", "America/Los_Angeles", 0.9)?;
// Retrieve relevant memorieslet results = cortex.retrieve(    "What do I know about Alice?",    5,                         // top-k    None,                      // any channel    None,                      // any person    Some(query_embedding),     // vector for similarity search)?;
// Generate LLM-ready context (token-budgeted)let context = cortex.get_context(    2000,                      // max tokens    Some("telegram"),          // channel filter    None,                      // no person filter)?;// Pass `context` as system/user message prefix to your LLM
// Run consolidation (call periodically)let report = cortex.run_consolidation()?;println!("Promoted: {}, Decayed: {}", report.promoted, report.decayed);

Python Bindings

Native module built with PyO3, published on PyPI as cortex-ai-memory (pip install cortex-ai-memory):

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.

Telegram ─┐                          ┌─ ContextDiscord  ─┤  unified-channel-hub  →  │  Cortex  →  LLMEmail    ─┤  (ingest)                 │  (retrieve + inject)Calendar ─┘                          └─ Response

Integration with LangGraph

Add persistent memory to any LangGraph agent via langchain-mcp-adapters — no custom code needed.

python
from langchain_mcp_adapters.client import MultiServerMCPClientfrom langgraph.prebuilt import create_react_agentfrom langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o")
async with 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-server    args:      - ~/.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.

$ cortex-mcp-server --helpCortex 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  digest  Show weekly memory digest  gateway Muse gateway: share an explicit slice of memory with Meta Muse over remote MCP  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 memorycortex-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"
# Searchcortex-mcp-server ~/.cortex/memory.db search "Alice"cortex-mcp-server ~/.cortex/memory.db search -l 10 "Q3 roadmap"
# Statscortex-mcp-server ~/.cortex/memory.db stats
# Cloud synccortex-mcp-server ~/.cortex/memory.db sync                        # statuscortex-mcp-server ~/.cortex/memory.db sync enable                  # auto-detect providercortex-mcp-server ~/.cortex/memory.db sync enable -p icloud        # specific providercortex-mcp-server ~/.cortex/memory.db sync pull                    # pull remote changes
# Export / Import (backup & restore)cortex-mcp-server ~/.cortex/memory.db export -o backup.jsoncortex-mcp-server ~/.cortex/new.db import backup.json
# Version & capabilitiescortex-mcp-server ~/.cortex/memory.db info
# Meta Muse gateway (see docs/muse.md)cortex-mcp-server gateway allow "I prefer aisle seats"   # export one memory to Musecortex-mcp-server gateway preview "booking a flight"      # exactly what Muse would getcortex-mcp-server gateway serve --oauth --public-url https://<you>.ts.net   # Muse signs in with OAuthcortex-mcp-server gateway connect K7QM-2XDF               # approve a sign-in, on your computer onlycortex-mcp-server gateway off                             # kill switch

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.

Setup

1. Build & install the binary:

bash
mkdir -p ~/.local/bin ~/.cortexcargo build --release -p cortex-mcp-servercp target/release/cortex-mcp-server ~/.local/bin/

2. Register as MCP server:

Claude Code (CLI):

bash
# Global (all projects)claude mcp add cortex --scope user -- ~/.local/bin/cortex-mcp-server ~/.cortex/memory.db
# Or per-projectclaude mcp add cortex -- ~/.local/bin/cortex-mcp-server ~/.cortex/memory.db

Claude Desktop — add to ~/Library/Application Support/Claude/claude_desktop_config.json:

json
{  "mcpServers": {    "cortex": {      "command": "/Users/you/.local/bin/cortex-mcp-server",      "args": ["/Users/you/.cortex/memory.db"]    }  }}

3. Allow tools in "don't ask" mode:

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

5. Auto-inject memory on session start (Claude Code hooks — fully automatic):

Create ~/.claude/hooks/cortex-memory-inject.sh:

bash
#!/bin/bashCORTEX_BIN="${CORTEX_BIN:-$HOME/.local/bin/cortex-mcp-server}"CORTEX_DB="${CORTEX_DB:-$HOME/.cortex/memory.db}"[ -x "$CORTEX_BIN" ] || exit 0
printf '%s\n%s\n%s\n' \  '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"hook","version":"1.0"}}}' \  '{"jsonrpc":"2.0","method":"notifications/initialized"}' \  '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"memory_context","arguments":{"max_tokens":1500}}}' \  | "$CORTEX_BIN" "$CORTEX_DB" 2>/dev/null \  | grep '"id":2' \  | python3 -c "import sys,json; r=json.load(sys.stdin); print(r['result']['content'][0]['text'])" 2>/dev/null

Add to ~/.claude/settings.json:

json
{  "hooks": {    "SessionStart": [      {        "matcher": "",        "hooks": [          {            "type": "command",            "command": "~/.claude/hooks/cortex-memory-inject.sh"          }        ]      }    ]  }}

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):

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:

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 itautomatically (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 Acortex-mcp-server sync enable# Save the passphrase from the output
# Device Bcortex-mcp-server sync enable --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.

~/.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:

json
{  "mcpServers": {    "cortex-global": {      "command": "~/.local/bin/cortex-mcp-server",      "args": ["~/.cortex/global.db"]    }  },  "permissions": { "allow": ["mcp__cortex-global__*", "mcp__cortex-project__*"] }}

Per-project config (~/.claude/projects/<path>/settings.json) — project-specific:

json
{  "mcpServers": {    "cortex-project": {      "command": "~/.local/bin/cortex-mcp-server",      "args": ["~/.cortex/my-app.db"]    }  }}

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).

ToolPurpose
memory_ingestStore a memory (text, channel, person context, optional privacy)
memory_set_privacyChange a memory's privacy level — promote to shared to sync it, demote to private to retract it from other devices
memory_searchSemantic search across all memory tiers
memory_contextGenerate LLM-ready context summary (token-budgeted)
memory_consolidateRun decay + promotion + sweep cycle
memory_inferPreview inference without storing
memory_compressCompress old conversation sessions
memory_statsGet memory statistics (counts per tier, index size)
memory_decayRun temporal decay on episodic memories
belief_observeUpdate a Bayesian belief with evidence
belief_listQuery beliefs above confidence threshold
fact_addStore structured knowledge (subject-predicate-object)
fact_queryQuery facts by entity (SQL-indexed)
preference_setStore user preference with confidence
preference_queryQuery preferences by key pattern
person_resolveCross-channel identity resolution
person_listList all known people
contradiction_checkCheck for fact contradictions
relationship_extractExtract relationships from text
sync_statusCloud sync status (provider, devices, pending ops)
sync_providersDetect available cloud storage providers
sync_enableEnable cross-device cloud sync with optional encryption
sync_pullPull and apply remote changes from other devices
memory_archiveArchive a memory to cold storage
memory_restoreRestore an archived memory back to an active tier
memory_deletePermanently delete a memory by ID
memory_ingest_batchIngest multiple memories in a single transaction
tag_list_taxonomyList all tags in use across memories with counts
namespace_listList all namespaces with memory counts
person_mergeMerge two person identities into one

OpenClaw Plugin

Give your OpenClaw agent persistent memory with auto-recall and auto-capture.

Install:

bash
# 1. Install Cortex binarycurl -fsSL https://raw.githubusercontent.com/gambletan/cortex/main/install.sh | bash
# 2. Install the OpenClaw pluginopenclaw plugin add @cortex-ai-memory/cortex-memory

Configure (optional — works with defaults):

json
{  "plugins": {    "@cortex-ai-memory/cortex-memory": {      "autoCapture": true,      "autoRecall": true,      "topK": 10    }  }}

What it does:

  • autoCapture: Automatically stores conversation context after each turn
  • autoRecall: Injects relevant memories before each turn (your agent "remembers")
  • 7 tools: memory_search, memory_store, fact_add, belief_observe, person_resolve, and more

See openclaw-plugin/README.md for full configuration options.

Project Structure

cortex/├── cortex-core/          # Rust core library (all memory logic)│   ├── src/│   │   ├── lib.rs              # Cortex entry point│   │   ├── types.rs            # MemObject, MemoryTier, etc.│   │   ├── inference.rs        # Proactive inference (EN + CN)│   │   ├── episode.rs          # Episodic memory store│   │   ├── semantic.rs         # Semantic facts + preferences│   │   ├── working.rs          # Working memory (session scratch pad)│   │   ├── procedural.rs       # Learned routines│   │   ├── people.rs           # People graph + identity resolution│   │   ├── belief.rs           # Bayesian belief system│   │   ├── consolidation.rs    # Episodic→semantic promotion + decay│   │   ├── retrieval.rs        # Multi-signal retrieval engine│   │   ├── context.rs          # LLM context generation│   │   ├── sync/               # Cloud sync (oplog, HLC, merge, encryption)│   │   └── storage/            # SQLite + in-memory vector index│   └── benches/                # Performance benchmarks├── cortex-http/          # HTTP REST API (axum, local-only)├── cortex-mcp-server/    # MCP server binary (3.8MB)├── cortex-python/        # Python bindings (PyO3, WIP)├── openclaw-plugin/      # OpenClaw memory plugin├── Dockerfile            # Self-hosted Docker image└── Cargo.toml            # Workspace root

HTTP API

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 & runcargo 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 locallydocker build -t cortex .docker run -v ~/.cortex:/data -p 3315:3315 cortex

Endpoints

MethodPathDescription
GET/healthHealth check
POST/v1/memoriesIngest a memory
POST/v1/memories/searchSemantic search
GET/v1/memories/contextGenerate LLM context
POST/v1/memories/consolidateRun consolidation cycle
POST/v1/memories/inferPreview inference (no store)
POST/v1/factsAdd a semantic fact
POST/v1/facts/contradictionsCheck for contradictions
POST/v1/preferencesSet a preference
GET/v1/beliefsList beliefs
POST/v1/beliefs/observeUpdate belief with evidence
POST/v1/peopleResolve person identity
POST/v1/memories/compressCompress old conversation sessions
POST/v1/relationships/extractExtract relationships from text
GET/v1/exportExport all data (JSON backup)
POST/v1/importImport data from backup

Examples

bash
# Store a memorycurl -X POST http://localhost:3315/v1/memories \  -H 'Content-Type: application/json' \  -d '{"text": "I prefer dark mode", "channel": "cli"}'
# Searchcurl -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 backupcurl -X POST http://localhost:3315/v1/import \  -H 'Content-Type: application/json' \  -d @~/iCloud/cortex-backup.json

Roadmap

  • v0.2 ✅ — Local embedding integration (all-MiniLM-L6-v2/ONNX), batch queries, importance-aware decay + auto-consolidation
  • v0.3 ✅ — Proactive inference (auto-extract facts), temporal awareness, contradiction detection, Chinese NLP
  • v0.4 ✅ — HTTP REST API (axum), import/export (JSON backup), Docker packaging
  • v0.5 ✅ — Conversation compression, relationship inference (EN + CN), temporal retrieval enhancement, 112 tests
  • v1.0 ✅ — Feature comparison table, benchmark update, 18-feature Cortex vs Mem0 vs OpenAI
  • v1.1 ✅ — HNSW vector index (50K search: 12ms → 91µs), Python SDK (pip install cortex-ai-memory)
  • v1.2 ✅ — Negation detection (EN + CN), multi-hop retrieval, 117 tests
  • v1.3 ✅ — Context quality optimization, query expansion, bidirectional relationships, 126 tests
  • v1.4 ✅ — Incremental HNSW, SQL-indexed entity queries, LLM summarizer hook, 18 MCP tools, configurable decay, LLM-assisted inference, 131 tests
  • v1.5 ✅ — Docker image (GHCR auto-publish), batch ingest, dedup, namespace isolation, plugin system, event bus, archival, 351 tests
  • v1.6 ✅ — Int8 quantization (75% storage reduction), materialized column indexes, FTS5 triggers, LRU caches (MemObject + entity-facts), rayon parallel decay, Arc embedding, generation-based cache invalidation, 25 MCP tools, batch inference, enhanced Chinese NLP
  • v1.7 ✅ — Cloud sync (changelog-based, HLC ordering, LWW merge), AES-256-GCM encryption (Argon2id KDF), privacy enforcement (Private/Shared/Public), zeroize (memory wiping), SECURITY.md, 27 MCP tools, 400+ tests
  • v2.0 ✅ — Background sync (filesystem watcher + polling), Web Dashboard, Homebrew tap, integration docs (CrewAI/AutoGen/LangGraph/DeerFlow), /v1/memories/recent API, 12 rounds Codex review fixes, 489 tests
  • v2.1 ✅ — WASM build (124KB, runs entirely in the browser, GitHub Pages demo)
  • v2.2 ✅ — Security hardening series (self-evolution iterations 11–17): manifest + per-operation HMAC, plaintext-injection rejection, timing-attack hardening, key rotation with forward secrecy (ENC2), bounded query budget, deny-by-default MCP capability policy, per-memory privacy opt-in with cross-device retraction, persistent sync (Keychain) + auto background sync, frecency ranking, one-shot device setup script, 30 MCP tools, 500+ tests
  • v2.3 — Mobile targets (iOS/Android), multi-modal memory

If you find Cortex useful, please consider giving it a star ⭐ — it helps others discover the project and motivates continued development!

[Star History Chart]

License

MIT

來源:README.md,提交 de02006

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v1.8.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Memory 整合