eagle-skills 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,240 @@
1
+ # Eagle Skills
2
+
3
+ Custom skills for [Claude Code](https://docs.anthropic.com/en/docs/claude-code), Anthropic's agentic coding tool. Each skill extends Claude with domain-specific expertise, structured workflows, and production-quality deliverables.
4
+
5
+ This repo contains three skills that work together as a complete product evaluation pipeline:
6
+
7
+ 1. **Eagle UX Review** — looks at your screens and tells you what's broken and why
8
+ 2. **Eagle Product Diagnostics** — takes your real data and proves whether those problems actually cost you users and revenue
9
+ 3. **Eagle Ad Review** — audits your ad creatives against marketing strategy, platform specs, and creative effectiveness research
10
+
11
+ Use them independently or combine them: review your product, validate with data, then audit the ads that drive users to it.
12
+
13
+ ---
14
+
15
+ ## Table of Contents
16
+
17
+ - [Eagle UX Review](#eagle-ux-review)
18
+ - [Eagle Product Diagnostics](#eagle-product-diagnostics)
19
+ - [Eagle Ad Review](#eagle-ad-review)
20
+ - [The Three-Skill Pipeline](#the-three-skill-pipeline)
21
+ - [Installation](#installation)
22
+ - [Prerequisites](#prerequisites)
23
+ - [Usage](#usage)
24
+ - [Built With](#built-with)
25
+ - [Contributing](#contributing)
26
+ - [License](#license)
27
+
28
+ ---
29
+
30
+ # Eagle UX Review
31
+
32
+ **Expert-level UX audits grounded in 65+ UX laws and principles across 12 categories.**
33
+
34
+ Most UX feedback is vague: "the onboarding feels clunky," "the colors seem off," "maybe simplify it?" This skill produces the opposite — structured, evidence-based findings where every issue is tied to a specific UX law, a specific screen, a specific element, and a specific impact on the metric you care about most.
35
+
36
+ Point Claude at a screen recording, a set of screenshots, or a PRD, and receive a complete HTML report: severity-rated findings with embedded evidence, visual before/after design mockups built in CSS, a priority matrix ranked by business impact, and three-level recommendations (quick fix, proper fix, ideal state) for every issue found.
37
+
38
+ The review is deliberately brutal. Its value comes from surfacing problems the team may not want to hear — not from validating existing decisions.
39
+
40
+ **What you provide:** North star metric, target user profile, 2-3 reference apps, app identity — plus optional PRD, personas, analytics data, and competitive screenshots.
41
+
42
+ **What you get:** A self-contained HTML report with central thesis, severity-rated findings (each with evidence screenshots, UX law citations, north star impact, and fix recommendations), priority matrix, visual design mockups, time-to-first-value analysis, and UX laws summary.
43
+
44
+ **How it works:** 5-phase process — context gathering, frame extraction (1fps from video), systematic analysis against 65+ UX laws (6 per-screen checks + 6 per-flow checks), HTML report generation, and quality verification.
45
+
46
+ [Read the full methodology →](docs/ux-review-methodology.md)
47
+
48
+ ---
49
+
50
+ # Eagle Product Diagnostics
51
+
52
+ **Data-validated product analysis using three-layer triangulation: design intent, instrumented behavior, and outcome truth.**
53
+
54
+ A UX review tells you: "This screen probably causes drop-off because the primary action is buried." But *probably* isn't proof. Product Diagnostics takes your actual data — analytics events and database outcomes — and validates each UX finding against reality. The result is not "we think this is broken" but "this IS broken, here's the funnel that proves it, and here's how much it costs."
55
+
56
+ **What you provide:** Goal definitions (success metrics per feature), event taxonomy (analytics events mapped to screens + funnels), and database outcomes (actual vs. target metrics). Optionally, a UX review report for per-finding validation.
57
+
58
+ **What you get:** An HTML report with goal scorecard (PASS/FAIL/PARTIAL per layer), funnel visualizations with drop-off analysis, per-feature three-layer diagnosis, disagreement analysis, business impact estimates, and prioritized actions.
59
+
60
+ **How it works:** The skill triangulates three independent evidence sources — design intent (UX review predictions), instrumented behavior (analytics events), and outcome truth (database metrics). Eight verdict patterns diagnose whether issues are UX problems, measurement gaps, value proposition failures, or something else entirely.
61
+
62
+ [Read the full methodology →](docs/product-diagnostics-methodology.md)
63
+
64
+ ---
65
+
66
+ # Eagle Ad Review
67
+
68
+ **Strategy-first advertising creative review grounded in Meta ABCD, Kantar, System1, and Nielsen frameworks. Works across any medium.**
69
+
70
+ Most ad feedback is subjective: "I don't like the colors," "make the logo bigger," "this doesn't feel right." This skill produces the opposite — a structured evaluation where every creative is scored against the marketing strategy it's supposed to serve, the medium it runs in, and the research on what actually drives ad performance.
71
+
72
+ Point Claude at a folder of ad files — images, videos, audio, PDFs, scripts — across **any advertising medium**: social, display, video, radio, podcast, billboard, transit, print, TV, or experiential. Provide your campaign context and receive a complete HTML report.
73
+
74
+ The review evaluates creatives against their **marketing job**, not just visual aesthetics. An ugly ad that stops the scroll and converts is better than a beautiful ad nobody notices. A simple billboard that communicates in 3 seconds beats an elaborate one nobody can read at 60mph.
75
+
76
+ **What you provide:** Campaign strategy (objective, funnel stage, audience, medium/channels, KPI), brand context (value proposition, positioning, competitive landscape), and the creative files themselves.
77
+
78
+ **What you get:** An HTML report with 10-dimension scoring (weighted by campaign type and medium), per-market breakdowns, best/worst performer galleries, cross-cutting findings with evidence, platform compliance audit, creative system assessment, and a creative brief for the next production round.
79
+
80
+ **How it works:** Strategy-first 4-step process — gather marketing context, catalog and process all creative files, three-level analysis (strategic fit → execution quality → creative system health), then score and compile the report. Weights adjust dynamically by campaign type (awareness, DR, brand, multi-market) and medium (digital, radio, OOH, print, TV).
81
+
82
+ [Read the full methodology →](docs/ad-review-methodology.md)
83
+
84
+ ---
85
+
86
+ ## The Three-Skill Pipeline
87
+
88
+ Each skill is powerful alone. Together, they cover the full product lifecycle: the experience inside the product, the data proving what works, and the ads driving users to it.
89
+
90
+ ```
91
+ Step 1: UX Review Step 2: Product Diagnostics Step 3: Ad Review
92
+ ────────────────── ───────────────────────────── ─────────────────────
93
+ Input: Screen recording Input: UX report + events + DB Input: Ad folder + strategy
94
+ Output: "Here's what's Output: "Here's proof it IS Output: "Here's what's wrong
95
+ broken in the UX" broken, and the cost" with your ads"
96
+
97
+ Predictive Validated Acquisition
98
+ "This will hurt retention" "This DID hurt retention by 14pp" "Ads aren't doing their job"
99
+ ```
100
+
101
+ **Why all three matter:**
102
+ - UX Review alone gives you well-reasoned predictions without proof.
103
+ - Product Diagnostics alone gives you data without actionable design recommendations.
104
+ - Ad Review alone tells you what's wrong with creatives without knowing if the product delivers.
105
+ - Together, you validate the entire user journey: ads bring users in, the product retains them, the data proves it works.
106
+
107
+ ---
108
+
109
+ ## Installation
110
+
111
+ ### Quick install (recommended)
112
+
113
+ Interactive installer — choose which skills to install:
114
+
115
+ ```bash
116
+ npx eagle-skills install
117
+ ```
118
+
119
+ Or without npm:
120
+
121
+ ```bash
122
+ curl -fsSL https://raw.githubusercontent.com/eagleisbatman/eagle-skills/main/install.sh | bash
123
+ ```
124
+
125
+ The installer clones the repo to `~/.eagle-skills` and symlinks your selected skills into `~/.claude/skills/`. Symlinked skills update in place when you run `npx eagle-skills update`.
126
+
127
+ ### Managing your installation
128
+
129
+ ```bash
130
+ npx eagle-skills update # Pull latest changes
131
+ npx eagle-skills status # Show installed skills, check for updates
132
+ npx eagle-skills uninstall # Remove skills and optionally the repo
133
+ ```
134
+
135
+ ### Manual install
136
+
137
+ If you prefer to manage it yourself:
138
+
139
+ ```bash
140
+ git clone https://github.com/eagleisbatman/eagle-skills.git
141
+ cd eagle-skills
142
+ ln -sf "$(pwd)/eagle-ux-review" ~/.claude/skills/eagle-ux-review
143
+ ln -sf "$(pwd)/eagle-product-diagnostics" ~/.claude/skills/eagle-product-diagnostics
144
+ ln -sf "$(pwd)/eagle-ad-review" ~/.claude/skills/eagle-ad-review
145
+ ```
146
+
147
+ Update with `git pull`. Symlinks mean installed skills update automatically.
148
+
149
+ ---
150
+
151
+ ## Prerequisites
152
+
153
+ - [Claude Code](https://docs.anthropic.com/en/docs/claude-code) installed and configured
154
+ - `ffmpeg` and `ffprobe` — required for video input in UX Review and Ad Review
155
+ ```bash
156
+ # macOS
157
+ brew install ffmpeg
158
+
159
+ # Ubuntu/Debian
160
+ sudo apt install ffmpeg
161
+ ```
162
+ - `imagemagick` — optional, used by Ad Review's catalog script for thumbnail generation and image dimension detection
163
+ ```bash
164
+ # macOS
165
+ brew install imagemagick
166
+
167
+ # Ubuntu/Debian
168
+ sudo apt install imagemagick
169
+ ```
170
+
171
+ ---
172
+
173
+ ## Usage
174
+
175
+ Trigger skills with natural language in Claude Code:
176
+
177
+ **UX Review:**
178
+ ```
179
+ ux review this screen recording
180
+ ```
181
+ ```
182
+ UX audit — I'll provide a PRD and video walkthrough
183
+ ```
184
+
185
+ **Product Diagnostics:**
186
+ ```
187
+ validate these UX findings against our Firebase events
188
+ ```
189
+ ```
190
+ why isn't our retention metric moving? here's the event data and DB export
191
+ ```
192
+
193
+ **Ad Review:**
194
+ ```
195
+ review these ad creatives — here's the folder
196
+ ```
197
+ ```
198
+ critique our radio spots and billboard designs
199
+ ```
200
+
201
+ Skills activate automatically when Claude detects matching intent.
202
+
203
+ ---
204
+
205
+ ## Built With
206
+
207
+ - **[Claude Code Skills](https://docs.anthropic.com/en/docs/claude-code)** — Anthropic's skill system for extending Claude with domain expertise
208
+ - **ffmpeg** — video frame extraction at configurable intervals
209
+ - **65+ UX laws** curated from established HCI research: Medhi et al. (2011), Nielsen (1994), Gestalt psychology, Fitts (1954), GSMA Mobile for Development, and more
210
+ - **Three-layer triangulation framework** combining UX analysis, behavioral analytics, and outcome data
211
+ - **Ad creative effectiveness research** from Meta ABCD, Kantar (200K+ ad database), System1, Nielsen, IPA Databank (1,400+ case studies)
212
+ - **Platform-specific ad specs** for Meta, Google, TikTok, LinkedIn, X, and Pinterest
213
+
214
+ ---
215
+
216
+ ## Contributing
217
+
218
+ Contributions are welcome. Areas where help is especially valuable:
219
+
220
+ - **New UX law categories** — additional principles with audit checklists
221
+ - **Analytics platform integrations** — better export guides for niche platforms
222
+ - **Report template improvements** — accessibility, print styles, dark mode
223
+ - **New skills** — other review types (accessibility audit, content strategy review, competitor teardown) following the same pattern
224
+ - **Ad platform updates** — specs change frequently; keep ad-platforms.md current
225
+ - **Language/localization** — report templates and UX law references in other languages
226
+ - **Real-world case studies** — anonymized examples showing the pipeline in action
227
+
228
+ To contribute:
229
+
230
+ 1. Fork this repository
231
+ 2. Create a feature branch (`git checkout -b feature/your-feature`)
232
+ 3. Make your changes
233
+ 4. Test by installing the skill locally and running a review
234
+ 5. Submit a pull request with a clear description of what changed and why
235
+
236
+ ---
237
+
238
+ ## License
239
+
240
+ MIT
@@ -0,0 +1,361 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # ─────────────────────────────────────────────────────────────
5
+ # Eagle Skills — CLI installer, updater, and manager
6
+ # https://github.com/eagleisbatman/eagle-skills
7
+ # ─────────────────────────────────────────────────────────────
8
+
9
+ VERSION="1.0.0"
10
+ REPO_URL="https://github.com/eagleisbatman/eagle-skills.git"
11
+ INSTALL_DIR="${EAGLE_SKILLS_DIR:-$HOME/.eagle-skills}"
12
+ SKILLS_DIR="$HOME/.claude/skills"
13
+
14
+ # Available skills (directory name → display name)
15
+ declare -a SKILL_DIRS=("eagle-ux-review" "eagle-product-diagnostics" "eagle-ad-review")
16
+ declare -a SKILL_NAMES=("Eagle UX Review" "Eagle Product Diagnostics" "Eagle Ad Review")
17
+ declare -a SKILL_DESCS=(
18
+ "Expert-level UX audits grounded in 65+ UX laws"
19
+ "Three-layer data validation: design intent + behavior + outcomes"
20
+ "Strategy-first ad creative review across any medium"
21
+ )
22
+
23
+ # ─── Colors ──────────────────────────────────────────────────
24
+ RED='\033[0;31m'
25
+ GREEN='\033[0;32m'
26
+ YELLOW='\033[0;33m'
27
+ BLUE='\033[0;34m'
28
+ MAGENTA='\033[0;35m'
29
+ CYAN='\033[0;36m'
30
+ BOLD='\033[1m'
31
+ DIM='\033[2m'
32
+ RESET='\033[0m'
33
+
34
+ # ─── Helpers ─────────────────────────────────────────────────
35
+ info() { echo -e "${BLUE}info${RESET} $1"; }
36
+ ok() { echo -e "${GREEN} ok${RESET} $1"; }
37
+ warn() { echo -e "${YELLOW}warn${RESET} $1"; }
38
+ err() { echo -e "${RED} err${RESET} $1"; }
39
+ header() { echo -e "\n${BOLD}${MAGENTA}$1${RESET}\n"; }
40
+
41
+ check_git() {
42
+ if ! command -v git &>/dev/null; then
43
+ err "git is required but not installed."
44
+ exit 1
45
+ fi
46
+ }
47
+
48
+ check_claude_code() {
49
+ if [ ! -d "$HOME/.claude" ]; then
50
+ warn "~/.claude directory not found. Is Claude Code installed?"
51
+ echo -e " ${DIM}Install: https://docs.anthropic.com/en/docs/claude-code${RESET}"
52
+ read -rp " Continue anyway? [y/N] " answer
53
+ [[ "$answer" =~ ^[Yy]$ ]] || exit 0
54
+ fi
55
+ }
56
+
57
+ ensure_skills_dir() {
58
+ mkdir -p "$SKILLS_DIR"
59
+ }
60
+
61
+ # ─── Skill selection menu ────────────────────────────────────
62
+ select_skills() {
63
+ local -a selected=()
64
+
65
+ header "Eagle Skills"
66
+ echo -e " ${DIM}Custom skills for Claude Code${RESET}"
67
+ echo ""
68
+
69
+ echo -e " ${BOLD}Available skills:${RESET}"
70
+ echo ""
71
+ for i in "${!SKILL_DIRS[@]}"; do
72
+ local num=$((i + 1))
73
+ echo -e " ${CYAN}${num}${RESET} ${BOLD}${SKILL_NAMES[$i]}${RESET}"
74
+ echo -e " ${DIM}${SKILL_DESCS[$i]}${RESET}"
75
+ echo ""
76
+ done
77
+
78
+ echo -e " ${CYAN}a${RESET} ${BOLD}All skills${RESET}"
79
+ echo ""
80
+
81
+ read -rp " Select skills to install (e.g. 1,3 or a for all): " choice
82
+
83
+ if [[ "$choice" =~ ^[Aa]$ ]]; then
84
+ selected=("${SKILL_DIRS[@]}")
85
+ else
86
+ IFS=',' read -ra nums <<< "$choice"
87
+ for num in "${nums[@]}"; do
88
+ num=$(echo "$num" | tr -d ' ')
89
+ if [[ "$num" =~ ^[0-9]+$ ]] && [ "$num" -ge 1 ] && [ "$num" -le "${#SKILL_DIRS[@]}" ]; then
90
+ selected+=("${SKILL_DIRS[$((num - 1))]}")
91
+ else
92
+ warn "Skipping invalid selection: $num"
93
+ fi
94
+ done
95
+ fi
96
+
97
+ if [ ${#selected[@]} -eq 0 ]; then
98
+ err "No skills selected."
99
+ exit 1
100
+ fi
101
+
102
+ SELECTED_SKILLS=("${selected[@]}")
103
+ }
104
+
105
+ # ─── Commands ────────────────────────────────────────────────
106
+
107
+ cmd_install() {
108
+ check_git
109
+ check_claude_code
110
+ ensure_skills_dir
111
+
112
+ select_skills
113
+
114
+ echo ""
115
+
116
+ # Clone or update the repo
117
+ if [ -d "$INSTALL_DIR/.git" ]; then
118
+ info "Updating existing clone at $INSTALL_DIR"
119
+ git -C "$INSTALL_DIR" pull --quiet
120
+ ok "Repository updated"
121
+ else
122
+ info "Cloning eagle-skills to $INSTALL_DIR"
123
+ git clone --quiet "$REPO_URL" "$INSTALL_DIR"
124
+ ok "Repository cloned"
125
+ fi
126
+
127
+ # Symlink selected skills
128
+ local count=0
129
+ for skill in "${SELECTED_SKILLS[@]}"; do
130
+ local src="$INSTALL_DIR/$skill"
131
+ local dst="$SKILLS_DIR/$skill"
132
+
133
+ if [ ! -d "$src" ]; then
134
+ warn "Skill directory not found: $src (skipping)"
135
+ continue
136
+ fi
137
+
138
+ # Remove existing (symlink or directory)
139
+ if [ -L "$dst" ]; then
140
+ rm "$dst"
141
+ elif [ -d "$dst" ]; then
142
+ warn "$dst exists and is not a symlink. Overwrite? [y/N]"
143
+ read -rp " " answer
144
+ if [[ "$answer" =~ ^[Yy]$ ]]; then
145
+ rm -rf "$dst"
146
+ else
147
+ warn "Skipping $skill"
148
+ continue
149
+ fi
150
+ fi
151
+
152
+ ln -sf "$src" "$dst"
153
+ ok "Installed ${BOLD}$(skill_display_name "$skill")${RESET}"
154
+ count=$((count + 1))
155
+ done
156
+
157
+ echo ""
158
+ if [ "$count" -gt 0 ]; then
159
+ echo -e " ${GREEN}${BOLD}$count skill(s) installed.${RESET}"
160
+ echo -e " ${DIM}Skills are symlinked — run ${RESET}eagle-skills update${DIM} to get the latest.${RESET}"
161
+ else
162
+ warn "No skills were installed."
163
+ fi
164
+ echo ""
165
+ }
166
+
167
+ cmd_update() {
168
+ if [ ! -d "$INSTALL_DIR/.git" ]; then
169
+ err "Eagle Skills not found at $INSTALL_DIR"
170
+ echo -e " ${DIM}Run ${RESET}eagle-skills install${DIM} first.${RESET}"
171
+ exit 1
172
+ fi
173
+
174
+ header "Updating Eagle Skills"
175
+
176
+ local before
177
+ before=$(git -C "$INSTALL_DIR" rev-parse HEAD)
178
+ git -C "$INSTALL_DIR" pull --quiet
179
+ local after
180
+ after=$(git -C "$INSTALL_DIR" rev-parse HEAD)
181
+
182
+ if [ "$before" = "$after" ]; then
183
+ ok "Already up to date."
184
+ else
185
+ local changes
186
+ changes=$(git -C "$INSTALL_DIR" log --oneline "$before..$after" | wc -l | tr -d ' ')
187
+ ok "Updated ($changes new commit(s))"
188
+ echo ""
189
+ echo -e " ${DIM}Recent changes:${RESET}"
190
+ git -C "$INSTALL_DIR" log --oneline "$before..$after" | head -10 | while read -r line; do
191
+ echo -e " ${DIM}$line${RESET}"
192
+ done
193
+ fi
194
+
195
+ # Verify symlinks still work
196
+ echo ""
197
+ local broken=0
198
+ for skill in "${SKILL_DIRS[@]}"; do
199
+ local dst="$SKILLS_DIR/$skill"
200
+ if [ -L "$dst" ]; then
201
+ if [ -d "$dst" ]; then
202
+ ok "$skill"
203
+ else
204
+ err "$skill — broken symlink"
205
+ broken=$((broken + 1))
206
+ fi
207
+ fi
208
+ done
209
+
210
+ if [ "$broken" -gt 0 ]; then
211
+ warn "$broken broken symlink(s). Run ${RESET}eagle-skills install${DIM} to fix.${RESET}"
212
+ fi
213
+ echo ""
214
+ }
215
+
216
+ cmd_status() {
217
+ header "Eagle Skills — Status"
218
+
219
+ # Check install directory
220
+ if [ -d "$INSTALL_DIR/.git" ]; then
221
+ local commit
222
+ commit=$(git -C "$INSTALL_DIR" log --oneline -1)
223
+ ok "Repo: $INSTALL_DIR"
224
+ echo -e " ${DIM}$commit${RESET}"
225
+
226
+ # Check for updates
227
+ git -C "$INSTALL_DIR" fetch --quiet 2>/dev/null || true
228
+ local local_rev remote_rev
229
+ local_rev=$(git -C "$INSTALL_DIR" rev-parse HEAD)
230
+ remote_rev=$(git -C "$INSTALL_DIR" rev-parse '@{u}' 2>/dev/null || echo "$local_rev")
231
+ if [ "$local_rev" != "$remote_rev" ]; then
232
+ local behind
233
+ behind=$(git -C "$INSTALL_DIR" rev-list --count HEAD..'@{u}' 2>/dev/null || echo "?")
234
+ warn "Update available ($behind commit(s) behind)"
235
+ fi
236
+ else
237
+ warn "Not installed. Run: eagle-skills install"
238
+ return
239
+ fi
240
+
241
+ echo ""
242
+
243
+ # Check each skill
244
+ echo -e " ${BOLD}Installed skills:${RESET}"
245
+ echo ""
246
+ local installed=0
247
+ for i in "${!SKILL_DIRS[@]}"; do
248
+ local skill="${SKILL_DIRS[$i]}"
249
+ local dst="$SKILLS_DIR/$skill"
250
+ if [ -L "$dst" ] && [ -d "$dst" ]; then
251
+ echo -e " ${GREEN}*${RESET} ${BOLD}${SKILL_NAMES[$i]}${RESET}"
252
+ echo -e " ${DIM}$dst -> $(readlink "$dst")${RESET}"
253
+ installed=$((installed + 1))
254
+ elif [ -L "$dst" ]; then
255
+ echo -e " ${RED}!${RESET} ${BOLD}${SKILL_NAMES[$i]}${RESET} ${RED}(broken symlink)${RESET}"
256
+ elif [ -d "$dst" ]; then
257
+ echo -e " ${YELLOW}~${RESET} ${BOLD}${SKILL_NAMES[$i]}${RESET} ${YELLOW}(copied, not symlinked)${RESET}"
258
+ installed=$((installed + 1))
259
+ else
260
+ echo -e " ${DIM}-${RESET} ${DIM}${SKILL_NAMES[$i]}${RESET} ${DIM}(not installed)${RESET}"
261
+ fi
262
+ done
263
+ echo ""
264
+ echo -e " ${DIM}$installed of ${#SKILL_DIRS[@]} skills installed${RESET}"
265
+ echo ""
266
+ }
267
+
268
+ cmd_uninstall() {
269
+ header "Uninstall Eagle Skills"
270
+
271
+ local removed=0
272
+
273
+ for i in "${!SKILL_DIRS[@]}"; do
274
+ local skill="${SKILL_DIRS[$i]}"
275
+ local dst="$SKILLS_DIR/$skill"
276
+ if [ -L "$dst" ]; then
277
+ rm "$dst"
278
+ ok "Removed ${SKILL_NAMES[$i]}"
279
+ removed=$((removed + 1))
280
+ elif [ -d "$dst" ]; then
281
+ read -rp " Remove ${SKILL_NAMES[$i]} (not a symlink — will delete)? [y/N] " answer
282
+ if [[ "$answer" =~ ^[Yy]$ ]]; then
283
+ rm -rf "$dst"
284
+ ok "Removed ${SKILL_NAMES[$i]}"
285
+ removed=$((removed + 1))
286
+ fi
287
+ fi
288
+ done
289
+
290
+ if [ "$removed" -eq 0 ]; then
291
+ info "No skills were installed."
292
+ else
293
+ ok "$removed skill(s) removed."
294
+ fi
295
+
296
+ # Optionally remove the clone
297
+ if [ -d "$INSTALL_DIR" ]; then
298
+ echo ""
299
+ read -rp " Also remove the cloned repo at $INSTALL_DIR? [y/N] " answer
300
+ if [[ "$answer" =~ ^[Yy]$ ]]; then
301
+ rm -rf "$INSTALL_DIR"
302
+ ok "Repo removed."
303
+ fi
304
+ fi
305
+ echo ""
306
+ }
307
+
308
+ skill_display_name() {
309
+ local dir="$1"
310
+ for i in "${!SKILL_DIRS[@]}"; do
311
+ if [ "${SKILL_DIRS[$i]}" = "$dir" ]; then
312
+ echo "${SKILL_NAMES[$i]}"
313
+ return
314
+ fi
315
+ done
316
+ echo "$dir"
317
+ }
318
+
319
+ cmd_help() {
320
+ echo ""
321
+ echo -e "${BOLD}Eagle Skills${RESET} v${VERSION}"
322
+ echo -e "${DIM}Custom skills for Claude Code${RESET}"
323
+ echo ""
324
+ echo -e "${BOLD}Usage:${RESET}"
325
+ echo " eagle-skills <command>"
326
+ echo ""
327
+ echo -e "${BOLD}Commands:${RESET}"
328
+ echo " install Select and install skills for Claude Code"
329
+ echo " update Pull latest changes (symlinked skills update automatically)"
330
+ echo " status Show installed skills and check for updates"
331
+ echo " uninstall Remove installed skills"
332
+ echo " help Show this help message"
333
+ echo ""
334
+ echo -e "${BOLD}Quick start:${RESET}"
335
+ echo " npx eagle-skills install"
336
+ echo ""
337
+ echo -e "${BOLD}Alternative (without npm):${RESET}"
338
+ echo " curl -fsSL https://raw.githubusercontent.com/eagleisbatman/eagle-skills/main/install.sh | bash"
339
+ echo ""
340
+ }
341
+
342
+ # ─── Main ────────────────────────────────────────────────────
343
+ main() {
344
+ local cmd="${1:-help}"
345
+
346
+ case "$cmd" in
347
+ install) cmd_install ;;
348
+ update) cmd_update ;;
349
+ status) cmd_status ;;
350
+ uninstall) cmd_uninstall ;;
351
+ help|--help|-h) cmd_help ;;
352
+ version|--version|-v) echo "eagle-skills v${VERSION}" ;;
353
+ *)
354
+ err "Unknown command: $cmd"
355
+ cmd_help
356
+ exit 1
357
+ ;;
358
+ esac
359
+ }
360
+
361
+ main "$@"