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 c289d90. 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
$ dexterm x login                             # Login with X (your own X app; read scopes only)
$ dexterm --workspace morning-hud             # start in a workspace (task-1358)
$ dexterm pack verify ./some-pack             # the install card for a shareable pack

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 workspacelist, show, remove or initialize local workspace files; no network.—
dexterm themelist, show, initialize or check user themes; custom themes extend built-ins with contrast and hue checks.—
dexterm displayshow or set the saved price display mode (display.priceMode: price or mcap) in ~/.dexterm/config.json; journaled, no network.—
dexterm keymapshow effective keys for an optional screen, including configuration overrides.—
dexterm ruleslist, add, remove, enable, disable, check or dry-run rules; fields lists supported inputs. Rules are parsed, never evaluated as code; they can alert or propose, never arm or sign.—
dexterm packshareable packs: list installed packs, verify a directory (the install card), add (unsigned needs --accept-unsigned), remove, export your own workspaces / themes / rules / keymap to a new pack with a sha256 lock, lock, sign with ssh-keygen -Y, trust (pin a publisher key), signers, keymap (show a pack keymap; --merge applies it, reserved keys refused), widget (--enable / --disable a pack widget page). No network; a pack never runs code.—
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 narrativethe narrative board over recorded history (deterministic, no network, no model): what is running and what is working across the tokens dexterm has recorded. `--summary` prints the deterministic 90-second spoken summary instead of the table.--window 1h|24h which window the "what is working" score uses (default 1h)
--summary print the deterministic 90-second spoken summary (keyless, no model)
--db PATH the database (default DEXTERM_DB_PATH, else ~/.local/share/dexterm/dexterm.db)
dexterm backtesthonest rug-model metrics over recorded outcomes (no network, no model): scores a subject against the recorder's outcome-labelled snapshots and prints precision/recall, Brier vs a base-rate Brier, AUC, calibration, a per-feed breakdown and the worst misses/false alarms. With no labelled outcomes it says so and prints no metrics.--subject heuristic|pack_verdicts|larp the pre-registered H1 rug model (default), recorded pack verdicts, or larp: recorded LARP-detector verdicts vs the outcome labels (counts only below 50 matched verdicts; agreement with a bad outcome, not ground truth)
--horizon SEC outcome horizon in seconds (default 3600 = 1h)
--db PATH the database (default DEXTERM_DB_PATH, else ~/.local/share/dexterm/dexterm.db)
--json print the full result object instead of the human table
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 walletthe non-custodial wallet link and the live-trading kill switch, from a shell. `link` opens a one-shot loopback page where Phantom connects and signs a message; only the public key is kept (~/.dexterm/wallet-link.json). `status` shows the link, the caps and the panic state; `unlink` forgets the key. `panic` disables live signing at once (a kill-switch file every signer re-reads plus a lock on the shared cap ledger) and needs no terminal; `resume` is the only way back and needs a real keypress on a TTY (piped input is refused). `probe` runs the devnet plumbing test: a wrap-and-unwrap transaction dexterm builds itself (fees only, never on mainnet) through the whole signer path, your keypress and Phantom. `fast status | create | airdrop | remove` (task-1363) is the capped DEVNET fast wallet armed order plans fire from: `create` needs a real TTY keypress, never overwrites and writes mode 600; `airdrop` asks the devnet faucet; `remove` refuses while it still holds SOL unless --force; --mainnet is refused.--mainnet · --max-usd N · --daily-usd N · --max-sol-out N · --max-slippage-bps N the same caps flags as the app, for `status` (what the signer would apply) and `probe` (which refuses --mainnet)
--reason TEXT panic: why (recorded in the kill-switch file)
fast status | create | airdrop [--sol N] | remove [--force] the devnet fast wallet (public key and balance only; the seed is never printed)
dexterm kolmanage KOL lists in the local DB: list, create <name>, add|remove <list> @handle, mute|unmute @handle, enable|disable <list>, import <dir>, import-x. 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 except `import-x`, which (after `dexterm x login`) imports the lists your X account owns as `own-x-list` lists: handles only, never posts.--db PATH the database (default ~/.local/share/dexterm/dexterm.db)
dexterm agentbring-your-own-agent registry + loopback bus (task-1345): register an agent and mint a one-time token (add/rotate/remove/list/tier/pause/resume), run a standalone loopback agent bus (serve, on fixtures or keyless live reads, optional roster popup), connect a test agent (connect), and read the audit log, proposals and agent packs (audit/proposals/packs). Every agent has a server-side capability tier (observe / annotate / propose); no agent path can arm, sign, confirm, raise a cap, change the gate or touch a wallet, a mandate or the signer. Tokens are read only from $DEXTERM_AGENT_TOKEN, never a flag.--tier observe|annotate|propose the capability tier at `agent add`
--note T · --reads N · --proposals N · --connections N per-agent note and rate/quota/connection limits at `agent add`
--fixtures | --live `agent serve` data source (deterministic fixtures, the default, or keyless live reads)
--roster `agent serve` also opens the agent roster popup (pause / kick / audit)
--port N · --db PATH `agent serve` bind port and shared database
--name NAME · --url ws://127.0.0.1:PORT · --watch SECONDS `agent connect` (token via $DEXTERM_AGENT_TOKEN)
--agent NAME · --status S · --limit N filters for `agent audit` / `agent proposals`
dexterm plantyped order plans (task-1355): propose a plan (entry / take-profit / stop triggers on market cap), list it, arm it against a mandate, cancel it, or read and verify the hash-chained journal. Proposing never arms; `arm` reads one physical keystroke on a TTY and refuses a pipe, a subprocess, voice or an agent. Paper by default.propose --mint M --symbol S --size USD --entry TRIGGER propose a plan (also --tp, repeatable, --stop, --decimals, --supply, --slippage)
list [--json] list plans
arm <planId> --mandate <id> arm a plan under a mandate (physical keypress on a TTY only)
cancel <planId> cancel a plan
journal [--verify] [--export] the hash-chained plans journal (~/.dexterm/plans.journal)
amend <planId> [--size USD] [--entry TRIGGER] [--tp EXIT]… [--stop TRIGGER|none] [--slippage BPS] edit a PROPOSED plan: a new plan with a new hash supersedes the old one (every earlier confirmation is void); never arms
dexterm mandatestanding mandates (task-1355): draft the caps a set of plans may use (total, per trade, per coin, daily loss, the highest confirmation tier, a time-to-live), list them, arm one (physical keypress only) or revoke it. The signer-side caps still apply on top.draft [--total USD] [--per-trade USD] [--per-coin USD] [--daily-loss USD] [--max-tier keypress|ptt-held|hands-free] [--ttl-hours N] draft a mandate
list [--json] list mandates
arm <id> arm a mandate (physical keypress on a TTY only)
revoke <id> revoke a mandate
dexterm followcopy trading, stages 1 and 3 from a shell (task-1360): `add` follows a wallet with an optional label of your own (firewalled, local, never inferred or exported), `remove` / `list` / `purge --yes` manage the list (~/.dexterm/follows.json, mode 600), `stats` and `trades` fetch one page of the wallet's history (free Helius key; 10 credits) and print its decoded swaps, FIFO realised PnL with the rate used, win rate (hidden under n = 10) and the sample caption. `auto <addr> …` drafts the auto-mirror caps, clamped down to the ceilings ($100/trade, $500/day, 10 open, 10 s cooldown, k ≤ 2); auto is always OFF in a fresh process and is enabled only in the app by a keypress (U then A) after the less-safe popup. `auto` alone lists the policies; `--off` turns one off. Nothing here trades, proposes or signs.add <addr> [--name LABEL] follow a wallet (your own label, firewalled, ≤ 24 chars)
remove <addr> unfollow
list [--json] the follow list
stats <addr> [--json] one history fetch: trades, FIFO realised PnL, win rate (n), early-entry note, per-mint rows
trades <addr> [--limit N] the decoded swaps behind the stats
purge --yes delete every follow and label
auto <addr> [--per-trade USD] [--daily USD] [--max-open N] [--cooldown SEC] [--k X] [--disarm N] [--off] draft (or turn off) the auto-mirror caps for a followed wallet; no addr lists the policies
dexterm xLogin with X (OAuth 2.0 PKCE on the fixed loopback callback http://127.0.0.1:41287/callback) with YOUR OWN X developer app: `set-client-id` stores the app's Client ID (prompted on the terminal or one line on stdin, never on the command line), `login` opens your browser and stores the tokens in ~/.dexterm/x/tokens.json (mode 600; read scopes only: tweet.read users.read list.read offline.access), `status` shows the handle, scopes, token age and file modes (never a token), `logout` revokes both tokens at X and deletes the record. dexterm never posts and never scrapes; see docs › Login with X for the free vs paid tiers.--stdin set-client-id: read the Client ID as one line from stdin instead of prompting (scripts)
dexterm kblist, show, create, edit, check and reset the bundled knowledge-base entries the analyst, Jarvis and the MCP server read. Your own files live in ~/.dexterm/kb/entries/ (same id as a bundled entry overrides it, a new id adds one) and take effect on the next call with no restart. KB text explains mechanics and patterns only; it never holds facts about a live token.—
dexterm skilllist, show, create, edit, check and reset the analyst's skills (read-only guidance). Your own files live in ~/.dexterm/skills/ (same name as a bundled skill overrides it, a new name adds one). A skill may name only read tools; `dexterm skill check` refuses any skill that names a trade, sign, arm or ticket tool.—

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.
--workspace NAMEstart in default, morning-hud, or a user workspace under ~/.dexterm/workspaces/.
--price-mode MODEprice | mcap: show the USD price or the market cap (price × supply) on the tables, the token screen and both charts for this run; overrides config.json display.priceMode without saving it. `$` toggles and saves it.
--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.
--soundtrade-moment sound cues: a buy chirp, a sell sweep then a profit chime or a loss thud, an error buzz on a refusal or failure. Muted by default (also DEXTERM_SOUND=1). Cues follow the SAME settled outcome the effects do, never a quote or an in-flight send; the WAVs are synthesized once into ~/.dexterm/sounds and played detached (afplay on macOS), so the render loop never waits.

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).

