Settings

Every persistent setting, changeable mid-session.

Type /settings to open a dialog with every persistent setting. Changes are written to $ZOT_HOME/config.json without requiring a restart. Rendering toggles apply immediately; settings that affect model requests apply to subsequent turns. Rows that open a sub-view (like model shortcuts) use esc to go back one level before it closes the dialog.

Configuration files

zot stores both configuration and runtime state under $ZOT_HOME, even when that directory is under the platform's state directory. You can edit these files directly while zot is not running:

  • config.json selects the default provider and model and stores UI preferences. Interactive settings and model selections also update it. Explicit --provider and --model flags override the saved selection for a run.
  • models.json optionally defines model metadata and provider endpoints (baseUrl). Registering a model does not select it as the default.
  • auth.json stores credentials. Prefer /login for supported providers, and keep secrets out of the other two files.

Neither config.json nor models.json is required when starting zot with an explicit provider and model. Without a saved or explicit provider, zot defaults to Anthropic and may offer login if no usable credentials are available. Local Ollama does not need login.

For example, create this minimal configuration, or merge these fields into your existing file, to select a local Ollama model by default:

$ZOT_HOME/config.json
{
  "provider": "ollama",
  "model": "qwen3.5:4b"
}

The Ollama server must already be running and have that model installed. See Models for local, remote, and two-host setup examples. baseUrl belongs in models.json, not config.json.

Codemode configuration

The optional Codemode tool is configured through CLI flags or the codemode object in $ZOT_HOME/config.json, not an interactive settings toggle. Merge this object into your configuration to enable script-only client tool presentation:

json
{
  "codemode": {
    "enabled": true,
    "mode": "only",
    "inlineBudget": 3000
  }
}

mode accepts on (keep direct tool definitions) and only (expose client tools through scripts). inlineBudget is a non-negative estimated token budget for tool declarations, defaulting to 3000. Zero keeps discovery without inline declarations. --codemode and --codemode-only override the saved mode for a run. --no-tools takes precedence.

Chat timestamps

Open /settings, choose **timestamps**, then configure:

ControlOptions and default
enabledOn or off. Off by default. Stored as chat_timestamps.
intervalEvery message (0, the default), 1, 5, 10, 15, 30, or 60 minutes. Stored as chat_timestamp_interval_minutes.
date display**Start of each day** (default) or **Every timestamp**. Stored as chat_timestamp_date with values day_start or every_message.

Timestamps use muted text on existing separator rows, aligned with the tool box's right edge and leaving the same two-column right margin. They use the local timezone. **Start of each day** shows YYYY-MM-DD HH:MM on the first timestamp and when the day changes, then just HH:MM for subsequent timestamps that day. **Every timestamp** always includes the date.

An interval of 0 shows every eligible message. A positive interval selects a timestamp once at least that many minutes have elapsed since the last selected timestamp, not since the previous message. The first eligible message and day changes always qualify. Date display does not change interval selection.

For example, enable timestamps on every eligible message with the date always visible by merging these fields into your configuration:

$ZOT_HOME/config.json
{
  "chat_timestamps": true,
  "chat_timestamp_interval_minutes": 0,
  "chat_timestamp_date": "every_message"
}

You can set any nonnegative integer interval directly in config.json. Missing or negative intervals use 0, and explicitly saved intervals are preserved. Missing or unknown date modes use day_start. Changes through /settings apply immediately and persist across restarts. Press esc to return from the timestamps sub-view to settings.

User messages, completed assistant messages, and tool results are eligible. Missing timestamps and compaction summaries are skipped, and labels that do not fit in a narrow terminal are omitted. Saved session timestamps are reused on resume. These controls affect only the interactive display, not model input or print, JSON, or RPC output.

Streaming limitation

Timestamps appear after messages complete, not during streaming. They do not mark unread portions of a long response.

Interactive settings

SettingWhat it controls
render imagesDraw images returned by read inline using the terminal's image protocol (Ghostty, Kitty, iTerm2, WezTerm). Auto-detected from TERM_PROGRAM; the toggle overrides detection. Greyed out and forced off on terminals that speak no image protocol.
auto-swarmLet the main agent spawn background sub-agents in parallel via swarm_spawn.
auto-compact thresholdChoose when interactive sessions automatically condense conversation history: off, 70%, 80%, 85% (default), or 90% of the model's advertised context window. The choice takes effect without restarting and is stored as auto_compact_threshold. Off disables percentage-based triggers, but manual /compact and automatic recovery from payload-too-large responses remain available.
jail new sessions by defaultStart interactive, print, JSON, RPC, and background-agent runs with tools confined to the working directory. Off by default. Changing it updates the current sandbox immediately; /jail and /unjail only override the current session. Stored as jail_by_default.
PowerShell tool (Windows only)Enable or disable native PowerShell alongside the default tools. Off by default; stored as powershell_enabled. Updates the live tool list without restarting and applies to future Windows runs in other modes too. Explicit --tools or --no-tools overrides the preference and disables the toggle for that run. Execution remains blocked while jailed and subject to packaged-agent permissions. See Tools.
OpenRouter Server ToolsOpt in to OpenRouter's remote web search, web fetch, advisor, subagent, fusion, image generation, datetime, and model-search tools. Off by default and available only with the OpenRouter provider. zot allows at most four remote server-tool calls per turn. --no-tools disables them, and preset-owned tools are not overridden. These tools run without zot's local confirmation dialog and may incur additional OpenRouter charges. Stored as openrouter_server_tools_enabled.
fuzzy skill suggestions (upcoming)Use relevance-ranked, case-insensitive subsequence matching for /skill: names, with alphabetical tie-breaking and matching characters in bold. Empty queries remain alphabetical; exact names retain priority. Off by default; missing or false preserves prefix matching. Applies immediately and is stored as fuzzy_skill_suggest. Other slash commands and invocation lookup are unchanged. See Skills.
compact transcript renderingRender tool calls without borders and sent messages without padded bubbles. Off by default. Applies immediately and is stored as compact_mode.
collapse tool call renderingRetain tool headers, the final rendered preview line, and an explicit error indicator for failed calls. Hide the rest of the body while preserving boxed, flat, or compact layouts. Press ctrl+o to expand the full output. Off by default. Applies immediately and is stored as collapse_tool_call. See Tools.
timestampsSub-view with an enabled toggle, interval selector, and date display options. Off by default. See Chat timestamps above.
show loaded resources at startupList loaded AGENTS.md paths, extensions, and user-installed skills in compact Context, Extensions, and Skills sections above the transcript. Built-in skills are omitted. Off by default. The lists are display-only and are not sent to the model or stored in the session transcript. Stored as show_instructions_at_startup.
tui settingsSub-view for click-to-position and persistent text selection (off by default), input style, status position, and working spinner position. Mouse interaction is stored as tui_click_to_position. See TUI settings.
reasoning levelReasoning depth for the active model. Use /reasoning to open this selector directly. It only shows distinct levels supported by the model; models without reasoning support only offer off. Also settable per run with --reasoning.
color themeauto/dark/light or any JSON theme from $ZOT_HOME/themes or a loaded extension.
model shortcutsSub-view with nine slots (model 1 ... model 9). Press enter on a slot to open the /model selector and bind a provider/model, backspace to clear it. Then Ctrl+1 ... Ctrl+9 from the editor instantly switch the active model (same cross-provider swap as /model, transcript and cost carried over). No-op while a turn is running.