Comparison 8 min read

Suvadu vs fzf for Shell History: When Ctrl-R Isn't Enough (2026)

Using fzf for Ctrl-R history search? Suvadu vs fzf compared — why a fuzzy finder over a text file hits a ceiling, and what a database-backed history adds.

Madhubalan Appachi Madhubalan Appachi · Published · Updated

Binding fzf to Ctrl-R is one of the most popular shell upgrades there is — and a great one. Fuzzy-finding your history beats the stock reverse search by a mile, and fzf is fast, scriptable, and everywhere. But fzf isn't actually a history tool: it's a fuzzy finder pointed at your history file. That distinction is where it hits a ceiling. If you've outgrown fzf + Ctrl-R, here's how Suvadu compares.

Suvadu vs fzf at a glance

Feature Suvadu fzf (for history)
What it isShell history replacementFuzzy finder over the history file
StorageSQLite (WAL mode)Your shell's text history file
SearchLiteral word/substring matches + structured filtersFuzzy (subsequence) match
Filter by dir / exit code / sessionYes
Metadata per commandDir, exit code, timestamp, executor, sessionCommand text only
Arrow-key historyRecency-first prefix recall— (Ctrl-R only)
Stats / heatmapYes
AI agent trackingClaude Code, Cursor, OpenCode, Antigravity
MCP serverBuilt-in (21 tools)
Storage / syncLocal database; no built-in cloud syncUses local shell history

Where fzf wins

  • It's a Swiss Army knife. fzf fuzzy-finds anything — files, git branches, processes, history. History is just one of dozens of uses, and that generality is the whole point.
  • Zero lock-in. It reads your existing history file and pipes anywhere. Nothing to migrate, nothing to trust.
  • Scriptability. As a Unix filter, fzf composes into your own tools beautifully.

If you love fzf as a general fuzzy finder, keep it — Suvadu doesn't replace that. The comparison here is specifically about history, where fzf is limited by the file it reads from.

1. Filters, not just fuzzy matching

fzf can only match against the text in your history file. Suvadu stores structured metadata for every command, so its search TUI lets you filter by directory, time range, exit code, session, and executor before matching the text. "Failed docker commands I ran in this repo last week" is a filter in Suvadu; in fzf it's a manual scroll.

2. Context your history file doesn't store

Shell history files can record command text and, with options such as Zsh's extended history, timestamps and durations. Suvadu also captures the working directory, exit code, session, and executor for each command recorded through its integrations. That context powers a stats dashboard, recency-first arrow-key recall, and structured filtering.

3. It knows your AI agents

fzf reads the history text it is given and does not add executor metadata. Suvadu's dedicated integrations can record agent commands with executor attribution; prompt text is included only for integrations that capture it. You can audit and replay the captured activity and apply rule-based risk assessment. See agent tracking.

4. History your agent can read

Suvadu's local MCP server lets a connected AI client query captured commands, failures, and sessions. Returned data is available to that client and may be sent to its provider under the client's settings. fzf is a general finder rather than an MCP history server.

So, fzf or Suvadu?

  • Keep fzf if you mainly want a fast, general-purpose fuzzy finder and a better Ctrl-R with zero setup or lock-in.
  • Add Suvadu if you want structured, filterable history with metadata, stats, recency-first arrow-key recall, AI-agent tracking, or MCP access for your agent.

They are not mutually exclusive: fzf can continue finding files while Suvadu records shell history. Installing the binary is followed by a shell-integration step; the importer accepts Suvadu JSONL exports and raw Zsh history.

Install Suvadu →  ·  See how Suvadu compares to Atuin →

Madhubalan Appachi
Madhubalan Appachi

Builder of Suvadu. Writes Rust, thinks about shell history more than most people, and believes developer tools should be local-first.