dexterm

docs › CLI flags and commands

CLI flags and commands

Every flag parseArgs accepts, the subcommands, the filter grammar, sort keys and presets.

Generated from packages/cli/src/main.ts (parseArgs, the subcommand dispatch and dexterm --help), scan/command.ts (the --scan-* table), screener/filter.ts, screener/sort.ts and screener/presets.ts at commit 87b598f. npm run docs:check fails if a flag here does not exist or an accepted flag is undocumented.

Invocations#

$ dexterm                                     # interactive, live keyless data (needs a TTY)
$ dexterm doctor                              # pre-flight checks with the exact fix per line
$ dexterm --fixtures                          # interactive demo on seeded fixtures
$ dexterm --calm                              # effects off
$ dexterm --scan                              # live, with AI scan mode on from the start
$ dexterm --screen screener --width 176 --height 48          # one live frame to stdout
$ dexterm --screen token --mint <MINT> --interval 5m         # one live token frame
$ dexterm --screen screener --record /tmp/rec.json           # live frame, saved for replay
$ dexterm --screen screener --replay /tmp/rec.json           # the same frame, no network
$ dexterm mcp                                 # the read-only MCP server on stdio
$ dexterm popup --self-test                   # chart popup self-test

Exit codes: 0 ok · 1 interactive mode without a TTY, or a doctor failure · 2 bad arguments (the message names the flag).

Subcommands#

commandwhatflags
dexterm doctorpre-flight: Node, terminal colour, the claude CLI, the RPC key, every data source, the chart window, the data directory. Exit 0 when dexterm will run (warnings are optional), 1 when something must be fixed; every non-pass line prints the exact fix.--offline skip the network probes
--no-color plain output
dexterm mcprun the read-only MCP server on stdio (what the analyst uses; add it to any Claude Code with `claude mcp add dexterm -- dexterm mcp`).—
dexterm popup`dexterm popup --self-test`: open a chart popup on fixture data and report the shell choice, whether the global hotkey registered and the measured frame rate. It never claims a frame rate it did not measure.--self-test the only subcommand
--browser force the browser fallback
--seconds N how long to measure
--theme NAME theme for the popup
dexterm recorderthe history recorder's local tables: stats (rows, labels, bytes, DB size), label (label due outcomes now, code rules, no model), prune (run retention now), export (one record per hourly t0 anchor: the row as it was seen plus its later outcomes, for evals and backtests). No network; reads and writes the local DB only. dexterm recorder help prints the usage.--db PATH the database (default DEXTERM_DB_PATH, else ~/.local/share/dexterm/dexterm.db)
--out FILE export: write to a file instead of stdout
--since T · --until T export: time window (ISO date or unix ms)
--labelled-only export: only anchors that have an outcome
--limit N export: cap the number of records
dexterm kolmanage KOL lists in the local DB: list, create <name>, add|remove <list> @handle, mute|unmute @handle, enable|disable <list>, import <dir>. A pack is a hash-locked directory (pack.json + pack.lock, optional pack.lock.sig checked against ~/.dexterm/allowed_signers); a tampered or unlocked pack is refused, never imported as unsigned. No network, no X account.--db PATH the database (default ~/.local/share/dexterm/dexterm.db)

Flags#

data and modes

flagwhat
--fixturesseeded demo data instead of the network (interactive or one-shot). The demo event keys n/u/d/x work here.
--replay FILEserve a recording made with --record: no network, same frames. A recording also carries the PumpPortal session.
--record FILEsave every live response (and the PumpPortal session) to FILE for --replay. Keys are redacted at capture; a file that still carries one refuses to save.
--max-requests Nhard cap on live requests for this run (default none). Used by the smoke scripts.
--max-credits Nhard cap on Helius credits for this run (default 5000). At the cap Helius switches off for the run and the keyless sources take over.
--db PATHSQLite path for the cache, watchlist, credit meter and paper wallet (default `~/.local/share/dexterm/dexterm.db`; `:memory:` for a throwaway session).
--no-recorderdo not run the history recorder this run (also DEXTERM_RECORDER=0). It is on by default in live mode and writes token snapshots, feed membership and outcome labels into the local --db file only; nothing is uploaded. Never on with --fixtures, --replay or --db :memory:. See configuration › history recorder.
--verboselog every live request to stderr (source, status, latency, redacted URL) plus the rpc provider and db path.

screener

flagwhat
--filter QUERYscreener filter in the filter grammar, e.g. `vol24 > 250K liq > 50K age < 30d launchpad:pump`. A bad query fails at startup with the column.
--sort KEY[:asc|desc]screener sort key (see the sort keys table).
--preset NAMEscreener feed preset (see the presets table). A gated preset fails with its reason.

one-shot frames

