Sign in

Sync

Mirror a project folder between the box and your machine, both directions and .git included, with edits landing on the other side in under a second.

On this page11

The model

SidePath
box~/code/<name>
your machine~/Prized/<name> by default

prized sync add <name> creates the pair; --local syncs a folder of your own in place, and local_root under [sync] in the config moves the default parent. The real local copy keeps whole-repo tools fast; to browse the box without copying, use mount.

How fast

Under a second, except the first edit in a folder nothing has touched for a while, which can take up to 10 seconds to leave the box; watch_polling_interval in the project's [[sync.project]] entry lowers that, at the cost of a full scan per interval.

Add a project

Nothing exists yet. --create makes ~/code/myproject on the box:

Terminal
prized sync add myproject --create

The code is on the box. The first sync copies ~/code/myproject down to ~/Prized/myproject (C:\Users\you\Prized\myproject on Windows). For a folder outside ~/code, pass its path (prized sync add ~/work/api names it api); --name picks the name yourself:

Terminal
prized sync add myproject

The code is on your machine. Run setup in the folder, or point it there. Auto mode takes a folder holding a .git directory or a manifest (package.json, go.mod, pyproject.toml, and the like) without asking, and asks about any other, so your home folder never syncs by accident. A manual run also asks whether to sync in place (the default) or copy once; two more modes are flags:

Terminal
prized setup ~/src/myproject              # asks: sync in place? (n = copy once)
prized setup ~/src/myproject --copy-once  # copy to ~/code/myproject on the box, no sync
prized setup ~/src/myproject --copy       # sync a copy under ~/Prized
prized setup ~/src/myproject --clone      # git clone on the box, no mirror
ModeWhat happensRight for
In placeYour folder becomes the local side; setup asks first, since the box wins conflicts there.A project one person edits.
--copy-onceOne upload to ~/code/myproject, .git included, ignored paths and .env files left out; no sync, and a populated destination is never overwritten.A checkout others or several agents edit, or a one-time import.
--copyCopies (never moves) the folder into ~/Prized/myproject and syncs the copy; a hard link inside is refused.Leaving the original untouched.
--cloneClones the folder's origin to ~/code/myproject on the box at your current branch; no sync, work moves by push and pull.A checkout others edit, worktrees, uncommitted work in flight.

In place by hand is prized sync add --local ~/src/myproject --create. A clone is not a sync project, so it never appears in prized sync ls.

Rule for every addWhat happens
Both sides have contentadd refuses until you pass --merge (prized setup --merge passes it through), which accepts the conflict rule below; the local folder is first copied to ~/Prized/.prized/backups/.
No nestingA folder cannot be added inside, around, or on top of another synced folder, on either side.
Ignored by defaultnode_modules, .next, dist, build, out, target, .venv, venv, __pycache__, .turbo, coverage, *.log, .DS_Store, ._*, .tox, .nox, .mypy_cache, .pytest_cache, .ruff_cache, .ipynb_checkpoints, .pnpm-store, .parcel-cache, .nuxt, .svelte-kit, .cache, .gradle, .terraform. Adjust per project with --ignore and --unignore.
.env filesA session prized setup creates ignores .env and .env.* (.env.example still syncs); prized sync add by hand syncs them unless you pass --ignore .env (Bring your environment).
Files over 256 MBSkipped; sync add and prized sync ls name every skipped path.

If the first sync cannot be set up, sync add fails with the reason but keeps the project, shown as error in prized sync ls while the daemon retries; prized sync rm myproject drops it. Moving the whole folder, .git included, can take a couple of minutes: watch the transfer rate on setup's progress line before assuming it is stuck, trim with --ignore, or use --clone so the box fetches the history from origin.

Low disk on your machine

A project larger than your free disk never finishes its first sync. When free space on any volume sync writes to drops below 2 GB, Prized pauses every synced project and prized sync ls says so:

prized sync ls
NAME     STATE    LAST CHANGE  CONFLICTS  LOCAL              REMOTE
doppel   paused   -            0          ~/Prized/doppel    ~/code/doppel
  doppel: paused by prizedd — low disk: 1.5 GB free on ~/Prized/doppel, below min_free_disk_gb = 2

Free space, or add extra_ignores for folders that should not travel (render output, datasets, media), then prized sync resume --all. While a volume is below the line, a resume is refused and a newly added project starts paused; prized sync add onto a volume that is itself below it is refused. The threshold is min_free_disk_gb under [sync] in the config (0 turns the guard off), applied on the next reload.

TOML
[[sync.project]]
name = 'doppel'
extra_ignores = ['artifacts']

Conflicts: the box wins

Sync runs two-way-resolved and the box wins every conflict, since agents there write fast; in a folder synced in place, your own checkout is the side that yields. --prefer mac flips that per project; --mode two-way-safe surfaces conflicts instead of resolving them.

Git over sync

Commit, rebase, and push from a shell on the box. Reading history, diffs, and blame in ~/Prized is always safe; committing from your machine is safe only while the box side is quiet, or the local commit can be lost.

Offline

Agents, builds, and servers keep running while your laptop is offline; sync and mirrored ports catch up on reconnect. Before editing offline where an agent also writes, pause the project, or the box's versions win on reconnect.

Behind a proxy, sync uses your Mac's system proxy, or your shell's HTTPS_PROXY once you run prized setup there (Networks that block the tunnel).

Everyday commands

CommandWhat it does
prized syncList projects with state and conflicts (same as prized sync ls); says so when nothing is synced.
prized sync flush myprojectForce a full sync cycle and wait for it, for example before switching machines.
prized sync pause myprojectStop syncing until you resume; --all works too.
prized sync resume myprojectResume a paused project.
prized sync repair myprojectRecover a halted session with a safe re-scan; no deletions propagate.

Remove a project

Terminal
prized sync rm myproject

This stops syncing and leaves the files on both sides. Two flags also move files aside (never rm -rf), naming the exact path in the confirm:

  • --delete-local moves the local folder to the Trash after you type delete-local; for a project synced in place, that is your own checkout.
  • --delete-box moves the box folder aside after you type delete-box; refused while anything else syncs that folder or one inside it.

Several boxes

Aim sync commands at a box connected with prized setup --box mango by adding --box mango (or PRIZED_BOX=mango); two boxes cannot sync a project under one name, so the second prized sync add asks for --name (Boxes).

Under the hood

Sync runs on Mutagen: Prized uses its own pinned copy, never one on your PATH, and prized doctor fetches it if it is missing.