| name | skills-bulk-installer |
| description | Use when the user wants to set up a fresh machine with their archived skills, restore skills after wiping ~/.claude/skills/, or sync newly-added skills from claude_workspace/workflow_skills/ to ~/.claude/skills/ in one shot. Triggering signals — phrases like "install all my skills", "bulk install skills", "set up skills on this machine", "restore my skills", or pointing at a workflow_skills/ archive and asking to install everything. Do NOT trigger for installing a single specific skill (the user can just cp that one folder). |
skills-bulk-installer
One-shot installer for an entire workflow_skills/ archive. Walks both custom/ and third_party/ and lands every skill into ~/.claude/skills/, falling back to printed commands when an install requires a Claude Code slash command (marketplaces).
Why this exists
The archive at claude_workspace/workflow_skills/ is the source of truth: custom/ skills are checked in, third_party/ skills carry either a full copy or an INSTALL.md / README.md. Re-installing skill-by-skill across machines is tedious and error-prone — this skill scripts the whole loop.
When to use
- New machine / clean checkout — bring
~/.claude/skills/ up from zero
- After
~/.claude/ wipe or container rebuild
- After someone else added a new skill to
workflow_skills/ and the user wants to pull it in
If the user just wants to install one specific skill, don't use this — cp -r workflow_skills/custom/<name> ~/.claude/skills/ is faster.
How the installer classifies entries
| Source folder shape | Action |
|---|
custom/<name>/ | cp -r to ~/.claude/skills/<name>/ |
third_party/<name>/SKILL.md present | full copy (skill source unknown OR ships runtime assets) |
third_party/<name>/INSTALL.md or README.md with git clone … | run the git clone block in ~/.claude/skills/ |
third_party/<name>/INSTALL.md or README.md with /plugin marketplace add … | print the slash commands at the end — the user pastes them into Claude Code |
The installer never overwrites existing skill directories unless --force is passed, so re-running is safe.
Workflow
Step 1 — locate the archive
The user usually invokes from inside the project. Default lookup: walk up from the script (<archive>/installer/skills-bulk-installer/scripts/install.sh) so the archive root is auto-detected. Confirm with the user if ambiguous.
Step 2 — dry-run first
Always show the user what would happen before mutating their ~/.claude/skills/:
bash <archive>/installer/skills-bulk-installer/scripts/install.sh --dry-run
The dry-run lists every COPIED / SKIP / MANUAL / GIT line. Read it together with the user and confirm.
Step 3 — real run
bash <archive>/installer/skills-bulk-installer/scripts/install.sh
Add --force only if the user explicitly wants to overwrite existing skill folders. The script will prompt before executing any git clone block; answer y when the user OKs it.
Step 4 — finish marketplace installs by hand
The script prints a block at the end like:
--- ACTION REQUIRED: paste these into Claude Code chat ---
/plugin marketplace add thedotmack/superpowers
/plugin install superpowers@thedotmack
...
Show this block to the user and remind them: Claude Code slash commands can't be invoked by tools — the user must paste them into the chat input. After they finish, suggest they restart the session so the new plugin skills load.
Adding new skills to the archive
When the user asks "I just wrote a new skill, how do I make it part of the bulk install?":
- Custom skill →
cp -r ~/.claude/skills/<name> <archive>/custom/<name> and the next bulk install picks it up automatically.
- Third-party with reproducible install → create
<archive>/third_party/<name>/INSTALL.md (or README.md) containing the git clone or /plugin commands; the installer parses these line-by-line.
- Third-party with unknown source → drop the full directory under
third_party/<name>/ (the SKILL.md presence triggers full-copy mode).
Notes
- The script is intentionally bash-only and dependency-free so it works on a fresh box.
- It never deletes skills — only
--force overwrites, and even then it removes the destination first to keep cp semantics clean. Anything outside the install path is untouched.
- If a third-party
README.md mixes both git clone and /plugin instructions, both blocks fire (git runs, plugin lines print).