Skip to content

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.

~/.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.

On your primary machine:

Terminal window
plur sync --remote git@github.com:you/plur-memory.git

This:

  1. Runs git init inside ~/.plur/ if not already a repo.
  2. Adds the remote.
  3. Commits everything except index/ (regenerable) and any local secrets.
  4. Pushes the initial commit.

For a private GitHub repo, make sure you’ve added an SSH key (or set up gh auth login).

Terminal window
plur init
plur sync --remote git@github.com:you/plur-memory.git
plur sync # pulls and merges

The second plur sync does the actual fetch. It pulls the remote, merges, and rebuilds the local index.

Terminal window
plur sync # pulls + pushes

You 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.

PathSynced?
~/.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/

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:

Terminal window
plur sync --status

This shows the conflicting engrams side by side. Resolve with either:

Terminal window
plur sync --resolve <ENG-id> --prefer-local
plur sync --resolve <ENG-id> --prefer-remote
plur sync --resolve <ENG-id> --fork # keeps both as separate engrams

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.

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.

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).