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-testExit codes: 0 ok · 1 interactive mode without a TTY, or a doctor failure · 2 bad arguments (the message names the flag).
Subcommands#
| command | what | flags |
|---|---|---|
dexterm doctor | pre-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 mcp | run 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 recorder | the 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 kol | manage 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
| flag | what |
|---|---|
--fixtures | seeded demo data instead of the network (interactive or one-shot). The demo event keys n/u/d/x work here. |
--replay FILE | serve a recording made with --record: no network, same frames. A recording also carries the PumpPortal session. |
--record FILE | save 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 N | hard cap on live requests for this run (default none). Used by the smoke scripts. |
--max-credits N | hard 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 PATH | SQLite path for the cache, watchlist, credit meter and paper wallet (default `~/.local/share/dexterm/dexterm.db`; `:memory:` for a throwaway session). |
--no-recorder | do 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. |
--verbose | log every live request to stderr (source, status, latency, redacted URL) plus the rpc provider and db path. |
screener
| flag | what |
|---|---|
--filter QUERY | screener 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 NAME | screener feed preset (see the presets table). A gated preset fails with its reason. |
one-shot frames
| flag | what |
|---|---|
--screen NAME | render 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 MINT | open this token on the token screen (base58 address). Live or replay only. |
--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 before rendering (default 20, max 120). |
--width N | frame width for one-shot renders (default: the terminal, else 160). |
--height N | frame height for one-shot renders (default: the terminal, else 45). |
--selected N | highlighted row or token index for one-shot renders. |
--seed N | fixture PRNG seed (default 7). |
--no-ai | hide the analyst panel on the token screen. |
--frame N | effect frame index for one-shot renders (the same frame renders byte-identical output). |
--event KIND | one-shot demo event on fixtures: newpair · pump · dump · rug. |
--ai PHASE | analyst panel state for one-shot renders: thinking · streaming:N (characters revealed). |
--mood M | force the rain mood: pump · dump · neutral. |
--activity A | force the rain activity 0..1. |
--t 0..1 | boot progress for `--screen boot`. |
the look
| flag | what |
|---|---|
--theme NAME | cyberspace (default) · midnight · ember · paper. `t` cycles at runtime. |
--calm | effects off: no rain, glitch, blink or scanlines (same as --intensity off; DEXTERM_CALM=1 too; NO_COLOR implies it). |
--intensity LEVEL | off · normal · fever. fever (default): rain, trails, glitch, blink, scanlines at 30 fps; normal: 15 fps, sparser rain, no idle aberration. |
--fps N | frame 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-boot | skip the boot sequence (first launch is the full glitch boot, later launches one second). |
--ascii-rain | hex-only rain glyphs instead of half-width katakana (automatic when LANG is not UTF-8). |
--tz ZONE | header clock zone (default America/New_York; `local` = the machine zone). Replays pin the recording's zone. |
--no-images | no 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
| flag | what |
|---|---|
--scan | start AI scan mode with the run (the same path as the Z key). Live or replay only; incompatible with --screen. |
--scan-min-score N | lock when a coin scores at least N (default 45). |
--scan-min-triggers N | and at least N triggers fired (default 2). |
--scan-min-liq USD | ignore coins below this liquidity (default 10000). |
--scan-vol-x N | volume trigger: 5m volume at least N× the coin's own pace (default 3). |
--scan-flow-share 0..1 | flow trigger: 5m buy share at or above this (default 0.62). |
--scan-breakout-pct PCT | breakout trigger: last close above the prior 20 cached candles' high by this % (default 2). |
--scan-liq-jump-pct PCT | liquidity trigger: +% vs the coin's own 10-minute minimum (default 20). |
--scan-holders-jump-pct PCT | holders trigger: +% vs the oldest 10-minute sample (default 5, and at least +25 holders). |
--scan-warmup-s S | seconds of watching before the first lock is possible (default 30). |
--scan-max-ai-per-hour N | analyst turns the scan may start per rolling hour (default 8). |
--scan-max-ai-per-coin N | analyst turns per coin per hour (default 4). |
--scan-refresh-s S | minimum seconds between reads of the locked coin (default 90; a read also needs the data to have moved). |
--scan-move-pct PCT | price move that counts as "moved" for a refresh (default 3). |
--scan-cooldown-s S | how long a released coin is barred from locking again (default 900). |
--scan-post-lock-s S | no new lock for this long after a lock ends (default 60). |
output
| flag | what |
|---|---|
--plain | monochrome text output (the snapshot-test surface). |
--ansi | ANSI output even when stdout is not a TTY (24-bit unless --color or NO_COLOR). |
--html FILE | write the frame as a standalone HTML page (screenshots); always rendered in truecolor. |
--fit WxH | with --html: fixed page size, centred, no window chrome (video frames). |
--font PX | with --html: font size in pixels. |
--color DEPTH | truecolor · 256 · none (default: detected from NO_COLOR, FORCE_COLOR, COLORTERM, TERM). |
--title TEXT | page title for --html. |
--help | print the built-in help (reproduced below) and exit. |
-h | same as --help. |
--version | print 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:smhdwmo(6h,30m). - Tags:
launchpad:(aliaslp:) one ofpump dbc raydium meteora bonk·flag:one ofmint freeze top10 dev bundle lp clean·verified:yes|no·sus:yes|no·chain:solana. Negate with a leading!(!flag:mint).
| field | type | meaning |
|---|---|---|
vol24 | usd | volume 24h |
vol6h | usd | volume 6h |
vol1h | usd | volume 1h |
vol5m | usd | volume 5m |
liq | usd | liquidity |
mcap | usd | market cap |
fdv | usd | FDV |
price | price | price |
age | age | age |
holders | num | holders |
buys | num | buys 24h |
sells | num | sells 24h |
org | num | organic score |
top10 | pct | top-10 share |
dev | pct | dev share |
lplocked | pct | LP locked |
bundled | pct | bundled |
snipers | num | snipers |
m5 | pct | change 5m |
h1 | pct | change 1h |
h6 | pct | change 6h |
h24 | pct | change 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#
| key | sorts by | default |
|---|---|---|
vol | vol 24h | desc |
liq | liquidity | desc |
mcap | mcap | desc |
price | price | desc |
age | age | asc |
m5 | 5m change | desc |
h1 | 1h change | desc |
h6 | 6h change | desc |
h24 | 24h change | desc |
holders | holders | desc |
org | organic score | desc |
top10 | top-10 share | asc |
Presets#
| preset | label | notes |
|---|---|---|
trench | Trench | folds the live new-pairs stream into the pool |
trending | Trending | |
runners | Runners | |
organic | Organic | |
graduating | Graduating | gated: unavailable until its source exists (the app says why) |
smart | Smart money | gated: unavailable until its source exists (the app says why) |
traded | Top traded | |
new | New | folds the live new-pairs stream into the pool |
boosted | Boosted | |
all | All | folds 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)