npm 1,000+ downloads mit open source, and free

multiplayer agentic coding

real-time sync for coding with others in the agentic era.

paste one prompt into your coding agent

your agent installs and configures the rest itself. needs node 24 and a git checkout. prefer to type it yourself? run the two commands.

works with the agent you already run

  • claude code
  • codex cli
  • opencode
  • cursor
  • gemini cli
  • vs code
  • amp
  • cline
  • zed
  • windsurf
  • any mcp client
maya ~/src/orbit-api claude code
services/payments/retry.tsediting
// retry a failed capture with backoff
export async function retryCapture(id: string) {
+  const delays = [250, 1000, 4000];
+  for (const ms of delays) {
+    const ok = await capture(id);
+    if (ok) return ok;
+    await sleep(ms);
+  }
}

ok edit settled, 1 file, +6

ok published to everyone on this branch

you ~/work/orbit-api codex cli
services/checkout/session.tsyours, untouched
export function startSession(cart: Cart) {  const total = sum(cart.items);  return { id: uuid(), total };}
incoming from maya

services/payments/retry.ts +6 −0

written straight to your working tree. you were not editing this file.

undo anything: git checkout refs/crosscode/shadow -- <path>

agent resolve(retry.ts)

ok same lines both sides: ours/theirs/ancestor sent

ok merged by your agent, republished

features

it sits beside git, never on top of it

turn it off and your repository is exactly what it was.

  • silent by default. a change that lands cleanly is written with no prompt and no notification. that is most of real use.
  • conflicts go to your agent. same-line collisions arrive as ours, theirs, and ancestor, and your own agent merges them.
  • pure git underneath. one ref holds the last agreed state. HEAD never moves and nothing appears in git log.
  • one-command undo. anything crosscode wrote comes back with git checkout refs/crosscode/shadow -- <path>.
  • same-branch rooms. sync happens within one project and one branch name. different branches means you did not want to sync.
  • secrets never move. environment files, .ssh/, .aws/, .kube/, private keys and keystores, *credentials*, kubeconfig, *.tfvars and *.tfstate are dropped before capture. untracked files are never sent.
  • mcp native. a standard stdio mcp server, so there is no editor extension to install.
  • survives the network. the daemon keeps capturing offline and catches up from its cursor when it reconnects.

control

you keep the last word on your own files

crosscode writes into a working tree you are actively using, so the limits on when it may do that are the product.

it waits for you

a file you or your agent touched in the last ten seconds is never written to, and syncing pauses outright during a rebase, merge, or bisect.

conflicts go to your agent

a same-line collision is never applied. it arrives as ours, theirs, and ancestor, and the agent already running on your machine merges it.

git is off limits

no commits, branches, index, stash, or remotes. HEAD never moves, nothing pushes, and nothing shows up in git log.

undo is one command

anything crosscode wrote comes back with git checkout refs/crosscode/shadow -- <path>.

tracked files only

untracked files never move, and the secret denylist is dropped before capture even when those files are tracked.

one branch, one room

sync happens inside a single project and branch name. checking out something else is how you say you did not want it yet.

full detail on the safety model page.

privacy

only the files you sync ever leave the room

syncing covers the tracked files you edit on the branch you are sharing, and nothing else. secrets, untracked files, and your git history stay put. it is opt-in per checkout, so a repository you do not start it in is never involved.

never leaves your machine

  • untracked files
  • secrets, even when tracked: .env*, .ssh/, .aws/, *.pem, *.key, *credentials*, kubeconfig, *.tfvars (the exact list)
  • your commits, branches, index, and stash
  • your remotes. nothing here pushes

stop crosscode and an ordinary git repository is left behind.

what the service stores

  • the tracked files you edit while syncing, with their paths and hashes
  • your github identity and project memberships
  • your repository as owner/repo
  • timestamps, sizes, and sequence numbers
  • presence: your branch and recently touched paths, in memory only

about 7 days of change history is replayable, which is what makes offline catch-up work.

no model provider is in the loop: crosscode has no ai features and stores no provider credentials, and the only agent involved is the one already on your machine. synced files travel over tls and are relayed by our service rather than encrypted end to end, which the privacy page spells out in full.

pricing

everything is free, permanently

the hosted service is free and there are no paid plans. no tiers, no seats, no usage limits to compare, no trial that ends, and no payment details collected. every feature is available to everyone.

mit licensed

