Last updated 2026-05-07

Runner Configuration

Every runner setting is an environment variable. There are no config files. Set them when starting the process:

PORT=5000 RUNNER_WORKSPACE=/repos/my-project stax runner start

Variables

VariableDefaultDescription
PORT4800HTTP server port.
RUNNER_WORKSPACEprocess.cwd()Path to the project containing .github/workflows/.
RUNNER_SECRETS_KEY(none)Master password for AES-256-GCM secrets at rest.
RUNNER_NO_CACHE0Set to 1 to skip the action cache and re-download each time.
RUNNER_CACHE_TTL_MS86400000 (24h)Maximum age of cached marketplace actions, in milliseconds.
RUNNER_ACTIONS_CACHE~/.local/share/local-runner/actions-cache/Cache directory for marketplace actions.
RUNNER_SANDBOX_DIR/tmp/runner-sandboxesBase directory for sandbox workspaces.
RUNNER_WORKFLOW_CACHE~/.local/share/local-runner/workflow-cache/Cache directory for remote reusable workflows.
GITHUB_TOKEN / GH_TOKEN(none)Token for downloading private actions / workflows and populating secrets.GITHUB_TOKEN.
RUNNER_R2_ACCOUNT_IDActivates the Cloudflare R2 secrets backend.
RUNNER_R2_ACCESS_KEY_IDR2 access key ID.
RUNNER_R2_SECRET_ACCESS_KEYR2 secret access key.
RUNNER_R2_BUCKETstax-secretsR2 bucket name.
RUNNER_R2_ENDPOINTderived from account IDOverride the R2 endpoint URL.
RUNNER_GITHUB_REPOderived from git remoteRepo for the GitHub secrets backend, in owner/repo form.
SOPS_BINARYauto-detectedOverride the sops binary used by the SOPS + age backend.
SOPS_AGE_KEY(none)Inline age private identity used by SOPS. Useful for CI-only identities.
SOPS_AGE_KEY_FILEstandard SOPS pathsAge identity file used by SOPS and Stax.
SOPS_AGE_KEY_CMD(none)Command that prints an age identity, for remote key brokers or password managers.
STAX_GH_WEBHOOK_SECRET(none)HMAC secret for POST /api/sync/inbox GitHub webhook verification.

Default directories

~/.local/share/local-runner/
├── actions-cache/ Marketplace action clones
├── cache/ actions/cache filesystem cache
├── secrets/ <hash>.json per workspace
└── workflow-cache/ Remote reusable workflow clones
/tmp/runner-sandboxes/
└── <run-id>/ Per-run sandbox workspaces (auto-cleaned)

Workspace-local state

.stax/
├── vault.json Repo-backed SOPS / vault binding, committed when used
├── sync.json GitHub sync + deployment ledger config
├── issues.json Local GitHub issue cache
├── sync-log.jsonl Sync audit log
└── deployments.jsonl Deployment ledger records

Multi-workspace setups

Each instance of the runner serves exactly one workspace. To support several at once, run multiple instances on different ports:

PORT=4800 RUNNER_WORKSPACE=/repos/web stax runner start
PORT=4801 RUNNER_WORKSPACE=/repos/api stax runner start
PORT=4802 RUNNER_WORKSPACE=/repos/infra stax runner start

Each instance has its own .artifacts/ directory, its own secrets file, and its own sandbox tree (the sandbox base directory is shared, but per-run subdirectories never collide).