From semantic-skills
Validate and sync bidirectional semantic links in YAML frontmatter. Ensures RELATED_TO links are mutual between notes, and PRIOR/NEXT links are properly reversed. Use when checking link consistency, fixing broken bidirectional relationships, or maintaining Zettelkasten semantic properties.
npx claudepluginhub yixin0829/semantic-obsidian --plugin semantic-skillsThis skill is limited to using the following tools:
Validate and synchronize semantic relationship properties (PRIOR, NEXT, RELATED_TO) in Obsidian vault frontmatter.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
Share bugs, ideas, or general feedback.
Validate and synchronize semantic relationship properties (PRIOR, NEXT, RELATED_TO) in Obsidian vault frontmatter.
Properties where both notes should reference each other symmetrically:
| Property | Description |
|---|---|
RELATED_TO | Mutual relationship - if A links to B, B should link to A |
Property pairs where the relationship is directional but reciprocal:
| Source Property | Target Property | Description |
|---|---|---|
NEXT | PRIOR | If A has B in NEXT, B should have A in PRIOR |
PRIOR | NEXT | If A has B in PRIOR, B should have A in NEXT |
Use the Python helper script at .claude/skills/sync-semantic-links/scripts/sync_semantic_links.py:
uv run --with pyyaml .claude/skills/sync-semantic-links/scripts/sync_semantic_links.py <command> [args]
# Validate all semantic links in a directory (dry-run, no changes)
uv run --with pyyaml .claude/skills/sync-semantic-links/scripts/sync_semantic_links.py validate <directory>
# Sync/fix all broken semantic links in a directory
uv run --with pyyaml .claude/skills/sync-semantic-links/scripts/sync_semantic_links.py sync <directory>
# Check a single file's semantic links
uv run --with pyyaml .claude/skills/sync-semantic-links/scripts/sync_semantic_links.py check <file_path>
# Fix a single file's semantic links (updates linked notes)
uv run --with pyyaml .claude/skills/sync-semantic-links/scripts/sync_semantic_links.py fix <file_path>
uv run --with pyyaml .claude/skills/sync-semantic-links/scripts/sync_semantic_links.py validate "02-SlipBox"
uv run --with pyyaml .claude/skills/sync-semantic-links/scripts/sync_semantic_links.py sync "02-SlipBox"
uv run --with pyyaml .claude/skills/sync-semantic-links/scripts/sync_semantic_links.py check "02-SlipBox/Knowledge Graph.md"
Links in frontmatter use multi-line YAML array format with quoted wikilinks:
RELATED_TO:
- "[[Note A]]"
- "[[Note B]]"
PRIOR:
- "[[Previous Note]]"
NEXT:
- "[[Following Note]]"
Format Normalization:
'[[A]], [[B]], [[C]]' are automatically converted to multi-line YAML array formatRELATED_TO (bidirectional):
Note A has [[Note B]] in RELATED_TONote B must have [[Note A]] in RELATED_TO- "[[Note A]]" to Note B's RELATED_TOPRIOR/NEXT (reversed):
Note A has [[Note B]] in NEXTNote B must have [[Note A]] in PRIOR- "[[Note A]]" to Note B's PRIORPlaceholder Links:
Note Resolution:
The script outputs JSON with validation results:
{
"total_files": 100,
"files_with_issues": 5,
"issues": [
{
"source": "Note A.md",
"target": "Note B.md",
"type": "missing_backlink",
"property": "RELATED_TO",
"action": "add [[Note A]] to Note B's RELATED_TO"
}
],
"fixed": 5
}