Get

Configuration

For a managed instance, precedence is environment variables → instance config → global user config → defaults. aircode start options are persisted into the instance config before the service starts. Foreground aircode serve options override the environment for that process only.

The global file is ~/.config/aircode/config.json. Managed instance files live at ~/.config/aircode/instances/<id>.json; they are not placed in project directories. Secret-bearing files use mode 0600. The native Windows foreground options are listed in the Windows CLI reference.

Per-instance launch configuration

aircode start --projects-root /srv/workspaces --host 127.0.0.1 --port 7860 \
  --password-file ~/.config/aircode/workspaces-password

Dedicated flags cover root, name, host, port, public URL, every password input mode, and Relay. Any additional schema-backed value can be persisted with a repeatable --set key=value; values use JSON when valid:

aircode start --set maxSessions=64
aircode start --set workflows.maxConcurrent=2
aircode start --set 'browserAllowedHosts=["docs.example.com","*.internal.test"]'

Use --json for unattended provisioning. Its output never reveals an existing password; it includes a password only when this invocation generated it.

Common settings

Env config.json Default Purpose
AIRCODE_HOST host Tailscale IP, else 127.0.0.1 Bind address (never 0.0.0.0 by default)
AIRCODE_PORT port 7860 (auto-scan for a new instance) Port. A persisted or explicitly set busy port fails instead of moving
AIRCODE_AUTH_PASSWORD authPassword generated Access password. Empty string disables auth (dev only)
AIRCODE_PROJECTS_ROOT projectsRoot launch cwd Directory whose subfolders are selectable projects
AIRCODE_MAX_SESSIONS maxSessions 32 Concurrent session cap
AIRCODE_SESSION_IDLE_TTL_MS sessionIdleTtlMs 21600000 Hibernate completed sessions after 6 idle hours; 0 also disables capacity eviction
AIRCODE_DEFAULT_PERMISSION_MODE defaultPermissionMode bypass Default agent permission mode
AIRCODE_DEFAULT_EXECUTION_MODE defaultExecutionMode local Default session environment (local or docker)
AIRCODE_DOCKER_ENABLED dockerEnabled true Expose the optional Docker execution backend
AIRCODE_DOCKER_IMAGE dockerImage aircode-session-runtime:local Optional Docker worker image
AIRCODE_DOCKER_NETWORK dockerNetwork aircode-runtime Dedicated worker bridge
AIRCODE_DOCKER_CONTROL_PORT dockerControlPort AirCode Ø port + 1000 Stable capability-scoped worker callbacks
updateChannel stable Release channel (stable / beta)

Session hibernation stops only detached runtimes whose latest turn has a durable completion marker and a resumable transcript. Sessions that are working, awaiting input, remotely controlled, or owned by a workflow stay running. At the session cap, AirCode Ø hibernates the oldest eligible runtime immediately. The conversation remains in History and resumes normally.

Engine binaries (claudeBin, codexBin, …) and per-feature settings (browser, knowledge, orchestration, token optimization) are documented in the in-product settings and accept the same env/file precedence.

See Docker sandbox for worker limits, networking and the complete Docker configuration.

Files & directories

Path Contents
~/.aircode/versions/<v> the product (immutable, checksummed)
~/.aircode/current symlink to the active version
~/.config/aircode/config.json global user defaults
~/.config/aircode/instances/<id>.json per-instance config, including its password (0600)
~/.config/aircode/providers.env provider credentials shared by the Unix user (0600)
~/.config/systemd/user/aircode@.service one generated systemd template for every managed instance
~/.local/state/aircode/instances/<id>/ isolated runtime, tunnel, and session state
~/.local/state/aircode/relay-account.json managed Relay account credential shared by the Unix user (0600)

Updates never touch instance config or state.

Multiple instances

The canonical root determines the default identity. Different roots naturally produce different instances; --name disambiguates multiple instances for one root. Each receives its own port, password/no-password policy, tmux namespace, state, and tunnel identity.

aircode start --projects-root /srv/acme --name staff --port 7860 --generate-password
aircode start --projects-root /srv/acme --name demo  --host 127.0.0.1 --port 7861 --no-password --relay private
aircode ps -a

Lifecycle commands accept the name, full or short ID, canonical root, or the current directory. A root selector is intentionally rejected as ambiguous when several named instances use it; select the name or ID.

Multi-user machines

Each OS user owns a separate registry, global defaults, provider credentials, managed Relay authorization, and set of systemd user services. Within that user, every path-scoped instance still has its own port, password, state, and sessions. aircode start creates and enables the correct template instance; the older aircode service install command is retained only for compatibility.

License

aircode license activate <key>
aircode license status
aircode license deactivate     # frees the seat for another machine

Offline machines stay fully functional (30-day validation grace; perpetual licenses never phone home). See pricing for what restricted mode means — short version: launching new sessions pauses, nothing else.