name: prime-sync description: "Syncs Claude config between prime repo and target projects. Trigger on 'sync', 'prime-sync', 'push config', 'pull config', 'update prime', 'sync claude config'. Push mode deploys to targets; pull mode imports changes back." argument-hint: "[<target-project-path>] (push mode only, optional in pull mode)" disable-model-invocation: true
Ultrathink.
Mode Detection
Detect operating mode before anything else:
VERSIONfile exists in CWD → push mode (CWD is the prime repo).claude/.prime-versionexists in CWD → pull mode (CWD is a target project)- Neither detected → ask user which mode and for the required path
Push Mode — Resolve Target
Source = CWD (prime repo). Target = resolved project path.
State file: .claude/prime-projects.json
Tracks known target paths, last sync time, and version. Shape:
{ "projects": [{ "path": "/absolute/path", "lastSynced": "2025-12-30T10:30:00Z", "version": "1.4.2" }] }
Create as { "projects": [] } if missing.
Resolution flow:
- Argument provided → Use that path, then record it after a successful sync
- No argument, known projects exist → Ask the user which project(s) to sync, including an All projects option
- No argument, no known projects → Ask the user for a path
State file management:
- Create
.claude/only if you need to persist the state file - Update the synced project's time/version only after a successful sync
- Keep one entry per absolute path
Pull Mode — Clone Prime
Source = cloned prime repo. Target = CWD.
Flow:
- Read current version from
.claude/.prime-versionin CWD - Generate timestamp:
date +%Y%m%d%H%M%S - Clone prime repo:
git clone https://github.com/avibebuilder/claude-prime.git /tmp/claude-prime-sync-<timestamp>/ - Set source =
/tmp/claude-prime-sync-<timestamp>/, target = CWD - Continue to shared process below
- Clean up
/tmp/claude-prime-sync-<timestamp>/after sync completes (success or failure)
No state file in pull mode — the target project is self-contained.
Process
1. Validate Target
- Check that the target path exists, is a directory, and is not the same location as the source repo
- Treat a valid target as a project root where writing
.claude/is appropriate - Read versions from target (
.claude/.prime-version) and prime (VERSION)
If the path fails those checks, abort and explain why.
2. Parallel Analysis
Change Detection:
- Detect relevant changes in prime's
.claude/based on the target's recorded version state - If the target has no recorded version, or already matches the current prime version, sync only uncommitted prime changes
- If the target is on an older prime version, diff from that version tag to
HEADand include uncommitted changes; warn if the tag is missing - Categorize changes into commands, agents, hooks, settings, skills, and starter-skills
Stack Detection (only if skills or starter-skills changed): check target for stack indicators relevant to each changed skill/starter.
File Comparison: compare each changed file with target. Detect: NEW, UPDATE, IDENTICAL, CONFLICT.
3. Build Sync Plan
Aggregate results and present:
CHANGED (will sync): ...
IDENTICAL (skip): ...
CONFLICTS (will ask): ...
IRRELEVANT (skip, wrong stack): ...
GATE: User approves sync plan.
4. Handle Conflicts
For each conflict, show the relevant diff and ask the user how to proceed:
- Overwrite — Replace the target copy with the prime version
- Skip — Leave the target copy unchanged
- Merge — Surface the full diff and let the user choose which parts to keep before writing anything
5. Execute Sync
- Create
.claude/in target if needed - Copy approved files (skills as entire folders)
- Sync approved starter-skills to
.claude/starter-skills/in target - Update
.prime-versionwith prime's VERSION
6. Report
Sync complete! (prime vX.X.X)
Updated: ...
Skipped: ...
Version: X.X.X → written to .prime-version
Push mode only: update state file (lastSynced timestamp + version).
Pull mode only: clean up /tmp/claude-prime-sync-* clone directory.
Gotchas
prime-syncstays in prime — do not copy this skill into target projects.- Push and pull keep different state — state file is push-only; pull mode treats the target as self-contained.
- Version history can be incomplete — if the expected tag is missing, warn and continue with that uncertainty explicit.
Constraints
- NEVER modify the target project's source code
- NEVER sync without user approval at the plan gate
- In push mode, preserve one state entry per target path and update it only after success
- In pull mode, always clean up the temporary clone, even on failure
Target Path
<target-path>$ARGUMENTS</target-path>