every machine · every agent

~/Code,
everywhere.

One real ~/Code on every machine and every agent host. You edit on your laptop, an agent edits on a Linux box, and the same project state shows up everywhere. No commits, no copied keys, no setup.

It just works.
Get started
curl -fsSL https://install.bowline.sh | sh

macOS app · Linux CLI. Then run bowline setup --root ~/Code.

codex agent· editing ~/Code/acme/webTypeScriptthinking…
Reading the panel modules and their tests so the tabbed layout wires in cleanly and stays green.
Read 4 files
Adding the view layer first — a segmented tab bar and a click-to-copy affordance — then I'll wire it in.
Wrote 90 lines · SegmentedTabBar.tsx
Now the copy affordance, modeled on a silent copy overlay but kept in pure components.
Wrote 55 lines · CopyableText.tsx
Wiring the tabs into the status panel and persisting the active tab in the store.
Edited StatusPanel.tsx
Edited panelStore.ts
Adding a regression test for the tab refactor before I move on.
Wrote 31 lines · panel.test.tsx
Running the suite to catch anything the refactor moved.
Ran pnpm test · 37 passed
Green — and it's already on every de
~/Code/acme/webready
live project · +212 12
web/Views/SegmentedTabBar.tsxnew+900
web/Views/CopyableText.tsxnew+550
web/panel/StatusPanel.tsx+249
web/store/panelStore.ts+123
web/tests/panel.test.tsxnew+310
MacBook Pro✓ synced
web/Views/SegmentedTabBar.tsxnew+900
web/Views/CopyableText.tsxnew+550
web/panel/StatusPanel.tsx+249
web/store/panelStore.ts+123
web/tests/panel.test.tsxnew+310
linux-builder-01✓ synced
web/Views/SegmentedTabBar.tsxnew+900
web/Views/CopyableText.tsxnew+550
web/panel/StatusPanel.tsx+249
web/store/panelStore.ts+123
web/tests/panel.test.tsxnew+310
Mac Studio✓ synced
web/Views/SegmentedTabBar.tsxnew+900
web/Views/CopyableText.tsxnew+550
web/panel/StatusPanel.tsx+249
web/store/panelStore.ts+123
web/tests/panel.test.tsxnew+310
Real ~/Code, not a mount
Env follows the project
Agents edit live, synced

What is Bowline?

Bowline is a developer workspace sync tool that keeps one real ~/Code directory (source, config, opaque Git state, uncommitted work, and encrypted .env files) in sync across every machine and every coding-agent host, as ordinary local directories rather than a mount, so a project is ready to run wherever you open it.

There is no re-clone and no copied keys. You edit on your laptop, an agent edits on a Linux box, and the same working state shows up everywhere.

It understands code, so node_modules and caches do not cross machines. And if Bowline ever went away, your code is still just files on disk.

From install to synced in three commands

No manifests, no keys to copy between machines. One command per machine, then the code is just there.

01

Install

Point bowline at the ~/Code you already have. It reads your folder and writes nothing into your projects.

curl -fsSL https://install.bowline.sh | sh

Then run bowline setup --root ~/Code.

02

Add a machine

Approve the device once. Your whole ~/Code namespace appears on the new machine before every byte has landed.

bowline connect linux-01
linux-01 approved · ~/Code synced
03

Work

Source, config, and .env are already there. Run the project, or hand it to an agent. It just works.

cd ~/Code/acme/web && pnpm dev
dev server ready on :3000

What bowline does for your code

Real files, real tools, no ceremony. Here is what changes after one install.

Real directories, not a mount

~/Code is an ordinary folder on local disk. Your editor, shell, Git, and package managers treat it like any other directory, because it is one. No FUSE mount, no symlink tricks, no remote filesystem to babysit.

~/Code
acme/
  web/          next.js   · synced
  api/          fastapi   · synced
experiments/
  bowline/          rust      · synced

Your env follows the project

.env, .env.local, and .env.* travel with the project, encrypted end-to-end. Open it on a second machine or hand it to an agent, and pnpm dev just runs. No bowline shell, no re-pasting API keys.

acme/web/.env
OPENAI_API_KEY=sk-live-…
STRIPE_SECRET=sk-live-…
DATABASE_URL=postgres://…

Agents edit your live project

An agent edits ~/Code directly, by default. Every change lands in your real folder and syncs to all your machines instantly, while the agent moves on to the next file. Want a gate for risky work? Run the agent in an isolated overlay and review before it applies.

agentfix auth callback race
src/auth.ts+18 -4
src/session.ts+6 -1
applied to ~/Codesynced to 3 devices

Knows what's stale before work starts

bowline status flags stale bases, missing env, and degraded sync before an agent spends an hour working on the wrong tree.

$ bowline status
acme/webenv synced
acme/api3 commits behind
agent-authbase stale

Built so you can hand an agent the keys

bowline carries source, env, and secrets between your machines and agents. Here is what keeps that safe.

