
Wiki Import
Rebuild an Obsidian vault from a wiki-export graph.json with correct pages, frontmatter, wikilinks, and relationship metadata.
Install
npx skills add https://github.com/ar9av/obsidian-wiki --skill wiki-importWhat is this skill?
- Imports graph.json exports produced by wiki-export into the configured Obsidian vault path
- Config resolution: .env walk-up, ~/.obsidian-wiki/config, or interactive setup for OBSIDIAN_VAULT_PATH
- Validates nodes, links, and graph keys with import preview before mutating the vault
- Reconstructs page stubs with frontmatter, wikilinks, and typed relationships then refreshes vault metadata
- Trigger phrases: import wiki, load graph.json, /wiki-import, transfer from another vault export
Adoption & trust: 1 installs on skills.sh; 1.8k GitHub stars.
Recommended Skills
Grill Memattpocock/skills
Grill With Docsmattpocock/skills
Brainstormingobra/superpowers
Lark Tasklarksuite/cli
Lark Workflow Standup Reportlarksuite/cli
Cavemanjuliusbrussee/blueprint
Journey fit
SKILL.md
READMESKILL.md - Wiki Import
# Wiki Import — Reconstruct Pages from graph.json You are importing a vault's knowledge graph from a `graph.json` export (produced by `wiki-export`) into the current vault. This reconstructs page stubs with correct frontmatter, wikilinks, and typed relationships, then updates all vault metadata. ## Before You Start 1. **Resolve config** — follow the Config Resolution Protocol in `llm-wiki/SKILL.md` (walk up CWD for `.env` → `~/.obsidian-wiki/config` → prompt setup). This gives `OBSIDIAN_VAULT_PATH`. 2. Read `$OBSIDIAN_VAULT_PATH/AGENTS.md` if it exists — apply any owner-specific conventions. ## Step 1: Locate and Validate Source **Find the import source:** - If the user provided a path argument, use it directly. - Otherwise auto-detect `./wiki-export/graph.json` in the current directory. - If neither exists, ask the user for the path. **Validate the file:** - Must be valid JSON - Must have top-level keys: `nodes` (array), `links` (array), `graph` (object) - Must have at least 1 node If validation fails, report what's wrong and stop. **Show a preview before importing:** ``` Import preview Source: <path> (exported at <graph.exported_at>) Nodes: N total (concepts: A, entities: B, skills: C, references: D, ...) Links: M edges (X typed, Y untyped) Target: $OBSIDIAN_VAULT_PATH ``` ## Step 2: Determine Conflict Resolution Mode Read the user's phrasing to determine mode. Default is `merge`. | Mode | Trigger phrases | Behaviour | |---|---|---| | `merge` | (default, no special phrasing) | Existing pages: update frontmatter tags/summary/relationships and add missing wikilinks; new pages: create stub. | | `skip` | "skip existing", "don't overwrite", "only new pages" | Leave existing pages completely untouched; only create pages that don't exist yet. | | `overwrite` | "overwrite", "replace existing", "force import" | Replace all matched pages with freshly reconstructed stubs regardless of existing content. | ## Step 3: Build Internal Maps Before writing anything, build two maps from the `links` array: **Adjacency map** — for each node id, collect all neighbour ids (edges in either direction): ``` adjacency["concepts/transformers"] = ["entities/vaswani", "concepts/lstm", ...] ``` **Typed edge map** — for each node id, collect outgoing typed edges only (`typed: true`): ``` typed_edges["concepts/transformers"] = [ {target: "concepts/lstm", relation: "contradicts"}, ... ] ``` ## Step 4: Reconstruct Pages Record counts: `created = 0`, `skipped = 0`, `merged = 0`. For each node in `nodes`: 1. Compute `page_path = $VAULT/<node.id>.md` 2. Ensure the parent directory exists (e.g. `$VAULT/concepts/`) 3. Check if the file already exists: - **merge mode (default) + exists** → read existing file, apply merge logic (see below), increment `merged` - **merge mode (default) + doesn't exist** → proceed to create stub, increment `created` - **skip mode + exists** → increment `skipped`, continue to next node - **skip mode + doesn't exist** → proceed to create stub, increment `created` - **overwrite mode + exists** → proceed to write fresh stub (overwrite), increment `merged` - **overwrite mode + doesn't exist** → proceed to create stub, increment `created` ### Page template (new or overwrite) ```markdown --- title: <node.label> category: <node.category> tags: <node.tags as YAML list> sources: - "imported from <graph.json path>" <if node.summary exists> summary: "<node.summary>" </if> <if typed_edges[node.id] is non-empty> relationships: <for each {target, relation} in typed_edges[node.id]> - target: "[[<target>]]" type: <relation> </for> </if> lifecycle: draft