edit local. run remote. keep files synced.
sincronizado ("synchronized") is the missing link for ai-native development. it allows you to use your own local files while running your heavy ai agents and code execution on a powerful vps.
local machines have good editors but weak compute. running multiple ai agents locally kills battery and blocks your terminal.
vps instances have the compute but editing on them is painful. ssh latency lags. remote connections drop. terminal-only editing is limiting when you need rich gui tools.
sincronizado bridges the gap.
- keep your files on your local machine.
- sync them instantly to a vps using mutagen.
- run your ai agent (claude, opencode) on the vps in a persistent tmux session.
you get local speed with server-grade compute.
you love macos but need serious gpu power. edit your training script locally. sinc pushes it to the vps instantly. you run python train.py in the remote session. your laptop stays cool and silent.
bad hotel wifi? no problem. mutagen syncs when the connection allows. tmux keeps your heavy compilation or long-running agent alive even if you disconnect for hours. resume with sinc -r exactly where you left off.
running ollama or huge node builds locally kills battery in 2 hours. offload it all to a cheap hetzner box. keep your local machine purely for editing and browsing.
sinc is the cli for sincronizado. it orchestrates mutagen, ssh, and tmux.
when you run sinc in a project folder:
- checks if a sync session exists. if not, creates one.
- syncs local files to
~/workspace/<folder_name>on remote. - opens an ssh connection.
- attaches to a tmux session named after your project.
- drops you into a shell where your agent is ready to run.
if you disconnect, the session stays alive. run sinc -r to reattach. files keep syncing in the background.
graph TB
subgraph local ["local machine"]
vs[editor]
cli[sinc cli]
end
subgraph sync ["tunnel"]
mut[mutagen daemon]
end
subgraph vps ["remote vps"]
agent[ai agent]
tmux[tmux session]
fs[file system]
end
vs <-->|file changes| cli
cli <-->|mutagen protocol| mut
mut <-->|ssh tunnel| fs
cli <-->|ssh stream| tmux
tmux <--> agent
agent <--> fs
installs the binary to ~/.local/bin (or similar) and sets up config.
curl -fsSL https://sync.micr.dev/install.sh | bashrequires powershell 5+ and administrative privileges for symlinks if you don't use developer mode.
irm https://sync.micr.dev/install.ps1 | iexwant an ai assistant to walk you through install + vps setup? paste this into your llm agent session:
Install and configure sincronizado by following the instructions here:
https://raw.githubusercontent.com/Microck/sincronizado/refs/heads/main/INSTALL.md
if this helped, consider starring the repo ᕙ(⇀‸↼‶)ᕗ
requires bun runtime.
git clone https://github.com/Microck/sincronizado.git
cd sincronizado
bun install
bun run build
# binary is in ./dist/sincrun this once. it creates ~/.config/sincronizado/config.json, checks for ssh keys, and sets up your environment.
setup features:
- vps connection: configure host, user, and port.
- ssh keys: use existing or generate new ed25519 keys.
- custom alias: create a shortcut (e.g. type
opencodeto runsinc). - vps bootstrap: auto-install tmux and create workspace folders.
- security hardening: optional firewall (ufw), fail2ban, and auto-updates setup.
navigate to your project. run sync.
cd ~/my-project
sincthis creates the remote folder ~/workspace/my-project and starts syncing.
detached? network drop? reattach to the existing tmux session.
sinc -rforce a one-way sync for the current project. this requires an active session and asks for confirmation.
sinc push
sinc pullto skip the confirmation prompt:
sinc push --yes
sinc pull --yesstop the sync and kill the remote tmux session.
sinc --kill <session_name>
sinc -k <session_name>
sinc kill <session_name>list active sessions:
sinc --list
sinc -l
sinc listconfig lives at ~/.config/sincronizado/config.json.
example:
{
"vps": {
"hostname": "192.168.1.50",
"user": "ubuntu",
"port": 22,
"keyPath": "~/.ssh/id_ed25519"
},
"sync": {
"mode": "two-way-safe",
"ignore": [
".git",
"node_modules",
"dist",
".next",
"coverage"
],
"remoteBase": "~/workspace"
},
"agent": "opencode"
}remoteBase defines where projects live on the vps. default is ~/workspace.
if you sync ~/code/my-app locally, it lands at ~/workspace/my-app remotely.
create a .syncignore file in your project root to override global ignores. syntax matches .gitignore.
# .syncignore
build/
tmp/
*.log
local:
mutagen: handles file synchronization.sinc --setupattempts to install this.ssh: standard openssh client.
remote (vps):
tmux: required for session persistence.opencodeorclaude: the agent you want to run.git: recommended for version control operations.
bootstrap a fresh vps with our script:
# runs on your local machine, targets the vps
./scripts/setup-vps.shsync conflicts
run mutagen sync list to see status. if stuck, run mutagen sync terminate <id> and restart sinc.
ssh permission denied
check your key is loaded: ssh-add -l. verify you can ssh manually: ssh user@host.
agent not found
ensure your agent binary is in the remote $PATH. check .bashrc or .zshrc on the vps.
latency
mutagen is fast but big node_modules folders slow it down. ignore them in config.json or .syncignore. run npm install on the vps side instead.
MIT ᕙ(⇀‸↼‶)ᕗ