Skip to content

Commands

This page lists every current Controli command and flag.

Host a tunnel session

bash
controli host tunnel --workspace main --public-url https://cli.example.com

Starts the configured workspace shell and serves the browser terminal locally for a named Cloudflare Tunnel. This is the recommended transport for long sessions.

FlagRequiredDefaultPurpose
--workspace <name>YesWorkspace key from ~/.controli/state.json.
--public-url <url>YesPublic Cloudflare Tunnel hostname.
--listen <addr>No127.0.0.1:8765Local HTTP service address for cloudflared.
--room <name>NoWorkspace nameRoom label shown to the guest.
--relay-url <url>NoConfigured relay or default relayWorker URL used only for 7-digit invite lookup.
--name <name>NoguestGuest label stored in the invite.
--minutes <n>No1440Session lifetime in minutes. Use 0 for no fixed Controli expiry.
--shell <path>NoWorkspace shell or default shellShell to start for this session.
--persistNotrueKeep macOS/Linux shells in a persistent tmux session when available.
--persist-name <name>Nocontroli-<workspace>Stable tmux session name for reattaching.
--print-onlyNofalsePrint a code without starting the shell.
--long-codeNofalsePrint the full self-contained code instead of a 7-digit code.
--password <value>NogeneratedJoin password required with the 7-digit code.
--mode fullNofullGuest can type after host approval.
--mode viewNoGuest can watch only.
--mode approveNoHost approves each input chunk.
--approve=falseNotrueSkip the first host approval prompt.
--audit-log <path>No~/.controli/audit/<session>.jsonlCustom audit log path.
--audit-log offNoDisable audit logging.
--audit-inputNofalseStore typed input text in audit records.
--status-interval 30sNodisabledPrint session counters while hosting.
--downloadsNofalseAllow browser-terminal downloads from <workspace>/controli-drive.
--download-code <value>NoCONTROLI_DOWNLOAD_CODELet guests authorize downloads with this secret code; wrong or blank codes fall back to host approval.
--s4d-code <value>NoCONTROLI_S4D_CODEAlias for --download-code.
--download-approve=falseNotrueDeprecated; use --download-code or host approval.

Examples:

bash
controli host tunnel --workspace main --public-url https://cli.example.com --minutes 0
controli host tunnel --workspace main --public-url https://cli.example.com --persist-name main
controli host tunnel --workspace main --public-url https://cli.example.com --mode view
controli host tunnel --workspace main --public-url https://cli.example.com --listen 127.0.0.1:9000
controli host tunnel --workspace main --public-url https://cli.example.com --approve=false

Host a relay fallback session

bash
controli host share --workspace main

Starts the configured workspace shell, registers a 7-digit invite code plus a join password, and sends terminal traffic through the Durable Object relay. Use this for short sessions or fallback testing; long relay sessions can exhaust Cloudflare's free Durable Objects duration.

FlagRequiredDefaultPurpose
--workspace <name>YesWorkspace key from ~/.controli/state.json.
--room <name>NoWorkspace nameRoom label shown to the guest.
--relay-url <url>NoConfigured relayOverride the relay for this share.
--name <name>NoguestGuest label stored in the invite.
--minutes <n>No120Session lifetime in minutes. Use 0 for no fixed Controli expiry.
--shell <path>NoWorkspace shell or default shellShell to start for this session.
--persistNotrueKeep macOS/Linux shells in a persistent tmux session when available.
--persist-name <name>Nocontroli-<workspace>Stable tmux session name for reattaching.
--print-onlyNofalsePrint a code without starting the shell.
--long-codeNofalsePrint the full self-contained code instead of a 7-digit code.
--password <value>NogeneratedJoin password required with the 7-digit code.
--mode fullNofullGuest can type after host approval.
--mode viewNoGuest can watch only.
--mode approveNoHost approves each input chunk.
--approve=falseNotrueSkip the first host approval prompt.
--audit-log <path>No~/.controli/audit/<session>.jsonlCustom audit log path.
--audit-log offNoDisable audit logging.
--audit-inputNofalseStore typed input text in audit records.
--status-interval 30sNodisabledPrint session counters while hosting.
--downloadsNofalseAllow browser-terminal downloads from <workspace>/controli-drive.
--download-code <value>NoCONTROLI_DOWNLOAD_CODELet guests authorize downloads with this secret code; wrong or blank codes fall back to host approval.
--s4d-code <value>NoCONTROLI_S4D_CODEAlias for --download-code.
--download-approve=falseNotrueDeprecated; use --download-code or host approval.

Examples:

bash
controli host share --workspace main --minutes 480 --mode full
controli host share --workspace main --mode view
controli host share --workspace main --mode approve
controli host share --workspace main --room support-a --status-interval 30s
controli host share --workspace main --downloads
controli host share --workspace main --long-code
controli host share --workspace main --print-only
controli host share --workspace main --audit-log off

Join a session

Browser join for tunnel sessions:

text
https://controli-relay.rgcsekaraa.workers.dev/join

The guest enters the 7-digit code and join password from the host and the browser opens the terminal.

CLI join:

bash
controli join 1234567

Resolves the code and opens the local browser terminal by default on Windows, macOS, and Linux. Use CLI join for relay fallback sessions or diagnostics.

When the host enables --downloads, files placed under <workspace>/controli-drive can be downloaded from the browser terminal's Download button by entering a path relative to that folder. If the host configured a download code, the browser asks for it; blank or wrong codes fall back to host approval. Other folders are not downloadable.

Only one guest can be connected to a live session at a time. The same 7-digit code can be used again while the invite has not expired. Reconnects from the same guest keep existing approval; a different guest requires fresh host approval before input can reach the shell.

FlagDefaultPurpose
--relay-url <url>Default relayRelay to use when resolving a 7-digit code.
--password <value>promptJoin password required with the 7-digit code.
--web-terminalautomaticForce the local browser terminal.
--consolefalseRender directly in the current console for debugging.

Examples:

bash
controli join 1234567
controli join 1234567 --password abcd-1234-wxyz
controli join 1234567 --console
controli join 1234567 --web-terminal
controli join 1234567 --relay-url wss://controli-relay.example.workers.dev

If no code is passed, Controli prompts for one:

bash
controli join

Configure the relay

bash
controli relay configure --url wss://controli-relay.example.workers.dev

Stores the relay URL in ~/.controli/state.json.

Check relay status

bash
controli relay status

Prints the configured relay URL and checks the relay /health endpoint.

Deploy the bundled relay

bash
controli relay deploy

Runs the Cloudflare Worker deploy command from a Controli source checkout.

Update Controli

bash
controli update

Downloads the latest release asset for the current OS and CPU.

FlagDefaultPurpose
--repo <owner/name>rgcsekaraa/controliDownload from a different GitHub repository.

Example:

bash
controli update --repo rgcsekaraa/controli

On Windows, the updater downloads a .new.exe file because Windows locks the running executable.

Common workflows

Mac host, Windows guest with tunnel mode:

bash
controli host tunnel --workspace main --public-url https://cli.example.com --minutes 0 --mode full

The Windows guest runs:

powershell
& "$env:LOCALAPPDATA\Controli\controli.exe" join 1234567

View-only support session:

bash
controli host share --workspace main --mode view

Sensitive session with input approval:

bash
controli host share --workspace main --mode approve --audit-input

Known relay issue with short code lookup:

bash
controli host share --workspace main --long-code

Released under the MIT license.