Help us improve
Share bugs, ideas, or general feedback.
Gardener-style vault maintenance — runs `vault-keeper entropy --json` to measure 4 chaos dimensions (schema drift, vocab drift, lifecycle decay, distribution health), surfaces emergence patterns, proposes context-aware pruning actions, applies per-batch with approval, remeasures to confirm entropy dropped. Closed loop. Modifies files (performs all edits directly via the Edit tool). Use when user says 'cắt tỉa vault', 'garden vault', 'prune vault', 'vault health gradient', 'vault entropy', 'cleanup drift', '/vault.garden'.
npx claudepluginhub nguyenvanduocit/claude-code-vault-keeper --plugin claude-code-vault-keeperHow this skill is triggered — by the user, by Claude, or both
Slash command
/claude-code-vault-keeper:vault.gardenThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A closed-loop session that measures vault entropy, proposes pruning actions, applies the approved ones, and remeasures to confirm entropy dropped. Distinct from `/vault.health` (binary read-only validator) — this skill modifies files.
Creates p5.js generative art with seeded randomness, noise fields, and interactive parameter exploration. Use for algorithmic art, flow fields, or particle systems.
Share bugs, ideas, or general feedback.
A closed-loop session that measures vault entropy, proposes pruning actions, applies the approved ones, and remeasures to confirm entropy dropped. Distinct from /vault.health (binary read-only validator) — this skill modifies files.
${CLAUDE_PROJECT_DIR:-$PWD}.vault-keeper is on $PATH. If missing, print install instructions from README.md and exit.Run:
vault-keeper entropy --json --root "${CLAUDE_PROJECT_DIR:-$PWD}"
Capture stdout as EntropyReport. If exit ≠ 0, surface stderr and stop. Do NOT retry.
Render baseline summary (≤ 8 lines):
vault.garden — <project-root>
Snapshot: <measured_at> (git: <short>)
Overall health: <score>/100
Schema drift <s> <verdict>
Vocab drift <s> <verdict>
Lifecycle decay <s> <verdict>
Distribution <s> <verdict>
Pattern garden <N> candidates emerging
<total_docs> docs · <total_templates> templates · scan <ms>ms
Verdict bands: ≥80 = ✓ healthy, 60–79 = ⚠ moderate, <60 = ✗ degraded.
Generate pruning proposals from the report. Use 5 action verbs:
| Verb | Source signal | Confidence | Reversibility |
|---|---|---|---|
| prune | lifecycle.stale_docs with 0 incoming links | high | reversible (archive move) |
| graft | vocab.tag_clusters / vocab.link_clusters | medium | reversible (find/replace) |
| promote | emergence.field_candidates / section_candidates | low | reversible via git |
| retire | template usage = 0 docs (from distribution.template_usage.counts) | medium | reversible via git |
| compost | lifecycle.zombie_docs | high | reversible (status edit) |
Sample concrete notes only when needed. For graft proposals you typically need no samples (the cluster already lists members). For promote proposals, Read 3–5 representative docs to pick a primitive (enum vs string).
Internal proposal shape (do not show user yet):
{
"id": "g1",
"verb": "graft",
"scope": "vocab",
"summary": "Merge #OLAP + #olap → #olap (45 uses across 12 files)",
"evidence": { "...": "..." },
"actions": [ { "kind": "find_replace_tag", "from": "#OLAP", "to": "#olap", "files_affected": 12 } ],
"confidence": 0.92,
"reversibility": "reversible",
"delegated_to": "skill_direct"
}
Present batches in this order (most reversible first):
<vault>/archive/<YYYY>/)Per batch prompt:
━━━ Batch <i>/<n>: <VERB> (<count> proposals, <reversibility>) ━━━
1. <summary>
2. <summary>
...
Approve: [a]ll · [n]one · [s]elect individual · [d]iff first · [q]uit garden
[a] → apply all proposals in this batch.[s] → list numbered proposals; user enters comma-separated indices.[d] → render a concrete diff per proposal, then re-ask.[n] → skip the whole batch.[q] → abort the session; applied batches stay, no remeasure runs.All proposals run via delegated_to: "skill_direct" — use the Edit /
Write tool directly. Examples:
<vault>/archive/<YYYY>/<basename>.fields: block (add an optional entry).status: field.Actions inside a batch run serially, not in parallel — one action may produce a file the next reads.
Failure handling: on any action failure within a batch, stop the batch, render the error, ask [c]ontinue · [r]ollback batch · [q]uit. Rollback uses the session log at .vault-keeper/garden-session-<sessionId>.log plus git checkout -- <files>. The pre-flight clean-vault check makes rollback safe.
Re-run:
vault-keeper entropy --json --root "${CLAUDE_PROJECT_DIR:-$PWD}"
A new snapshot is written automatically. Compute the delta vs the baseline (Phase 1) using diffSnapshots semantics and render:
━━━ Session result ━━━
Duration: <m>m <s>s
Actions applied: <N> (graft: a, compost: b, prune: c, promote: d, retire: e)
Score: <before> → <after> (<signed-delta>)
Schema: <b> → <a> (<signed>)
Vocab: <b> → <a> (<signed>)
Lifecycle: <b> → <a> (<signed>)
Distribution: <b> → <a> (<signed>)
Pattern garden:
resolved: <list>
still pending: <list>
Snapshot saved: .vault-keeper/snapshots/<filename>
Next session suggested: when score < <baseline> (currently <after>)
Session ends on any of:
[q]uit at any batch.[q]uit.The session does NOT auto-loop. Gardening pruning has diminishing return per session — cadence is the user's call.
fields: without going through the promote verb.prune archives them..claude/vault-keeper.json (config belongs to the user).Last line is one of:
vault.garden: <N> actions applied, score <before> → <after>.vault.garden: session aborted, <N> actions applied, score <before> → <after>. (after [q])vault.garden: 0 actions applied, no changes (baseline score <X>).