Check for and apply updates to installed skill branches from upstream.
Skills are distributed as git branches (skill/*). When you install a skill, you merge its branch into your repo. This skill checks upstream for newer commits on those skill branches and helps you update.
Run /update-skills in Claude Code.
Preflight: checks for clean working tree and upstream remote.
Detection: fetches upstream, lists all upstream/skill/* branches, determines which ones you've previously merged (via merge-base), and checks if any have new commits.
Selection: presents a list of skills with available updates. You pick which to update.
Update: merges each selected skill branch, resolves conflicts if any, then validates with build + test.
Help users update their installed skill branches from upstream without losing local customizations.
git commands, only open files with actual conflicts.Run:
git status --porcelainIf output is non-empty:
Check remotes:
git remote -vIf upstream is missing:
https://github.com/qwibitai/nanoclaw.git).git remote add upstream <url>Fetch:
git fetch upstream --pruneList all upstream skill branches:
git branch -r --list 'upstream/skill/*'For each upstream/skill/<name>:
git merge-base --is-ancestor upstream/skill/<name>~1 HEAD — if this succeeds (exit 0) for any ancestor commit of the skill branch, the user has merged it at some point. A simpler check: git log --oneline --merges --grep="skill/<name>" HEAD to see if there's a merge commit referencing this branch.MERGE_BASE=$(git merge-base HEAD upstream/skill/<name>) — if the merge base is NOT the initial commit and the merge base includes commits unique to the skill branch, it has been merged.git merge-base HEAD upstream/skill/<name> with git merge-base HEAD upstream/main. If the skill merge-base is strictly ahead of (or different from) the main merge-base, the user has merged this skill.git log --oneline HEAD..upstream/skill/<name>Build three lists:
If no skills have updates available:
If updates are available:
skill/<name>: 3 new commits
skill/<other>: 1 new commit
multiSelect: true to let the user pick which skills to update.
For each selected skill (process one at a time):
git merge upstream/skill/<name> --no-editgit status to identify conflicted files.git add <file>git commit --no-editIf a merge fails badly (e.g., cannot resolve conflicts):
git merge --abortAfter all selected skills are merged:
npm run buildnpm test (do not fail the flow if tests are not configured)If build fails:
Show:
git rev-parse --short HEADIf the service is running, remind the user to restart it to pick up changes.