Structured long-term memory for OpenClaw agents.
memora-openclaw turns your existing MEMORY.md and memory/**/*.md files
into Memora primary abstractions and cue anchors, then retrieves them through
Ollama BGE-M3. Markdown remains the source of truth: there is no memory
migration, no separate memory-cloud subscription, and no API key copied into
the plugin.
- LLM: a GLM model already authenticated in the OpenClaw Gateway
- Embeddings: an existing Ollama
bge-m3model through/api/embed - Vector store: local ChromaDB
- Credentials: no API key is copied into this plugin
- Source of truth: existing OpenClaw Markdown memory
OpenClaw's built-in hybrid search is strong at exact strings, dates, and source chunks. Memora adds a complementary representation layer for paraphrased, semantic, and cross-language recall:
- Structured retrieval — primary abstractions preserve what a memory is about while multiple cue anchors provide semantic entry points.
- No migration — keep editing the same OpenClaw Markdown memory.
- Reuse local embeddings — use the Ollama BGE-M3 model you already run.
- Reversible adoption — disable the plugin without changing source memory.
- Honest boundaries — local embeddings and vector storage; GLM extraction uses your existing OpenClaw Gateway route.
In a 30-query personal-corpus evaluation, Memora reached 86.7% Complete@5
versus 60.0% for built-in hybrid search, with median direct-retrieval
latency of 0.96s versus 2.42s. The paired difference was not
statistically significant at 0.05 (p=0.0768), and hybrid remained better for
some exact facts. Read the full methodology and limitations.
MEMORY.md / memory/**/*.md
|
v
Memora extraction ----> OpenClaw Gateway ----> GLM
|
v
primary memories + cue indices
|
v
ChromaDB + Ollama BGE-M3
|
v
memora_recall
|
v
OpenClaw active-memory policy
- OpenClaw 2026.7.1 or newer
- Python 3.10, 3.11, or 3.12
- Git
- A running Ollama server with
bge-m3 - A GLM route configured in OpenClaw, defaulting to
zai/glm-5.2
The initial synchronization calls GLM to extract memories and may incur model usage charges. Embeddings reuse the BGE-M3 model already managed by Ollama, so the plugin does not download a second copy.
Prepare Ollama first:
ollama pull bge-m3
ollama serveInstall the skill globally with one command:
curl -fsSL \
https://raw.githubusercontent.com/jkf87/memora-openclaw/main/install.sh |
bashThen ask OpenClaw to finish setup and build the initial index:
$memora-openclaw Install Memora, enable it, and build my initial index.
For an unattended full bootstrap, explicitly acknowledge configuration changes, the BGE-M3 download, and possible GLM usage:
curl -fsSL \
https://raw.githubusercontent.com/jkf87/memora-openclaw/main/install.sh |
bash -s -- --full --yesopenclaw skills install \
git:https://github.com/jkf87/memora-openclaw.git \
--globalThe skill checks prerequisites, prepares Ollama BGE-M3, installs the plugin,
backs up and patches OpenClaw configuration, builds the index, and verifies the
live memora_recall tool.
git clone https://github.com/jkf87/memora-openclaw.git
cd memora-openclaw
./scripts/install.shThe installer creates an isolated .venv, checks out a pinned Microsoft
Memora revision under vendor/, installs the Python dependencies, and links
the OpenClaw plugin.
./.venv/bin/python ./adapter.py syncIndex data is written to ~/.openclaw/memora-openclaw, outside the repository.
Run sync again after changing OpenClaw memory. Unchanged memory is detected
by a content digest and skipped.
Review the configuration first:
openclaw config patch \
--file ./config/openclaw.patch.json5 \
--dry-runThen apply it:
openclaw config patch --file ./config/openclaw.patch.json5The profile uses active-memory as a bounded GLM policy controller and
memora_recall for semantic retrieval through Ollama BGE-M3.
If active-memory is not installed, the setup script applies a minimal profile
that exposes memora_recall without adding a policy controller.
openclaw plugins doctor
openclaw gateway health
./.venv/bin/python ./adapter.py doctor
./.venv/bin/python ./adapter.py status
./.venv/bin/python ./adapter.py query \
"What did we decide about the memory system?" \
--strategy semanticThe defaults are portable and normally require no absolute paths:
model:zai/glm-5.2embeddingModel:bge-m3ollamaBaseUrl:http://127.0.0.1:11434ollamaTimeoutSeconds:120workspace:~/.openclaw/workspacedataDir:~/.openclaw/memora-openclaw
Ollama owns CPU, Metal, or CUDA execution. The plugin only calls its HTTP API.
A remote Ollama server can be used by changing ollamaBaseUrl.
This repository contains no memory index, transcripts, user-specific
benchmarks, credentials, or OpenClaw configuration. .gitignore excludes the
local virtual environment, Memora checkout, generated indices, caches, and
private evaluation artifacts.
The initial sync sends source memory to the GLM route already configured in OpenClaw so Memora can extract abstractions and cue anchors. Do not describe the system as fully local unless that GLM route is also local.
This project is an independent OpenClaw integration built on the Microsoft Memora research implementation. The pinned upstream revision is fetched during installation and retains its own MIT license.
Disable active-memory or remove memora_recall from its toolsAllow list.
The plugin never modifies or deletes the source Markdown memory.
MIT. Microsoft Memora is fetched separately and retains its own MIT license.