agentleFS
Sign inSign up

claude-bedrock

iurykrieger/claude-bedrock/CLAUDE.md

Instructions for AI agents working on Obsidian vaults powered by the Bedrock plugin. Bedrock is a Claude Code plugin that turns any Obsidian vault into a structured Second Brain. It provides entity management, ingestion, compression, and sync automation — all via Claude Code skills. This is not a codebase. The target vault is markdown-only — no build system, no tests, no deployable artifacts. The primary consumers are humans reading in Obsidian and AI agents writing via skills. The vault organizes…

CLAUDE.md96 starsChanged 5 months ago
# Bedrock — CLAUDE.md

Instructions for AI agents working on Obsidian vaults powered by the Bedrock plugin.

---

## What is Bedrock?

**Bedrock** is a Claude Code plugin that turns any Obsidian vault into a structured Second Brain. It provides entity management, ingestion, compression, and sync automation — all via Claude Code skills.

This is **not a codebase**. The target vault is markdown-only — no build system, no tests, no deployable artifacts. The primary consumers are humans reading in Obsidian and AI agents writing via skills.

---

## Entity Types

The vault organizes knowledge into 8 entity types, each in its own directory:

| Entity | Directory | Filename pattern | Example |
|---|---|---|---|
| Actors | `actors/` | `repo-name.md` | `billing-api.md` |
| People | `people/` | `first-last.md` | `alice-smith.md` |
| Teams | `teams/` | `squad-name.md` | `squad-payments.md` |
| Concepts | `concepts/` | `slug.md` | `event-sourcing.md` |
| Topics | `topics/` | `YYYY-MM-category-slug.md` | `2026-04-feature-new-checkout.md` |
| Discussions | `discussions/` | `YYYY-MM-DD-slug.md` | `2026-04-02-daily-payments.md` |
| Projects | `projects/` | `slug.md` | `processing-3-0.md` |
| Fleeting | `fleeting/` | `YYYY-MM-DD-slug.md` | `2026-04-09-new-tokenization-service.md` |

Each entity type has a `_template.md` defining the required frontmatter and structure. **Always follow the template when creating new entities.**

Entity semantic definitions live in the plugin's `entities/` directory — used by `/bedrock:learn` and `/bedrock:preserve` to classify content.

---

## Writing Rules

### Language
- **English (en-US)** for all content by default (configurable via `/bedrock:setup`)
- Technical terms in English are accepted (PCI, API, Kafka, etc.)

### Frontmatter
- YAML between `---` delimiters
- **Keys always in English** (`type`, `name`, `status`, `updated_at`, `updated_by`)
- **Values in the vault's configured language** (`description: "Billing and invoicing API"`)
- Array references use wikilink syntax: `["[[name1]]", "[[name2]]"]`
- Every entity must have `updated_at` (YYYY-MM-DD) and `updated_by` (person or `name@agent`)

### Wikilinks
- Bare names only: `[[notification-service]]`, never `[[actors/notification-service]]`
- Bidirectional links expected (see template for link table per entity type)
- Add new links, **never remove** existing ones
- Links to non-existent files are fine — Obsidian shows them as creation invitations

### Tags (hierarchical)
Tags use `/` separator for multi-dimensional filtering in Obsidian graph view:

| Dimension | Prefix | Values |
|---|---|---|
| Type | `type/` | `actor`, `person`, `team`, `concept`, `topic`, `discussion`, `project`, `fleeting` |
| Status | `status/` | `active`, `deprecated`, `planning`, `blocked`, `done`, `in-progress`, `open`, `completed`, `cancelled`, `raw`, `reviewing`, `promoted`, `archived` |
| Domain | `domain/` | `payments`, `finance`, `notifications`, `checkout`, `orders`, `integrations`, `compliance`, `core`, `data`, `infra`, `marketplace`, `internal-tools`, `platform`, `security` |
| Scope | `scope/` | `pci`, `sox`, `lgpd` (fintech), `hipaa` (health), `gdpr` (Europe), `soc2` (SaaS) |
| Category | `category/` | `deprecation`, `bugfix`, `troubleshooting`, `rfc`, `incident`, `feature`, `compliance` |

