Other

/sync-to-mac

Push a notarized, version-consistent Layers app (VoiceBar/BrainBar) to another Mac over SSH, keeping TCC grants. Triggers: sync the other mac, sync to mac, sync notarization, push update to M1/M4, update the other mac. NOT for: local build-app rebuild on a daily-driver (clobbers the cask).

$ golems-cli skills install sync-to-mac
89% best pass rate
18 assertions
6 evals
3 workflows

Updated 3 days ago

The notarized Homebrew cask artifact is the single source of truth on every Mac. Push THAT, never a local rebuild.

Proven end-to-end 2026-06-29 for VoiceBar 2.1.10 and BrainBar 1.4.2. Both products share the etanhey/layers tap and the notary-layers keychain notary profile — fix once, apply to both.

When to Use

  • "sync the other mac" / "sync to mac" / "push update to M1" / "update the other mac"
  • After cutting a notarized release on the source Mac and you need the target Mac (e.g. M1 happycampr@locals-macbook-pro) on the same notarized version.

Hard Rules (do not soften — every one is hard-won)

  1. NEVER run build-app.sh / voicelayer update rebuild on a daily-driver. A local rebuild produces an UNNOTARIZED app that clobbers the notarized cask — this was the whole original bug. VoiceBar PR #323 added a no-clobber guard + voicelayer doctor.
  2. TCC grants persist across upgrades. The apps are Developer-ID signed (Team PPN23G925Y); the Mic / Accessibility / Input-Monitoring grant keys on the designated requirement, not the file hash. Syncing in-place to the same /Applications/<App>.app path keeps every grant — no re-approve.
  3. Notarize off the stored notary-layers keychain profile — no raw app-specific password. Verify history with xcrun notarytool history --keychain-profile notary-layers.
  4. PRIMARY sync = curl notarized zip + verify + ditto (below). It sidesteps the sudo-leftover gate and causes no downtime. Proven on BrainBar M1.
  5. SECONDARY sync = brew upgrade --cask — only when you can sudo. It can FAIL mid-uninstall on a root-owned rm, leaving the app down + LaunchAgents deleted. See workflows/recovery-no-sudo.md.
  6. Dedup strays with voicelayer doctor (dry-run default, backs up, never hard-deletes).
  7. The app alone is NOT parity — sync the TERMS too ("pull all the new terms"). The STT vocabulary (~/.local/state/voicelayer/stt-vocabulary.json) must be UNION-MERGED across machines, NEVER blind-rsynced/overwritten — each Mac holds machine-unique terms and a one-way copy destroys them (no-auto-delete-personal-data). See workflows/sync-terms.md. VoiceBar only — do NOT sync BrainBar's DB.
  8. Daemon/CLI changes need an F5 runtime-verify before merge — real or Etan-consented programmatic F5. See workflows/runtime-verify.md.

Parameters

Substitute these throughout. VoiceBar values shown; BrainBar in parens.

TokenVoiceBarBrainBar
<App> (app + path)VoiceBar/Applications/VoiceBar.appBrainBar
<cli>voicelayerbrainbar
<cask>etanhey/layers/voicebaretanhey/layers/brainbar
<bundle-id>com.voicelayer.voicebarcom.brainlayer.brainbar
<host>happycampr@locals-macbook-pro (M1)same
profilenotary-layersnotary-layers

Workflows

/sync-to-mac:recovery-no-sudo/sync-to-mac:runtime-verify/sync-to-mac:sync-terms