live trading (signer process)

flagwhat
--mainnetallow MAINNET swaps (real funds) within the caps, and let --max-usd / --daily-usd / --max-sol-out / --max-slippage-bps go above their defaults (never above the hard ceilings). Without it the signer process talks to devnet, refuses any mainnet plan and clamps every cap to its default or lower. The banner turns red. These flags are forwarded once to the signer process, which validates them itself; nothing on its channel can change them later.
--max-usd Nper-trade USD cap, priced by the signer from its own two-source SOL/USD feed (default $5; above $5 needs --mainnet; hard ceiling $500). An over-ceiling value is refused at startup.
--daily-usd Ndaily USD cap across every mainnet trade on this machine, kept in a shared SQLite ledger that survives a restart (default $20; above $20 needs --mainnet; hard ceiling $2000).
--max-sol-out NSOL that may leave the wallet in one transaction per the simulation, any network (default 1; above 1 needs --mainnet; ceiling 5).
--max-slippage-bps Nslippage ceiling a plan may carry (default 500; above 500 needs --mainnet; ceiling 1000).
--trade-rpc URLthe signer process's RPC endpoint (default api.devnet.solana.com). The network the signer reports and caps by is classified from this URL by exact hostname, never from a label; without --mainnet anything but a known devnet host is refused at startup.
--no-livepaper only: never start the signer process; L on a ticket does nothing. Replay and offline runs are paper-only regardless.

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
rugp(rug) H1-v0.1 heuristicasc

