/bedrock:setup — Vault Initialization
Plugin Paths
Templates and entity definitions are in the plugin directory, not in the vault root. Use the "Base directory for this skill" provided at invocation to resolve paths:
- Entity definitions:
<base_dir>/../../entities/ - Templates:
<base_dir>/../../templates/{type}/_template.md - Plugin CLAUDE.md:
<base_dir>/../../CLAUDE.md(auto-injected into context)
Where <base_dir> is the path shown in "Base directory for this skill".
Overview
This skill bootstraps any folder into a fully functional Bedrock-powered Obsidian vault through an interactive guided flow. It creates directories, copies templates, configures the vault, scaffolds example entities with bidirectional wikilinks, checks dependencies, and guides the user through next steps.
You are a setup agent. Follow the phases below in order. Do not skip steps.
Phase 0 — Idempotency Check
Check if the vault is already initialized:
ls .bedrock/config.json 2>/dev/null
If .bedrock/config.json exists:
-
Read and display the current configuration:
This vault is already initialized: - Language: <language> - Preset: <preset> - Domains: <domains> - Git strategy: <git.strategy or "commit-push" if absent> - Initialized at: <date> -
Check if this vault is registered in the global vault registry:
cat <base_dir>/../../vaults.json 2>/dev/nullIf the registry exists, check if any entry has a
pathmatching the current working directory.- If registered: display "Registered as vault
<name>" alongside the config above. - If NOT registered: display "This vault is not yet registered in the global vault registry."
- If registered: display "Registered as vault
-
Ask the user:
"This vault is already initialized. What would you like to do?"
- Reconfigure — Update language, domains, git strategy, and regenerate vault CLAUDE.md (directories and entities are NOT touched)
- Register only — Register this vault in the global registry (if not already registered) without changing configuration
- Skip — Exit with no changes
- Reconfigure: proceed to Phase 1, but set
RECONFIGURE_MODE = true. In Phase 3, skip directory creation (3.1), template copying (3.2), Obsidian configuration (3.5), and example entity generation (3.6). Phase 3.7 (vault registration) still runs. - Register only: skip directly to Phase 3.7 (vault registration). If already registered, display "This vault is already registered as
<name>. No changes made." and exit. - Skip: exit with "No changes made. Vault is already initialized."
If .bedrock/config.json does NOT exist: proceed to Phase 1 with RECONFIGURE_MODE = false.
Phase 1 — Language and Dependencies
1.1 Language Selection
Ask the user:
"What language should vault content be written in?"
- English (en-US) (default)
- Portuguese (pt-BR)
- Spanish (es)
- Other — specify a locale code (e.g.,
fr-FR,de-DE,ja-JP)Press Enter for default (en-US).
Store the selected language as VAULT_LANGUAGE. This determines:
- The language of example entity content
- The language directive in the vault CLAUDE.md
- The language instruction for all future skill output in this vault
1.2 Dependency Check
Check for external tools, environment variables, and MCP servers that enhance the Bedrock experience. Never block initialization.
Dependencies to check:
| Dependency | Check method | What it unlocks |
|---|---|---|
| graphify | Glob: ~/.claude/skills/graphify/SKILL.md | Required. Extraction engine for all /bedrock:learn ingestion. Without it, /learn cannot function. |
| docling | Bash: command -v docling >/dev/null 2>&1 | Required. Universal file → markdown converter used by /bedrock:learn to ingest DOCX, PPTX, XLSX, HTML, EPUB, PDF, images, and other non-markdown formats. Without it, /learn can only ingest text-native formats. |
| CONFLUENCE_API_TOKEN + CONFLUENCE_USER_EMAIL | Bash: test -n "$CONFLUENCE_API_TOKEN" && test -n "$CONFLUENCE_USER_EMAIL" | Confluence page ingestion via /bedrock:learn (API strategy). |
| GOOGLE_ACCESS_TOKEN | Bash: test -n "$GOOGLE_ACCESS_TOKEN" | Google Docs and Sheets ingestion via /bedrock:learn (API strategy). |
| claude-in-chrome MCP | ToolSearch: select:mcp__claude-in-chrome__tabs_context_mcp (succeeds = available) | Optional. Browser fallback for Confluence pages when API credentials are unavailable. |
1.2.1 Auto-install graphify if missing
If the graphify probe in the table above returns no file, attempt to install graphify silently before generating the dependency report. Execute this fallback chain in order, stopping at the first successful re-probe.
Step 1 — pipx (preferred, isolated):
command -v pipx >/dev/null 2>&1 && pipx install graphifyy && graphify install
Re-probe: Glob: ~/.claude/skills/graphify/SKILL.md. If the file now exists, stop — graphify is installed.
Step 2 — pip (if pipx unavailable or Step 1 failed):
Only if Step 1's re-probe still finds nothing, and Python 3.10+ is available:
{ command -v pip3 >/dev/null 2>&1 || command -v pip >/dev/null 2>&1; } && \
python3 -c 'import sys; sys.exit(0 if sys.version_info >= (3, 10) else 1)' 2>/dev/null && \
{ pip3 install graphifyy 2>/dev/null || pip install graphifyy; } && graphify install
Re-probe. If found, stop.
Step 3 — curl (Python 3.10+ not available):
If Steps 1 and 2 were both unrunnable because pipx, pip, and Python 3.10+ are all missing, warn the user explicitly before falling back:
⚠️ Python 3.10+ is not available on this system. Falling back to manual skill install via
curl. To receive graphify updates through the official installer, install Python 3.10+ and re-run/bedrock:setup.
Then:
mkdir -p ~/.claude/skills/graphify && \
curl -fsSL https://raw.githubusercontent.com/safishamsi/graphify/v1/skills/graphify/skill.md \
> ~/.claude/skills/graphify/SKILL.md
Re-probe. If found, stop.
Step 4 — Manual instructions (last resort):
If all prior steps failed (no network, upstream unavailable, or all tooling missing), print the graphify warning shown in Section 1.2.2 below. Do not abort — setup continues regardless.
Note on package name: The PyPI package is currently published as graphifyy — temporary while the upstream project reclaims the graphify name. When that flip happens, update Steps 1 and 2 to pip install graphify && graphify install.
After the chain completes, run one final Glob: ~/.claude/skills/graphify/SKILL.md. The graphify row in the dependency-report table (Section 1.2.2 below) MUST reflect this post-install status — installed if the file now exists, NOT FOUND otherwise. Proceed to Section 1.2.2 regardless of outcome. Never block initialization.
1.2.1.1 Auto-install docling if missing
If the docling probe (command -v docling) returns nothing, attempt a silent install using the same fallback chain as graphify. Emit a one-line status message before starting — no interactive prompt.
docling not found — installing silently (one-time setup; first run may take several minutes to download ML models).
Step 1 — pipx (preferred, isolated):
command -v pipx >/dev/null 2>&1 && pipx install docling
Re-probe: command -v docling. If found, stop.
Step 2 — pip (if pipx unavailable or Step 1 failed):
{ command -v pip3 >/dev/null 2>&1 || command -v pip >/dev/null 2>&1; } && \
{ pip3 install --user docling 2>/dev/null || pip install --user docling; }
Re-probe. If found, stop.
Step 3 — Manual instructions (last resort):
If both steps failed (no pipx/pip, no network, or a permissions error), print the docling warning shown in Section 1.2.2 below. Do not abort — setup continues regardless.
After the chain completes, run one final command -v docling p