check-links

$npx mdskill add ballred/obsidian-claude-pkm/check-links

Identifies broken wiki-links in your vault files

  • Grep extracts all [[wiki-links]] from markdown files.
  • Glob checks if each link target file exists.
  • Validates links by ensuring at least one matching file is found.
  • Returns a JSON object summarizing the results.

SKILL.md

.github/skills/check-linksView on GitHub ↗
---
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:

```markdown
## 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

More from ballred/obsidian-claude-pkm

SkillDescription
adoptScaffold the PKM system onto an existing Obsidian vault. Scans your vault structure, maps folders interactively, and generates configuration — no template required.
dailyCreate 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.
goal-trackingTrack 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.
monthlyMonthly 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.
obsidian-vault-opsRead 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.
projectCreate, track, and archive projects linked to goals. The bridge between goals and daily tasks. Use for project creation, status dashboards, and archiving completed work.
pushCommit and push vault changes to Git with smart commit messages. Auto-stages files, creates meaningful commits, and syncs with remote. Use after making vault changes or at end of day.
searchSearch vault content by keyword using Grep. Zero dependencies — works in any vault without indexes or plugins. Groups results by directory for easy scanning.
weeklyFacilitate weekly review process with reflection, goal alignment, and planning. Create review notes, analyze past week, plan next week. Use on Sundays or whenever doing weekly planning.