This page is the practical reference for the settings users change most often. For a conceptual walkthrough, start with Configuration.
Two homes:
config.yaml (system-owned): daemon, auth, google, browser, timezone, cron. Read at startup; the daemon treats the file as read-only.
- Settings database (dashboard-managed): everything else. Edited in the dashboard, applied live. A legacy block in
config.yaml is imported once at the next restart; after that the database wins.
| Key | Type | Default | Notes |
|---|
port | number | 3142 | Dashboard + daemon port |
data_dir | string | ~/.jarvis | Root data directory |
db_path | string | ~/.jarvis/jarvis.db | SQLite vault path |
brain_domain | string | unset | External origin (explicit scheme) embedded in enrollment tokens |
listen | string | unset | unix:/abs/path.sock for unix-socket mode instead of TCP |
drain_deadline_ms | number | 75000 | Graceful shutdown budget |
| Key | Type | Default | Notes |
|---|
insecure_open_access | boolean | false | Escape hatch: serve dashboard/API with no auth. Setup only. |
The old auth.token no longer exists; access is JWT-only via jarvis enroll.
| Key | Type | Default | Notes |
|---|
client_id | string | unset | OAuth client for Gmail/Calendar |
client_secret | string | unset | Account authorization itself happens in the dashboard |
| Key | Type | Default | Notes |
|---|
local | boolean | true | false on headless servers: browser actions route to sidecars |
| Key | Type | Default | Notes |
|---|
timezone | string | system | IANA zone for cron and goal windows |
| Key | Type | Default | Notes |
|---|
morning | string | 0 7 * * * | Morning cycle |
evening | string | 0 20 * * * | Evening cycle |
hourly | string | 37 * * * * | Hourly cycle |
JARVIS_PORT, JARVIS_HOME, JARVIS_BRAIN_DOMAIN, JARVIS_WAKE_ENGINE, JARVIS_REALTIME_VOICE, JARVIS_TELEMETRY, DO_NOT_TRACK. LLM configuration is intentionally not readable from env vars.
The shapes below are what the settings API stores. Change them in Settings; they hot-apply.
| Key | Type | Default | Notes |
|---|
name | string | "" | Your name for personalization |
Configured in Settings → LLM. API keys live in the encrypted keychain and are never returned by the API.
| Key | Type | Default | Notes |
|---|
providers | map | {} | Named entries: { kind, api_key or base_url }. Kinds: anthropic, openai, groq, gemini, ollama, openrouter, nvidia, openai_compatible, litellm |
default | string | unset | Single-model mode: "<provider>:<model>" |
tiers | map | {} | Multi-tier mode: conversation, high, medium, low |
prompt_cache | boolean | true | Prompt caching, per provider |
| Key | Type | Default | Notes |
|---|
enabled | boolean | false | Voice output |
provider | enum | edge | edge, elevenlabs, sarvam |
voice | string | en-US-AriaNeural | Edge voice |
rate, volume | string | +0% | Percentage strings |
elevenlabs.* | object | | api_key, voice_id, model, stability, similarity_boost |
sarvam.* | object | | api_key, model, language, speaker, sampling_rate |
| Key | Type | Default | Notes |
|---|
provider | enum | openai | openai, groq, local, sarvam |
openai.*, groq.* | object | | api_key, model |
local.* | object | | endpoint (default http://localhost:8080), model, server_type (whisper_cpp or openai_compatible) |
sarvam.* | object | | api_key, model, language |
| Key | Type | Default | Notes |
|---|
wake_engine | enum | openwakeword | openwakeword, webspeech, auto |
realtime.enabled | boolean | false | GPT Realtime speech-to-speech mode |
realtime.model | string | gpt-realtime-2 | |
realtime.reasoning_effort | enum | low | minimal to xhigh |
realtime.max_session_minutes | number | 10 | |
realtime.monthly_budget_usd | number | unset | |
| Key | Type | Notes |
|---|
telegram | object | enabled, bot_token, allowed_users (numbers) |
discord | object | enabled, bot_token, allowed_users (strings), guild_id |
| Key | Type | Default | Notes |
|---|
default_level | number | 3 | The 1 to 10 authority floor |
governed_categories | list | send_email, send_message, make_payment | Actions converted to approval requests |
overrides | list | [] | Per-action allow/deny, optionally per role |
context_rules | list | [] | Time/tool/always rules |
learning.enabled | boolean | true | Auto-approve suggestions |
learning.suggest_threshold | number | 5 | Approvals before suggesting |
emergency_state | enum | normal | normal, paused, killed |
| Key | Type | Default |
|---|
enabled | boolean | true |
capture_interval_ms | number | 7000 |
min_change_threshold | number | 0.02 |
cloud_vision_enabled | boolean | true |
cloud_vision_cooldown_ms | number | 30000 |
stuck_threshold_ms | number | 120000 |
struggle_grace_ms | number | 45000 |
struggle_cooldown_ms | number | 90000 |
suggestion_rate_limit_ms | number | 60000 |
overlay_autolaunch | boolean | true |
retention.full_hours | number | 1 |
retention.key_moment_hours | number | 24 |
| Key | Type | Default |
|---|
enabled | boolean | true |
projects_dir | string | ~/.jarvis/projects |
port_range_start / port_range_end | number | 4000 / 4999 |
max_concurrent_servers | number | 3 |
| Key | Type | Default | Notes |
|---|
interval_minutes | number | 15 | Legacy; the periodic heartbeat loop was removed in 0.9 and these values are no longer used for scheduling |
active_hours.start / .end | number | 8 / 23 | |
aggressiveness | enum | aggressive | |
| Key | Type | Default |
|---|
core_traits | list | loyal, efficient, proactive, respectful, adaptive |
assistant_name | string | Jarvis |
| Key | Type | Default | Notes |
|---|
enabled | boolean | true | Anonymous ping at startup and hourly. Also disabled by JARVIS_TELEMETRY=0 or DO_NOT_TRACK=1. The sidecar has a separate toggle. |
| Key | Type | Default |
|---|
active_role | string | personal-assistant |
Managed through their rooms; see Goals and Workflows for their setting shapes.