MemoryPlane is an open-source, local-first memory control plane for AI agents.
It lets OpenClaw agents, Codex, Claude Code, and MCP-compatible assistants share scoped, cited, user-approved memory without locking that memory inside one agent or one vendor.
Your agents can remember — but only with receipts, boundaries, and a way to forget.
Many users already keep their real knowledge in local second brains like Obsidian, Markdown folders, project notes, and agent memory files. Existing agents often cannot use that knowledge safely: they silently remember, blur personal/project/client context, lose source citations, or trap memory inside one vendor.
MemoryPlane improves that workflow by turning existing notes into reviewable memory proposals. Users keep their notes where they are; agents get scoped, cited, user-approved memory they can explain, update, supersede, or forget.
- SQLite local memory store
- MCP server
- CLI:
memoryctl - memory proposal inbox
- scoped search
- evidence packets with citations
- forget/update/supersede memory
- Markdown/JSON import-export
The first working slice is a zero-dependency Python CLI using SQLite from the standard library.
It proves the trust loop:
propose memory → review inbox → approve memory → scoped search with citations → forget if needed
It now also includes an Obsidian import MVP:
existing vault notes → pending proposals with note citations → human approval → agent-safe memory
# optional: choose a database path
export MEMORYPLANE_DB=.memoryplane.sqlite
bin/memoryctl init
bin/memoryctl propose \
--claim "The project owner prefers concise status updates." \
--scope personal \
--source-uri docs/example-source.md \
--source-title "Daily memory" \
--excerpt "The project owner asked for next steps and wanted action." \
--agent demo-agent \
--reason "User preference surfaced during project work."
bin/memoryctl inbox
bin/memoryctl approve 1 --actor reviewer
bin/memoryctl search "concise updates" --scope personal
bin/memoryctl explain 1
bin/memoryctl export --format markdown
# Reject proposals that should not become durable memory
bin/memoryctl reject 2 --actor reviewer --note "Not durable enough."
# Generate pending proposals from an existing Obsidian vault
bin/memoryctl import-obsidian /path/to/obsidian-vault --scope projectThis working tree includes a local v0.2-oriented update based on the internal master plan:
- added
teamscope - added
memoryctl reject - added
memoryctl explain - added
memoryctl export --format json|markdown - added lightweight SQLite FTS5 search when available, with LIKE fallback
- expanded tests for review lifecycle, explainability, export, and Obsidian import
This update has not been pushed to GitHub yet.
python3 -m unittest discover -s tests -v