install-scripts · git:20260813.fead97d · 2026-08-13 · sha256 53018af4d83c6cab
install-scripts git:20260813.fead97dA
Immutable. This exact content is served forever at /api/v1/blob/53018af4d83c6cab.
---
name: install-scripts
description: "Install plugin runner scripts into project .claude/scripts/ for persistent use without plugin loaded"
allowed-tools: Read, Glob, Write, AskUserQuestion, Bash(mkdir:*), Bash(diff:*), Bash(git:*), Bash(ls:*), Bash(chmod:*), Bash(cp:*), Bash(node:*)
---
# Install Scripts
## Trigger
- Keywords: install scripts, setup scripts, copy scripts, install-scripts
## When NOT to Use
- Installing rules (use `/install-rules`)
- Installing hooks (use `/install-hooks`)
- Full project setup (use `/project-setup`)
## Workflow
```
Phase 0: Resolve mode; obsolete-set migration (first for non-list invocations; --dry-run forwarded)
Phase 1: Locate plugin scripts dir
Phase 2: Enumerate scripts (core + skill scripts)
Phase 3: Determine install set (--all, --skill, specific names)
Phase 4: Copy scripts + dependencies to .claude/scripts/
Phase 4.5: Update manifest
Phase 5: Output report
```
### Phase 0: Obsolete-Set Migration
Same shared migration `/install-hooks` runs, invoked here too so **neither entry point can
reproduce the unsafe order by hand** (hook-lightweighting § 3.6). **Resolve the invocation mode
first**: a listing invocation skips this phase (read-only), and `--dry-run` is forwarded so the
migration also only reports:
```bash
# --dry-run → append --dry-run to the command below; list-only invocations skip Phase 0
node "${CLAUDE_PLUGIN_ROOT}/scripts/migrate-hook-lightweighting.js" --repo "$(git rev-parse --show-toplevel)"
```
It deregisters obsolete settings entries first and deletes the retired enforcement-layer files
only after the settings writes succeed. On exit 1, stop the install and surface the report.
Include the migration's report lines in Phase 5's output.
### Arguments
```
$ARGUMENTS
```
| Argument | Description |
|----------|-------------|
| `--all` | Install all available core scripts |
| `--list` | List available core scripts without installing |
| `--dry-run` | Show what would be installed, no changes |
| `--force` | Overwrite existing scripts with different content |
| `--skill <name>` | Install all scripts from the specified skill |
| `--skill-all` | Install scripts from all skills |
| `--skill-list` | List all available skill scripts |
| `script-names...` | Specific scripts to install |
### Script Types
| Type | Source | Target |
|------|--------|--------|
| Core scripts | `scripts/*.js`, `scripts/*.sh` | `.claude/scripts/` |
| Core lib | `scripts/lib/*.js` | `.claude/scripts/lib/` |
| Skill scripts | `skills/<name>/scripts/*` | `.claude/scripts/` |
### Conflict Handling
| Scenario | Action |
|----------|--------|
| Target missing | Copy |
| Target identical | Skip (up to date) |
| Target differs | Skip + warn (use --force to overwrite) |
## Output
```markdown
## Install Scripts Report
| Script | Type | Status |
|--------|------|--------|
| precommit-runner.js | core | installed |
| lib/utils.js | core-lib | up to date |
| git-profile.sh | skill | installed |
Installed: N | Skipped: M | Conflicts: K
```