Configuration Reference
All configuration lives in data/config/ as JSON files. Missing files are auto-created with defaults on startup. All config files support hot-reload — changes take effect on the next request without restart.
ai-provider-manager.json
Named AI profiles plus an active-profile pointer. Supersedes the legacy model.json + api-keys.json pair (migrated automatically on first load).
| Field | Type | Default | Description |
|---|---|---|---|
profiles | Record<string, Profile> | { default: { backend: "agent-sdk", model: "claude-sonnet-4-6", loginMethod: "claudeai" } } | Named profiles |
activeProfile | string | "default" | Which profile is currently active |
Each Profile is a discriminated union on backend:
agent-sdk
| Field | Type | Default | Description |
|---|---|---|---|
backend | "agent-sdk" | — | — |
model | string | "claude-sonnet-4-6" | Claude model id |
loginMethod | "api-key" | "claudeai" | "api-key" | Auth |
apiKey / baseUrl | string | — | Optional |
vercel-ai-sdk
| Field | Type | Default | Description |
|---|---|---|---|
backend | "vercel-ai-sdk" | — | — |
provider | string | "anthropic" | anthropic / openai / google |
model | string | "claude-sonnet-4-6" | Model id |
apiKey / baseUrl | string | — | Optional |
codex
| Field | Type | Default | Description |
|---|---|---|---|
backend | "codex" | — | — |
model | string | "gpt-5.4" | Codex model id |
loginMethod | "api-key" | "codex-oauth" | "codex-oauth" | Auth |
apiKey / baseUrl | string | — | Optional |
accounts.json
UTA (Unified Trading Account) definitions. Array of UTA objects, preset-driven — you pick a presetId from the broker preset catalog and fill presetConfig with the values that preset's Zod schema requires.
| Field | Type | Default | Description |
|---|---|---|---|
id | string | — | Unique UTA identifier; used as the aliceId prefix |
label | string | — | Display name (optional, defaults to id) |
presetId | string | — | One of the catalog ids: okx, bybit, hyperliquid, bitget, ccxt-custom, alpaca, ibkr-tws |
enabled | boolean | true | Whether to load this UTA on startup |
guards | array | [] | Guard configs: [{ type, options }] |
presetConfig | object | {} | User-supplied form values, validated against the chosen preset's own Zod schema |
The presetConfig shape varies by preset:
| Preset | Required presetConfig fields |
|---|---|
okx | mode (live | demo), apiKey, secret, password |
bybit | mode (live | testnet | demo), apiKey, secret |
hyperliquid | mode (live | testnet), walletAddress, privateKey |
bitget | mode (live | demo), apiKey, secret, password |
ccxt-custom | exchange; optional sandbox, demoTrading, apiKey, secret, password, uid, walletAddress, privateKey |
alpaca | mode (paper | live), apiKey, apiSecret |
ibkr-tws | optional host (default 127.0.0.1), port (default 7497), clientId (default 0), accountId |
Auto-migration. If accounts.json is in the legacy {type, brokerConfig} shape, OpenAlice migrates it on first startup, backing up the original to accounts.json.backup-pre-preset. See Accounts & Brokers — Migration.
engine.json
Core engine settings.
| Field | Type | Default | Description |
|---|---|---|---|
pairs | string[] | ["BTC/USD", "ETH/USD", "SOL/USD"] | Default trading pairs |
interval | number | 5000 | Tick loop interval (ms) |
port | number | 3000 | Legacy port setting |
agent.json
AI agent behavior.
| Field | Type | Default | Description |
|---|---|---|---|
maxSteps | number | 20 | Max tool-call steps per request |
evolutionMode | boolean | false | Full project access including Bash |
claudeCode.disallowedTools | string[] | (see below) | Tools blocked from Agent SDK |
claudeCode.maxTurns | number | 20 | Max conversation turns for Agent SDK |
Default disallowed tools: Task, TaskOutput, AskUserQuestion, TodoWrite, NotebookEdit, Skill, EnterPlanMode, ExitPlanMode, mcp__claude_ai_Figma__*
connectors.json
Connector configuration.
| Field | Type | Default | Description |
|---|---|---|---|
web.port | number | 3002 | Web UI port |
mcp.port | number | 3001 | Main MCP server port |
mcpAsk.enabled | boolean | false | Enable MCP Ask connector |
mcpAsk.port | number | — | MCP Ask port |
telegram.enabled | boolean | false | Enable Telegram bot |
telegram.botToken | string | — | Telegram bot token |
telegram.botUsername | string | — | Telegram bot username (optional, used for mention detection) |
telegram.chatIds | number[] | [] | Allowed Telegram chat IDs |
crypto.json
Legacy global crypto provider. New installs typically leave this as { "provider": { "type": "none" } } and use accounts.json per-account brokerConfig instead. Kept for backwards compatibility.
| Field | Type | Default | Description |
|---|---|---|---|
provider | discriminated union | { type: "none" } | { type: "ccxt", exchange, apiKey?, apiSecret?, password?, sandbox?, demoTrading?, options? } or { type: "none" } |
guards | array | [] | Global guards (rarely used) |
securities.json
Legacy global securities provider. Same deprecation story as crypto.json — prefer per-account config.
| Field | Type | Default | Description |
|---|---|---|---|
provider | discriminated union | { type: "none" } | { type: "alpaca", apiKey?, secretKey?, paper? } or { type: "none" } |
guards | array | [] | Global guards |
market-data.json
Market data settings.
| Field | Type | Default | Description |
|---|---|---|---|
backend | "typebb-sdk" | "openbb-api" | "typebb-sdk" | Data engine backend |
apiUrl | string | "http://localhost:6900" | OpenBB API URL (when using openbb-api) |
providers.equity | string | "yfinance" | Default equity data provider |
providers.crypto | string | "yfinance" | Default crypto data provider |
providers.currency | string | "yfinance" | Default currency data provider |
providers.commodity | string | "yfinance" | Default commodity data provider |
providerKeys | object | {} | API keys for premium providers: fred, fmp, eia, bls, nasdaq, tradingeconomics, econdb, intrinio, benzinga, tiingo, biztoc |
apiServer.enabled | boolean | true | Enable embedded OpenBB-compatible HTTP API |
apiServer.port | number | 6901 | Embedded API server port |
news.json
News collector settings.
| Field | Type | Default | Description |
|---|---|---|---|
enabled | boolean | true | Master switch |
intervalMinutes | number | 10 | Fetch interval |
maxInMemory | number | 2000 | Max items in memory buffer |
retentionDays | number | 7 | Items older than this not loaded on startup |
feeds | array | (4 default feeds) | RSS/Atom feed definitions |
Default feeds: CoinDesk, CoinTelegraph, The Block, CNBC Finance.
heartbeat.json
Heartbeat configuration.
| Field | Type | Default | Description |
|---|---|---|---|
enabled | boolean | false | Master switch |
every | string | "30m" | Check interval |
prompt | string | (structured format) | Prompt sent to AI on each heartbeat |
activeHours | object | null | null | { start: "HH:MM", end: "HH:MM", timezone } or null for always |
snapshot.json
Account snapshot settings.
| Field | Type | Default | Description |
|---|---|---|---|
enabled | boolean | true | Enable scheduled snapshots |
every | string | "15m" | Snapshot interval |
compaction.json
Context window management.
| Field | Type | Default | Description |
|---|---|---|---|
maxContextTokens | number | 200000 | Context window size |
maxOutputTokens | number | 20000 | Max output tokens |
autoCompactBuffer | number | 13000 | Buffer before triggering compaction |
microcompactKeepRecent | number | 3 | Recent entries to keep during micro-compaction |
tools.json
Tool enable/disable.
| Field | Type | Default | Description |
|---|---|---|---|
disabled | string[] | [] | Tool names to disable globally |
webhook.json
Bearer tokens for POST /api/events/ingest. Empty array = endpoint returns 503 (default-deny).
| Field | Type | Default | Description |
|---|---|---|---|
tokens | WebhookToken[] | [] | Accepted tokens |
Each WebhookToken:
| Field | Type | Default | Description |
|---|---|---|---|
id | string | — | Non-secret label (used for UI / rotation) |
token | string | — | The bearer secret. Treat as high-entropy. |
createdAt | number | Date.now() | Epoch ms when created |
See Webhooks for endpoint usage.
web-subchannels.json
Web UI sub-channel definitions. Array of channel objects.
| Field | Type | Default | Description |
|---|---|---|---|
id | string | — | URL-safe identifier (lowercase alphanumeric with - / _) |
label | string | — | Display name |
systemPrompt | string | — | System prompt override for this channel |
profile | string | — | Named profile slug from ai-provider-manager.json. Omit to use the global activeProfile. |
disabledTools | string[] | — | Additional tool names to disable on top of the global tools.disabled list |
Default / Override Pattern
| Default (git-tracked) | User override (gitignored) |
|---|---|
default/persona.default.md | data/brain/persona.md |
default/heartbeat.default.md | data/brain/heartbeat.md |
On first run, defaults are auto-copied. Your customizations survive updates.