.claude/skills/vault-create/SKILL.md
Create a new LLM Wiki vault with proper directory structure, index, log, and conventions. Use when user wants to create a vault, start a new wiki, or set up a new knowledge base.
npx skillsauth add RonanCodes/llm-wiki vault-createInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Scaffold a new LLM Wiki vault as a separate git repo.
/vault-create # interactive — interviews you
/vault-create my-research --domain ai-research # direct — skips interview
All vaults are prefixed with llm-wiki- so they're easy to identify in Obsidian's vault switcher alongside non-LLM Wiki vaults.
llm-wiki-researchllm-wiki-project-alphallm-wiki-personalIf the user provides a name that already starts with llm-wiki-, don't double-prefix.
If the user runs /vault-create with no arguments, interview them to figure out the right vault setup. Use AskUserQuestion for each question.
Question 1: What's the vault for?
Question 2: What domain or topic?
Ask for a short domain tag, e.g. ai-research, personal, fintech-project, book-dune, go-to-market.
Question 3: What's the vault name? Suggest a kebab-case name based on their answers. Let them override.
personal<topic>-research (e.g. llm-research)project-<name> (e.g. project-acme)book-<title> (e.g. book-dune)Question 4: Do you have existing files to import?
/vault-import insteadAfter the interview, proceed to Step 1 with the gathered info.
Parse arguments from $ARGUMENTS:
--domain <domain>: optional domain tag (e.g. ai-research, personal, work-project-x)llm-wiki-, prepend it. E.g. research → llm-wiki-researchCreate vault directory structure at vaults/<name>/:
vaults/<name>/
├── raw/ # Immutable source documents
│ └── assets/ # Downloaded images, attachments
├── wiki/ # LLM-generated markdown (the wiki)
│ ├── index.md # Catalog of all pages
│ ├── concepts/ # Concept pages (ideas, patterns, techniques)
│ ├── entities/ # Entity pages (people, orgs, tools, frameworks)
│ ├── sources/ # Source summaries (one per ingested source)
│ └── comparisons/ # Comparison and synthesis pages
├── log.md # Chronological activity log
├── CLAUDE.md # Vault conventions (thin config)
├── README.md # Overview for GitHub (what's inside, stats, purpose)
└── .gitignore # Ignore Obsidian ephemeral state, .DS_Store
wiki/index.md with this template:# <Vault Name> — Wiki Index
## Sources
| Page | Summary | Domain | Date Added |
|------|---------|--------|------------|
## Entities
| Page | Summary | Type | Domain | Date Added |
|------|---------|------|--------|------------|
## Concepts
| Page | Summary | Domain | Date Added |
|------|---------|--------|------------|
## Comparisons
| Page | Summary | Domain | Date Added |
|------|---------|--------|------------|
log.md with this template:# <Vault Name> — Activity Log
Chronological record of all vault activity. Each entry is parseable:
`grep "^## \[" log.md | tail -5` gives the last 5 entries.
## [<today's date>] init | Vault created
- Vault initialized with domain: <domain or "unset">
- Structure: raw/, wiki/ (concepts, entities, sources, comparisons)
---
CLAUDE.md with this template:# <Vault Name>
## Vault Info
- **Domain**: <domain or "general">
- **Created**: <today's date>
## Conventions
### Default Domain Tag
All pages in this vault inherit the domain tag: `<domain>`.
Additional domain tags can be added per-page when content spans multiple domains.
### Frontmatter Requirements
Every wiki page MUST have YAML frontmatter with at minimum:
- `title`: Page title
- `date-created`: YYYY-MM-DD
- `date-modified`: YYYY-MM-DD
- `page-type`: one of summary, entity, concept, comparison, source-note
- `domain`: list of domain tags (always includes vault default)
- `tags`: additional categorization tags
- `sources`: list of raw file paths (raw/filename.md) and/or original URLs
- `related`: list of wikilinks to related pages
### Source Linking
Every wiki page MUST link back to its raw source material:
1. In frontmatter `sources` field: path to raw/ file and/or original URL
2. In a `## Sources` section at the bottom of the page with readable links
### Cross-References
Use Obsidian-compatible wikilinks: `[[page-name]]`
When mentioning an entity or concept that has its own page, always link it.
### Page Organization
- Source summaries go in `wiki/sources/`
- Entity pages (people, orgs, tools) go in `wiki/entities/`
- Concept pages (ideas, patterns, techniques) go in `wiki/concepts/`
- Comparisons and synthesis go in `wiki/comparisons/`
### Naming Convention
Filenames: kebab-case, descriptive. Example: `wiki/entities/andrej-karpathy.md`
README.md with this template:# <Vault Display Name>
<One-line description of what this vault is about.>
## What's Inside
| Folder | Contents |
|--------|----------|
| `wiki/sources/` | Source summaries |
| `wiki/entities/` | People, tools, frameworks |
| `wiki/concepts/` | Ideas, patterns, techniques |
| `wiki/comparisons/` | Side-by-side analyses |
| `raw/` | Immutable source documents |
## Stats
- **Domain**: <domain>
- **Created**: <today's date>
- **Pages**: 0
## How This Works
This vault is powered by [LLM Wiki](https://github.com/RonanCodes/llm-wiki) — Claude Code is the engine, Obsidian is the viewer. Pages are created via `/ingest`, queried via `/query`, and health-checked via `/lint`.
See the [engine repo](https://github.com/RonanCodes/llm-wiki) for setup and usage.
.gitignore:# macOS
.DS_Store
# Obsidian — keep config, ignore ephemeral state
.obsidian/workspace.json
.obsidian/workspace-mobile.json
.obsidian/.obsidian-git-backup-*
.obsidian/plugins/
.obsidian/themes/
.trash/
cd vaults/<name>
git init
git add .
git commit -m "✨ feat: initialize <name> vault"
Register the vault in Obsidian's vault registry so it appears in the vault switcher:
python3 -c "
import json, time, hashlib
path = '$HOME/Library/Application Support/obsidian/obsidian.json'
with open(path) as f:
data = json.load(f)
vault_path = '$(pwd)/vaults/<name>'
vault_id = hashlib.md5(vault_path.encode()).hexdigest()[:16]
data['vaults'][vault_id] = {'path': vault_path, 'ts': int(time.time() * 1000)}
with open(path, 'w') as f:
json.dump(data, f)
"
Then open it:
open "obsidian://open?vault=<name>"
Works on macOS. Important: Tell the user they need to fully quit Obsidian (Cmd+Q, not just close the window) and reopen it for the new vault to appear in the vault switcher. Obsidian only reads its config on startup.
/ingest <source> --vault <name>data-ai
Extract transcript from a YouTube video as clean readable text. Use when user shares a youtube.com or youtu.be link and wants the transcript, content summary, or to read what was said.
development
Page type templates and frontmatter conventions for LLM Wiki pages. Reference skill loaded by ingest, query, and lint skills to ensure consistent wiki structure.
testing
Show status of all LLM Wiki vaults — page counts, source counts, last activity, and git status. Use when user wants to see vault status, list vaults, or check wiki health.
documentation
Import an existing Obsidian vault, markdown folder, or git repo as an llm-wiki vault. Moves content into vaults/, adds missing structure (index, log, CLAUDE.md, frontmatter). Use when user wants to import, adopt, migrate, or bring in an existing knowledge base.