From obsidian-bridge
Use when a project's design specs, implementation plans, impl notes, or best-practice/testing standards should live in a central Obsidian vault, or when asked to implement a plan that is stored in Obsidian. Triggers include "put this in my vault", "view my plans in Obsidian", "implement <note>", and managing project docs as linked Obsidian notes.
How this skill is triggered — by the user, by Claude, or both
Slash command
/obsidian-bridge:obsidian-bridgeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Store the docs Claude produces (specs, plans, impl notes, best-practices,
README.mdobsidian_bridge/__init__.pyobsidian_bridge/__main__.pyobsidian_bridge/cli.pyobsidian_bridge/dashboard.pyobsidian_bridge/dataview.pyobsidian_bridge/frontmatter.pyobsidian_bridge/importer.pyobsidian_bridge/notes.pyobsidian_bridge/projects.pyobsidian_bridge/vault.pypytest.initemplates/best-practice.mdtemplates/impl.mdtemplates/plan.mdtemplates/spec.mdtemplates/tests.mdtests/conftest.pytests/test_cli.pytests/test_dashboard.pyStore the docs Claude produces (specs, plans, impl notes, best-practices,
testing standards) in ONE central Obsidian vault, and implement any plan by
naming its note. Docs are vault-native: written straight into the vault,
not the code repo. Every note records source_repo so implementation knows
which codebase to edit.
The deterministic mechanics are a Python CLI. Run it from the skill directory:
python -m obsidian_bridge <command> --help. You supply the judgment:
classifying docs, curating standards, and injecting them into implementation.
Find the vault: python -m obsidian_bridge setup --vault "<path>".
Detect <path> by reading ~/Library/Application Support/obsidian/obsidian.json
(the CLI's vault module exposes find_vault). If no vault exists, create the
directory first, then run setup. Setup scaffolds folders, installs Dataview, and
writes the dashboard. If Dataview install warns (offline), tell the user the
dashboard will render once they install Dataview from Obsidian's community plugins.
When you produce a spec or plan, write it into the vault with write_doc:
from obsidian_bridge import projects
projects.write_doc(vault_path, project="<repo-basename>", doc_type="spec",
topic="<slug>", date="<YYYY-MM-DD today>",
source_repo="<absolute repo path>", status="draft",
body="<full markdown body>")
doc_type ∈ spec|plan|impl. topic is a kebab-case slug derived from the doc
title (lowercase, spaces→hyphens, drop punctuation) — it becomes the filename
<date>-<topic>.md. write_doc auto-registers the project if needed.
This OVERRIDES the default superpowers spec/plan location — set the spec-location preference to the vault so brainstorming and writing-plans output land here automatically.
Re-runnable any time — running it again re-scans the project for new docs. Steps:
importer.scan_docs(repo) lists candidate docs. It already excludes
agent/instruction files (CLAUDE.md, AGENTS.md, GEMINI.md, SKILL.md) and
noise dirs (build/deps, .claude, .cursor, .obsidian).model: "haiku"; each
reads its file and returns ONLY structured JSON {type, topic, status, confidence} where type ∈ spec|plan|impl|best-practice|tests. The main agent
never reads the doc bodies. Drop low-confidence results and report them as
"needs manual classification".importer.find_existing_copy(vault, rel_path). If a copy already
exists, do NOT re-import it (avoids duplicates).importer.is_git_tracked:
action: "move" (relocate into the vault).action: "copy", which records source_file so future re-imports can
refresh it; (b) move into the vault — action: "move"; (c) keep
as-is — action: "skip" (default). Apply the one chosen action to every
git-tracked doc.importer.apply_migration(vault, decisions) (each decision carries its action). For existing copies whose
source file changed and where the user chose copy+refresh, call
importer.refresh_copy(note, file).For bulk reorganizing/deduping notes already in the vault, also fan out to haiku subagents (one per note or per cluster) that return compact structured summaries/decisions; the main agent merges the results. Same principle: keep large-document reading off the main context.
00-Dashboard.md uses live Dataview queries — no maintenance needed.
Triggered by "implement ":
notes.resolve_note(vault, name). If multiple, ASK which.source_repo from frontmatter. If missing, ask the user
and backfill it.notes.load_necessities(vault, project) and read each standard.source_repo,
enforcing the loaded standards as constraints.notes.set_status(note, "in-progress") then "done".Best-practices and testing notes live in Standards/ (shared) or
Projects/<p>/standards/ (project-specific). Each project hub note has a
necessities: list of the standards that govern it.
On register and during implement: assess the codebase, then UPDATE the hub's
necessities — add applicable standards, author new reusable ones, prune
irrelevant ones — and REPORT what you changed. Decide autonomously; do not ask
first, but always tell the user the diff.
project, type, topic, created, status, source_repo, related, tags
(+ scope for standards). source_repo is mandatory on every spec/plan/impl
note — it is the only link back to the code.
necessities (standards must constrain the work).source_repo, leaving a note that cannot be implemented.npx claudepluginhub bemusedcat/clawset --plugin obsidian-bridgeSearches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.