cross-linker
Use when the user wants to find and insert missing wikilinks across vault notes. Triggers on "cross-link", "find missing links", "weave links", "unlinked mentions", "add wikilinks", or "link notes together".
Cross-Linker
Discover unlinked mentions of vault concepts and insert [[wikilinks]]. Complements link-audit (which finds broken/orphan links) by finding links that should exist but don't.
Workflow
Phase 1 — Build Page Registry
- Call
obsidian_list_noteson the target scope (default:Engineering/). - For each note, call
obsidian_read_noteand extract from frontmatter:- Title (from
# headingor filename) - Aliases (from
aliases:frontmatter field, if present) - Type (pattern, trap, decision, concept)
- Title (from
- Build a registry:
{ title, aliases[], path, type }for each note.
For large scopes (>50 notes), batch reads and process incrementally.
Phase 2 — Scan for Unlinked Mentions
For each note in scope:
- Call
obsidian_read_noteto get the full body text. - For each other page in the registry, check if the page's title or any alias appears in the body text without being wrapped in
[[...]]. - Skip matches inside:
- Existing wikilinks
[[...]] - Code blocks (fenced or inline)
- Frontmatter
- The note's own title/heading
- Existing wikilinks
- Record each match:
{ source_note, target_note, matched_text, line_context, confidence }
Phase 3 — Score and Rank
Assign confidence to each proposed link:
- High — exact title match (case-insensitive), target is a Pattern/Trap/Decision note
- Medium — alias match, or title match in a less structured note
- Low — partial match or only semantically related (use
obsidian_rag_queryto verify)
Sort findings: high confidence first, grouped by source note.
Phase 4 — Present Findings
Show the user a report:
## Cross-Link Report for: Engineering/
### High Confidence (auto-apply)
- Engineering/Patterns/table-driven-tests.md
Line 12: "table driven tests" → [[Table-Driven Tests]]
### Medium Confidence (confirm each)
- Engineering/Traps/mock-drift.md
Line 8: "interface injection" → [[Interface Injection]]
### Low Confidence (review)
- working/appiary/knowledge/auth.md
Line 23: "token" → possibly [[Token Rotation]] ?
### Summary
- X high-confidence links ready to apply
- Y medium-confidence links for review
- Z low-confidence suggestions
Phase 5 — Apply Links
- High confidence: Apply automatically using
obsidian_replace_in_note, replacing the first unlinked mention with[[Target Title]]or[[path/to/note|display text]]. - Medium confidence: Apply one at a time, asking user to confirm each.
- Low confidence: List for reference only — don't auto-apply.
Only link the first unlinked mention of each target per source note. Repeated mentions stay as plain text (standard wiki convention).
Arguments
- Optional scope:
/cross-linker Engineering/Patterns/(default:Engineering/) - Optional depth:
/cross-linker --deepto includeworking/andreference/scopes
Tips
- Run on a narrow scope first (
Engineering/Patterns/) to calibrate before going vault-wide - If a note has many false positives, it may need
aliases:in frontmatter to disambiguate - Short titles (1-2 words like "Testing" or "Auth") generate noise — prefer linking specific concept names
- After running, consider
/link-auditto verify no broken links were introduced