Recoverable

Nothing an agent does is silent or lost.

Agents edit your live ~/Code by default, so you don't have to babysit them. Every change is snapshotted and synced to your machines, and offline divergence becomes a conflict record instead of an overwrite. See it, resume it, or roll it back, and gate the risky runs behind review when you want to.

Encrypted in transit and at rest

Workspace files, .env files, and secrets sync end-to-end to approved devices and agent hosts. The relay carries ciphertext; the hosted service cannot read secret values.

Device trust, not blanket access

Each machine and agent host is approved explicitly, from a session you already trust, and can be revoked at any time.

Recovery keys you hold

Generate and verify a recovery key so you never lose access to your own workspace, even if you lose a machine.

Stop syncing your code by hand.

Get started
curl -fsSL https://install.bowline.sh | sh

What bowline is not

bowline has a narrow job and stays out of the rest of your workflow. That is the point.

Not a Git wrapper

Git stays your tool for commits, branches, and remotes. bowline syncs the working state around it, including uncommitted edits, untracked files, and local-only notes.

Not Dropbox for code

bowline understands code. node_modules doesn't cross machines, dependencies regenerate locally, generated folders follow policy. A photo-sync app doesn't know what a lockfile is.

Not a cloud devbox

Your laptop is first-class. bowline syncs real local directories instead of moving you into a remote VM you have to live inside.

Pricing

Free during beta

Everything's free while we're in beta. These are the plans we'll launch with. We won't bill you until then, and we'll give you plenty of notice first.

Solo
Free

one developer, always

For one developer across all their machines.

  • Unlimited projects in ~/Code
  • Up to 3 trusted devices
  • Encrypted env and secrets sync
  • Community support
Propopular
Free

in beta · paid at launch

For developers running agents across machines.

  • Everything in Solo
  • Unlimited devices and agent hosts
  • Agent workspace handoff with work review
  • Priority sync
  • Email support
Team
Free

in beta · custom at launch

For teams sharing a workspace namespace.

  • Everything in Pro
  • Shared workspace policy
  • Audit logs (planned)
  • SSO and device governance (planned)
  • Dedicated support

Common questions

Short answers to the things developers ask first.

Is my code encrypted?

Yes. Workspace files, .env files, and secrets sync end-to-end to approved devices and agent hosts. The hosted service carries ciphertext and cannot read secret values.

What actually syncs?

Source, config, opaque Git state, .env files, secrets, and selected non-Git working files. node_modules, caches, and generated folders do not cross machines; they regenerate locally.

Does bowline change my Git workflow?

No. Git stays your tool for commits, branches, and remotes. bowline syncs the working state around it, including uncommitted and untracked work.

What if two machines edit the same file offline?

bowline records an explicit conflict and keeps both versions. There is no silent last-writer-wins. You resolve it with a clear review step.

Do agents run against my live folder?

By default, yes, and that is the point. An agent edits your live ~/Code directly and the changes sync to every machine, so you don't have to review and apply every run. When you want a gate for risky work, run the agent in an isolated overlay and use bowline work review and bowline work accept before changes land.

Which platforms are supported?

macOS today, with a native menu bar app for ambient status, plus Linux hosts for agents and build machines.

How do I sync my code and .env across machines without git commits?

Install bowline and log in on each machine. Your ~/Code stays in sync as ordinary local files: source, config, opaque Git state, uncommitted edits, and encrypted .env files. You never commit half-done work or copy keys just to move work between machines.

How do I run a coding agent on a remote server with my local env?

Trust the server as an agent host once. Your real ~/Code and encrypted .env files rematerialize there, so the agent can run the project immediately and its edits sync back to every machine. For risky work, run it in an isolated overlay and use bowline work review and bowline work accept before changes land.

Is Bowline like Dropbox or Syncthing for code?

No. Those tools sync bytes without understanding code. bowline knows node_modules and caches should not cross machines, respects lockfiles, and keeps generated folders on policy. Offline divergence becomes a recorded conflict with both versions kept, never a silent last-writer-wins.

Does Bowline replace Git?

No. Git stays your tool for commits, branches, and remotes. bowline syncs the working state around it, including uncommitted and untracked work, so you stop using commits just to move files between machines.

What does not sync?

node_modules, build caches, and generated folders do not cross machines; they regenerate locally. Everything you actually author or rely on for the project does cross machines: source, config, opaque Git state, uncommitted edits, selected non-Git working files, and encrypted .env files.

How is Bowline different from Codespaces or Gitpod?

Those move you into a remote VM you have to live inside. bowline keeps real local directories on the machines you already use, so your laptop stays first-class. If bowline went away, your code is still just files on disk, with no mount to unwind.

ready when you are

Your ~/Code, on every machine and every agent.

Install bowline and your projects follow you. It just works.

Get started
curl -fsSL https://install.bowline.sh | sh

macOS app · Linux CLI. Then run bowline setup --root ~/Code.