From semantic-skills
Deduplicate wikilinks in any YAML frontmatter property that contains multi-line wikilink arrays. Removes case-insensitive duplicates like [[ml]] and [[ML]], keeping the version with more capital letters. Use when cleaning up frontmatter, fixing duplicate links, or normalizing link casing.
How this skill is triggered — by the user, by Claude, or both
Slash command
/semantic-skills:dedupe-frontmatter-linksThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Deduplicate wikilinks in YAML frontmatter properties using case-insensitive comparison.
Deduplicate wikilinks in YAML frontmatter properties using case-insensitive comparison.
In Obsidian, users may accidentally add duplicate wikilinks to frontmatter properties that differ only in case:
RELATED_TO:
- "[[ml]]"
- "[[ML]]"
- "[[Machine Learning]]"
These duplicates clutter the frontmatter and can cause issues with queries and navigation.
This skill identifies and removes case-insensitive duplicate wikilinks, keeping the version with the most capital letters (as it's typically the more "canonical" form):
[[ml]], [[ML]], [[Ml]][[ML]] (most capitals wins)Use the Python helper script at .claude/skills/dedupe-frontmatter-links/scripts/dedupe_links.py:
uv run --with pyyaml .claude/skills/dedupe-frontmatter-links/scripts/dedupe_links.py <command> [args]
# Scan directory for duplicate links (dry-run, shows what would be changed)
uv run --with pyyaml .claude/skills/dedupe-frontmatter-links/scripts/dedupe_links.py scan <directory>
# Fix all duplicate links in directory
uv run --with pyyaml .claude/skills/dedupe-frontmatter-links/scripts/dedupe_links.py fix <directory>
# Check single file for duplicate links (dry-run)
uv run --with pyyaml .claude/skills/dedupe-frontmatter-links/scripts/dedupe_links.py check <file_path>
# Deduplicate links in single file
uv run --with pyyaml .claude/skills/dedupe-frontmatter-links/scripts/dedupe_links.py dedupe <file_path>
uv run --with pyyaml .claude/skills/dedupe-frontmatter-links/scripts/dedupe_links.py scan "02-SlipBox"
uv run --with pyyaml .claude/skills/dedupe-frontmatter-links/scripts/dedupe_links.py fix "."
uv run --with pyyaml .claude/skills/dedupe-frontmatter-links/scripts/dedupe_links.py check "02-SlipBox/Machine Learning.md"
[[ml]] and [[ML]] are considered duplicatesThe script outputs JSON with scan/fix results:
{
"total_files_scanned": 100,
"files_with_duplicates": 3,
"total_duplicates_found": 7,
"files": [
{
"file": "02-SlipBox/Machine Learning.md",
"properties": {
"RELATED_TO": {
"before": ["[[ml]]", "[[ML]]", "[[deep learning]]"],
"after": ["[[ML]]", "[[deep learning]]"],
"removed": ["[[ml]]"]
}
}
}
]
}
.claude, .obsidian, .trash, .git, node_modulesscan first to preview changes before using fix[[ML|machine learning]]) are compared by their target only[[Note#Section]]) compare only the note name portionnpx claudepluginhub yixin0829/semantic-obsidian --plugin semantic-skillsRead-only health check for Obsidian vault: finds broken links, orphaned notes, tag inconsistencies, and wiki issues, then reports prioritized fixes.
Audits an Obsidian wiki vault for broken links, orphan pages, tag compliance, duplicate pages, and content hygiene. Useful for maintaining Wikipedia-style wikis.
Scans project .md files to add or fix YAML frontmatter (summary + read_when) for discovery by Reflex context routers.