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¶
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"
Notifications¶
Turn-end desktop notifications are a nested table, not a --set key:
/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 },
}
viewsets the default fold state ("collapsed","peek"or"expanded") for block kinds, tools and groups. Usefalsefor a group to switch it off.limitscaps 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_rowsandthinking_peek_head_rows.show_timestamps = falsehides 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.