Sync the ClaudeTools and vault repos with Gitea. ## Phase 0 — Uncommitted Session Log Check **Run this before invoking `sync.sh`.** ```bash git status --porcelain | grep -E '\bsession-logs/.*\.md$' | grep -v '^\s*D ' ``` This finds any untracked (`??`) or modified (` M`, `M `, `AM`) session log files across all locations: - `session-logs/*.md` (root general logs) - `clients/*/session-logs/*.md` - `projects/*/session-logs/*.md` **If count == 0:** proceed with sync normally (invoke `sync.sh`). **If count > 0:** Emit: ``` [WARNING] Found uncommitted session log(s): - - ... These contain work context that will be auto-committed with a generic "sync: auto-sync" message if you proceed. Run /save instead to capture a proper narrative summary before syncing. ``` Then ask: "Run /save now, or proceed with plain sync anyway?" - If user says **save** (or doesn't respond / says yes): execute the full `/save` flow (write session log → `sync.sh`). Do NOT call `sync.sh` separately after — `/save` already calls it. - If user says **proceed / skip**: invoke `sync.sh` directly and note that the session logs will be auto-committed with generic messages. The intent: a `/sync` that finds unsaved work should default toward `/save`. Auto-committing session logs with "sync: auto-sync" loses the narrative context that makes logs searchable. --- ## What this does Invokes `bash .claude/scripts/sync.sh`, which: 1. Detects local changes (including untracked-only files) via `git status --porcelain`; stages with `git add -A` and auto-commits with `sync: auto-sync from at ` 2. Fetches from origin, rebases local commits onto remote 3. Pushes to origin 4. Copies `.claude/commands/*.md` → `~/.claude/commands/` so the global Claude CLI commands stay current without a manual copy 5. Repeats steps 1-3 for the **vault** repo (path read from `.claude/identity.json` `vault_path` field) 6. Surfaces any `## Note for ` / `## Message for ` blocks from incoming session logs The script is the single source of truth for git operations. Both `/sync` and `/save` invoke it. --- ## Cross-user note handling (CRITICAL) If sync surfaces a note from another user, display it **prominently at the top of the response, before the sync summary**, formatted as: ``` ============================================================ MESSAGE FROM () ============================================================ ============================================================ ``` Address each action item or question explicitly before moving on. Do not bury cross-user notes in the sync summary or skip them because other work is in progress. --- ## Output format Report: - Pulled commits — count + authors + one-line summaries - Wiki updates — categorized by clients/projects/systems/patterns/meta with status (added/modified/deleted) - Pushed commits — count + your commits + outgoing SHAs - Vault sync status — pulled/pushed/clean - Cross-user notes addressed (if any) - Final HEAD + status --- ## Companion: `/save` `/save` writes a comprehensive session log first, then invokes the same `sync.sh`. Use `/save` after substantive work to capture context for future sessions. Use `/sync` for routine repo sync without writing a log (start of day, switching machines, mid-session check-in).