flagwhat
--screen NAMErender one frame of a screen to stdout and exit (live unless --fixtures/--replay). Screens: screener · token · newpairs · watchlist · analyst · boot · ticket · positions · trending · kol.
--mint MINTopen this token on the token screen (base58 address). Live or replay only.
--interval IVcandle interval for the token screen: 1m · 5m · 15m · 1h · 4h · 1d (default 1h).
--listen SECONDSone-shot new pairs: how long to listen to PumpPortal before rendering (default 20, max 120).
--width Nframe width for one-shot renders (default: the terminal, else 160).
--height Nframe height for one-shot renders (default: the terminal, else 45).
--selected Nhighlighted row or token index for one-shot renders.
--seed Nfixture PRNG seed (default 7).
--no-aihide the analyst panel on the token screen.
--frame Neffect frame index for one-shot renders (the same frame renders byte-identical output).
--event KINDone-shot demo event on fixtures: newpair · pump · dump · rug.
--ai PHASEanalyst panel state for one-shot renders: thinking · streaming:N (characters revealed).
--mood Mforce the rain mood: pump · dump · neutral.
--activity Aforce the rain activity 0..1.
--t 0..1boot progress for `--screen boot`.

the look

flagwhat
--theme NAMEcyberspace (default) · midnight · ember · paper. `t` cycles at runtime.
--calmeffects off: no rain, glitch, blink or scanlines (same as --intensity off; DEXTERM_CALM=1 too; NO_COLOR implies it).
--intensity LEVELoff · normal · fever. fever (default): rain, trails, glitch, blink, scanlines at 30 fps; normal: 15 fps, sparser rain, no idle aberration.
--fps Nframe cap 1..60 (default 30 fever / 15 normal). Data still refreshes at 2 Hz; after 5 s without a key the ambient rain drops to 8 fps.
--no-bootskip the boot sequence (first launch is the full glitch boot, later launches one second).
--ascii-rainhex-only rain glyphs instead of half-width katakana (automatic when LANG is not UTF-8).
--tz ZONEheader clock zone (default America/New_York; `local` = the machine zone). Replays pin the recording's zone.
--no-imagesno coin images this run (also DEXTERM_IMAGES=0, or {"enabled": false} in ~/.dexterm/images.json). With images on, real pixels in kitty / Ghostty / WezTerm / Konsole / iTerm2 / sixel terminals and half-block art everywhere else, Apple Terminal.app included.

AI scan mode

flagwhat
--scanstart AI scan mode with the run (the same path as the Z key). Live or replay only; incompatible with --screen.
--scan-min-score Nlock when a coin scores at least N (default 45).
--scan-min-triggers Nand at least N triggers fired (default 2).
--scan-min-liq USDignore coins below this liquidity (default 10000).
--scan-vol-x Nvolume trigger: 5m volume at least N× the coin's own pace (default 3).
--scan-flow-share 0..1flow trigger: 5m buy share at or above this (default 0.62).
--scan-breakout-pct PCTbreakout trigger: last close above the prior 20 cached candles' high by this % (default 2).
--scan-liq-jump-pct PCTliquidity trigger: +% vs the coin's own 10-minute minimum (default 20).
--scan-holders-jump-pct PCTholders trigger: +% vs the oldest 10-minute sample (default 5, and at least +25 holders).
--scan-warmup-s Sseconds of watching before the first lock is possible (default 30).
--scan-max-ai-per-hour Nanalyst turns the scan may start per rolling hour (default 8).
--scan-max-ai-per-coin Nanalyst turns per coin per hour (default 4).
--scan-refresh-s Sminimum seconds between reads of the locked coin (default 90; a read also needs the data to have moved).
--scan-move-pct PCTprice move that counts as "moved" for a refresh (default 3).
--scan-cooldown-s Show long a released coin is barred from locking again (default 900).
--scan-post-lock-s Sno new lock for this long after a lock ends (default 60).

output

flagwhat
--plainmonochrome text output (the snapshot-test surface).
--ansiANSI output even when stdout is not a TTY (24-bit unless --color or NO_COLOR).
--html FILEwrite the frame as a standalone HTML page (screenshots); always rendered in truecolor.
--fit WxHwith --html: fixed page size, centred, no window chrome (video frames).
--font PXwith --html: font size in pixels.
--color DEPTHtruecolor · 256 · none (default: detected from NO_COLOR, FORCE_COLOR, COLORTERM, TERM).
--title TEXTpage title for --html.
--helpprint the built-in help (reproduced below) and exit.
-hsame as --help.
--versionprint the version and exit.

Exclusive combinations parseArgs rejects: --fixtures with --replay; --record with either; --mint or --event without the data they need (--mint needs live or replay data, --event needs --fixtures); --scan with --fixtures or with --screen.

