dexterm

docs › Keyboard reference

Keyboard reference

Every key, generated from the app's keymap and the help overlay at build time.

Generated at build time from packages/tui/src/keymap.ts (the keymap) and packages/cli/src/screens/overlay.ts (the ? overlay, which adds the keys the interactive loop handles itself). npm run docs:check fails if this page and the app disagree. Source commit: c289d90 (2026-10-15).

Conventions: keys are case-sensitive (g and G differ). A key listed under a screen overrides the global binding on that screen only (on the token screen 1–6 are timeframes, not screen switches). While the chat input, the filter line, the sort menu or a PAPER ticket has the keys, printable keys type instead of acting, so q or 1 can never quit or navigate out from under a half-typed order.

Global keys#

keylabelwhat it does
q / ^Cquitquit; the terminal is always restored (also on a crash or a signal). · quit
1screenerjump to the screener. · screen.screener
2new pairsjump to the new-pairs stream. · screen.newpairs
3watchlistjump to the watchlist. · screen.watchlist
4analystopen the analyst tab (chat beside a coin list). · screen.analyst
tabscreenscycle screener → new pairs → watchlist → analyst. · screen.next
j / ↓movemove the cursor down one row (on the token screen: scroll a long answer). · move.down
k / ↑movemove the cursor up one row (on the token screen: scroll a long answer). · move.up
g / hometopjump to the first row. · move.top
G / endbottomjump to the last row. · move.bottom
PgDn / ^Fpagepage down (20 rows; on a chat screen: scroll the transcript). · move.pagedown
PgUp / ^Bpagepage up (20 rows; on a chat screen: scroll the transcript). · move.pageup
⏎openopen the highlighted token's detail screen. Opening is free: no analyst run starts. · open
esc / ⌫backgo back to the previous screen. · back
aask claudeask Claude: on a list screen it runs a rug-check on the highlighted coin (or a trench scan with nothing highlighted) and opens the analyst tab; on the token screen it runs the full dossier (or toggles the panel once a conversation exists); on the analyst tab it focuses the input. This is the one explicit, paid run. · analyst.toggle
vvoiceJarvis push-to-talk (macOS): press to open the mic, speak, press again to send. The first press enables voice and asks for Microphone + Speech permission. Voice can only ask the analyst or trigger safe actions (switch screens, open a coin, filter, watch, open a PAPER ticket in editing, open the chart popup); it can never confirm, sign, flip LIVE or raise a cap. See [Jarvis voice mode](/docs/voice/). · voice.talk
?helpshow every key for the current screen (the first launch shows the welcome card instead). · help.toggle
tthemecycle the theme: cyberspace → midnight → ember → paper. · theme.next
ppausepause live refreshes (the data stops; the keys still work). · pause.toggle
$price ⇄ mcapshow market cap instead of the USD price (and back) on every screen and both charts; saved to config.json as display.priceMode. Display only: nothing that trades reads it. · display.priceMode
wwatchwatch or unwatch the highlighted token (persisted in the local SQLite database). · watch.add
balertpropose a liquidity alert for the highlighted token. Proposals do nothing until you arm them. · alert.propose
yconfirm alertarm the oldest proposed alert. Armed rules fire once into the ALERTS log. · alert.confirm
xdismiss alertdismiss the oldest proposed alert. · alert.dismiss
Ppositionsopen the PAPER positions screen (equity, cash, PnL, trade history). · screen.positions
ZAI scanAI scan mode on/off (observe-only; it can never trade). · scan.toggle
Rresume scanafter a lock: release the coin and go back to scanning. · scan.resume
Ttrendingopen TRENDING IN THE SPACE: coins ranked from keyless public lists (Jupiter trending and organic score, GeckoTerminal trending pools, CoinGecko trending for macro; DexScreener paid boosts count against a coin) with a NEWS column from publishers' RSS. No X API and no X posts in live mode. Works everywhere except the token screen, where T opens Telegram (esc, then T). · screen.trending
KKOL listsopen the KOL lists: your own handle lists and imported packs, kept in the local database. Nothing is followed, posted or logged in to. · social.kol
Nnarrative boardopen the NARRATIVE BOARD: what is running and what is working across recorded tokens; deterministic lexicon clustering, no model. · screen.narrative
Oorder plansopen the order plans screen (plans and standing mandates; paper by default). · screen.plans
Ufollowed walletsopen the FOLLOWED WALLETS screen (copy trading stage 1): your own follow list, each wallet's decoded swaps and FIFO PnL with its sample, and the alerts tape. Read-only. · screen.follows
^W Wworkspaceslist available workspaces. · workspace.list
^W N / ^W TABnext workspaceactivate the next workspace. · workspace.next
^W Nprevious workspaceactivate the previous workspace. · workspace.prev
^W Ssave workspaceenter a name to save the current workspace; enter saves, escape cancels. · workspace.save
^W Mmorning HUDactivate the morning HUD workspace. · workspace.morning
^W Oopen workspace popupsopen the active workspace's configured popups. · workspace.popups
^W Ddefault workspaceactivate the default workspace. · workspace.default
^Rrulesopen the rules screen. · screen.rules

