Skip to content
Runner · Reference

Configuration reference

Every runner option and env var in one list.

Derived from runner/src/engine/config.ts

The engine reads its configuration from environment variables. loadConfig() validates them at startup and fails fast if anything required is missing.

Rule: the engine config is intentionally small. It wires the runner to a network, a signer, and a set of plugins. Everything a strategy needs (which vault, which market) lives in the plugin, not here.

loadConfig() calls import "dotenv/config", so a .env file in the project root is picked up automatically. Empty values are treated as unset: a VAR= line behaves exactly like the variable being absent, so the default still applies. Run show-config to print the resolved values (secrets masked) before starting the daemon.

Required

VarControlsDefault
RUNNER_PLUGINSCSV of plugin names to load, e.g. "my-strategy,other-strategy". Split on ,, trimmed, empties dropped. This is config.pluginNames. Empty throws config: RUNNER_PLUGINS is empty.none — required
OPERATOR_PRIVATE_KEYThe operator key: an Ed25519 keypair in bech32 form (suiprivkey1...). Read directly by the signer loader, never into config and never printed.none — required

Optional, with defaults

VarControlsDefault
SUI_NETWORKWhich network: testnet \mainnet \devnet. Anything else throws `config: SUI_NETWORK must be testnet\mainnet\devnet`. Selects the network config and the default RPC.testnet
SUI_RPC_URLFullnode RPC URL.the Mysten public fullnode for SUI_NETWORK
LOG_LEVELLog verbosity: debug \info \warn \error. Consumed by the logger; show-config only echoes it.info
HEALTH_PORTPort for the healthcheck HTTP server (daemon only). 0 disables the server.3030
HEALTH_HOSTInterface the healthcheck binds (daemon only). Set 0.0.0.0 when the probe comes from outside the host (Kubernetes, Fly, Railway).127.0.0.1

Advanced overrides

These default to the values baked into the selected network and are rarely needed.

VarControlsDefault
PREDICT_PACKAGE_IDOverrides the Predict package ID.getNetworkConfig(network).predictPackageId
PREDICT_OBJECT_IDOverrides the Predict shared object ID.getNetworkConfig(network).predictObjectId

Plugin-specific vars

The engine imposes no shape on a plugin's own settings — a plugin reads its env directly and validates it. Which vault a plugin operates is one of those settings. The example ladder uses VAULT_ID (and OTHER_VAULT_ID for the chaos control-group, which runs on a second vault):

VAULT_ID=0x...        # the vault this plugin operates

For running several plugins that each drive a distinct vault, the engine also recognizes a namespaced convention, PLUGIN_<NAME_UPPER_SNAKE>_<KEY> (e.g. PLUGIN_MY_STRATEGY_VAULT_ID). When plugins reports a factory-error, a missing PLUGIN_<NAME>_VAULT_ID is the hint it prints.

State backend

State is in-memory by default and lost on restart. To persist ctx.state, export a stateFactory from src/plugins/index.ts; this is a code export, not an env var. show-config reports custom (from src/plugins/index.ts) when one is set, otherwise in-memory (default — lost on restart).