In-app help reference
Every page of the built-in help (F1, /help <topic>), exactly as the app shows it.
Topics and commands: overview · message-search · login · login-desktop · login-cursor · login-gateway · keys · theme · theme-files · accounts · prefs · env · completions · sync · delivery · troubleshooting · help · login · logout · whoami · mouse · theme · copy · bots · refresh · bot · shell · history · search · react · attach · browse · notifications · settings · links · status · header · sidebar · emoji · graphics · kitty · license · media · attachments · card · menu · mute · detach · view · download · open · reload · account · prefs · memory · notify · keymap · switch · quit
grokbot-tui help
/help overview
grokbot-tui is a terminal client for Grok Bot (unofficial, uses an undocumented gateway API).
Getting started
1. Sign in to the Grok Bot desktop app once.
2. Run /login desktop (recommended — no token copying).
3. Pick a bot in the left sidebar and type a message.
Plain text is sent to the active bot. Lines starting with / are commands.
Help topics (Enter on a link below opens it):
login · login desktop · login cursor · login gateway
keys · message-search · theme · theme-files · accounts · prefs · env · completions · sync · delivery
troubleshooting
Search: /help <keyword> (e.g. /help keyring), or press / in this window.
Commands: /help <command> shows usage, examples and related topics.
help login logout whoami bots bot history search reload account prefs memory theme quit
Related: login · login-desktop · keys · accounts · sync · troubleshooting
Searching messages
/help message-search
Ctrl-F or /search <words> (alias /find) searches everything cached on this computer for the
active account: every bot's messages (team bots and groups too, once their chat has been
opened and synced), the names and paths of attachments, and the text of small text files you
sent. It never goes to the network.
Matching
Every word must match, case-insensitively, as the start of a word (kube finds Kubernetes).
Newest first, at most 200 results. Each shows the bot, age and time, a snippet with the
words highlighted, and [📎 file …] / [📎 in …] when the match is an attachment's name or
its text.
Keys
Type to search; ↑/↓, Ctrl-P/N, PgUp/PgDn and the wheel move.
Enter or a click: open that bot's chat, scroll to the message and flash it.
Ctrl-O: also open the matched attachment (viewer or download).
Esc closes. With ui.keys = vim the list starts in list mode when given words: j/k, g/G,
Ctrl-d/u move, o opens the file, / or i edits the words, q closes. Keymap: search.open.
What's searched
Attachment contents: only files you sent from this computer since 1.39.0, if they were
text (UTF-8, no NUL bytes) and at most 256 KiB; their text is cached in context.db when
you send. Images, PDFs, binaries and files the bot sent are matched by name only.
Never blocks the UI
Queries run on a worker thread (debounced while you type). After an upgrade, older
messages are indexed in the background; until then the box shows indexing… N% and
those messages appear when it finishes (it resumes after a restart).
Related: keys · cmd-search · cmd-history
Logging in
/help login
Each grokbot-tui account logs in once; the login is stored in ~/.grokbot-tui/context.db for that account only.
Which method?
★ /login desktop RECOMMENDED. Uses the Grok Bot desktop app's saved session.
Requires the app installed and signed in on this computer.
/login cursor Paste a Cursor access token; grokbot-tui exchanges it for a gateway session.
Getting this token by hand is not documented — use /login desktop.
/login gateway Paste a gateway URL + gateway token directly.
Getting these by hand is not documented — use /login desktop.
Credentials are only sent to allowed hosts (see /help env, GROKBOT_ALLOW_LOCAL_GATEWAY).
/logout removes this account's stored login and keeps chats and memory.
/whoami shows how the account is logged in (never the token).
Related: login-desktop · login-cursor · login-gateway · accounts · troubleshooting
/login desktop (recommended)
/help login-desktop
Usage: /login desktop [entry]
Steps
1. Install the Grok Bot desktop app and sign in once.
2. Linux only: install secret-tool (package libsecret-tools) and keep your keyring unlocked.
3. Run /login desktop. grokbot-tui reads the app's saved session, checks it by listing bots,
and saves it to the active grokbot-tui account.
What grokbot-tui reads (only when you run this command, or on a 401 for a desktop-login account)
App data folder:
Linux $XDG_CONFIG_HOME/Grok Bot or ~/.config/Grok Bot
macOS ~/Library/Application Support/Grok Bot
Windows %APPDATA%\Grok Bot
1st choice: gateway-descriptor.json (a ready gateway session).
Fallback: sand-secrets.json → cursor-accounts → Cursor access token, exchanged via
EnsureSandBox like /login cursor. That token is not stored by grokbot-tui.
Decryption uses the OS keychain: secret-tool on Linux, the Keychain item
'Grok Bot Safe Storage' on macOS, DPAPI on Windows. Nothing is printed or logged.
Several saved sessions/accounts
grokbot-tui opens a pick list (e.g. '1) 3f2a9c1e… (active in app)'); choose with
↑↓/Enter or the mouse. Or name it directly: /login desktop <number>.
Tip: /account add <alias> first so each desktop account maps to its own grokbot-tui account.
Client version
grokbot-tui detects the installed app version for x-cursor-client-version (see /help env).
Errors
APP_NOT_FOUND App data folder missing → install the app / check the path above.
NOT_SIGNED_IN No saved session → open the app and sign in.
SECRET_TOOL_MISSING Install libsecret-tools (provides secret-tool).
KEYCHAIN_LOCKED Unlock your keyring / log in to your desktop session.
AMBIGUOUS_ENTRIES Several sessions → /login desktop <number>.
NO_SUCH_ENTRY That number/name doesn't exist → run /login desktop to list.
DECRYPT_FAILED Wrong keychain password or corrupt data → sign out/in in the app.
'version no longer supported' → update the app, or set GROKBOT_TUI_CURSOR_CLIENT_VERSION.
Related: login · login-cursor · accounts · env · troubleshooting
/login cursor
/help login-cursor
Usage: /login cursor (then paste the token; input is masked, Esc cancels)
What it does
grokbot-tui sends the token to https://api2.cursor.sh/aiserver.v1.GrokBotService/EnsureSandBox
and gets back a gateway URL, gateway token and routing headers. The Cursor token is
stored for this account so grokbot-tui can re-exchange it when the gateway answers 401.
Getting a Cursor access token
Not documented — use /login desktop. The desktop app keeps this token encrypted in
sand-secrets.json; /login desktop reads and exchanges it for you automatically.
Dashboard / inference API keys are unsupported here (rejected before EnsureSandBox):
grok_… / crsr_… Cursor dashboard API Keys (Admin / Cloud Agents at api.cursor.com).
xai-… xAI Grok inference API (https://api.x.ai). Not Grok Bot chat.
There is no documented exchange from these keys to a Grok Bot gateway session.
Headers sent: x-cursor-client-type (sand), x-cursor-client-version (detected app version),
x-sand-box-namespace (prod). Override with GROKBOT_TUI_CURSOR_CLIENT_* / prefs (see /help env).
Errors
Dashboard key pasted → clear unsupported message; nothing is sent or stored.
401 'version no longer supported' → update the desktop app or set GROKBOT_TUI_CURSOR_CLIENT_VERSION.
417 (empty body) → the gateway session expired; grokbot-tui re-authenticates like a 401
(desktop re-read / Cursor re-exchange). If it persists, run /login desktop.
'no gatewayUrl/gatewayToken' → the token was rejected or is not an access token.
Related: login · login-desktop · env · troubleshooting
/login gateway
/help login-gateway
Usage: /login gateway [url] (then paste the gateway token; masked, Esc cancels)
What it does
Uses a gateway session directly: a URL like https://<box>.cursorvm.com plus its token.
grokbot-tui checks the URL against the host allowlist, validates by listing bots, then saves it.
Getting a gateway URL + token
Not documented — use /login desktop. These are issued by EnsureSandBox (what
/login cursor and /login desktop do for you) and are not shown in the desktop app.
Non-interactive use (startup account only, never saved)
GROKBOT_TUI_TOKEN=<token> GROKBOT_TUI_GATEWAY_URL=<url> grokbot-tui
Optional GROKBOT_TUI_GATEWAY_HEADERS='{"x-anyrun-network-token":"…"}'
Allowed hosts: https on cursor.sh, cursor.com, *.cursor.sh, *.cursor.com, *.cursorvm.com.
Loopback only with GROKBOT_ALLOW_LOCAL_GATEWAY=1. URLs with user:pass@ are rejected.
Related: login · login-desktop · env · troubleshooting
Keys
/help keys
Anywhere
F1, or ? on an empty input Open this help
F2 Pick a bot (list popup; same as /bot)
F3 Pick an account (same as /account use)
F4 Theme mode: dark → light → system (same as /theme)
F5 Pick a theme (same as /theme use)
Shift-F5 Theme editor (same as /theme edit; some terminals send F17)
F6 Mouse capture on/off (same as /mouse)
Ctrl-C / Ctrl-Shift-C Copy (see below). Never quits.
Ctrl-A Select all of the input (or the chat, when it has focus)
Ctrl-Z Restore the input a Ctrl-C cleared
Ctrl-D Quit at once (also Ctrl-Q, /quit). In a card it
dismisses the card; in the theme editor it duplicates
Shift+←/→/Home/End Select text in the input
Ctrl-C / Ctrl-Shift-C copy, in order: (1) a selection in the input or the chat; (2) the
text in the focused input; otherwise a hint (nothing to copy). Ctrl-C never quits,
cancels or clears: Ctrl-D / Ctrl-Q quit, Esc cancels. With ui.keys = vim, global
ctrl-c / ctrl-d / ctrl-q in your keymap.toml override these.
Tab After `/`: fuzzy-complete a command or argument (Shift-Tab
cycles; click a row to pick it, click outside to keep what
you typed).
Otherwise switch focus between input and sidebar
Ctrl-R Fuzzy search prompt history (Ctrl-S reverse; Esc keeps the draft)
/history [query] Browse all past prompts (persisted; newest first, age + bot)
Ctrl-F / /search <words> Search every cached message of this account (all bots, team
bots too) and attachment names/text; Enter jumps (see /help search)
:name then Tab Emoji shortcode completion (:thumbsup: → 👍); complete :name:
shortcodes are also turned into emoji when you send
Click a link Opens it in the built-in browser (links.open_with = builtin,
the default) or the system browser (= system; /links toggles,
menu Web). Ctrl/Alt-click or vim NORMAL x uses the other one.
Terminal OSC 8 hyperlinks (Ghostty, kitty, WezTerm, Windows
Terminal, foot, Alacritty 0.13+; Ctrl/Cmd-click in the
terminal) always go to the system browser: the terminal opens
them, not grokbot-tui. GROKBOT_TUI_NO_HYPERLINKS=1 turns them off.
/mute [on|off|toggle] Claim presence while you use grokbot-tui (focused, input in the
last notifications.idle_minutes, default 10) so Grok Bot pushes
to your other devices are held; 🔕 while held, /whoami shows
the lease. Released on blur, idle, logout, account switch, quit.
/status [extra text] Ask the bot “Where are we now? Give me a brief status of your
current tasks.” (+ extra text) as a normal prompt; change the
text with pref commands.status_prompt. Also menu Chat.
/browse [url] (/web) Built-in text browser: no JavaScript, no cookies, 5 MiB / 20 s
cap. Tab completes recent URLs; vim NORMAL b. In it: e, Ctrl-L
or : edit the URL; j/k ↑/↓ PgUp/PgDn g/G Ctrl-d/u wheel scroll;
Tab/Shift-Tab pick a link, Enter or click follows, a number then
Enter jumps to [n]; H/L or Alt-←/→ back/forward; r reload;
/ n N search; o system browser; y copy URL; d download;
Esc/q close. [🖼 …] images open the image viewer.
SSH Over SSH (SSH_CONNECTION/SSH_CLIENT/SSH_TTY or a parent sshd;
GROKBOT_TUI_FORCE_SSH=0/1 overrides) the header shows SSH and
links always use the built-in browser (links.ssh_behavior =
builtin; respect_pref follows links.open_with). Anything that
would open an app on the remote machine (o, /open, Ctrl-click,
the viewer's o) warns and needs repeating within 5 s.
Chat layout Each message sits on a rounded bubble (╭─╮ │ … │ ╰─╯): yours on
the right in the accent colour, the bot's on the left, muted,
the name on the row above; reactions ride the bubble's top
border at its top-right corner. Panels and popups are rounded.
Inline images Replies' images and your image attachments draw in the bubble
(images.inline = on|off, images.inline_max_rows = 12); click
one for the viewer. Shown once fully on screen.
Tab completion Lists scroll (PgUp/PgDn, wheel, n/total shown); click a row
to select it (same as Enter), click outside to cancel.
Paths with
spaces: quotes or backslash escapes; completions insert
backslash-escaped names.
/view [n] Image viewer: the image nearest the bottom of the chat (or the
n-th newest), as large as the terminal allows (kitty / sixel /
iTerm2, else halfblocks). Also: click a [🖼 …] placeholder,
vim NORMAL O. In the viewer: Esc/q or click outside close,
o/Enter open externally, ←/→ (n/p, h/l) previous/next image
/open [n|list] Open the newest image (then link) in replies: images in the
viewer, links per links.open_with (system: xdg-open / open /
Windows handler); vim NORMAL: o (x: the other opener).
Images show as [🖼 alt · file] placeholders
/emoji [glyph|text] Emoji as glyphs, or :shortcode: text (emoji.render). Blocks
instead of emoji mean the terminal font has no emoji
/react <emoji|:code:> [n] Toggle a reaction pill on the newest bot message (n=2 the one
before; vim NORMAL: r). Tab completes the emoji (on the
message first, then recent, then common; :code or code) and n.
Bare /react, vim R or a click on a message's [☺+] opens the
emoji picker: type to search (vim: / first), arrows/hjkl or
wheel move, Enter or click toggles, Esc/click outside closes. Stored locally: the Grok Bot API has
no reaction endpoint, so bots and other clients don't see them
/attach <path…> Attach files to your next prompt (alias /file; up to 6). Tab
completes paths; paste a file path to attach it. Uploads
start right away; chips above the input show progress (✓/✗),
click a chip to preview, ✕ removes it. Sending waits for
uploads. Limits: images 25 MiB, video 1 GiB, others 250 MiB
(the server is final). Needs /login desktop or /login cursor.
/attach remove <n>, /attach clear, /detach [n|all]
/download [n|list] Save an image or file from the bot's replies (newest; n=2 the
one before; vim NORMAL: d; alias /save). Replies with images or
file links get [⤓] name buttons; click one to open the modal:
path prefilled ~/Downloads/<name>, Tab completes paths, Down
browses folders (arrows/hjkl, Enter/l opens, h parent).
Overwrites and new folders are confirmed. Remote files stream
in the background (cap: downloads.max_mb); local files copy
PgUp / PgDn, mouse wheel Scroll the chat (not the prompt history).
Only the exact bottom follows new content; scroll up
pins the view. '↓ N new' while unread (click / End /
vim G to jump and follow). Send or switch bot/account
follows again.
Esc Clear an in-app selection; cancel a prompt; return focus to input
/switch [alias] Switch account (bare opens the picker)
/keymap [vim|default|reload|list] Opt-in vim keys (ui.keys); list/reload keymap.toml
Input focused (multi-line)
Enter Send message or run /command
Ctrl-Enter New line. On Windows (conhost / Windows Terminal) this is the
one that always works; on Linux it needs a terminal that reports
modifiers (kitty, Ghostty, foot, WezTerm, xterm modifyOtherKeys).
Terminals that send Ctrl-Enter as Ctrl-J still get a newline;
ones that send plain Enter (e.g. Alacritty by default) send.
Shift/Alt-Enter New line when the terminal reports modifiers (kitty protocol
/ modifyOtherKeys). Remap via keymap `input.newline`.
keys.kitty_protocol auto (default) | on | off. With the kitty keyboard protocol
(kitty, Ghostty, foot, WezTerm, recent Alacritty/iTerm2) Alt,
Ctrl-Enter and Shift-Enter are reliable and Esc has no delay;
elsewhere the ESC-prefix Alt handling is used. /kitty shows or sets it
keys.protocol auto | fuzzball | kitty | legacy (wins over keys.kitty_protocol).
Fuzzball keyboard events can't be decoded yet: auto/fuzzball use kitty
images.protocol auto (Fuzzball → kitty → native) | fuzzball | kitty | native
(sixel / iTerm2 / halfblocks). /graphics shows what was detected
graphics.detect_timeout_ms Longest Fuzzball reply wait at startup (1500; ends on DA1)
Ctrl-J New line (works everywhere, including macOS Terminal.app)
\ then Enter New line (strip the backslash) when modifiers are unavailable
Alt-Enter New line (Option-as-Meta / ESC+CR). macOS Terminal.app:
enable “Use Option as Meta key”, or use Ctrl-J / \+Enter.
F10 / Alt-M / /menu [name] Menu bar (Chat, Account, View, Web, Theme, Notify, Help).
Alt+<underlined letter> opens that menu (Alt-C Chat, Alt-V
View, …). Or click a title; hover highlights, click runs,
click outside closes (needs mouse capture: F6).
Alt over SSH Terminals send Alt+x as ESC x. Over SSH (e.g. Windows Terminal
→ ssh) the ESC can arrive alone, so ESC then a key within
keys.esc_alt_timeout_ms (default 50; 0 = off; raise it on slow
links) counts as Alt+key. A plain Esc still works (it fires
after that delay). Windows Terminal keeps some Alt chords
itself (Alt-Enter fullscreen, Alt-Space, Alt-Shift-+/-, Alt-F4):
use F10 or /menu instead.
F7 / /header Header: one row (compact) or full; also the ▾/▴ button and
View menu (pref ui.header; keymap view.toggle_header)
F8 / /sidebar Collapse the bot list to a 1-column strip (● active); click
the strip or » to expand, « to collapse (pref
ui.sidebar_collapsed; keymap view.toggle_sidebar)
F12 / /refresh Re-fetch the bot list now (also the ↻ in the sidebar header
or strip). New bots appear, deleted ones go, renames show;
the open chat stays. Automatic every
agents.refresh_interval_secs (60; 0 = off) and on re-login
(keymap agents.refresh)
F9 / /attachments (/files) Right column (shown by default): the bot's name and
description (▾ more for long ones), then the panel listing
this chat's attachments (sent and
received) with [view] and [⤓]; click a row to jump to its
message. Collapses to a 1-column strip with the count (pref
ui.attachments_panel; keymap view.toggle_attachments).
In the panel: j/k move, Enter jump, v view, d download,
/ filter, t type (All/Img/Vid/Aud/Doc), Esc back to input
[📎 Attach] (input box) Click to start /attach <path> and pick files (Tab completes)
Alt-b / /notifications Grok Bot notifications (header 🔔 shows unread; keymap
notifications.open, vim N). Enter open, m read/unread, a all
read, c clear all, Esc back. Toasts: click opens + marks read,
[x] or 20 s timeout hides (stays unread). Keys: Alt-x
close newest, Alt-Shift-x close all (stay unread), Alt-o
open newest + mark read (keymap notifications.dismiss_toast,
.dismiss_all_toasts, .open_toast)
Alt-, / /settings [tab] Settings page (also the header [⚙ Settings] button; keymap
settings.open, vim s): Grok Bot's tabs (General, Computer,
Vault, Usage & Billing, Updates), the selected bot, and
local prefs. ←/→ or 1-7 tab, ↑/↓ row, Enter change/open,
r reload, Esc back. App-only rows open in Grok Bot through
links.open_with; destructive ones ask y/n first
F11 / /card Open a Grok Bot card (question, approval, secret, form,
draft, or an agent↔agent / agent↔Cursor conversation); also
click its button in the chat (keymap card.open, vim c).
Widgets: 1-9/↑↓ Enter, Space toggles, Tab your own,
x dismiss. Approvals: a / d. Secrets and forms: typed masked,
Enter/Ctrl-S submit, Ctrl-D dismiss. Drafts: s send, e edit,
x discard. Side conversations: [view conversation] opens the
messages between those parties (↑↓ / wheel to scroll).
Purchase and grant cards are read-only here
Video, GIFs, music Play inline in the bubble: [▶]/[⏸] toggles, click the bar to
seek, click the picture for the full-size player (Space,
←/→ 5 s, Home, Esc). One video/track plays at a time and
pauses when scrolled away; GIFs loop (media.gif_autoplay).
Prefs: media.inline on|off, media.fps (10), media.decoder
auto|builtin|ffmpeg|system. /media pause|stop|decoders
/license Licence (GPL-3.0-or-later) and third-party notices
Click a message Opens the reaction picker for it (pref message.click_to_react,
default on). Links, images, [☺+] and [⤓] keep their actions;
dragging still selects text
/notify Toasts: dnd, on/off <kind>, reload rules
← → / Home End Move the cursor / to the start or end of the line
↑ / ↓ Previous / next line; on the first / last line, prompt history
Backspace / Delete Delete before / at the cursor
Long lines wrap; the box grows up to 10 rows, then scrolls to keep the cursor
visible (row/total shown bottom-right). Pasted text keeps its line breaks.
Sidebar focused
↑ ↓ / k j Move Enter Open bot
Mouse
Click a bot to open it. Click '@account ▾' in the header to pick an account.
Click '‹theme› ▾' in the header to pick a theme, dark / light / system to switch mode.
The header shows 'mouse: on/OFF'.
Selecting and copying text
With mouse capture on (default; F6 / /mouse; persisted as ui.mouse_capture):
• Drag in the chat to select. The selection is copied on mouse-up (OSC 52).
Esc clears it. Ctrl-C / Ctrl-Shift-C copy a selection; Ctrl-A selects the whole feed
when the chat has focus.
• Hold Shift (or Option) while dragging to use the terminal's own selection instead.
• F6 or /mouse off: release the mouse for terminal selection (clicks/wheel go off).
Only message text is copied: no borders, headers, buttons or soft-wrap newlines.
• [⧉] on a bubble copies that message's source; [⧉] on a code block copies its code.
The click-to-react popup has [⧉ copy] (Ctrl-Y); keymap message.copy (vim Y).
• /copy: copy the last bot message. Copies use OSC 52 (tmux: `set -g set-clipboard on`)
plus the system clipboard when local (wl-copy/xclip/xsel/pbcopy).
In a pick list (F2, F3, F5, /bot, /account use)
↑ ↓ / j k, PgUp PgDn, Home End Move Enter Pick Esc / q Cancel
Mouse: hover highlights, click picks, click outside cancels, wheel moves
In this help window
↑ ↓ / j k, PgUp PgDn Scroll Tab / ← → Select a related link
Enter Open link Backspace Back Esc / q Close
/ Search all help by keyword (type, Enter to run, Esc to cancel)
In the theme editor (Shift-F5): see /help theme
Related: overview · theme · accounts
Header and theme
/help theme
The header shows the Grok Bot logo and title, the account switcher, the theme
switcher, the login, the active bot and the mouse state. In terminals smaller than
80 × 24 it shrinks to one row with the same switchers.
Account switcher
'@alias ▾' — click it or press F3 to pick an account (same as /account use).
Theme switcher
'‹default› ▾' — the theme in use. Click it or press F5 to pick another theme
(or /theme use <name>). Moving through the list previews each theme; Enter keeps
it, Esc goes back to the one you had. The list ends with 'Edit themes…'. A theme that can't be
loaded shows as '‹name: missing›' or '‹name: broken›' (see below).
Mode: dark · light · system
Every theme has a dark and a light variant. Click one, press F4 to cycle, or
/theme [dark|light|system]. system follows the terminal background: grokbot-tui
asks the terminal at startup (OSC 11), else reads $COLORFGBG, else uses dark. The
header shows what system resolved to, e.g. 'system (→ light)'. Restart after
changing the terminal's colors.
Both choices are global prefs (ui.theme, ui.theme_mode), used for every account.
grokbot-tui --theme <name> uses a theme for that run only (nothing is saved; picking
a theme in the app saves it as usual). grokbot-tui --list-themes lists them and exits.
Commands
/theme use <name> Switch theme (also /theme <name>; no name: pick list)
/theme list List theme files (● = in use; broken files say why)
/theme edit [name] Open the editor (default: the theme in use)
/theme init [name|all]
Download a shipped theme from the release (default: default; all:
every shipped one; existing files are kept)
/theme starter [name] Write a minimal starter theme (no download; never overwrites)
/theme delete <name> Delete a theme file (asks first)
/theme export <name> [path]
Copy a theme file out (default <data dir>/exports/<name>-<UTC time>.toml;
a folder gets <name>.toml; never overwrites)
/theme reload Re-read theme files after editing them by hand
Theme editor (Shift-F5)
Left: every palette color and every part of the screen. Right: a live preview of
the app in the edited theme, before you save, with the selected item highlighted
and samples of the chat entries and modals.
↑ ↓ / j k, PgUp PgDn, Home End Select Tab Flip dark / light variant
Enter / e Edit: a color takes hex (#ff8800), 0-255 or a name (cyan); a part
opens its fields (fg, bg, border for boxes, bold italic underline
reverse dim): ← → choose, Enter edit/toggle, Space toggle, Backspace clear
p Color picker with tabs: 16 colors · 216 cube · 24 grays · @ palette
(Tab / Shift-Tab switch, arrows, Enter or click; @ palette offers the
palette colors for parts, and reset)
r / R Revert this item / everything since the last save
s, Ctrl-S Save (applied right away if it's the theme in use)
d / n Duplicate this theme / new starter theme (asks for a name)
d n x with Ctrl work too (Ctrl-D, Ctrl-N, Ctrl-X)
x, Delete Delete this theme (asks first)
t Edit another theme [ / ] Previous / next theme file
Esc / q Close (asks if there are unsaved changes; also Shift-F5 / F17)
h Highlight on/off: the selected color or part is marked in reverse video
in the preview (the preview title says when it isn't on screen, e.g. the
compact header or a focused sidebar)
Parts' colors can point at palette colors (@accent), so a palette change restyles
every part that uses it. A low-contrast warning appears when text and its
background are hard to tell apart (WCAG ratio below 3:1), and ⚠ marks such items
in the list.
Theme files: see /help theme-files.
Related: theme-files · keys · prefs · accounts
Theme files
/help theme-files
Every theme, including default, is a TOML file in ~/.grokbot-tui/themes/<name>.toml
(or <data dir>/themes with --data-dir). Themes are read only from there: nothing is
built into the program and no system folder is searched. Names: lowercase letters,
digits, - and _ (up to 32).
Where default.toml comes from
On first run, when your themes folder has no themes, grokbot-tui downloads the
default theme for its own version in the background:
https://raw.githubusercontent.com/WeirdBrains/grokbot-tui/v<version>/themes/default.toml
checks that it's a valid theme, saves it as default.toml and says so. Startup never
waits for it (plain colors until it arrives; it gives up after 5 s). Offline or
failed: plain terminal colors and a notice; run /theme init later to try again.
Existing files are never overwritten.
Turn the download off with GROKBOT_TUI_NO_THEME_DOWNLOAD=1 or
/prefs set ui.theme_download false (then use /theme starter, or save the file
yourself and /theme reload).
When a theme can't be used
If the selected file is missing or broken (invalid TOML, newer schema, over 64 KiB:
the size is checked before reading),
grokbot-tui uses your terminal's own colors and says why. Highlights still show
(reverse video). Fix the file and /theme reload, pick another theme (F5), or
/theme init. A broken file is never overwritten without asking.
/theme init [name|all] downloads <name>.toml from the release's themes/ folder (default:
default; all: every shipped theme, which is just default for now). Existing files are
kept. If downloading is off it writes the minimal starter instead; if it fails it says why.
--list-themes and --theme also download the default first when the folder is empty
(waiting up to 3 s). GROKBOT_TUI_THEME_URL replaces the download address (a URL that
<name>.toml is appended to, e.g. a fork or a local server).
/theme starter [name] always writes the minimal starter: every part mapped to a palette
role (title → @accent, errors → @danger, …) but every color set to your terminal's
default. Set the colors in the editor to make it yours.
Format
schema = 1
name = "Default"
description = "…"
[dark.colors] # the palette: 14 named colors
text = 252 # 0-255, "#rrggbb", "#rgb", a name (cyan, darkgray…), "reset"
accent = "cyan"
…
[dark.styles] # parts of the screen
brand = { fg = "@on_accent", bg = "@accent", bold = true }
panel_focused = { fg = "@text", border = "@accent" }
…
[light.colors] / [light.styles] the same for the light variant
Style fields: fg, bg, border (boxes only), bold, italic, underline, reverse, dim.
Colors: a literal or @palette-name. Missing colors use the terminal default,
missing parts use the starter rule, a missing variant copies the other one;
each is reported once as a warning, as are unknown keys and a missing schema line.
Layout (borders, padding) isn't themeable.
Saving
Theme files are written atomically (a temp file in the same folder, then renamed)
and readable only by you (0600; the themes folder is created 0700). Windows keeps
its default permissions.
Command line
grokbot-tui --theme <name> use <name> for this run only (not saved); a missing or
broken theme stops before the UI starts
grokbot-tui --list-themes list the themes (● = in use) and exit
/theme export <name> [path] copy a theme file out (never overwrites)
Palette colors
text background accent subtle muted header warn danger ok on_accent
modal_text modal_background logo_dark logo_light
The editor shows what each one is used for.
Accounts
/help accounts
grokbot-tui keeps several accounts fully separate: logins, bots, chats, memory and prefs.
/account List accounts (* = active)
/account add <alias> Create an account
/account use [alias] Switch (no alias, F3 or clicking @account ▾: pick list)
/account rename <a> <b> Rename
/account remove <alias> Delete (confirm in a pick list; Cancel is the default)
Start in an account: grokbot-tui --account work or GROKBOT_TUI_ACCOUNT=work grokbot-tui
GROKBOT_TUI_TOKEN only applies to the account selected at startup.
Several desktop Cursor accounts? Add one grokbot-tui account each, then /login desktop <number>.
Related: login · login-desktop · prefs · env
Preferences
/help prefs
/prefs List preferences
/prefs get <key> Show one
/prefs set <key> <v> Set (empty value resets to default)
Per-account keys
default_bot Bot id/name to open when nothing else is selected. Default: unset.
active_bot Last opened bot (set automatically).
show_hidden_bots true/false — show bots hidden from the sidebar. Default: false.
cursor.client_version Override x-cursor-client-version for EnsureSandBox.
Default: detected desktop app version, else 0.70.2.
cursor.client_type Override x-cursor-client-type. Default: sand.
sand.box_namespace Override x-sand-box-namespace. Default: prod.
Global keys
ui.sidebar_width Sidebar width, 10–80. Default: 24.
ui.theme Theme name (a file in <data dir>/themes). Default: default.
ui.theme_download true/false — download the default theme when the themes folder
is empty, and for /theme init. Default: true.
Also F5, /theme use, or clicking the header (see /help theme).
ui.theme_mode dark, light or system (follow the terminal). Default: system.
Also F4, /theme, or clicking the header (see /help theme).
ui.title_glyphs Big header title glyphs: auto, quadrant or half. Default: auto
(half in macOS Terminal, whose fonts mangle quadrant glyphs;
quadrant elsewhere). Over ssh the terminal is unknown, so set
half if the title looks broken. Half needs 128+ columns.
history.max_entries Prompts kept per account (100–1000000). Default: 10000.
downloads.max_mb Largest /download in MB (1–4096). Default: 25.
active_account Account opened at startup (set automatically).
Environment variables override the cursor.* / sand.* prefs (see /help env).
Related: env · accounts · login-cursor
Environment variables
/help env
Login (startup account only, never saved)
GROKBOT_TUI_TOKEN
Gateway token override.
GROKBOT_TUI_GATEWAY_URL
Gateway URL for that token (else the stored URL).
GROKBOT_TUI_GATEWAY_HEADERS
JSON object of extra gateway headers.
EnsureSandBox (Cursor token exchange)
GROKBOT_TUI_CURSOR_API_BASE_URL
Backend base (must be *.cursor.sh / *.cursor.com).
GROKBOT_TUI_CURSOR_CLIENT_VERSION
x-cursor-client-version. Priority:
env > pref cursor.client_version > detected app > 0.70.2
GROKBOT_TUI_CURSOR_CLIENT_TYPE
x-cursor-client-type (default sand).
GROKBOT_TUI_SAND_BOX_NAMESPACE
x-sand-box-namespace (default prod).
Other
GROKBOT_TUI_ACCOUNT
Starting account alias (same as --account).
GROKBOT_TUI_ALLOW_LOCAL_GATEWAY=1
Allow http(s) loopback gateways (development).
GROKBOT_TUI_APP_DIR
Grok Bot install dir for version detection.
GROKBOT_TUI_NO_THEME_DOWNLOAD=1
Never download the default theme (see /help theme-files).
GROKBOT_TUI_THEME_URL
Download themes from here instead of the release tag (<url><name>.toml).
GROKBOT_TUI_MAX_RESPONSE_BYTES
Cap on one gateway response body in bytes (default 64 MiB).
GROKBOT_TUI_NO_HYPERLINKS
Set to turn off OSC 8 hyperlinks.
GROKBOT_TUI_FORCE_SSH=0|1
Override SSH detection (see /help keys, SSH).
GROKBOT_TUI_FUZZBALL=off
Skip the Fuzzball capability query at startup.
GROKBOT_TUI_IMAGES=halfblocks
Skip the terminal graphics query; draw images with half blocks.
The library's own names GROKBOT_ALLOW_LOCAL_GATEWAY and GROKBOT_APP_DIR work too.
Older names: every GB_* variable (e.g. GB_GROKBOT_TOKEN) still works when its
GROKBOT_TUI_* name is not set; the new name wins when both are set.
Data lives in ~/.grokbot-tui/context.db (override with --data-dir). On first start,
an old ~/.gb folder is moved there. /whoami shows the client version in use
and where it came from.
Related: prefs · login-cursor · login-gateway · troubleshooting
Shell completions
/help completions
grokbot-tui completes its flags and subcommands (mcp serve/token/config, completions) in
bash, zsh, fish, PowerShell and elvish. Packages install them for you:
.deb / .rpm / AUR / make install bash, zsh and fish, in the system completion folders
release archives the scripts are in completions/ (or packaging/completions/)
Or print one yourself (generated from this binary, so always current):
bash source <(grokbot-tui completions bash) (add to ~/.bashrc)
zsh grokbot-tui completions zsh > ~/.zfunc/_grokbot-tui
(with fpath=(~/.zfunc $fpath); autoload -U compinit; compinit in ~/.zshrc)
fish grokbot-tui completions fish > ~/.config/fish/completions/grokbot-tui.fish
PowerShell grokbot-tui completions powershell | Out-String | Invoke-Expression
(add to $PROFILE)
elvish grokbot-tui completions elvish > ~/.config/elvish/lib/grokbot-tui.elv
(then use grokbot-tui in rc.elv)
Chat sync
/help sync
Bots come from the gateway's listAgents. Messages come from getAgentTranscriptTail
(there is no separate chat list).
• Opening a bot (or /reload) pages the whole transcript (up to 1000 entries),
merges it into ~/.grokbot-tui/context.db and redraws the chat from there — so messages
from the desktop app appear too.
• While a bot is open grokbot-tui polls for new messages every ~1 s, backing off to 15 s
when idle, and every 1 s right after you send.
• The chat you see is always rebuilt from that database. Your sent message is saved
there first (as pending) and shows immediately; notices and errors appear in a
separate scrollable panel (at most 7 rows) below the chat and are not saved.
• /bots refreshes the bot list.
Related: delivery · troubleshooting
Sending and delivery
/help delivery
Every message you send shows as pending until the transcript confirms it.
Accepted The gateway returned a receipt. The message is confirmed when it appears.
Rejected The gateway refused it (4xx, policy). It was NOT delivered; fix and resend.
Unknown 5xx, network error, timeout or no receipt. grokbot-tui then asks the gateway
(promptAcceptanceStatus, by the message's nonce) whether it landed:
accepted → nothing to do; it will appear in the chat.
rejected → 'Not delivered (rejected by the gateway: <code>)'.
not found → 'Not delivered … Safe to resend' (it never arrived).
pending → asked again a few times.
Only if the gateway can't tell does grokbot-tui show 'Delivery unknown'; then
wait for the message to appear (or not) before resending. grokbot-tui never
resends itself.
Related: sync · troubleshooting
Troubleshooting
/help troubleshooting
'Gateway rejected the credential (401)'
desktop login: grokbot-tui re-reads the app session once automatically; if it still fails,
open the app, make sure you're signed in, then /login desktop.
cursor login: grokbot-tui re-exchanges once; otherwise /login cursor with a fresh token.
gateway login: /login gateway with a new token.
'This version of Grok Bot is no longer supported'
Update the desktop app, or set GROKBOT_TUI_CURSOR_CLIENT_VERSION / pref cursor.client_version.
/whoami shows the version in use.
Desktop errors (APP_NOT_FOUND, NOT_SIGNED_IN, SECRET_TOOL_MISSING, KEYCHAIN_LOCKED, …)
See /help login desktop for each fix.
'host not allowed' — the URL isn't on the allowlist (see /help login gateway).
Chat looks out of date — /reload reloads the full transcript.
Team bot in the list but empty chat / send fails — re-login with /login cursor
or /login desktop (needs a Cursor token) so shared agents get a viewer sessionId.
No bots — create one in the desktop app, then /bots.
A deleted bot still in the sidebar — /refresh rebuilds from listAgents (deleted /
archived agents and profile.isHiddenFromSidebar are dropped). If it still appears,
the gateway is still listing it.
'sendPrompt failed: 502 A Sand box session is not permitted on this endpoint'
The gateway refused sendPrompt for a Sandbox-typed session. listAgents may still
work. /login desktop and /login cursor both produce Sandbox-oriented sessions, so
repeating them usually will not fix send. Check whether the Grok Bot desktop app
can send to the same bot. grokbot-tui will not treat it as 'Delivery unknown'.
Dashboard API keys (grok_/crsr_/xai-) cannot log in for chat — see /help login-cursor.
Notices flooding the chat — they live in a scrollable panel of at most 7 rows
under the chat (click it, then ↑↓ / PgUp / PgDn / wheel). They never push the
transcript off the screen.
Running gb prints git errors — gb is often a git alias; the command is grokbot-tui.
Related: login-desktop · login-cursor · login-gateway · sync · env
/help
/help help
Usage: /help [command]
Show commands
Open help. With a topic or command name, open that page; any other words search all help pages.
Aliases: /h, /?
Examples:
/help
/help login desktop
/help keys
/help bot
/help keyring
/help search 401
Logging in
/help login
Each grokbot-tui account logs in once; the login is stored in ~/.grokbot-tui/context.db for that account only.
Which method?
★ /login desktop RECOMMENDED. Uses the Grok Bot desktop app's saved session.
Requires the app installed and signed in on this computer.
/login cursor Paste a Cursor access token; grokbot-tui exchanges it for a gateway session.
Getting this token by hand is not documented — use /login desktop.
/login gateway Paste a gateway URL + gateway token directly.
Getting these by hand is not documented — use /login desktop.
Credentials are only sent to allowed hosts (see /help env, GROKBOT_ALLOW_LOCAL_GATEWAY).
/logout removes this account's stored login and keeps chats and memory.
/whoami shows how the account is logged in (never the token).
Related: login-desktop · login-cursor · login-gateway · accounts · troubleshooting
/logout
/help logout
Usage: /logout
Log out of the active account (keeps chats and memory)
Delete the active account's stored login. Chats, memory and prefs are kept.
Examples:
/logout
/whoami
/help whoami
Usage: /whoami
Show the active account's login details
Show the account, login method, gateway host and the client version in use (never tokens).
Examples:
/whoami
/mouse
/help mouse
Usage: /mouse [on|off]
Toggle mouse capture (off = select/copy text with your terminal; also F6)
Related: overview
Header and theme
/help theme
The header shows the Grok Bot logo and title, the account switcher, the theme
switcher, the login, the active bot and the mouse state. In terminals smaller than
80 × 24 it shrinks to one row with the same switchers.
Account switcher
'@alias ▾' — click it or press F3 to pick an account (same as /account use).
Theme switcher
'‹default› ▾' — the theme in use. Click it or press F5 to pick another theme
(or /theme use <name>). Moving through the list previews each theme; Enter keeps
it, Esc goes back to the one you had. The list ends with 'Edit themes…'. A theme that can't be
loaded shows as '‹name: missing›' or '‹name: broken›' (see below).
Mode: dark · light · system
Every theme has a dark and a light variant. Click one, press F4 to cycle, or
/theme [dark|light|system]. system follows the terminal background: grokbot-tui
asks the terminal at startup (OSC 11), else reads $COLORFGBG, else uses dark. The
header shows what system resolved to, e.g. 'system (→ light)'. Restart after
changing the terminal's colors.
Both choices are global prefs (ui.theme, ui.theme_mode), used for every account.
grokbot-tui --theme <name> uses a theme for that run only (nothing is saved; picking
a theme in the app saves it as usual). grokbot-tui --list-themes lists them and exits.
Commands
/theme use <name> Switch theme (also /theme <name>; no name: pick list)
/theme list List theme files (● = in use; broken files say why)
/theme edit [name] Open the editor (default: the theme in use)
/theme init [name|all]
Download a shipped theme from the release (default: default; all:
every shipped one; existing files are kept)
/theme starter [name] Write a minimal starter theme (no download; never overwrites)
/theme delete <name> Delete a theme file (asks first)
/theme export <name> [path]
Copy a theme file out (default <data dir>/exports/<name>-<UTC time>.toml;
a folder gets <name>.toml; never overwrites)
/theme reload Re-read theme files after editing them by hand
Theme editor (Shift-F5)
Left: every palette color and every part of the screen. Right: a live preview of
the app in the edited theme, before you save, with the selected item highlighted
and samples of the chat entries and modals.
↑ ↓ / j k, PgUp PgDn, Home End Select Tab Flip dark / light variant
Enter / e Edit: a color takes hex (#ff8800), 0-255 or a name (cyan); a part
opens its fields (fg, bg, border for boxes, bold italic underline
reverse dim): ← → choose, Enter edit/toggle, Space toggle, Backspace clear
p Color picker with tabs: 16 colors · 216 cube · 24 grays · @ palette
(Tab / Shift-Tab switch, arrows, Enter or click; @ palette offers the
palette colors for parts, and reset)
r / R Revert this item / everything since the last save
s, Ctrl-S Save (applied right away if it's the theme in use)
d / n Duplicate this theme / new starter theme (asks for a name)
d n x with Ctrl work too (Ctrl-D, Ctrl-N, Ctrl-X)
x, Delete Delete this theme (asks first)
t Edit another theme [ / ] Previous / next theme file
Esc / q Close (asks if there are unsaved changes; also Shift-F5 / F17)
h Highlight on/off: the selected color or part is marked in reverse video
in the preview (the preview title says when it isn't on screen, e.g. the
compact header or a focused sidebar)
Parts' colors can point at palette colors (@accent), so a palette change restyles
every part that uses it. A low-contrast warning appears when text and its
background are hard to tell apart (WCAG ratio below 3:1), and ⚠ marks such items
in the list.
Theme files: see /help theme-files.
Related: theme-files · keys · prefs · accounts
/copy
/help copy
Usage: /copy
Copy the last bot message to the clipboard (OSC 52)
Related: overview
/bots
/help bots
Usage: /bots
Refresh and list bots
Refresh the bot list from the gateway and print it.
Examples:
/bots
/refresh
/help refresh
Usage: /refresh
Re-fetch the bot list now (new, deleted and renamed bots; F12)
Related: overview
/bot
/help bot
Usage: /bot [name|id] | /bot new <name> | /bot delete [name]
Switch to, create, or delete a bot
Open a bot by name or id (also: click it, F2, or bare /bot for the pick list).
/bot new <name> creates a bot on the gateway (createAgent) and opens it.
/bot delete [name] deletes the named (or current) bot (deleteAgent) after a
confirmation pick list where Cancel is the default. Deleting is permanent.
Aliases: /use
Examples:
/bot Helper
/use Helper
/bot new Researcher
/bot delete Researcher
/shell
/help shell
Usage: /shell <command>
Run a local shell command and show its output (not sent to the bot)
Run a command on THIS machine with $SHELL -c (sh if unset). Purely local:
nothing is sent to the bot/gateway and nothing is saved to chat history.
Output opens in a popup: the command line, stdout then stderr, and the exit
code. It shows 'running…' until the command finishes (the UI stays usable).
Scroll with ↑/↓, PgUp/PgDn, Home/End or the mouse wheel; Esc or q closes.
No stdin (interactive programs won't work); killed after 120s; output capped
at 500 lines / 64 KB. Red border = nonzero exit; exit 127 usually means
command not found.
Aliases: /sh
Examples:
/shell ls -la
/shell git status
/sh uptime
Related: keys
/history
/help history
Usage: /history [query] | /history clear
Browse and search your past prompts (Enter puts one in the input)
Browse and search every prompt you've sent (kept in context.db per account, so
it survives restarts; newest history.max_entries kept, default 10000).
Newest first, with age and bot. Type to fuzzy-filter; ↑/↓, PgUp/PgDn and the
mouse wheel move; Enter (or clicking the selected row) puts the prompt in the
input without sending; Esc closes and keeps your draft. With ui.keys = vim the
list opens in list mode: j/k, g/G, Ctrl-d/Ctrl-u move, / filters, q closes.
/history clear forgets the account's history after a confirmation.
↑ in an empty input and Ctrl-R search the same history. /login lines are
stored without their arguments.
Aliases: /prompts
Examples:
/history
/history deploy
/history clear
/prompts
/search
/help search
Usage: /search <words>
Search every cached message and attachment, all bots (local only; also Ctrl-F)
Search every locally cached message of the active account, across all bots, plus
attachment names/paths and the cached text of text files you sent. Local only:
never touches the network. Every word must match (case-insensitive, word prefix);
newest first, up to 200. Enter or click jumps to the message (it flashes); Ctrl-O
opens the matched attachment; Esc closes. Also Ctrl-F (keymap search.open).
Aliases: /find
Examples:
/search deploy
/search kube rollout
/find notes.txt
Related: message-search · keys
/react
/help react
Usage: /react <emoji|:code:> [n]
Toggle a reaction on the newest bot message (n = 2 for the one before). Local only: the API has no reactions
Aliases: /unreact
Related: overview
/attach
/help attach
Usage: /attach <path…> | remove <n> | clear
Attach files to your next prompt (up to 6; images 25 MiB, video 1 GiB, other files 250 MiB). Tab completes paths
Aliases: /file
Related: overview
/browse
/help browse
Usage: /browse [url]
Open the built-in text browser (no JavaScript, no cookies). Tab completes recent URLs
Aliases: /web
Related: overview
/notifications
/help notifications
Usage: /notifications [read|clear]
Grok Bot notifications (also the header 🔔 and Alt-b): read marks all read, clear removes all (on this computer)
Aliases: /inbox, /bell
Related: overview
/settings
/help settings
Usage: /settings [general|computer|vault|usage|updates|bot|local]
Open the Settings page for this account and bot (also the header [⚙ Settings] button, Alt-,)
Related: overview
/links
/help links
Usage: /links [builtin|system|toggle]
Where links open: the built-in browser (default) or the system browser (links.open_with)
Related: overview
/status
/help status
Usage: /status [extra text]
Ask the current bot for a brief status of its tasks (a normal prompt; text from commands.status_prompt, plus any extra text)
Related: overview
/header
/help header
Usage: /header [compact|full|toggle]
One-row header (compact) or the tall one when there's room (full); also F7 and the ▾/▴ button
Related: overview
/sidebar
/help sidebar
Usage: /sidebar [collapse|expand|toggle]
Collapse the bot list to a 1-column strip (click it to expand); also F8 and the «/» button
Related: overview
/emoji
/help emoji
Usage: /emoji [glyph|text|auto]
How emoji show: glyph, or :shortcode: text when your terminal font has no emoji (they show as blocks). Sets emoji.render
Related: overview
/graphics
/help graphics
Usage: /graphics [auto|fuzzball|kitty|native]
Show the detected terminal protocols (Fuzzball, kitty, sixel/iTerm2, keyboard), or set images.protocol
Aliases: /protocols
Related: overview
/kitty
/help kitty
Usage: /kitty [auto|on|off]
kitty keyboard protocol (reliable Alt, Ctrl/Shift-Enter): show whether it's active, or set keys.kitty_protocol
Aliases: /keyboard
Related: overview
/license
/help license
Usage: /license [full]
Licence (GPL-3.0-or-later) and third-party notices, incl. OpenH264's patent caveat; `full` shows the GPL text
Aliases: /licence, /third-party
Related: overview
/media
/help media
Usage: /media [pause|stop|decoders]
Inline video/GIF/music: pause or stop everything, or list the decoders in this build
Aliases: /play
Related: overview
/attachments
/help attachments
Usage: /attachments [show|hide|toggle]
Right-hand panel listing this chat's attachments with [view] and [⤓]; also F9 and the «/» button
Aliases: /files
Related: overview
/card
/help card
Usage: /card
Open the newest pending card in this chat (question, approval, secret, form, draft or side conversation); also F11 or click its button
Aliases: /cards, /answer
Related: overview
/menu
/help menu
Usage: /menu [chat|account|view|web|theme|notify|help]
Open the menu bar without Alt (also F10, or click a menu title)
Related: overview
/mute
/help mute
Usage: /mute [on|off|toggle]
Claim presence while you use grokbot-tui so pushes to your other devices are held (notifications.claim_presence)
Aliases: /presence
Related: overview
/detach
/help detach
Usage: /detach [n|all]
Remove a staged attachment (the last one, n-th, or all); aborts its upload
Aliases: /unattach
Related: overview
/view
/help view
Usage: /view [n]
Show an image from the bot's replies in the viewer (newest on screen, or n-th newest; vim O)
Aliases: /image
Related: overview
/download
/help download
Usage: /download [n|list]
Save an image or file from the bot's replies (newest, or n-th newest; list numbers them; [⤓] or vim d)
Aliases: /save
Related: overview
/open
/help open
Usage: /open [n|list]
Open the newest image or link in the bot's replies (n = 2 the one before; list numbers them; vim o)
Aliases: /img
Related: overview
/reload
/help reload
Usage: /reload
Reload the active bot's full chat transcript from the gateway
Reload the active bot's full transcript from the gateway.
Aliases: /transcript
Examples:
/reload
/transcript
Related: sync
/account
/help account
Usage: /account [add|use|rename|remove]
List accounts; add <alias>, use <alias>, rename <old> <new>, remove <alias>
Manage separate accounts.
Aliases: /acct
Examples:
/account
/account add work
/account use work
/account rename work job
/account remove job
Preferences
/help prefs
/prefs List preferences
/prefs get <key> Show one
/prefs set <key> <v> Set (empty value resets to default)
Per-account keys
default_bot Bot id/name to open when nothing else is selected. Default: unset.
active_bot Last opened bot (set automatically).
show_hidden_bots true/false — show bots hidden from the sidebar. Default: false.
cursor.client_version Override x-cursor-client-version for EnsureSandBox.
Default: detected desktop app version, else 0.70.2.
cursor.client_type Override x-cursor-client-type. Default: sand.
sand.box_namespace Override x-sand-box-namespace. Default: prod.
Global keys
ui.sidebar_width Sidebar width, 10–80. Default: 24.
ui.theme Theme name (a file in <data dir>/themes). Default: default.
ui.theme_download true/false — download the default theme when the themes folder
is empty, and for /theme init. Default: true.
Also F5, /theme use, or clicking the header (see /help theme).
ui.theme_mode dark, light or system (follow the terminal). Default: system.
Also F4, /theme, or clicking the header (see /help theme).
ui.title_glyphs Big header title glyphs: auto, quadrant or half. Default: auto
(half in macOS Terminal, whose fonts mangle quadrant glyphs;
quadrant elsewhere). Over ssh the terminal is unknown, so set
half if the title looks broken. Half needs 128+ columns.
history.max_entries Prompts kept per account (100–1000000). Default: 10000.
downloads.max_mb Largest /download in MB (1–4096). Default: 25.
active_account Account opened at startup (set automatically).
Environment variables override the cursor.* / sand.* prefs (see /help env).
Related: env · accounts · login-cursor
/memory
/help memory
Usage: /memory [add <k> <v>|clear [k]]
Per-bot memory notes for the active bot
Local notes per bot (stored only in ~/.grokbot-tui, never sent).
Aliases: /mem
Examples:
/memory
/memory add lang rust
/memory clear lang
Related: accounts
/notify
/help notify
Usage: /notify [dnd|reload|list|on <kind>|off <kind>]
Notification toasts: do-not-disturb, per-kind switches, reload rules
Aliases: /notices
Related: overview
/keymap
/help keymap
Usage: /keymap [reload|list|vim|default]
Show or reload the vim keymap; switch ui.keys between vim and default
Aliases: /keys
Related: overview
/switch
/help switch
Usage: /switch [alias]
Switch account (bare: pick list; alias: prefix or fuzzy match)
Related: overview
/quit
/help quit
Usage: /quit
Exit grokbot-tui
Exit grokbot-tui.
Aliases: /q, /exit
Examples:
/quit
Related: keys