- CLI config:
~/.config/simplefunctions/config.json— local-only. - Server config: user-owned portfolio, heartbeat, watch, and webhook settings.
- Per-resource config: thesis-level kill rules, watch-rule conditions, webhook endpoint metadata.
CLI config
~/.config/simplefunctions/config.json:
| Key | Type | Purpose |
|---|---|---|
apiKey | string | SimpleFunctions API key (sf_live_...) |
apiUrl | string | Override base URL (default https://simplefunctions.dev) |
kalshiKeyId | string | Kalshi key id |
kalshiPrivateKeyPath | string | Path to Kalshi PEM file |
polymarketWallet | string | Polymarket wallet address |
dataApiKey | string | sf-terminal Data API key (sft_live_...) |
defaultModel | string | Default model for sf agent |
sf status --json. Edit with sf setup or directly.
Portfolio config
Per-user, scoped to autopilot.| Field | Default | Purpose |
|---|---|---|
enabled | false | Master on/off |
executionMode | dry-run | dry-run / live / halted |
cronExpression | 0 7,19 * * * | Schedule |
decisionModel | anthropic/claude-sonnet-4.6 | LLM for tick |
maxTotalExposureCents | 300000 | Risk gate |
maxPerMarketCents | 100000 | Risk gate |
maxDailyLossCents | 15000 | Risk gate |
maxPositions | 20 | Risk gate |
minBalanceCents | 10000 | Risk gate |
maxOrdersPerTick | 3 | Risk gate |
maxSingleOrderCents | 20000 | Risk gate |
cooldownAfterLossTicks | 4 | Risk gate |
maxDrawdownHaltCents | 50000 | Auto-halt threshold |
drawdownWarnCents | 30000 | Soft warn threshold |
excludeCategories | ['sports','esports'] | Categories to skip |
minAdjIy | 100 | Minimum adjusted IY% |
maxLas | 0.15 | Maximum LAS |
minTauDays | 3 | Minimum days to expiry |
crossVenuePairsEnabled | false | Use cross-venue pairs in decisions |
sf portfolio config <key> <value> or PUT /api/portfolio/config.
Heartbeat config (per-thesis)
| Field | Default | Purpose |
|---|---|---|
newsIntervalMin | route default | News scan interval |
xIntervalMin | route default | X/social scan interval |
evalModelTier | route default | Model tier for evaluation |
monthlyBudgetUsd | route default | Budget guardrail |
paused | false | Pause heartbeat evaluation without changing thesis lifecycle status |
smartModel | route default | Smart model selection toggle |
closedLoop | false | Closed-loop entry/exit intent creation |
Watch rule fields
| Field | Purpose |
|---|---|
condition | price_above / price_below / econ_release / gov_action / semantic_match |
threshold | Numeric threshold for price conditions |
windowSeconds | Dedupe window |
channel | email / webhook / telegram |
endpointId | Webhook endpoint to deliver to |
Webhook endpoint fields
| Field | Purpose |
|---|---|
url | HTTPS URL (HTTP rejected) |
label | Human label for the dashboard |
events | Subscribed event types (default: all) |
secret | Signing secret (server-issued) |
state | active / degraded / paused |