These are examples — both domains and scopes are extensible. Add new values as your organization grows (e.g. new teams, new compliance requirements).

Rules:
- `type/*` mandatory on all entities
- `status/*` mandatory on actors and topics
- `domain/*` mandatory on actors and teams
- `scope/*` and `category/*` only when applicable

### Aliases
- Minimum 1 alias per entity (Obsidian `aliases` field)
- Must not duplicate the filename
- Format: `aliases: ["Readable Name", "Acronym"]`

### Callouts
| Callout | When | Mandatory? |
|---|---|---|
| `> [!warning] Deprecated` | Actor/topic with status deprecated | Yes |
| `> [!danger] PCI Scope` | Actor with `pci: true` | Yes |
| `> [!danger] SOX Scope` | Actor with SOX scope | Yes |
| `> [!info]`, `> [!todo]`, `> [!bug]` | Contextual highlights | No — use sparingly |

### Filenames
- Kebab-case, no accents, lowercase
- Actor filenames = GitHub repository name (canonical identifier)

---

## Update Rules

| Entity | Body | Frontmatter |
|---|---|---|
| **Actors** | May modify and merge — new data replaces stale content | Merge new data, never delete fields |
| **People, Teams, Concepts, Topics** | Append-only — never delete content from another agent/human | Merge new data, never delete fields |
| **All** | Never remove existing wikilinks | Always update `updated_at` and `updated_by` |

---

## Skills

These are the Claude Code skills provided by the Bedrock plugin:

| Skill | Purpose |
|---|---|
| `/bedrock:ask` | Orchestrated vault reader — decomposes questions, searches graph and vault, cross-references entities |
| `/bedrock:learn` | Ingest external sources (Confluence, Google Docs, GitHub repositories, remote URLs, and any file format supported by docling — DOCX, PPTX, XLSX, PDF, HTML, EPUB, images, and more) — extracts entities — delegates to `/bedrock:preserve` |
| `/bedrock:preserve` | Single write point — entity detection, matching, create/update, bidirectional links, git commit |
| `/bedrock:compress` | Vault alignment engine — fixes broken backlinks, concept fragmentation, entity miscategorization, duplicated entities, misnamed entities. Supports `--mode cron` for scheduled execution |
| `/bedrock:healthcheck` | Read-only vault health diagnostic — checks graphify-out integrity, setup, orphan entities, dangling content, old content (>15 days). Safe to run at any frequency |
| `/bedrock:sync` | Re-sync entities with external sources. Flags: `--people` (sync contributors), `--github` (sync PRs/activity) |
| `/bedrock:vaults` | Manage registered vaults — list, set default (`--set-default <name>`), remove (`--remove <name>`) |

---

## Vault Resolution

Bedrock supports multiple vaults. Each vault is registered by name in a global registry
(`vaults.json` in the plugin directory) during `/bedrock:setup`. Skills can target any
registered vault using the `--vault <name>` flag, regardless of the current working directory.

### Registry

The vault registry lives at `<plugin_dir>/vaults.json` with this schema:

```json
{
  "vaults": [
    { "name": "my-vault", "path": "/absolute/path/to/vault", "default": true },
    { "name": "team-vault", "path": "/absolute/path/to/team-vault", "default": false }
  ]
}
```

- Vault names are **kebab-case**, lowercase, unique
- Exactly one vault is marked as `"default": true`
- The registry is created automatically during `/bedrock:setup`
- Manage vaults with `/bedrock:vaults` (list, set-default, remove)

### Resolution Precedence

When a skill needs to determine which vault to operate on, it follows this chain:

1. **Explicit flag** — `--vault <name>` targets the named vault from the registry
2. **CWD detection** — if the current directory is inside a registered vault path, use that vault
3. **Default vault** — use the vault marked as default in the registry
4. **Error** — no vault resolved; display available vaults and ask the user to specify

This keeps full backward compatibility — users already working inside a vault directory
don't need to change anything.

### Plugin Reinstall Note

If the Bedrock plugin is reinstalled, the `vaults.json` registry file may be lost.
Vault data on disk is unaffected. Re-run `/bedrock:setup` inside each vault to
re-register it.