Filter grammar#

Used by --filter, the / line, and the analyst's show_in_screener tool. Space-separated clauses are ANDed. A clause is field op value, a tag, or a bare word (symbol or name substring).

  • Operators: > >= < <= = == !=.
  • Money takes K / M / B (5M, 100K). Percents are plain or %. Ages need a unit: s m h d w mo (6h, 30m).
  • Tags: launchpad: (alias lp:) one of pump dbc raydium meteora bonk · flag: one of mint freeze top10 dev bundle lp clean · verified:yes|no · sus:yes|no · chain:solana. Negate with a leading ! (!flag:mint).
fieldtypemeaning
vol24usdvolume 24h
vol6husdvolume 6h
vol1husdvolume 1h
vol5musdvolume 5m
liqusdliquidity
mcapusdmarket cap
fdvusdFDV
pricepriceprice
ageageage
holdersnumholders
buysnumbuys 24h
sellsnumsells 24h
orgnumorganic score
top10pcttop-10 share
devpctdev share
lplockedpctLP locked
bundledpctbundled
snipersnumsnipers
m5pctchange 5m
h1pctchange 1h
h6pctchange 6h
h24pctchange 24h

Aliases: vol → vol24, volume → vol24, v24 → vol24, v6h → vol6h, v1h → vol1h, v5m → vol5m, liquidity → liq, lp → liq, marketcap → mcap, cap → mcap, mc → mcap, holder → holders, h → holders, organic → org, score → org, top → top10, top-10 → top10, devpct → dev, locked → lplocked, lplock → lplocked, bundle → bundled, sniper → snipers, chg5m → m5, 5m → m5, chg1h → h1, 1h → h1, chg6h → h6, 6h → h6, chg24 → h24, chg24h → h24, 24h → h24, change → h24

Example: vol24 > 250K liq > 50K age < 30d org >= 60 launchpad:pump !flag:mint cat.

Sort keys#

keysorts bydefault
volvol 24hdesc
liqliquiditydesc
mcapmcapdesc
pricepricedesc
ageageasc
m55m changedesc
h11h changedesc
h66h changedesc
h2424h changedesc
holdersholdersdesc
orgorganic scoredesc
top10top-10 shareasc

Presets#

presetlabelnotes
trenchTrenchfolds the live new-pairs stream into the pool
trendingTrending
runnersRunners
organicOrganic
graduatingGraduatinggated: unavailable until its source exists (the app says why)
smartSmart moneygated: unavailable until its source exists (the app says why)
tradedTop traded
newNewfolds the live new-pairs stream into the pool
boostedBoosted
allAllfolds the live new-pairs stream into the pool

dexterm --help#

The built-in help, verbatim from the app at 87b598f:

