From onrush
Pull the latest OnRush plugins and refresh their cached copies in this project
How this skill is triggered — by the user, by Claude, or both
Slash command
/onrush:onrush-updateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are updating the OnRush plugins for the **current project**. This pulls the
You are updating the OnRush plugins for the current project. This pulls the
newest plugin code from the marketplace checkout, then re-vendors every plugin already
installed here (the copies under .claude/onrush/<plugin>/) so the latest hooks and
rules take effect. It does not add or remove plugins — that stays /onrush-setup.
The source of truth is the marketplace root Claude Code tracks, not
${CLAUDE_PLUGIN_ROOT} (which points at a per-version cache copy of a single plugin
and does not contain the sibling plugins). The helper resolves that root for you and
does the byte-level re-vendoring; you orchestrate the git pull and the report.
If python3 is unavailable, use python for every helper call below.
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/onrush.py" marketplace-root
This prints the absolute path of the marketplace checkout (a local-path marketplace's
own repo, or the git clone for a github marketplace) — call it ROOT. An empty line
means the marketplace isn't registered; skip Step 2 and run Step 3 without
--source-root (the helper falls back to its own location).
Check whether ROOT is a git checkout:
git -C "ROOT" rev-parse --is-inside-work-tree
If it is a git checkout, capture the current commit, pull fast-forward only, and capture the new commit:
git -C "ROOT" rev-parse --short HEAD
git -C "ROOT" pull --ff-only
git -C "ROOT" rev-parse --short HEAD
If it is not a git checkout, or the pull fails (no network, non-fast-forward,
detached HEAD, uncommitted local edits), do not abort. Note it and continue — Step 3
still re-vendors from whatever code is on disk at ROOT (which includes any
uncommitted local edits, so a locally-edited plugin still gets picked up).
Run the helper from the project root, passing the resolved root:
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/onrush.py" update --project-root . --source-root "ROOT"
(Omit --source-root only if Step 1 returned an empty path.)
It returns a JSON array, one entry per installed plugin. Each entry is either
{ "plugin", "previousVersion", "newVersion", "changed", "driftHealed": [...], "ok": true }
or, if its source could not be read, { "plugin", "ok": false, "error" }.
An empty array [] means no OnRush plugins are installed in this project.
Render the result like a clean upgrade summary:
✓ Pulled marketplace (abc123 → def456)✓ Marketplace already up to date⚠ Skipped pull: not a git checkout — refreshed from local copy⚠ Pull failed: <reason> — refreshed from local copy✓ <plugin> v<previousVersion> → v<newVersion> refreshed (when changed)✓ <plugin> v<newVersion> already latest (when not changed and no drift)🔧 <plugin> drift healed (<N> item(s)) where N = length of driftHealed
(combine with the version line when both apply)✗ <plugin> failed: <error> (when ok is false)/onrush-setup
to add some."Tell the user what is live now versus what needs a reload:
.claude/onrush/ are re-read on the next hook fire (next
Stop, next SessionStart), so updated script/rule content takes effect this
session with no restart./onrush-* and /ors-* skills themselves load from Claude Code's plugin
cache. To pick up changes to them without restarting, run /plugin marketplace update onrush-plugins then /reload-plugins.npx claudepluginhub metahumanreal/onrush-plugins --plugin onrushCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.