This skill should be used when the user runs `/silver:update` or asks to update Silver Bullet — checks GitHub for the latest release, shows the changelog since the installed version, and installs the update after confirmation.
Install to Claude Code
npx -y skills add alo-exp/silver-bullet --skill silver:update --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Silver:Update?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/alo-exp-silver-update-silver-bullet)More formats (shields.io, HTML) on the badges page.
---
name: silver:update
description: This skill should be used when the user runs `/silver:update` or asks to update Silver Bullet — checks GitHub for the latest release, shows the changelog since the installed version, and installs the update after confirmation.
version: 0.1.0
---
# /silver:update — Update Silver Bullet
Check GitHub for the latest Silver Bullet release, display what changed since your installed version, and install the update.
## Process
### Step 1: Read installed version
Read `$HOME/.claude/plugins/installed_plugins.json`. Try these keys in order:
- `silver-bullet@alo-labs` (Claude Code / host marketplace)
- `silver-bullet@alo-labs` (Codex marketplace)
- `silver-bullet@silver-bullet` (legacy installation)
Use the first key that exists; read its `version` field (e.g. `0.24.1`). If none exist, treat installed version as `0.0.0`.
Display:
```
## Silver Bullet Update
Checking for updates...
**Installed:** vX.Y.Z
```
### Step 2: Check latest version from GitHub
```bash
curl -fsSL https://api.github.com/repos/alo-exp/silver-bullet/releases/latest \
| jq -r '.tag_name' | sed 's/^v//'
```
If the curl fails or returns empty, output:
```
Couldn't check for updates (offline or GitHub unavailable).
To update manually: reinstall via the active host's plugin manager or package refresh path, or clone from https://github.com/alo-exp/silver-bullet
```
Then exit.
**Validate the version string before proceeding.** After extracting `$LATEST`, verify it is a valid semver (`MAJOR.MINOR.PATCH` — digits only, no pre-release suffix):
```bash
if [[ -z "$LATEST" ]] || ! [[ "$LATEST" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "GitHub returned an unexpected version string: '${LATEST:-<empty>}'"
echo "Expected semver format (e.g. 0.23.6). Aborting to prevent path/ref corruption."
exit
fi
```
If validation fails, output the message above and exit. Do not proceed — passing a malformed version string to the marketplace install command can cause an incorrect or failed install.
### Step 3: Compare versions
Parse both as semver (MAJOR.MINOR.PATCH) and compare numerically.
**If installed == latest:**
```
## Silver Bullet Update
**Installed:** vX.Y.Z
**Latest:** vX.Y.Z
You're already on the latest version.
```
Exit.
**If installed > latest (dev build):**
```
## Silver Bullet Update
**Installed:** vX.Y.Z
**Latest:** vA.B.C
You're ahead of the latest release (development build).
```
Exit.
### Step 4: Fetch changelog and confirm
Fetch the changelog:
```bash
curl -s https://raw.githubusercontent.com/alo-exp/silver-bullet/main/CHANGELOG.md
```
Extract entries between the installed version and the latest version (inclusive of latest, exclusive of installed). Show all intermediate versions.
Display:
```
## Silver Bullet Update Available
**Installed:** vX.Y.Z
**Latest:** vA.B.C
### What's New
────────────────────────────────────────────────────────────
[extracted changelog entries]
────────────────────────────────────────────────────────────
⚠️ **Note:** The update installs the new release via the active host's marketplace or package manager.
On hosts without live Bash rewrite, use the repo's host package refresh path instead of the Claude Code marketplace command.
Your project files (project instruction file, silver-bullet.md, hooks, config) are never
touched during Steps 1–8 — only the active host's plugin cache and registry are updated.
See **Step 9** for optional project scaffolding migration.
```
Ask the user directly:
- Question: "Proceed with update to vA.B.C?"
- Options:
- "A. Yes, update now" — install via marketplace and clean up stale entries
- "B. No, cancel" — exit without changes
If user cancels, exit.
### Step 5: Install the update
Run the host-appropriate install command. Silver Bullet is a **plugin**, not an MCP server — install it through the host's plugin manager:
```bash
# the active host agent / task host (plugin host): run inside the agent, not the shell
/plugin install alo-exp/silver-bullet
# Codex host: ./scripts/install-<runtime>.sh --purge-legacy-skills
```
If the command fails (non-zero exit code), display the error output and exit without proceeding to cleanup:
```
Update failed. The host install did not complete successfully.
Please try again or install manually via the active host's plugin manager or package refresh path.
```
Do not modify the registry or attempt cleanup if the install step fails.
### Step 6: Remove stale legacy entries
After the marketplace install succeeds, clean up any residual legacy installations.
**6a. Remove stale registry entry:**
Check whether `installed_plugins.json` contains the legacy `silver-bullet@silver-bullet` key. If it does, remove it atomically:
```bash
REG="$HOME/.claude/plugins/installed_plugins.json"
if jq -e '.plugins["silver-bullet@silver-bullet"]' "$REG" > /dev/null 2>&1; then
TMP="$(mktemp "${REG}.XXXXXX")"
jq 'del(.plugins["silver-bullet@silver-bullet"])' "$REG" > "$TMP" && mv "$TMP" "$REG"
fi
```
**6b. Remove stale cache directory:**
Check whether `$HOME/.claude/plugins/cache/silver-bullet/silver-bullet/` exists. If it does, remove it:
```bash
if [[ -z "$HOME" ]]; then
echo "WARNING: HOME is unset — skipping stale cache cleanup."
else
STALE_CACHE="$HOME/.claude/plugins/cache/silver-bullet/silver-bullet"
if [[ -d "$STALE_CACHE" && ! -L "$STALE_CACHE" && "$STALE_CACHE" == "${HOME}/"* ]]; then
rm -rf "$STALE_CACHE"
fi
fi
```
Do NOT remove `$HOME/.claude/plugins/cache/silver-bullet/alo-labs/` — that is the newly installed version.
If either cleanup step fails, log the error but do not abort — the install already succeeded.
### Step 7: Display result
```
╔═══════════════════════════════════════════════════════════╗
║ Silver Bullet Updated: vX.Y.Z → vA.B.C ║
╚═══════════════════════════════════════════════════════════╝
Installed via the active host's package manager / marketplace (silver-bullet@alo-labs).
⚠️ Restart the host coding agent to pick up the new skills and hooks.
[View full changelog](https://github.com/alo-exp/silver-bullet/blob/main/CHANGELOG.md)
```
### Step 8: Recommended-tools consent and install retry (project-level)
After the plugin update succeeds, check the **project's** `.silver-bullet.json` (if present)
for Graphify consent and suspension state. This mirrors Phase 1.1a of `/silver:init`.
```bash
test -f .silver-bullet.json && jq -r '.recommended_tools.graphify.enabled_by_user // "null"' .silver-bullet.json
test -f .silver-bullet.json && jq -r '.recommended_tools.graphify.enforcement_suspended // false' .silver-bullet.json
```
**If `enabled_by_user` is `null` (consent pending):** run the same AskQuestion consent flow
as fresh init — present benefits, ask Yes/No, write choice to `.silver-bullet.json`.
**If `enabled_by_user` is `true` AND `enforcement_suspended` is `true`:** retry Graphify install
without re-asking. Detect host the same way as `/silver:init` Phase 1.1a Step 3 (`SB_HOST` =
`Claude Code`, `Codex`, or `task host` via `SILVER_BULLET_RUNTIME`, `SB_PLUGIN_ROOT`, or host env vars).
1. `uv tool install graphifyy` or `pipx install graphifyy`
2. Pre-index skill registration (upstream Install Step 2):
- **Claude Code:** `graphify install --project`
- **Codex:** `graphify install --project --platform <runtime>`
- **task host:** skip
3. `graphify update . --no-cluster`
4. Post-index always-on (upstream "Make your assistant always use the graph"):
- **Claude Code:** `graphify host install (see install guide) --project`
- **Codex:** `graphify host install (see install guide) --project`
- **task host:** `graphify host install (see install guide)`
Read `recommended_tools.graphify.platform_install_commands.<host>.pre_index` / `.post_index` from `.silver-bullet.json` when present.
On success, clear suspension:
```bash
jq '.recommended_tools.graphify.enforcement_suspended = false
| .recommended_tools.graphify.install_status = "ok"
| .recommended_tools.graphify.install_failure_reason = null' .silver-bullet.json
```
On failure, keep suspension and update `install_failure_reason`. Do not block the update.
**If `enabled_by_user` is `false`:** no action needed.
### Step 8b: agentmemory consent and install retry
After Step 8 (Graphify), check `.silver-bullet.json` for agentmemory consent and suspension:
```bash
test -f .silver-bullet.json && jq -r '.recommended_tools.agentmemory.enabled_by_user // "null"' .silver-bullet.json
test -f .silver-bullet.json && jq -r '.recommended_tools.agentmemory.enforcement_suspended // false' .silver-bullet.json
```
**If `enabled_by_user` is `null`:** run the same AskQuestion consent flow as `/silver:init` §1.1b.
**If `enabled_by_user` is `true` AND `enforcement_suspended` is `true`:** retry install without re-asking:
1. `npm install -g @agentmemory/agentmemory`
2. Start server: `nohup agentmemory > ~/.agentmemory/server.log 2>&1 &`
3. Pre-index (Codex): `host plugin marketplace (see install guide) add rohitg00/agentmemory`; `Codex plugin add agentmemory@agentmemory`
4. Post-index MCP connect:
- **Claude Code:** `agentmemory connect (see install guide)`
- **Codex:** `agentmemory connect (see install guide) --with-hooks`
- **task host:** merge MCP block per `docs/AGENTMEMORY.md` (host MCP config)
5. Scaffold: `mkdir -p .agentmemory/memory .agentmemory/snapshots`
6. **gitleaks:** `command -v gitleaks || brew install gitleaks` (macOS); verify with `gitleaks version`. Required for bridge second-line secret scan — SB optimizer also installs via `sb-optimize-stack.sh --apply`.
On success, clear suspension (same jq pattern as Graphify). On failure, keep suspension.
**If `enabled_by_user` is `false`:** no action needed.
### Step 8c: RTK consent and install retry
After Step 8b (agentmemory), check `.silver-bullet.json` for RTK consent and suspension:
```bash
jq -r '.recommended_tools.rtk.enabled_by_user // "null"' .silver-bullet.json
jq -r '.recommended_tools.rtk.enforcement_suspended // false' .silver-bullet.json
```
**If `enabled_by_user` is `null`:** run the same consent flow as `/silver:init` §1.1e.
**If `enabled_by_user` is `true` AND `enforcement_suspended` is `true`:** retry install:
1. Install RTK CLI per `docs/RTK.md` (verify `rtk gain --help`)
2. Run host `rtk init` command from `platform_install_commands`
3. `bash scripts/optimize-rtk-context-mode.sh --host auto --project-root "$(pwd)"`
4. `bash scripts/enable-rtk-context-mode.sh --tool rtk`
On success, clear suspension. On failure, keep suspension.
**If `enabled_by_user` is `false`:** no action needed.
### Step 8d: Optimize Graphify + agentmemory stack
After Steps 8 (Graphify) and 8b (agentmemory), when either tool is opted in, re-apply the synergy optimizer (idempotent — safe on every update):
```bash
bash scripts/sb-optimize-stack.sh --apply
bash scripts/sb-optimize-stack.sh --verify
```
Runs on upgrade, version bump, or when retrying `enforcement_suspended` installs. Records `optimization.last_applied_at` / `optimization.score`. See `docs/STACK-OPTIMIZATION.md`.
### Step 8e: Context Mode
Check `.silver-bullet.json` for Context Mode consent and suspension:
```bash
jq -r '.recommended_tools.context_mode.enabled_by_user // "null"' .silver-bullet.json
jq -r '.recommended_tools.context_mode.enforcement_suspended // false' .silver-bullet.json
```
**If `enabled_by_user` is `null`:** run consent flow from `/silver:init` §1.1f (include ELv2 disclosure).
**If `enabled_by_user` is `true` AND `enforcement_suspended` is `true`:** retry:
1. Verify Node >= 22.5
2. `npm install -g context-mode` and/or Claude Code plugin steps per `docs/CONTEXT-MODE.md`
3. `bash scripts/optimize-rtk-context-mode.sh --host auto --project-root "$(pwd)"`
4. Re-scaffold instruction fragment (`templates/context-mode-hint.md.base`)
5. Remind user to restart agent
6. `bash scripts/enable-rtk-context-mode.sh --tool context_mode`
On success, clear suspension.
**If `enabled_by_user` is `false`:** no action needed.
### Step 8f: LeanCTX consent and install retry
After Step 8e (Context Mode), check `.silver-bullet.json` for LeanCTX consent and suspension:
```bash
jq -r '.recommended_tools.leanctx.enabled_by_user // "null"' .silver-bullet.json
jq -r '.recommended_tools.leanctx.enforcement_suspended // false' .silver-bullet.json
```
**If `enabled_by_user` is `null`:** run consent flow from `/silver:init` §1.1g / `references/recommended-tools-opt-in.md`.
**If `enabled_by_user` is `true` AND `enforcement_suspended` is `true`:** retry via reconciler (no re-ask):
```bash
bash scripts/reconcile-recommended-tools.sh --project-root "$(pwd)" --host "${SILVER_BULLET_RUNTIME:-cursor}" --mode apply --scope all --entry-point update --format text
bash scripts/optimize-five-tool-stack.sh --host "${SILVER_BULLET_RUNTIME:-cursor}" --project-root "$(pwd)"
```
On success, clear suspension (same jq pattern as Graphify). On failure, keep suspension.
**If `enabled_by_user` is `false`:** no action needed.
### Step 8g: Host snapshot reconciliation (after plugin update)
Refresh deployed global scripts, rules, hooks, and MCP merge from the updated plugin checkout:
```bash
bash scripts/install-cursor.sh --merge-hooks-only
bash scripts/install-global-toolstack.sh --project-root "$(pwd)"
```
Then verify (read-only):
```bash
bash scripts/reconcile-recommended-tools.sh --project-root "$(pwd)" --host "${SILVER_BULLET_RUNTIME:-cursor}" --mode verify --scope all --format text
```
Report `reload_required` honestly — plugin update does not prove MCP liveness in the current session.
### Step 9: Project scaffolding migration (opt-in)
After plugin install succeeds, compare the **project's** `.silver-bullet.json` `config_version` to `templates/silver-bullet.config.json.default`.
**If project version is older** (minor/patch behind template):
Display a migration summary (new fields since the user's version: `recommended_tools`, `hooks.evidence_schema`, `multi_agent`, `orchestrator_mode`, etc.).
Ask the user:
- **A) Migrate project scaffolding now** — run structural + instruction refresh
- **B) Skip (plugin only)** — warn that dogfood may stay on stale enforcement
**On A:**
1. Invoke **`/silver:migrate`** — workflow tracker, orchestrator parent mode, config defaults merge, task host rule scaffold.
2. Invoke **`/silver:init`** in **update mode** — refresh `silver-bullet.md` from template, re-register host hooks, conflict detection.
3. Bump `config_version` in `.silver-bullet.json` (preserve user customizations).
4. Run **`/silver:doctor`** automatically; surface every FAIL for inline fix.
**On B:** Warn that hooks, template parity, and orchestrator rules may not match the installed plugin until migration runs.
**Note:** Step 9 is the only path that touches project files during `/silver:update`. Steps 1–8 still update only the host plugin cache/registry.
Scanned 9/5/2026
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!