Skip to content

Obsidian vault integration: import vault notes into workspace memory + wikilink-aware dashboard rendering #364

Description

@umi-appcoder

Summary

Let a workspace connect to an Obsidian vault (a folder of markdown notes with YAML frontmatter and [[wikilinks]]) so notes flow into the workspace memory system and render nicely in the dashboard. Obsidian vaults are just plain markdown on disk, so this is very feasible — most of the machinery already exists in the repo.

Why

  • The memory subsystem already syncs Claude's file-based markdown memory (frontmatter + [[wikilinks]]) into SQLite via charts/workspace/memory/sync.py. An Obsidian vault is the same shape — user-authored instead of agent-authored.
  • Users keep durable personal/project knowledge in Obsidian; agents in the workspace should be able to search and cite it (via the existing memory_search MCP tool + auto-injection hook) without copy-pasting.
  • The dashboard already has a Files tab, a docs viewer, and marked-based markdown rendering — wikilink-aware rendering is a small delta.

Existing building blocks

Piece Where Relevance
File→SQLite memory sync (frontmatter parse, mtime fingerprint, namespacing, tags) charts/workspace/memory/sync.py ~70% of the vault importer already written
SQLite store + embeddings + memory_search MCP charts/workspace/memory/, mcp_memory.py vault notes become searchable by all agents
Markdown rendering (marked) dashboard web (charts/workspace/web/) render notes; add wikilink resolution
Files route web/src/routes/files/ browse the vault
Prompt auto-injection hook memory_inject_hook.py relevant vault notes surface in agent prompts automatically

Proposed scope

Phase 1 — vault import (MVP)

  • Vault location convention: /home/dev/vault by default, overridable (env var / values.yaml / Settings). Users get content there however they like — typically git clone of a vault repo (Obsidian's git plugin is the standard headless sync path; Obsidian Sync is proprietary and not reachable headlessly).
  • Extend memory/sync.py (or a sibling vault_sync.py reusing its scanner) to import vault notes:
    • namespace vault.<relative-path-slug>, tags auto-imported,obsidian-vault
    • parse Obsidian YAML frontmatter (tags, aliases) into entry tags
    • one-way (vault → SQLite), mtime-fingerprinted like the existing sync; vault files stay canonical
    • skip .obsidian/, templates, and honor a size cap per note
  • Notes then automatically become searchable via memory_search and eligible for prompt auto-injection.

Phase 2 — dashboard UX

  • Wikilink-aware markdown rendering: [[Note Name]] resolves to the target note (Files tab viewer + Memory tab detail).
  • Vault section/filter in the Memory tab (filter by the obsidian-vault tag) and a "Vault" entry point in Files.
  • Settings card: vault path + sync on/off + last-sync status.

Stretch (separate follow-up issues, not this one)

  • Two-way: export workspace memories as Obsidian-formatted notes into the vault (agent knowledge visible in the user's own Obsidian app).
  • Graph view of wikilink structure.
  • Periodic git pull/push of the vault repo.

Non-goals

  • Obsidian Sync (proprietary protocol) — git is the sync transport.
  • Running the Obsidian desktop app in the workspace (possible via VNC but heavy; not needed since vaults are plain files).
  • Obsidian plugin compatibility (Dataview queries etc.) — render as plain markdown.

Acceptance criteria

  • With a vault at /home/dev/vault, notes appear in the dashboard Memory tab (tagged obsidian-vault) within one sync interval.
  • memory_search from any agent harness returns vault content.
  • Editing a note re-imports it; deleting it removes/tombstones the entry.
  • Wikilinks in the dashboard viewer navigate to the linked note.
  • No vault → existing behavior unchanged.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions