Noema gives AI agents — and the humans working alongside them — a persistent, structured place to record what they know, decide, observe, and intend. Every memory is a plain markdown file, indexed by a local SQLite database, exposed to agents through an MCP (Model Context Protocol) server. Nothing lives in the cloud; nothing requires a paid cloud API key.
Why Noema?
- Federated by design. Multiple Cortexes can pair into a ring and sync peer-to-peer. Publishers can broadcast read-only knowledge; subscribers can consume without polluting upstream. Grow a shared memory across a team, a lab, or a research network — no central server, no gatekeeper.
- Local-first.
No cloud, no API keys, no account required. Your memories
live in
~/.noema/. - Plain markdown.
Every Trace is a file. You can
cat,grep, andgit commitit — no proprietary format. - Your editor is a first-class client.
Edit Traces in an editor of your choice, be it Obsidian, VS
Code,
vim, or something else altogether. Drop new markdown files intotraces/from Finder. Delete, rename, or drag between folders. A background watcher sees every change and emits a proper sync event — so your manual edits propagate through federation exactly like MCP-initiated ones, and deletes are recoverable from the event log. - MCP-native. Works with Claude Code, Copilot, Zed, and any MCP-compatible agent out of the box. Ships a native Hermes memory provider plugin — any Hermes agent can use a Cortex as its memory backend.
- Plays well with the agent ecosystem.
Every Cortex ships with an auto-generated
AGENTS.md— the community-standard agent-instructions format picked up by Codex, Cursor, Aider, Zed, Copilot, and most other coding-agent tooling. Any agent dropped into the directory knows how to work with it, no custom onboarding required. - Integrity built in.
Every Trace is content-hashed on write. Publishers can source-lock
authoritative traces so consumers can't accidentally edit
them.
noema verifycatches tampering;noema driftcatches divergence from the source. - Security from day one. Keyed MCP auth that refuses to serve bearer keys over plaintext, explicit host-binding rules, and out-of-band key verification — the security work most projects defer to v2 is in v1.
Concepts
| Term | Meaning |
|---|---|
| Trace | A single memory — one markdown file + its database row |
| Cortex | A named collection of Traces, stored in a directory you control |
Every Trace has a type that describes its intent —
fact, decision, preference,
context, skill, intent,
observation, or note.
Federation
Two or more Cortexes can pair into a ring and sync peer-to-peer. Every Trace, every lineage edge, every audit event replicates across every peer — no central server, no cloud broker.
When two peers edit the same Trace concurrently, Noema
refuses to overwrite either side. Instead it creates a divergence Trace that preserves both versions verbatim, so you can resolve
it deliberately when you're ready. Nothing is ever lost; nothing
is ever silently decided for you.
Federation supports three modes: sync for collaborative rings, publish for read-only knowledge broadcast, and subscribe for consumption without upstream pollution. Source-locked traces from a publisher are enforced as immutable on the consumer side — the content can't be edited, only archived or resolved through the publisher.
A personal cortex becomes a lab cortex becomes a research-network cortex. Memory grows with the collective, on your terms.
Security
A federated ring of memories is worth defending. Noema's HTTP MCP endpoint supports a keyed mode where every request must carry a bearer key — and when keyed mode is active, the server refuses to start without TLS. A bearer token over plaintext is worse than no auth at all; Noema treats that combination as a hard startup error, not a warning.
Rings share one key, verifiable via a fingerprint command so
every peer knows it's talking to the right ring. Keys live
in environment variables or 0600 sidecar files, never
in command-line history.
The HTTP transport demands an explicit host — binding to 0.0.0.0
is rejected outright, so a federation peer can't be accidentally
exposed to every interface on the machine. The cortex must be
named explicitly too; no silent defaults on a network-facing endpoint.
The work many projects push to v2 — auth middleware, host-binding safety, fingerprint verification, divergence-aware conflict resolution — is in v1.
Frequently asked
What is Noema?
Noema is an open-source, local-first memory layer for AI agents. Every memory is a plain markdown file; the index is a local SQLite database. It exposes a Model Context Protocol (MCP) server so agents like Claude Code, GitHub Copilot, Zed, Cursor, and Aider can use it as a structured memory backend. Multiple Cortexes can pair into a peer-to-peer federation ring.
How is it pronounced?
It is prounounced no-EE-muh or NO-ay-muh, from Greek:
νόημα — the intentional content of a thought.
Does Noema have a cloud service?
No. Noema runs entirely on your machine or within a federation ring you control. There is no hosted service, no account system, and no telemetry. All memories live on disk in a directory you control.
How is Noema different from a vector database?
Noema targets structured, typed, auditable agent memory
— not semantic retrieval over unstructured text. It uses
SQLite FTS5 for keyword and phrase search, classifies
every Trace by type (fact,
decision, preference, context,
skill, intent, observation,
note), tracks lineage via derived_from edges, and emits an immutable event log. It is not a replacement
for Pinecone, Weaviate, or Chroma.
What is a Cortex?
A Cortex is a named collection of Traces, stored in a directory you control. Noema is the project; a Cortex is an instance. You can have multiple Cortexes for different contexts, and Cortexes can federate with each other peer-to-peer.
How do I install Noema?
On macOS and Linux: brew install Fail-Safe/tap/noema. Pre-built binaries are also available on the GitHub releases page for darwin, linux, and windows on both amd64 and arm64.
Or install with the Go toolchain:
go install
github.com/Fail-Safe/Noema/cmd/noema@latest.
Can I edit memories in Obsidian or another editor?
Yes. A filesystem watcher runs alongside noema serve and treats external edits as first-class mutation events.
You can edit Traces in Obsidian, VS Code, or vim; drop new markdown files into traces/ from
Finder; move files between
traces/, archive/traces/, and
trash/traces/ — every change emits the same events
as MCP-initiated mutations and propagates through federation.
Get started
Install with Homebrew (macOS + Linux):
brew install Fail-Safe/tap/noema Then create a Cortex and start the MCP server:
$ noema init --name my-cortex
$ noema serve --transport stdio Prefer a pre-built binary, the Go toolchain, or building from source? See the README — Installation.
Set up via an AI agent
Prefer to have your coding agent do the install for you? Copy the block below and paste it into Claude Code, Cursor, Copilot, Zed, Aider, or any other MCP-capable agent. If you're an LLM reading this page directly, follow the same steps yourself.
Please install Noema as my agent memory backend and configure it for this session.
1. Install the `noema` binary. On macOS/Linux prefer Homebrew (`brew install Fail-Safe/tap/noema`); otherwise use the Go toolchain (`go install github.com/Fail-Safe/Noema/cmd/noema@latest`).
2. Create a Cortex. Pick a short descriptive name based on this project (e.g. "my-project-memory"). Don't include a date in the name; `noema init` prepends today's date automatically.
noema init --name <cortex-name>
3. Generate an MCP server configuration snippet and install it into this agent host's MCP config.
noema serve --cortex <cortex-name> --print-config --transport stdio
Merge the `mcpServers.noema` entry from the output into the correct file for the host — Claude Code: `~/.claude.json` or the workspace's `.mcp.json`. Cursor / Zed / GitHub Copilot: that host's MCP servers setting. Claude Desktop: `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS.
4. Reload or restart the agent host so the new MCP server is registered, then call the `get_instructions` MCP tool to verify the connection. That tool returns the Noema agent reference — trace types, frontmatter fields, filtering options, and the full MCP tool list — which you should read before creating traces.
5. When creating traces, always assign a `type` that reflects intent: `fact`, `decision`, `preference`, `context`, `skill`, `intent`, `observation`, or `note`. This is load-bearing for future retrieval and lineage.
Reference: https://noemacortex.com/llms.txt
Source: https://github.com/Fail-Safe/Noema
Already have noema installed? Skip to step 3 — noema serve --print-config prints a ready-to-paste MCP entry for your host's config file.