---
slug: "omem"
source_type: "readme"
source_url: "https://cdn.jsdelivr.net/gh/ourmem/omem@main/README.md"
repo: "https://github.com/ourmem/omem"
source_file: "README.md"
branch: "main"
---
<p align="center">
  <strong>OMEM</strong><br/>
  Shared Memory That Never Forgets
</p>

<p align="center">
  <a href="https://github.com/ourmem/omem/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue.svg" alt="License"></a>
  <a href="https://ourmem.ai"><img src="https://img.shields.io/badge/hosted-ourmem.ai-green.svg" alt="Hosted"></a>
  <a href="https://github.com/ourmem/omem"><img src="https://img.shields.io/github/stars/ourmem/omem?style=social" alt="Stars"></a>
</p>

<p align="center">
  <strong>English</strong> | <a href="README_CN.md">简体中文</a>
</p>

---

## The Problem

Your AI agents have amnesia — and they work alone.

- 🧠 **Amnesia** — every session starts from zero. Preferences, decisions, context — all gone.
- 🏝️ **Silos** — your Coder agent can't access what your Writer agent learned.
- 📁 **Local lock-in** — memory tied to one machine. Switch devices, lose everything.
- 🚫 **No sharing** — team agents can't share what they know. Every agent re-discovers the same things.
- 🔍 **Dumb recall** — keyword match only. No semantic understanding, no relevance ranking.
- 🧩 **No collective intelligence** — even when agents work on the same team, there's no shared knowledge layer.

**ourmem fixes all of this.**

## What is ourmem

ourmem gives AI agents shared persistent memory — across sessions, devices, agents, and teams. One API key reconnects everything.

