Quick Start
1
Open settings
Press
⌘, to open the settings window.2
Search for a field
Use the built-in search box — it matches labels, descriptions, and keywords, and never returns a row that is currently hidden.
3
Reset a single field
Each row has a per-field reset back to its default.
How It Works
On save, the engine clears its cached agents, so the next turn picks up your new settings immediately.Secrets never reach
settings.json and never leave the process in cleartext. The api_key is stored in the OS keychain and stripped before the file is written. Every settings response — GET /settings and POST /settings — returns the value masked as bullets, including a write that only changed an unrelated field like theme. An empty key comes back as "", not bullets, so the UI can tell “set” from “unset”. Redaction is driven by an internal SECRET_KEYS list, so future secrets are covered automatically.A rejected settings write shows a
Could not save that setting. toast and does not mutate CFG or re-render the row, so the visible state always matches what the engine persisted — see Troubleshooting.General
Models
Clearing Base URL now clears only what the app exported. The provider-specific variable and
OPENAI_API_BASE are both unset together, and shell-exported credentials outside the app are preserved.agent.start(..., max_tokens=..., top_p=..., reasoning_effort=...) — but only when you picked a real level. reasoning_effort="off" is not forwarded (same rule as temperature / top_p, which are only sent when changed from their defaults), so the provider’s own default reasoning behaviour is preserved. Since MervinPraison/PraisonAI#4725 the sampling values also take effect on streaming chats — previously the streaming path ignored them. See Streaming → Sampling knobs.
Chat
Appearance
font_size drives a --ui-scale CSS variable, and every fixed dimension is rem, so changing it scales the whole interface — messages, sidebar, settings, and composer — not just the chat.Safety
Since MervinPraison/PraisonAI#4730,
smart is meaningful — previously it fell through to the same prompt as ask. See Approvals & Safety for behaviour.
Data
Action rows, not stored values:Action rows now surface failures via a
That did not run: … toast instead of failing silently, so a down engine can no longer let Export fake a backup — see Troubleshooting.Integrations
See MCP Servers for what the panel stores.
About
See Troubleshooting for the update check behaviour.
Gating Behaviour
Some rows appear only when another setting has the right value:
Fields marked Requires restart (
base_url, api_key, launch_at_login, framework) say so on the row itself.
Tray & Shortcuts
The tray menu shows keyboard accelerators only where the modifier exists.
Off macOS, Tauri maps
Cmd to the Super key, which would render as Windows+, and Windows+Q — and Windows+Q is reserved by the OS. So on Windows and Linux the tray still exists, but no accelerators are shown. The template menubar glyph is macOS-only, and on Linux the menu opens on left click regardless.
Best Practices
Use search instead of scrolling
Use search instead of scrolling
The search box derives from the registry and respects visibility rules, so it never surfaces a hidden row. Type a keyword like “proxy” or “secret” to jump straight to a field.
Reset one field at a time
Reset one field at a time
Per-field reset restores a single setting to its default without touching the rest — safer than a full reset.
Restart after changing model credentials
Restart after changing model credentials
base_url and api_key are marked “requires restart”. Relaunch the app after changing them so the engine picks up the new endpoint or key. If the engine is mid-restart when you change one of these rows, the write can be rejected — you’ll see Could not save that setting. and the previous value stays on screen, so try again once the pill reads engine :PORT. See Troubleshooting.Related
Models & API Keys
Model pill, sampling, and keychain storage
Data & Privacy
Where settings and secrets live

