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.
# 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 --versionCheck 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
Start
Run
jetsyn(orjetsyn login). The CLI requests a device code and a short user code from the sign-in service. - 2
Approve
Your browser opens to
app.jetsyn.ai/cliwith 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
Poll
The CLI polls until you approve, then writes a token to
~/.jetsyn/credentialswith mode 600. - 4
Land
The token names the cell your terminal lands in. Later runs show
signed in as ...and connect straight through.
jetsyn login # approve the terminal in your browser (once)
jetsyn logout # forget the stored sign-inYour 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.
| Command | Runs in your cell | What it does |
|---|---|---|
jetsyn | claude --dangerously-skip-permissions | The default. Sign in if needed, then open Claude Code in your cloud cell. |
jetsyn connect [cell] | claude --dangerously-skip-permissions | Same as bare jetsyn; optionally name a cell. Also aliased jetsyn cloud. |
jetsyn agent [cell] | python -m jetsyn.agent_repl | Chat 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] | bash | Open 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 local | the resolved recommended command | Launch the recommended agent on THIS machine instead of the cloud cell. |
jetsyn login | — | Sign in with your Jetsyn account and verify the stored token. |
jetsyn logout | — | Forget the stored sign-in (~/.jetsyn/credentials). |
jetsyn update | — | Self-update the script to the latest published version. |
jetsyn memory <save\|show\|demo> | python3 -m jetsyn.memory_cli | Read 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.
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 resumeFlags and pass-through args#
| Flag | What it does |
|---|---|
--help, -h | Print usage and exit. |
--version | Print the CLI version and exit. |
--print, -p | Print the resolved recommended command without launching anything. |
--no-launch, --demo | Show 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.
| Transport | When it is used | How it works |
|---|---|---|
| SSH | An 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 tunnel | No 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.
# force a transport (otherwise chosen automatically)
JETSYN_CONNECT=ssh jetsyn connect
JETSYN_CONNECT=https jetsyn connectTip
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.
| Variable | Default | Controls |
|---|---|---|
JETSYN_CONNECT | auto (ssh if a key exists, else https) | Force the transport: ssh or https. |
JETSYN_CELL | your bound cell | The default cell a bare command targets. |
JETSYN_SSH_KEY | ~/.ssh/id_ed25519 | If this key exists, the SSH transport is chosen. |
JETSYN_CRED | ~/.jetsyn/credentials | Where the sign-in token is stored. |
JETSYN_UPDATE_URL | https://jetsyn.ai/cli/jetsyn | Source jetsyn update pulls the latest script from. |
JETSYN_RECOMMENDED_URL | https://jetsyn.ai/cli/recommended.txt | The live loadout jetsyn local resolves and runs. |
See Configuration for the full set of environment variables and their defaults.
Where to go next#
Configuration
Every environment variable the CLI and the cell read, with defaults and when to change them.
Read →Architecture
The cell, the spawn-per-event employee, and the transports the CLI rides underneath.
Read →Surfaces & tiers
Where the Pro direct gateway sits among the web, channel, and integration surfaces.
Read →Build an AI employee
Author the employee that answers when you run jetsyn agent, as plain Claude Code files.
Read →