🌐 **Website:** [ourmem.ai](https://ourmem.ai)

<table>
<tr>
<td width="50%" valign="top">

### 🧑‍💻 I use AI coding tools

Install the plugin for your platform. Memory works automatically — your agent recalls past context on session start and captures key info on session end.

**→ Jump to [Quick Start](#quick-start)**

</td>
<td width="50%" valign="top">

### 🔧 I'm building AI products

REST API with 48+ endpoints. Docker one-liner for self-deploy. Embed persistent memory into your own agents and workflows.

**→ Jump to [Self-Deploy](#self-deploy)**

</td>
</tr>
</table>

## Core Capabilities

<table>
<tr>
<td width="25%" align="center">
<h4>🔗 Shared Across Boundaries</h4>
Three-tier Spaces — Personal, Team, Organization — let knowledge flow across agents and teams with full provenance tracking.
</td>
<td width="25%" align="center">
<h4>🧠 Never Forget</h4>
Weibull decay model manages the memory lifecycle — core memories persist, peripheral ones gracefully fade. No manual cleanup.
</td>
<td width="25%" align="center">
<h4>🔍 Deep Understanding</h4>
11-stage hybrid retrieval: vector search, BM25, RRF fusion, cross-encoder reranking, and MMR diversity for precise recall.
</td>
<td width="25%" align="center">
<h4>⚡ Smart Evolution</h4>
7-decision reconciliation — CREATE, MERGE, SUPERSEDE, SUPPORT, CONTEXTUALIZE, CONTRADICT, or SKIP — makes memories smarter over time.
</td>
</tr>
</table>

📖 **[Memory Pipeline Architecture](https://github.com/ourmem/omem/blob/HEAD/docs/PIPELINE.md)** — Technical deep-dive into how ourmem stores, retrieves, and evolves memories.

🔗 **[Memory Sharing Architecture](https://github.com/ourmem/omem/blob/HEAD/docs/SHARING.md)** — How memories flow across agents and teams: sharing, provenance, versioning, and cross-space search.

## Feature Overview

| Category | Feature | Details |
|----------|---------|---------|
| **Platforms** | 4 platforms | OpenCode, Claude Code, OpenClaw, MCP Server |
| **Sharing** | Space-based sharing | Personal / Team / Organization with provenance |
| | Provenance tracking | Every shared memory carries full lineage |
| | Quality-gated auto-sharing | Rules fire on memory creation (async, non-blocking) |
| | Vector-enabled shared copies | Shared copies carry source vector embeddings for full search |
| | Idempotent sharing | Re-sharing returns existing copy (no duplicates) |
| | Version tracking | Memories track version counter, shared copies detect staleness via `?check_stale=true` |
| | Re-share stale copies | Refresh outdated shared copies with latest source content and vector |
| | Convenience sharing | One-step cross-user share (`share-to-user`) and bulk share (`share-all-to-user`) with auto-bridging |
| | Organization management | One-step org creation (`org/setup`) and publish (`org/publish`) with auto-share rules |
| | Cross-space search | Search across all accessible spaces at once |
| **Ingestion** | Smart dedup | 7 decisions: CREATE, MERGE, SKIP, SUPERSEDE, SUPPORT, CONTEXTUALIZE, CONTRADICT |
| | Noise filter | Regex + vector prototypes + feedback learning |
| | Admission control | 5-dimension scoring gate (utility, confidence, novelty, recency, type prior) |
| | Dual-stream write | Sync fast path (<50ms) + async LLM extraction |
| | Post-import intelligence | Batch import → async LLM re-extraction + relation discovery |
| | Adaptive import strategy | Auto/atomic/section/document — heuristic content type detection |
| | Content fidelity | Original text preserved, dual-path search (vector + BM25 on source text) |
| | Cross-reconcile | Discover relations between memories via vector similarity |
| | Batch self-dedup | LLM deduplicates facts within same import batch |
| | Privacy protection | `<private>` tag redaction before storage |
| **Retrieval** | 11-stage pipeline | Vector + BM25 → RRF → reranker → decay → importance → MMR diversity |
| | User Profile | Static facts + dynamic context, <100ms |
| | Retrieval trace | Per-stage explainability (input/output/score/duration) |
| **Lifecycle** | Weibull decay | Tier-specific β (Core=0.8, Working=1.0, Peripheral=1.3) |
| | Three-tier promotion | Peripheral ↔ Working ↔ Core with access-based promotion |
| | Auto-forgetting | TTL detection for time-sensitive info ("tomorrow", "next week") |
| **Multi-modal** | File processing | PDF, image OCR, video transcription, code AST chunking |
| | GitHub connector | Real-time webhook sync for code, issues, PRs |
| **Deploy** | Open source | Apache-2.0 |
| | Self-hostable | Single binary, Docker one-liner, ~$5/month |
| | musl static build | Zero-dependency binary for any Linux x86_64 |
| | Object storage | AWS S3 or any S3-compatible storage, with IAM role support |
| | Hosted option | ourmem.ai — nothing to deploy |

## From Isolated Agents to Collective Intelligence

Most AI memory systems trap knowledge in silos. ourmem's three-tier Space architecture enables knowledge flow across agents and teams — with provenance tracking and quality-gated sharing.

> *Research shows collaborative memory reduces redundant work by up to 61% — agents stop re-discovering what their teammates already know.*
> — Collaborative Memory, ICLR 2026

| | Personal | Team | Organization |
|---|----------|------|--------------|
| **Scope** | One user, multiple agents | Multiple users | Company-wide |
| **Example** | Coder + Writer share preferences | Backend team shares arch decisions | Tech standards, security policies |
| **Access** | Owner's agents only | Team members | All org members (read-only) |

**Provenance-tracked sharing** — every shared memory carries its lineage: who shared it, when, and where it came from. Shared copies include the source memory's vector embedding, so they're fully searchable in the target space.

**Quality-gated auto-sharing** — rules filter by importance, category, and tags. Rules fire automatically when new memories are created. Only high-value insights cross space boundaries.

## How It Works

```
┌──────────────────────────────────────────────────────────────────┐
│   Your AI Agent (OpenCode / Claude Code / OpenClaw / Cursor)     │
│                                                                  │
│   Session Start → auto-recall relevant memories                  │
│   During Work   → keyword detection triggers recall              │
│   Session End   → auto-capture decisions, preferences, facts     │
└───────────────────────────┬──────────────────────────────────────┘
                            │ REST API (X-API-Key)
                            ▼
┌──────────────────────────────────────────────────────────────────┐
│                       ourmem Server                              │
│                                                                  │
│  ┌─ Smart Ingest ─────────────────────────────────────────────┐  │
│  │  Messages → LLM extraction → noise filter → admission      │  │
│  │  → 7-decision reconciliation (CREATE / MERGE / SUPERSEDE / │  │
│  │    SUPPORT / CONTEXTUALIZE / CONTRADICT / SKIP)            │  │
│  │  → cross-reconcile relations → privacy redaction           │  │
│  └────────────────────────────────────────────────────────────┘  │
│                                                                  │
│  ┌─ Hybrid Search (11 stages) ────────────────────────────────┐  │
│  │  Vector + BM25 → RRF fusion → cross-encoder reranker       │  │
│  │  → Weibull decay boost → importance scoring                │  │
│  │  → MMR diversity → parallel cross-space aggregation        │  │
│  └────────────────────────────────────────────────────────────┘  │
│                                                                  │
│  ┌─ Sharing Engine ───────────────────────────────────────────┐  │
│  │  Personal / Team / Organization spaces                     │  │
│  │  → provenance tracking → version-based stale detection     │  │
│  │  → auto-share rules → one-step share-to-user              │  │
│  └────────────────────────────────────────────────────────────┘  │
│                                                                  │
│  ┌─ Lifecycle ────────────────────────────────────────────────┐  │
│  │  Weibull decay (Core β=0.8 / Working β=1.0 / Peripheral   │  │
│  │  β=1.3) → 3-tier promotion → auto-forgetting TTL          │  │
│  └────────────────────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────────────────────┘
```

- **Write once, recall everywhere** — memories persist across sessions, devices, and agents
- **Gets smarter over time** — reconciliation merges, updates, and contradicts memories automatically
- **Share across boundaries** — Personal → Team → Organization knowledge flow with full provenance
- **No manual memory management** — Weibull decay handles lifecycle, auto-share rules handle distribution

## Key Concepts

### API Key = Tenant ID = Your Identity

When you create a tenant, the returned `id` **is** your API Key. They're the same UUID. There is no separate "tenant ID".

```bash
curl -X POST https://api.ourmem.ai/v1/tenants -d '{"name": "alice"}'
# → {"id": "a1b2c3d4-...", "api_key": "a1b2c3d4-...", "status": "active"}
#          ↑ same value ↑
```

### API Key vs Space ID

| Concept | What it is | Example | How many |
|---------|-----------|---------|----------|
| **API Key** | Your identity. Goes in `X-API-Key` header. | `a1b2c3d4-...` | 1 per user |
| **Space ID** | A memory storage address. Each is an isolated database. | `personal/a1b2c3d4-...` | Multiple per user |

One API Key owns multiple Spaces:

```
API Key "a1b2c3d4"
  │
  ├── personal/a1b2c3d4     ← auto-created, your private memories
  ├── team/e5f6g7h8          ← team space you created (you = Admin)
  ├── team/i9j0k1l2          ← team space you were invited to (you = Member)
  └── org/m3n4o5p6           ← organization you joined (you = Reader)
```

### Sharing = Passing Your API Key

To share memories with another user, you pass their API Key as `target_user`:

```bash
# Share all your preferences to user Bob
curl -X POST https://api.ourmem.ai/v1/memories/share-all-to-user \
  -H "X-API-Key: your-api-key" \
  -d '{"target_user": "bobs-api-key", "filters": {"categories": ["preference"]}}'
```

The system automatically creates a bridging Team Space between you and Bob. No manual space management needed.

## Quick Start

### Agent Install (recommended)

One message to your AI agent. It handles everything — API key, plugin install, config, verification.

**Hosted (ourmem.ai — nothing to deploy):**

| Platform | Copy this to your agent |
|----------|------------------------|
| **OpenClaw** | `Read https://ourmem.ai/SKILL.md and follow the instructions to install and configure ourmem for OpenClaw` |
| **Claude Code** | `Read https://ourmem.ai/SKILL.md and follow the instructions to install and configure ourmem for Claude Code` |
| **OpenCode** | `Read https://ourmem.ai/SKILL.md and follow the instructions to install and configure ourmem for OpenCode` |
| **Cursor / VS Code** | `Read https://ourmem.ai/SKILL.md and follow the instructions to install and configure ourmem as MCP Server` |

**Self-hosted (your own server):**

| Platform | How to install |
|----------|---------------|
| **OpenClaw** | Run `openclaw skills install ourmem`, then tell your agent: `setup ourmem in self-hosted mode` |
| **Claude Code** | `Read https://raw.githubusercontent.com/ourmem/omem/main/skills/ourmem/SKILL.md and install ourmem for Claude Code, self-hosted mode` |
| **OpenCode** | `Read https://raw.githubusercontent.com/ourmem/omem/main/skills/ourmem/SKILL.md and install ourmem for OpenCode, self-hosted mode` |

That's it. Your agent handles the rest.

**Skill Install (alternative):**

If you prefer CLI installation, install the ourmem skill directly:

```bash
npx skills add ourmem/omem --skill ourmem -g
```

This works with 44+ AI agents including Claude Code, OpenCode, Cursor, and more. See [Vercel Skills CLI](https://github.com/vercel-labs/skills) for details.

---

<details>
<summary><b>Manual Install</b> (without agent assistance)</summary>

### 1. Get an API Key

**Hosted:**

```bash
curl -sX POST https://api.ourmem.ai/v1/tenants \
  -H "Content-Type: application/json" \
  -d '{"name": "my-workspace"}' | jq .
# → {"id": "xxx", "api_key": "xxx", "status": "active"}
```

**Self-deploy:**

```bash
docker run -d -p 8080:8080 -e OMEM_EMBED_PROVIDER=bedrock ghcr.io/ourmem/omem-server:latest
curl -sX POST http://localhost:8080/v1/tenants \
  -H "Content-Type: application/json" \
  -d '{"name": "my-workspace"}' | jq .
```

Save the returned `api_key` — this reconnects you to the same memory from any machine.

### 2. Install Plugin

**OpenCode:** Add `"plugin": ["@ourmem/opencode"]` to `opencode.json` + configure `plugin_config` with `apiUrl` and `apiKey` in the same file.

**Claude Code:** `/plugin marketplace add ourmem/omem` + set env vars in `~/.claude/settings.json`.

**OpenClaw:** `openclaw plugins install @ourmem/ourmem` + configure `openclaw.json` with apiUrl and apiKey.

**MCP (Cursor / VS Code / Claude Desktop):**

```json
{
  "mcpServers": {
    "ourmem": {
      "command": "npx",
      "args": ["-y", "@ourmem/mcp"],
      "env": {
        "OMEM_API_URL": "https://api.ourmem.ai",
        "OMEM_API_KEY": "your-api-key"
      }
    }
  }
}
```

### 3. Verify

```bash
curl -sX POST "$OMEM_API_URL/v1/memories" \
  -H "X-API-Key: $OMEM_API_KEY" -H "Content-Type: application/json" \
  -d '{"content": "I prefer dark mode", "tags": ["preference"]}'

curl -s "$OMEM_API_URL/v1/memories/search?q=dark+mode" -H "X-API-Key: $OMEM_API_KEY"
```

</details>

## What Your Agent Gets

### Memory Tools

| Tool | Purpose |
|------|---------|
| `memory_store` | Save facts, decisions, preferences with smart dedup |
| `memory_search` | 11-stage hybrid search (vector + BM25 + reranker) |
| `memory_get` | Retrieve a specific memory by ID |
| `memory_update` | Modify content, tags, importance, tier |
| `memory_delete` | Remove a memory |
| `memory_list` | Browse memories with filters and pagination |
| `memory_ingest` | Smart-ingest full conversations (LLM extraction) |
| `memory_profile` | Auto-generated user profile (static facts + dynamic context) |
| `memory_stats` | Analytics: tag distribution, decay curves, relation graphs |

### Sharing Tools

| Tool | Purpose |
|------|---------|
| `space_create` | Create Team or Organization spaces |
| `space_list` | List all accessible spaces |
| `space_add_member` | Invite users to a shared space |
| `memory_share` | Share a memory to any space with provenance |
| `memory_pull` | Pull a shared memory into your personal space |
| `memory_reshare` | Refresh stale shared copies with latest content |

> **Convenience APIs:** `share-to-user` (one-step cross-user share with auto-bridging) and `share-all-to-user` (bulk share). MCP exposes 15 tools + 1 resource. OpenCode/OpenClaw expose 11 tools + 3 hooks.

### Smart Hooks

| Hook | Trigger | What Happens |
|------|---------|--------------|
| **SessionStart** | New session begins | Recent memories + user profile auto-injected into context |
| **KeywordRecall** | Keyword detected mid-session | Relevant memories surfaced without explicit search |
| **SessionEnd** | Session ends | Key decisions, preferences, and facts auto-captured |
| **Compaction** | Context window compressed | Critical memories preserved across compaction boundaries |

## Memory Space

Browse, search, and manage your agent's memories visually at **[ourmem.ai/space](https://ourmem.ai/space)** — see how memories connect, evolve, and decay over time.

## Security & Privacy

| | |
|---|---|
| **Rust Memory Safety** | No garbage collector, no data races. Ownership model guarantees safety at compile time. |
| **Tenant Isolation** | X-API-Key auth with query-level tenant filtering. Every operation verifies ownership. |
| **Privacy Protection** | `<private>` tag redaction strips sensitive content before storage. |
| **Encryption** | HTTPS for all API transit. Server-side encryption at rest on S3. |
| **Admission Control** | 5-dimension scoring gate rejects low-quality data before storage. |
| **Open Source Auditable** | Apache-2.0 licensed. Audit every line, fork it, run your own instance. |

## Self-Deploy

```bash
# Minimal (BM25 search only, no embedding API needed)
docker run -d -p 8080:8080 ghcr.io/ourmem/omem-server:latest

# With Bedrock embedding (recommended, needs AWS credentials)
docker run -d -p 8080:8080 \
  -e OMEM_EMBED_PROVIDER=bedrock \
  -e AWS_REGION=us-east-1 \
  ghcr.io/ourmem/omem-server:latest

# With OpenAI-compatible embedding
docker run -d -p 8080:8080 \
  -e OMEM_EMBED_PROVIDER=openai-compatible \
  -e OMEM_EMBED_API_KEY=sk-xxx \
  ghcr.io/ourmem/omem-server:latest
```

Full deployment guide: [docs/DEPLOY.md](https://github.com/ourmem/omem/blob/HEAD/docs/DEPLOY.md)

### Object Storage (Optional)

By default ourmem stores data on local disk. For durability and scalability, configure AWS S3 or any S3-compatible object storage:

```bash
# Add to your environment
OMEM_S3_BUCKET=your-bucket            # enables s3:// scheme
AWS_ENDPOINT_URL=https://s3.amazonaws.com
AWS_REGION=us-east-1

# Alternative: OSS-compatible storage
OMEM_OSS_BUCKET=your-bucket           # enables oss:// scheme
OSS_ENDPOINT=https://oss-xx-internal.aliyuncs.com
OSS_ACCESS_KEY_ID=your-ak             # or use ECS RAM role (auto-discovered)
OSS_ACCESS_KEY_SECRET=your-sk
```

> If both `OMEM_S3_BUCKET` and `OMEM_OSS_BUCKET` are set, OSS takes priority.

## Build from Source

### Two build modes

| Mode | Command | Binary | Bedrock | Runs on |
|------|---------|--------|---------|---------|
| **glibc (full)** | `cargo build --release` | Dynamic linked, ~218MB | ✅ AWS Bedrock | Same glibc version as build host |
| **musl (portable)** | See below | Static linked, ~182MB | ❌ OpenAI-compatible only | **Any Linux x86_64** |

### glibc build (with Bedrock support)

```bash
cargo build --release -p omem-server
# Binary: target/release/omem-server
# Requires: same or newer glibc on target machine
```

### musl static build (portable, zero dependencies)

Single binary that runs on **any Linux x86_64** — no glibc, no libraries, nothing.

```bash
rustup target add x86_64-unknown-linux-musl

RUSTFLAGS="-C target-feature=+crt-static -C relocation-model=static" \
  cargo build --release --target x86_64-unknown-linux-musl \
  -p omem-server --no-default-features

# Binary: target/x86_64-unknown-linux-musl/release/omem-server
# Statically linked, runs anywhere
```

> **Note:** The musl build uses `--no-default-features` which excludes AWS Bedrock support. Use `OMEM_EMBED_PROVIDER=openai-compatible` (e.g. DashScope, OpenAI) instead. This is because `aws-lc-sys` (AWS crypto library) crashes on musl static linking due to `dlopen(NULL)` incompatibility ([aws-c-cal#213](https://github.com/awslabs/aws-c-cal/issues/213)), and Rust's default `static-pie` output segfaults with musl-gcc ([rust-lang/rust#95926](https://github.com/rust-lang/rust/issues/95926)).

### Transfer to any server

```bash
# Compress
gzip -c target/x86_64-unknown-linux-musl/release/omem-server > omem-server.gz

# Copy to server
scp omem-server.gz user@server:/opt/

# Run (no dependencies needed)
ssh user@server "gunzip /opt/omem-server.gz && chmod +x /opt/omem-server && /opt/omem-server"
```

## API at a Glance

| Method | Endpoint | Description |
|--------|----------|-------------|
| POST | `/v1/tenants` | Create workspace & get API key |
| POST | `/v1/memories` | Store memory or smart-ingest conversation |
| GET | `/v1/memories/search` | 11-stage hybrid search |
| GET | `/v1/memories` | List with filters & pagination |
| GET | `/v1/profile` | Auto-generated user profile |
| POST | `/v1/spaces` | Create shared space |
| POST | `/v1/memories/:id/share` | Share memory to a space |
| POST | `/v1/files` | Upload PDF / image / video / code |
| GET | `/v1/stats` | Analytics & insights |

Full API reference (48+ endpoints): [docs/API.md](https://github.com/ourmem/omem/blob/HEAD/docs/API.md)

## Documentation

| Document | Description |
|----------|-------------|
| [docs/API.md](https://github.com/ourmem/omem/blob/HEAD/docs/API.md) | Complete REST API reference |
| [docs/PIPELINE.md](https://github.com/ourmem/omem/blob/HEAD/docs/PIPELINE.md) | Memory pipeline architecture — storage, retrieval, and plugin integration flows |
| [docs/SHARING.md](https://github.com/ourmem/omem/blob/HEAD/docs/SHARING.md) | Memory sharing architecture, flows, and tutorials |
| [docs/DEPLOY.md](https://github.com/ourmem/omem/blob/HEAD/docs/DEPLOY.md) | Docker & AWS deployment guide |
| [docs/PLUGINS.md](https://github.com/ourmem/omem/blob/HEAD/docs/PLUGINS.md) | Plugin installation for all 4 platforms |
| [docs/TWEETCLAW_OPENCLAW.md](https://github.com/ourmem/omem/blob/HEAD/docs/TWEETCLAW_OPENCLAW.md) | OpenClaw workflow for storing TweetClaw X/Twitter research decisions in ourmem |
| [skills/ourmem/SKILL.md](https://github.com/ourmem/omem/blob/HEAD/skills/ourmem/SKILL.md) | AI agent onboarding skill |

## License

Apache-2.0

---

<p align="center">
  <strong>Shared Memory That Never Forgets.</strong><br/>
  <a href="https://ourmem.ai">ourmem.ai</a> · <a href="https://github.com/ourmem/omem">GitHub</a>
</p>
