#!/usr/bin/env bash set -euo pipefail usage() { cat <<'USAGE' Usage: ./install.sh [--codex] [--claude] [--all] [--agents] [--force] [--list] Installs the Makepad game skills from this directory into local agent skill directories. Recommended: ./install.sh --codex ./install.sh --claude ./install.sh --all Targets: --codex Install into ${CODEX_HOME:-$HOME/.codex}/skills --claude Install into ${CLAUDE_SKILLS_DIR:-$HOME/.claude/skills} --all Install into Codex and Claude Advanced: --agents Install into ${AGENTS_SKILLS_DIR:-$HOME/.agents/skills} Only for agent surfaces that read .agents/skills without also reading Codex or Claude skills, otherwise skills can duplicate. Options: --force Replace same-named skills in the target directory --list List the skills in this pack and exit USAGE } script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" codex="false"; claude="false"; agents="false"; force="false"; list="false" while [[ $# -gt 0 ]]; do case "$1" in --codex) codex="true" ;; --claude) claude="true" ;; --agents) agents="true" ;; --all) codex="true"; claude="true" ;; --force) force="true" ;; --list) list="true" ;; -h|--help) usage; exit 0 ;; *) printf 'unknown option: %s\n\n' "$1" >&2; usage >&2; exit 2 ;; esac shift done mapfile -t skills < <(find "$script_dir" -mindepth 1 -maxdepth 1 -type d -name 'makepad-*' -printf '%f\n' | sort) if [[ "${#skills[@]}" -eq 0 ]]; then echo "no makepad-* skills found in $script_dir" >&2 exit 1 fi if [[ "$list" == "true" ]]; then printf 'Makepad game skills (%d):\n' "${#skills[@]}" for s in "${skills[@]}"; do desc=$(sed -n 's/^description:[[:space:]]*"\{0,1\}\(.\{0,70\}\).*/\1/p' "$script_dir/$s/SKILL.md" | head -1) printf ' %-32s %s...\n' "$s" "$desc" done exit 0 fi if [[ "$codex" == "false" && "$claude" == "false" && "$agents" == "false" ]]; then usage >&2 exit 2 fi install_into() { local dest="$1" label="$2" installed=0 skipped=0 mkdir -p "$dest" for s in "${skills[@]}"; do if [[ -e "$dest/$s" && "$force" != "true" ]]; then printf ' skip %s (exists; --force to replace)\n' "$s" skipped=$((skipped + 1)) continue fi rm -rf "$dest/$s" cp -R "$script_dir/$s" "$dest/$s" printf ' install %s\n' "$s" installed=$((installed + 1)) done printf '%s: %d installed, %d skipped -> %s\n\n' "$label" "$installed" "$skipped" "$dest" } [[ "$codex" == "true" ]] && install_into "${CODEX_HOME:-$HOME/.codex}/skills" "Codex" [[ "$claude" == "true" ]] && install_into "${CLAUDE_SKILLS_DIR:-$HOME/.claude/skills}" "Claude Code" [[ "$agents" == "true" ]] && install_into "${AGENTS_SKILLS_DIR:-$HOME/.agents/skills}" "Agents" echo "Done. Start with makepad-game-director; it routes the siblings itself."