$npx -y skills add Soul-Brews-Studio/arra-oracle-skills-cli --skill goManage Oracle skills — list, install, remove, find, switch profiles, update. Use when user says "go", "install skill", "remove skill", "find skill", "switch profile", "go list", "go update", "go install", "go find". Single entry point for all skill management.
| 1 | # /go |
| 2 | |
| 3 | > Switch gear. Single source of truth. |
| 4 | |
| 5 | ## Usage |
| 6 | |
| 7 | ``` |
| 8 | /go # all skills — profile tier + installed status |
| 9 | /go list # same as /go (no args) |
| 10 | /go minimal # newcomer essentials (7 skills, default) |
| 11 | /go standard # daily driver (13 skills) |
| 12 | /go full # all stable (excludes lab-only experiments) |
| 13 | /go lab # everything including experimental |
| 14 | /go cleanup # remove ALL skills → fetch latest → fresh install |
| 15 | /go update # check for new version + upgrade in-place |
| 16 | /go install team-agents # cherry-pick install specific skills |
| 17 | /go remove watch # uninstall specific skills |
| 18 | /go find feel # search all available skills by name |
| 19 | ``` |
| 20 | |
| 21 | > ⚠ NEW (#285): `/go <profile>` now ALIGNS your installed skills to the target profile. |
| 22 | > arra-managed skills NOT in the target profile will be **removed**. |
| 23 | > External / non-arra skills are never touched. |
| 24 | > A pre-removal diff is shown before any deletion occurs. |
| 25 | |
| 26 | --- |
| 27 | |
| 28 | ## CLI Detection |
| 29 | |
| 30 | Before running any command, detect the CLI path. It may not be in `$PATH` on all machines. |
| 31 | |
| 32 | ```bash |
| 33 | # Try in order: global binary, bun global, bunx fallback |
| 34 | if command -v arra-oracle-skills &>/dev/null; then |
| 35 | ARRA="arra-oracle-skills" |
| 36 | elif [ -x "$HOME/.bun/bin/arra-oracle-skills" ]; then |
| 37 | ARRA="$HOME/.bun/bin/arra-oracle-skills" |
| 38 | else |
| 39 | # Not installed — use bunx (always works if bun exists) |
| 40 | ARRA="$HOME/.bun/bin/bunx --bun arra-oracle-skills@github:Soul-Brews-Studio/arra-oracle-skills-cli" |
| 41 | fi |
| 42 | ``` |
| 43 | |
| 44 | Use `$ARRA` for all commands below. |
| 45 | |
| 46 | --- |
| 47 | |
| 48 | ## Execution |
| 49 | |
| 50 | Parse the user's `/go` arguments and run the matching `$ARRA` command. |
| 51 | |
| 52 | ### `/go` or `/go list` — show all skills with profile + installed status + type |
| 53 | |
| 54 | Write this script to `/tmp/go-list.sh` and run it with `bash /tmp/go-list.sh`. The script auto-discovers profile membership from the CLI — zero hardcoded skill names. |
| 55 | |
| 56 | ```bash |
| 57 | #!/bin/bash |
| 58 | SKILLS_DIR="$HOME/.claude/skills" |
| 59 | ARRA="$HOME/.bun/bin/arra-oracle-skills" |
| 60 | VERSION=$($ARRA --version 2>/dev/null || echo "?") |
| 61 | |
| 62 | # Auto-get skill lists from CLI (no hardcoding) |
| 63 | get_profile_skills() { |
| 64 | $ARRA profiles "$1" 2>/dev/null | grep "Skills:" | sed 's/.*Skills: //' | tr ',' '\n' | sed 's/^ *//' | tr '\n' ' ' |
| 65 | } |
| 66 | |
| 67 | STANDARD=$(get_profile_skills standard) |
| 68 | FULL=$(get_profile_skills full) |
| 69 | LAB_RAW=$(get_profile_skills lab) |
| 70 | |
| 71 | # Lab-only = in lab but not in full |
| 72 | LAB="" |
| 73 | for s in $LAB_RAW; do |
| 74 | echo " $FULL " | grep -q " $s " || LAB="$LAB $s" |
| 75 | done |
| 76 | |
| 77 | # Minimal-only = in minimal but not in standard |
| 78 | MINIMAL=$(get_profile_skills minimal) |
| 79 | MINIMAL_ONLY="" |
| 80 | for s in $MINIMAL; do |
| 81 | echo " $STANDARD " | grep -q " $s " || MINIMAL_ONLY="$MINIMAL_ONLY $s" |
| 82 | done |
| 83 | |
| 84 | ALL_ARRA="$STANDARD $LAB $MINIMAL_ONLY" |
| 85 | |
| 86 | detect_type() { |
| 87 | local dir="$SKILLS_DIR/$1" |
| 88 | [ -d "$dir" ] || return |
| 89 | local has_code=false has_agent=false |
| 90 | [ -d "$dir/scripts" ] && has_code=true |
| 91 | grep -qlE 'Agent\(|subagent|TeamCreate|SendMessage' "$dir/SKILL.md" 2>/dev/null && has_agent=true |
| 92 | if $has_code && $has_agent; then echo "[code+agent]" |
| 93 | elif $has_code; then echo "[code]" |
| 94 | elif $has_agent; then echo "[agent]" |
| 95 | fi |
| 96 | } |
| 97 | |
| 98 | get_desc() { |
| 99 | local f="$SKILLS_DIR/$1/SKILL.md" |
| 100 | [ -f "$f" ] || return |
| 101 | awk '/^---$/{n++; next} n==1{print} n>=2{exit}' "$f" \ |
| 102 | | grep -E '^description:' | head -1 \ |
| 103 | | sed "s/description: *//; s/['\"]//g; s/\[core\].*G-SKLL | //" \ |
| 104 | | cut -c1-40 |
| 105 | } |
| 106 | |
| 107 | echo "Oracle Skills v$VERSION" |
| 108 | echo "" |
| 109 | |
| 110 | NUM=0; INSTALLED=0 |
| 111 | std_count=$(echo $STANDARD | wc -w | tr -d ' ') |
| 112 | lab_count=$(echo $LAB | wc -w | tr -d ' ') |
| 113 | min_count=$(echo $MINIMAL_ONLY | wc -w | tr -d ' ') |
| 114 | |
| 115 | for tier in STANDARD LAB MINIMAL_ONLY; do |
| 116 | case $tier in |
| 117 | STANDARD) skills="$STANDARD"; label="standard"; count=$std_count ;; |
| 118 | LAB) skills="$LAB"; label="lab"; count=$lab_count ;; |
| 119 | MINIMAL_ONLY) skills="$MINIMAL_ONLY"; label="minimal-only"; count=$min_count ;; |
| 120 | esac |
| 121 | [ -z "$(echo $skills | tr -d ' ')" ] && continue |
| 122 | printf " ─── %s (%s) " "$label" "$count" |
| 123 | printf '─%.0s' $(seq 1 $((52 - ${#label}))); echo "" |
| 124 | for name in $skills; do |
| 125 | NUM=$((NUM+1)) |
| 126 | if [ -d "$SKILLS_DIR/$name" ]; then |
| 127 | mark="✓"; INSTALLED=$((INSTALLED+1)) |
| 128 | else |
| 129 | mark="✗" |
| 130 | fi |
| 131 | tag=$(detect_type "$name") |
| 132 | desc=$(get_desc "$name") |
| 133 | if [ -n "$desc" ]; then |
| 134 | printf " %2d %s %-24s %-14s %s\n" "$NUM" "$mark" "$name" "$tag" "$desc" |
| 135 | else |
| 136 | printf " %2d %s %-24s %s\n" "$NUM" "$mark" "$name" "$tag" |
| 137 | fi |
| 138 | done |
| 139 | echo "" |
| 140 | done |
| 141 | |
| 142 | # External (non-arra) skills |
| 143 | EXT=0; EXT_NAMES="" |
| 144 | for dir in "$SKILLS_DIR"/*/; do |
| 145 | [ -d "$dir" ] || continue |
| 146 | name=$(basename "$dir"); [ |