arthur-skills-upgrade · v1.0.0 · 2026-06-08 · sha256 56a1ae76a313f8c5
arthur-skills-upgrade v1.0.0A
Immutable. This exact content is served forever at /api/v1/blob/56a1ae76a313f8c5.
---
name: 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
```bash
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.
```bash
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" ] || continue
skill_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" ]; then
SKIP+=("$skill_name")
echo "SKIP $skill_name (not found on main branch)"
continue
fi
remote_version=$(echo "$remote_content" | grep "^version:" | awk '{print $2}')
remote_version=${remote_version:-"unknown"}
if [ "$local_version" = "$remote_version" ]; then
OK+=("$skill_name ($local_version)")
echo "OK $skill_name ($local_version)"
else
# Check if the user previously chose to skip this exact remote version
skipped_ver=$(grep "^$skill_name=" "$SKIP_FILE" 2>/dev/null | cut -d'=' -f2)
if [ "$skipped_ver" = "$remote_version" ]; then
USER_SKIPPED+=("$skill_name ($local_version → $remote_version, skipped)")
echo "SKIPPED $skill_name ($local_version → $remote_version, user-skipped this version)"
else
STALE+=("$skill_dir|$skill_name|$local_version|$remote_version")
echo "UPDATE $skill_name: $local_version → $remote_version"
fi
fi
done
# Persist stale list so Step 3 can read it in a fresh shell
printf '%s\n' "${STALE[@]}" > /tmp/arthur-stale-skills.txt
```
Present the results clearly:
- `OK` — already up to date
- `UPDATE` — stale, update available
- `SKIPPED` — user previously chose to skip this version
- `SKIP` — 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 now
> 2. **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:
```bash
BASE="https://raw.githubusercontent.com/arthur-ai/arthur-engine/main/integrations/claude-code-skills/arthur-onboard"
while IFS= read -r entry; do
[ -n "$entry" ] || continue
skill_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" ]; then
echo "$new_content" > "$skill_dir/SKILL.md"
echo "Updated: $skill_name ($old_ver → $new_ver)"
# Some skills ship companion files — re-download them alongside SKILL.md
if [ "$skill_name" = "arthur-onboard-instrument" ]; then
examples=$(curl -sSLf "$BASE/arthur-onboard-instrument/EXAMPLES.md" 2>/dev/null)
if [ -n "$examples" ]; then
echo "$examples" > "$skill_dir/EXAMPLES.md"
echo "Updated: $skill_name/EXAMPLES.md"
fi
fi
else
echo "FAILED: $skill_name (could not fetch from GitHub)"
fi
done < /tmp/arthur-stale-skills.txt
rm -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.
```bash
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:
```bash
SKIP_FILE="$HOME/.claude/arthur-skills-skip-versions.txt"
while IFS= read -r entry; do
[ -n "$entry" ] || continue
skill_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 version
grep -v "^$skill_name=" "$SKIP_FILE" 2>/dev/null > /tmp/arthur-skip-tmp && mv /tmp/arthur-skip-tmp "$SKIP_FILE" || true
echo "$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.txt
rm -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.