Notion wiki from vault
Skill NovateStudioGit/novate-studio-skills/knowledge-ops/notion-wiki-from-vault
57 agent skills for Claude Code — creative production, paid growth, copywriting, ecommerce, email marketing & knowledge ops. By Novate Studio.
npx -y skills add NovateStudioGit/novate-studio-skills --skill notion-wiki-from-vaultAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
One-way sync of selected Obsidian vault folders into a Notion parent page — so collaborators / clients see the curated docs without giving them vault access. Converts wikilinks to Notion links, frontmatter to Notion page properties, callouts to Notion callouts. NEVER deletes pages on the Notion side; updates by content diff. Use when the user says "publish this vault folder to Notion", "sync these notes", "share this with the client", or names an Obsidian path + a Notion destination.
SKILL.md
5.4 KB, as published. Nobody here has run it
/notion-wiki-from-vault
Obsidian → Notion, one-way. Lets users keep working in Obsidian (their canonical store per obsidian_auto_logging.md) while exposing curated subsets to Notion-based stakeholders.
Inputs
- Source folder (required). Path under
~/Obsidian/to sync. e.g.Projects/STUDIO/web-design-service/orBrands/ExampleBrand-co/brand-identity/. - Target Notion parent (required). URL or ID of the Notion page that should hold the synced pages.
- Scope (optional). Default: all
.mdfiles in the source folder (non-recursive). User can pass "recursive" to include subfolders, or "files: a.md, b.md" to scope explicitly. - Frontmatter mapping (optional). If user wants Obsidian frontmatter fields mapped to Notion page properties (only works if target parent is a database, not a regular page). Default: ignore frontmatter.
Steps
- Index vault folder. List
.mdfiles in scope. Parse each: frontmatter, body, wikilinks, embeds, tags. - Index Notion target.
notion-fetchthe parent. List existing child pages (these are previous sync outputs if any). - Diff.
- New files → create as new Notion sub-pages.
- Existing files (matched by title) → diff content. If changed, update via
notion-update-pagereplace_content. - Notion pages with no matching vault file → flag, never auto-delete. User decides.
- Convert content per file.
- Frontmatter: strip from body. If target is a database, map fields to properties; otherwise drop with a comment header on the Notion page ("Source: <vault path>. Synced YYYY-MM-DD.").
- Wikilinks
[[note-name]]→ Notion link to the corresponding synced page (lookup by title in this batch + target parent). Unresolvable wikilinks → keep as plain text "note-name" + note in sync report. - Embeds
![[image.png]]→ upload image to Notion if it exists at~/Obsidian/<folder>/<image>(vianotion-upload-imageorupload_assetsMCP tool). Otherwise keep as text reference. - Callouts
> [!note]→ Notion callout block. - Tasks
- [ ]→ Notion to-do block. - Code blocks → Notion code block (preserve language).
- Dry-run report. Before writing:
- N new pages to create
- M existing pages to update
- K Notion pages with no vault match (no action)
- Unresolved wikilinks list
- Image-upload count
- Confirm gate. Wait for "go".
- Sync.
- Create new pages with
notion-create-pages. - Update existing with
notion-update-page(replace_contentwith the new converted markdown, preserving child sub-pages). - Upload images via the appropriate tool.
- Create new pages with
- Write a sync log to
~/Obsidian/<source-folder>/.notion-sync-log.md(gitignored if vault is in git). Records what synced, when, to where, and any unresolved items. - Confirm. Print pages created/updated with URLs.
One-way: never reverse-sync
Vault is canonical. If a Notion page diverges, user must reconcile by editing the vault file. This skill never writes Obsidian. Document this loudly in the sync log header so collaborators see it.
Decision rules
- Match by title, not slug. Notion pages use title as the user-facing identifier.
- Frontmatter is metadata, not body. Never render raw frontmatter into Notion as visible text. Strip or map to properties.
- Preserve child Notion pages. If a user created additional sub-pages under a synced page in Notion,
notion-update-pagewithreplace_contentmust include them (the tool errors if not — use the<page url="...">preservation tags). - Image dedup. Upload an image once even if it's referenced in N notes — track upload IDs.
Anti-patterns
- Don't sync the entire
~/Obsidian/root. Always require a scoped folder. - Don't auto-delete Notion pages with no vault match. Surface them; let the user delete manually.
- Don't sync notes with
status: pausedorstatus: archivedfrontmatter — skip them, list in the report. - Don't sync the
Inbox/folder by default — it's noisy, ephemeral.
Hard-won gotchas
- Wikilinks resolve in batch context. If
note-a.mdlinks[[note-b]]and both are in this sync batch, resolve to note-b's Notion URL. If note-b was synced in a previous run and exists under the target parent, also resolve. Otherwise leave as plain text. - Title collisions. If two vault files share a title (different folders), they'll collide on Notion. Surface in the dry-run and ask for disambiguation.
- Notion markdown is not vault markdown. Notion's enhanced markdown spec is at
notion://docs/enhanced-markdown-spec. Fetch it before composing if uncertain about block syntax. - Update via
replace_contentcan delete child pages — must include them innew_strvia<page url="...">tags. Read the parent's current content before composing the update.
Output
- Dry-run report.
- After sync: list of pages created/updated with URLs.
- Sync log appended to the vault folder.