Skip to content

Settings

Set preferences in init.lua by assigning to smelt.settings:

smelt.settings.vim = true
smelt.settings.auto_compact = true
smelt.settings.compact_threshold = 0.65
smelt.settings.show_tps = true

Use --set KEY=VALUE for a one-off override on a single launch. Booleans are true or false, numbers are parsed as numbers, and strings are checked against the allowed values. Unknown keys and wrong types raise an error. Saved changes apply automatically; see Reloading.

All settings

Read or write via smelt.settings.<key> from init.lua. Saved Lua config reloads automatically by default; run /reload to apply changes manually. Override from the CLI with --set KEY=VALUE. Assigning an unknown key or wrong type raises at the call site.

Key Type Default Description
vim boolean false Vi keybindings in the prompt.
system_clipboard boolean true Sync prompt kills and yanks with the OS clipboard. Disable to keep C-w/C-k/C-u/C-y and vim y/p internal when OSC 52 clipboard writes are unreliable. Bracketed terminal paste still works.
auto_compact boolean true Auto-summarize when request context usage crosses compact_threshold (forced on in headless).
auto_continue "off" | "goal" | "always" "goal" Idle auto-continue policy: off disables it, goal continues active auto goals, and always continues any idle session.
math_rendering "unicode" | "graphics" "graphics" Display math as Unicode text or Kitty graphics (Unicode fallback when unsupported).
show_tps boolean true Tokens/sec in status bar.
show_tokens boolean true Context token count in status bar.
show_cost boolean true Session cost in status bar.
show_prediction boolean true Ghost-text input predictions in the prompt.
show_tips boolean true Curated discovery tips in the start banner and prompt chrome.
file_icons boolean false Show Nerd Font file-type icons before inline-code paths that point at existing files.
file_icon_colors boolean true Color inline-code file icons with nvim-web-devicons colors when file_icons is enabled.
show_slug boolean true Task-slug label in status bar.
terminal_title boolean true Keep the terminal window/tab title in sync with the current session title.
restrict_to_workspace boolean true Downgrade Allow to Ask for paths outside the workspace.
redact_secrets boolean false Scrub detected secrets from user input and tool results before they reach the LLM.
auto_reload boolean true Watch Lua config inputs (init.lua, plugins/, commands/, completers/, tools/, dialogs/, runtime overrides) and dispatch /reload when any of them changes. Prompt inputs such as AGENTS.md, SKILL.md, and --system-prompt stay manual via /reload.
compact_threshold number 0.8 Fraction of the configured context window (0, 1] at which the bundled compact plugin auto-triggers before oversized requests.
compact_keep_recent_groups number 1 Minimum number of trailing message groups kept verbatim after compaction. A group is a user message, a plain assistant message, or an assistant tool-use step together with its tool outputs.
request_audit "off" | "summary" | "full" "summary" Request audit storage mode. summary keeps timing, token, cost, and size metadata only; full stores reconstructable provider payloads; off disables request audit writes.
fast_mode boolean false Request the provider's accelerated inference mode when supported.
cache_ttl_long boolean false Anthropic prompt cache TTL. false uses the 5-minute ephemeral TTL; true opts into the 1-hour TTL. Has no effect on non-Anthropic providers.
web_search_provider "auto" | "duckduckgo" | "brave" "auto" Search provider used by web_search; auto prefers Brave when its API key is available and otherwise uses DuckDuckGo.
brave_search_api_key_env string "BRAVE_SEARCH_API_KEY" Environment variable containing the Brave Search API key.
web_fetch_render "http" | "auto" | "browser" "auto" JavaScript rendering policy for web_fetch: http never launches a browser, auto renders challenge and SPA-shell responses, and browser always renders.
web_fetch_renderer_command string "" Renderer executable used by web_fetch. It reads a JSON request from stdin and writes rendered HTML, status, and final URL as JSON to stdout.
worktree_root string ".worktrees" Root directory for managed git worktrees. Relative paths are resolved inside the git root and contain worktrees directly; absolute paths are external roots and get a per-repository bucket. Supports leading ~, $VAR, and ${VAR} expansion; relative roots may not escape the repo.
autoupgrade "off" | "notify" | "auto" "notify" Autoupgrade behavior. "off" skips checks; "notify" shows a pill when an update is available; "auto" installs in background on detection.
autoupgrade_channel "stable" | "unstable" "stable" Release channel autoupgrade tracks: "stable" (published GitHub releases) or "unstable" (main HEAD).
autoupgrade_interval number 3600 Seconds between background autoupgrade checks. The upgrade plugin clamps to a 60-second minimum to avoid hammering GitHub.

web_search_provider = "auto" uses Brave when its API key is available and DuckDuckGo otherwise. To require Brave:

smelt.settings.web_search_provider = "brave"
smelt.settings.brave_search_api_key_env = "BRAVE_SEARCH_API_KEY"
export BRAVE_SEARCH_API_KEY=...

Notifications

Turn-end desktop notifications are a nested table, not a --set key:

smelt.settings.notifications = {
  turn_end = true, -- default false
}

/notify overrides this for the current session.

Transcript

smelt.settings.transcript controls how the conversation is displayed. It is a Lua table, not a --set key.

smelt.settings.transcript = {
  show_timestamps = true,
  view = {
    blocks = { thinking = "peek" },
    tools = { read_file = "collapsed", edit_file = "collapsed", write_file = "expanded" },
    groups = { explore = "collapsed", lsp = "collapsed", web = "collapsed" },
  },
  limits = { tool_output_rows = 20, thinking_peek_rows = 4 },
}
  • view sets the default fold state ("collapsed", "peek" or "expanded") for block kinds, tools and groups. Use false for a group to switch it off.
  • limits caps how many rows tool output and thinking previews show: tool_rows, tool_header_rows, tool_body_rows, tool_output_rows, collapsed_error_rows, thinking_peek_rows and thinking_peek_head_rows.
  • show_timestamps = false hides timestamps on messages and tool calls. Tool durations stay visible.

Request audit

request_audit controls what is stored about each provider request in the session database.

Mode Stored
summary Timing, token, cost and size metadata (default)
full Summary plus the full request and response payloads
off Nothing new

Full payloads can contain prompts, source code and tool results, so treat a session database or smelt export requests output created in this mode as sensitive. SMELT_REQUEST_AUDIT=off|summary|full pins the mode for a process and wins over config.

Math rendering (LaTeX)

LaTeX math in Markdown ($$...$$, \[...\], $...$, \(...\)) renders as images on terminals that support the Kitty graphics protocol and as Unicode text elsewhere. Set math_rendering = "unicode" to always use text. Inside tmux, enable passthrough with set -g allow-passthrough on. Copying an equation copies its original Markdown source.