Skip to content

Reference

Settings

Generated page

Generated from the source by scripts/docs/build-reference.js; edit the code, not this page. It lists the shipped client defaults and the control that edits each field. A saved account or a request may hold other values; the precedence below says which one a turn uses.

Shipped client defaults

The values a new profile starts with, from DEFAULT_SETTINGS in public/app.js. Control is the element in Settings that edits the field, read from readSettingsFromForm; a field without one is kept from the saved settings or written by the page's own logic (setup cards, the decision-model cards, tests of a connection). Credential marks a field the secret broker holds in encrypted account storage: saved secrets are returned to the page as references. The Settings save endpoint accepts newly entered credentials; ordinary turn requests cannot override the account credentials.

Setting Shipped default Control Credential
permissionMode auto #defaultPermissionModeSelect
permissionsEnabled true #permissionsEnabledToggle
completionSoundEnabled true #completionSoundToggle
mainProvider custom #mainProviderSelect
baseUrl empty #baseUrlInput
apiKey empty #apiKeyInput yes
braveApiKey empty #braveApiKeyInput yes
model empty —
decisionsEnabled false #decisionsEnabledToggle
decisionsProvider typesafe #decisionsProviderSelect
decisionsBaseUrl empty —
decisionsApiKey empty #decisionsApiKeyInput yes
decisionsModel empty —
decisionsActive jev —
decisionsLayaBaseUrl empty #layaBaseUrlInput
decisionsLayaApiKey empty #layaApiKeyInput yes
decisionsLayaModel empty —
imageGeneration {"enabled":false,"activeServerId":"","servers":[]} —
temperature null (no override; the provider's default) #temperatureInput
reasoningControl auto #reasoningControlSelect
reasoningEffort high #reasoningEffortSelect
codingProvider main #codingProviderSelect
codingBaseUrl empty #codingBaseUrlInput
codingApiKey empty #codingApiKeyInput yes
codingModel empty —
codingTemperature null (no override; the provider's default) #codingTemperatureInput
codingEnableThinking true —
codingReasoningControl auto —
codingReasoningEffort high —
classifierProvider main #classifierProviderSelect
classifierBaseUrl empty #classifierBaseUrlInput
classifierApiKey empty #classifierApiKeyInput yes
classifierModel empty —
classifierTemperature 0 —
themeId nawa-dark #themeSelect
transcriptView normal #transcriptViewSelect
llmPresets empty list —
activeLlmPresetId empty —
providerConnectionMemory {} —
skillMatcherSettings {"profile":"classifier","baseUrl":"","apiKey":"","model":"","temperature":0,"maxTokens":512,"enableThinking":false,"reasoningControl":"auto","reasoningEffort":"off"} —
enableThinking true —
webSearchEnabled true —
disabledConnectors empty list —
maxParallelAgents 4 #maxParallelAgentsInput
stageRepairAttempts 3 #stageRepairAttemptsInput
chatDirectory ./data/chats #chatDirectoryInput
sidebarWidth 290 —
maxAttachmentChars 100000 #maxAttachmentCharsInput
docAgentThreshold 15000 #docAgentThresholdInput
executionTimeoutMinutes 40 —
contextTokenLimit 32768 #contextTokenLimitInput
maxOutputTokens null (no override; the provider's default) #maxOutputTokensInput
compactionThresholdPercent 80 #compactionThresholdPercentInput
docEditAnimation morph —

Precedence

How a turn's settings are resolved, as the owners apply them:

  1. System defaults. config/system-settings.json holds clientDefaults for a profile; sanitizeClientDefaults (server/client-settings.js) drops retired keys from whatever it reads.
  2. The account replaces them. effectiveClientDefaultsForRequest (server.js) loads the signed-in user's encrypted settings; a non-empty sanitized account object replaces the system defaults, it is not merged with them. Saving from Settings writes the whole client settings object to the account (POST /api/system-settings/client-defaults).
  3. The request lies on top. runtimeRoutingSettings (server.js) lays the request body's fields over the account's, then pins every credential to the account's value, so a body can change a model or a URL for one turn but never present a key. Chat instructions guide model behavior; they are not another runtime-settings layer. Asking for a different temperature, provider or permission mode does not itself change those settings.

Thinking preferences

The Main and Coding thinking controls save the user's toggle, control and effort. Their change handlers update saved preferences directly; capability discovery only changes availability and display. A temporarily unavailable preference is retained across model switches. Send does not wait for the browser's capability check: the server resolves automatic controls from the selected model's capabilities and applies the supported provider fields. The old derived reasoning override and client capability copies are no longer settings inputs.

Sanitizer examples from synthetic fixtures

Values below come from named fixtures run through sanitizeClientDefaults and credential-key classification, never from a live profile. These test sanitization only, not account/request resolution or encryption.

Fixture Input After sanitizeClientDefaults Fields classified as credentials
A — a new profile the shipped defaults unchanged (54 fields, changed: false) apiKey, braveApiKey, decisionsApiKey, decisionsLayaApiKey, codingApiKey, classifierApiKey
B — a saved account the defaults with model, apiKey, decisionsActive: "laya", decisionsLayaBaseUrl and the retired plannerModel set the retired key is dropped (changed: true); decisionsActive = laya, decisionsLayaBaseUrl = http://127.0.0.1:8080 apiKey is classified as a credential; sanitization does not encrypt it

Retired keys the sanitizer removes: plannerProvider, plannerBaseUrl, plannerApiKey, plannerModel, plannerSettings, maxPlannerPasses, presencePenalty, presencePenaltyModels, codingPresencePenalty, reasoning, reasoningCapabilities, codingReasoningCapabilities.

Not covered here

The server section of config/system-settings.json (ports, database, skills, memory); per-chat state such as a chat's own permission mode; the LLM setup cards' saved connections beyond the flat fields they project.