--- name: obsidian-vault-memory description: Use when an Obsidian vault is the durable memory shared by people, agents, sessions, or devices. Captures session evidence without sync-heavy rewrites, promotes stable knowledge into canonical notes, links provenance, and maintains queryable Obsidian Bases without turning generated views into a second source of truth. license: MIT source: adapted from https://github.com/kepano/obsidian-skills (MIT), with an original Syncthing-safe memory workflow --- # Obsidian Vault Memory Treat the vault as a durable knowledge system, not a transcript dump. Capture what happened append-only, then promote only reusable facts and decisions into stable canonical notes. Markdown remains the source of truth; Bases, backlinks, and search are projections over it. ## Discover the vault contract first Before writing, inspect the vault's existing folders, templates, property names, date format, link style, and attachment location. Reuse them. Do not introduce a parallel taxonomy because a generic template looks cleaner. Identify four roles, whether or not they are separate folders: - **session notes**: chronological evidence and handoff context; - **canonical notes**: the current durable understanding of a topic, system, person, project, or decision; - **inbox notes**: material not yet classified or verified; - **indexes**: `.base` files or maps of content, never duplicated note content. If no convention exists, propose one and obtain agreement before migrating or bulk-writing. A safe minimal shape is `Sessions/`, `Knowledge/`, `Inbox/`, and `Indexes/`. ## Use stable properties as the schema Keep frontmatter small and typed consistently. Start with fields that support an actual retrieval or maintenance need: ```yaml --- type: session created: 2026-08-12 updated: 2026-08-12 status: complete topics: - "[[Obsidian memory]]" source_session: local-agent-session-id --- ``` - Use ISO dates so lexical order is chronological. - Use YAML lists consistently for multi-value properties. - Quote wikilinks in properties: `related: "[[Canonical Note]]"`. - Give stable concepts aliases when people may search for another name. - Do not encode every relationship twice as both a tag and a property. Use tags for broad classification and wikilinks for named relationships. - Add a property only when a Base, search, template, or maintenance rule consumes it. ## Capture a session without rewriting shared hot files Create one uniquely named session note, for example `Sessions/2026-08-12T1430-agent-topic.md`. Record: 1. the goal and relevant starting context; 2. evidence observed, with links to source notes or external sources; 3. decisions made and their rationale; 4. changes performed and verification results; 5. unresolved questions and the next concrete action; 6. links to each canonical note created or updated. Prefer creating a new session note over appending to one global log. On a vault synced by Syncthing or another file-level synchronizer, simultaneous edits to the same Markdown file create conflict copies; unique per-session files reduce the collision surface. Do not treat sync completion as transactional locking. Before editing an existing note, re-read it immediately before the write. Make a small section-level patch and preserve unrelated human or agent changes. After the write, check for sync-conflict files and report them; never silently choose a winner or delete a conflict copy. ## Promote durable knowledge deliberately At session end, review observations using this test: - Is it expected to matter in a later session? - Is it verified, or clearly labelled as an inference/open question? - Does a canonical note already own this subject? - Can it replace stale text instead of being appended as another contradictory fact? Update the owning canonical note with the smallest self-contained fact or decision. Link back to the session note under a `Sources` or `History` section so provenance survives compaction. If ownership is unclear, leave the item in the session or inbox instead of creating a near-duplicate canonical note. Keep history in session notes and current truth in canonical notes. Do not repeatedly paste full session summaries into both places. When new evidence supersedes a fact, update the canonical statement and preserve the old state through the linked session history or an explicit decision record. ## Make memory retrievable with Bases Use an Obsidian Base when the user needs a live index. A Base selects notes through their paths and properties; it does not store a second copy of them. For example: ```yaml filters: and: - 'file.inFolder("Sessions")' - 'type == "session"' views: - type: table name: "Recent sessions" limit: 30 order: - file.name - status - topics - file.mtime ``` Validate the `.base` file as YAML, confirm every referenced property exists in the chosen schema, and open it in Obsidian when runtime access is available. Embed a Base in a dashboard with `![[Indexes/Sessions.base#Recent sessions]]`; do not hand-maintain the same list in the dashboard body. ## Retrieve context before acting Use the strongest available interface in this order: 1. search properties, names, aliases, and links using Obsidian search or the Obsidian CLI when a running instance is available; 2. inspect the relevant Base and backlinks for related notes; 3. fall back to filesystem search for plain Markdown access. With the CLI, explicitly target the vault when more than one may be open: ```bash obsidian vault="Vault Name" search query="topic" limit=20 obsidian vault="Vault Name" backlinks file="Canonical Note" obsidian vault="Vault Name" read path="Knowledge/Canonical Note.md" ``` The CLI requires Obsidian to be open. Filesystem reads and writes do not, but they cannot prove that Bases, embeds, or links render correctly in the application. ## Verify the memory handoff Before finishing: - parse changed frontmatter and `.base` files as YAML; - confirm new wikilinks resolve or are intentionally future links; - search for accidental duplicate canonical titles or aliases; - confirm the session note links to promoted knowledge and vice versa; - inspect `*sync-conflict*` files (or the vault's synchronizer convention); - if Obsidian is available, open the changed notes and Bases and verify rendering; - report what was captured, what was promoted, what remains uncertain, and whether application-level rendering was tested. Never claim that a filesystem-valid note is verified in Obsidian unless it was actually opened there.