GitHubBlog

Search Documentation

Search for a page in the docs

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).

FieldTypeDefaultDescription
profilesRecord<string, Profile>{ default: { backend: "agent-sdk", model: "claude-sonnet-4-6", loginMethod: "claudeai" } }Named profiles
activeProfilestring"default"Which profile is currently active

Each Profile is a discriminated union on backend:

agent-sdk

FieldTypeDefaultDescription
backend"agent-sdk"
modelstring"claude-sonnet-4-6"Claude model id
loginMethod"api-key" | "claudeai""api-key"Auth
apiKey / baseUrlstringOptional

vercel-ai-sdk

FieldTypeDefaultDescription
backend"vercel-ai-sdk"
providerstring"anthropic"anthropic / openai / google
modelstring"claude-sonnet-4-6"Model id
apiKey / baseUrlstringOptional

codex

FieldTypeDefaultDescription
backend"codex"
modelstring"gpt-5.4"Codex model id
loginMethod"api-key" | "codex-oauth""codex-oauth"Auth
apiKey / baseUrlstringOptional

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.

FieldTypeDefaultDescription
idstringUnique UTA identifier; used as the aliceId prefix
labelstringDisplay name (optional, defaults to id)
presetIdstringOne of the catalog ids: okx, bybit, hyperliquid, bitget, ccxt-custom, alpaca, ibkr-tws
enabledbooleantrueWhether to load this UTA on startup
guardsarray[]Guard configs: [{ type, options }]
presetConfigobject{}User-supplied form values, validated against the chosen preset's own Zod schema

The presetConfig shape varies by preset:

PresetRequired presetConfig fields
okxmode (live | demo), apiKey, secret, password
bybitmode (live | testnet | demo), apiKey, secret
hyperliquidmode (live | testnet), walletAddress, privateKey
bitgetmode (live | demo), apiKey, secret, password
ccxt-customexchange; optional sandbox, demoTrading, apiKey, secret, password, uid, walletAddress, privateKey
alpacamode (paper | live), apiKey, apiSecret
ibkr-twsoptional 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.

FieldTypeDefaultDescription
pairsstring[]["BTC/USD", "ETH/USD", "SOL/USD"]Default trading pairs
intervalnumber5000Tick loop interval (ms)
portnumber3000Legacy port setting

agent.json

AI agent behavior.

FieldTypeDefaultDescription
maxStepsnumber20Max tool-call steps per request
evolutionModebooleanfalseFull project access including Bash
claudeCode.disallowedToolsstring[](see below)Tools blocked from Agent SDK
claudeCode.maxTurnsnumber20Max conversation turns for Agent SDK

Default disallowed tools: Task, TaskOutput, AskUserQuestion, TodoWrite, NotebookEdit, Skill, EnterPlanMode, ExitPlanMode, mcp__claude_ai_Figma__*

connectors.json

Connector configuration.

FieldTypeDefaultDescription
web.portnumber3002Web UI port
mcp.portnumber3001Main MCP server port
mcpAsk.enabledbooleanfalseEnable MCP Ask connector
mcpAsk.portnumberMCP Ask port
telegram.enabledbooleanfalseEnable Telegram bot
telegram.botTokenstringTelegram bot token
telegram.botUsernamestringTelegram bot username (optional, used for mention detection)
telegram.chatIdsnumber[][]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.

FieldTypeDefaultDescription
providerdiscriminated union{ type: "none" }{ type: "ccxt", exchange, apiKey?, apiSecret?, password?, sandbox?, demoTrading?, options? } or { type: "none" }
guardsarray[]Global guards (rarely used)

securities.json

Legacy global securities provider. Same deprecation story as crypto.json — prefer per-account config.

FieldTypeDefaultDescription
providerdiscriminated union{ type: "none" }{ type: "alpaca", apiKey?, secretKey?, paper? } or { type: "none" }
guardsarray[]Global guards

market-data.json

Market data settings.

FieldTypeDefaultDescription
backend"typebb-sdk" | "openbb-api""typebb-sdk"Data engine backend
apiUrlstring"http://localhost:6900"OpenBB API URL (when using openbb-api)
providers.equitystring"yfinance"Default equity data provider
providers.cryptostring"yfinance"Default crypto data provider
providers.currencystring"yfinance"Default currency data provider
providers.commoditystring"yfinance"Default commodity data provider
providerKeysobject{}API keys for premium providers: fred, fmp, eia, bls, nasdaq, tradingeconomics, econdb, intrinio, benzinga, tiingo, biztoc
apiServer.enabledbooleantrueEnable embedded OpenBB-compatible HTTP API
apiServer.portnumber6901Embedded API server port

news.json

News collector settings.

FieldTypeDefaultDescription
enabledbooleantrueMaster switch
intervalMinutesnumber10Fetch interval
maxInMemorynumber2000Max items in memory buffer
retentionDaysnumber7Items older than this not loaded on startup
feedsarray(4 default feeds)RSS/Atom feed definitions

Default feeds: CoinDesk, CoinTelegraph, The Block, CNBC Finance.

heartbeat.json

Heartbeat configuration.

FieldTypeDefaultDescription
enabledbooleanfalseMaster switch
everystring"30m"Check interval
promptstring(structured format)Prompt sent to AI on each heartbeat
activeHoursobject | nullnull{ start: "HH:MM", end: "HH:MM", timezone } or null for always

snapshot.json

Account snapshot settings.

FieldTypeDefaultDescription
enabledbooleantrueEnable scheduled snapshots
everystring"15m"Snapshot interval

compaction.json

Context window management.

FieldTypeDefaultDescription
maxContextTokensnumber200000Context window size
maxOutputTokensnumber20000Max output tokens
autoCompactBuffernumber13000Buffer before triggering compaction
microcompactKeepRecentnumber3Recent entries to keep during micro-compaction

tools.json

Tool enable/disable.

FieldTypeDefaultDescription
disabledstring[][]Tool names to disable globally

webhook.json

Bearer tokens for POST /api/events/ingest. Empty array = endpoint returns 503 (default-deny).

FieldTypeDefaultDescription
tokensWebhookToken[][]Accepted tokens

Each WebhookToken:

FieldTypeDefaultDescription
idstringNon-secret label (used for UI / rotation)
tokenstringThe bearer secret. Treat as high-entropy.
createdAtnumberDate.now()Epoch ms when created

See Webhooks for endpoint usage.

web-subchannels.json

Web UI sub-channel definitions. Array of channel objects.

FieldTypeDefaultDescription
idstringURL-safe identifier (lowercase alphanumeric with - / _)
labelstringDisplay name
systemPromptstringSystem prompt override for this channel
profilestringNamed profile slug from ai-provider-manager.json. Omit to use the global activeProfile.
disabledToolsstring[]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.mddata/brain/persona.md
default/heartbeat.default.mddata/brain/heartbeat.md

On first run, defaults are auto-copied. Your customizations survive updates.