dexterm

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#

pathwhatnotes
~/.local/share/dexterm/dexterm.dbSQLite: 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.jsonhow many times dexterm has booted (the first launch gets the full boot and the welcome card)DEXTERM_HOME moves the directory
~/.dexterm/helius.keyyour optional free Helius key, mode 600read in code, URL built in memory, never printed. Optional.
~/.dexterm/popup.jsonchart popup hotkeys, docking, rain, fps capoptional; see popup chart
~/.local/bin/dextermthe launcher install.sh writesuser-level
packages/popup/shell/wry/target/release/dexterm-shell-wrythe native chart window, if builtDEXTERM_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 stats shows the size, dexterm recorder prune runs retention now.
  • Off: --no-recorder or DEXTERM_RECORDER=0. It never runs with --fixtures, --replay or --db :memory:.
  • Export: dexterm recorder export writes 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.

never paste a key into a command line argument, a shell history, a chat or a repository. The file above is the only place dexterm reads it from.

Environment variables#

variableeffect
DEXTERM_HOMEthe directory for state.json, helius.key and popup.json (default ~/.dexterm)
DEXTERM_DB_PATHset by the app for its analyst MCP child so it shares the same cache file; you normally use --db
DEXTERM_RPC_URL · DEXTERM_RPC_URLSread-only RPC endpoints (see above)
DEXTERM_CALM=1effects off (same as --calm)
DEXTERM_INTENSITYoff · normal · fever
DEXTERM_OFFLINE=1refuse live data; --fixtures or --replay only (tests and CI)
DEXTERM_ANALYST_MODELthe Claude model for analyst turns (default claude-sonnet-5-5)
DEXTERM_POPUP_SHELLpath to a prebuilt native chart window
DEXTERM_POPUP_HOTKEY · DEXTERM_POPUP_HOTKEY_CLOSEoverride the popup chords without a config file
DEXTERM_RECORDER=0history recorder off (same as --no-recorder; off, false and no work too)
DEXTERM_TRACEwrite first-frame and first-rows milestones to a file (boot measurements)
DEXTERM_SCREEN_STATEset by the app for its MCP child (the current screen context); not for you
NO_COLOR · FORCE_COLOR · COLORTERM · TERMcolour depth detection; NO_COLOR also implies calm
LANG / LC_ALLa 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.