Playbook: Sync claude-global-skills to project repos
When to use
- A new project repo needs the portable global Claude Code skills (
/sr,/commit,/create-pr, …) in its own.claude/commands/. - A global skill was edited in
radieu/claude-global-skillsand the change must be propagated to every project that carries a copy. /sr,/commit, or/create-prare missing in a project session — see also the manual fallback infix-claude-commands-missing.md.
Root cause / model
Claude Code loads slash-command skills from two places: the global ~/.claude/commands/
and the project-local .claude/commands/. When a project has its own
.claude/commands/, that directory shadows the global one — the global skills are no
longer reliably loaded. The fix is to keep a copy of the portable skills inside each
project’s .claude/commands/.
Source of truth: the private repo radieu/claude-global-skills, cloned on each machine
to ~/.claude/commands/. Only project-agnostic skills belong there. p24-infra-only
skills (e.g. provision-vps, auto-issue-pipeline) must NOT be added to the global source —
see the Portable column in ../project-skills/README.md.
Tooling
scripts/sync-global-skills.sh copies every *.md from the global skills source into a
target repo’s .claude/commands/. It is copy-only: it overwrites same-named skills but
never deletes target-only files, so each project keeps its own project-specific skills.
# Sync the current repo from the machine's global skills (~/.claude/commands):
scripts/sync-global-skills.sh
# Preview only — write nothing:
scripts/sync-global-skills.sh --dry-run
# Sync a different checkout, explicit source + target:
scripts/sync-global-skills.sh \
--source ~/.claude/commands \
--target /path/to/other-repo/.claude/commandsOn a Windows dev box, run it from Git Bash with drive paths in /c/... form:
scripts/sync-global-skills.sh --target /c/code_2026/Art-Agency/.claude/commands --dry-runFull workflow — updating a skill everywhere
- Edit the skill in
radieu/claude-global-skills→ PR → merge. git pullin~/.claude/commands/(the local clone of that repo).- For each project, run
scripts/sync-global-skills.sh --target <repo>/.claude/commands(dry-run first), then commit the changed.claude/commands/files in that repo.
Per-repo status (as of 2026-06-30)
| Repo | Synced |
|---|---|
| p24-infra | ✅ skills present natively (this repo) |
| et-operational-platform | ✅ |
| whatsup-android-chat-puller | ✅ |
| Art-Agency | ❌ TODO — run the sync in an Art-Agency session |
| brandpilot | ❌ TODO — run the sync in a brandpilot session |
| radekkonarski-personal-brand | ❌ TODO — run the sync in that repo’s session |
The TODO repos are separate repositories; the sync must be run and committed from a session in that repo (this p24-infra repo cannot push to them). p24-infra owns the tooling + this playbook; each project owns its committed copy.
Verify
After a sync, reload the Claude Code window in the target repo and type /s — sr should
appear in autocomplete. If commands appear but fail on execution, check settings.json
auto-approvals (see fix-claude-settings-missing.md).
Related
fix-claude-commands-missing.md— manual per-file fix.../project-skills/README.md— skill registry + portability.scripts/sync-worker-claude-md.sh— the analogous sync for the globalCLAUDE.md.