Atuin Alternative: Suvadu vs Atuin for Shell History
A current Suvadu vs Atuin comparison covering local use, encrypted sync, shell support, search, AI-agent attribution, MCP, and migration limits.
Atuin and Suvadu are both local SQLite-backed shell history tools with richer context than a traditional history file. Both now support AI-agent attribution and a built-in MCP server. The decision comes down to more concrete differences: optional encrypted sync, shell coverage, search behavior, migration, and the review workflows you want around recorded commands.
Review note: I build Suvadu. I reviewed this article on 8 September 2026 against the current Atuin documentation linked below and Suvadu 0.3.7. I did not install and benchmark the current Atuin release locally, so there are no comparative performance claims here.
0.4.0 update: The comparison below records the 0.3.7 review. Suvadu 0.4.0 adds shared skills, native agent-file sync, command guard, and three MCP prompts. See the release notes and current MCP reference; native skills sync does not synchronize shell history across machines.
The short decision
| Choose | When it is the better fit |
|---|---|
| Atuin | You want end-to-end encrypted multi-machine sync, Fish/Nushell/xonsh/PowerShell support, fuzzy search with several scopes, or optional command-output access for agents. |
| Suvadu | You use Bash or Zsh, want a local-only design with manual portable exports, prefer literal word/substring search, or want Suvadu's Prompt Explorer and agent-report workflows. |
| Either | You mainly need structured local history, directory/exit/duration context, agent attribution, and read-only history access over MCP. Both cover that baseline, with different interfaces and setup. |
Suvadu vs Atuin at a glance
| Decision point | Suvadu 0.3.7 | Atuin |
|---|---|---|
| Local use | Local-only; no account or network service | Local storage and search work without sync or an account |
| Cross-machine sync | Manual export/import | Optional end-to-end encrypted hosted or self-hosted sync |
| Shells | Bash and Zsh | Bash, Zsh, Fish, Nushell, xonsh, and PowerShell |
| Search model | Literal word/substring matching with ranked match tiers | Fuzzy search with global, host, directory, workspace, and session scopes |
| Arrow key | Recency-first recall; current directory breaks ties | Opens the search TUI by default and can be disabled |
| Agent capture | Agent-specific integrations record commands and, where supplied, prompts and result data | Hooks for Claude Code, Codex, opencode, and pi label command author and record lifecycle data |
| MCP | Built-in, read-only local server with history and agent-oriented tools/resources | Built-in, read-only server for history search and optional captured output |
| Import path | Suvadu JSONL and Zsh history; no direct Atuin or native Bash-history importer | Can import the current shell's existing history |
Local storage and sync
Both tools store history locally. Atuin's sync setup is optional and end-to-end encrypted; users can choose its hosted service, self-host, or stay local. If seamless history across several machines is the requirement, Atuin has the direct answer.
Suvadu has no sync service. It can export plain-text JSON, JSONL, or CSV and import JSONL. JSONL re-import is deduplicated by default. This can suit a local-only policy, but moving and scheduling those files is your responsibility.
Search and daily recall
Atuin's interactive search is fuzzy and can scope history to all entries, one host, the current directory, the current Git workspace, or the current session. Its default integration can use both Ctrl+R and Up-arrow to open that interface.
Suvadu's Ctrl+R search is intentionally literal: every typed word must appear as a substring. It ranks prefix matches above contiguous matches, followed by in-order and any-order word matches. A shorthand such as gco therefore does not match git checkout unless the literal substring exists. Up-arrow recall is separate and recency-first, with the current directory used as a tiebreaker.
Neither model wins universally. Choose Atuin if fuzzy recall and scope switching match how you search. Choose Suvadu if predictable literal inclusion and conventional recent-first arrow recall are easier to reason about.
AI-agent commands: both support attribution
Atuin's current agent-hook guide documents Claude Code, Codex, opencode, and pi. It records supported agents' Bash-tool commands with an author label, working directory, timestamp, exit code, and duration when the integration provides the lifecycle events. Interactive search hides agent-run entries by default; the CLI can filter by agent author.
Suvadu also uses agent-specific integrations. Its Prompt Explorer lets you browse captured prompts and the commands linked to them. The report command summarizes captured activity, failures, and risk findings and can return a non-zero status at a configured risk threshold for a local check or Git hook.
Those are workflow differences, not a claim that Atuin lacks agent awareness. Coverage in either product depends on the relevant integration being installed and on the events and fields an agent exposes. In Suvadu, prompts without recorded commands do not appear in Prompt Explorer, and an integration may leave exit status unknown when the agent does not provide one.
MCP: both expose history to agents
Atuin ships a read-only MCP server. Its history tool returns command, time, directory, exit code, and duration and can filter by scope, failure, or author. A second tool can read captured command output after Atuin's daemon and PTY proxy are configured.
Suvadu's local read-only MCP server exposes command history plus workflows around agent sessions, project context, recurring failures, and risk assessment. If MCP is the deciding checkbox, both qualify; compare the specific tools and the setup your client needs.
Shell coverage and migration
Atuin supports Bash, Zsh, Fish, Nushell, xonsh, and PowerShell according to its current shell-integration guide. Suvadu 0.3.7 supports Bash and Zsh. Fish, Nushell, xonsh, and PowerShell users should choose Atuin between these two.
Migration also needs an honest caveat. Atuin documents automatic or shell-specific import of existing history. Suvadu imports its JSONL format and Zsh history, but 0.3.7 has no direct Atuin database importer and no native Bash-history importer. If old Bash or Atuin records matter, plan and test an export conversion before switching; a fresh Suvadu install only guarantees capture after its shell or agent integration is active.
Performance and maturity
Both command-line clients are written in Rust. This review did not reproduce comparable, current benchmarks on the same hardware and history dataset, so it would be misleading to name a speed winner. Test startup, search responsiveness, and shell-hook behavior with your own history if latency is a deciding factor.
Atuin has broader shell support and an established sync ecosystem. Suvadu is newer and narrower in shell coverage, with its product focus currently on local command history and agent-review workflows.
Should you switch?
Stay with or choose Atuin when encrypted sync, its wider shell matrix, fuzzy scoped search, or optional output capture is central. Try Suvadu when Bash/Zsh coverage is enough and you prefer local-only storage, literal search, manual portable exports, and its prompt-to-command and report interfaces.
Try Suvadu with your own history
For macOS or Linux with Zsh 5.1+ or Bash 4+. Install the CLI, enable your shell, then try Ctrl+R.
1. Install the CLI
With Homebrew:
brew tap AppachiTech/suvadu && brew install suvadu Other install methods
Install script. Downloads a binary for your OS and architecture, verifies its checksum, and installs to /usr/local/bin using sudo. Requires curl and an administrator password.
curl -fsSL https://downloads.appachi.tech/suvadu/install.sh | bash Cargo. Requires a Rust toolchain. Compiles from source, which can take a few minutes. Make sure ~/.cargo/bin is on your PATH.
cargo install suvadu 2. Enable recording in your shell
The installer does not activate shell recording. Open the instructions for the shell you use. If another history tool owns Ctrl+R, disable its history binding before enabling Suvadu; keep your existing history data.
Zsh setup
Add this line once to ~/.zshrc. Keep the existing line if it is already present:
eval "$(suv init zsh)" Save the file, then activate it in your Zsh terminal:
source ~/.zshrc Bash setup
Add this line once to ~/.bashrc. Keep the existing line if it is already present:
eval "$(suv init bash)" Save the file, then activate it in your Bash terminal:
source ~/.bashrc Bash 4+ is required. For a login shell, make sure ~/.bash_profile sources ~/.bashrc, or use the startup file your shell reads. Shell setup details.
3. Check setup and try a search
suv doctor Run echo hello, press Ctrl + R, and search for hello. Select a result to put it in your prompt; press Enter to run it. Agent and MCP setup are optional.
Import existing Zsh history or a Suvadu JSONL export. Raw Bash history and Atuin databases are not supported import formats.
If neither description settles it, keep your current history data intact and try the alternative with a small test workflow first. For the broader field, see Atuin, fzf, McFly, hstr, and Suvadu compared.
Builder of Suvadu. Writes Rust, thinks about shell history more than most people, and believes developer tools should be local-first.