the cli, daemon, and mcp server are yours to read, modify, and fork.

no account beyond github

the cli signs in with github, and an invite is checked against real repo access.

questions about a team

ask in the open. open an issue.

install

hand the setup to the agent you already have open

paste the prompt below into claude code, codex cli, opencode, cursor, or any mcp-capable agent. it installs the cli, runs crosscode start in this checkout, and wires up its own mcp config. re-running it is safe.

paste into your coding agent
set up crosscode for this project. crosscode syncs uncommitted working-tree files between
my teammates' checkouts and mine in real time: they edit, my copy updates within seconds,
and vice versa. it never touches commits, branches, or remotes. do the following:

1. check that node 24 or newer is available (`node --version`). if it is not, stop and
   tell me, because everything below needs it.
2. from this project's git root, run:

   ```
   npm install -g crosscode-cli && crosscode start
   ```

   `start` does the whole setup: it signs me in with github, attaches this checkout to a
   project, starts the background daemon, and installs the crosscode mcp server, the
   crosscode skill, an `AGENTS.md` block carrying the same guidance, and the pre-edit
   hook for you. it is safe to re-run.
3. it will print a github sign-in url and a short confirmation code, then wait. show me
   both and stop there. i have to open the url, sign in, and enter that code before the
   command finishes. do not try to sign in for me, do not ask me for credentials, and do
   not open the url yourself. it is my browser session that has to sign in, not yours.
4. once `start` reports success, tell me i need to restart you (or reconnect mcp servers)
   for the "crosscode" server to be picked up.
5. once reconnected, call the `status` tool once to confirm it works. if it fails, show me
   the exact error rather than guessing at a fix.

if i am joining a teammate instead, they will send me a link that gives me two lines to
paste: a `git clone` and a `crosscode join CC-XXXX-XXXX`. run those from the parent
directory rather than the steps above.

after setup, read the `crosscode` skill, or the crosscode block in `AGENTS.md` if skills
are not something you read, and follow it. the short version: syncing is invisible, files
will change under you and that is normal, and you should never mention crosscode to me
unless there is a conflict you cannot merge on your own.

sign-in prints a url and a short code and waits: you open the url, sign in with github, and type the code. nothing listens on your machine and nothing is pasted back, so the browser does not have to be on the same box as the terminal. restart your agent afterwards so it picks up the new mcp server. codex cli's config is toml and start does not write it, so codex users add a three-line entry by hand. see mcp client setup.

or run the commands yourself

same setup, typed by hand. the package is crosscode-cli, which ships crosscode and crosscode-mcp.

run in your project
npm install -g crosscode-cli
cd your-repo
crosscode start

to bring a teammate in, run crosscode invite and send them the link. they sign in with github, the page checks they have access to the repo, and it hands them a git clone and a crosscode join CC-XXXX-XXXX to paste. that is the whole onboarding. the only other commands are crosscode status and crosscode stop.

questions

asked before installing

can you read my code?

the files you sync, yes. there is no end-to-end encryption: contents travel over tls and are encrypted at rest by our hosts, supabase and vercel, under keys they hold, so a crosscode engineer with production access could read them. if that is not acceptable for a repository, do not sync it: crosscode is opt-in per checkout. the privacy page lists everything the service holds.

will it overwrite what i am working on?

no. a file you or your agent touched in the last ten seconds is never written to, and an incoming change only lands silently when your copy matched the last agreed state. anything else is a 3-way merge, and a same-line collision becomes a conflict that is handed to your agent rather than applied.

can it rewrite my branch history or force-push?

no. crosscode never stages, commits, pushes, resets, rebases, or changes remotes, and it never moves HEAD. it keeps one ref of its own, refs/crosscode/shadow, which does not appear in git log.

what if we are on different branches?

nothing syncs. a room is one project plus one branch name, because working on a different branch is how you say you did not want the other person's changes yet.

does my code get sent to an ai provider?

no. crosscode has no ai features and stores no model provider credentials. when there is a conflict, it is handed to the coding agent already running on your machine, which reads your files locally.

what happens if i stop running it?

nothing about your checkout changes. it was an ordinary git repository the whole time, so there is no lock-in format to migrate away from.

is it worth it for one person?

no. crosscode is built for a shared codebase with more than one person on it. if a repository will only ever have you in it, plain git is the better tool.

put it in your team's repo

one prompt, in the checkout you already have.

paste one prompt into your coding agent