AI Memory Interchange Layer — language-neutral bridge for AI memory systems
Project description
memlink
A canonical interchange format for AI memories — like Pandoc, but for AI memory systems.
Built for developers building AI assistants, memory platforms, and agent frameworks.
Why memlink?
Different AI tools store memories differently. memlink lets them exchange memories without every project writing custom converters.
Without memlink — 10 memory formats need 45 converters. Every new format makes it worse:
Ombre → OpenClaw Ombre → Mem0 Ombre → Zep
Mem0 → Zep OpenClaw → Zep ...
With memlink — each format writes one Reader + one Writer. Everything else is automatic:
┌── Reader → Canonical ──┬── Writer → OpenClaw
Ombre ─┤ ├── Writer → Mem0
└── ... └── Writer → Any Format
n systems = 2n plugins. Not n² converters.
Quick Start
pip install memlink-bridge
# Convert Ombre → OpenClaw
memlink convert --from ombre --to openclaw \
-s ~/.claude/ombre-buckets -T ./my-memories/
# Inspect any memory file
memlink inspect tests/fixtures/ombre_samples/dynamic/user/sample.md
# Validate data integrity
memlink validate -s tests/fixtures/ombre_samples --level schema
# Show installed formats
memlink formats
Supported Formats
| Format | Read | Write | Status |
|---|---|---|---|
| Ombre Brain | ✅ | ✅ | Stable |
| OpenClaw | ✅ | ✅ | Stable |
| Generic Markdown | ✅ | — | Stable |
| Mem0 | 🚧 | — | v0.2 |
| Zep | 🚧 | — | v0.3 |
3 plugins, 7+ apps interoperable. Generic alone covers Obsidian, Logseq, Bear, iA Writer, and plain Markdown — every app that uses YAML frontmatter.
Architecture
Ombre ──┐
Generic ──┼──→ Reader → Canonical Memory → Writer ──┬──→ OpenClaw
OpenClaw ─┘ └──→ Ombre
Each format implements three methods:
class FormatPlugin:
def read(path) → ReadResult # Format → Canonical
def write(memories, path) → [] # Canonical → Format
def validate(path) → [Issue] # Integrity checks
Add a new format = write one plugin. Zero changes to core code.
Feature Compatibility
memlink is honest about what gets lost. Every conversion shows a Compatibility Report:
$ memlink convert --from ombre --to openclaw -s ombre/ -T openclaw/
Read: 117 memories from ombre
Compatibility Report:
[ok] Preserved via metadata:
Emotion fields (valence/arousal): 117 field values
Warnings: 0
Time: 0.23s
No silent data loss. No surprises.
Canonical Memory Schema
id: "project-alpha"
name: "Project Alpha Kickoff"
body: "..."
kind: dynamic
tags: [meeting, planning]
metadata: { ... }
See spec/canonical-v1.md for the full specification. JSON Schema also available.
Roadmap
| Version | Focus |
|---|---|
| v0.2 | Mem0 Reader, daily-notes roundtrip, --fail-on-loss |
| v0.3 | Zep Reader, chat export readers (ChatGPT, Claude) |
| v0.4 | memlink merge, memlink broadcast |
| v1.0 | Stable Canonical Schema v1, stable Plugin API |
What memlink is NOT
- ❌ Sync engine — v0 is export/import only
- ❌ Memory database — Works with files, not APIs
- ❌ Embedding store — No vector search
- ❌ Knowledge graph — No traversal or inference
Development
git clone https://github.com/velnori/memlink.git
cd memlink
pip install -e ".[dev]"
pytest tests/ -v # 115 tests
ruff check memlink/ # Lint
mypy memlink/ # Type check
See CONTRIBUTING.md for how to add a new format.
License
MIT — see LICENSE.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file memlink_bridge-0.1.1.tar.gz.
File metadata
- Download URL: memlink_bridge-0.1.1.tar.gz
- Upload date:
- Size: 44.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75541baf6c28f7c074560ed20ff9cdbed6ff6ed73d0b4bede44a646f18d5efbf
|
|
| MD5 |
105700051978d3e2ef8ad490c3683c2a
|
|
| BLAKE2b-256 |
fa173cc978ec1f5c55017a3135183ed6ab66031e6e25f5995bb6063683ece4b5
|
Provenance
The following attestation bundles were made for memlink_bridge-0.1.1.tar.gz:
Publisher:
release.yml on velnori/memlink
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
memlink_bridge-0.1.1.tar.gz -
Subject digest:
75541baf6c28f7c074560ed20ff9cdbed6ff6ed73d0b4bede44a646f18d5efbf - Sigstore transparency entry: 1991326919
- Sigstore integration time:
-
Permalink:
velnori/memlink@3b081ef1585ebf399f84f4de410e6a6c8ce3f5c1 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/velnori
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3b081ef1585ebf399f84f4de410e6a6c8ce3f5c1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file memlink_bridge-0.1.1-py3-none-any.whl.
File metadata
- Download URL: memlink_bridge-0.1.1-py3-none-any.whl
- Upload date:
- Size: 40.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd73be4419d8b239adc7fcaea4366431a551fc5a86a6e7a999e540b77fa6e676
|
|
| MD5 |
3a04e09fe50f90ba26532137c16995c2
|
|
| BLAKE2b-256 |
e7bf3edf8620b1396861bf2a8276a3df60de9f9bb5baf0691b1eb44538527f2c
|
Provenance
The following attestation bundles were made for memlink_bridge-0.1.1-py3-none-any.whl:
Publisher:
release.yml on velnori/memlink
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
memlink_bridge-0.1.1-py3-none-any.whl -
Subject digest:
dd73be4419d8b239adc7fcaea4366431a551fc5a86a6e7a999e540b77fa6e676 - Sigstore transparency entry: 1991326982
- Sigstore integration time:
-
Permalink:
velnori/memlink@3b081ef1585ebf399f84f4de410e6a6c8ce3f5c1 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/velnori
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3b081ef1585ebf399f84f4de410e6a6c8ce3f5c1 -
Trigger Event:
push
-
Statement type: