Settings are persisted to settings.json in the app data directory (see App Directories). The Rust backend reads this file on startup; the frontend reads and writes it through the load_settings / save_settings Tauri commands via the Zustand settings store (src/store/settings/).
All keys are camelCase in the JSON file.
| Key | Type | Default | Description |
|---|
editorPreference | "in-app" | "vscode" | "cursor" | "zed" | "sublime" | "system" | "in-app" | Which editor to use when opening files. "in-app" uses the built-in CodeMirror editor. |
minimapEnabled | boolean | true | Show/hide the minimap in the in-app editor. |
editorFontSize | number | 13 | Font size in px for the in-app editor. |
editorFontFamily | string | "JetBrains Mono" | Font family for the in-app editor. |
editorLineHeight | number | 1.4 | Line height multiplier for the in-app editor. |
| Key | Type | Default | Description |
|---|
terminalFontSize | number | 13 | Font size in px for the embedded terminal (xterm.js). |
terminalFontFamily | string | "JetBrains Mono" | Font family for the terminal. |
terminalCursorStyle | "block" | "bar" | "underline" | "bar" | Terminal cursor shape. |
terminalCursorBlink | boolean | true | Whether the terminal cursor blinks. |
terminalLineHeight | number | 1.0 | Line height multiplier for the terminal. |
terminalShell | string | null | null | Path to the shell binary. null = auto-detect (uses $SHELL). |
| Key | Type | Default | Description |
|---|
themeMode | "dark" | "light" | "system" | "dark" | Color scheme. "system" follows the OS preference. |
themeId | string | "magia" | ID of the active theme. Built-in: "magia". User themes loaded from ~/.magia/themes/. |
chatFontSize | number | 14 | Font size in px for the chat message list. |
chatLineHeight | number | 1.5 | Line height multiplier for chat messages. |
chatFontFamily | string | "Noto Sans" | Font family for chat messages. |
titleSuggestionsEnabled | boolean | true | Automatically suggest session titles based on the first prompt. |
closeBehavior | "minimize_to_tray" | "quit" | "minimize_to_tray" | What happens when the window close button is clicked. |
developerMode | boolean | false | Enable developer tools and feature flags in Settings. |
featureFlags | Record<string, boolean> | {} | Map of feature flag overrides. Only meaningful when developerMode is true. |
watchdogTimeoutSecs | number | 15 | Seconds before the agent watchdog considers a session stalled. |
workspacesEnabled | boolean | true | Enable the Workspaces feature. |
workspaceDisplayMode | "tabs" | "sidebar" | "tabs" | How workspaces are shown in the UI. |
confirmBeforeQuit | boolean | true | Show a confirmation dialog before quitting when a session is running. |
| Key | Type | Default | Description |
|---|
defaultProvider | LlmProviderId | "claude" | The LLM provider used for new sessions. Valid values: "claude", "gemini", "codex". |
providerBinaryPaths | Record<string, string> | {} | Manual overrides for provider binary paths (e.g. { "claude": "/usr/local/bin/claude" }). Empty string = auto-detect. |
| Key | Type | Default | Description |
|---|
observationMode | "off" | "post-session" | "live" | "live" | When observations are generated. "live" = during the session; "post-session" = after it ends. |
observationIntervalMinutes | number | 10 | How often (in minutes) to produce a live observation. |
observationModel | string | "haiku" | Model used to generate observations. |
observationProvider | string | "claude" | Provider used for observation calls. |
sideQuestionModel | string | "haiku" | Model used for lightweight side questions (e.g. title generation). |
| Key | Type | Default | Description |
|---|
permissionPreset | "acceptEdits" | "default" | "dontAsk" | "plan" | "auto" | "bypassPermissions" | "default" | Global tool-use permission preset applied to new sessions. |
toolPermissions | ToolPermission[] | [] | Per-tool auto-approve overrides. Each entry: { toolName: string, autoApprove: boolean }. |
| Key | Type | Default | Description |
|---|
voiceInputEnabled | boolean | false | Enable the voice input button in the chat input. |
whisperModel | string | "base" | Whisper model variant to use for transcription. Options: "tiny", "base", "small", "medium", "large". |
whisperLanguage | string | "auto" | BCP-47 language code for Whisper. "auto" = language detection. |
whisperDeviceId | string | "" | Audio input device ID. Empty string = system default. |
sttEngine | string | "auto" | Which STT engine to use. "auto" = prefer Parakeet if available, fall back to Whisper. "whisper" = always Whisper. "parakeet" = always Parakeet. |
| Key | Type | Default | Description |
|---|
notificationsEnabled | boolean | true | Master switch for all Magia notifications. |
notifSessionCompleted | boolean | true | Notify when an agent session completes. |
notifSessionError | boolean | true | Notify when an agent session encounters an error. |
notifAgentWaiting | boolean | true | Notify when an agent is waiting for user permission. |
notifSystemUpdates | boolean | true | Notify when a new Magia update is available. |
notifSoundEnabled | boolean | true | Play a sound with notifications. |
desktopNotificationsEnabled | boolean | true | Show native OS desktop notifications (requires OS permission). |
| Key | Type | Default | Description |
|---|
syncIntervalMinutes | number | 10 | How often (in minutes) the session cache is synced from disk in the background. |
memoryEnabled | boolean | true | Enable the memory system (observations + reflections). |
reflectionsEnabled | boolean | true | Enable long-term memory distillation (reflections). Requires memoryEnabled. |
memoryRetentionDays | number | 90 | How many days to keep observations before they are pruned. |
memoryMaxSizeMb | number | 50 | Maximum total size of the memory store in MB. |
reflectionIntervalMinutes | number | 120 | How often (in minutes) the reflector runs. |
observationSystemPrompt | string | null | null | Custom system prompt for the Observer LLM call. null = use the built-in default. |
reflectionSystemPrompt | string | null | null | Custom system prompt for the Reflector LLM call. null = use the built-in default. |
| Key | Type | Default | Description |
|---|
otelEnabled | boolean | true | Enable the OpenTelemetry collector that captures per-session metrics. |
otelMetricExportIntervalMs | number | 5000 | How often (in ms) metrics are flushed to the collector. |
otelLogsExportIntervalMs | number | 2000 | How often (in ms) log spans are flushed to the collector. |
otelLogUserPrompts | boolean | false | Include user prompt text in OTel spans. Disabled by default for privacy. |
otelLogToolDetails | boolean | false | Include tool input/output in OTel spans. Disabled by default for privacy. |
otelCollectorPort | number | 4318 | TCP port for the OTel HTTP collector fallback (used when Unix socket fails). |
crashReportingEnabled | boolean | true | Send crash reports to Sentry. Only active in official builds (requires SENTRY_DSN at compile time). |
analyticsEnabled | boolean | true | Send anonymous usage analytics via PostHog. Only active in official builds. |
| Key | Type | Default | Description |
|---|
autoCheckUpdates | boolean | true | Periodically check for Magia updates in the background. |
dismissedUpdateVersion | string | null | null | Version string that the user has dismissed. The update banner is suppressed until a newer version is available. |
updateChannel | string | "stable" | Update channel to subscribe to. "stable" = production releases; "beta" = pre-releases. |