gaal sync runs the full reconciliation pipeline once and exits. gaal sync --service keeps the same pipeline running in a loop. Both produce identical state on disk, pick the one that matches how you use the machine.
One-shot sync (the default)
- You want explicit control over when reconciliation happens.
- You’re scripting in a Makefile, post-merge hook, or CI job.
- You’re on a laptop where a background process would just waste battery.
Continuous service
SIGTERM and Ctrl-C cleanly.
--interval accepts any Go duration string: 30s, 5m, 2h. Default is 5m.
Use this when:
- You’re on a long-lived dev workstation and want skills/MCP entries to stay in sync as you edit
gaal.yaml. - You want a system service that keeps a fleet of machines aligned with a config file pulled from a shared dotfiles repo (paired with a
git pullcron).
Incompatible with --service
| Flag | Why |
|---|---|
--dry-run | A dry-run service loop is meaningless. |
--prune | Destructive operations should never be in a continuous loop. |