CLI
The exponential CLI signs a machine in, runs sessions from the terminal and turns a server into a device that runs your team’s sessions.
Install
Section titled “Install”curl -fsSL https://exponential.at/install.sh | sh# self-hostedcurl -fsSL https://exponential.at/install.sh | EXP_INSTANCE=https://issues.example.com shLinux (x86_64, arm64) and macOS (Apple Silicon). The script checks the binary’s checksum, installs it to ~/.local/bin/exponential, turns on auto-update, signs you in, installs the daemon as a service and prints the machine’s readiness (the same block as exponential doctor). The web app’s Add device dialog gives you the same command with a one-time install token (EXP_INSTALL_TOKEN=expi_…), which skips the approval step.
| variable | effect |
|---|---|
EXP_INSTANCE |
your instance’s URL |
EXP_INSTALL_TOKEN |
one-time expi_… token from Add device (15 minutes) |
EXP_TOKEN |
sign in with an API key (expu_…, Settings → Security) |
EXP_DEVICE_LABEL |
the machine’s name |
EXP_NO_DAEMON=1 / EXP_NO_AUTOUPDATE=1 |
skip the daemon service / auto-update |
EXP_INSTALL_DIR |
install somewhere other than ~/.local/bin |
You also need git and a coding agent: Claude Code on your PATH, or Codex (the machine downloads its own pinned build).
Sign in
Section titled “Sign in”exponential login prints a code and a link to <instance>/auth/device; approve it in any signed-in browser. It works the same over SSH. Signing in does not make the machine a device: only the daemon does (exponential status tells you which).
Run as a daemon
Section titled “Run as a daemon”exponential daemon install writes a systemd user unit (Linux, with lingering turned on where allowed, else it prints sudo loginctl enable-linger $USER) or a launchd agent (macOS). The machine then appears under Devices, and sessions started on it from any client run there with the same launcher as the desktop app. Its name, sharing, agent logins, launch defaults and updates are all in Device settings on every client. A restarted daemon claims its unfinished sessions back.
Other devices
Section titled “Other devices”--device <name|id> on code or run starts the session on another of your devices (it must be online); --follow tails it. sessions log streams a transcript from the device that ran it over eNet, end-to-end encrypted.
exponential devicesexponential code EXP-42 --device "build box" --agent claude --followexponential sessions message 1a2b3c4d "Use the staging database instead"Updating
Section titled “Updating”Auto-update is on unless you opted out: commands check once a day, the daemon every 15 minutes and restarts between turns. exponential update updates now; exponential update --auto off turns it off. Release notes: Changelog.
Commands
Section titled “Commands”| command | does |
|---|---|
login [--instance <url>] [--install-token <t>] [--no-browser] |
Sign in (device code, approved in any browser) |
logout |
Sign out and drop local credentials |
whoami |
Show the signed-in account |
status |
Account + device + daemon + tooling summary |
doctor |
Check git and the agent CLIs |
code <ISSUE> [options] |
Start a session on an issue |
run <prompt> [options] |
Run a team’s saved prompt |
devices [--team <team-id>] |
Your devices: online, agents, running sessions |
sessions [--device <d>] [--status <s>] [--agents] |
Sessions, newest first |
sessions show|log|message|stop|end <id> Inspect, tail (--follow), message, interrupt or end one |
|
mcp list|connect|set-secret|disconnect |
Team MCP servers + your connection to each |
motion import|compile|decompile|check|render <file> |
eUI Motion: convert, validate and preview animations |
daemon [--foreground] [--label <name>] |
Run the device daemon (runs the sessions queued here) |
daemon install|uninstall|status |
Manage the systemd/launchd service |
update [--auto on|off] |
Self-update now, or switch auto-update |
uninstall [--yes] |
Remove the daemon service and delete this binary |
version |
Print the CLI version |
Full usage
Section titled “Full usage”These blocks are the CLI’s own help text (exponential help, exponential sessions help, …).
exponential — Exponential from your terminal
Usage: exponential <command> [options]
Commands: login [--instance <url>] [--install-token <t>] [--no-browser] Sign in (device code, approved in any browser) logout Sign out and drop local credentials whoami Show the signed-in account status Account + device + daemon + tooling summary doctor Check git and the agent CLIs code <ISSUE> [options] Start a session on an issue run <prompt> [options] Run a team's saved prompt devices [--team <team-id>] Your devices: online, agents, running sessions sessions [--device <d>] [--status <s>] [--agents] Sessions, newest first sessions show|log|message|stop|end <id> Inspect, tail (--follow), message, interrupt or end one mcp list|connect|set-secret|disconnect Team MCP servers + your connection to each motion import|compile|decompile|check|render <file> eUI Motion: convert, validate and preview animations daemon [--foreground] [--label <name>] Run the device daemon (runs the sessions queued here) daemon install|uninstall|status Manage the systemd/launchd service update [--auto on|off] Self-update now, or switch auto-update uninstall [--yes] Remove the daemon service and delete this binary version Print the CLI version
Options for code/run: --agent claude|codex --model <m> --effort <e> --detach (headless; steer it from the web) --device <label|id> start it on ANOTHER device instead (see `devices`); with --account <profile> and --follow (tail it)Options for run: --team <team-id> --prompt <text> (appended to the prompt's body in the session's first message)Environment: EXP_INSTANCE, EXP_TOKEN (API key expu_… from Settings → Security, or a session token; non-interactive login), EXP_INSTALL_TOKEN (one-time expi_… token from the web's Add device dialog), EXP_LOG=debugsessions
Section titled “sessions”Usage: exponential sessions [<command>]
[list] [--device <label|id>] [--status queued|running|idle|ended] [--agents] [--limit n] Threads you can see, newest first (--agents: your agent conversations) show <id> One session: status, device, branch, its thread's issues log <id> [--follow] Print the transcript (--follow keeps streaming a live session) message <id> <text…> Message a session; an idle one wakes up (`-` reads stdin) stop <id> Interrupt the session's current turn (it stays, idle) end <id> End the session (and its sub-sessions)
<id> = the session UUID, or a unique prefix of a thread's or agent's.Usage: exponential mcp <command> [--team <team-id|slug>]
list Your teams' MCP servers and your connection to each connect <server> Connect an OAuth server (opens the web settings page) set-secret <server> Store your key for a server that takes one (read from stdin, never argv) disconnect <server> Delete your credential for a server
<server> is a server name or id. Credentials are held by the server for you(every device, remote starts, triggers); owners add servers underSettings → MCP servers.motion
Section titled “motion”Convert, check and preview Motion animations (the dialect is in the Motion reference).
Usage: exponential motion <command> <file> [options]
Commands: import <file.json|file.lottie> [--out f.json] Lottie/dotLottie → validated Lottie (images inlined) compile <file> [--out f.json] Dialect → Lottie decompile <file> [--out f.json] Lottie/dotLottie → dialect check <file> Validate a dialect or Lottie file render <file> [--frame N | --at ms] [--size WxH] [--out f.png] render <file> --gif [--fps N] [--size WxH] [--out f.gif]