Skip to main content
skill CX Codex

setup · iurykrieger — Claude Code skill: what it does, how to install

Turns any folder into an Obsidian vault powered by Bedrock. It builds directories, copies templates, and validates system dependencies.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add iurykrieger/claude-bedrock --skill setup -a claude-code
Open on GitHub

What setup does

This skill turns an existing directory into a Bedrock-managed Obsidian vault. First, it looks for .bedrock/config.json to verify the current state. If the folder already has a vault, the agent asks to reconfigure parameters or link the path inside vaults.json. Otherwise, a clean installation starts.

The user picks the vault language, which defaults to en-US. After that, the agent runs a dependency scan for graphify, docling, and cloud access tokens. It installs graphify automatically using pipx, pip, or curl when missing. The flow does not halt if an external utility is absent.

Missing docling limits future document imports to plain text formats. The setup finishes by creating entity folders, copying markdown templates, and generating sample notes with bidirectional wikilinks.

What it helps with

  • initialize an Obsidian vault with Bedrock structure
  • configure vault language and domain taxonomy
  • verify docling and graphify dependencies
  • register the active folder in the global vault registry

Example prompts for the agent

  • /bedrock:setup
  • Initialize this directory as a Bedrock-powered Obsidian vault
  • Run vault bootstrap and verify graphify dependencies

How to install setup

1Skills CLI (Vercel)

npx skills add iurykrieger/claude-bedrock --skill setup -a claude-code

2Manually: put the files in place

~/.claude/skills/setup/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/setup/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about setup

How to install setup in Claude Code?

Run npx skills add iurykrieger/claude-bedrock --skill setup -a claude-code. Alternatively, add the skill directly to ~/.claude/skills/setup/SKILL.md.

What does the setup skill do?

It transforms a folder into a functional Second Brain vault. The skill writes .bedrock/config.json, copies note templates, and creates sample entities linked with wikilinks.

Does setup fail if docling or graphify are missing?

No, missing dependencies never stop the initialization flow. For graphify, the agent attempts an automated installation chain via pipx, pip, or curl.

Source text

SKILL.md · MIT
---
name: setup
description: >
  Initialize any folder as a Bedrock-powered Obsidian vault. Creates entity directories,
  copies templates, configures language and domain taxonomy, scaffolds connected example
  entities, and checks dependencies.
  Use when: "bedrock setup", "bedrock-setup", "/bedrock:setup", "initialize vault",
  "setup vault", "create vault", "bootstrap vault", or when a user wants to start
  a new Second Brain with Bedrock.
user_invocable: true
allowed-tools: Bash, Read, Write, Glob, Grep
---

# /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:

```bash
ls .bedrock/config.json 2>/dev/null
```

**If `.bedrock/config.json` exists:**

1. 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>
   ```

2. Check if this vault is registered in the global vault registry:
   ```bash
   cat <base_dir>/../../vaults.json 2>/dev/null
   ```
   If the registry exists, check if any entry has a `path` matching 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."

3. Ask the user:
   > "This vault is already initialized. What would you like to do?"
   > 1. **Reconfigure** — Update language, domains, git strategy, and regenerate vault CLAUDE.md (directories and entities are NOT touched)
   > 2. **Register only** — Register this vault in the global registry (if not already registered) without changing configuration
   > 3. **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?"
> 1. **English (en-US)** *(default)*
> 2. **Portuguese (pt-BR)**
> 3. **Spanish (es)**
> 4. **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):**

```bash
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:

```bash
{ 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:

```bash
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):**

