Check and sync imported skills with upstream repos via metadata.upstream. Use when the user says "sync skills", "update skills", "check upstream", "outdated skills", or after importing/adapting a skill from another repo.
How this skill is triggered — by the user, by Claude, or both
Slash command
/gustavo-santos-skills:sync-upstream-skillsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Keep imported skills aligned with their source repos, using `metadata.upstream` in each `SKILL.md`.
Keep imported skills aligned with their source repos, using metadata.upstream in each SKILL.md.
Announce at start: "Using the sync-upstream-skills skill."
note) after confirming with the usermetadata.upstream after importing a new skillWhen NOT to use: custom skills (ship-feature) or templates without a repo — those are custom/local.
From the repo root skills/:
python skills/meta/sync-upstream-skills/scripts/check-upstream.py
Without authentication the GitHub API is limited to 60 req/h. With many skills, export a token:
export GITHUB_TOKEN=ghp_...
python skills/meta/sync-upstream-skills/scripts/check-upstream.py
The script lists each skill with:
| Category | Meaning |
|---|---|
syncable | Has repo + path + commit, no note — automatic sync allowed |
adapted | Has note — local content differs from upstream; manual merge required |
custom | inspired_by or no repo — do not sync |
local | No upstream — native/template skill |
Exit code 1 = outdated skills found (useful in optional CI).
Summarize for the user:
--forceFor an outdated adapted skill, suggest:
# View diff upstream vs local (example: brainstorming)
curl -sL "https://api.github.com/repos/obra/superpowers/compare/LOCAL_SHA...UPSTREAM_SHA" | head
Or clone/sparse-checkout temporarily and diff -r.
Rule: one skill per run. Confirm with the user before writing files.
note)# Preview
python skills/meta/sync-upstream-skills/scripts/sync-skill.py NAME --dry-run
# Apply
python skills/meta/sync-upstream-skills/scripts/sync-skill.py NAME
The script:
metadata.upstream.pathskills/NAME/commit and synced_at in the frontmatternote)commitcommit and synced_at in the frontmatter--force if the user accepts overwriting and re-applying adaptations afterwards:python skills/meta/sync-upstream-skills/scripts/sync-skill.py NAME --force
python skills/meta/sync-upstream-skills/scripts/check-upstream.py
For skills with scripts (mcp-builder), confirm that scripts/ and reference/ were included.
If the user asks to ship: use ship-feature with a commit like:
chore(skills): sync NAME from upstream @ abc1234
skills/<area>/<name>/metadata.upstream — see references/upstream-schema.mdnote explaining what changedcheck-upstream.py — should show "Up to date"README.md in the correct area section| Problem | Fix |
|---|---|
Wrong path in frontmatter | Point to the actual folder in upstream, not the local name |
| Sync overwrote an adaptation | Restore from git; use manual merge or --force only with re-application |
stop-slop with path: . | Correct — skill is at the root of the upstream repo |
| GitHub API rate limit | Wait or use GITHUB_TOKEN |
Branch is not main | Script tries main then master; other branches = manual sync |
writing-skillsship-featurenpx claudepluginhub gustavo-santos-swe/skillsCreates, edits, and verifies skills using a test-driven development approach with pressure scenarios and subagents.