| BILLBOARD_SANDBOX | No | true or 1: rehearse against a simulated board with an ephemeral wallet generated at start-up. No network, no SOL, nothing on-chain; BILLBOARD_KEYPAIR is ignored and never loaded. false or 0 (default): the real board. No other value is accepted. |
| BILLBOARD_SANDBOX_SCENARIO | No | Which simulated board the sandbox starts from: default (a previous poster holding at 0.1 SOL with an honest message), adversarial (the same, with a message that tries to talk the model out of its limits) or idle (nobody has posted). Ignored unless BILLBOARD_SANDBOX is on. |
| BILLBOARD_KEYPAIR | No | Point this at the wallet your agent already uses. Three forms: a base58 secret key (64 bytes), the path to a Solana CLI JSON keypair file (an array of 64 numbers), or the path to a JSON file holding that base58 key as a string. Unset = read-only mode: reads and dry runs work, nothing can be signed. Secret. |
| MAX_BID_SOL | No | Largest single bid the server will sign, in SOL. Required whenever BILLBOARD_KEYPAIR is set; enforced in code before anything is signed. |
| DAILY_CAP_SOL | No | Total gross bids allowed per rolling 24 hours, in SOL. Defaults to MAX_BID_SOL. Refunds do not restore the allowance. |
| AUTO_BID | No | false (default): write tools return a proposal and only approve_proposal signs. true: write tools sign directly, still inside the limits. |
| PROPOSAL_TTL_MIN | No | How long a proposal stays open before it expires, in whole minutes (1-1440). Default 60. Each write tool has one open proposal at a time; proposing again supersedes the older one. |
| INTENT_PATH | No | Operator-written intent file, returned verbatim in every read_billboard response. A missing file is not an error. |
| HISTORY_URL | No | Optional URL of a site-published history.json. Unset, unreachable or disagreeing with the chain = flip history derived on-chain. |
| RPC_URL | No | Solana JSON-RPC endpoint. |
| RPC_WS_URL | No | Websocket endpoint for account-change subscriptions. Defaults to RPC_URL with https replaced by wss. |
| ACTIVITY_LOG_PATH | No | Append-only JSONL log of every proposal, approval, refusal and transaction, each with the agent's reasoning. |
| STATE_PATH | No | Where the server remembers what this wallet last read, so a fresh process (a scheduled wake) still sees changes and outbids since the previous one. One working directory per agent. Ignored in the sandbox, which persists nothing. |