Suvadu vs Atuin: Shell History and AI Agent Workflows
Suvadu 0.4.1 vs Atuin 18.22.0 compared by task: recovering a command, importing history, inspecting an AI-agent session, and retrieving error output, with migration limits.
Atuin and Suvadu both keep shell history in a local SQLite database with far more context than a history file, both record commands run by AI coding agents, and both ship an MCP server. Feature checklists therefore do not separate them well. This comparison instead walks through four jobs you might hire either tool for: recovering a command, importing existing history, inspecting what an agent did, and finding out why a command failed.
Review note: I build Suvadu. I reviewed this article on 19 September 2026 against Suvadu 0.4.1 (source and release notes) and the Atuin v18.22.0 release (published 9 September 2026), checking its MCP and agent-hook docs at that release tag alongside the current Atuin documentation linked below. This is a documentation and source review: I did not install and benchmark Atuin, so there are no comparative performance claims here.
The short decision
| Choose | When it is the better fit |
|---|---|
| Atuin | Better shell history is the main goal. You want fuzzy search with scopes, one-command import from Bash, Zsh, Fish, and other shells, Fish/Nushell/xonsh/PowerShell or Windows support, optional encrypted sync, or agents that can read a failed command's captured output. |
| Suvadu | You use Bash or Zsh with Claude Code, Codex, or OpenCode and want to inspect whole agent sessions (prompts, responses, commands, models, reported tokens), save a checkpoint another agent can continue from, and keep shared skills in sync across agents. |
| Either | You need structured local history with directory, exit code, and duration, agent commands labeled and hidden from everyday search, and read-only history access over MCP. Both cover that baseline. |
If you already use Atuin and mainly want recall, switching to Suvadu 0.4.1 has real costs: there is no Atuin or Bash importer, and typed search currently has a candidate limit described below. Suvadu's advantage is the agent-session workflow, so evaluate that first.
Suvadu vs Atuin at a glance
| Decision point | Suvadu 0.4.1 | Atuin 18.22.0 |
|---|---|---|
| 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 and platforms | Bash 4+ and Zsh 5.1+ on macOS and Linux | Bash, Zsh, Fish (tier 1); Nushell, xonsh, PowerShell (community tier); Linux, macOS, Windows, WSL 2 |
| Search model | Literal word/substring matching with ranked match tiers; filters for directory, date, executor, exit status, tags | Fuzzy by default, plus prefix, full-text, and daemon-backed modes; global, host, directory, workspace, and session scopes |
| Arrow key | Recency-first recall in the prompt; current directory breaks ties | Opens the search UI by default; can be disabled |
| Import | Zsh history and Suvadu JSONL only | atuin import auto plus Bash, Zsh, zsh-histdb, Fish, Nushell, xonsh, PowerShell, and other importers |
| Agent commands | Integrations for Claude Code, Codex, Cursor, OpenCode, Antigravity, and pi; agent commands hidden from recall by default | Hooks for Claude Code, Codex, opencode, and pi; agent commands hidden from interactive search by default |
| Agent conversations | Native session capture for Claude Code, Codex, and OpenCode: prompts, responses, models, reported tokens | Not described in the reviewed agent-hook docs, which cover commands |
| MCP | 21 read-only tools by default, plus resources and prompts; optional summary and skill-proposal writes | Two read-only tools: history search and captured command output |
| Command output | Not captured | Optional capture via daemon and PTY proxy (off by default) |
| Skills | One shared library, synced into Claude Code, Cursor, and Codex files | Project and global skills for its built-in Atuin AI assistant |
Task 1: recover a command you ran months ago
Atuin's interactive search is fuzzy by default and can switch between all history, one host, the current directory, the current Git workspace, or the current session. Its configuration also offers prefix, full-text, and daemon-backed fuzzy modes. Both Ctrl+R and Up-arrow open that interface by default; --disable-up-arrow keeps the shell's normal arrow behavior.
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. Up-arrow stays in the prompt and cycles recent commands, preferring the current directory on ties.
Known limitation in Suvadu 0.4.1: when you type a query, interactive search only matches within the newest ~5,000 eligible entries. With a large history, an older command can be missing from the results even though it is still stored. Narrowing with a date or directory filter brings older entries into range. A fix is planned but not released yet. For the "find that command from months ago" job, this is a real point in Atuin's favor today.
Neither search model wins universally. If fuzzy recall and scope switching match how you search, Atuin fits. If predictable literal inclusion and conventional recent-first arrow recall are easier to reason about, Suvadu may suit you once the limit above is fixed or if your history is small.
Task 2: import the history you already have
Atuin's import reference documents atuin import auto, which detects your shell, and dedicated importers for Bash, Zsh, zsh-histdb, Fish, Nushell, xonsh, PowerShell, resh, and replxx.
Suvadu 0.4.1 imports exactly two formats:
suv import --from zsh-history ~/.zsh_history --dry-run # preview
suv import --from zsh-history ~/.zsh_history
suv import backup.jsonl # a Suvadu JSONL export Migration limits to plan for:
- No Atuin importer. Suvadu cannot read Atuin's database. There is no published, tested conversion path yet, so do not count on moving Atuin history across.
- No Bash-history importer.
~/.bash_historyis not a supported format, even though Suvadu records Bash going forward. - Zsh imports carry what the file has. With
EXTENDED_HISTORYyou keep timestamps and durations; plain-format lines are stamped with the import time instead. Directory, exit code, and session were never in the file, so imported entries do not have them. - New context starts at activation. Rich fields such as directory, exit status, and agent attribution exist only for commands recorded after the shell hook or agent integration is active.
- Nothing is changed at the source. Importing reads the file; your Zsh history file and any Atuin database stay as they are.
Running both tools side by side is not a tested setup yet. Both bind Ctrl+R and the arrow keys, so if you experiment, keep only one tool's bindings active.
Task 3: inspect what an agent session did
Atuin's current agent hooks (atuin hook install claude-code, codex, opencode, or pi) record each Bash-tool command an agent runs, with the agent as author, plus directory, timestamp, exit code, and duration. Interactive search hides these by default, and atuin search --author filters by agent. That answers "which commands did the agent run?" well. The reviewed docs do not describe capturing prompts or assistant responses.
Suvadu also records agent commands, but for Claude Code, Codex, and OpenCode it additionally captures the native session: your prompts, the assistant's responses, every observed model, and provider-reported token counts, including sessions that ran no commands. A typical 0.4.1 workflow:
# once per agent (rerun after upgrading, then fully relaunch the agent)
suv init claude-code # or: suv init codex, suv init opencode
# after some agent work
suv sessions # one picker for terminal and agent sessions; Ctrl+T cycles All/Human/AI
suv agent sessions # the same AI sessions as JSON, for scripts
suv agent session <id> # events, commands, tokens, and saved summaries as JSON For Codex, also review and trust Suvadu's hooks with /hooks in the Codex CLI. A transcript that was not captured live can be added with suv agent import-session <path> (Codex or Claude Code JSONL).
To hand work from one agent to another, allow connected agents to save summary checkpoints. This write is off by default; add it to Suvadu's config.toml and restart the agent so its MCP server reloads:
[mcp]
allow_session_summaries = true Then ask the agent to "summarize and save this session". It finds the session (resolve_current_agent_session), reads it (get_agent_session), and saves a summary with references to the captured evidence (save_session_summary). The agent writes the summary; Suvadu stores it. Another agent, or you in suv sessions (press s on an AI session), can read it later. Token figures are what each provider reports, not a normalized cost estimate.
Shared skills work alongside this. Keep a recurring checklist once and write it into each agent's own files:
suv skills add deploy-checklist --description "Steps before a deploy" < deploy.md
suv skills sync # Claude Code skills, Cursor rules, Codex AGENTS.md Atuin also has skills, used by its built-in Atuin AI assistant; Suvadu's difference is managing one set of instructions across external agents. Suvadu's Prompt Explorer and agent reports add prompt-to-command browsing and risk summaries.
Next step: the sessions guide covers capture coverage per agent, the session browser, and saving and reading summaries in detail.
Task 4: find out why a command failed
Both tools record the exit code, so both can list failed commands, including through MCP: Atuin's history tool has a failed-only filter, and Suvadu has what_failed, which groups recent failures by the prompt or session that triggered them, and learn_from_failures, which reports recurring failures in a project.
Seeing the actual error text is different. Atuin can capture command output when you enable its daemon and PTY proxy (off by default, kept locally with per-command and per-session limits), and its MCP output tool lets an agent read it. Suvadu 0.4.1 does not capture stdout or stderr, and its session capture excludes tool results. If agents diagnosing failures from real error output is central to your workflow, Atuin has the direct answer.
MCP: both expose history to agents
Atuin ships a read-only MCP server with two tools: history search, returning command, time, directory, exit code, and duration with scope, failure, and author filters; and captured output, which needs the output-capture setup above.
Suvadu's local MCP server exposes 21 read-only tools by default, covering command history, project context, recurring failures, risk assessment, skills, and agent sessions, plus resources and prompts. Two write paths, saving session summaries and proposing skills for human review, are off until you enable them. A larger tool count is not proof of better answers; compare the specific questions you want an agent to answer.
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 JSON, JSONL, or CSV and import JSONL; JSONL re-import skips duplicates by default. Moving and scheduling those files is your responsibility. In either tool, an MCP client that reads your history receives that data and may send it to its model provider under the client's settings.
Performance and maturity
Both command-line clients are written in Rust. This review did not run comparable benchmarks on the same hardware and history dataset, so it would be misleading to name a speed winner. Test startup, search responsiveness, and search completeness with your own history if they are deciding factors.
Atuin is much older and more widely used, with broader shell and platform support and more import paths. Suvadu is a young project with a narrower shell focus; its investment is in agent-session review, cross-agent checkpoints, and shared skills.
Should you switch?
Stay with or choose Atuin when shell recall is the main job, when you need its import coverage, wider shell and platform matrix, fuzzy scoped search, encrypted sync, or captured command output for agents. Try Suvadu when Bash or Zsh is enough and you want to inspect and continue agent sessions across Claude Code, Codex, and OpenCode, and the migration and search limits above are acceptable for you.
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. Linux only for now: the 0.4.1 script requests a macOS file that is not published, so on a Mac use Homebrew or Cargo. Downloads a binary for your architecture, verifies its checksum, and installs to /usr/local/bin using sudo.
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 Suvadu on one agent session first; the sessions guide shows what to check. 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.