Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Manage registered Bedrock vaults. List all vaults, set a default vault, or remove a vault from the registry. The registry lives in the plugin directory and maps vault names to filesystem paths. Use when: "bedrock vaults", "bedrock-vaults", "/bedrock:vaults", "list vaults", "set default vault", "remove vault", "show vaults", "which vault", "my vaults", or when a user wants to manage their registered vaults.
.claude/skills/ccplugins-vaults/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 112% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 179% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 125% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 37% | 0% |
| case-12 | ✓→✗ | ▼ Worse | 3% | 0% |
The vault registry lives in the plugin root directory, not in any vault. Use the "Base directory for this skill" provided at invocation to resolve paths:
<base_dir>/../../vaults.json<base_dir>/../../CLAUDE.md (auto-injected into context)Where <base_dir> is the path shown in "Base directory for this skill".
This skill manages the global vault registry — the file that maps vault names to filesystem paths and tracks which vault is the default.
You are a management agent. This skill is read-only with respect to vaults themselves — it never reads or modifies vault entities, never runs git operations inside vaults, and never touches .bedrock/config.json. It only reads and writes the registry file (vaults.json).
Parse the user's input to determine the command mode:
| Input pattern | Mode | Variables | |---|---|---| | No flags / empty / list | list | — | | --set-default <name> | set-default | TARGET_NAME = <name> | | --remove <name> | remove | TARGET_NAME = <name> |
If the input doesn't match any pattern, default to list mode.
Resolve the registry path:
REGISTRY_PATH = <base_dir>/../../vaults.jsonRead the registry file:
bashcat <REGISTRY_PATH> 2>/dev/null
If the file does not exist or is empty:
/bedrock:setup in a vault directory to register your first vault."If the file exists: parse the JSON. Expected schema:
json{ "vaults": [ { "name": "<string>", "path": "<absolute-path>", "default": true | false } ] }
Store the parsed vaults array as VAULTS.
For each vault in VAULTS, check if the path still exists on disk:
bashtest -d "<vault_path>" && echo "exists" || echo "missing"
Present a table:
## Registered Vaults
| Name | Path | Default | Status |
|---|---|---|---|
| my-vault | /Users/me/vaults/my-vault | * | ok |
| team-vault | /Users/me/vaults/team-vault | | ok |
| old-vault | /Users/me/vaults/old-vault | | missing |Default column shows * for the default vaultStatus column shows ok if the directory exists, missing if it does notIf any vault has status missing, add a note:
> Vaults marked as "missing" have paths that no longer exist on disk.
> Run `/bedrock:vaults --remove <name>` to clean up, or re-create the vault at the registered path.name == TARGET_NAME in VAULTS<TARGET_NAME> is not registered. Available vaults:" followed by a list of names. Exit."default": false on all vaults"default": true on the matching vaultREGISTRY_PATH<TARGET_NAME> (<path>)."name == TARGET_NAME in VAULTS<TARGET_NAME> is not registered. Available vaults:" followed by a list of names. Exit.VAULTSREGISTRY_PATH<TARGET_NAME> removed from registry. Files on disk were NOT deleted (<path>)."When writing the registry (set-default or remove modes), use the Write tool to overwrite REGISTRY_PATH with the updated JSON:
json{ "vaults": [ { "name": "...", "path": "...", "default": true }, { "name": "...", "path": "...", "default": false } ] }
Format the JSON with 2-space indentation for readability.
| # | Rule | |---|---| | 1 | NEVER modify vault files — this skill only touches vaults.json | | 2 | NEVER run git operations — no git pull, commit, push, or any git command | | 3 | NEVER delete files on disk — --remove only removes the registry entry | | 4 | ALWAYS validate vault name exists before set-default or remove | | 5 | ALWAYS check path existence when listing vaults — flag missing paths | | 6 | ALWAYS maintain exactly one default — if the default is removed, auto-assign the first remaining vault | | 7 | Vault names are kebab-case — lowercase, no spaces, no special characters beyond hyphens |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 15,127 | 7,247 | -52% | 1 | 1 | 0% | 1,650 | 1,570 | -5% | 0 | 0 | — |
case-02 | fail→fail | 8,153 | 6,517 | -20% | 1 | 1 | 0% | 1,074 | 1,585 | +48% | 0 | 0 | — |
case-03 | fail→fail | 2,427 | 7,927 | +227% | 1 | 1 | 0% | 293 | 1,645 | +461% | 0 | 0 | — |
case-04 | fail→pass | 8,646 | 8,420 | -3% | 1 | 1 | 0% | 1,289 | 2,736 | +112% | 0 | 0 | — |
case-05 | fail→pass | 6,448 | 16,447 | +155% | 1 | 1 | 0% | 949 | 2,652 | +179% | 0 | 0 | — |
case-06 | fail→pass | 6,932 | 7,294 | +5% | 1 | 1 | 0% | 1,069 | 2,400 | +125% | 0 | 0 | — |
case-07 | fail→fail | 6,330 | 11,171 | +76% | 1 | 1 | 0% | 1,086 | 1,640 | +51% | 0 | 0 | — |
case-08 | fail→fail | 8,631 | 7,309 | -15% | 1 | 1 | 0% | 1,065 | 1,694 | +59% | 0 | 0 | — |
case-09 | fail→fail | 6,662 | 7,209 | +8% | 1 | 1 | 0% | 970 | 1,611 | +66% | 0 | 0 | — |
case-10 | fail→fail | 7,147 | 3,952 | -45% | 1 | 1 | 0% | 1,001 | 1,898 | +90% | 0 | 0 | — |
case-11 | fail→fail | 10,093 | 7,338 | -27% | 1 | 1 | 0% | 1,519 | 1,759 | +16% | 0 | 0 | — |
case-12 | pass→fail | 11,422 | 9,782 | -14% | 1 | 1 | 0% | 1,760 | 1,811 | +3% | 0 | 0 | — |
case-13 | pass→fail | 9,584 | 7,338 | -23% | 1 | 1 | 0% | 1,519 | 1,615 | +6% | 0 | 0 | — |
case-14 | fail→fail | 11,373 | 13,230 | +16% | 1 | 1 | 0% | 1,420 | 1,561 | +10% | 0 | 0 | — |
case-15 | fail→fail | 11,577 | 8,078 | -30% | 1 | 1 | 0% | 1,893 | 1,711 | -10% | 0 | 0 | — |
case-16 | fail→pass | 7,887 | 2,995 | -62% | 1 | 1 | 0% | 1,316 | 1,802 | +37% | 0 | 0 | — |
case-17 | fail→fail | 5,399 | 7,655 | +42% | 1 | 1 | 0% | 684 | 1,706 | +149% | 0 | 0 | — |
case-18 | fail→fail | 14,949 | 7,450 | -50% | 1 | 1 | 0% | 2,245 | 1,592 | -29% | 0 | 0 | — |
case-19 | fail→fail | 10,306 | 8,175 | -21% | 1 | 1 | 0% | 692 | 1,772 | +156% | 0 | 0 | — |
case-20 | fail→fail | 11,640 | 12,785 | +10% | 1 | 1 | 0% | 1,869 | 1,865 | -0% | 0 | 0 | — |
case-21 | pass→fail | 18,038 | 13,167 | -27% | 1 | 1 | 0% | 2,737 | 1,663 | -39% | 0 | 0 | — |
case-22 | fail→fail | 9,053 | 7,569 | -16% | 1 | 1 | 0% | 241 | 1,541 | +539% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 5 counted toward the lift figure. The other 17 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +5 percentage points is the difference between those two pass rates over the 5 comparable cases. 5 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.