CoreLayer Docs
Reference

Config File

Reference for the files CoreLayer actually reads at startup.

CoreLayer does not use one monolithic config file. Settings are split by sensitivity so that configuration without secrets can be synced or shared while credentials stay protected.

Files

FileLocationHolds
config.json~/.jarvis/config/Provider list, active model, routing rules, defaults, adjudication, tick
routing.json~/.jarvis/config/Reserved path; routing rules currently live in config.json (routingRules), and nothing reads this file yet
credentials.json~/.jarvis/security/API keys per provider (0600 on POSIX; legacy config/credentials.json still read)
mcp-servers.json~/.jarvis/config/MCP server definitions
storage.json~/.jarvis/config/Storage mode and database credentials

JARVIS_HOME relocates the whole tree. In sidecar mode the shell may set JARVIS_APP_DATA_DIR, JARVIS_LOG_DIR, and SQLITE_DB_PATH.

config.json

{
  "version": 1,
  "activeProvider": "mimo",
  "activeModel": "mimo-v2.5-pro",
  "providers": [
    {
      "id": "mimo",
      "name": "MiMo",
      "type": "openai_compatible",
      "baseURL": "https://token-plan-ams.xiaomimimo.com/v1",
      "enabled": true
    }
  ],
  "routingRules": [],
  "defaults": {
    "temperature": 0.7,
    "maxTokens": 4096,
    "maxSteps": 20,
    "streamTimeout": 120000,
    "turnTimeout": 180000,
    "memoryMinScore": 0.3
  },
  "adjudication": {
    "enabled": false,
    "maxRetries": 1
  },
  "tick": {
    "enabled": true,
    "intervalMinutes": 30
  }
}
FieldMeaning
versionMust be 1
activeProvider / activeModelDefault routing target
providers[]id, name, type (openai_compatible or ollama), baseURL, enabled
routingRules[]taskType → modelId, optional conditions
defaultsSampling, step budget, timeouts, memory score floor
adjudicationAdversarial judge: enabled (default false), maxRetries (0–5)
tickPeriodic autonomous tick: enabled, intervalMinutes (5–240), optional model/provider

Constraint: maxSteps is capped at 100 and turnTimeout is what bounds a turn regardless of the model.

storage.json

{
  "storageMode": "local",
  "dbConfig": {
    "supabaseUrl": "https://your-project.supabase.co",
    "supabaseServiceKey": "…",
    "postgresUrl": "postgresql://user:pass@host:5432/corelayer"
  }
}

See Storage.

mcp-servers.json

{
  "version": 1,
  "servers": [
    {
      "id": "filesystem",
      "name": "filesystem",
      "transport": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"],
      "enabled": true,
      "permissions": { "read": true, "write": true, "delete": false, "bulkWrite": false },
      "riskPolicy": { "low": "auto", "medium": "notify", "high": "confirm", "critical": "deny" }
    }
  ]
}

See MCP Servers.

Environment variables

Provider keys are resolved from the environment first, then credentials.json, then nothing. The recognized names per provider:

ProviderAPI keyBase URL
deepseekDEEPSEEK_API_KEYDEEPSEEK_BASE_URL, DEEPSEEK_API_BASE
openaiOPENAI_API_KEYOPENAI_BASE_URL, OPENAI_API_BASE_URL
anthropicANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKENANTHROPIC_BASE_URL
geminiGEMINI_API_KEY, GOOGLE_API_KEYGEMINI_BASE_URL
groqGROQ_API_KEYGROQ_BASE_URL
mimoMIMO_API_KEY, XIAOMI_API_KEYMIMO_API_URL, XIAOMI_API_URL
qwenDASHSCOPE_API_KEY, QWEN_API_KEY—
ollama— (local)OLLAMA_BASE_URL, OLLAMA_HOST

Additional environment variables: DATABASE_URL, STORAGE_MODE, JARVIS_HOME, JARVIS_RUNTIME_MODE, DAEMON_PORT.

Validation

config.json is validated on read. Invalid values fall back to defaults and a warning is logged; the file is not overwritten.

Removed fields

Older docs described models, mcp, storage, voice, permissions, daemon, and runtime sections inside config.json, plus ${ENV_VAR} substitution. None of those are read. Provider credentials come from the chain above, storage mode from storage.json, MCP servers from mcp-servers.json, and permissions are not configurable.

Next Steps

On this page