AI Memory Interchange Layer — language-neutral bridge for AI memory systems
Project description
memlink
Pandoc for AI memories.
One canonical schema to bridge AI memory systems.
Stop writing n² converters between memory formats.
Write one Reader + one Writer per format. Everything else is automatic.
Explicit compatibility reports. No silent data loss.
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 ...
With memlink — each format writes one Reader + one Writer:
┌── Reader → Canonical ──┬── Writer → OpenClaw
Ombre ─┤ ├── Writer → Any Format
└── ... └── Writer → Any Format
n systems = 2n plugins. Not n² converters.
Quick Start
pip install memlink-bridge
# Create a demo memory file
mkdir -p /tmp/memlink-demo
cat > /tmp/memlink-demo/hello.md << 'EOF'
---
title: Hello MemLink
tags: [demo]
---
This is a memory. memlink can bridge it across AI memory formats.
EOF
# Convert Generic Markdown → OpenClaw
memlink convert --from generic --to openclaw \
-s /tmp/memlink-demo \
-T /tmp/memlink-output
# Show installed formats
memlink formats
What just happened: A plain Markdown file was read into Canonical Memory format, then written as an OpenClaw memory.
Sample output:
Read: 1 memories from generic
Warnings: 0
Time: 0.00s
You should now see an OpenClaw-style memory file in /tmp/memlink-output/. The Compatibility Report tells you exactly what was preserved or dropped — no silent data loss.
Supported Formats
| Format | Read | Write | Status |
|---|---|---|---|
| Ombre Brain | ✅ | ✅ | v0.1.1 |
| OpenClaw | ✅ | ✅ | v0.1.1 |
| Generic Markdown | ✅ | — | v0.1.1 |
| Mem0 | ✅ | — | v0.2.0 |
| Zep | ✅ | — | v0.3.0 |
Generic Markdown works with YAML-frontmatter Markdown used by tools like Obsidian, Logseq, Bear, and plain Markdown. Tool-specific extensions are preserved as metadata or reported as compatibility notes.
Planned Formats
| Format | Target |
|---|---|
| Chat export readers (ChatGPT, Claude) | later |
Feature Compatibility
MemLink is honest about what transfers and what doesn't.
Without a compatibility layer:
- Format-specific fields can disappear silently.
With MemLink:
- Preserved fields stay in Canonical Memory.
- Format-specific fields are preserved in metadata when possible.
- Compatibility reports explain what changed.
Example compatibility report:
$ memlink convert --from ombre --to openclaw -s ~/.claude/ombre-buckets -T ./memories/
Read: 117 memories from ombre
Compatibility Report:
[ok] Preserved via metadata:
Emotion fields (valence/arousal): 117 field values
Warnings: 0
Time: 0.23s
Architecture
Ombre ──┐
Mem0 ──┼──→ Reader → Canonical Memory → Writer ──┬──→ OpenClaw
Generic ──┘ └──→ 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.
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
- ❌ Production ready — v0.3.0 is an alpha. Use in production at your own discretion.
Roadmap
| Version | Focus |
|---|---|
| v0.2 | Mem0 Reader ✅, --fail-on-loss ✅ |
| v0.3 | Zep Reader ✅, MkDocs ✅ (current) |
| v0.4 | Chat export readers (ChatGPT, Claude), memlink merge, memlink broadcast |
| v1.0 | Stable Canonical Schema v1, stable Plugin API |
Development
git clone https://github.com/velnori/memlink.git
cd memlink
pip install -e ".[dev]"
pytest tests/ -v # 148 tests
ruff check python/memlink/ # Lint
mypy python/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.3.0.tar.gz.
File metadata
- Download URL: memlink_bridge-0.3.0.tar.gz
- Upload date:
- Size: 50.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da0bc2d7a84d5594cf12e796628ebb276c8ad9f3d1fe74b6a38c00acf2028b5e
|
|
| MD5 |
5d535575aaea895969170427fd2dc551
|
|
| BLAKE2b-256 |
779663f3235885f3ed79381e07bb1a98e1d793abc82c027262b079f0889ef8b5
|
Provenance
The following attestation bundles were made for memlink_bridge-0.3.0.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.3.0.tar.gz -
Subject digest:
da0bc2d7a84d5594cf12e796628ebb276c8ad9f3d1fe74b6a38c00acf2028b5e - Sigstore transparency entry: 2005467479
- Sigstore integration time:
-
Permalink:
velnori/memlink@ce90f2842783baf533fa45bd8ad1f59d053e6eed -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/velnori
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ce90f2842783baf533fa45bd8ad1f59d053e6eed -
Trigger Event:
push
-
Statement type:
File details
Details for the file memlink_bridge-0.3.0-py3-none-any.whl.
File metadata
- Download URL: memlink_bridge-0.3.0-py3-none-any.whl
- Upload date:
- Size: 46.1 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 |
60df25ebb783bb75021e00f6b307bc012d93b5e5ab2e7dc06e708241180657ff
|
|
| MD5 |
10cac3c85c41da3f87b265e4b5e7b4e1
|
|
| BLAKE2b-256 |
1e4bb7660317d53908a9f5b5a03e09319653fdab53eed65cb457f97eb9a75894
|
Provenance
The following attestation bundles were made for memlink_bridge-0.3.0-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.3.0-py3-none-any.whl -
Subject digest:
60df25ebb783bb75021e00f6b307bc012d93b5e5ab2e7dc06e708241180657ff - Sigstore transparency entry: 2005467644
- Sigstore integration time:
-
Permalink:
velnori/memlink@ce90f2842783baf533fa45bd8ad1f59d053e6eed -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/velnori
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ce90f2842783baf533fa45bd8ad1f59d053e6eed -
Trigger Event:
push
-
Statement type: