Luxor Sandboxes · for coding agents

A coding agent in a box, one command away.

lux creates or resumes a Luxor sandbox, starts your coding agent in tmux on the inference provider you picked, and puts you straight into it. Name your agents, switch providers without touching a config file, and never hit a paused box.

install.sh · macOS & Linux
$curl -fsSL https://luxcode.org/install.sh | sh

Installs lux into ~/.local/bin. Needs the Luxor CLI (the tenki command) and jq. llms.txt for agents.

Claude CodeCodexopencodeCopilotGemini CLICrushGoosePiGrok BuildAmpPrime AgentHermesOpenClaw

21 terminal agents and 5 web UIs, each in its own sandbox

What you get

Two pillars. One command.

The Luxor CLI has every primitive: create, resume, exec, ssh, snapshots, volumes. luxcode is the glue that turns them into a coding agent you can reach from anywhere.

The box

Create or resume, never an error

Every command routes through one path that creates a missing sandbox, resumes a paused one and waits out a pending one. Boxes pause by themselves two hours after each create or resume and wake on your next command. New boxes start from a golden image with tmux already in it.

Auto-resumeAuto-pauseGolden imagePersistent volumes2 to 16 vCPULuxor's pre-built images
The agent

Your harness, your provider

Pick a terminal agent or a web UI, then the inference provider: the harness default, or Nebius, Boundless, Baseten, Friendli and OpenRouter, written into the harness's own config inside the box. The agent runs in tmux, so it survives disconnects and pauses; lux <agent> drops you back into the same conversation.

Remote Control for Claude CodetmuxHeadless run --ssh tunnel for web UIsKeys never on a command line
Harnesses

Every coding agent. Each one gets its own box.

lux new asks terminal or web first, then the harness. Boxes are named after the agent and are independent.

Terminal · in tmux

Installed on first use

Claude Code, Codex and opencode come with the base image; the rest install into the box the first time, once.

claudecodexopencodecopilotgeminiqwencrushgoosekimiompadalhermesopenclaw
Luxor images

The box is the harness

Luxor's pre-built sandbox images, pinned and ready. The agent's box is created straight from the image, with its key or a sign-in inside.

pidroidgrokampprime-agenttinyfishanchorhotdata
Web UIs

Served from the box

Reached through an ssh tunnel your browser opens on. Nothing is public until lux <agent> url makes a Luxor preview link.

opencode-web :8086open-webui :8083hermes-web :8088openclaw-web :8087durable-pi :8092
Inference providers

The harness default, or bring your own models

Every provider below works with every harness that takes a custom endpoint. Keys are asked for once and kept locally with mode 0600.

ProviderKeyDefault modelNote
Harness defaultssign in or configure inside the boxharness defaultAnthropic for Claude Code (the only Remote Control), OpenAI for Codex, GitHub for Copilot, Google for Gemini, xAI for Grok Build, Prime Intellect for Prime Agent, …
Nebius Token FactoryNEBIUS_API_KEYmoonshotai/Kimi-K3no Anthropic API: Claude Code goes through a translation proxy in the box
BoundlessBOUNDLESS_API_KEYclaude-fable-5.1Anthropic and OpenAI APIs
BasetenBASETEN_API_KEYmoonshotai/Kimi-K3Anthropic API in beta
FriendliFRIENDLI_TOKENzai-org/GLM-5.3
OpenRouterOPENROUTER_API_KEYanthropic/claude-fable-5.1every model behind one key
Usage

Three commands from zero to a running agent.

$lux help
lux                        pick an agent (or create one) and jump into it
lux new [cli|web|harness]  create: terminal or web → harness → provider → model → size → volume → name
lux <harness> [action]     a harness: your agent for it, or a new one
lux <agent> [action]       a specific agent by name

up        (default)  create or resume the box, start the agent, attach
ssh                  same as up (attach to the running agent)
shell                plain shell in the box
run -- <prompt>      one-shot headless prompt
status               agent, provider, box state
provider             switch inference provider (and model)
model [id]           switch model
size [name]          box size; applies when the box is created
volume [GiB|none]    persistent volume at ~/work: add one, or drop it
url [off]            web UIs: a public Luxor preview link, or remove it
auth                 sign in / store the provider key
down | pause         pause the box (auto-resumed next time)
rm | stop | kill     terminate the box and forget the agent (--purge deletes the volume)

lux ls                     list agents and their boxes
lux pause --all            pause every agent's box
lux rm --all [--purge]     terminate every box and forget every agent
lux image [build [--full]]  the golden image (Luxor base + tmux) new boxes start from
Sizes

small 2 vCPU / 4 GiB · medium 4 / 8 (default) · large 8 / 16 · xlarge 12 / 32 · xxlarge 16 / 64. A box is not resized in place: size applies on the next create.

Volumes

A persistent volume at ~/work (10, 25 or 50 GiB) that survives pause, rm and resizing. The agent starts there. A volume keeps its size for life, so pick generously.

Headless

lux nebius-codex run -- "fix the failing test" runs one prompt and exits. Toolkits take raw arguments: lux tinyfish run -- fetch content get https://…

Pausing

Boxes pause by themselves and wake on your next command

Luxor pauses a box two hours after it was created or last resumed, the workspace cap. Every lux command resumes a paused box first, and the timer starts again. tmux and the agent's session survive it; /tmp and open connections do not. For a job that must run unattended for longer, create the agent with LUXCODE_STICKY=1.

Configuration
LUXCODE_HARNESSclaudeharness used when you omit one
LUXCODE_SIZEmediumdefault box size offered
LUXCODE_VOLUME_GB10default volume size offered (0 = none)
LUXCODE_DISK_GB20root disk
LUXCODE_IMAGE—force one registry image for every harness without its own
LUXCODE_MAX_DURATION2hpause this long after each create or resume (Luxor's cap)
LUXCODE_PAUSE_RETENTION720hhow long a paused box is kept
LUXCODE_STICKY01 creates boxes that never pause by themselves
Get started

Your Luxor account, your keys, your sandbox.

luxcode is free and open source. It is the same tool as colincode, installed as lux.