dexterm 0.0.1 (live: screener, token, new pairs, watchlist · analyst = your local claude CLI · cyberspace look)

  dexterm                                     interactive, live data (needs a TTY)
  dexterm doctor                              check this machine is ready (Node, colour, claude, network, Helius key)
  dexterm recorder stats|label|prune|export   the history recorder's tables (no network; 'dexterm recorder help')
  dexterm --fixtures                          interactive demo on seeded fixtures
  dexterm --screen <name>                     one-shot frame to stdout (live)
  dexterm --screen <name> --fixtures          one-shot frame from fixtures
  dexterm --screen <name> --replay FILE       one-shot frame from a recording (no network)
  dexterm --screen token --mint MINT          one-shot live token detail
  dexterm --screen newpairs --listen 30       listen to PumpPortal for 30 s, then render
  screens: screener | token | newpairs | watchlist | analyst | boot | ticket | positions | trending | kol

  --filter QUERY            screener filter, e.g. "vol24 > 250K liq > 50K age < 30d launchpad:pump"
  --sort KEY[:asc|desc]     vol | liq | mcap | price | age | m5 | h1 | h6 | h24 | holders | org | top10
  --preset NAME             trench | trending | runners | organic | graduating | smart | traded | new | boosted | all
  --record FILE             save every live response (and the PumpPortal session) to FILE (replay it with --replay)
  --max-requests N          hard cap on live requests for this run (default: none)
  --max-credits N           hard cap on Helius credits for this run (default: 5000)
  --mint MINT               token to open on the token screen
  --interval IV             candle interval for the token screen: 1m | 5m | 15m | 1h | 4h | 1d (default 1h)
  --listen SECONDS          one-shot new pairs: how long to listen to PumpPortal (default 20)
  --db PATH                 SQLite path for cache, watchlist, credit meter and history (default: ~/.local/share/dexterm/dexterm.db; ':memory:' for none)
  --no-recorder             do not record history this run (the recorder keeps token snapshots, feed membership and
                            outcome labels in the --db file for the rug model / backtests; DEXTERM_RECORDER=0 too)
  --verbose                 log every live request to stderr
  --width N --height N      frame size (default: terminal size, else 160×45)
  --theme NAME              cyberspace | midnight | ember | paper (default cyberspace; t cycles)
  --selected N              highlighted row / token index
  --seed N                  fixture PRNG seed (default 7)
  --no-ai                   hide the analyst panel on the token screen

  --intensity LEVEL         off | normal | fever (default fever: rain, trails, glitch, blink, scanlines at 30 fps;
                            normal: 15 fps, sparser rain, no idle aberration; off = calm: neon theme, no motion)
  --calm                    same as --intensity off (DEXTERM_CALM=1 too; NO_COLOR implies it)
  --fps N                   frame cap 1..60 (default 30 fever / 15 normal); data still refreshes at 2 Hz
  --no-boot                 skip the boot sequence (first launch is the full glitch boot, later ones 1 s)
  --frame N                 effect frame index for one-shot renders (same frame = byte-identical output)
  --event KIND              one-shot demo event: newpair | pump | dump | rug (fixtures)
  --ai PHASE                analyst state for one-shot renders: thinking | streaming:N (chars revealed)
  --mood M --activity A     force the rain: mood pump | dump | neutral, activity 0..1
  --t 0..1                  boot progress for --screen boot
  --ascii-rain              hex-only rain glyphs (no half-width katakana; automatic when LANG is not UTF-8)
  --no-images               no coin images (also DEXTERM_IMAGES=0, or {"enabled": false} in ~/.dexterm/images.json);
                            real pixels in kitty / Ghostty / WezTerm / iTerm2 / sixel terminals, block art elsewhere

  AI SCAN MODE (off by default; observe + analyze only — it can never open a ticket, sign or trade):
  --scan                    start AI SCAN MODE on launch (also: Z key, or /scan on|off|resume in the / line or chat)
  --scan-min-score N        lock when a coin scores ≥ N (default 45) with ≥ --scan-min-triggers (default 2) triggers
  --scan-vol-x N            volume-spike trigger: 5m volume ≥ N× the coin's own pace (default 3)
  --scan-max-ai-per-hour N  analyst turns the scan may start per hour (default 8; per coin --scan-max-ai-per-coin 4)
  --scan-refresh-s N        min seconds between reads of the locked coin (default 90; only when data moved)
  more: --scan-min-liq --scan-flow-share --scan-breakout-pct --scan-liq-jump-pct --scan-holders-jump-pct
        --scan-warmup-s --scan-move-pct --scan-cooldown-s --scan-post-lock-s

  --plain                   monochrome text (snapshot surface)
  --ansi                    ANSI output even when stdout is not a TTY (24-bit unless --color / NO_COLOR)
  --html FILE               write a standalone HTML page (for screenshots); --fit WxH --font PX for video frames
  --color DEPTH             truecolor | 256 | none (default: detected; NO_COLOR honoured)
  --tz ZONE                 header clock zone (default America/New_York, the prototype's; 'local' = machine zone)
  --title TEXT              HTML page title
  -h, --help                this text
  --version                 print the version

  Keys: 1-4 screens · tab cycle · j/k move · ⏎ open · esc back · a analyst · t theme · c calm · p pause · q quit
        screener: / filter · s sort · [ ] presets · r refresh · g/G top/bottom
        social (task-1330): T trending in the space · K KOL lists · token screen: s social panel · f filter · x hidden spam
        dexterm kol list | create <name> | add <list> @handle | remove <list> @handle | mute @handle | unmute @handle | enable <list> | disable <list> | import <dir>
        token: B/S PAPER buy/sell (simulated trade ticket) · P positions · w watch
        demo events on --fixtures: n new pair (glitch) · u pump (gold rain) · d dump (red rain) · x rug flag
        AI scan: Z on/off · R resume scanning after a lock · esc (on the locked coin) cancel the analysis
        any key skips the boot sequence or a blink transition

  State: ~/.dexterm/state.json remembers launches (DEXTERM_HOME overrides the directory).
  DEXTERM_OFFLINE=1 refuses live data (tests and CI). Trading is PAPER only — a simulated wallet
  priced from live Jupiter quotes; dexterm never holds keys, signs, or sends a real transaction.
  RPC: DEXTERM_RPC_URL, else ~/.dexterm/helius.key (Helius, metered with a credit meter), else the public RPC.

/scan commands#

Typed on the screener's / line or in the chat input; the leading slash is optional on the / line. /scan (toggle) · /scan on (on) · /scan start (on) · /scan off (off) · /scan stop (off) · /scan resume (resume) · /scan next (resume) · /scan status (status)