Skip to content

Storage and environment

smelt uses four platform directories: config, state, data and cache. Elsewhere in the docs, paths refer to these names rather than a specific operating system.

On Linux and macOS they follow the XDG base directories:

Directory Contents
$XDG_CONFIG_HOME/smelt/ early.lua, init.lua, plugins/, lua/, commands/, skills/, AGENTS.md
$XDG_STATE_HOME/smelt/sessions/ Saved sessions and the session list
$XDG_STATE_HOME/smelt/*_auth.json OAuth credentials for Codex, Copilot and Kimi Code
$XDG_STATE_HOME/smelt/recent.json Last-used model, mode and reasoning effort
$XDG_STATE_HOME/smelt/workspaces/ Saved permissions per workspace
$XDG_STATE_HOME/smelt/history Prompt history
$XDG_STATE_HOME/smelt/trust.json Hashes of trusted project .smelt/ directories
$XDG_STATE_HOME/smelt/logs/ Rotated log files
$XDG_DATA_HOME/smelt/builtins/ Read-only copy of the bundled Lua runtime and type stubs
$XDG_DATA_HOME/smelt/runtime/ Optional overlay searched before the bundled Lua runtime
$XDG_CACHE_HOME/smelt/ HTTP, pricing and model caches

Windows uses %APPDATA%\smelt for config and %LOCALAPPDATA%\smelt\state, \cache and \data for the rest. Explicit XDG variables override these defaults on every platform.

Credentials

OAuth providers read credentials from, in order, an environment override, a private file in the state directory (mode 0600 on Unix), then the operating system keyring. smelt auth writes both the file and the keyring, and logout removes both. Background checks never touch the keyring, so they cannot trigger an OS credential prompt.

Environment variables

Variable Purpose
XDG_CONFIG_HOME, XDG_STATE_HOME, XDG_CACHE_HOME, XDG_DATA_HOME Override the directory roots
XDG_RUNTIME_DIR Where the public process-status files live (see smelt status)
SMELT_REQUEST_AUDIT Pin request audit to off, summary or full
SMELT_CODEX_TOKENS, SMELT_COPILOT_TOKENS, SMELT_KIMI_CODE_TOKENS Full JSON OAuth credential for a provider, for controlled automation
SMELT_RUNTIME_DIR Use a different bundled Lua runtime (for development)
BRAVE_SEARCH_API_KEY Brave Search key, per brave_search_api_key_env
VISUAL, EDITOR Editor for Ctrl+X Ctrl+E (VISUAL first)
NO_COLOR, FORCE_COLOR, TERM, COLORFGBG Color output and light/dark detection

The OAuth variables hold a provider's complete credential record, not just an API key. Avoid putting them in shell history or in process environments other users can inspect.