From obsidian-wiki
Use when the user asks to merge two Obsidian vault pages into one, consolidate duplicate notes, mentions "/vault-merge", or says "these two pages are about the same thing". Trigger on "merge these notes", "consolidate X and Y", "this is a duplicate of", or "fold this page into".
How this skill is triggered — by the user, by Claude, or both
Slash command
/obsidian-wiki:vault-mergeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Merge two pages in `~/dev/knowledge` into one canonical page and update every inbound
Merge two pages in ~/dev/knowledge into one canonical page and update every inbound
[[wikilink]] across the vault to point to the survivor. This is the consolidation
operation — what you do when ingest discovered a duplicate, or when you found two
pages on the same topic by different names.
This skill is destructive: the loser page is deleted. It always produces a plan first and waits for confirmation per step.
The user names two pages. Decide which one survives:
If the choice is ambiguous, ask the user explicitly. Do not guess. This is a one-way operation.
Read both pages. Build the merged body:
tags, union of aliases (add the loser's title to
survivor's aliases — important for backlink resolution), union of related, union
of sources, latest updated: date, earlier created: date.## Conflicts section — do not silently pick one.Show the user the proposed merged page in full and wait for approval before writing.
Grep the entire vault for [[<loser-basename>]] and [[<loser-basename>|...]] link
forms. Also check for the loser's aliases: — any page that linked to an alias needs
updating too.
Build a list of (file, line, current link form) tuples. This is the inbound link inventory.
Present a numbered plan:
# Merge plan: `Gotchas/old-name.md` → `Gotchas/canonical-name.md`
## Content merge
- Survivor: `Gotchas/canonical-name.md` (will be rewritten with merged content)
- Loser: `Gotchas/old-name.md` (will be deleted)
## Inbound link rewrites (N)
1. `Architecture/X.md:42` — `[[old-name]]` → `[[canonical-name]]`
2. `Patterns/Y.md:18` — `[[old-name|alias]]` → `[[canonical-name|alias]]`
3. ...
## Home.md
- Remove row for `[[old-name]]` (loser no longer exists)
- (Survivor row stays as-is)
Ask for confirmation per phase: content merge, link rewrites, deletion, Home.md update. Do not batch.
The order matters. If you delete the loser first, the inbound links become broken
before they're rewritten — vault-lint would flag every one.
Home.md: remove the loser's row using Edit. Do not touch the survivor's
row.rm tool. Only after every link has been
rewritten and Home.md updated.## [YYYY-MM-DD] merge | <loser> → <survivor>
- Inbound links rewritten: <N>
- Home.md updated: yes/no
- Reason: <user's reason>
Type merge is an extension to the standard log types. If CLAUDE.md doesn't permit
it yet, mention this as a candidate schema update.
aliases:. Without this,
future ingest passes might recreate the loser as a "new" page.Gotchas/ to
Patterns/ is a structural decision the user must make.[[loser]] and [[loser|.raw/ source files. Don't rewrite those — raw/ is
immutable. Just note them in the report so the user can decide.tags or related: from the loser.npx claudepluginhub sureserverman/obsidian-wiki-plugin --plugin obsidian-wikiGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.