Skip to main content
Glama

Current source: local runtime migration

The current Rust workspace uses asupersync, in-process kernel calls, CLI and MCP stdio. It no longer builds an HTTP listener, network proxy, or Tokio runtime. Start with cargo build -p cortex-daemon, cortex setup, then cortex mcp --agent <name> or cortex op <operation>. cortex serve is an optional bounded maintenance worker, not a server.

The Control Center, HTTP SDKs, downloads, and HTTP/service instructions below describe the earlier tagged product and are not compatible with this source runtime. No external installations or existing memory databases are migrated by changing this repository. See ARCHITECTURE.md and crate contracts for the current API and cancellation boundaries.

Automatic observation cycle (unreleased)

The local operator can register a logical source, then submit normalized observations without any model-generated diary:

cortex capture register --source worklog --scope project --role tool_report
printf '%s\n' '{"event_key":"run-123","text":"Observed tool output, retained verbatim","observed_at":null}' |
  cortex capture tail --source worklog --generation session-1 --offset 0

The receipt reports next_offset and accepted source IDs. Continue from that byte offset; a trailing partial JSONL record is not acknowledged. capture put accepts one JSON observation. capture get --id <source_id> returns its exact retained text. capture disable --source worklog revokes the source; capture enable explicitly reauthorizes it. --quiet suppresses successful output for capture-only adapters. Registration is per local principal, and normalized event bodies cannot supply their own actor or grant.

File intake routes the state-file, project-memory and configured custom-source indexers through the same transactional observation capture. Register each file using file:<canonical absolute path> as its source key before importing it:

cortex capture register --source 'file:/absolute/canonical/path/notes.md' --scope project
cortex capture file --path /absolute/canonical/path/notes.md --quiet

File capture preserves the entire UTF-8 payload, including frontmatter, whitespace and the tail. Files exceeding the registered limit or the 1 MiB file ceiling fail without acknowledging a prefix. Revision keys include file metadata and a content digest; unchanged retries replay their receipts. File modification time is retained as observed_at, not interpreted as the time an assertion became true. Indexer errors propagate; earlier files committed before a later failure can be safely replayed. Legacy filename-only aliases are not automatically merged or rewritten because their provenance can be ambiguous.

The native cycle now includes registered-source inventory, resumable bootstrap, exact any-cue retrieval, reverse-indexed active needs, qualified delivery and opt-in scoped associations:

cortex capture inventory
cortex capture bootstrap --revision '<revision-from-inventory>' --max-sources 16 --max-bytes 16777216
cortex capture reconcile --revision '<revision-from-inventory>'
cortex capture query --scope project --query 'retry'
printf '%s' '{"id":"current-task","scope":"project","cues":["retry"],"exclude_cues":[],"max_results":32,"max_bytes":32768,"ttl_seconds":3600}' | cortex capture subscribe
cortex capture prepare --id current-task --context context-epoch-1 --payload
cortex capture require --parent '<source-id>' --child '<source-id>'

prepare without --payload returns evidence, exact source references, coverage and a delivery ID. Supply --present <delivery_id> only when the host establishes that delivery remains in the current input; use a new context epoch after compaction/restart. Pending, unavailable, denied or oversized bundles do not produce a misleading partial payload. rebuild --scope project rebuilds a bounded projection slice; later reads catch up remaining projection work. Exact source bytes survive projection replacement and retraction.

learn --scope project explicitly enables/rebuilds scoped associations. A subscription with "learned":true may add separately labeled learned candidates; literal query stays the default. learn-explain, learn-reset, assess and unassess expose attribution, sticky disable and reversible named usefulness events. Copies, delivery events and unresolved agent/tool derivatives cannot become independent learning support. A successful tool call is not automatically causal credit.

Assemblies are exact membership over existing revision rows. assemble / assembly-get / assembly-expand write and read them; learn-event, learn-retract and learn-erase keep the learning ledger attributed and reversible. routes-rebuild turns on cue routes for a scope; routes-reset turns them off; why cites the cues and training units. After that rebuild, cortex op query / orient compile an evidence-closed assemblies section (expand asm:<id>), and live hooks / SessionStart can inject the brief without a tool call. Ranking does not change what the members are. Default query and lens stay exact unless a need opts into learned after that rebuild.

