From deep-wiki
Use when the user wants to initialize the deep-wiki knowledge base for first use — creating the wiki root directory, the config file at `~/.claude/deep-wiki-config.yaml`, the initial directory structure (`pages/`, `.wiki-meta/`), and a seed `welcome.md` page. Triggers on `/wiki-setup`, "init wiki", "set up wiki", "scaffold wiki", "create wiki", "wiki bootstrap", "위키 초기화", "위키 셋업", "위키 설정", "위키 만들기", "위키 시작". Accepts an optional `<wiki_root_path>` argument; otherwise prompts the user via AskUserQuestion (option A — inside an Obsidian vault, option B — standalone directory). Windows users must supply a POSIX form path (`/c/...` or `/mnt/c/...`).
How this skill is triggered — by the user, by Claude, or both
Slash command
/deep-wiki:wiki-setupThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Set up the deep-wiki knowledge base for first use.
Set up the deep-wiki knowledge base for first use.
이 스킬은 두 가지 경로로 호출됩니다 — 어느 쪽이든 본 SKILL §"Steps" 절차를 그대로 실행합니다:
/wiki-setup [wiki_root_path] 입력 (skill 의 user-invocable: true 가 슬래시 진입을 허용).Skill({ skill: "deep-wiki:wiki-setup", args: "[wiki_root_path]" }) 형태로 명시 invoke (cross-platform 표준 경로).두 경로 모두 args 는 동일한 토큰 문자열로 전달되며, Step 1 의 분기가 동일하게 처리합니다.
| 인자 | 의미 |
|---|---|
| (없음) | Step 1 의 AskUserQuestion 분기로 진입 — A) Obsidian vault 안 / B) 독립 디렉토리 선택 |
<wiki_root_path> | wiki_root 로 직접 사용 (절대 경로 또는 ~-prefix 허용; POSIX form 필수, Windows 사용자는 /c/Users/... 또는 /mnt/c/Users/...) |
이 entry skill 은 wiki-schema sibling skill (4 critical invariants + 10 log actions + storage layout 규칙) 과 함께 동작합니다 — setup 은 wiki 디렉토리 구조만 생성하며, 이후 /wiki-ingest / /wiki-lint / /wiki-query / /wiki-rebuild 4 개 sibling entry skill 이 본 skill 이 생성한 wiki_root 와 schema 를 공유합니다.
Cross-platform self-containment: Claude Code 에서는 sibling skill (wiki-schema) 이 description 매칭으로 자동 로드됩니다. 다만 Codex / Copilot CLI / Gemini CLI 등 타 플랫폼에서 Skill() 호출 시 sibling skill 의 auto-load 보장이 약할 수 있으므로, 본 SKILL §"Steps" 본문은 의도적으로 self-contained — 디렉토리 트리, config 스키마(wiki_root 키), 초기 시드 페이지(welcome.md) 본문, lifecycle action setup 의 log.jsonl entry 형식을 인라인으로 보존합니다.
If an argument is provided, use it as the wiki root path. Otherwise, prompt the user:
Where should the wiki be stored? A) Inside an Obsidian vault (provide path, e.g., ~/Obsidian/MyVault/wiki) B) A standalone directory (provide path, e.g., ~/wiki)
Platform note: On Windows, the wiki_root path MUST be in POSIX form (e.g. /c/Users/name/wiki under Git Bash, /mnt/c/Users/name/wiki under WSL2). The SessionStart hook rejects Windows-native paths (C:\... or C:/...). If the user provides a Windows-native path, normalize it before writing to config.
Write the configuration to ~/.claude/deep-wiki-config.yaml:
wiki_root: <resolved_absolute_path>
Optional: auto-ingest scope filter (v1.2.0+). To exclude high-frequency low-value paths from auto-ingest, add an
auto_ingest:block:wiki_root: <resolved_absolute_path> auto_ingest: ignore_globs: # path globs (relative to vault root) to exclude - "NOTES/DAILY/*" - "Home/3. RESOURCE/재무/경제 뉴스/*" require_tag: "" # if non-empty, only ingest files with this frontmatter tagWithout this block, all modified
.mdfiles in the vault are detected (legacy behavior). Filtering happens in the SessionStart hook before /wiki-ingest is invoked. Note (I1): the bash 3.2caseglob used by the hook treats*as matching any character including/, soHome/Daily/*andHome/Daily/**are functionally equivalent. The single-*form is preferred for clarity since**does not have its conventional fnmatch globstar semantics here. Filters are evaluated in order:ignore_globsfirst (path glob match, no I/O),require_tagsecond (frontmatter read). A path is included only if it passes both.
Create the directory structure at the wiki root:
mkdir -p "<wiki_root>/pages"
mkdir -p "<wiki_root>/.wiki-meta/sources"
mkdir -p "<wiki_root>/.wiki-meta/.versions"
Create the initial machine-readable files:
touch "<wiki_root>/log.jsonl"
Timestamp format: All
tsandgenerated_atvalues MUST be UTC ISO 8601 with aZsuffix. Generate withdate -u +"%Y-%m-%dT%H:%M:%SZ". Never use local timezone offsets (e.g.+09:00) — the wiki's log is consumed by tooling that assumes a single canonical timezone.
<wiki_root>/.wiki-meta/index.json — v1.5.0+ emits the M3 cross-plugin envelope wrap around the legacy payload shape. Caller MUST set WIKI_ROOT (absolute path) before invoking the snippet below.
set -euo pipefail
: "${WIKI_ROOT:?caller must set WIKI_ROOT to the wiki root absolute path}"
# Build the empty payload (legacy shape preserved inside `payload`).
PAYLOAD_TMP="${WIKI_ROOT}/.wiki-meta/index.payload.tmp.$$.$(date +%s).json"
cat > "$PAYLOAD_TMP" <<JSON
{
"pages": [],
"generated_at": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
}
JSON
# Envelope-wrap. The helper writes atomically (temp + rename) and emits
# `wrapped: <path> ...` on stdout. Multi-source aggregator: no parent_run_id;
# empty source_artifacts on first setup (pages/ is empty by definition).
# Cleanup payload temp file ONLY on helper success — failure preserves it
# for retry (deep-work round-1 C2 gated-cleanup lesson).
if node "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/wrap-index-envelope.js" \
--payload-file "$PAYLOAD_TMP" \
--output "${WIKI_ROOT}/.wiki-meta/index.json"; then
rm -f "$PAYLOAD_TMP"
else
echo "ERROR: wrap-index-envelope.js failed; payload preserved at $PAYLOAD_TMP for retry" >&2
exit 1
fi
Create the initial human-readable wiki artifacts:
<wiki_root>/index.md — v1.7.0+ dashboard seed (matches the dashboard shape emitted by /wiki-ingest Step 11 so the first ingest does not treat this seed as a pre-1.7.0 catalog needing backup):
<!-- deep-wiki-dashboard-v1.7.0 -->
# Wiki Dashboard
This wiki was just initialized and has no knowledge pages yet. Run `/wiki-ingest` to start building knowledge — the first ingest will replace this seed with an auto-generated dashboard reflecting the new pages.
## At a glance
- Pages: 1
- Tags: 0
- Last ingest: (none — newly created)
- Last catalog refresh: (initial setup)
## Recent activity (last 7 days)
- (none — wiki newly created)
## Top tags
- (none — no tagged pages yet)
---
*Wiki dashboard — auto-maintained by deep-wiki. For the full machine-readable catalog see `.wiki-meta/index.json`. For chronological history see `log.jsonl`.*
The leading <!-- deep-wiki-dashboard-v1.7.0 --> marker tells /wiki-ingest Step 11's backup guard that this file is already in the v1.7.0 dashboard shape, so the first ingest overwrites it directly without copying it to .wiki-meta/.backups/index.md.pre-1.7.0. The seed is intentionally sparse — every section is regenerated from real wiki state on the first ingest.
<wiki_root>/log.md — LLM-written chronicle:
# Wiki Log
### <date> — Wiki Created
Initialized deep-wiki knowledge base. Ready for first ingest.
Create a welcome page at pages/welcome.md to prevent cold-start issues:
---
title: "Welcome to Deep-Wiki"
sources: []
tags:
- meta
aliases:
- home
- index
---
# Welcome to Deep-Wiki
This wiki is managed by Claude Code using the deep-wiki plugin.
## How It Works
- Use `/wiki-ingest` to add knowledge from sources (files, URLs, text)
- Use `/wiki-query` to search and ask questions
- Use `/wiki-lint` to check wiki health
- Use `/wiki-rebuild` to regenerate the index
Knowledge accumulates here over time, creating a persistent knowledge base.
Check if the following CLI tools are installed:
which qmd 2>/dev/null # markdown search engine (BM25 + vector search)
which marp 2>/dev/null # markdown slide generator
Report the status of each tool and provide install commands for any that are missing:
| Tool | Purpose | Install |
|---|---|---|
| qmd | Local markdown search with BM25/vector search and LLM re-ranking. Can be used as an MCP server for tighter agent integration. | npm install -g @tobilu/qmd |
| marp | Generate slide presentations from markdown wiki pages. | npm install -g @marp-team/marp-cli |
If the wiki root is inside an Obsidian vault (i.e., a .obsidian/ directory exists in a parent directory), check for recommended Obsidian plugins:
# Find the vault root (nearest ancestor with .obsidian/)
VAULT_ROOT="<detected_vault_root>"
PLUGINS_DIR="$VAULT_ROOT/.obsidian/plugins"
Check for these plugins:
| Plugin | Directory Name | Purpose |
|---|---|---|
| Dataview | dataview | Query page frontmatter to generate dynamic tables and lists from wiki metadata |
| Marp Slides | marp-slides | Render Marp slide decks directly in Obsidian |
| Obsidian Web Clipper | — (browser extension) | Browser extension to clip web articles as markdown for quick ingest |
For each missing plugin, print a recommendation:
Recommended Obsidian plugins:
✓ Dataview — installed
✗ Marp Slides — not found
→ Install from Obsidian Settings > Community Plugins > Browse > "Marp Slides"
ℹ Obsidian Web Clipper — browser extension
→ Install from https://obsidian.md/clipper
If the wiki is NOT inside an Obsidian vault, skip this check entirely.
Windows note: The
obsidiancommand must be on PATH within the shell running Claude Code. Typical install location:%LOCALAPPDATA%\Programs\Obsidian\. Ifobsidian versionfails in Git Bash, the user must add the directory containingobsidian.exeto PATH before re-running setup.
If the wiki root is inside an Obsidian vault (detected in 5b), check for the Obsidian CLI:
Step 1 — Detect CLI and running app:
obsidian version 2>/dev/null
Step 2 — Get vault info:
obsidian vault
Extract the vault name and path from the output. If the output format is unexpected, fall back to:
vault_path = the .obsidian/ parent directory already detected in Step 5bvault_name = the directory name of vault_pathStep 3 — Compute wiki_prefix:
Strip vault_path from wiki_root to get the vault-relative path:
/path/to/vault, wiki_root=/path/to/vault/deep-wiki → prefix=deep-wikiwiki_root == vault_path, the prefix is empty. In this case, store wiki_prefix: "." and ensure all downstream path compositions use pages/... directly (not ./pages/... or /pages/...). Callers must normalize: when wiki_prefix is ".", emit pages/<page>.md instead of ./<pages>/<page>.md.Step 4 — Update config:
If the config already contains an obsidian_cli block, remove it first (handles re-runs and CLI removal).
If CLI detection succeeded, append to ~/.claude/deep-wiki-config.yaml:
obsidian_cli:
available: true
vault_name: "<detected_vault_name>"
vault_path: <detected_vault_path>
wiki_prefix: "<computed_prefix>"
If CLI detection failed and an old obsidian_cli block exists, delete it to prevent stale config.
Report in Step 7:
If detected:
Obsidian CLI: ✓ detected (vault: "<vault_name>")
→ Wiki operations will use Obsidian CLI for search, backlinks, and orphan detection when available
If not detected:
Obsidian CLI: ✗ not detected
→ Using filesystem access only (enhanced search and graph features unavailable)
→ To enable: Obsidian 1.12.7+ required, then Settings → General → Command line interface
→ Troubleshooting: https://obsidian.md/help/cli#Troubleshooting
Append to log.jsonl:
Timestamp format: All
tsandgenerated_atvalues MUST be UTC ISO 8601 with aZsuffix. Generate withdate -u +"%Y-%m-%dT%H:%M:%SZ". Never use local timezone offsets (e.g.+09:00) — the wiki's log is consumed by tooling that assumes a single canonical timezone.
{"ts":"<iso_timestamp>","action":"setup","source":"deep-wiki-init","pages_created":["welcome.md"],"pages_updated":[]}
Report to the user:
/wiki-ingest <source> to start building the wikiFetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Applies a firm's KYC/AML rules grid to parsed onboarding records: assigns risk rating, checks required documents, outputs rule outcomes with citations, and routes for escalation.
Generates daily or weekly digests of activity from connected sources (chat, email, docs, tasks, CRM), highlighting action items, decisions, mentions, and project updates.
npx claudepluginhub sungmin-cho/claude-deep-suite --plugin deep-wiki