Sync across machines
PLUR doesn’t have a sync server. Sync is just git, against any remote you control — GitHub private repo, Gitea, your home server’s bare repo, anything that speaks the protocol.
Why this works
Section titled “Why this works”~/.plur/ is structured as a git-friendly directory:
- Engrams are plain YAML — diff cleanly.
- Episodes are JSONL — append-only, merge-friendly.
- Config is a single YAML file.
- Indexes are derived — never committed, regenerated on load.
A single git push is enough.
Initial setup
Section titled “Initial setup”On your primary machine:
plur sync --remote git@github.com:you/plur-memory.gitThis:
- Runs
git initinside~/.plur/if not already a repo. - Adds the remote.
- Commits everything except
index/(regenerable) and any local secrets. - Pushes the initial commit.
For a private GitHub repo, make sure you’ve added an SSH key (or set up gh auth login).
On a second machine
Section titled “On a second machine”plur initplur sync --remote git@github.com:you/plur-memory.gitplur sync # pulls and mergesThe second plur sync does the actual fetch. It pulls the remote, merges, and rebuilds the local index.
Routine use
Section titled “Routine use”plur sync # pulls + pushesYou can schedule it. macOS launchd, Linux systemd, anything cron-like. Hourly is more than enough.
PLUR doesn’t push on every learn — that would chatter the remote. The sync command coalesces multiple changes into a single commit.
What gets synced
Section titled “What gets synced”| Path | Synced? |
|---|---|
~/.plur/engrams.yaml (or sharded engrams/) | ✓ |
~/.plur/episodes.jsonl | ✓ |
~/.plur/config.yaml | ✓ |
~/.plur/packs/registry.yaml | ✓ |
~/.plur/index/ | – (regenerated) |
~/.plur/models/ (embedding model) | – (large; downloaded on first use) |
~/.plur/.cache/ | – |
~/.plur/.tmp/ | – |
Conflicts
Section titled “Conflicts”The default policy is last-write-wins by activation history. If two machines edit the same engram, the version with the more recent access wins; the loser is preserved as a retired engram so nothing is lost.
For high-stakes engrams (commitment: locked), conflicts always require manual resolution — plur sync will stop and tell you what to fix.
To inspect a conflict:
plur sync --statusThis shows the conflicting engrams side by side. Resolve with either:
plur sync --resolve <ENG-id> --prefer-localplur sync --resolve <ENG-id> --prefer-remoteplur sync --resolve <ENG-id> --fork # keeps both as separate engramsAdding more machines
Section titled “Adding more machines”The flow scales: every new machine is plur init + plur sync --remote .... The remote is the single point of coordination. There’s no “primary” machine — any of them can push.
When sync is the wrong tool
Section titled “When sync is the wrong tool”If you want multiple humans sharing engrams (not one human across multiple machines), use PLUR Enterprise instead. Enterprise gives you proper multi-tenancy, server-side permission enforcement, and audit trail. Sync via git is fine for one person; team sharing needs proper permissions.
Hybrid
Section titled “Hybrid”You can combine both: use git sync for your personal global and user:* engrams, and connect to Enterprise for group: and org: engrams. The CLI handles both — there’s no conflict between sync (local-only) and stores add (Enterprise).