← knowledge.oriz.in

PKM stack — Foam + foam-mcp for agents, Obsidian GUI for humans

decision pkmfoamobsidianmcpagent-toolingdecision

PKM stack

Locked

Storage

C:/D/oriz/knowledge/ = plain markdown, [[wikilinks]], YAML frontmatter. Both Foam and Obsidian point at the same folder. No conflict — both read/write plain .md. .obsidian/ config lives under obsidian/ sibling folder per current setup, gitignored where machine-specific.

Why Foam wins

Score 92/100 vs Obsidian 74, all others <60. Adversarially verified 15 tools 2026-07-03:

Why Obsidian joins (human viewer only)

Scope hard-locked: no mcp-obsidian, no Local REST API plugin, no Smart Connections plugin. Obsidian is a viewer. Agents use foam-mcp. Prevents MCP bloat + agent-fleet-parity confusion.

Why every other tool rejected

Rejection Reason
Khoj / AnythingLLM / Reor RAG-over-notes shape, not note-store. Postgres+pgvector / LanceDB state can't be git-committed. See related skip-rag decision.
Dendron Abandoned (last commit 2025-01-30). Violates no-fork-divergence.
Reor Archived 2026-03-07. Domain hijacked (issue #533).
Logseq Outliner-forced bullet nesting hostile to prose OKF. No YAML frontmatter. DB-version migration threatens plain-md guarantee.
Trilium / Joplin / AppFlowy / memos / Notesnook / Anytype SQLite/encrypted DB storage, not .md files. Kills git log --follow, per-file commits, knowledge-deletion-not-supersession.
SilverBullet Server owns space dir → git pull while running = index drift. Multi-writer unsupported.
Zettlr Plain md but no MCP, no CLI, no agent surface. Adds nothing over Foam.
TiddlyWiki Single-HTML default blob is git-hostile. .tid custom format not .md.

Full 15-tool matrix: verified in workflow run wcwfswst7 (2026-07-03).

MCP count budget

Screenpipe → knowledge/journal/ pipe

Screenpipe already writes memory to screenpipe-memories.md. Per auto-journal-cc-sessionend-plus-screenpipe-2026-07-03, configure a pipe that also writes daily digests to knowledge/journal/YYYY-MM-DD.md.

Rollback trigger

Related