Configuration
Arcana is configured through ~/.arcana/config.json. Most settings have sensible defaults and can be overridden with environment variables.
Config file location
~/.arcana/config.json
Override with ARCANA_HOME:
export ARCANA_HOME=/custom/path
# Config loaded from /custom/path/config.json
Full config reference
{
"$schema": "https://arcana.otnelhq.com/schema/config.json",
"provider": "openai",
"model": "gpt-4o",
"utilityModel": "gpt-4o-mini",
"apiKey": "sk-...",
"dataDir": "~/.arcana/data",
"skillsDirs": ["~/.arcana/skills"],
"memory": {
"enabled": true,
"maxSessions": 1000
},
"cron": {
"enabled": true,
"intervalSeconds": 60
},
"gateway": {
"telegram": { "token": "...", "allowedUsers": ["12345678"] },
"discord": { "token": "...", "allowedChannels": ["987654321"] },
"slack": { "botToken": "xoxb-...", "signingSecret": "...", "allowedChannels": ["C0123"] },
"whatsapp": { "phoneNumberId": "...", "accessToken": "...", "appSecret": "...", "allowedUsers": ["14155551234"] }
}
}
Core settings
| Key | Type | Default | Description |
|---|---|---|---|
provider | string | auto-detected | LLM provider (openai, anthropic, gemini, etc.) |
model | string | auto-detected | Model ID (gpt-4o, claude-sonnet-4, etc.) |
utilityModel | string | main model | Cheap model for extraction and compaction tasks |
apiKey | string | — | Provider API key (prefer env vars instead) |
dataDir | string | ~/.arcana/data | Directory for sessions, memory, and local DB |
Provider auto-detection
If neither provider nor model is set in the config or environment, Arcana auto-detects from available API keys using the models.dev catalog (200+ models across 33 providers).
# Set a provider key — Arcana detects it automatically
export OPENAI_API_KEY=sk-...
arcana run "hello" # Uses OpenAI automatically
Memory settings
| Key | Type | Default | Description |
|---|---|---|---|
memory.enabled | boolean | true | Enable conversation memory and fact extraction |
memory.maxSessions | number | 1000 | Maximum sessions to retain in local DB |
Memory stores conversation history, extracted facts, and skill usage stats in SQLite under ~/.arcana/data/.
Cron settings
| Key | Type | Default | Description |
|---|---|---|---|
cron.enabled | boolean | true | Enable the cron scheduler |
cron.intervalSeconds | number | 60 | How often the scheduler checks for due jobs |
See Cron for the full scheduled jobs reference.
Skills settings
| Key | Type | Default | Description |
|---|---|---|---|
skillsDirs | string[] | ["~/.arcana/skills", "<repo>/skills"] | Directories to scan for SKILL.md files |
See Skills for the full skills reference.
Gateway settings
Configure chat platform adapters. See Gateway for full setup instructions.
| Key | Type | Description |
|---|---|---|
gateway.telegram.token | string | Telegram bot token |
gateway.telegram.allowedUsers | string[] | Allowed Telegram user IDs |
gateway.discord.token | string | Discord bot token |
gateway.discord.allowedChannels | string[] | Allowed Discord channel IDs |
gateway.slack.botToken | string | Slack bot token (xoxb-...) |
gateway.slack.signingSecret | string | Slack signing secret |
gateway.slack.allowedChannels | string[] | Allowed Slack channel IDs |
gateway.whatsapp.phoneNumberId | string | Meta phone number ID |
gateway.whatsapp.accessToken | string | Meta access token |
gateway.whatsapp.appSecret | string | Meta app secret (required for production) |
gateway.whatsapp.allowedUsers | string[] | Allowed phone numbers (with country code) |
Environment variables
All config file settings can be overridden with environment variables:
| Env var | Overrides | Description |
|---|---|---|
ARCANA_HOME | config path | Root directory (default: ~/.arcana) |
ARCANA_PROVIDER | provider | LLM provider |
ARCANA_MODEL | model | Model ID |
ARCANA_API_KEY | apiKey | Provider API key |
OPENAI_API_KEY | apiKey | Fallback when provider is openai |
ARCANA_SKILLS_DIRS | skillsDirs | Skill directories (separated by ;) |
ARCANA_PROXY_KEY | — | Proxy license key (auto-loaded from ~/.arcana/proxy_key) |
Provider-specific env vars
| Env var | Provider |
|---|---|
ANTHROPIC_API_KEY | Anthropic |
GEMINI_API_KEY | Google Gemini |
AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY | Amazon Bedrock |
CLOUDFLARE_ACCOUNT_ID + CLOUDFLARE_API_TOKEN | Cloudflare Workers AI |
XAI_API_KEY | xAI (Grok) |
Use arcana doctor to confirm which keys are detected.
Data directory
Default: ~/.arcana/data/
| Path | Contents |
|---|---|
sessions/ | Session transcripts |
memory.db | SQLite DB with facts, skill stats |
cron-jobs.json | Scheduled job definitions |
workspace-trust.json | Trusted workspace fingerprints |
Trust and security settings
| Setting | Location | Description |
|---|---|---|
arcana trust | CLI command | Trust current workspace for project plugins/tools |
ARCANA_DISABLE_WORKSPACE_TRUST=1 | Env var | Skip trust checks (dev only) |
ARCANA_TRUST_WORKSPACE=1 | Env var | Force-trust for CI |
ARCANA_SERVER_PASSWORD | Env var | Required for non-loopback arcana serve |
ARCANA_GATEWAY_OPEN=1 | Env var | Allow empty gateway allowlists (dev only) |