> ## Documentation Index
> Fetch the complete documentation index at: https://docs.simplefunctions.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Settings reference

> All user-configurable settings — CLI config, portfolio config, heartbeat, watch rules, webhook endpoints.

SimpleFunctions settings live in three places:

* **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`                              |

Read with `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 |

Update via `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`      |

See [Env vars](/reference/env-vars) for runtime environment.
