npx claudepluginhub cameronsjo/rules --plugin rulesWant just this skill?
Add to a custom plugin, then install with one command.
Install all 22 rules to ~/.claude/rules/workbench/. Self-destructs after running.
This skill is limited to using the following tools:
Install all 22 rules (6 universal + 16 language/tool) from this plugin to $HOME/.claude/rules/workbench/.
Steps
- Migrate — Detect and move old flat files from the previous prefix scheme:
OLD_DEST="$HOME/.claude/rules"
NEW_DEST="$HOME/.claude/rules/workbench"
mkdir -p "$NEW_DEST"
echo "=== MIGRATE ==="
for old in "$OLD_DEST"/rules-*.md; do
[ -f "$old" ] || continue
basename="${old##*/}"
stripped="${basename#rules-}"
if [ ! -f "$NEW_DEST/$stripped" ]; then
mv "$old" "$NEW_DEST/$stripped"
echo "MIGRATED $basename -> workbench/$stripped"
else
rm "$old"
echo "REMOVED $basename (already exists in workbench/)"
fi
done
- Hash compare — Compare plugin source against installed destination. Do NOT read any rule file contents yet.
DEST="$HOME/.claude/rules/workbench"
echo "=== UNIVERSAL ==="
for src in "${CLAUDE_PLUGIN_ROOT}"/rules/user/*.md; do
[ -f "$src" ] || continue
name="$(basename "$src")"
dest="$DEST/$name"
if [ ! -f "$dest" ]; then
echo "NEW $name"
elif [ "$(md5 -q "$src")" = "$(md5 -q "$dest")" ]; then
echo "UNCHANGED $name"
else
echo "UPDATED $name"
fi
done
echo "=== LANGUAGE/TOOL ==="
PLUGIN="${CLAUDE_PLUGIN_ROOT}/rules/project"
for src in "$PLUGIN"/languages/*.md "$PLUGIN"/*.md; do
[ -f "$src" ] || continue
name="$(basename "$src")"
dest="$DEST/$name"
if [ ! -f "$dest" ]; then
echo "NEW $name"
elif [ "$(md5 -q "$src")" = "$(md5 -q "$dest")" ]; then
echo "UNCHANGED $name"
else
echo "UPDATED $name"
fi
done
- Show summary — Format the manifest as a markdown table:
| File | Status |
|---|---|
engineering-standards.md | NEW / UNCHANGED / UPDATED |
If everything is UNCHANGED, report "All rules are up to date." and skip to step 6.
- Install — For each rule based on status:
-
NEW: Copy the source file to the destination:
cp "$src" "$DEST/$(basename "$src")" -
UPDATED: Read both the source (plugin) file and the destination (installed) file using the Read tool. Merge: incorporate plugin updates while preserving user customizations (added rules, modified wording, extra sections). Write the merged result to the destination using the Write tool.
-
UNCHANGED: Skip.
- Self-destruct — Delete this command from the plugin cache:
rm -f "$HOME"/.claude/plugins/cache/*/rules/*/commands/init-all.md
Tell the user: "The /rules:init-all command has been removed from cache. It will reappear when the rules plugin updates."
- Summary — Report counts: installed, updated, unchanged, migrated. Note that language/tool rules are path-scoped and only load when touching matching files. Remind user to restart Claude Code.
Important
- Source:
${CLAUDE_PLUGIN_ROOT}/rules/user/and${CLAUDE_PLUGIN_ROOT}/rules/project/— Destination:~/.claude/rules/workbench/ - No prefix — files keep their original basename
- Files outside
workbench/are user-managed and never touched - Language/tool rules keep their
paths:frontmatter — path-scoping works at~/.claude/rules/workbench/ - Self-destruct targets the CACHE copy, not the source repo