Skip to content

Open source · MIT · Self-hosted

Your engineering team's memory. Portable across every AI agent. Running on your servers.

CEMS remembers your decisions, conventions and fixes, and brings them back in every session. It works with Claude Code, Cursor, Codex, Goose and any MCP client.

Switch agents. Keep the memory.

  • Claude Code today

    recalled at session start

    • We deploy with Coolify on Hetzner
    • Use Postgres advisory locks for the job queue
  • Codex tomorrow

    recalled at session start

    • We deploy with Coolify on Hetzner
    • Use Postgres advisory locks for the job queue
  • A local model next year

    recalled at session start

    • We deploy with Coolify on Hetzner
    • Use Postgres advisory locks for the job queue

Your memory lives in your database, not in a vendor's chat history. Change tools whenever you want.

What leaves your network

Your coding agent

Claude Code, Cursor, Codex, Goose

CEMS server

Hooks and MCP

Postgres

Your memories

Model

OpenRouter, your cloud, or local Ollama

Your coding agent talks to the CEMS server. The CEMS server stores memories in your Postgres and sends model calls to OpenRouter, your cloud, or local Ollama.
Data Default (OpenRouter)Private cloud (Bedrock, Azure, Vertex via a gateway)Fully local (Ollama)
Memories Your PostgresYour PostgresYour Postgres
Model calls (extraction, summaries) OpenRouter, then the model vendorYour cloud accountYour server
Embeddings OpenRouterYour cloud accountYour server
Your coding agent Its vendorIts vendor, or your cloud if the agent supports itIts vendor, or a local model if the agent supports it

CEMS does not change what your coding agent sends to its vendor. If that matters, pick an agent that runs on open-weight models (see Works with).

How it works

  1. 01

    Install the hooks.

    One command adds CEMS to Claude Code, Cursor, Codex or Goose.

  2. 02

    Work as usual.

    CEMS picks out decisions, preferences and fixes from your sessions.

  3. 03

    Get it back.

    Relevant memories arrive at the start of each session and when you ask.

Works with

Agent Memory integration Private model path
Claude Code Tested (hooks + MCP) Enterprise cloud (Bedrock, Azure, Vertex)
Cursor Tested (MCP) Enterprise cloud keys (Bedrock, Azure)
Codex CLI Tested (MCP) Open-weight (--oss with Ollama), enterprise cloud
Goose Tested (MCP) Open-weight, enterprise cloud
OpenCode Tested (MCP) Open-weight, enterprise cloud
Aider, Cline, Continue, Roo Code, Kilo Code MCP, untested Open-weight, enterprise cloud

In production

Runs at Hubstaff across 50 engineers since July 2026.

Recall@5
98%
injection latency
<50ms

Install

curl -fsSL https://getcems.com/install.sh | bash

We'll set it up for you

We install it in your cloud. You pay for your servers. One-time setup fee.

Talk to us hello@getcems.com

FAQ

Where is my data stored?

Memories never leave your Postgres. Model calls go to OpenRouter by default, or to your own models in private mode.

Does my coding agent still send code to its vendor?

Yes. CEMS only controls its own traffic. Claude Code, Cursor and Codex still talk to their vendors. Agents like Goose, OpenCode and Aider can run on open-weight models if you need everything in-house.

Can I switch agents and keep the memory?

Yes. The memory lives on your CEMS server. Point a new agent at it and the same memories show up.

Does CEMS work with my current tools?

Claude Code, Cursor, Codex and Goose are tested. Any MCP client can connect.

How is this different from CLAUDE.md?

CLAUDE.md is a static file you manually maintain. CEMS is a dynamic memory system that automatically learns from your sessions, surfaces relevant context, and evolves over time. It also works across multiple AI tools, not just Claude.

Will it slow down my AI assistant?

Memory injection adds less than 50ms to session start. The observer daemon runs asynchronously and never blocks your AI assistant. You won't notice it's there.

What happens if I uninstall?

Your AI tools work exactly as they did before; they just lose their memory. Your data stays in your PostgreSQL database. Reinstall anytime to pick up where you left off.