Live host events use cortex hook <kind>. The plugin always spawns that command. The kernel reads CORTEX_CAPTURE if set, otherwise $CORTEX_HOME/capture.json (written by cortex setup). Opted-in events run observation capture-and-prepare; other events stay silent. CQR stays on cortex hook-boot, cortex op, MCP, and the process() library seam. host-register, host-put, host-tail and host-cycle are the operator/flagged forms of the same host subset. Origin policy is operator-owned, never a claim in captured prose. A fully specified sidecar accepts grant, host_version, session, generation, origins, context, and optional event_key/present. File-tool and compaction flags are native_file_results, native_compactions, native_finals, or native_hooks for the whole matrix.

The native Claude user/Bash/file-tool shapes support a static operator opt-in:

printf '%s\n' '{"key":"claude-native","scope":"project","host_version":"2.1.260","adapter_version":"claude-code-2.1.260-v1","max_bytes":65536,"live":true,"history":true}' | cortex capture host-register
export CORTEX_CAPTURE='{"grant":"claude-native","host_version":"2.1.260","native_user_prompts":true,"native_bash_results":true,"native_file_results":true,"native_compactions":true}'

Set that environment only in an approved hook runner; no host configuration is installed here. The bridge derives session, stable event identity and fresh context identity from native invocation metadata. Other tools stay on the existing hook path. Native prompt_id corresponds to historical promptId, not transcript uuid. Structured Bash and file-tool reports are preserved rather than reduced to a preview. PreToolUse prepares from the tool input without storing the request. PreCompact records a silent checkpoint. Known non-evidence transcript control records receive transactional metadata markers, so they neither stall backfill nor reinforce memory. Unknown shapes still block the cursor. Stop does not carry the final-message UUID: live final capture still needs an explicit trusted identity, or subsequent transcript catch-up.

These are attributed observations, not automatic verified facts or new CQR witnesses. Existing semantic CQR APIs remain separate. No host configuration is installed. Broader installed-host compatibility, held-out task quality, model-token savings, power-loss durability and a release-performance acceptance band remain unverified.




Related MCP server: engram

Quick Start

Get to the first memory moment before learning daemon internals.

1. Install or build Cortex

Use the latest desktop installer, or build the 0.6.0 source CLI:

git clone https://github.com/AdityaVG13/cortex.git
cd cortex
cargo build -p cortex-daemon --release

2. Start local memory

Open Cortex Control Center and start Cortex from the app. CLI-only users can run:

cortex serve

3. Check readiness

cortex status --json

Success is "status": "ready". If status is needs_action or error, follow the returned nextAction / repair before continuing.

4. Connect one AI tool

Claude Code:

claude plugin marketplace add AdityaVG13/cortex
claude plugin install cortex@cortex-marketplace

Codex:

codex mcp add cortex -- cortex.exe mcp --agent codex

Restart the AI tool after changing MCP config.

5. Store and recall one memory

From a connected MCP client, call cortex_commit, then cortex_query. From the repo, run the matching smoke script:

Windows:

powershell -ExecutionPolicy Bypass -File scripts\first-run-smoke.ps1

macOS / Linux:

bash tests/scripts/first-run-smoke.sh

That smoke checks status, stores one disposable local memory, and recalls it. Normal use does not require benchmark adapters, provider keys, or LongMemEval.

More tool-specific setup: Info/connecting.md.



POST /store

Save decisions, lessons, preferences. Conflict detection is automatic.

GET /recall

Clock-Quorum Recall: admit a stored row when a hard anchor matches, two clocks agree, or a strong lexical hit holds. Empty is a valid answer. Use /as-of for an explicit validity time.

GET /boot

Extractive identity + delta + current-truth pack. ~300 tokens served instead of ~15,000 raw. No summarizer.



Gate

Meaning

Hard anchor

Path, symbol, alias, entity, or citation matches

Two clocks

Write, truth, task, and history are independent evidence

Strong lexical

Quoted phrase, stem, or closed-lexicon hit — not BM25 alone

Empty

No shared handle → no result. That is correct


Accessibility and settings

  • Settings panel: Accessibility, Appearance & Motion, Connection, Budgets, and Keyboard & Navigation

  • Runtime preferences: high contrast, reduced motion, keyboard hints, and compact navigation

  • Accessibility gates: stronger focus states, ARIA/live regions, contrast checks, and 375px reflow checks

Governance

  • Retention classes across store, MCP, OpenAPI, export, and import

  • Local endpoint budgets with stable HTTP 429 / JSON-RPC denial metadata

  • Budget UI in Control Center, backed by the local budgets.toml

  • Boot audits plus GET /boot/audit and the read-only cortex_boot_audit MCP tool

  • Admin rollback with dry-run/apply workflow and audit events

