TUI
Screens
Section titled “Screens”The TUI has six top-level screens:
- Mailbox (
1) - Search (
2) - Rules (
3) - Accounts (
4) - Diagnostics (
5) - Analytics (no digit; open via
Ctrl-p→ “Analytics”)
Open the first five with 1-5. Analytics has no default digit key today — open it from the command palette (Ctrl-p then type “Analytics”) or rebind the open action in ~/.config/mxr/keys.toml (see Custom keybindings).
Discoverability
Section titled “Discoverability”Three places to find a key without memorising:
?opens the help modal — context-aware, shows every key bound in the current view.Ctrl-popens the command palette — fuzzy-matches every action by name.- The hint bar at the bottom of every screen surfaces the most relevant shortcuts for the current selection.
The keybindings reference page lists every default; the help modal is faster while you’re using the TUI.
Mailbox screen
Section titled “Mailbox screen”Layout:
- Sidebar
- Mail list
- Message or thread pane
Behavior:
- Thread-first list by default
- Optional message-list mode
- Focused-thread-message targeting for reply and mutations
- Explicit right-pane dismissal with
Esc - Bulk selection with confirmation modals
Search screen
Section titled “Search screen”- Fixed query input at the top
- Result list on the left
- Preview pane on the right
- Live search against the full local index
Ctrl-fis separate and only filters the current mailboxEnter,o, orlopens the selected result in previewEscmoves preview -> results -> mailbox
Rules screen
Section titled “Rules screen”- Rule list on the left
- Guided workspace on the right
- Overview, history, dry-run, and edit states
- Textarea-driven condition/action editing for supported rule fields
Diagnostics screen
Section titled “Diagnostics screen”- Status summary
- Doctor output
- Recent events
- Recent logs
- Bug-report generation
- Config edit and log-open shortcuts from inside the page
Accounts screen
Section titled “Accounts screen”- Details on the left
- Runtime account list on the right
- Add IMAP/SMTP account
- Test connectivity
- Set default account
- Edit config without leaving the TUI
- Inspect runtime-only accounts such as browser-auth Gmail setups
Analytics screen
Section titled “Analytics screen”Same surface as the CLI analytics commands (mxr storage,
mxr contacts, mxr stale, mxr response-time, mxr subscriptions,
mxr wrapped), without leaving the TUI. Cycle views with
Tab / Shift-Tab; refresh the active view with r.
Six views:
- Storage — sender / mimetype / label rollups (
mtoggles to Largest Messages mode;gcyclesgroup_bywhile in Breakdown). - Stale Threads — threads waiting on a reply (
ptoggles perspective,[/]adjustsolder_than_days,{/}adjustswithin_days). - Contacts — asymmetry vs decay (
mtoggles sub-mode,Rrefreshes the materialized contacts table). - Response Time — reply-latency percentiles (
dtoggles direction). - Subscriptions — list-sender ROI table (
otoggles open-rate ranking;uopens the unsubscribe-confirm modal for the selected row). - Wrapped — Spotify-style yearly summary as a 7-tile dashboard
grid (
h/j/k/lmove between tiles,y/Ystep year,tcycles window kind: YTD → Year → SinceDays).
Two cross-view interactions:
Enterdrills down. Storage senders/labels and Contacts emails jump to a Search filter; Stale Threads, Largest Messages, and Subscriptions rows open the underlying conversation directly viaRequest::GetEnvelope(no search round-trip).fopens the filter modal — a per-view form with all CLI flags exposed as editable fields.Tab/Shift-Tabto navigate,Enterto apply,Escto cancel.
Modals and overlays
Section titled “Modals and overlays”- Command palette
- Help modal
- Label picker
- Compose confirmation
- Bulk confirmation
- Attachment modal
- Snooze modal — preset list plus a Custom… entry that opens a
text prompt parsed by the same
in 2h/tomorrow 9am/monday 17:00/ RFC3339 grammar asmxr snooze --until - Unsubscribe confirmation
- Analytics filter modal
- Reply-later queue browser — list of flagged messages, opened with
Ctrl-p → Reply Queue - Snippets browser — read-only list with body preview; CRUD flows
through
mxr snippets - Sender profile — volume, cadence, open commitments for the focused
message’s sender, opened with
Ctrl-p → Sender View - Screener queue — triage list with
a/d/f/pdisposition keys (allow / deny / feed / paper-trail) wired toRequest::SetScreenerDecision - Thread summary — LLM-generated 2-3 sentence summary, opened with
Ctrl-p → Summarize Thread - Welcome / setup — first-launch modal with
d(demo),g(Gmail),i(IMAP) shortcuts;Enteropens the new-account form - Doctor findings — surfaced inside the Diagnostics Status pane with
per-finding glyph (
✗/!/·), category, message, and indented remediation commands
Mailbox semantics
Section titled “Mailbox semantics”- Actions in thread view target the focused message
- Labels appear in message headers
- Attachment indicators appear in the mail list and message/thread header
- Thread counts are styled separately from sender names
- Label and saved-search scopes drive the mail list header and query state
Discovery model
Section titled “Discovery model”- First-run onboarding walkthrough
- Command palette: broad action surface
- Help modal: context-aware keybinding reference
- Hint bar: context-sensitive shortcuts, including selection-aware actions
gc: edit config globally