cli reference
five commands, and that is all of them. the cli holds no sync state: it talks to the local daemon over an authenticated loopback http api, and so does the mcp server.
global flags
| flag | purpose |
|---|---|
--json | print compact json on one line instead of pretty-printed json |
--version, -V | print the cli version |
--help | print usage for the program or a command |
crosscode start
sets this checkout up end to end, and is safe to re-run. it signs you in with github, attaches the checkout to a project, starts the daemon, and installs the mcp server, the skill, and the pre-edit hooks for your coding agent.
crosscode start
crosscode start --no-browser # print the sign-in URL instead of opening a browser
use --no-browser on a remote shell or in ci. restart your agent afterwards
so it picks up the new mcp server.
crosscode invite
prints a link that invites a teammate to this project. the link is the whole output.
crosscode invite
# https://www.getcrosscode.dev/join/7f3a9c2e
the join page checks the invitee actually has access to the repository before it hands them anything.
crosscode join <code>
redeems an invite code in this checkout, then sets it up exactly as start
would. the code is a positional argument in the form printed by the join page.
crosscode join CC-7F3A-9C2E
crosscode join CC-7F3A-9C2E --no-browser
crosscode status
shows what this checkout's daemon is doing.
crosscode status --json
{
"value": {
"branch": "main",
"connected": true,
"paused": false,
"cursor": 412,
"pendingConflicts": 0,
"peers": []
}
}
peers lists who else is working on this branch and which paths they
touched recently. presence is in-memory in the service, so it reflects right now
rather than history.
crosscode stop
stops the daemon for this checkout. syncing stops; nothing is uninstalled and nothing in your repository changes.
crosscode stop
output envelope
with --json, success is wrapped in value so it is symmetric
with the failure shape, and an agent can branch on which key is present. progress goes
to stderr, so stdout stays a single parseable object.
{"value": {"branch": "main", "connected": true, ...}}
{"error": {"code": "NOT_A_GIT_REPOSITORY", "message": "Crosscode runs inside a Git repository", "hint": "cd into your project first."}}
without --json the value is printed bare, because the envelope is only
noise for a human reader. common error codes are
NOT_A_GIT_REPOSITORY, USAGE_ERROR, and
COMMAND_FAILED.
the mcp server
the same package installs a crosscode-mcp binary, which is what your
coding agent connects to. it exposes four tools, status,
conflicts, resolve, and pause, and every
response carries any pending conflicts whether the tool was asked for them or not. see
mcp client setup.