Read terminal output at speed without scanning the whole scrollback.
fasterm is a terminal RSVP reader: it takes terminal output, shows it one token at a time in the center of your screen, highlights a recognition point inside the current token, and keeps nearby source context visible so you can stop and immediately see where the word came from.
It is built for the workflow where you are reading a long terminal response, log, command output, or agent transcript and want to move through it quickly without moving your eyes line-by-line.
┌──────────────────────── fasterm ────────────────────────┐
│ │
│ terminal │
│ ^ │
│ recognition point │
│ │
├──────────────────────── source ──────────────────────────┤
│ ... command output scrolls by and fasterm highlights ... │
│ ... the active token in this source context pane ... │
└──────────────────────────────────────────────────────────┘
paused | progress 42/817 | 500 wpm | context on
Space play/pause | h/l step | +/- speed | Enter context | q/Esc quit
- Runs as a normal terminal wrapper with a reader hotkey, or reads stdin, files, cmux scrollback, and tmux scrollback.
- Presents one readable unit at a time using RSVP-style display.
- Highlights an optimal recognition point / vowel-style anchor inside the active token.
- Shows surrounding source text with the active token highlighted.
- Lets you pause, step, change speed, and toggle context from the keyboard.
- Works in Ghostty, cmux, tmux, and other terminals through normal TUI rendering.
Use fasterm term when you want to keep working in an ordinary interactive terminal and open the reader only when output gets long:
fasterm termBy default this starts your $SHELL. Press Ctrl-G inside that terminal to open the RSVP reader over recent terminal output. Quit the reader with q or Esc and you return to the same shell session.
Run a command inside the wrapped terminal by placing it after --:
fasterm term -- piUseful options:
fasterm term --lines 5000 --wpm 650 --hotkey Ctrl-G --buffer-bytes 1048576 -- pifasterm term is the recommended workflow for Oh My Pi and other interactive tools because it captures the wrapped terminal's recent output instead of trying to read another terminal's scrollback after the fact.
A normal CLI cannot universally read another terminal emulator’s existing scrollback. fasterm read works anywhere when you pipe text into it or pass a file, because that text is sent directly to fasterm.
To read text that is already in a terminal pane once, use a capture layer:
fasterm cmuxreads the current cmux terminal surface once.fasterm tmuxreads the current tmux pane once.fasterm heredetects cmux first, then tmux, and explains the available options when neither session is present.
Ghostty alone does not expose arbitrary scrollback to a generic CLI, but cmux does.
From anywhere:
cargo install --git https://github.com/TomBonness/fastermFrom a local checkout of this repository:
cargo install --path /path/to/fastermIf your shell cannot find fasterm after installing, add Cargo's bin directory to your shell path:
export PATH="$HOME/.cargo/bin:$PATH"Or run directly during development:
cargo run -- --helpRun the built-in demo without piping anything:
fasterm demoStart the demo at a specific speed:
fasterm demo --wpm 650Start your shell inside fasterm:
fasterm termStart Oh My Pi inside fasterm:
fasterm term -- piPress Ctrl-G while the wrapped terminal is running to read recent output. Adjust the hotkey if needed:
fasterm term --hotkey Ctrl-] -- piInside a cmux terminal surface, read existing scrollback from the current pane once:
fasterm cmuxLimit the capture depth:
fasterm cmux --lines 5000Open a bottom cmux terminal pane for the reader when cmux reports a target surface:
fasterm cmux --bottomIf bottom-pane targeting is not available, fasterm saves the capture to a temporary file and prints the exact fasterm read --file ... fallback command.
Let fasterm choose cmux first, then tmux:
fasterm herePreview the cmux command flow without launching the UI:
fasterm cmux --dry-runInside tmux, read existing scrollback from the current pane:
fasterm tmuxCapture a specific pane and scrollback depth:
fasterm tmux --pane %12 --scrollback 5000Preview the tmux command without launching the UI:
fasterm tmux --dry-runPrint current recommendations:
fasterm bindFor the normal terminal workflow, launch:
fasterm term -- piPress Ctrl-G in that terminal to read recent output.
cmux nightly action registry example for ~/.config/cmux/cmux.json:
{
"actions": {
"fasterm.pi": {
"type": "command",
"title": "Oh My Pi with fasterm",
"command": "fasterm term -- pi",
"target": "newTabInCurrentPane",
"shortcut": "cmd+shift+p"
}
}
}Edit the config yourself, then reload cmux with cmux reload-config or Cmd+Shift+,. fasterm bind only prints this guidance; it does not edit your config.
For tmux one-shot capture, add a bottom split binding to your tmux config:
bind-key R split-window -v -l 35% "fasterm tmux --pane '#{pane_id}'"Or add a popup binding:
bind-key R display-popup -E "fasterm tmux --pane '#{pane_id}'"Then press your tmux prefix followed by R to open the reader for the current pane once.
Pipe mode reads output you send to fasterm:
some-command | fasterm readfasterm read --file output.txtStart at a specific speed:
fasterm read --file output.txt --wpm 650| Key | Action |
|---|---|
Space |
Pause / resume |
Left, h |
Step one token backward and pause |
Right, l |
Step one token forward and pause |
Up, + |
Increase WPM |
Down, - |
Decrease WPM |
Enter |
Toggle source context pane |
q, Esc |
Exit |
For Ghostty + cmux, prefer the normal terminal wrapper when starting a new interactive tool:
- Install
fastermwithcargo install --path .. - Launch the tool inside
fasterm, for examplefasterm term -- pi. - Work normally in that terminal.
- Press
Ctrl-Gwhen output gets long, read quickly, quit the reader, and continue in the same session.
Use fasterm cmux, fasterm cmux --bottom, or fasterm here when you need a one-shot read of scrollback that already exists in a cmux terminal surface.
Run the formatter and tests:
cargo fmt
cargo testSmoke-check the CLI:
cargo run -- --help
cargo run -- term --help
cargo run -- demo --wpm 500
cargo run -- term -- sh -lc 'printf "long ai-like text ...\n"; sleep 1'
cargo run -- bind
cargo run -- here --dry-run
cargo run -- cmux --dry-run
cargo run -- tmux --dry-runfasterm is an early, focused CLI/TUI for fast terminal reading. The current implementation supports a normal terminal wrapper with a reader hotkey, stdin/file reading, and cmux/tmux one-shot scrollback capture with source-context highlighting.