From forge-obsidian
Add [[wikilinks]] to a markdown document by matching terms against existing vault notes — body links and frontmatter keywords/related enrichment. USE WHEN a document needs wikilinks, terms should link to vault notes, knowledge graph needs enrichment, or enrich keywords.
npx claudepluginhub n4m3z/forge-obsidianThis skill uses the workspace's default tool permissions.
Add `[[wikilinks]]` to a markdown document by matching terms against existing note titles in the Obsidian vault. Links the first occurrence of each matching term in the body and enriches frontmatter `keywords:` and `related:` fields.
Searches Obsidian vaults via official CLI for full-text queries, tag management, link traversal, backlinks, orphans, and unresolved wikilinks. Activates on note search, tag, or link exploration requests.
Create and edit Obsidian Flavored Markdown with wikilinks, embeds, callouts, frontmatter properties, and other syntax. Use for .md files in Obsidian vaults or Obsidian-specific features.
Create and edit Obsidian Markdown with wikilinks, embeds, callouts, properties, block IDs, and frontmatter. For .md files in Obsidian vaults or Obsidian syntax mentions.
Share bugs, ideas, or general feedback.
Add [[wikilinks]] to a markdown document by matching terms against existing note titles in the Obsidian vault. Links the first occurrence of each matching term in the body and enriches frontmatter keywords: and related: fields.
eval "$(bash Core/bin/paths.sh)"
echo "VAULT: $FORGE_USER_ROOT"
If an argument was provided, use it as the file path. Otherwise, ask which file to enrich.
Check TLP before reading:
safe-read via BashUse the best available method (try in order):
Option A — Obsidian CLI (fastest, if running — see /ObsidianCLI for full reference):
obsidian files ext=md format=paths
Option B — Glob (always works):
find "$FORGE_USER_ROOT" -name '*.md' -not -path '*/.obsidian/*' -not -path '*/.trash/*' -not -path '*/.git/*' | sed 's|.*/||; s|\.md$//' | sort -u
Obsidian resolves wikilinks by filename, not directory path — index by stem only.
Read the vault .tlp file. Remove stems from RED directories — their existence is protected information.
Remove common short terms that create noise if linked:
Single-character stems, and words like: Data, Home, Table, View, List, Type, Item, Note, Page, Link, Text, File, Name, Date, Time, Tags, Status, All, New, Index, About, Help
Also exclude the document's own filename (no self-links).
Longest first. "Forge Framework" matches before "Forge". "Claude Code" before "Claude".
Zones that MUST NOT receive wikilinks:
| Zone | Action |
|---|---|
| Fenced code blocks | Skip |
| Inline code | Skip |
Existing wikilinks [[...]] | Skip — already linked |
Markdown links [text](url) | Skip |
URLs https://... | Skip |
Obsidian embeds ![[...]] | Skip |
| HTML blocks | Skip |
YAML frontmatter IS processed — but only the keywords: and related: fields (Step 6).
Track which terms are already linked in the document (including pre-existing wikilinks) to enforce first-occurrence-only linking.
For each note title in the index (longest first):
[[Term]][[NoteTitle|matched text]]A match must be at a word boundary on both sides: start/end of line, space, or punctuation (except [, ], |). This prevents matching "Forge" inside "ForgeCore" or "rust" inside "frustrated".
Multi-word note titles ("Forge Framework", "Claude Code") match as complete phrases. Never split into individual words.
Scan the document body for topic-relevant terms that match vault notes. Classify each into:
keywords: — abstract Topics only. Test: "Could this be a Space that groups many Resources?"
[[Security]], [[Project Management]], [[Rust]], [[Automation]]related: — concrete entities (tools, organizations, projects, people, specific notes)
[[forge-tlp]], [[Claude Code]], [[Obsidian]], [[Proton AG]]Rules:
- "[[Term]]" (quoted wikilink in YAML list)obsidian property:set for frontmatter updates (atomic — avoids Obsidian Linter race conditions)Present proposed changes:
Body links — total count, each with surrounding context (5-10 words)
Frontmatter — new keywords: and related: entries
Group by confidence:
Options:
safe-write write via Bashobsidian property:set instead[[Title]] over [[Title|text]] — only use aliased form when case genuinely differskeywords: or related: entries/MarkdownLint if the document also has formatting issues