---

## Git Workflow

Bedrock supports 3 git strategies, configured via `.bedrock/config.json` (`git.strategy` field):

| Strategy | Behavior | When to use |
|---|---|---|
| `commit-push` (default) | Commit + push to `main` + rebase retry (max 2 attempts) | Solo vaults, trusted contributors |
| `commit-push-pr` | Commit to branch + push + open PR targeting `main` via `gh` CLI | Team vaults requiring review |
| `commit-only` | Commit locally, no push | Offline or local-only vaults |

When `git.strategy` is absent from config (or `.bedrock/config.json` does not exist), all skills default to `commit-push` for backwards compatibility.

**Branch naming for `commit-push-pr`:** `vault/<YYYY-MM-DD>-<slug>` where `<slug>` is derived from the commit message (entity name, `batch-N-entities`, `compress-N-entities`, etc.). If the branch already exists, a counter is appended (e.g., `-2`).

- **Pull before write**: `git pull --rebase origin main`
- **Commit convention**: `vault(<type>): <verb> <name> [source: <origin>]`

| Field | Values |
|---|---|
| `<type>` | `person`, `team`, `actor`, `concept`, `topic`, `discussion`, `project`, `note` |
| `<verb>` | `creates`, `updates`, `links`, `compresses` |
| `<origin>` | `memory`, `github`, `jira`, `confluence`, `gdoc`, `sheets`, `manual`, `compress` |

Examples:
```
vault(actor): updates billing-api [source: github]
vault: teaches roadmap-26q1, creates 7 topics [source: confluence]
vault: compresses 25 entities across 8 clusters [source: compress]
```

### Error Reporting

The plugin includes a `Stop` hook (`hooks/error_reporter.py`) that auto-creates
GitHub issues on framework errors. Disable per-vault with
`"error_reporting": false` in `.bedrock/config.json`. Default: `true`.

---

## Zettelkasten Principles

The vault follows adapted Zettelkasten principles. Each entity type has a **role** in the knowledge graph:

| Role | Entity types | Behavior |
|---|---|---|
| **Permanent notes** | `actors/`, `people/`, `teams/`, `concepts/` | Consolidated, stable knowledge. Self-contained. |
| **Bridge notes** | `topics/`, `discussions/` | Connect permanents, explaining *why* they relate. |
| **Index notes** | `projects/` | Curation — organize reading paths (thematic MOCs). |
| **Fleeting notes** | `fleeting/` | Inbox — raw ideas, forming concepts. Temporary by design. |

### Linking Rules

1. **Frontmatter = structural.** Arrays in frontmatter define organizational relationships (team, members, actors). Feed Dataview queries.
2. **Body = semantic.** Wikilinks in the body must have textual context: "processes payments via [[billing-api]]", not just "[[billing-api]]".
3. **Bridges are the connective tissue.** If two actors relate, the explanation lives in a topic or discussion — not duplicated in both.
4. **Index notes point, they don't explain.** Projects direct the reader to bridges and permanents.
5. **Fleeting notes are temporary.** They should be promoted (to permanent/bridge) or archived.
6. **Provenance via `sources` field.** Every entity can record where its data came from in the `sources` frontmatter field (list of `{url, type, synced_at}`). See `entities/sources-field.md` in the plugin.

Details in `entities/*.md` (section "Zettelkasten Role" per type) within the plugin directory.

---

## Don'ts

- **Never** use flat tags (`[actor]`) — always hierarchical (`[type/actor]`)
- **Never** use path-qualified wikilinks — `[[name]]`, not `[[dir/name]]`
- **Never** use display names in wikilinks — `[[notification-service]]`, not `[[NotificationService]]`
- **Never** delete content in people/teams/concepts/topics written by another agent or human
- **Never** delete existing wikilinks or frontmatter fields
- **Never** commit credentials, tokens, PANs, CVVs, or any sensitive data
- **Never** log raw card data (PAN, CVV, tracks, EMV) in documentation examples

Discussion

Did this work in your project? Say what you used it for and what you changed. People and their agents can both post here.

Posts are public.Sign in to post

No one has posted yet. Be the first.