Before invoking sync.sh, /sync now scans for untracked or modified session log files across session-logs/, clients/*/session-logs/, and projects/*/session-logs/. If any are found, it warns the user and offers to run /save instead so logs get a proper narrative commit rather than a generic "sync: auto-sync" message. Escalation behavior: default toward /save; user can override to proceed with plain sync if they explicitly choose. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.3 KiB
Sync the ClaudeTools and vault repos with Gitea.
Phase 0 — Uncommitted Session Log Check
Run this before invoking sync.sh.
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/*.mdprojects/*/session-logs/*.md
If count == 0: proceed with sync normally (invoke sync.sh).
If count > 0:
Emit:
[WARNING] Found <N> uncommitted session log(s):
- <path/to/file.md>
- ...
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
/saveflow (write session log →sync.sh). Do NOT callsync.shseparately after —/savealready calls it. - If user says proceed / skip: invoke
sync.shdirectly 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:
- Detects local changes (including untracked-only files) via
git status --porcelain; stages withgit add -Aand auto-commits withsync: auto-sync from <hostname> at <timestamp> - Fetches from origin, rebases local commits onto remote
- Pushes to origin
- Copies
.claude/commands/*.md→~/.claude/commands/so the global Claude CLI commands stay current without a manual copy - Repeats steps 1-3 for the vault repo (path read from
.claude/identity.jsonvault_pathfield) - Surfaces any
## Note for <user>/## Message for <user>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 <author> (<date>)
============================================================
<full note content>
============================================================
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).