iurykrieger/claude-bedrock/preserve
Claude Code and agent skill by iurykrieger/claude-bedrock
- community
Checking that the SKILL.md file is still in the repository.
Single write point for the vault. Centralizes entity detection, textual matching, entity creation/update, and bidirectional linking. Accepts structured input (list of entities), free-form input (text, meeting notes, session context), or graphify output (graph.json + obsidian markdown from /graphify pipeline). Use when: "bedrock preserve", "bedrock-preserve", "save to vault", "record in vault", "/bedrock:preserve", or when another skill (e.g., /bedrock:learn) needs to persist entities in the vault.
Install
npx vskill@latest install iurykrieger/claude-bedrock/preserveSKILL.md
/bedrock:preserve — Single Write Point for the Vault
Plugin Paths
Entity definitions and templates 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(already injected automatically into context)
Where <base_dir> is the path provided in "Base directory for this skill".
Vault Resolution
Resolve which vault to operate on. This skill can be invoked from any directory.
Step 1 — Parse `--vault` flag: Check if the input arguments include --vault <name>. If found, extract the vault name and remove it from the arguments before further parsing.
Step 2 — Resolve vault path:
- If `--vault <name>` was provided:
Read the vault registry at <base_dir>/../../vaults.json. Find the entry matching the name. If not found: error — "Vault <name> is not registered. Run /bedrock:vaults to see available vaults." If found: set VAULT_PATH to the entry's path value.
- If no `--vault` flag — CWD detection:
Read <base_dir>/../../vaults.json. Check if the current working directory is inside any registered vault path (CWD starts with a registered vault's absolute path). If multiple match, use the longest path (most specific). If found: set VAULT_PATH to the matching vault's path.
- If CWD detection fails — default vault:
From the registry, find the vault with "default": true. If found: set VAULT_PATH to the default vault's path.
- If no resolution:
Error — "No vault resolved. Available vaults:" followed by the registry listing. "Use --vault <name> to specify, or run /bedrock:setup to register a vault."
Step 3 — Validate vault path:
If missing: error — "Vault path <VAULT_PATH> does not exist on disk. Run /bedrock:setup to re-register."
Step 4 — Read vault config:
Extract language, git.strategy, and other relevant fields for use in later phases.
From this point forward, ALL vault file operations use `<VAULT_PATH>` as the root.
- Entity directories:
<VAULT_PATH>/actors/,<VAULT_PATH>/people/, etc. - Vault config:
<VAULT_PATH>/.bedrock/config.json - Git operations:
git -C <VAULT_PATH> <command>
Overview
This skill centralizes ALL write logic for the vault. It receives input (structured, free-form, or graphify output), identifies entities, correlates with the existing vault, proposes changes to the user, and executes after confirmation. It is the only path to create or update entities in the vault (except /sync-people which handles people/teams via GitHub API).
You are an execution agent. Follow the phases below in order, without skipping steps.
Phase 0 — Pre-Write Setup
Two pre-flight steps run before any input parsing: synchronize the vault with its remote, then (when applicable) merge an incoming graphify output directory into the vault's cumulative graphify-out/.
0.1 Vault Sync
Execute:
If the pull fails:
- No remote configured: warn "No remote configured. Working locally." and proceed.
- Pull conflict:
git -C <VAULT_PATH> rebase --abortand warn the user. DO NOT proceed without resolving. - Otherwise: proceed.
0.2 Merge Incoming Graphify Output
When this runs: Only when the skill was invoked with a graphify_output_path argument pointing at a graphify output directory (e.g., /bedrock:learn passes $TEACH_TMP/graphify-out-new/). Free-form text input and structured entity-list input skip this sub-phase entirely.
Skip condition (backward compat): If the input's graphify_output_path resolves to the same absolute path as <VAULT_PATH>/graphify-out/, skip this sub-phase. Legacy callers (and /bedrock:sync in its current form) point at the vault's own output directory — there is nothing to merge. Use realpath (or equivalent) to compare:
Skip condition (no graphify input): If the input is free-form text, structured entity list, or otherwise does not include graphify_output_path, skip.
Step 1 — Validate incoming directory. Verify that <graphify_output_path>/graph.json exists, is non-empty, and parses as valid JSON. If invalid, abort with a clear error and do NOT mutate the vault:
Step 2 — First-ingestion edge case. If <VAULT_PATH>/graphify-out/ does not exist, promote the incoming directory wholesale (no re-merge pass) and record stats, then skip to Step 7:
Step 3 — Merge `graph.json` (nodes + edges). Both files follow NetworkX node-link format ({"nodes": [...], "edges": [...]} or "links" — accept either key). Run the merge via an inline Python block to avoid hand-merging JSON in the prompt. Write the merged graph to a staging file, then atomically swap:
Atomic swap after the Python block succeeds:
If the Python block exits non-zero, abort without running the mv — the vault's graph.json stays untouched.
Step 4 — Append `obsidian/*.md` files. For each markdown file in <graphify_output_path>/obsidian/:
- Skip any file whose
source_filefrontmatter value starts with/tmp/— these are ephemeral visualization files produced by/bedrock:teachand must not accumulate in the vault. - If the corresponding file exists in
<VAULT_PATH>/graphify-out/obsidian/: append the incoming content to the existing file, separated by\n\n---\n\n. Existing content is preserved verbatim. - If it does not exist: copy the file into
<VAULT_PATH>/graphify-out/obsidian/.
Step 5 — Append `GRAPH_REPORT.md`. If <graphify_output_path>/GRAPH_REPORT.md exists:
- If
<VAULT_PATH>/graphify-out/GRAPH_REPORT.mdexists: append a new dated section. - If it does not exist: copy.
Step 6 — Mark `.graphify_analysis.json` stale. If <VAULT_PATH>/graphify-out/.graphify_analysis.json exists, set a top-level "stale": true field. Other content is untouched:
If the file does not exist, skip (nothing to mark).
Step 7 — Record merge stats for the Phase 7 report. Capture nodes_added, nodes_merged, edges_added (from Step 3's Python stdout) and stale_flag_set (from Step 6). These values are threaded through to Phase 7's report block under a new "Graphify merge" section and returned in the skill's result payload to the caller (e.g., /bedrock:learn).
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/preserve/SKILL.md
Popularity
- Repository stars
- 54
- Repository forks
- 8
- 7-day trend score
- 20
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/iurykrieger/claude-bedrock/preserve)