Skip to main content

A plastic memory well for coding agents.

Project description

Mimir

A plastic memory well for coding agents.

Python 3.10+ License: Apache-2.0 PyPI GitHub

Unlike vector notebooks, Mimir reshapes its own embedding space as you work. One matrix. Zero cloud. Always local.


Why Mimir?

Most agent memory tools are filing cabinets: they store text, then search it. They don't learn. They don't adapt. They just retrieve.

Mimir is different.

It maintains a small, fixed-size prototype matrix that is updated with every interaction via Hebbian-style local learning. The same embedding model keeps its base weights, but Mimir overlays a fast, plastic layer that bends toward your domain, your project, and your habits.

The result: a memory system that feels less like a database and more like a second brain that gets sharper the more you use it.

What makes Mimir unique

Other memory tools Mimir
Core model Store and retrieve discrete facts Learn a plastic prototype matrix
Learning Heuristic scoring, TTL decay, or no learning at all Hebbian / Oja local updates + Markov prediction
State size Often grows with history (SQLite/vector DB) Fixed [k × dim] matrix, typically < 100 MB
Offline Needs cloud API or hosted vector DB Runs locally with llama-server, sentence-transformers, or fake backend
Inference Calls DB/index on every recall Pure matrix operation, no locks, predictable latency

Quick Start

pip install mimir-core

Use it from Python

from mimir import Mimir, MimirConfig

config = MimirConfig(
    base_model="all-MiniLM-L6-v2",
    num_prototypes=64,
    top_k=4,
)
mimir = Mimir(config)

# Encode
emb = mimir.encode("hello world")
print(emb.shape)  # (1, 384)

# Learn
report = mimir.learn("hello world", importance=1.0)
print(report)

# Save / load
mimir.save("checkpoint.pt")
mimir.load("checkpoint.pt")

Plug it into your coding agent

Mimir exposes an MCP server and Agent CLI hooks for Kimi Code, Claude Code, Codex, and OpenCode. Each workspace is isolated under ~/.mimir/workspaces/.

Start the MCP server

# Local embedding backend (recommended)
llama-server \
  --model Qwen3-Embedding-8B-Q4_K_M.gguf \
  --embeddings \
  --port 11435

# Or use sentence-transformer if you don't have llama-server
mimir mcp --backend sentence-transformer

Configure Kimi Code / Claude Code / Codex (.mcp.json)

{
  "mcpServers": {
    "mimir": {
      "command": "mimir",
      "args": ["mcp", "--backend", "sentence-transformer"]
    }
  }
}

Configure OpenCode (.opencode/opencode.jsonc)

{
  "mcp": {
    "mimir": {
      "type": "local",
      "command": ["mimir", "mcp", "--backend", "sentence-transformer"]
    }
  }
}

Auto-recall and auto-learn with hooks

# ~/.kimi-code/config.toml
[[hooks]]
event = "UserPromptSubmit"
command = "python3 -m mimir.hooks.mimir_turn"
timeout = 10

[[hooks]]
event = "Stop"
command = "python3 -m mimir.hooks.mimir_turn"
timeout = 10

See docs/mcp-user-guide.md for the full hook guide.


How It Works

Text
  │
  ▼
[Base embedding model] ───────┐
  │                            │
  ▼                            │
Base embedding                │
  │                            │
  ▼                            │
[Prototype matrix lookup]     │
  │                            │
  ▼                            │
Sparse prototype activation   │
  │                            │
  ▼                            │
Residual modulation ◄─────────┘
  │
  ▼
Mimir embedding
  • Slow weights: the frozen base embedding model gives stable semantic priors.
  • Fast weights: a fixed-capacity prototype matrix encodes your local domain.
  • Learning: each input activates the nearest prototypes and nudges them toward the new observation.
  • Prediction: a first-order Markov transition matrix predicts the next prototype and emits a surprise_score.
  • Forgetting: prototype strength decays exponentially; weak prototypes are overwritten when capacity is full.

This design is inspired by Prototype Theory in cognitive psychology and Predictive Coding in neuroscience: memory is not a pile of events, but a compressed set of typical examples that continuously updates itself.


MCP Tools

Tool Purpose
store(text, importance=1.0) Store and learn from text
recall(query, top_k=5, min_score=0.0) Retrieve relevant memories
consolidate() Consolidate the working memory buffer
forget() Clear the current session's working memory
checkpoint(name) Save a named checkpoint
restore(name) Restore to a named checkpoint
status() Show session stats

Programming Interface

If you want to use Mimir inside your own Python code:

from mimir.adapters.agents import InMemoryAgentAdapter, Message
from mimir.core.config import MimirConfig

adapter = InMemoryAgentAdapter(
    config=MimirConfig(base_model="all-MiniLM-L6-v2", top_k=4),
)

adapter.observe([
    Message(role="user", content="请用 Python 写快排"),
    Message(role="assistant", content="..."),
])
adapter.consolidate()
memories = adapter.recall("Python 排序", top_k=3)

print(adapter.memory_count)
adapter.clear_memories()

See docs/agent-integration.md for the adapter API.


CLI

# Encode
mimir encode --backend sentence-transformer "hello world"

# Learn
mimir learn --backend llama-server "重要上下文"

# Evaluate
python -m mimir.eval --backend llama-server --top-k 4

Status & Roadmap

Mimir is currently v0.2.0.dev2.

  • MVP: encode / learn / save / load
  • Top-k sparse prototype activation
  • EventBus + PredictionPolicy + surprise score
  • MCP server + Agent CLI hooks
  • BM25/keyword fallback for recall
  • Async embedding queue
  • SQLite-backed memory metadata
  • Project context discovery

See docs/roadmap.md and docs/comparison.md for the full roadmap and how Mimir compares to other agent memory systems.


License

Apache-2.0


Mimir is named after the Norse guardian of the well of wisdom — a source of knowledge that deepens with every visit.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mimir_core-0.2.0.tar.gz (62.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mimir_core-0.2.0-py3-none-any.whl (78.6 kB view details)

Uploaded Python 3

File details

Details for the file mimir_core-0.2.0.tar.gz.

File metadata

  • Download URL: mimir_core-0.2.0.tar.gz
  • Upload date:
  • Size: 62.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for mimir_core-0.2.0.tar.gz
Algorithm Hash digest
SHA256 7a7d60553b3b6c1c304d694d139ef17fdfe6ea34108f39ee7e5d3220ea6ad5b5
MD5 e29f2cd4fa3ff267d93c72e46d72e5a1
BLAKE2b-256 9c5e9994d4c3e61fc24140c0fa9060b53cade70f7814b2c11d45fb831d3d65b4

See more details on using hashes here.

File details

Details for the file mimir_core-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: mimir_core-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 78.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for mimir_core-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fa3623ce261d28125aa6d8b5505a953b86f09db865884e7bcf360171d89e1434
MD5 c63c6d2b031b8683a96fcedb29f6d564
BLAKE2b-256 fa1c229e61100ecd5010159da32457cd4f2fc1862d2354281501e362a3af0089

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page