Does TOVIO connect to a remote on its own?

Automatic sync is on by default once a remote exists. What it does, what it will never do without you, and how to switch it off.

Written By Dustin

Last updated About 2 hours ago

Yes, once you have configured a remote — and this is worth understanding rather than discovering.

It is not telemetry: it reaches only the host you named, never the project. But it is network activity that happens without you typing a sync command, so it belongs in any honest account of what your machine does.

It is not a background timer

This is the most common wrong assumption about it. Nothing polls on a schedule. A sync round runs after one of a small allowlist of commands completes successfully — commit, land, switch or checkout, tag creation, cherry-pick, revert, rebase — and only if a throttle interval (a couple of minutes by default) has elapsed since the last one. It also skips a dirty working copy.

So if you spend an afternoon editing files without running any of those commands, TOVIO makes no network requests at all. A transport failure pushes the next attempt further out rather than retrying in a tight loop, so an offline machine is not a machine repeatedly dialling out. The only genuinely timer-driven mode is sync --watch, which you start deliberately.

One related setting, for completeness: sync.auto.mode chooses whether a round runs inline (the default, on the same thread after the command) or detached, which does the same work in a short-lived background child process. Detached changes where the work runs, not when — it is still triggered by those same commands.

What is automatic

Pulling. A round fetches from the configured remote, merges lane references, and materializes what it can. Pulling is the automatic half because it is convergent and non-destructive by construction: it publishes nothing and does not overwrite your work. Automatic integration only folds in changes that merge cleanly; anything that would conflict is left for you.

What publishing requires from you first

Under the default push mode (sync.auto.push = shared):

  • The first publication of any lane is manual. A lane becomes eligible for automatic pushing only after you have pushed it at least once by hand. That first push is the act of consent, and it is recorded locally in a file that is itself never synced.
  • Only the lane you are currently on is pushed, so a private sibling lane is never swept up alongside it.
  • A protected lane is skipped — its advances go through review.

The exception, stated plainly: setting sync.auto.push to all opts into pushing every local lane and removes both the first-push requirement and the protected-lane skip. It is the whole-repo escape hatch for people who explicitly want that, and it is not the default precisely because of what it gives up.

Turning it off

Any one of these disables it entirely:

  • sync.auto = off in the repository config.
  • The global --no-sync flag on a command.
  • The TOVIO_NO_SYNC environment variable.

For the conservative middle setting — stay current, publish only when you say so — set sync.auto.push = off (or the TOVIO_SYNC_AUTO_PUSH environment variable) and leave pulling on.

It is quiet, and that is deliberate

Automatic sync never changes a command's exit code and never fails a command. It stays silent except for two things worth interrupting you for: a change in the relay's identity, which could indicate an interception, and a dependency conflict you can actually resolve. Everything else — being offline, a locked keychain — is swallowed.

The trade-off is stated plainly: a background process that cannot fail your build is also one you will not notice failing. If you need certainty that a push happened, push explicitly.