Skip to content

What is Remind?

Remind is a memory layer for LLM agents. It stores facts, episodes, and concepts with first-class support for temporal validity, provenance tracking, and conflict detection. Unlike simple RAG systems, Remind maintains structured knowledge that agents can query and curate.

The problem with current AI memory

Most approaches to giving AI persistent memory are some variation of "store text, search text":

  • RAG: Embed documents, retrieve similar chunks
  • Conversation buffers: Keep recent messages around
  • Vector stores: Log everything, search by similarity

These approaches treat memory as passive storage. Remind treats memory as structured knowledge that agents actively curate.

Agent-driven memory

Remind v1.0 takes a different approach: the calling agent is the only intelligence. Remind provides:

  1. Deterministic fact handling — Facts are clustered by entity overlap, stored with validity windows, and collisions are reported for agent triage
  2. Batch read/write toolssnapshot returns current memory state; apply executes transactional changesets
  3. Local embeddings by default — No API keys needed; uses all-MiniLM-L6-v2 via fastembed

The agent decides what to remember, how to organize concepts, and how to resolve conflicts. Remind is the substrate.

How Remind works

┌─────────────────────────────────────────────────────────────────┐
│                      CALLING AGENT                              │
│         (Your agent that uses Remind for memory)                │
└─────────────────────┬───────────────────────┬───────────────────┘
                      │                       │
              snapshot (read)           apply (write)
                      │                       │
                      ▼                       ▼
┌─────────────────────────────────────────────────────────────────┐
│                      MEMORY INTERFACE                           │
│              remember() / recall() / snapshot() / apply()       │
└─────────────────────┬───────────────────────────────────────────┘

        ┌─────────────┼─────────────┐
        ▼             ▼             ▼
   ┌─────────┐  ┌──────────┐  ┌──────────────┐
   │EPISODES │  │ CONCEPTS │  │    FACTS     │
   │ (raw)   │  │(curated) │  │ (clustered)  │
   └─────────┘  └──────────┘  └──────────────┘
        │             │              │
        └──────┬──────┴──────────────┘

      ┌─────────────────┐      ┌─────────────────┐
      │  FACT PIPELINE  │      │    RETRIEVER    │
      │ (deterministic) │      │ (Spreading Act) │
      └─────────────────┘      └─────────────────┘

Core components

  1. Episodes — Raw experiences logged via remember(). Fast (no LLM calls), just storage + embedding.

  2. Facts — Specific factual assertions (type=fact). Automatically clustered by entity overlap, stored with validity windows. Collisions are reported back so the agent can decide what to do.

  3. Concepts — Curated knowledge created by the agent via apply. These are patterns, summaries, or grouped facts that the agent has reviewed and organized.

  4. Spreading activation retrieval — When you query, matching concepts activate related concepts through the graph, with activation decaying over hops.

  5. Memory decay — Concepts that are rarely recalled gradually lose retrieval priority. Concepts that are frequently accessed get reinforced.

Two batch tools

The core workflow uses two batch tools:

snapshot — Batch read

Returns current memory state as JSON. Combine scopes in a single call:

snapshot(scopes="pending,conflicts")  # Unreviewed episodes + open conflicts
snapshot(scopes="entity:tool:redis")  # All data for an entity
snapshot(scopes="concept:abc123")     # Concept detail with fact history

apply — Batch write

Executes a transactional changeset. All-or-nothing with per-op results:

remember as=f1 t=fact e=tool:redis "Cache TTL is 600 seconds"
supersede old=fact:a91c2 new=$f1
concept from=ep:11,ep:12 title="Retry pattern" "Transient failures resolve with backoff"
resolve id=conflict:7 winner=fact:b3d01 "confirmed by ops"
processed ids=ep:11,ep:12

Two ways to integrate

Skills + CLI (project-local)

Your agent calls the remind CLI from skills — markdown files with instructions. The database lives in your project repo at .remind/remind.db. Each project has its own isolated memory.

Learn more about Skills →

MCP Server (centralized)

Remind runs as an MCP server. Agents connect to it over HTTP. The database is centralized at ~/.remind/. Good for cross-project memory and shared knowledge bases.

Learn more about MCP →

Released under the Apache 2.0 License.