JJETSYNGet in touch

Configuration

The environment variables and config files you reach for when building on Jetsyn: the runtime and agent tuning knobs, the CLI transport settings, and the file contracts inside a cell.

Jetsyn ships with working defaults, so most of these you never touch. When you do need to reach in, configuration comes in two forms: environment variables that tune the runtime and choose how the CLI reaches your cell, and a small set of files inside the cell that carry the contracts your employees read and write.

Two forms of configuration#

Everything a builder touches falls into three groups. Two are environment variables, one on each side of the wire; the third is a handful of files on the cell's /workspace volume that every surface agrees on.

  • Runtime and agent tuning shape how an employee process launches inside the cell: which model and effort it runs at, when it is considered stalled, and what a Pro terminal opens into.
  • CLI transport lives in your shell and decides how jetsyn reaches the cloud cell: the connect mode, the box, the key, the default cell, the token, and the endpoints.
  • Cell files are the config-file contracts on the cell volume: the shared company record, the Brain the strategist writes, the live roster, the intent output seam, and the agent-to-UI render file.

Runtime and agent tuning#

These control how an employee launches inside the cell. The headless runtime, the one that answers gateway events, and the interactive jetsyn agent REPL each carry their own launch knobs, so you can tune one without disturbing the other.

VariableDefaultWhat it controls
JETSYN_AGENT_RUNTIMEcliSelects the agent runtime. cli is the proven default; sdk is reserved (see below).
JETSYN_MODELclaude-opus-4-8Model the headless CLI employee launches with.
JETSYN_EFFORTxhighReasoning effort for the headless CLI employee.
JETSYN_STALL_TIMEOUT_SECONDS600The only kill condition: the child is stopped only after stdout has been silent this long. There is no total-runtime cap.
JETSYN_AGENT_MODELclaude-opus-4-8Model for the interactive jetsyn agent REPL.
JETSYN_AGENT_EFFORTxhighReasoning effort for the interactive REPL.
JETSYN_AGENT_CWD/workspaceWorking directory the interactive REPL starts in.
JETSYN_AGENT_PERMISSIONbypassPermissionsPermission mode for the interactive REPL.
JETSYN_PRO_TERMINAL_COMMAND/app/bin/jetsyn-claudeThe command a new Pro or cell terminal launches. Swapping it is a UI-only change, the seam for a custom console.
tune the headless employee
# Set in the cell environment; the defaults are already sane
export JETSYN_MODEL=claude-opus-4-8
export JETSYN_EFFORT=xhigh
export JETSYN_STALL_TIMEOUT_SECONDS=600

Availability

Available now: the cli runtime, the proven default that every employee runs on. Coming soon: the sdk runtime; JETSYN_AGENT_RUNTIME=sdk is reserved and not yet enabled, so leave it at cli.

CLI transport#

These live in the shell where you run jetsyn. Mediation, whether you get a direct or a conversational session, is decided by the in-cell command, never by the transport, so these variables only affect how the CLI reaches your cell. When JETSYN_CONNECT is unset the CLI picks SSH if an SSH key is present, otherwise HTTPS.

VariableEffect
JETSYN_CONNECTForce the transport: ssh or https. Wins over the auto-selection when set.
JETSYN_BOXThe host the SSH transport connects to.
JETSYN_SSH_KEYPath to the SSH identity the SSH transport uses.
JETSYN_CELLThe default cell slug to use when a command omits it.
JETSYN_TOKENThe credential the HTTPS bridge authenticates with. Read from the environment, never from the command line.
JETSYN_APIBase URL of the backend the CLI calls for sign-in and control-plane requests.
JETSYN_UPDATE_URLWhere jetsyn update fetches a new copy of the script. The download is validated before it overwrites the installed script.
JETSYN_RECOMMENDED_URLWhere the CLI reads the recommended version and loadout.
force a transport and a default cell
export JETSYN_CONNECT=https
export JETSYN_CELL=acme
jetsyn agent          # connects to the acme cell over HTTPS

Tip

The bridge reads JETSYN_TOKEN from the environment and never from argv, so your credential stays out of shell history and out of the process list. Keep it in your environment, not inline on the command.

Files in the cell#

All customer data is folders on the cell's /workspace volume. A few files there are not data but contracts: every surface agrees on their shape, so an employee that writes one and a surface that reads it stay in sync with no shared code.

FileContract
workspace.jsonThe one shared company record that the web /agent app and the CLI both read, at the /workspace root. Whitelisted keys only, capped at 20KB.
Brain/spine.jsonConfig-in-memory the strategist writes: mission, goals, roster, tasks. Every white-label employee reads its own slice, so two tenants get two behaviors with no code change.
Brain/STRATEGY.md, Brain/PLAN.mdThe human-readable strategy and plan the strategist authors alongside spine.json.
Brain/roster.jsonThe live employee-to-session store: who exists, whether each is active, and each employee's durable session id. A re-run driver or scheduler reads this to know who to resume.
runs/<task>/intents/*.jsonThe credential-isolated output seam. An employee writes JSON intent files here; a privileged parent drains them and calls your tools, so the employee never holds a token.
.claude/agents/<id>/ui.jsonThe agent-to-UI contract: how an employee renders itself into any surface.

workspace.json

The shared record is a small, whitelisted object. Only name, idea, slug, status, and plan are accepted; anything else is dropped. Write it cell-canonical and it shows up identically on the web workspace and the CLI.

workspace.json
{
  "name": "Acme Robotics",
  "idea": "AI employee for our support inbox",
  "slug": "acme",
  "status": "active",
  "plan": "business"
}

The agent-to-UI contract

Each employee renders itself by writing a ui.json under .claude/agents/<id>/. It is version 1 of a closed contract: a fixed set of block primitives, text, markdown, list, kv, link, preview, and action. Writes are atomic, so a surface never reads a half-written file, and unknown keys are rejected, which is what lets every surface render every employee without per-employee UI code.


Where to go next#