```bash
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):**

```bash
{ 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` probe. The docling row in the dependency-report table (Section 1.2.2 below) MUST reflect this post-install status — `installed` if the command is now on PATH, `NOT FOUND` otherwise. Proceed to Section 1.2.2 regardless of outcome. **Never block initialization.**

### 1.2.2 Report status

**Report format:**

```
## Dependency Check

| Dependency | Status | What it unlocks |
|---|---|---|
| graphify | installed / NOT FOUND | Extraction engine for /learn |
| docling | installed / NOT FOUND | Universal file → markdown converter for /learn |
| Confluence API credentials | configured / NOT SET | Confluence page ingestion (API) |
| Google API token | configured / NOT SET | Google Docs/Sheets ingestion (API) |
| claude-in-chrome MCP | available / NOT FOUND | Browser fallback for Confluence |

### Source availability summary
| Source type | Status | Requirements |
|---|---|---|
| Confluence | ready / partial / unavailable | API credentials or Chrome extension |
| Google Docs | ready / limited / unavailable | API token or public documents only |
| Google Sheets | ready / limited / unavailable | API token (all tabs) or public (first tab only) |
| GitHub | ready | git CLI |
| Remote URL | ready | WebFetch or curl |
| Local files | ready | filesystem access |
| Non-markdown files (DOCX, PPTX, XLSX, PDF, HTML, EPUB, images) | ready / unavailable | docling installed |
```

For **graphify** specifically (required):

```
> graphify is not installed. This is REQUIRED for /bedrock:learn to work.
> To install, check https://github.com/safishamsi/graphify for instructions.
>
> Your vault will initialize, but /bedrock:learn will not function until graphify is installed.
```

For **docling** specifically (required for non-markdown ingestion):

```
> docling is not installed. This is REQUIRED for /bedrock:learn to ingest non-markdown files
> (DOCX, PPTX, XLSX, PDF, HTML, EPUB, images, etc.).
> To install manually: pipx install docling  (or: pip install --user docling)
> More info: https://github.com/docling-project/docling
>
> Your vault will initialize, but /bedrock:learn will only handle markdown/text inputs until
> docling is installed. /learn also attempts a silent auto-install on first invocation if the
> dependency is still missing.
```

For missing environment variables (optional):

```
> CONFLUENCE_API_TOKEN and CONFLUENCE_USER_EMAIL are not set.
> To ingest Confluence pages, generate an API token at:
> https://id.atlassian.com/manage-profile/security/api-tokens
> Then set: CONFLUENCE_API_TOKEN=<token> and CONFLUENCE_USER_EMAIL=<your-email>
>
> Alternative: If you have the Claude in Chrome extension with Confluence logged in, browser extraction will work as a fallback.
> This is optional — your vault will work without Confluence ingestion.
```

```
> GOOGLE_ACCESS_TOKEN is not set.
> To ingest Google Docs/Sheets, generate an access token at:
> https://developers.google.com/oauthplayground/
> Select scope: https://www.googleapis.com/auth/drive.readonly
> Then set: GOOGLE_ACCESS_TOKEN=<token>
>
> Public Google Docs/Sheets can still be ingested without a token (limited).
> This is optional — your vault will work without Google ingestion.
```

**Proceed regardless of results.** Never block initialization for missing dependencies.

---

## Phase 2 — Vault Objective

### 2.1 Present Presets

Ask the user:

> "What is the primary purpose of this vault?"
>
> 1. **Engineering team** — Track services, APIs, teams, and technical decisions
> 2. **Product management** — Track features, research, projects, and analytics
> 3. **Company wiki** — Centralized knowledge base across departments
> 4. **Personal second brain** — Personal knowledge management and learning
> 5. **Open source project** — Track contributors, issues, architecture, and community
> 6. **Custom** — Define your own domains and focus

### 2.2 Resolve Preset

Based on the user's selection, resolve the preset configuration from this lookup table:

```yaml
presets:
  engineering:
    label: "Engineering team"
    domains: [backend, frontend, infra, data, platform, security]
    description: "Engineering team knowledge base for tracking services, APIs, technical decisions, and team operations"
    team_name: "platform-team"
    team_aliases: ["Platform", "Platform Team"]
    team_scope: "Core platform services and infrastructure"
    team_purpose: "Maintain and evolve the platform layer"
    people:
      - slug: "alice-chen"
        name: "Alice Chen"
        aliases: ["Alice Chen", "Alice"]
        role: "Tech Lead"
        email: "[email protected]"
        focal_points: ["billing-api"]
      - slug: "bob-santos"
        name: "Bob Santos"
        aliases: ["Bob Santos", "Bob"]
        role: "Backend Engineer"
        email: "[email protected]"
        focal_points: []
    actor_slug: "billing-api"
    actor_name: "billing-api"
    actor_aliases: ["Billing API", "Billing Service"]
    actor_category: "api"
    actor_description: "REST API for billing operations — invoices, payments, and subscriptions"
    actor_stack: "Go · Gin · PostgreSQL · Kafka"
    actor_status: "active"
    actor_criticality: "high"
    topic_slug: "2026-04-feature-api-migration"
    topic_title: "API v2 Migration"
    topic_aliases: ["API Migration", "v2 Migration"]
    topic_category: "feature"
    topic_objective: "Migrate billing API from v1 to v2 with improved performance and new endpoints"
    project_slug: "platform-modernization"
    project_name: "Platform Modernization"
    project_aliases: ["Platform Modernization", "PlatMod"]
    project_description: "Modernize the platform layer with new APIs, improved observability, and reduced technical debt"

  product:
    label: "Product management"
    domains: [product, design, research, analytics, growth]
    description: "Product management knowledge base for tracking features, user research, projects, and product analytics"
    team_name: "product-team"
    team_aliases: ["Product", "Product Team"]
    team_scope: "Product strategy, discovery, and delivery"
    team_purpose: "Drive product roadmap and user experience"
    people:
      - slug: "carol-kim"
        name: "Carol Kim"
        aliases: ["Carol Kim", "Carol"]
        role: "Product Manager"
        email: "[email protected]"
        focal_points: ["analytics-dashboard"]
      - slug: "david-mueller"
        name: "David Mueller"
        aliases: ["David Mueller", "David"]
        role: "UX Researcher"
        email: "[email protected]"
        focal_points: []
    actor_slug: "analytics-dashboard"
    actor_name: "analytics-dashboard"
    actor_aliases: ["Analytics Dashboard", "Dashboard"]
    actor_category: "api"
    actor_description: "Web dashboard for product analytics — funnels, cohorts, and feature adoption tracking"
    actor_stack: "TypeScript · Next.js · PostgreSQL · ClickHouse"
    actor_status: "active"
    actor_criticality: "medium"
    topic_slug: "2026-04-feature-user-research-q1"
    topic_title: "Q1 User Research Findings"
    topic_aliases: ["User Research Q1", "Q1 Research"]
    topic_category: "feature"
    topic_objective: "Synthesize Q1 user research findings into actionable product decisions"
    project_slug: "product-launch-v2"
    project_name: "Product Launch v2"
    project_aliases: ["Product Launch v2", "PLv2"]
    project_description: "Launch the redesigned product experience with improved onboarding and analytics"

  company-wiki:
    label: "Company wiki"
    domains: [engineering, product, operations, finance, hr, legal]
    description: "Company-wide knowledge base for cross-department collaboration and institutional memory"
    team_name: "operations-team"
    team_aliases: ["Operations", "Operations Team"]
    team_scope: "Cross-functional operations and internal tooling"
    team_purpose: "Ensure smooth operations and knowledge sharing across departments"
    people:
      - slug: "emma-silva"
        name: "Emma Silva"
        aliases: ["Emma Silva", "Emma"]
        role: "Operations Lead"
        email: "[email protected]"
        focal_points: ["internal-portal"]
      - slug: "frank-weber"
        name: "Frank Weber"
        aliases: ["Frank Weber", "Frank"]
        role: "Knowledge Manager"
        email: "[email protected]"
        focal_points: []
    actor_slug: "internal-portal"
    actor_name: "internal-portal"
    actor_aliases: ["Internal Portal", "Company Portal"]
    actor_category: "monolith"
    actor_description: "Internal web portal for employee self-service — HR, IT requests, and knowledge base access"
    actor_stack: "Python · Django · PostgreSQL · Redis"
    actor_status: "active"
    actor_criticality: "medium"
    topic_slug: "2026-04-feature-onboarding-process"
    topic_title: "New Employee Onboarding Process"
    topic_aliases: ["Onboarding Process", "New Hire Onboarding"]
    topic_category: "feature"
    topic_objective: "Standardize the onboarding process for new employees across all departments"
    project_slug: "knowledge-base-rollout"
    project_name: "Knowledge Base Rollout"
    project_aliases: ["KB Rollout", "Knowledge Base Rollout"]
    project_description: "Roll out the structured knowledge base across all departments with Bedrock automation"

  personal:
    label: "Personal second brain"
    domains: [learning, career, projects, ideas, health, finance]
    description: "Personal knowledge management vault for learning, projects, ideas, and life organization"
    team_name: null  # No team for personal vault
    people:
      - slug: "me"
        name: "Me"
        aliases: ["Me"]
        role: "Owner"
        email: ""
        focal_points: ["reading-tracker"]
    actor_slug: "reading-tracker"
    actor_name: "reading-tracker"
    actor_aliases: ["Reading Tracker", "Book Tracker"]
    actor_category: "monolith"
    actor_description: "Personal tool for tracking books, articles, and learning resources"
    actor_stack: "Markdown · Obsidian · Dataview"
    actor_status: "active"
    actor_criticality: "low"
    topic_slug: "2026-04-feature-learning-rust"
    topic_title: "Learning Rust"
    topic_aliases: ["Learning Rust", "Rust Journey"]
    topic_category: "feature"
    topic_objective: "Track progress and notes while learning the Rust programming language"
    project_slug: "side-project-alpha"
    project_name: "Side Project Alpha"
    project_aliases: ["Side Project Alpha", "SPA"]
    project_description: "Build a personal side project to apply new skills and explore interesting technology"

  open-source:
    label: "Open source project"
    domains: [core, docs, community, ci-cd, integrations]
    description: "Open source project knowledge base for tracking architecture, contributors, issues, and community"
    team_name: "core-maintainers"
    team_aliases: ["Core Maintainers", "Maintainers"]
    team_scope: "Core library development and release management"
    team_purpose: "Maintain the core library and coordinate community contributions"
    people:
      - slug: "alice-chen"
        name: "Alice Chen"
        aliases: ["Alice Chen", "Alice"]
        role: "Lead Maintainer"
        email: "[email protected]"
        focal_points: ["my-oss-lib"]
      - slug: "bob-santos"
        name: "Bob Santos"
        aliases: ["Bob Santos", "Bob"]
        role: "Core Contributor"
        email: "[email protected]"
        focal_points: []
    actor_slug: "my-oss-lib"
    actor_name: "my-oss-lib"
    actor_aliases: ["My OSS Lib", "The Library"]
    actor_category: "monolith"
    actor_description: "Core open source library — the main project repository"
    actor_stack: "TypeScript · Node.js · Jest · GitHub Actions"
    actor_status: "active"
    actor_criticality: "very-high"
    topic_slug: "2026-04-feature-v2-migration"
    topic_title: "v2 Migration Guide"
    topic_aliases: ["v2 Migration", "Migration Guide"]
    topic_category: "feature"
    topic_objective: "Plan and document the migration path from v1 to v2 for all users"
    project_slug: "v2-roadmap"
    project_name: "v2 Roadmap"
    project_aliases: ["v2 Roadmap", "Version 2"]
    project_description: "Roadmap for the v2 release — breaking changes, new features, and migration tooling"
```

### 2.3 Custom Preset

If the user selects **Custom**:

1. Ask: "What is the purpose of this vault? (1-2 sentences)"
   - Store as `description`

2. Ask: "List 3-6 domain tags for your vault (comma-separated). These will be used as `domain/*` tags."
   - Example: "backend, frontend, mobile, data, devops"
   - Store as `domains`

3. Ask: "Would you like me to generate example entities, or skip them?"
   - If generate: ask for a team name, 2 people names, an actor name (or use generic defaults: `example-team`, `alice-example`, `bob-example`, `example-service`, `example-topic`, `example-project`)
   - If skip: set `SKIP_EXAMPLES = true`

Build a custom preset object following the same structure as the named presets.
For fields not provided by the user, use sensible generic defaults.

### 2.4 Git Strategy Selection

Ask the user:

> "How should Bedrock handle git commits and pushes?"
>
> 1. **commit-push** *(default)* — Commit and push directly to `main` (trunk-based)
> 2. **commit-push-pr** — Commit to a branch, push, and open a pull request targeting `main`
> 3. **commit-only** — Commit locally without pushing (for offline or local-only vaults)
>
> Press Enter for default (commit-push).

Store the selected strategy as `GIT_STRATEGY`.

**If the user selects `commit-push-pr`:**

Check if the `gh` CLI is available:

```bash
which gh 2>/dev/null
```

If `gh` is not found, warn:

```
> ⚠️ The `gh` CLI is not installed. The `commit-push-pr` strategy requires it to create pull requests.
> Install it from https://cli.github.com/ before using /bedrock:preserve, /bedrock:compress, or /bedrock:sync.
>
> You can still select this strategy — skills will fall back to `commit-push` if `gh` is not available at runtime.
```

Proceed regardless — never block initialization for missing tools.

---

## Phase 3 — Scaffold

### 3.1 Create Entity Directories

> **Skip if `RECONFIGURE_MODE = true`.**

Create all 7 entity directories:

```bash
mkdir -p actors people teams topics discussions projects fleeting
```

If any directory already exists, this is a no-op (safe).

### 3.2 Copy Templates

> **Skip if `RECONFIGURE_MODE = true`.**

For each entity type, read the template from the plugin and write it to the vault:

| Source (plugin) | Destination (vault) |
|---|---|
| `<base_dir>/../../templates/actors/_template.md` | `actors/_template.md` |
| `<base_dir>/../../templates/actors/_template_node.md` | `actors/_template_node.md` |
| `<base_dir>/../../templates/people/_template.md` | `people/_template.md` |
| `<base_dir>/../../templates/teams/_template.md` | `teams/_template.md` |
| `<base_dir>/../../templates/topics/_template.md` | `topics/_template.md` |
| `<base_dir>/../../templates/discussions/_template.md` | `discussions/_template.md` |
| `<base_dir>/../../templates/projects/_template.md` | `projects/_template.md` |
| `<base_dir>/../../templates/fleeting/_template.md` | `fleeting/_template.md` |

For each template:
1. Use Read to read the source file from the plugin directory
2. Use Write to write it to the vault directory

**Copy templates verbatim.** Do not translate or modify them.

If a `_template.md` already exists in the destination, **overwrite it** — templates should
always match the latest plugin version.

> **Fallback:** If a template file cannot be read (path resolution fails), report:
> "Could not copy template for `<type>`. You can manually copy it from the plugin's
> `templates/<type>/_template.md` directory."

### 3.3 Create `.bedrock/config.json`

Create the `.bedrock/` directory and write the configuration:

```bash
mkdir -p .bedrock
```

Write `.bedrock/config.json` with this schema:

```json
{
  "version": "1.0.0",
  "language": "<VAULT_LANGUAGE>",
  "preset": "<selected preset name>",
  "domains": ["<domain1>", "<domain2>", "..."],
  "git": {
    "strategy": "<GIT_STRATEGY>"
  },
  "initialized_at": "<today's date YYYY-MM-DD>",
  "initialized_by": "init@agent"
}
```

**Field definitions:**
- `version`: Always `"1.0.0"` — schema version for future migrations
- `language`: The language code from Phase 1 (e.g., `"en-US"`, `"pt-BR"`)
- `preset`: The selected preset name (e.g., `"engineering"`, `"personal"`, `"custom"`)
- `domains`: Array of domain strings resolved from the preset
- `git.strategy`: The git strategy from Phase 2.3. Valid values: `"commit-push"`, `"commit-push-pr"`, `"commit-only"`. If omitted, defaults to `"commit-push"`.
- `initialized_at`: Today's date in `YYYY-MM-DD` format
- `initialized_by`: Always `"init@agent"`

### 3.4 Generate Vault CLAUDE.md

Write a `CLAUDE.md` file at the vault root with content tailored to the selected preset and language.

**IMPORTANT:** This file describes THIS SPECIFIC VAULT — its purpose, language, and conventions.
It does NOT duplicate the plugin's CLAUDE.md (which covers writing rules, entity types, tags, git workflow, and zettelkasten principles — all auto-loaded by Claude Code when the plugin is active).

**Template for vault CLAUDE.md:**

```markdown
# <Vault Name> — CLAUDE.md

> This vault is powered by the [Bedrock plugin](https://github.com/iurykrieger/claude-bedrock).
> Plugin-level instructions (entity types, writing rules, tags, git workflow) are loaded automatically.
> This file describes what is specific to THIS vault.

## Purpose

<vault description from preset>

## Language

All content in this vault is written in **<language name> (<locale code>)**.
When creating or updating entities, use <language name> for all text content.
Frontmatter keys remain in English. Technical terms in English are acceptable.

## Domains

This vault uses the following domain tags:

<list of domain/* tags>

When creating entities, use `domain/<name>` tags from this list.
New domains can be added as the vault grows.

## Quick Reference

| Action | Skill |
|---|---|
| Search and query the vault | `/bedrock:ask` |
| Ingest external sources (Confluence, Google Docs, GitHub repositories, remote URLs, and any docling-supported file format — DOCX, PPTX, XLSX, PDF, HTML, EPUB, images, and more) | `/bedrock:learn` |
| Create or update entities manually | `/bedrock:preserve` |
| Deduplicate and check vault health | `/bedrock:compress` |
| Re-sync entities with external sources | `/bedrock:sync` |
```

**Adaptation rules:**
- `<Vault Name>`: Derive from the preset label or use the folder name. For custom presets, use the user's stated purpose.
- `<vault description>`: Use the preset's `description` field.
- `<language name>`: Full language name (e.g., "English", "Portuguese", "Spanish").
- `<locale code>`: The `VAULT_LANGUAGE` value (e.g., `en-US`, `pt-BR`).
- `<list of domain/* tags>`: Format as a markdown list: `- domain/backend`, `- domain/frontend`, etc.

**Write all CLAUDE.md content in the selected `VAULT_LANGUAGE`.**
If the language is pt-BR, write sections headers and descriptions in Portuguese.
If en-US, write in English. Etc.

### 3.5 Create Obsidian Configuration

> **Skip if `RECONFIGURE_MODE = true`.**

Create a `.obsidian/` directory with default configuration files so the vault is
ready to use in Obsidian immediately — with wikilinks, a color-coded graph view,
and a minimal plugin setup.

**Step 1:** Create the `.obsidian/` directory:

```bash
mkdir -p .obsidian
```

**Step 2:** For each config file below, check if it already exists. If it does,
skip it and log `"Skipped .obsidian/<file> — already exists"`. If it does not exist,
create it with the content specified.

#### `.obsidian/app.json`

```json
{
  "useMarkdownLinks": false,
  "newLinkFormat": "shortest",
  "strictLineBreaks": false,
  "showFrontmatter": true
}
```

- `useMarkdownLinks: false` — Obsidian uses wikilinks (matches Bedrock's `[[name]]` convention)
- `newLinkFormat: "shortest"` — generates bare `[[name]]` links without path prefix
- `showFrontmatter: true` — frontmatter is central to Bedrock entities; visible by default

#### `.obsidian/appearance.json`

```json
{
  "baseFontSize": 16,
  "theme": "obsidian"
}
```

- `theme: "obsidian"` — Obsidian's built-in dark theme. Clean, high-contrast.

#### `.obsidian/graph.json`

```json
{
  "collapse-filter": true,
  "search": "",
  "showTags": false,
  "showAttachments": false,
  "hideUnresolved": false,
  "showOrphans": true,
  "collapse-color-groups": false,
  "colorGroups": [
    {
      "query": "tag:#type/actor",
      "color": { "a": 1, "rgb": 4886745 }
    },
    {
      "query": "tag:#type/person",
      "color": { "a": 1, "rgb": 5294200 }
    },
    {
      "query": "tag:#type/team",
      "color": { "a": 1, "rgb": 15241530 }
    },
    {
      "query": "tag:#type/topic",
      "color": { "a": 1, "rgb": 10181046 }
    },
    {
      "query": "tag:#type/discussion",
      "color": { "a": 1, "rgb": 15844367 }
    },
    {
      "query": "tag:#type/project",
      "color": { "a": 1, "rgb": 15158332 }
    },
    {
      "query": "tag:#type/fleeting",
      "color": { "a": 1, "rgb": 9807270 }
    }
  ],
  "collapse-display": true,
  "showArrow": false,
  "textFadeMultiplier": 0,
  "nodeSizeMultiplier": 1,
  "lineSizeMultiplier": 1,
  "collapse-forces": true,
  "centerStrength": 0.5,
  "repelStrength": 10,
  "linkStrength": 1,
  "linkDistance": 250,
  "scale": 1,
  "close": false
}
```

**Color palette (7 entity types):**

| Enti...

© iurykrieger · MIT · iurykrieger/claude-bedrock

Similar skills

All skills for Notes, tasks and projects →

setup by other authors comes first.

setup Alireza Rezvani Sets up an autoresearch experiment by collecting its target file, evaluation command, metric, and optimization direction. Use it before starting an optimization loop. 1,480installs setup aws This skill kicks off the connection setup for AWS DevOps Agent and AWS Security Agent. Reach for it when MCP tools go missing or you are wiring the toolkit up for the first time. CX Codex +1 1,500installs setup marketcalls Sets up a Python backtesting environment with VectorBT and OpenAlgo. It configures the virtual environment, installs dependencies, and prepares .env. CX Codex +1 2,000installs setup assistant-ui This skill guides assistant-ui project creation, setup in an existing app, and runtime selection. Use it when starting a chat UI or wiring one to a backend. CX Codex +1 6,100installs setup aladicf Scans project files and asks UX questions to capture audience, brand personality, and UI defaults into .better-web-ui.md. CX Codex +1 605installs find-skills vercel-labs Discovers and installs agent skills from skills.sh directly inside your coding assistant. Handy when you need domain-specific workflows for a project. CX Codex +1 4,000,000installs grill-me Matt Pocock grill-me interviews you about a plan or design to expose gaps and sharpen decisions. Use it before implementation starts. 1,424,476installs grill-with-docs Matt Pocock This skill interviews you about a plan or design and creates ADRs and a glossary along the way. Use it when decisions need sharper definition. 1,219,756installs handoff Matt Pocock Creates a handoff document from the current conversation so another agent can continue the work. Use it when a task moves to a new session or agent. 1,038,491installs grilling Matt Pocock Stress-test a plan, decision, or idea through structured rounds of questions. Use it when you need to expose assumptions before acting. 979,543installs teach Matt Pocock Turns the current directory into a learning workspace and keeps progress across sessions. Use it when learning needs to support a concrete goal in your project. 862,247installs

From the same set10

vaults List Bedrock vaults, check their paths, change the default, or remove a registry entry. Use it when you need to see which vaults are registered. CX Codex +1 ★ 108repo stars sync Re-reads the external sources behind vault entities, diffs them against what is stored and hands the changes off for writing. Useful when your notes have drifted from Confluence, GDocs or GitHub. CX Codex +1 ★ 108repo stars preserve Single write point for Obsidian vault. Detects entities from text, notes, or /graphify output, matches against existing records, creates files and bidirectional links. CX Codex +1 ★ 108repo stars healthcheck Runs read-only diagnostics on your bedrock vault to detect orphaned entities, stale notes, and missing graph files without modifying data. CX Codex +1 ★ 108repo stars gdoc-to-markdown Turns Google Docs and Google Sheets content into local Markdown files. It tries MCP first, then Google API or public export, with browser extraction as a fallback. CX Codex +1 ★ 108repo stars confluence-to-markdown An internal module that reads a Confluence page and hands back its content as Markdown. It runs as part of /bedrock:learn and /bedrock:sync. CX Codex +1 ★ 108repo stars compress Scans Bedrock vaults to fix broken backlinks, duplicated entities, and structural misalignments. Useful for automated knowledge base maintenance. CX Codex +1 ★ 108repo stars ask Ask questions about a knowledge vault; the skill checks its graph first and expands the search when needed. CX Codex +1 ★ 108repo stars

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor