Installs into .claude/skills of the current project.
Are you the author of Vault Operations?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/nikolanovoselec-vault-operations-codeflare)
---
name: vault-operations
description: "Operate the persistent /home/user/Vault layout, sync, and graph safely."
version: 1.0.0
disable-model-invocation: true
---
# Vault Operations
`/home/user/Vault/` is the persistent, user-curatable note store, synced session-to-session via rclone bisync to R2. The vault is always tagged `user_vault` in the unified graph from entrypoint init, never pruned by active-repo prune-on-switch, and skipped by the active-repo PostToolUse hook (a tool call inside the vault never re-tags it).
## Layout
```
Vault/
├── Index.md <- PRESEED: codeflare dashboard (overwrite each boot)
├── README.md <- PRESEED: vault user guide (overwrite each boot)
├── CONFIG.md <- PRESEED: SilverBullet #meta config page (overwrite each boot)
├── STYLES.md <- PRESEED: codeflare editor theme (overwrite each boot)
├── Raw/
│ ├── Sessions/ <- MACHINE-OWNED: hot capture files plus deterministic Archive.md
│ └── Pasted/ <- USER-OWNED, OPTIONAL: manual archive only; NOT the SB drag-drop target
├── Notes/ <- USER-OWNED: curated prose; SB attachments land next to the note
├── Inbox/ <- USER-OWNED: SB Quick Note lands under Inbox/YYYY-MM-DD/
├── Journal/ <- USER-OWNED: SB "Journal: Today" lands here
├── Library/Codeflare <- PRESEED: bundled SB plugs (pdf, treeview, github, graph)
├── graphify-out/ <- DERIVED: regenerated by vault-extract agent; never hand-edit
└── .silverbullet/ <- EDITOR CONFIG: SilverBullet maintains it
```
## Reading
Prefer the unified graph (`Pi graphify tools`) for any cross-session lookup; it ingests every vault file plus every active repo's graphify-out, so one query returns vault + code side by side. Use `query_graph` for free-text, `get_node` when you know the concept name. Read raw vault files only when the graph points at a specific path. For session-memory lookup, search current `Raw/Sessions/*.md` capture files first (excluding `Archive.md`), then search `Raw/Sessions/Archive.md` only when the hot files do not answer the question.
## Writing (who writes where)
| Path | Who writes | When |
|---|---|---|
| `Raw/Sessions/<capture>.md` | Capture agent only | Triggered every 20 real user prompts and for an uncaptured tail on session resume. Never hand-edit or delete. |
| `Raw/Sessions/Archive.md` | Image-owned compactor only | Deterministic cold-capture archive. Agents may read it after hot files, but never edit or replace it. |
| `Inbox/<YYYY-MM-DD>/*` | User via SilverBullet | Quick Note + attachments land in same date folder. |
| `Journal/*` | User via SilverBullet | Journal: Today lands here. |
| `Notes/**/*.md` | User (primarily) | If user asks to file a note, write here. Use `[[wikilinks]]` for concepts. |
| `Raw/Pasted/*` | Optional manual user archive | NOT the SB drag-drop target. Don't generate files here from agent code. |
| `graphify-out/` | graphify CLI only | Build output. Never write directly. |
| `.silverbullet/` | The editor only | Touch only when debugging SB itself. |
## Wikilink convention
- Wrap **concepts** in `[[wikilinks]]` (e.g. `[[VaultMonitorDaemon]]`). The vault-extract agent emits each as a concept node with `source_file: null`; graphify's global_add external-label dedup matches on these to unify the concept across vault notes and per-repo graphs.
- Dedup is **exact-string label match** (case-sensitive). `[[VaultMonitorDaemon]]` does NOT auto-link to snake_case `vault_monitor_daemon`. Fuzzy matching would create cross-repo noise; choose PascalCase concept names you actively want unified.
- Keep **file paths**, **code symbols**, and **issue/PR refs** as prose — they namespace per-project.
## Hard rules (NEVER)
- **Never `rm` from the vault.** User-curated content and capture history are sacred; if you think a file is wrong, ask.
- **Never edit or delete individual `Raw/Sessions/` captures.** Only the capture pipeline creates them; only the verified image compactor removes exact archived sources.
- **Never edit, replace, or regenerate `Raw/Sessions/Archive.md`.** It is deterministic image-owned output.
- **Never write into `graphify-out/`.** Build output; run `graphify extract` instead.
- **Never `cd` into the vault and `git init`.** Vault syncs via rclone bisync, not git. Adding `.git/` confuses the graphify-active-repo hook + bisync filters.
## Vault-monitor hook
`memory-capture.sh` content-hash checks Vault on every resumed-tail capture and each crossed 20-real-user-prompt epoch. It writes a marker only when content changed. `vault-monitor-hook.sh` exits silently without that marker; when it emits `additionalContext`, spawn the background vault-extract agent per the directive. The agent's first step deletes the marker (dedup gate).
## Worker proxy boundary
SilverBullet inside the container is reachable from the codeflare UI via `/api/vault/:sid/`. Auth + rate-limit happens at the Worker; SB itself binds to localhost only. Do not try to expose port 3030 directly — the auth boundary is the Worker route.