Selective ECC loader: pick one Everything Claude Code skill, agent, or hook and link/copy it into ~/.claude without installing the full ECC harness.
Scanned 9/3/2026
Install to Claude Code
npx -y skills add KevinZai/commander --skill ccc-ecc --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Ccc Ecc?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/kevinzai-ccc-ecc-commander)More formats (shields.io, HTML) on the badges page.
---
name: ccc-ecc
description: "Selective ECC loader: pick one Everything Claude Code skill, agent, or hook and link/copy it into ~/.claude without installing the full ECC harness."
allowed-tools:
- Read
- Bash
- AskUserQuestion
---
# /ccc-ecc — Selective ECC Loader
Load one specific **Everything Claude Code (ECC)** component into `~/.claude/` without copying the whole ECC harness.
ECC source lives at `vendor/everything-claude-code/`. This is a click-first picker: choose a skill, agent, or hook; then symlink or copy only that component.
## Safety model
- Prefer **symlink** so updates follow the pinned ECC vendor checkout.
- Offer **copy** for an editable local snapshot.
- Back up before replacing anything under `~/.claude/`.
- Never install ECC settings, commands, or the full harness.
## Steps
### 1. Locate ECC
```bash
git rev-parse --show-toplevel
test -d vendor/everything-claude-code && echo ok || echo missing
```
If missing, stop with:
> ECC vendor checkout not found at `vendor/everything-claude-code/`. Run `/ccc-upgrade` or initialize submodules first.
### 2. Ask what to do
```
question: "What ECC component do you want to load?"
header: "ECC"
multiSelect: false
options:
- label: "Load a skill"
- label: "Load an agent"
- label: "Load a hook"
- label: "List available ECC components"
```
### 3. Inventory candidates
```bash
ECC="vendor/everything-claude-code"
find "$ECC" \( -path '*/node_modules/*' -o -path '*/.git/*' -o -path '*/dist/*' -o -path '*/build/*' \) -prune -o \
\( -path '*/skills/*/SKILL.md' -o -path '*/agents/*.md' -o -path '*/hooks/*.js' -o -path '*/hooks/*.sh' \) -print
```
Classify `skills/<name>/SKILL.md` as skills, `agents/*.md` as agents, and `hooks/*.{js,sh}` as hooks. If the user chose "List available", render grouped markdown tables and stop.
### 4. Ask which component — two-level AUQ cascade, never a typed-name table
ECC ships 156+ skills — never dump them into one picker (max 4 options) and never fall back to "type the exact name" as a first resort; that reintroduces the numbered-list anti-pattern this plugin exists to avoid.
**Level 1 — category.** If the matched candidates (skills, agents, or hooks) number more than 4:
- If they group meaningfully by directory prefix (e.g. `skills/testing/*`, `skills/security/*`), present up to 3 category buckets + "More categories…" as an `AskUserQuestion` (≤4 options).
- Otherwise (a flat namespace), bucket alphabetically into roughly-equal groups computed from the actual candidate count (e.g. ~4 buckets sized `ceil(N/4)` each) and present those buckets as the picker — do not hardcode fixed letter ranges like "A-F"; they skew badly on a real name distribution.
```
question: "Which category?"
header: "ECC · <skill|agent|hook>"
options:
- label: "<category or letter-range bucket>"
description: "<N> components"
```
**Level 2 — component.** Within the chosen bucket:
- If ≤4 remain, present them directly as an `AskUserQuestion` (the original step-4 shape below).
- If still >4, repeat Level 1's bucketing recursively on that subset (cascade again, ≤4 options each time) until a bucket has ≤4 candidates.
```
question: "Pick one ECC <skill|agent|hook> to load."
header: "Pick"
options:
- label: "<component-name>"
description: "<relative path under vendor/everything-claude-code>"
```
**Typed-name fallback — last resort only.** Only if cascading twice still leaves a bucket with more than 16 candidates (an extreme skew the alphabetical split can't converge on quickly), ask the user for a substring to filter by, then present the filtered matches as an `AskUserQuestion` (≤4, cascading again if the filter still returns too many). Never ask for the exact literal name or path as the first move.
### 5. Ask symlink or copy
```
question: "Install this ECC component as a symlink or a copy?"
header: "Mode"
options:
- label: "Symlink (recommended)"
- label: "Copy"
- label: "Cancel"
```
### 6. Map destination
- Skill `skills/<name>/SKILL.md` → `~/.claude/skills/<name>/SKILL.md`
- Agent `<name>.md` → `~/.claude/agents/<name>.md`
- Hook `<name>.js|sh` → `~/.claude/hooks/<name>.js|sh`
```bash
mkdir -p "$DEST_DIR"
```
If the destination exists, ask: "Keep existing" or "Replace with backup". On backup, move the existing target to `.backup-YYYYMMDD-HHMMSS` before installing.
### 7. Install + verify
```bash
# Symlink mode
ln -s "$ABS_SOURCE" "$DEST"
# Copy mode
cp -R "$ABS_SOURCE" "$DEST"
# Verify
test -e "$DEST" && ls -l "$DEST"
```
Report the source, destination, mode, and whether a backup was made.
## Anti-patterns — DO NOT
- Do not copy the full ECC harness, command tree, or settings into `~/.claude/`.
- Do not overwrite existing local skills, agents, or hooks without a backup and confirmation.
- Do not edit files under `vendor/everything-claude-code/`.
- Do not install unknown binary files or dependency folders.
- Do not add ECC hooks to settings automatically; install the file and tell the user where it landed.
---
> ⚙️ **Fable contract:** plan before build · verifier ≠ worker · prove before alarm · loops need gates · leave durable state — `rules/fable-method.md`
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!