Per-screen keys#

Screener

keylabelwhat it does
ggo to coinopen the go-to prompt: paste or type a contract address (or a dexscreener / pump.fun / solscan link) and press enter to open that coin's live token screen, read-only. Esc cancels; a bad address shows a notice and changes nothing. · goto.open
/filteropen the filter line. Type a query in the filter grammar; ⏎ applies, esc cancels. `/scan …` on this line is a command, not a filter. · filter.edit
\clear filterclear the applied filter (the preset's own baked filter stays). · filter.clear
ssortopen the sort menu: j/k pick a key, ⏎ on the current key flips the direction. · sort.menu
] / → / lpresetnext feed preset. · preset.next
[ / ← / hpresetprevious feed preset. · preset.prev
rrefreshrefresh this screen's data now. · refresh

Token screen

keylabelwhat it does
ggo to coinopen the go-to prompt: paste or type a contract address (or a dexscreener / pump.fun / solscan link) and press enter to open that coin's live token screen, read-only. Esc cancels; a bad address shows a notice and changes nothing. · goto.open
iaskfocus the chat input so the next keystrokes type a question (⏎ does the same). · input.focus
11mchart timeframe 1 minute. · tf.1
25mchart timeframe 5 minutes (derived locally from 1m, no fetch). · tf.2
315mchart timeframe 15 minutes (derived locally from 1m, no fetch). · tf.3
41hchart timeframe 1 hour (the default). · tf.4
54hchart timeframe 4 hours (derived locally from 1h, no fetch). · tf.5
61dchart timeframe 1 day (derived locally from 1h, no fetch). · tf.6
ycopy CAcopy the full contract address to the clipboard (pbcopy / clip / xclip; the address stays on screen if none exists). · copy.ca
rrefreshrefresh this screen's data now. · refresh
Bpaper buyopen a PAPER buy ticket for this token (simulated; nothing goes on-chain). · trade.buy
Spaper sellopen a PAPER sell ticket for this token. · trade.sell
Wopen siteopen the token's advertised website in your browser. The URL is shown first; only http(s) links ever launch. · open.web
Vvet product (Claude)vet the product: run the larp-check skill on this token (reads its website, domain registration and GitHub, read-only, only when you press this). · analyst.larp
Xopen Xopen the token's advertised X account in your browser. · open.x
Topen TGopen the token's advertised Telegram in your browser. · open.tg
Llinkslist every advertised link in a menu (j/k select, ⏎ open, esc close). Links are claims by the token, not verified. · open.links
Cchart popupopen or close the chart popup for this token (native docked window, or your browser as the fallback). · popup.chart
Itoken popuptoken screen: open or close the token-detail popup (identity, market, risk, and the snipers / bundled cells from the wallet-intel scan; read-only; your browser as the fallback). · popup.token
Fflow ⇄ tapeswap the lower-right panel between BUY/SELL FLOW (default) and the raw trade tape. · tape.toggle
ssocialtoken screen: swap ON-CHAIN/HOLDERS for the SOCIAL panel. Live it shows rule-written on-chain rows (labelled holders, tracked wallets, trades ≥ $5K); X and Telegram posts appear only in the --fixtures demo, because no keyless post source is wired. · social.toggle
ffiltercycle the source filter (all · kol · x · chain · news · own) on the trending board or the token SOCIAL panel. · social.filter
Mbubble maptoken screen: open the BUBBLE MAP for this coin: holders as packed bubbles (area = share, colour = the rule that labelled it), CLUSTERS, sample-captioned HOLDER INSIGHTS and the WHY THIS LABEL panel. A light wallet-intel scan runs when the screen opens; keyless it shows holders + static labels and says what a free Helius key adds. · intel.bubbles

New pairs

keylabelwhat it does
ggo to coinopen the go-to prompt: paste or type a contract address (or a dexscreener / pump.fun / solscan link) and press enter to open that coin's live token screen, read-only. Esc cancels; a bad address shows a notice and changes nothing. · goto.open
rrefreshrefresh this screen's data now. · refresh

Watchlist

keylabelwhat it does
ggo to coinopen the go-to prompt: paste or type a contract address (or a dexscreener / pump.fun / solscan link) and press enter to open that coin's live token screen, read-only. Esc cancels; a bad address shows a notice and changes nothing. · goto.open
dremoveremove the highlighted watchlist row. · watch.remove
rrefreshrefresh this screen's data now. · refresh

Analyst tab

keylabelwhat it does
iaskfocus the chat input so the next keystrokes type a question (⏎ does the same). · input.focus

PAPER positions

keylabelwhat it does
rrefreshrefresh this screen's data now. · refresh
keylabelwhat it does
Mfeeds popuptrending screen: open or close the feeds popup: the board's posts as the SOCIAL panel filters them (injection rows withheld) plus the official news headlines, newest first; ⏎ in the window opens that coin here. · popup.feeds
ffiltercycle the source filter (all · kol · x · chain · news · own) on the trending board or the token SOCIAL panel. · social.filter
xhidden spamshow or hide rows held back as spam, duplicates or cashtag squats; the hidden count stays in the title either way. · social.spam
nnarrativecycle the narrative filter: only coins linked by shared KOL threads or co-mentions. News never forms a narrative. · social.narrative
ssourcesshow the SOURCES panel: each venue's health, data age and limiter rate. · social.sources
asummary (claude)one analyst turn over the board, run by your own claude: firewalled posts only, injection-like posts withheld (counted, never shown to the model), spam counted not shown. At most once every 5 minutes. · social.summary
rrefreshrefresh this screen's data now. · refresh

KOL lists

keylabelwhat it does
spcenable/disable listenable or disable the selected list for the trending board. · kol.toggle
mmute/unmutemute or unmute the selected handle. · kol.mute
dremove handleremove the selected handle from a manual list (packs are read-only). · kol.remove
iadd handletype a new handle into the selected manual list (⏎ saves, esc cancels). · kol.add
Ximport X listsimport the X lists your account owns as KOL lists (handles only; needs `dexterm x login` and live mode). · kol.importx
oonly this handleonly this handle: narrow the trending board and the token SOCIAL panel to the selected handle's posts (again, or f, clears). · kol.focus

Keys handled by the loop#

These are not keymap bindings; the interactive loop handles them in context. Each row is verified against the source by docs:check.

wherekeyswhat
everywhereccalm mode on/off: rain, glitch, blink and scanlines off; back to the last intensity when pressed again.
everywhere^Cquit, whatever is focused (a half-typed question or an open ticket cannot trap you).
everywhereany keyskips the boot sequence or a blink transition; the key still does its job.
welcome / help cardany key · ?any key closes the card; ? turns the welcome card into the key list. A digit 1–4 on the welcome card also switches to that screen.
chat (token · analyst)⏎focus the input when it is not focused; send the question when it is. Typing `/scan …` here runs a scan command instead of asking Claude.
chat (token · analyst)escclear a non-empty input, else blur it (the number keys and q work again). While an answer is streaming, esc interrupts the analyst from any screen.
chat (token · analyst)⌫ · ^U · ^Wdelete a character · clear the line · delete the last word. The input holds up to 400 characters.
analyst tab, coin-list answer↑ ↓ · ⏎ · o · escwhen an answer lists coins it renders as a table: arrows move the table cursor, ⏎ opens that coin, o opens its PAPER ticket (edit phase only, never confirms), esc returns to the chat.
AI scanescon the locked coin: cancel the analysis but keep the coin (state PAUSED); a second esc navigates. On the screener table while SCANNING: stop the scan.
links menuj k ↑ ↓ · ⏎ · esc qselect a link · open it (the URL is drawn on screen before the browser launches) · close.
PAPER ticket0-9 .type the size (SOL or % of balance when buying; % of the position when selling) or the slippage in bps.
PAPER tickettabswitch between the size and slippage fields.
PAPER ticket← →flip the side (buy ⇄ sell).
PAPER ticketutoggle the buy size unit between SOL and % of balance (a sell is always % of the position).
PAPER ticket⏎review: arm the order (the confirm step). Sizes above 1 SOL must be typed back digit for digit.
PAPER ticket (confirm step)y · ⏎confirm the PAPER fill from a fresh quote. Any other key cancels the arm; a stray key can never confirm.
PAPER ticketesccancel the confirm step, or close the ticket. While a fill is in flight, esc aborts the quote.
ticketLflip the ticket PAPER ⇄ LIVE. LIVE needs a linked wallet (/wallet link) and a running signer process; otherwise the ticket says why and stays PAPER. The header shows the network the signer reports (devnet by default; MAINNET turns it red).
LIVE ticket⏎ask the signer process for a PLAN: it quotes, builds, decodes, binds the route to your order, simulates with your token balances and shows what will be signed, what you pay and receive, impact, fee, route, the SOL/USD sources and the caps verdict (“will be refused: …” when it would be).
LIVE ticket (PLAN screen)Y · ⏎ · escY (or ⏎) is the keypress gate: the signer re-checks the caps, reserves the USD, opens Phantom to sign, verifies and re-simulates the signed bytes and submits. esc drops the plan; any other key cancels. Nothing here can be pressed by the analyst, voice or scan mode.
LIVE ticketffit the size to the signer's cap: the ticket prices your size at the signer's own SOL/USD before ⏎ (red with “use ≤ … SOL” when it is over the per-trade cap or what is left of the daily cap); f sets the largest SOL size that fits, with room for the network fee and a token-account rent, and re-quotes. Buys only; PAPER has no caps.
LIVE ticket (rate limited)r · escwhen Jupiter rate-limits the signer the ticket keeps the plan and shows “Jupiter is rate limiting this IP (429 from api.jup.ag), retrying in Ns”, then retries by itself; r retries now, esc cancels back to editing. Nothing is built or signed while it waits.
screener / line · chat input/wallet [status|link|unlink|panic|probe]wallet commands typed where a filter or a question would go: status (linked key, signer network and caps, panic state), link (opens the browser to Phantom), unlink, panic (disable live signing everywhere at once), probe (the devnet plumbing test as a LIVE ticket). resume is deliberately not available in-app: re-enabling needs `dexterm wallet resume` in a terminal.
filter linetype · ⏎ · escedit the filter query; apply; cancel. Errors show inline with the column that failed.
sort menuj k · ⏎ · escpick a sort key; ⏎ on the current key flips the direction; esc closes.
--fixtures demo onlyn · u · d · xdemo events on seeded fixtures: new pair (glitch) · pump (gold rain) · dump (red rain) · rug flag.
everywhere (voice on)mmute or unmute spoken replies.
everywhere (voice on),cycle the macOS voice.
everywhere (voice on)esc · any keywhile the mic is live or opening: esc cancels it; any other key closes the mic first and then does its normal job (also on the ticket, chat, filter and overlay screens). esc also stops a spoken reply. The mic auto-closes after 15 s.
followed wallets (typing an address)⏎ · escadd the typed wallet (and label) to the follow list, or cancel. While typing, every key goes to the input line: q and 1-4 never leak.
followed wallets (auto-mirror prompt)y · ⏎ · escturn auto-mirror ON for the wallet (the service drafts and arms the copy mandate on this physical keypress and refuses without the less-safe popup), or leave it off. Every other key is swallowed.

What ? shows#

The in-app help card lists exactly the rows below for each screen (global keys shadowed by a screen-specific binding are attributed to the screen):

KEYS — Screener (49 rows)
keyslabel
q / ^Cquit
1screener
2new pairs
3watchlist
4analyst
tabscreens
j / ↓move
k / ↑move
hometop
G / endbottom
ggo to coin
PgDn / ^Fpage
PgUp / ^Bpage
⏎open
esc / ⌫back
aask claude
vvoice
?help
ttheme
ppause
$price ⇄ mcap
/ filter
\clear filter
ssort
] / → / lpreset
[ / ← / hpreset
rrefresh
wwatch
balert
yconfirm alert
xdismiss alert
Ppositions
ZAI scan
Rresume scan
Ttrending
KKOL lists
Nnarrative board
Oorder plans
Ufollowed wallets
^W wworkspaces
^W n / ^W tabnext workspace
^W Nprevious workspace
^W ssave workspace
^W mmorning HUD
^W oopen workspace popups
^W ddefault workspace
^Rrules
ccalm mode (effects off)
?this help
KEYS — Token screen (59 rows)
keyslabel
q / ^Cquit
tabscreens
j / ↓move
k / ↑move
hometop
G / endbottom
ggo to coin
PgDn / ^Fpage
PgUp / ^Bpage
⏎open
esc / ⌫back
aask claude
vvoice
iask
?help
ttheme
ppause
$price ⇄ mcap
wwatch
balert
xdismiss alert
11m
25m
315m
41h
54h
61d
ycopy CA
rrefresh
Bpaper buy
Spaper sell
Ppositions
Wopen site
Vvet product (Claude)
Xopen X
Topen TG
Llinks
Cchart popup
Itoken popup
Fflow ⇄ tape
ZAI scan
Rresume scan
KKOL lists
Nnarrative board
ssocial
ffilter
Mbubble map
Oorder plans
Ufollowed wallets
^W wworkspaces
^W n / ^W tabnext workspace
^W Nprevious workspace
^W ssave workspace
^W mmorning HUD
^W oopen workspace popups
^W ddefault workspace
^Rrules
ccalm mode (effects off)
?this help
KEYS — New pairs (44 rows)
keyslabel
q / ^Cquit
1screener
2new pairs
3watchlist
4analyst
tabscreens
j / ↓move
k / ↑move
hometop
G / endbottom
ggo to coin
PgDn / ^Fpage
PgUp / ^Bpage
⏎open
esc / ⌫back
aask claude
vvoice
?help
ttheme
ppause
$price ⇄ mcap
wwatch
balert
yconfirm alert
xdismiss alert
rrefresh
Ppositions
ZAI scan
Rresume scan
Ttrending
KKOL lists
Nnarrative board
Oorder plans
Ufollowed wallets
^W wworkspaces
^W n / ^W tabnext workspace
^W Nprevious workspace
^W ssave workspace
^W mmorning HUD
^W oopen workspace popups
^W ddefault workspace
^Rrules
ccalm mode (effects off)
?this help
KEYS — Watchlist (45 rows)
keyslabel
q / ^Cquit
1screener
2new pairs
3watchlist
4analyst
tabscreens
j / ↓move
k / ↑move
hometop
G / endbottom
ggo to coin
PgDn / ^Fpage
PgUp / ^Bpage
⏎open
esc / ⌫back
aask claude
vvoice
?help
ttheme
ppause
$price ⇄ mcap
wwatch
dremove
balert
yconfirm alert
xdismiss alert
rrefresh
Ppositions
ZAI scan
Rresume scan
Ttrending
KKOL lists
Nnarrative board
Oorder plans
Ufollowed wallets
^W wworkspaces
^W n / ^W tabnext workspace
^W Nprevious workspace
^W ssave workspace
^W mmorning HUD
^W oopen workspace popups
^W ddefault workspace
^Rrules
ccalm mode (effects off)
?this help
KEYS — Analyst tab (44 rows)
keyslabel
q / ^Cquit
1screener
2new pairs
3watchlist
4analyst
tabscreens
j / ↓move
k / ↑move
g / hometop
G / endbottom
PgDn / ^Fpage
PgUp / ^Bpage
⏎open
esc / ⌫back
aask claude
vvoice
iask
?help
ttheme
ppause
$price ⇄ mcap
wwatch
balert
yconfirm alert
xdismiss alert
Ppositions
ZAI scan
Rresume scan
Ttrending
KKOL lists
Nnarrative board
Oorder plans
Ufollowed wallets
^W wworkspaces
^W n / ^W tabnext workspace
^W Nprevious workspace
^W ssave workspace
^W mmorning HUD
^W oopen workspace popups
^W ddefault workspace
^Rrules
typeask a follow-up · ⏎ send · esc clear/back
ccalm mode (effects off)
?this help
KEYS — PAPER ticket (42 rows)
keyslabel
q / ^Cquit
1screener
2new pairs
3watchlist
4analyst
tabscreens
j / ↓move
k / ↑move
g / hometop
G / endbottom
PgDn / ^Fpage
PgUp / ^Bpage
⏎open
esc / ⌫back
aask claude
vvoice
?help
ttheme
ppause
$price ⇄ mcap
wwatch
balert
yconfirm alert
xdismiss alert
Ppositions
ZAI scan
Rresume scan
Ttrending
KKOL lists
Nnarrative board
Oorder plans
Ufollowed wallets
^W wworkspaces
^W n / ^W tabnext workspace
^W Nprevious workspace
^W ssave workspace
^W mmorning HUD
^W oopen workspace popups
^W ddefault workspace
^Rrules
ccalm mode (effects off)
?this help
KEYS — PAPER positions (43 rows)
keyslabel
q / ^Cquit
1screener
2new pairs
3watchlist
4analyst
tabscreens
j / ↓move
k / ↑move
g / hometop
G / endbottom
PgDn / ^Fpage
PgUp / ^Bpage
⏎open
esc / ⌫back
aask claude
vvoice
?help
ttheme
ppause
$price ⇄ mcap
wwatch
balert
yconfirm alert
xdismiss alert
Ppositions
rrefresh
ZAI scan
Rresume scan
Ttrending
KKOL lists
Nnarrative board
Oorder plans
Ufollowed wallets
^W wworkspaces
^W n / ^W tabnext workspace
^W Nprevious workspace
^W ssave workspace
^W mmorning HUD
^W oopen workspace popups
^W ddefault workspace
^Rrules
ccalm mode (effects off)
?this help
KEYS — Trending in the space (47 rows)
keyslabel
q / ^Cquit
1screener
2new pairs
3watchlist
4analyst
tabscreens
j / ↓move
k / ↑move
g / hometop
G / endbottom
PgDn / ^Fpage
PgUp / ^Bpage
⏎open
esc / ⌫back
vvoice
?help
ttheme
ppause
$price ⇄ mcap
wwatch
balert
yconfirm alert
Ppositions
Mfeeds popup
ZAI scan
Rresume scan
Ttrending
KKOL lists
Nnarrative board
ffilter
xhidden spam
nnarrative
ssources
asummary (claude)
rrefresh
Oorder plans
Ufollowed wallets
^W wworkspaces
^W n / ^W tabnext workspace
^W Nprevious workspace
^W ssave workspace
^W mmorning HUD
^W oopen workspace popups
^W ddefault workspace
^Rrules
ccalm mode (effects off)
?this help
KEYS — KOL lists (48 rows)
keyslabel
q / ^Cquit
1screener
2new pairs
3watchlist
4analyst
tabscreens
j / ↓move
k / ↑move
g / hometop
G / endbottom
PgDn / ^Fpage
PgUp / ^Bpage
⏎open
esc / ⌫back
aask claude
vvoice
?help
ttheme
ppause
$price ⇄ mcap
wwatch
balert
yconfirm alert
xdismiss alert
Ppositions
ZAI scan
Rresume scan
Ttrending
KKOL lists
Nnarrative board
spcenable/disable list
mmute/unmute
dremove handle
iadd handle
Ximport X lists
oonly this handle
Oorder plans
Ufollowed wallets
^W wworkspaces
^W n / ^W tabnext workspace
^W Nprevious workspace
^W ssave workspace
^W mmorning HUD
^W oopen workspace popups
^W ddefault workspace
^Rrules
ccalm mode (effects off)
?this help