Presets#

presetlabelnotes
trenchTrenchfolds the live new-pairs stream into the pool
trendingTrending
runnersRunners
organicOrganic
graduatingGraduatingfolds the live new-pairs stream into the pool; gated: 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 c289d90:

dexterm 0.1.0 (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 kb list|show|new|edit|check|reset|path     your knowledge-base entries (~/.dexterm/kb/entries) over the bundled 17
  dexterm skill list|show|new|edit|check|reset|path  your analyst skills (~/.dexterm/skills) over the bundled ones (read tools only)
  dexterm narrative [--window 1h|24h] [--summary]  the narrative board over recorded history (no network, no model)
  dexterm backtest [--subject heuristic|pack_verdicts] [--horizon SEC]  honest rug-model metrics over recorded outcomes (no network, no model)
  dexterm wallet link|unlink|status|panic|resume  link a Phantom wallet via a local bridge (pubkey only); panic disables live trading, resume needs a TTY keypress
  dexterm plan propose|list|arm|cancel|journal     conditional order plans (entry/ladder/take-profit/moon bag/stop); arming needs a physical keypress
  dexterm mandate draft|list|arm|revoke            standing capped mandates (fast wallet); arming needs a physical keypress — voice/agents can never arm
  dexterm follow add|remove|list|stats|trades|purge  copy trading tier 1: follow a wallet (your list, local labels), its decoded swaps + FIFO PnL; alerts in the app
  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 | bubbles | narrative | plans | follows | rules

  --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 | rug
  --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 or a user theme (default cyberspace; t cycles built-ins then user themes)
  --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
  --sound                   trade-moment sound cues (buy chirp, profit chime, loss thud, error buzz) after a CONFIRMED
                            result only; muted by default (also DEXTERM_SOUND=1); ~/.dexterm/sounds holds the WAVs
  --workspace NAME          start in a workspace: default | morning-hud | a file in ~/.dexterm/workspaces/ (task-1358);
                            in the app ctrl+w then w (list) · n/N (next/prev) · s (save as) · m (morning HUD) · o (popups) · d · 1-9
  --price-mode MODE         price | mcap: show USD price or MARKET CAP (price × supply) on the tables, token screen and both
                            charts for this run (default: config.json display.priceMode; $ in the app toggles and saves it)
  dexterm workspace list|show|remove|init         the workspace files (no network)
  dexterm theme list|show|init|check              user themes in ~/.dexterm/themes (extends a built-in; contrast + hue guarded)
  dexterm keymap [screen]                         the effective keys (defaults + config.keymap overrides, marked ·)
  dexterm display [price|mcap]                    show or set the price display mode (market cap = price × supply)
  dexterm rules list|add|remove|enable|disable|check|dry-run|fields
                            "when <cond> [for n ticks] then alert|ticket|ask|popup|tag|sound|watch" rules in config.json (task-1358);
                            parsed never eval'd; mandatory cooldown + max/h; rules only alert or PROPOSE (ctrl+r in the app)
  dexterm pack list|verify|add|remove|export|lock|sign|trust|signers|keymap|widget
                            shareable packs (task-1358): workspaces + themes + rules + a keymap + popup widgets as plain files
                            with a sha256 pack.lock and an optional ssh-keygen signature; trust reviewed > signed > unsigned.
                            a pack never runs code: widgets install DISABLED (pack widget … --enable after reading the page),
                            unsigned rules load disabled, the keymap merges only with "pack keymap <name> --merge"

  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

  LIVE TRADING (task-1328; devnet by default; a separate signer process holds the caps and signs via Phantom):
  --mainnet                 allow MAINNET swaps (real funds) within the caps; without it the signer refuses mainnet
  --max-usd N               per-trade USD cap (default $5; raising it needs --mainnet; hard ceiling $500)
  --daily-usd N             daily USD cap (default $20; raising it needs --mainnet; hard ceiling $2000)
  --max-sol-out N           SOL that may leave the wallet in one tx (default 1, ceiling 5)
  --max-slippage-bps N      slippage ceiling (default 500, ceiling 1000)
  --trade-rpc URL           the signer's RPC (default devnet; must be devnet unless --mainnet)
  --no-live                 paper only: never start the signer process
  /wallet [status]          linked wallet (pubkey only), the signer's network + caps, panic state
  /wallet link              open the browser to link a Phantom wallet (sign-a-message proof; no transaction)
  /wallet unlink            forget the linked public key
  /wallet panic             disable live signing at once (kill-switch file + cap-ledger lock); resume needs `dexterm wallet resume`
  /wallet probe             devnet plumbing test: a wrap-and-unwrap transaction you sign in Phantom (fees only)
  dexterm wallet fast …     the capped DEVNET fast wallet armed order plans fire from: create (TTY keypress) · status · airdrop · remove

  LOGIN WITH X (task-1357; your own X app, your limits, your bill; read scopes only, no scraping, dexterm never posts):
  dexterm x status             Login with X: client id stored? logged in as @handle? scopes, expiry, file modes
  dexterm x set-client-id      store YOUR X app's Client ID (prompted on the terminal, or one line on stdin with --stdin)
  dexterm x login              OAuth2 PKCE in your browser → tokens in ~/.dexterm/x/tokens.json (0600); read scopes only
  dexterm x logout             revoke both tokens at X and delete the local record

  --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 · v voice · t theme · c calm · p pause · q quit
        voice (JARVIS, macOS): v push-to-talk (press to talk, press to send) · m mute · , change voice · esc stop speaking
                               voice asks the analyst or triggers safe actions (open/filter/watch/open a PAPER ticket);
                               a spoken "buy"/"sell" only OPENS a ticket — you still confirm it with a keypress
        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> | import-x
        Login with X (task-1357): dexterm x login · then the SOCIAL panel + TRENDING read X with your own limits · KOL screen: X imports your X lists · o = only this handle
        token: B/S buy/sell ticket (PAPER; L on the ticket flips LIVE when a wallet is linked) · P positions · w watch
        token: M bubble map (holder graph: clusters by funder / same-slot buys / transfers; colour = rule) · bubble map: M popup · m treemap · z zoom · D deep scan
        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 by default — a simulated wallet
  priced from live Jupiter quotes. LIVE (L on a ticket, /wallet link first): a separate signer process
  quotes, builds, decodes, simulates and enforces the caps; Phantom signs in your browser; dexterm never
  holds a key. The analyst, voice and scan mode can never open, confirm or sign a live trade.
  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)