Bidirectional project sync over SSH. A simple, vendor-neutral tool to push local project code to a remote machine and pull outputs back — without Git, SDKs, or editor lock-in.
When training models or running long jobs on remote machines (Vast.ai, EC2, bare metal, lab servers):
- Git is too slow for iteration
- Editors require SSH sessions
- Outputs stay remote
- Re-downloading data is painful
- SDKs add lock-in
Keep a local project directory and a remote project directory in sync — safely and predictably.
- Nothing more.
- What remote-sync does
- Pushes local → remote paths
- Pulls remote → local paths
- Uses rsync over SSH
- Works with any system that has SSH
- Supports raw SSH commands (Vast.ai compatible)
What remote-sync does NOT do
- ❌ Launch machines
- ❌ Manage infrastructure
- ❌ Install dependencies
- ❌ Run training jobs
- ❌ Replace your editor
It is intentionally minimal.
- Python 3.9+
- SSH client (ssh)
- rsync
On macOS / Linux, these are usually already installed.
Development / local install (recommended)
From the repository root:
pip install -e .
This installs the remote-sync CLI in editable mode.
Verify:
remote-sync --help
remote-sync uses a YAML configuration file.
Default config file name
remote-sync.yaml
You can override it with --config.
remote_sync:
ssh:
user: root
host: 1.2.3.4
port: 23456
push_paths:
- local: .
remote: /workspace/projects/biomass-experiment
pull_paths:
- remote: /workspace/projects/biomass-experiment/output
local: ./outputs
ignore_paths:
- .git
- __pycache__
- outputs
- data
- kaggle.json
- Use git path command to update the remote
- Support for storing creds in session variable
- Support for rysnc + custom command (basically run rysnc + a following command)