Agents forget, and shared context gets messy.
Long-running projects need durable facts, provenance, decisions, and session history. Free-form notes alone are readable, but not easy to validate or coordinate across tools.
Stable v3.0 core + v3.1 agentic hardening
Obsidian Memory for AI is a Markdown-first memory protocol: atomic facts, append-only events, generated views, portable linting, and cooperative write envelopes for agents. No database. No daemon. No vector store.
vault/
|-- CLAUDE.md
|-- COPILOT.md
|-- AGENTS.md
|-- sources/
`-- memory/
|-- schema/
|-- facts/
| `-- elena-voss/role.md
|-- events/2026-05-11/
|-- _views/
| |-- by-entity/elena-voss.md
| `-- conflicts.md
|-- _inbox/agent-id/ops/
|-- _claims/
|-- _ops/applied/
`-- _archive/
`-- tools/
|-- lint.py
|-- ops.py
|-- compact.sh
`-- query.sh
v3 keeps the files human-readable while giving agents typed records, stable identities, generated read models, and reviewable writes.
Long-running projects need durable facts, provenance, decisions, and session history. Free-form notes alone are readable, but not easy to validate or coordinate across tools.
Keep narrative pages for humans. Give agents atomic facts, append-only events, schema-checked frontmatter, generated views, and an inbox for proposed writes.
How it works
v3.0 is the stable Atomic Markdown Memory core. v3.1 adds a cooperative write flow for agentic environments without introducing a database or service.
`memory/people/`, `memory/projects/`, and `memory/context/` remain prose-first Obsidian notes optimized for reading, linking, and thinking.
Durable agent-facing facts live one tuple per file under `memory/facts/{entity}/{predicate}.md`, with typed frontmatter and provenance.
Session-level history goes to `memory/events/YYYY-MM-DD/`, preserving time, source, and derived facts without rewriting old memory.
`_views/` gives agents fast read models by entity, predicate, timeline, stale facts, operations, claims, and conflicts. Regenerate them, never edit them.
v3.1 agentic hardening
v3.1 makes cooperation explicit: proposed writes are Markdown operation envelopes, not direct mutations of canonical memory. A human or trusted compactor validates, applies, rebuilds views, and records receipts.
Agents write proposed operations to `memory/_inbox/{agent-id}/ops/`, with reason, target, source, payload, and status.
Facts and events can carry durable `id:` values, so paths stay readable without being the only identity.
Update and archive operations can include a content hash for optimistic conflict detection before a write is applied.
Cooperative agents can create TTL-based `_claims/` files for a target. They are diagnostic coordination files, not distributed locks.
Applied operations are preserved under `_ops/applied/`, so the vault keeps an audit trail of who proposed what and what actually changed.
Generated views surface inbox state, operations, conflicts, claims, IDs, and predicates so agents can inspect the system before acting.
Reference vault
The repository includes a fictional Elena Voss vault with typed facts, events, generated views, operation helpers, linting, compaction, and query scripts.
examples/v3-minimal-vault/
|-- CLAUDE.md
|-- README.md
|-- sources/
|-- tools/
| |-- lint.py
| |-- ops.py
| |-- compact.sh
| |-- rebuild-views.sh
| `-- query.sh
`-- memory/
|-- entities.md
|-- schema/
|-- facts/elena-voss/
|-- events/2026-05-11/
|-- _views/
|-- _inbox/
|-- _claims/
`-- _ops/applied/
# Context for AI sessions
## v3 memory protocol
- Human-readable narrative lives in memory/people/,
memory/projects/, and memory/context/.
- Agent-readable facts live in memory/facts/ and
must pass tools/lint.py.
- New session records live in memory/events/YYYY-MM-DD/.
- Proposed agent writes should be operation envelopes in
memory/_inbox/{agent-id}/ops/.
- Cooperative claims live in memory/_claims/; treat them
as advisory, not transactional locks.
- Read generated context from memory/_views/ when available,
but never edit _views directly.
---
type: fact
id: fact-elena-voss-role
entity: elena-voss
predicate: role
value: "Art conservator and pigment researcher"
valid_from: 2025-09-01
valid_to: null
recorded_at: 2026-05-10T22:14:00Z
confidence: high
sources:
- sources/profile.md
last_reviewed: 2026-05-11
decay:
review_after_days: 180
archive_after_valid_to: true
pin: false
---
---
type: operation
operation_id: op-20260512t180000z-1a2b3c4d
op: create_fact
agent_id: agent-copilot-1a2b3c4d
created_at: 2026-05-12T18:00:00Z
target_id: fact-elena-voss-language
target_path: memory/facts/elena-voss/language.md
precondition_hash: null
status: proposed
reason: "Capture a durable language preference."
sources:
- sources/session-2026-05-12.md
payload:
type: fact
id: fact-elena-voss-language
entity: elena-voss
predicate: language
value: Spanish
---
# memory/_views/by-entity/elena-voss.md
Generated by tools/rebuild-views.sh. Do not edit.
## Active facts
- role: Art conservator and pigment researcher
source: memory/facts/elena-voss/role.md
- base: Berlin, Germany
source: memory/facts/elena-voss/base.md
- primary-project: Concordance
source: memory/facts/elena-voss/primary-project.md
## Operations
- pending: 1 proposed operation in _inbox/
- conflicts: none
Design choices
Your memory is a folder you can read, edit, version, tar, sync, and move. There is no hosted retrieval API deciding what the agent remembers.
Frontmatter declares types. YAML schemas and `tools/lint.py` enforce required fields, path semantics, dates, predicates, wikilinks, and contradictions.
Facts distinguish when something is true in the world from when it was recorded, preserving temporal context without a graph engine.
Paths, frontmatter, `rg`, `yq`, and `tools/query.sh` cover the personal-context scale this system is designed for.
Every memory change is visible in diffs and history. Generated views make derived state reviewable instead of hidden in a service.
Existing vaults can adopt v3 gradually: add schemas and tools, write new facts atomically, and backfill durable records as they become useful.
Compatibility
Reads CLAUDE.md natively and can follow the v3 protocol in the vault.
Use COPILOT.md, repo instructions, and operation envelopes for proposed writes.
Map memory/ to /memories: facts, events, decisions, insights, views, and inbox.
Pair the protocol with Obsidian-aware skills for frontmatter, wikilinks, and vault conventions.
Adapt the loading mechanism. The data stays as Markdown files in your vault.
Scope
Get started
The stable v3.0 core is ready to use. The v3.1 hardening additions are already in the reference implementation for cooperative agent workflows.
FAQ
Yes. The source of truth is still files in your vault: Markdown, YAML frontmatter, generated Markdown views, and small scripts that travel with the vault.
No. v3.1 adds operation envelopes, advisory claims, precondition hashes, and receipts. Those make cooperative file workflows safer, but they do not add SQL, transactions, embeddings, a daemon, or a remote service.
Agents propose changes under their own inbox folder. The compactor validates the envelope, checks preconditions, applies the change, rebuilds views, and records an applied receipt. Conflicts stay visible instead of being silently merged.
No. v3.1 is additive hardening for cooperative agents. If one human and one agent update the vault manually, the stable v3.0 core can be enough.
No. Claude Code has a strong native file convention, but the protocol is tool-neutral. Copilot, Cursor, local agents, and any AI that can read files can use the same vault.
Different layer. Vector and graph systems are strong for large retrieval problems. This system handles curated personal and project context where transparency, ownership, auditability, and portability matter more than managed infrastructure.