# shared-vault-sync Pulls a clean shared vault at `SessionStart` without blocking Claude Code or Codex when the network is unavailable. Target detection, in order: 1. `SHARED_VAULT_DIR` — explicit override (e.g. the `devops-shared-vault` clone path). 2. `$PWD` — when the session starts inside the shared vault itself. 3. `$PWD/Areas/DevOps` — the nested shared subrepo inside the personal vault. A directory is treated as the shared vault only if its `AGENTS.md` contains the marker `This is the shared persistent vault` and it is inside a git work tree. The hook skips a dirty worktree and uses `git pull --ff-only`; it never rebases, merges, or pushes. ## Install Install `shared-vault-sync` from the `infra-plugins` marketplace, then open a new session to activate its `SessionStart` hook. ## Auto-push (launchd) `scripts/push-shared-vault.sh` mengirim commit lokal ke remote secara **commit-driven**: hanya jika worktree bersih **dan** branch lokal di depan `origin` (fetch dulu). Tidak pernah rebase, force-push, atau resolve conflict; no-op saat offline atau tidak ada yang perlu di-push. Setup (macOS launchd, interval 5 menit): ```bash # 1. pastikan script tersedia di plugin (repo infra-plugins) # 2. buat plist ~/Library/LaunchAgents/com.mbugroup.shared-vault-push.plist: # - ProgramArguments: /bin/bash /plugins/shared-vault-sync/scripts/push-shared-vault.sh # - EnvironmentVariables: SHARED_VAULT_DIR= # - StartInterval: 300 # 3. muat: launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.mbugroup.shared-vault-push.plist launchctl kickstart -k gui/$(id -u)/com.mbugroup.shared-vault-push ``` Log push: `$PUSH_SHARED_VAULT_LOG` (default `/tmp/shared-vault-push.log`), hanya timestamp + jumlah commit. Hook pull tetap menangani sinkronisasi masuk; agent ini menangani arah keluar. Push tetap commit-driven: agent tidak pernah membuat komit, hanya mengirim komit yang sudah Anda buat di `Areas/DevOps`.