JJETSYNGet in touch

The CLI

The Pro direct gateway. One self-updating shell script signs you in once, then drops you into your own cloud cell from any terminal, with no Python, agent SDK, or API key on your laptop.

The jetsyn CLI is the Pro direct gateway: a single self-updating shell script that signs you in once, then reaches into your own cloud cell from any terminal. Nothing but the script lives on your machine. Your files, your memory, your compute, and the model credentials all stay in the cell, so the CLI is only a pipe, never a place your data or keys are stored.

Install#

The CLI is one self-contained bash script. Its only hard requirements are bash and curl; python3 is needed only for the secure 443 transport described below. Download it, make it executable, and put it on your PATH.

install
# bash + curl required
curl -fsSL https://jetsyn.ai/cli/jetsyn -o /usr/local/bin/jetsyn
chmod +x /usr/local/bin/jetsyn

# confirm it runs
jetsyn --version

Check your installed version with jetsyn --version, and the latest published version with curl https://jetsyn.ai/cli/version.txt. To upgrade in place, run jetsyn update: it downloads the newest script, validates it, and only then overwrites itself. A quiet once-a-day check nudges you when a newer version is out. Nothing installs automatically.

Sign in#

The first cloud command signs you in with a browser-based device-authorization grant. You approve the terminal once; a long-lived token is stored locally and every later run reuses it with no prompt.

  1. 1

    Start

    Run jetsyn (or jetsyn login). The CLI requests a device code and a short user code from the sign-in service.

  2. 2

    Approve

    Your browser opens to app.jetsyn.ai/cli with the code prefilled, so an already-signed-in browser just shows Authorize. On another machine, visit that URL and enter the code shown in your terminal.

  3. 3

    Poll

    The CLI polls until you approve, then writes a token to ~/.jetsyn/credentials with mode 600.

  4. 4

    Land

    The token names the cell your terminal lands in. Later runs show signed in as ... and connect straight through.

bash
jetsyn login     # approve the terminal in your browser (once)
jetsyn logout    # forget the stored sign-in

Your token never touches a command line

jetsyn login verifies the stored token with the sign-in service; bare jetsyn and jetsyn connect trust it without a round-trip for a fast start. The token rides in a curl config on stdin when verifying, and in the JETSYN_TOKEN environment variable on the 443 transport, so it never appears in argv where other local users could read it. jetsyn logout deletes the stored credentials.

Commands#

Every cloud command runs one command inside your cell and hands your terminal to it. The mediation you get, driving the model directly versus talking to an employee, is decided entirely by that in-cell command, not by the transport underneath.

CommandRuns in your cellWhat it does
jetsynclaude --dangerously-skip-permissionsThe default. Sign in if needed, then open Claude Code in your cloud cell.
jetsyn connect [cell]claude --dangerously-skip-permissionsSame as bare jetsyn; optionally name a cell. Also aliased jetsyn cloud.
jetsyn agent [cell]python -m jetsyn.agent_replChat one standard Jetsyn agent through the Agent SDK. It keeps context across turns and can fan work out to its own sub-agents.
jetsyn shell [cell]bashOpen a plain shell inside your cloud cell.
jetsyn resume [cell] [session]claude --resume [session]Resume a saved session. Bare jetsyn resume opens the picker; pass a session UUID to resume it directly.
jetsyn localthe resolved recommended commandLaunch the recommended agent on THIS machine instead of the cloud cell.
jetsyn loginSign in with your Jetsyn account and verify the stored token.
jetsyn logoutForget the stored sign-in (~/.jetsyn/credentials).
jetsyn updateSelf-update the script to the latest published version.
jetsyn memory <save\|show\|demo>python3 -m jetsyn.memory_cliRead or write your cloud cell's Brain from the terminal.

`connect` versus `agent`. connect opens bare Claude Code, so you drive the model directly over the folders. This is the direct, unmediated door. agent runs a single standard employee you converse with. This is a conversational door: you talk to the employee and it does the work. Both ride the same transport; only the in-cell command differs.

The cell argument. Every cloud command takes an optional cell name. Omitted, the CLI targets the cell bound to your sign-in, then the stored workspace, then JETSYN_CELL. An explicit jetsyn connect <cell> argument always wins. Cell names are restricted to [a-z0-9_-].

`jetsyn memory`. jetsyn memory show prints your cell's Brain; jetsyn memory save "<text>" [path] writes a note, with the content base64-encoded in transit so any text is shell-safe. Both run python3 -m jetsyn.memory_cli against the same store your employee reads and writes.

bash
jetsyn                 # sign in if needed, open Claude Code in your cell
jetsyn agent           # chat one standard employee in your cell
jetsyn shell finance   # a plain shell in the "finance" cell
jetsyn resume          # pick a saved session to resume

Flags and pass-through args#

FlagWhat it does
--help, -hPrint usage and exit.
--versionPrint the CLI version and exit.
--print, -pPrint the resolved recommended command without launching anything.
--no-launch, --demoShow the intro preview but do not launch.
-- <args>Pass everything after -- through to the resolved local command.

--help, --version, and --print run on their own and exit immediately. --no-launch and any -- <args> shape the local launch (jetsyn local and the resolved local command); the cloud subcommands hand your terminal straight to your cell. jetsyn local runs a live-recommended loadout that resolves from JETSYN_RECOMMENDED_URL, falling back to a baked-in default; use jetsyn --print to see exactly what it will run.

The two transports#

Cloud commands reach your cell over one of two transports, chosen automatically. You never configure the endpoint; the CLI picks based on whether an SSH key is present.

TransportWhen it is usedHow it works
SSHAn SSH key is present (JETSYN_SSH_KEY, default ~/.ssh/id_ed25519)Opens an SSH session to the host, which launches your in-cell command inside your cell. The operator path; requires host access.
Secure 443 tunnelNo SSH key (the any-computer default)A small Python stdlib bridge opens one WebSocket to your cell over port 443, starts a bash session, and streams your terminal to the cell's PTY. Works from any network, with no key and no host access.

Override the choice with JETSYN_CONNECT. An explicit value wins; otherwise the CLI uses SSH when a key exists and the 443 tunnel when it does not.

bash
# force a transport (otherwise chosen automatically)
JETSYN_CONNECT=ssh   jetsyn connect
JETSYN_CONNECT=https jetsyn connect

Tip

The 443 tunnel needs only python3 on your machine. No SSH key, no host allowlist, no network configuration. It is the path that lets you reach the same cell from any computer, and it answers with the exact same files as the SSH path because both end at one cell.

Environment#

A handful of variables tune the client. Defaults are sensible; you rarely set any of these by hand.

VariableDefaultControls
JETSYN_CONNECTauto (ssh if a key exists, else https)Force the transport: ssh or https.
JETSYN_CELLyour bound cellThe default cell a bare command targets.
JETSYN_SSH_KEY~/.ssh/id_ed25519If this key exists, the SSH transport is chosen.
JETSYN_CRED~/.jetsyn/credentialsWhere the sign-in token is stored.
JETSYN_UPDATE_URLhttps://jetsyn.ai/cli/jetsynSource jetsyn update pulls the latest script from.
JETSYN_RECOMMENDED_URLhttps://jetsyn.ai/cli/recommended.txtThe live loadout jetsyn local resolves and runs.

See Configuration for the full set of environment variables and their defaults.


Where to go next#