docs › Configuration and files on disk
Configuration and files on disk
Environment variables, the files dexterm writes, the optional free RPC key, and how to delete everything.
dexterm has no config server, no account and no telemetry. Everything it remembers is in a handful of local files you can read and delete.
Files on disk#
| path | what | notes |
|---|---|---|
~/.local/share/dexterm/dexterm.db | SQLite: the data cache, your watchlist and alerts, the feed snapshot, the request and credit meters, the PAPER wallet (balance, positions, trades), your KOL lists and mutes, and the history recorder's tables | --db PATH moves it, --db :memory: skips it. $XDG_DATA_HOME/dexterm/dexterm.db when set; %APPDATA%\dexterm\dexterm.db on Windows. |
~/.dexterm/state.json | how many times dexterm has booted (the first launch gets the full boot and the welcome card) | DEXTERM_HOME moves the directory |
~/.dexterm/helius.key | your optional free Helius key, mode 600 | read in code, URL built in memory, never printed. Optional. |
~/.dexterm/popup.json | chart popup hotkeys, docking, rain, fps cap | optional; see popup chart |
~/.local/bin/dexterm | the launcher install.sh writes | user-level |
packages/popup/shell/wry/target/release/dexterm-shell-wry | the native chart window, if built | DEXTERM_POPUP_SHELL points elsewhere |
Delete the first three and dexterm forgets everything.
History recorder#
In live mode dexterm keeps a local history of what it saw, for the rug model and backtests on the roadmap: a row per coin when its price, liquidity, holders or volume changed materially (plus an hourly anchor), which feeds listed it, and a code-only outcome label per anchor at 1 h, 2 h, 6 h, 24 h and 72 h (no model is involved). It lives in the same --db file; nothing is uploaded.
- Requests: recording reuses data the screens already fetched. Outcome checks re-ask DexScreener about coins whose window is due, at the lowest priority inside the app's own limiter: at most 6 calls a minute and 1,500 a day, skipped while DexScreener is rate-limiting.
- Size: measured at about 100 MB per 8-hour live day with the current rules. Raw JSON is dropped after 7 days, rows are thinned to one per coin per minute after 24 hours, and columns expire after 90 days; outcome labels are kept.
dexterm recorder statsshows the size,dexterm recorder pruneruns retention now. - Off:
--no-recorderorDEXTERM_RECORDER=0. It never runs with--fixtures,--replayor--db :memory:. - Export:
dexterm recorder exportwrites one record per anchor with its later outcomes (see the CLI reference).
The optional free RPC key#
Keyless, the holders panel shows the holder count and the top-10 share from Jupiter; the ranked top-20 list with owner wallets needs a free RPC key (a 2-minute signup with no card at Helius, Alchemy, QuickNode or Ankr). Configure one of:
$ mkdir -p ~/.dexterm && printf %s "<your-key>" > ~/.dexterm/helius.key && chmod 600 ~/.dexterm/helius.key$ export DEXTERM_RPC_URL="https://<provider>/<path>"
$ export DEXTERM_RPC_URLS="https://rpc-a/...,https://rpc-b/..."Resolution order: DEXTERM_RPC_URL, else ~/.dexterm/helius.key, else the public RPC pool. All configured endpoints rotate by health score; a 429 pauses one endpoint (honouring Retry-After) and fails over to the next. Every URL in an error, a --verbose line or a --record file passes a redactor; a recording that still carries a key refuses to save. dexterm doctor reports the provider name only, never the key.
Environment variables#
| variable | effect |
|---|---|
DEXTERM_HOME | the directory for state.json, helius.key and popup.json (default ~/.dexterm) |
DEXTERM_DB_PATH | set by the app for its analyst MCP child so it shares the same cache file; you normally use --db |
DEXTERM_RPC_URL · DEXTERM_RPC_URLS | read-only RPC endpoints (see above) |
DEXTERM_CALM=1 | effects off (same as --calm) |
DEXTERM_INTENSITY | off · normal · fever |
DEXTERM_OFFLINE=1 | refuse live data; --fixtures or --replay only (tests and CI) |
DEXTERM_ANALYST_MODEL | the Claude model for analyst turns (default claude-sonnet-5-5) |
DEXTERM_POPUP_SHELL | path to a prebuilt native chart window |
DEXTERM_POPUP_HOTKEY · DEXTERM_POPUP_HOTKEY_CLOSE | override the popup chords without a config file |
DEXTERM_RECORDER=0 | history recorder off (same as --no-recorder; off, false and no work too) |
DEXTERM_TRACE | write first-frame and first-rows milestones to a file (boot measurements) |
DEXTERM_SCREEN_STATE | set by the app for its MCP child (the current screen context); not for you |
NO_COLOR · FORCE_COLOR · COLORTERM · TERM | colour depth detection; NO_COLOR also implies calm |
LANG / LC_ALL | a non-UTF-8 locale switches the rain to hex glyphs (--ascii-rain forces it) |
Variables the app reads at 87b598f: DEXTERM_ANALYST_MODEL, DEXTERM_CALM, DEXTERM_DB_PATH, DEXTERM_HOME, DEXTERM_IMAGES, DEXTERM_INTENSITY, DEXTERM_OFFLINE, DEXTERM_POPUP_HOTKEY, DEXTERM_POPUP_HOTKEY_CLOSE, DEXTERM_POPUP_SHELL, DEXTERM_RECORDER, DEXTERM_RPC_URL, DEXTERM_RPC_URLS, DEXTERM_SCREEN_STATE, DEXTERM_TRACE.
Themes and look#
--theme cyberspace|midnight|ember|paper or t at runtime. --intensity off|normal|fever, --fps N, --no-boot, --ascii-rain, --tz ZONE for the header clock (default America/New_York; local for the machine zone). Details in the CLI reference.
The analyst's launch#
For the record, the analyst is spawned as claude -p with --output-format stream-json, --tools '' (no built-in tools), --strict-mcp-config pointing at the dexterm server only, --allowedTools mcp__dexterm__*, --permission-mode dontAsk, --setting-sources '' (none of your Claude Code settings or other plugins), the dexterm plugin directory for the skills, the analyst system prompt appended, a JSON schema for structured skills, and --disallowedTools for the action tools in scan mode. It cannot read files, run commands or reach any other MCP server from inside dexterm.