.claude/skills/update-target-projects/SKILL.md
Discover and sync all toolkit-using projects with the latest skills. Use when skills are modified, after the post-commit hook reminds you, or to batch-sync multiple projects.
npx skillsauth add benjaminshoemaker/ai_coding_project_base update-target-projectsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Discover and sync all toolkit-using projects, the Codex CLI skill pack, and global Conductor skill symlinks with the latest skills.
Use this skill when:
Codex skill pack location:
$CODEX_HOME/skills if CODEX_HOME is set~/.codex/skills (default)Project search paths:
$TOOLKIT_SEARCH_PATH environment variable (colon-separated paths)~/Projects (default)Search depth: 4 levels (finds ~/Projects/*/, ~/Projects/*/*/, and ~/Projects/*/*/*/)
Global skills location: ~/.claude/skills/ (symlinks for Conductor autocomplete)
Public skills repo (optional, .claude/public-skills-config.json):
{
"enabled": true,
"path": "/path/to/awesome-claude-skills"
}
Public skills manifest: .claude/public-skills-manifest.json (lists curated skills to publish)
Copy this checklist and track progress:
Update Target Projects Progress:
- [ ] Phase 1: Discover projects with toolkit-version.json
- [ ] Phase 1b: Check Codex CLI skill pack status
- [ ] Phase 1c: Check global skill symlinks (Conductor autocomplete)
- [ ] Phase 1d: Detect orphaned skills (removed from toolkit)
- [ ] Phase 1e: Check workstream scripts status
- [ ] Phase 1f: Check skill resolution mode for each project
- [ ] Phase 1g: Check public skills repo status (if configured)
- [ ] Phase 2: Detect activity status for each project
- [ ] Phase 3: Check sync status (OUTDATED vs CURRENT)
- [ ] Phase 4: Display status report (including orphans, global status, and resolution)
- [ ] Phase 5: User selection (what to sync)
- [ ] Phase 6a: Sync Codex skill pack (if selected) — includes deletions
- [ ] Phase 6b: Sync global skill symlinks (if selected)
- [ ] Phase 6c: Sync target projects (if selected) — includes deletions
- [ ] Phase 6d: Sync workstream scripts (if selected)
- [ ] Phase 6g: Sync Codex App setup wrapper (if selected)
- [ ] Phase 6e: Adopt global skills (if selected) — migrate local to global
- [ ] Phase 6f: Revert to local skills (if selected) — copy from global back to project
- [ ] Phase 6h: Sync public skills repo (if selected)
- [ ] Phase 7: Generate summary report
See PROJECT_SYNC.md for detailed discovery and sync logic.
toolkit-version.json files in search pathstoolkit_location matchestoolkit_commit and last_sync timestampsSee CODEX_SYNC.md for detailed Codex sync logic.
See GLOBAL_SYNC.md for detailed global sync logic.
~/.claude/skills/ for existing entriesDetect .workstream/ scripts in target projects and compare file hashes with toolkit:
.workstream/ directorylib.sh, setup.sh, dev.sh, verify.sh, README.md):
workstream.json.example separately (it's a reference, not a project file)toolkit-version.json under a "workstream" keyStatus determination:
MISSING — no .workstream/ directory in targetCURRENT — all script hashes match toolkitOUTDATED — one or more scripts differ from toolkitFor each target project, determine current skill resolution state:
See GLOBAL_SYNC.md for the full check_project_resolution() implementation.
Summary: reads skill_resolution and force_local_skills from toolkit-version.json,
counts local skill directories, checks global symlink health via all_skills_globally_usable(),
and returns one of the resolution states below.
| Resolution State | Meaning | Available Actions |
|------------------|---------|-------------------|
| GLOBAL | Using global symlinks (healthy) | Revert to local (option 9) |
| LOCAL | Local copies, globals not ready | Sync locally |
| LOCAL_FORCED | Local copies, force_local_skills: true | Sync locally (override active) |
| ADOPTABLE | Local, but global available | Adopt global (option 8) |
| MISSING | No local, no healthy global | ⚠️ Skills unavailable — run global sync first |
See PUBLIC_REPO_SYNC.md for detailed public repo sync logic.
.claude/public-skills-config.jsonenabled is false, skip with status NOT CONFIGURED.claude/public-skills-manifest.json for the list of curated skills^[a-z0-9-]+$Identify skills that exist in targets but have been removed from toolkit:
See CODEX_SYNC.md and PROJECT_SYNC.md for orphan detection logic.
For each project:
TOOLKIT SYNC STATUS
===================
Toolkit: /path/to/toolkit
Current: abc1234 (2026-01-23)
GLOBAL SKILLS (Conductor Autocomplete)
───────────────────────────────────────
Location: ~/.claude/skills
Status: CURRENT (30 symlinks active)
CODEX CLI SKILL PACK
────────────────────
Location: ~/.codex/skills
Status: {status summary}
PUBLIC SKILLS REPO
──────────────────
Location: {path or "NOT CONFIGURED"}
Status: {READY|NOT CONFIGURED|DIRTY|NOT A GIT REPO}
{If READY, show per-skill status table}
TARGET PROJECTS
───────────────
# Project Sync Status Resolution Adoptable Activity
─────────────────────────────────────────────────────────────────────
1 ~/Projects/app OUTDATED local ✓ (30 dirs) DORMANT
2 ~/Projects/api CURRENT global — RECENT
3 ~/Projects/lib CURRENT local ⚠️ 2 modified ACTIVE
Resolution column values:
global — Skills resolve via ~/.claude/skills/ symlinkslocal — Skills copied to project's .claude/skills/mixed — Some global, some localAdoptable column values:
✓ (N dirs) — Can adopt global resolution (N skill directories to remove)⚠️ N modified — Can adopt, but N skills have local modifications— — Already using global resolution (or not applicable)Prompt with options:
.claude/public-skills-config.json)Option 8 visibility: Only show if at least one project is ADOPTABLE (has local
copies and global symlinks are healthy).
Option 9 visibility: Only show if at least one project uses global resolution.
6a: Codex Sync — See CODEX_SYNC.md 6b: Global Skills Sync — See GLOBAL_SYNC.md 6c: Project Sync — See PROJECT_SYNC.md
6d: Workstream Scripts Sync — Copy .workstream/*.sh, README.md, and workstream.json.example to target projects:
.workstream/ directory if missinglib.sh, setup.sh, dev.sh, verify.shREADME.md, workstream.json.examplechmod +x .workstream/*.shls -la .workstream/*.sh that scripts exist and have executable permissions.toolkit-version.json "workstream" key with new hashes. Read back the file to confirm valid JSON.workstream.json (project-owned config)6g: Codex App Setup Wrapper Sync — Copy .codex/setup.sh to target projects:
.codex/ directory if missingsetup.sh from toolkit .codex/setup.shchmod +x .codex/setup.shls -la .codex/setup.sh that the file exists and is executable..codex/environments/ or other Codex App config (project-owned)6e: Adopt Global Skills — Migrate from local to global resolution:
See GLOBAL_SYNC.md for state model and helper definitions.
Pre-flight checks:
all_skills_globally_usable() must return trueFor each selected project:
Detect modified local skills — skills where current hash != stored hash.
See GLOBAL_SYNC.md for the full find_modified_skills() implementation.
It compares each skill's current SHA-256 hash against the stored hash in toolkit-version.json
and returns the list of skill names that differ.
Show migration preview:
ADOPT GLOBAL SKILLS: ~/Projects/app
────────────────────────────────────
Will remove: 30 skill directories
Modified skills: 2 (will be backed up)
After migration: Skills resolve via ~/.claude/skills/
⚠️ This project will no longer contain .claude/skills/.
Collaborators without ~/.claude/skills/ will lose access.
Proceed? [y/N]
If user confirms:
.claude/skills.bak/{skill}/ (if any)ls .claude/skills.bak/ that backups were created before proceeding with deletion.# Note: glob must be OUTSIDE quotes to expand
if [[ -d "$project_path/.claude/skills" ]]; then
rm -rf "$project_path/.claude/skills/"*/
fi
ls "$project_path/.claude/skills/" that skill directories were removed."skill_resolution": "global""resolution": "global"toolkit-version.json to confirm valid JSON and that skill_resolution is "global".git rm — let user review and commitReport:
✓ Migrated ~/Projects/app to global skill resolution
Removed: 30 skill directories
Backed up: 2 modified skills → .claude/skills.bak/
Skills now resolve via: ~/.claude/skills/
6f: Revert to Local Skills — Copy from global back to project:
For projects that were migrated to global but need portability:
Show revert preview:
REVERT TO LOCAL SKILLS: ~/Projects/app
───────────────────────────────────────
Will copy: 30 skills from ~/.claude/skills/
Target: .claude/skills/
After revert: Skills copied locally for portability
Proceed? [y/N]
If user confirms:
.claude/skills/ directoryls .claude/skills/ that expected skill directories were copied."skill_resolution": "local""resolution": "local"toolkit-version.json to confirm valid JSON and that skill_resolution is "local".Report:
✓ Reverted ~/Projects/app to local skill resolution
Copied: 30 skills to .claude/skills/
Skills now resolve via: project-local copies
See PUBLIC_REPO_SYNC.md for detailed sync logic.
.claude/public-skills-manifest.jsoncp -r from toolkit, remove .DS_Store filestoolkit-version.json but removed from manifest)toolkit-version.json in public repo with new hashesgit -C "$path" add skills/ toolkit-version.jsonSYNC COMPLETE
=============
Global Skills (Conductor Autocomplete):
Symlinks created: 2
Symlinks removed: 1 (orphaned)
Symlinks repaired: 0
Already current: 28
Codex CLI Skill Pack:
Skills updated: 3
Skills deleted: 1 (orphaned)
Already current: 12
Target Projects:
Projects processed: 4
Synced: 2
Skipped: 1 (active)
Current: 1
Skills deleted: 1 (orphaned)
Public Skills Repo:
Skills synced: 3 (2 updated, 1 added)
Skills removed: 0
Already current: 6
Skipped: 0 (local modifications)
Committed: yes
Pushed: no (user declined)
Resolution Changes:
Adopted global: 1 project (30 local dirs removed)
Reverted local: 0 projects
Modified backed up: 2 skills → .claude/skills.bak/
Deleted Skills (removed from toolkit):
- multi-model-verify
All synced items are now at toolkit commit abc1234
If projects were migrated:
MIGRATION SUMMARY
─────────────────
Projects migrated to global resolution:
✓ ~/Projects/app (30 skills)
✓ ~/Projects/api (30 skills)
These projects now use ~/.claude/skills/ symlinks.
Local skill copies have been removed.
Note: Collaborators need ~/.claude/skills/ symlinks to access skills.
Run this from their toolkit clone: /update-target-projects → option 2
| Situation | Action |
|-----------|--------|
| No toolkit-version.json files found in search paths | Report "No toolkit-using projects found in {search paths}" and list the paths searched; suggest running /setup first |
| toolkit_location in a project's toolkit-version.json points to a different toolkit | Skip that project with a warning; do not sync skills from a mismatched toolkit |
| cp -r or symlink creation fails during sync | Report the specific failure, continue syncing remaining items, include failures in the summary report |
| rm -rf fails during global adoption (option 8) | STOP adoption for that project, report permission error, do not update toolkit-version.json to "global" |
| gh or git commands fail during discovery | Report the error, skip affected projects, continue with remaining projects |
| Public skills repo path missing or not a git repo | Report specific pre-flight failure, skip public repo sync, continue with other sync operations |
| Public skills repo has dirty working tree | Report "public repo has uncommitted changes", skip public repo sync |
| Manifest skill name fails ^[a-z0-9-]+$ validation | Abort public repo sync entirely (path traversal risk) |
| Skill has local modifications in public repo | Warn and prompt before overwriting — never silently replace |
See EDGE_CASES.md for handling:
REMINDER: For projects using local resolution, always copy skills to target projects, not just update toolkit-version.json. The version file tracks state, but skills must actually be copied for changes to take effect. Projects using global resolution don't need local copies—they resolve via ~/.claude/skills/ symlinks.
testing
Audit project alignment with VISION.md, identify SDLC gaps, and generate feature proposals. Use when reviewing strategic direction or planning new features.
development
Run code-verification on a specific task. Use to verify a single task's acceptance criteria after implementation.
testing
Resolve Vercel preview deployment URL for the current git branch. Invoked by browser-verification when deployment.enabled is true, or directly to check deployment status. Use to check deployment status or when browser verification needs a URL.
development
Update documentation after commits. Syncs README, AGENTS.md, CHANGELOG, and docs/ with code changes. Use after commits or to analyze working tree changes.