/check-links
Find broken wiki-links in the vault. Read-only analysis — scans for [[links]] and verifies target files exist. No writes, no dependencies.
$ npx -y skills add ballred/obsidian-claude-pkm --skill check-links --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/check-links
Context preview
The summary Claude sees to decide when to auto-load this skill.
Find broken wiki-links in the vault. Read-only analysis — scans for [[links]] and verifies target files exist. No writes, no dependencies.
SKILL.md
check-links.SKILL.mdname: check-links
description: Find broken wiki-links in the vault. Read-only analysis — scans for [[links]] and verifies target files exist. No writes, no dependencies.
allowed-tools: Grep, Glob, Read
user-invocable: true
Check Links Skill
Finds broken `[[wiki-links]]` across your vault by extracting link targets and verifying that each target file exists. Read-only — never modifies files.
Usage
/check-links
Or ask:
- "Check for broken links in my vault"
- "Find dead wiki-links"
- "Are there any broken links?"
How to Execute
Step 1: Extract all wiki-links
Use **Grep** to find all `[[...]]` patterns in markdown files:
Grep:
pattern: "\\[\\[([^\\]|]+)"
glob: "*.md"
output_mode: content
-n: true
This captures the link target (before any `|` alias). Exclude `.claude/` and `.obsidian/` directories from results.
Step 2: Build unique target list
From the grep results, extract the unique link targets. For each match like `[[My Note]]` or `[[My Note|display text]]`, the target is `My Note`.
Strip:
- Heading anchors: `[[Note#heading]]` → target is `Note`
- Block references: `[[Note^block-id]]` → target is `Note`
- Aliases: `[[Note|alias]]` → target is `Note`
Step 3: Verify each target exists
For each unique target, use **Glob** to check if a matching file exists:
Glob:
pattern: "**/<target>.md"
A link is **broken** if no file matches. A link is **valid** if at least one file matches.
Step 4: Report results
Group broken links by source file:
## Broken Links Report
### Daily Notes/2024-01-15.md
- [[Projet Alpha]] — no matching file found
- [[Old Goal]] — no matching file found
### Projects/Project Beta.md
- [[Meeting Notes Jan]] — no matching file found
---
**Summary:** 3 broken links across 2 files (out of 45 total links checked)
Step 5: Suggest fixes
For each broken link, try to find a close match:
1. Use **Glob** with a partial pattern: `**/*<partial-target>*.md` 2. If a similar filename exists, suggest it:
- [[Projet Alpha]] — Did you mean [[Project Alpha]]?
3. If no close match, just report "no matching file found"
Edge Cases
- **Embedded images** (`![[image.png]]`) — skip these, they reference attachments
- **External links** (`[text](https://...)`) — skip these, they are not wiki-links
- **Template placeholders** (`[[{{date}}]]`) — skip anything with `{{` in the target
- **Empty links** (`[[]]`) — report as malformed, not broken
No Broken Links
If all links are valid:
✅ All wiki-links verified — no broken links found across X files (Y links checked)
Tips
- Run `/check-links` periodically to catch link rot
- After renaming files, run this to find links that need updating
- Combine with `/search` to find notes that reference deleted content
Read more
name: check-links description: Find broken wiki-links in the vault. Read-only analysis — scans for [[links]] and verifies target files exist. No writes, no dependencies. allowed-tools: Grep, Glob, Read user-invocable: true
Check Links Skill
Finds broken `[[wiki-links]]` across your vault by extracting link targets and verifying that each target file exists. Read-only — never modifies files.
Usage
/check-links
Or ask:
- "Check for broken links in my vault"
- "Find dead wiki-links"
- "Are there any broken links?"
How to Execute
Step 1: Extract all wiki-links
Use **Grep** to find all `[[...]]` patterns in markdown files:
Grep: pattern: "\\[\\[([^\\]|]+)" glob: "*.md" output_mode: content -n: true
This captures the link target (before any `|` alias). Exclude `.claude/` and `.obsidian/` directories from results.
Step 2: Build unique target list
From the grep results, extract the unique link targets. For each match like `[[My Note]]` or `[[My Note|display text]]`, the target is `My Note`.
Strip:
- Heading anchors: `[[Note#heading]]` → target is `Note`
- Block references: `[[Note^block-id]]` → target is `Note`
- Aliases: `[[Note|alias]]` → target is `Note`
Step 3: Verify each target exists
For each unique target, use **Glob** to check if a matching file exists:
Glob: pattern: "**/<target>.md"
A link is **broken** if no file matches. A link is **valid** if at least one file matches.
Step 4: Report results
Group broken links by source file:
## Broken Links Report ### Daily Notes/2024-01-15.md - [[Projet Alpha]] — no matching file found - [[Old Goal]] — no matching file found ### Projects/Project Beta.md - [[Meeting Notes Jan]] — no matching file found --- **Summary:** 3 broken links across 2 files (out of 45 total links checked)
Step 5: Suggest fixes
For each broken link, try to find a close match:
1. Use **Glob** with a partial pattern: `**/*<partial-target>*.md` 2. If a similar filename exists, suggest it:
- [[Projet Alpha]] — Did you mean [[Project Alpha]]?
3. If no close match, just report "no matching file found"
Edge Cases
- **Embedded images** (`![[image.png]]`) — skip these, they reference attachments
- **External links** (`[text](https://...)`) — skip these, they are not wiki-links
- **Template placeholders** (`[[{{date}}]]`) — skip anything with `{{` in the target
- **Empty links** (`[[]]`) — report as malformed, not broken
No Broken Links
If all links are valid:
✅ All wiki-links verified — no broken links found across X files (Y links checked)
Tips
- Run `/check-links` periodically to catch link rot
- After renaming files, run this to find links that need updating
- Combine with `/search` to find notes that reference deleted content
Not another PKM starter kit. This is an execution system that connects your 3-year vision to what you do today — and holds you accountable with AI. Every layer connects. /daily surfaces your ONE Big Thing from the weekly review. /weekly shows project progress.
Other skills on obsidian-claude-pkm.
- /adopt
Scaffold the PKM system onto an existing Obsidian vault. Scans your vault structure, maps folders interactively, and generates configuration — no template required.
Open skill - /daily
Create daily notes and manage morning, midday, and evening routines. Structure daily planning, task review, and end-of-day reflection. Use for daily productivity routines or when asked to create today's note.
Open skill - /goal-tracking
Track progress toward 3-year, yearly, monthly, and weekly goals. Calculate completion percentages, surface stalled goals, connect daily tasks to objectives. Use for goal reviews and progress tracking.
Open skill - /monthly
Monthly review and planning. Roll up weekly reviews, check quarterly milestones, set next month's focus. Use at end of month or start of new month.
Open skill - /obsidian-vault-ops
Read and write Obsidian vault files, manage wiki-links, process markdown with YAML frontmatter. Use when working with vault file operations, creating notes, or managing links.
Open skill - /onboard
Interactive vault setup and context loading. On first run, personalizes your vault. On subsequent runs, loads full context. Use at start of session or when Claude needs full vault context.
Open skill

