Skill v1.0.0
currentLLM-judged scan90/100name: arthur-skills-upgrade description: Upgrade locally installed arthur-onboard-* and arthur-skills-upgrade skills to the latest version from GitHub main branch. Checks version fields, reports stale skills, and updates in place after confirmation. allowed-tools: Bash version: 1.0.0
Upgrade Arthur Onboarding Skills
Check locally installed arthur-onboard-* and arthur-skills-upgrade skills for updates and upgrade any that are behind the latest version on GitHub main.
Step 1 — Find installed skills
echo "=== Global install (~/.claude/skills/) ==="ls -d ~/.claude/skills/arthur-onboard-* ~/.claude/skills/arthur-skills-upgrade 2>/dev/null || echo "(none)"echo ""echo "=== Project install (.claude/skills/) ==="ls -d .claude/skills/arthur-onboard-* .claude/skills/arthur-skills-upgrade 2>/dev/null || echo "(none)"
Collect all found paths. If none are found in either location, tell the user no arthur-onboard-* or arthur-skills-upgrade skills are installed and show the install command from the README.
Step 2 — Check versions
For each installed skill directory, extract the local version and compare against GitHub main. Also load ~/.claude/arthur-skills-skip-versions.txt (format: one skill_name=version per line) to suppress prompts for versions the user has previously chosen to skip.
BASE="https://raw.githubusercontent.com/arthur-ai/arthur-engine/main/integrations/claude-code-skills/arthur-onboard"SKIP_FILE="$HOME/.claude/arthur-skills-skip-versions.txt"STALE=()OK=()SKIP=()USER_SKIPPED=()for skill_dir in ~/.claude/skills/arthur-onboard-* ~/.claude/skills/arthur-skills-upgrade \.claude/skills/arthur-onboard-* .claude/skills/arthur-skills-upgrade; do[ -f "$skill_dir/SKILL.md" ] || continueskill_name=$(basename "$skill_dir")local_version=$(grep "^version:" "$skill_dir/SKILL.md" 2>/dev/null | awk '{print $2}')local_version=${local_version:-"unknown"}remote_content=$(curl -sSLf "$BASE/$skill_name/SKILL.md" 2>/dev/null)if [ -z "$remote_content" ]; thenSKIP+=("$skill_name")echo "SKIP $skill_name (not found on main branch)"continuefiremote_version=$(echo "$remote_content" | grep "^version:" | awk '{print $2}')remote_version=${remote_version:-"unknown"}if [ "$local_version" = "$remote_version" ]; thenOK+=("$skill_name ($local_version)")echo "OK $skill_name ($local_version)"else# Check if the user previously chose to skip this exact remote versionskipped_ver=$(grep "^$skill_name=" "$SKIP_FILE" 2>/dev/null | cut -d'=' -f2)if [ "$skipped_ver" = "$remote_version" ]; thenUSER_SKIPPED+=("$skill_name ($local_version → $remote_version, skipped)")echo "SKIPPED $skill_name ($local_version → $remote_version, user-skipped this version)"elseSTALE+=("$skill_dir|$skill_name|$local_version|$remote_version")echo "UPDATE $skill_name: $local_version → $remote_version"fifidone# Persist stale list so Step 3 can read it in a fresh shellprintf '%s\n' "${STALE[@]}" > /tmp/arthur-stale-skills.txt
Present the results clearly:
OK— already up to dateUPDATE— stale, update availableSKIPPED— user previously chose to skip this versionSKIP— not found on main (installed manually or removed upstream)
If all skills are OK or SKIPPED, tell the user everything is up to date and exit.
Step 3 — Prompt and upgrade
Show the user the list of skills that have updates (from the UPDATE entries). Then ask:
"Found N skill(s) with updates:-<skill-name>:<old>→<new>...How would you like to proceed?1. Yes — upgrade now2. Not now — skip this time (you'll be asked again next run)3. Skip version — don't ask about these versions again until a newer release"
If the user chooses "Yes" — download and replace each stale skill:
BASE="https://raw.githubusercontent.com/arthur-ai/arthur-engine/main/integrations/claude-code-skills/arthur-onboard"while IFS= read -r entry; do[ -n "$entry" ] || continueskill_dir=$(echo "$entry" | cut -d'|' -f1)skill_name=$(echo "$entry" | cut -d'|' -f2)old_ver=$(echo "$entry" | cut -d'|' -f3)new_ver=$(echo "$entry" | cut -d'|' -f4)new_content=$(curl -sSLf "$BASE/$skill_name/SKILL.md" 2>/dev/null)if [ $? -eq 0 ] && [ -n "$new_content" ]; thenecho "$new_content" > "$skill_dir/SKILL.md"echo "Updated: $skill_name ($old_ver → $new_ver)"# Some skills ship companion files — re-download them alongside SKILL.mdif [ "$skill_name" = "arthur-onboard-instrument" ]; thenexamples=$(curl -sSLf "$BASE/arthur-onboard-instrument/EXAMPLES.md" 2>/dev/null)if [ -n "$examples" ]; thenecho "$examples" > "$skill_dir/EXAMPLES.md"echo "Updated: $skill_name/EXAMPLES.md"fifielseecho "FAILED: $skill_name (could not fetch from GitHub)"fidone < /tmp/arthur-stale-skills.txtrm -f /tmp/arthur-stale-skills.txt
If the user chooses "Not now" — exit without upgrading. No file changes. The user will be prompted again on the next run.
rm -f /tmp/arthur-stale-skills.txt
If the user chooses "Skip version" — record the current remote version for each stale skill in the skip file so they are not prompted again until a newer version is released:
SKIP_FILE="$HOME/.claude/arthur-skills-skip-versions.txt"while IFS= read -r entry; do[ -n "$entry" ] || continueskill_name=$(echo "$entry" | cut -d'|' -f2)new_ver=$(echo "$entry" | cut -d'|' -f4)# Remove any existing entry for this skill, then append the new skipped versiongrep -v "^$skill_name=" "$SKIP_FILE" 2>/dev/null > /tmp/arthur-skip-tmp && mv /tmp/arthur-skip-tmp "$SKIP_FILE" || trueecho "$skill_name=$new_ver" >> "$SKIP_FILE"echo "Skipping: $skill_name (will not prompt again until a version newer than $new_ver is released)"done < /tmp/arthur-stale-skills.txtrm -f /tmp/arthur-stale-skills.txt
Step 4 — Done
Report:
- How many skills were updated
- How many were already up to date
- Any that failed or were skipped
Remind the user to re-run /arthur-onboard-oss or /arthur-onboard-platform to pick up any new behaviour or steps from updated skills.