tess-cli 0.29.1

A less-style terminal pager for files, pipes, and live logs — with structured-log filtering, pretty-printing (JSON/YAML/TOML/XML/HTML/CSV), ANSI passthrough, multi-file navigation, and ctags jumping. Rust, macOS + Linux.
Documentation
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH tess 1  "tess 0.29.1" 
.SH NAME
tess \- A less\-style terminal pager.
.SH SYNOPSIS
\fBtess\fR [\fB\-S\fR|\fB\-\-chop\-long\-lines\fR] [\fB\-s\fR|\fB\-\-squeeze\-blank\-lines\fR] [\fB\-\-header\fR] [\fB\-\-rscroll\fR] [\fB\-z\fR|\fB\-\-window\fR] [\fB\-\-wordwrap\fR] [\fB\-\-follow\-name\fR] [\fB\-\-exit\-follow\-on\-close\fR] [\fB\-\-content\-type\fR] [\fB\-\-dim\fR] [\fB\-\-display\fR] [\fB\-\-examples\fR] [\fB\-\-filter\fR] [\fB\-f\fR|\fB\-\-follow\fR] [\fB\-\-follow\-suspend\-on\-motion\fR] [\fB\-\-format\fR] [\fB\-\-grep\fR] [\fB\-i\fR|\fB\-\-ignore\-case\fR] [\fB\-I\fR|\fB\-\-IGNORE\-CASE\fR] [\fB\-G\fR|\fB\-\-no\-hilite\-search\fR] [\fB\-X\fR|\fB\-\-no\-init\fR] [\fB\-F\fR|\fB\-\-quit\-if\-one\-screen\fR] [\fB\-K\fR|\fB\-\-quit\-on\-intr\fR] [\fB\-e\fR|\fB\-\-quit\-at\-eof\fR] [\fB\-E\fR|\fB\-\-QUIT\-AT\-EOF\fR] [\fB\-\-head\fR] [\fB\-\-hex\fR] [\fB\-\-hex\-group\fR] [\fB\-N\fR|\fB\-\-LINE\-NUMBERS\fR] [\fB\-\-list\-formats\fR] [\fB\-\-live\fR] [\fB\-\-manual\fR] [\fB\-\-mouse\fR] [\fB\-\-no\-color\fR] [\fB\-\-no\-preprocess\fR] [\fB\-o\fR|\fB\-\-output\fR] [\fB\-\-preprocess\fR] [\fB\-\-prettify\fR] [\fB\-\-prompt\fR] [\fB\-r\fR|\fB\-\-raw\-control\-chars\fR] [\fB\-\-truecolor\fR] [\fB\-\-status\-style\fR] [\fB\-\-prompt\-style\fR] [\fB\-\-record\-start\fR] [\fB\-\-stdout\fR] [\fB\-\-tab\-width\fR] [\fB\-t\fR|\fB\-\-tag\fR] [\fB\-T\fR|\fB\-\-tag\-file\fR] [\fB\-\-tail\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] [\fIFILES\fR] 
.SH DESCRIPTION
A less\-style terminal pager.
.SH OPTIONS
.TP
\fB\-S\fR, \fB\-\-chop\-long\-lines\fR
Chop long lines instead of wrapping
.TP
\fB\-s\fR, \fB\-\-squeeze\-blank\-lines\fR
Collapse runs of two or more consecutive blank lines into a single blank line at display time. Real line numbers, search, and tag jumps are unaffected (they reference the original count). Mirrors `less \-s`
.TP
\fB\-\-header\fR \fI<L[,C]>\fR
Pin the top L source lines (and the left C columns, when horizontal scroll is supported) at the top of the viewport. Form: `L` or `L,C`. Default `0,0` (off). Mirrors `less \-\-header`. Runtime adjustment: `:header L [C]`
.TP
\fB\-\-rscroll\fR \fI<CHAR>\fR [default: >]
Character to show at the right edge of a chopped line (`\-S` chop mode) indicating "more content right". Default `>`. Pass an empty string to disable. Mirrors `less \-\-rscroll=c`
.TP
\fB\-z\fR, \fB\-\-window\fR \fI<N>\fR
PageDown / PageUp step size in lines. Default: full screen height (body rows). Half\-page commands always advance by half the screen regardless. Mirrors `less \-zn` / `\-\-window=n`
.TP
\fB\-\-wordwrap\fR
In wrap mode, break lines on whitespace boundaries instead of mid\-character when possible. Falls back to mid\-character break when no whitespace fits in the row. Mirrors `less \-\-wordwrap`
.TP
\fB\-\-follow\-name\fR
Follow the file by path rather than by descriptor (matches `tail \-F` / `less \-\-follow\-name`). `tess` already does this — rotation and truncation are detected on every poll and the source re\-opens by path (since 0.25.0). This flag is accepted for compatibility and currently has no behavioral effect
.TP
\fB\-\-exit\-follow\-on\-close\fR
In follow mode with piped stdin, exit when the upstream writer closes the pipe. Default behavior (off): tess remains open on the captured content after stdin EOF. Mirrors `less \-\-exit\-follow\-on\-close`
.TP
\fB\-\-content\-type\fR \fI<TYPE>\fR
Force the content type for `\-\-prettify` (otherwise auto\-detected from the filename extension and the first bytes). Values: `auto`, `raw`, `json`, `yaml`, `toml`, `xml`, `html`, `csv`. Setting this implies `\-\-prettify` (unless the value is `raw`/`auto`)
.TP
\fB\-\-dim\fR
With `\-\-filter`, dim non\-matching lines instead of hiding them. Keeps surrounding context visible
.TP
\fB\-\-display\fR \fI<TEMPLATE>\fR
Render each parsed line through this template instead of showing the raw line. Syntax: `<fieldname>` placeholders, `\\<` for literal `<`, `\\\\` for literal `\\`. Example: `\-\-display \*(Aq[<time>] <status> <msg>\*(Aq`. Overrides the format\*(Aqs `display` key (if set). Requires `\-\-format`. Search still matches against the raw line
.TP
\fB\-\-examples\fR
Print a curated list of usage examples and exit
.TP
\fB\-\-filter\fR \fI<FIELD<op>VALUE>\fR
Filter visible lines by parsed field. Repeatable; multiple filters AND. Operators: `=` (exact), `!=` (exact ≠), `~` (regex), `!~` (regex ≠), `<`, `<=`, `>`, `>=` (numeric if both sides parse as numbers, else lexicographic). Examples: `\-\-filter status=500`, `\-\-filter ip~^10\\.`, `\-\-filter \*(Aqstatus>=500\*(Aq` (quote `<` and `>` to avoid shell redirection). Requires `\-\-format`
.TP
\fB\-f\fR, \fB\-\-follow\fR
Follow mode: keep watching the source for new bytes (like `tail \-f`). Jumps to the bottom on startup. Toggle with Shift\-F at runtime
.TP
\fB\-\-follow\-suspend\-on\-motion\fR
In follow mode, any user motion (scroll, page, goto\-line) suspends following. Re\-engage with Shift\-F. Default off: today\*(Aqs behavior (movement keeps follow on; auto\-scroll suspended while the viewport is not at bottom). Matches `less +F` semantics when enabled
.TP
\fB\-\-format\fR \fI<NAME>\fR
Apply a named log format (built\-in or user\-defined in ~/.config/tess/formats.toml). Required by `\-\-filter`
.TP
\fB\-\-grep\fR \fI<PATTERN>\fR
Filter visible lines by regex against the raw line. Repeatable; multiple `\-\-grep` arguments AND. Works on any input — no `\-\-format` required. Composes with `\-\-filter` (both must match) and with `\-\-dim` (non\-matches stay visible but faded). Example: `\-\-grep error \-\-grep \*(Aq^\\[\*(Aq`
.TP
\fB\-i\fR, \fB\-\-ignore\-case\fR
Smart\-case search. `/`, `?`, `\-\-grep`, and `\-\-filter`\*(Aqs `~` / `!~` operators match case\-insensitively unless the pattern contains an uppercase character. Mirrors `less \-i` / ripgrep / vim smartcase. Mutually exclusive with `\-I`. Runtime toggle: `:case`
.TP
\fB\-I\fR, \fB\-\-IGNORE\-CASE\fR
Force case\-insensitive search regardless of pattern case. Mirrors `less \-I`. Mutually exclusive with `\-i`
.TP
\fB\-G\fR, \fB\-\-no\-hilite\-search\fR
Disable search\-match highlighting by default. Search still navigates (`n` / `N` jump to matches); the visual reverse\-video highlight is suppressed. Runtime toggle: `:hlsearch` / `:nohlsearch`. Mirrors `less \-G`
.TP
\fB\-X\fR, \fB\-\-no\-init\fR
Don\*(Aqt enter the alt\-screen on startup. Content remains in terminal scrollback after exit. Crucial for piped use and debugging. Mirrors `less \-X` / `\-\-no\-init`
.TP
\fB\-F\fR, \fB\-\-quit\-if\-one\-screen\fR
Exit immediately (without paging) if the entire source fits on one screen. Ignored with piped stdin in follow mode. Mirrors `less \-F`
.TP
\fB\-K\fR, \fB\-\-quit\-on\-intr\fR
Accepted for `less` compatibility. tess always exits on Ctrl\-C (Ctrl\-C → Command::Quit in the input table), so this flag is a no\-op. Provided so existing `less` invocations work unchanged
.TP
\fB\-e\fR, \fB\-\-quit\-at\-eof\fR
Quit when the user tries to scroll forward past end\-of\-file for the second time. Mirrors `less \-e`. Mutually exclusive with `\-E`
.TP
\fB\-E\fR, \fB\-\-QUIT\-AT\-EOF\fR
Quit the first time end\-of\-file is reached. Mirrors `less \-E`
.TP
\fB\-\-head\fR \fI<N>\fR
Show only the first N lines of the source. Mutually exclusive with \-\-tail
.TP
\fB\-\-hex\fR
Render the source as an xxd\-style hex dump instead of byte\-faithful text. 16 bytes per row, offset prefix, ASCII gutter. Mutually exclusive with parsing\- and rendering\-oriented flags
.TP
\fB\-\-hex\-group\fR \fI<N>\fR [default: 4]
Hex characters per group in `\-\-hex` mode. One of 2, 4, 8, 16, 32 (default 4, matching `xxd`). 32 means the whole row as a single group with no spacing between hex pairs. Requires `\-\-hex`. Can be changed at runtime with `:hex N`
.TP
\fB\-N\fR, \fB\-\-LINE\-NUMBERS\fR
Show line numbers
.TP
\fB\-\-list\-formats\fR
Print available log formats and their named fields, then exit
.TP
\fB\-\-live\fR
Live mode: re\-read the file when its on\-disk content changes (mtime, size, or inode). Use this for files rewritten in place — source files being edited, files saved by an editor or AI agent. Different from `\-\-follow` (which watches for *appended* bytes); the two are mutually exclusive. Press `R` inside the pager to force a reload
.TP
\fB\-\-manual\fR
Print the full user manual and exit
.TP
\fB\-\-mouse\fR
Enable mouse capture: click rows in the file picker / help overlay, and scrollwheel scrolls the body. Trade\-off: most terminals disable their native text selection while mouse capture is on
.TP
\fB\-\-no\-color\fR
Show raw control bytes as `^X` glyphs (pre\-0.18 default). Disables SGR / OSC interpretation. Honoured also by the `NO_COLOR` environment variable (any non\-empty value) and `CLICOLOR=0`
.TP
\fB\-\-no\-preprocess\fR
Ignore $LESSOPEN. Useful when LESSOPEN is exported but not wanted for one invocation
.TP
\fB\-o\fR, \fB\-\-output\fR \fI<FILE>\fR
Non\-interactive batch mode: apply \-\-filter / \-\-grep / \-\-head / \-\-tail / \-\-prettify to the source and write the resulting raw bytes to FILE, then exit. Use `\-` for stdout (`\-\-stdout` is a synonym). Skips the alt\-screen and raw mode entirely. With `\-\-follow`, doesn\*(Aqt exit — keeps appending matching new bytes to FILE as they arrive (Ctrl\-C to stop). Not compatible with `\-\-live`
.TP
\fB\-\-preprocess\fR \fI<CMD>\fR
Pipe the source file through this command before rendering. Must start with `|`; `%s` is substituted with the file path. Example: `\-\-preprocess \*(Aq|pdftotext %s \-\*(Aq`. Overrides $LESSOPEN
.TP
\fB\-\-prettify\fR
Pretty\-print structured content (JSON, YAML, TOML, XML, HTML, CSV). Detects the type from the filename extension or the first bytes; use `\-\-content\-type=NAME` to override. Static files only — not allowed with `\-\-follow`, `\-\-live`, or `\-\-filter`. Toggle interactively with `Shift\-P`; force a type with `\-P` then a letter (j/y/t/x/h/c)
.TP
\fB\-\-prompt\fR \fI<TEMPLATE>\fR
Replace the hardcoded status format with a templated string. Uses the same `<field>` syntax as `\-\-display`. Available fields: label, top, bottom, total, pct, rec\-top, rec\-bottom, rec\-total, rec\-block, wrap\-offset, format\-tag, filter\-tag, grep\-tag, hide\-tag, search\-tag, pretty\-tag, live\-tag, follow\-tag. Per\-format default can be set via `prompt = \*(Aq...\*(Aq` in formats.toml. Mutually exclusive with \-\-hex
.TP
\fB\-r\fR, \fB\-\-raw\-control\-chars\fR
Pass every byte to the terminal raw, including cursor moves and non\-SGR escape sequences. Risky: scroll math may break on long lines. Less\-style \-r. Mutually exclusive with \-\-no\-color
.TP
\fB\-\-truecolor\fR \fI<MODE>\fR [default: auto]
Truecolor (24\-bit RGB) handling. `auto` (default) checks `$COLORTERM` and downsamples when truecolor isn\*(Aqt advertised; `never` always downsamples to the 256\-color palette; `always` passes RGB through regardless of terminal capability
.TP
\fB\-\-status\-style\fR \fI<SPEC>\fR [default: reverse]
Style for the status row. Comma\-separated tokens: `bold`, `dim`, `italic`, `underline`, `reverse`, `fg=COLOR`, `bg=COLOR`. COLOR is a named color (`black`..`white`, optional `bright\-` prefix), `#RRGGBB`, or an indexed value (0–255). Empty string disables theming. Default: `reverse`
.TP
\fB\-\-prompt\-style\fR \fI<SPEC>\fR [default: ]
Style for `\-\-prompt` output (and per\-format `prompt_style`). Same grammar as `\-\-status\-style`. Default: empty (no extra styling on top of what the prompt template itself emits)
.TP
\fB\-\-record\-start\fR \fI<REGEX>\fR
Treat lines matching REGEX as record boundaries. Lines that don\*(Aqt match are joined to the preceding record. Affects search, filter, grep, and the status line — all operate on whole records when set. Overrides the active \-\-format\*(Aqs record_start if both are present. Without \-\-format, this is the only way to enable records mode for plain text. Example: \-\-record\-start \*(Aq^\\[\*(Aq
.TP
\fB\-\-stdout\fR
Synonym for `\-\-output \-`: write the batch\-mode output to stdout
.TP
\fB\-\-tab\-width\fR \fI<TAB_WIDTH>\fR [default: 8]
Tab stop width (default 8)
.TP
\fB\-t\fR, \fB\-\-tag\fR \fI<NAME>\fR
Jump to the tag NAME at startup (requires a tags file)
.TP
\fB\-T\fR, \fB\-\-tag\-file\fR \fI<PATH>\fR
Path to the tags file. Default: walk up from CWD looking for `tags`
.TP
\fB\-\-tail\fR \fI<N>\fR
Show only the last N lines of the source. For files this skips most of the index work — useful for huge logs. Combine with `\-f` for `tail \-f`. Mutually exclusive with \-\-head. Streaming stdin is not supported
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
\fB\-V\fR, \fB\-\-version\fR
Print version
.TP
[\fIFILES\fR]
Files to view (only the first is opened in MVP)
.SH VERSION
v0.29.1