Recall quality

  • cortex-http-pure adapter as the canonical helper-free measurement floor

  • Purity gates, CAS-100, and triangle judge tooling for safer quality claims (declared target, not yet measured/pinned — no claim: CAS-100 and the triangle judge are named but have no located artifact in tests/; purity gates exist at tests/purity-gates/)

  • Clock-Quorum Recall: deterministic evidence from write, truth, task, and history clocks. No local embedding or reranker model.

Reliability

  • Claude plugin MCP is attach-only and no longer starts a second daemon from plugin MCP paths

  • Control Center supervises the app-managed daemon and honors intentional stops

  • Handler panics return JSON 500 responses, with local panic breadcrumbs

  • Storage hygiene compacts FTS and keeps legacy embedding rows inert


Connected agents in Control Center

Multi-agent, one brain

  • Each boot call registers a session. Control Center shows active sessions, deduplicated by agent identity.

  • Read-path tools (recall, peek, unfold) reattach to existing sessions. No duplicates.

  • Session descriptions preserved across reconnects and daemon restarts.

  • What one agent stores, every other agent can recall.

Claude Code, Codex, Cursor, and custom scripts can all be connected simultaneously. Each tracks its own session while sharing the same memory.


Tool

Connection

Setup

Claude Code

MCP (plugin) or desktop app

Plugin: claude plugin install cortex@cortex-marketplace

Codex

MCP

codex mcp add cortex -- cortex.exe mcp --agent codex

Cursor

MCP

Point MCP server at cortex mcp --agent cursor

Factory Droid

MCP

cortex mcp --agent droid

Aider

CLI / HTTP

cortex boot --agent aider

Custom tools

HTTP

Three endpoints: /boot, /recall, /store

Local LLMs

HTTP / MCP

Same protocol, any runtime


Platform

Desktop installer

Daemon archive

Windows

.exe (NSIS installer)

.zip

macOS

.dmg

.tar.gz

Linux

.AppImage / .deb

.tar.gz

git clone https://github.com/AdityaVG13/cortex.git
cd cortex
cargo build -p cortex-daemon --release
claude plugin marketplace add AdityaVG13/cortex
claude plugin install cortex@cortex-marketplace

Mode

How it works

Desktop app

Control Center owns the daemon. Restart and monitor from the app.

CLI

cortex serve starts the daemon. Exits cleanly if one is already running.

Plugin

Attach-only MCP bridge. It connects to the running app/service daemon and does not silently spawn a second daemon.


cortex status --json

Windows:

powershell -ExecutionPolicy Bypass -File scripts\first-run-smoke.ps1

macOS / Linux:

bash tests/scripts/first-run-smoke.sh
# Daemon contract tests
cargo test -p cortex-tests

# Desktop test suite
npm --prefix desktop/cortex-control-center test

# Lifecycle smoke test
npm --prefix desktop/cortex-control-center run verify:lifecycle:dev

# Security audit
npm audit --omit=dev --audit-level=high
cargo audit

Document

Covers

Docs index

All product and operator docs

Connecting

Setup, MCP, HTTP, auth, troubleshooting

Architecture

Store, CQR, boot, schema, crate map

MCP Tools

All 29 MCP tool definitions and parameters

Roadmap

What shipped and what's next

Security

Threat model, auth rules, vulnerability reporting

Team mode

Shared-server setup for engineering teams

Contributing

Development setup and PR guidelines

Command

Description

cortex serve

Start the daemon

cortex mcp

MCP stdio bridge to the running daemon

cortex --help

Full command reference

cortex doctor

Run diagnostics

cortex paths --json

Show file and port paths

cortex status --json

Local memory readiness and next action

cortex rebuild-anchors

Rebuild derived clock projections

cortex setup --team

Initialize team mode and generate API keys

cortex export

Export data (json or sql) — not implemented in the CLI (default builds exit 1); use the daemon's HTTP GET /export endpoint (JSON format) or the desktop app

cortex import

Import from a previous export — not implemented in the CLI (default builds exit 1); use the daemon's HTTP POST /import endpoint or the desktop app

cortex admin rollback --session-id <id>

Soft-delete a session's memory writes (dry-run default; --apply to persist)





Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP-native, local-first memory server that gives AI agents persistent, structured memory across sessions and tools, enabling them to maintain identity and context without reconfiguration.
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides persistent, local-first AI memory across sessions via MCP tools for storing, searching, and retrieving context from past interactions.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A portable self-hosted memory layer for AI tools, storing context, memories, and handoffs for access from any MCP-compatible client.
    17 npm
    MIT