TL;DR: Atuin is a free, open-source tool that replaces your shell's built-in history (the up-arrow thing) with a dramatically better system. You get fuzzy search across your entire command history, encrypted sync across all your machines, and an AI feature that generates terminal commands from plain English descriptions. Install it in under 5 minutes. Works with bash, zsh, fish, and nushell.
Why AI Coders Need This
Here is a scene that happens every single day when you build with AI tools:
You are working on a project. Claude or Cursor generated a bunch of commands for you last week — something to set up a Docker container, something to configure your database, something to deploy to your VPS. You ran them all. Everything worked. You moved on.
Now it is a week later. You need that Docker command again. You press the up arrow in your terminal. You press it again. And again. And again. Fifty presses in, you have scrolled past a hundred git add and npm run dev commands and you still have not found it.
So you do what every vibe coder does: you go back to your AI tool and ask it to generate the command again. Maybe it gives you the same one. Maybe it gives you a slightly different one. Maybe it hallucinates a flag that does not exist. You are now solving a problem you already solved — wasting time, burning tokens, and introducing risk.
This is the problem Atuin solves. Your terminal's built-in history system was designed decades ago for people who ran maybe 20 commands a day. Vibe coders run hundreds. You need something that can actually keep up.
With Atuin installed, that Docker command from last week? You press Ctrl+R, type docker, and instantly see every Docker command you have ever run — on this machine and every other machine you own. Found it in two seconds.
And the AI feature is even better: press ? on an empty prompt, type "find all files larger than 100MB in this directory" in plain English, and Atuin generates the exact terminal command for you. No Googling, no asking your AI tool, no context-switching.
What It Does
Atuin is a Rust-based tool that hooks into your shell and replaces the default history mechanism. Here is what that means in practical terms:
Fuzzy Search That Actually Works
Your default shell history is a flat text file. Atuin replaces it with a searchable database. When you press Ctrl+R, you get an interactive search that finds commands based on partial matches. Type dock build and it will find docker build -t myapp:latest . from three weeks ago. It uses the same fuzzy matching algorithm as fzf (a popular search tool), so it is fast and forgiving with typos.
Sync Across Machines
If you work on a laptop and a desktop — or you SSH into a VPS — your command history is normally trapped on each machine. Atuin syncs your history across all of them via encrypted sync through Atuin Hub (or your own self-hosted server). The command you ran on your Mac at home shows up on your Linux VPS at work. Sign in with Google or GitHub and everything connects.
Context for Every Command
Default shell history just stores the command text. Atuin stores: the command, when you ran it, how long it took, the exit code (did it succeed or fail?), and the directory you were in. This means you can search for "that failing npm command I ran in the my-app folder last Tuesday" and actually find it.
AI Command Generation
This is the feature that makes Atuin special for vibe coders. Press ? on an empty terminal prompt, describe what you want in plain English, and Atuin generates the command. Press Enter to run it, Tab to edit it first, or f to ask follow-up questions. It is like having a terminal-native AI assistant that does not require opening a browser or a chat window.
Safety Guardrails
When the AI generates a command that could be dangerous — deleting files, wiping a database, restarting a production deployment — Atuin flags it with a warning and requires you to press Enter twice to confirm. This is a real, practical safety feature. No accidental rm -rf / disasters.
Daemon Mode and Hex
Atuin v18.13 introduced daemon mode, which keeps your search index in memory for dramatically faster lookups. It also introduced Atuin Hex — a PTY proxy that renders UI popups without clearing your terminal's scrollback. If you have ever used a tool that wipes your terminal when it opens a menu, you know how annoying that is. Hex fixes it.
Getting Started (5-Minute Setup)
Atuin works on macOS and Linux. If you have a terminal, you can install it. Here is how:
Step 1: Install Atuin
Pick your method:
Option A — Quick Install Script
curl https://setup.atuin.sh | bash
Option B — Homebrew (macOS)
brew install atuin
The install script detects your OS and shell automatically. If you are on a Mac and have never changed your shell, you are running zsh — Atuin handles it.
Step 2: Add Atuin to Your Shell
After installing, you need to tell your shell to use Atuin. The installer usually does this for you, but if it does not, add this line to your shell config file:
For zsh (~/.zshrc)
eval "$(atuin init zsh)"
For bash (~/.bashrc)
eval "$(atuin init bash)"
For fish (~/.config/fish/config.fish)
atuin init fish | source
Then restart your terminal or run source ~/.zshrc (or whichever config file you edited).
Step 3: Import Your Existing History
You do not lose your old commands. Atuin can import your existing shell history:
Import Existing History
atuin import auto
This pulls in your existing shell history so you can search it immediately. All your old commands, right there.
Step 4: (Optional) Set Up Sync
If you want your history to follow you across machines:
Register and Sync
# Create an account (or sign in with Google/GitHub)
atuin register
# Or log in on a second machine
atuin login
# Sync your history
atuin sync
Your history is end-to-end encrypted before it leaves your machine. Atuin Hub cannot read your commands.
Pro tip: If you are privacy-conscious, you can skip Hub entirely and self-host your own sync server. Atuin's sync server is open-source too.
The Commands You'll Actually Use
You do not need to memorize a big list of Atuin commands. Here are the ones that matter day-to-day:
Search Your History
Interactive Search
# Press Ctrl+R to open Atuin's search UI
# Then just start typing — it fuzzy-matches as you type
# Or search from the command line directly
atuin search docker
atuin search "npm run build"
atuin search --after "2026-03-01" deploy
The interactive search (Ctrl+R) is what you will use 95% of the time. Start typing any part of the command you remember — even a fragment from the middle — and Atuin finds it.
Filter by Directory or Time
Filtered Search
# Show only commands run in the current directory
atuin search --cwd .
# Show commands from a specific time range
atuin search --after "last week" git push
# Show only commands that failed (non-zero exit code)
atuin search --exit 1
The directory filter is incredibly useful. "What was that command I ran in this project folder?" — just search with --cwd . and you only see commands from the current project.
View Stats
History Statistics
# See your most-used commands
atuin stats
This shows you which commands you run most often. If git status is at the top, you are in good company — that is true for basically every developer on Earth.
Pro tip: You can change the search mode in Atuin's config. The default is "fuzzy" matching, but you can switch to "prefix" (matches from the beginning of the command) or "fulltext" (exact substring matching) if you prefer. Edit ~/.config/atuin/config.toml to customize.
Atuin AI — The Killer Feature
This is why Atuin is trending on Hacker News right now, and why it matters specifically for vibe coders.
Here is the workflow: you are sitting at your terminal and you need to do something but you do not know the command. Maybe you need to find all large files on your Mac. Maybe you need to kill a process that is hogging port 3000. Maybe you need to compress a folder into a tarball. You know what you want — you just do not know the exact command.
Before Atuin AI, you would:
- Switch to your browser
- Google "how to find large files on mac terminal"
- Scan through Stack Overflow answers from 2014
- Copy a command that may or may not work on your OS version
- Paste it into your terminal and hope for the best
With Atuin AI:
Atuin AI Workflow
# On an empty prompt, press ? and describe what you want:
? find all files larger than 100MB in this directory
# Atuin generates:
# find . -size +100M -type f
# Press Enter to run it
# Press Tab to edit it first
# Press f to ask a follow-up question
Here are more real examples that vibe coders actually need:
Atuin AI — Real Examples
# Kill whatever is running on port 3000
? kill the process using port 3000
# → lsof -ti:3000 | xargs kill -9
# See how much disk space each folder is using
? show disk usage by folder sorted by size
# → du -sh * | sort -hr
# Find and delete all node_modules folders
? find all node_modules folders and show their sizes
# → find . -name "node_modules" -type d -exec du -sh {} +
# Check if a port is open on a remote server
? check if port 443 is open on 192.168.0.174
# → nc -zv 192.168.0.174 443
The Safety Net
What happens when Atuin AI generates something dangerous? It tells you.
Safety Warning Example
# You type:
? delete all files in the current directory
# Atuin generates: rm -rf ./*
# ⚠️ WARNING: This command will permanently delete files
# Press Enter TWICE to confirm, or Tab to edit
This double-confirm on dangerous commands is not optional — it is built into Atuin. When you are a vibe coder running AI-generated commands all day, this kind of safety guardrail can literally save your project.
Follow-Up Questions
If the generated command is not quite right, press f to ask a follow-up:
Follow-Up Workflow
# Initial query:
? find large files in this directory
# → find . -size +100M -type f
# Press f to follow up:
? but only show jpg and png files
# → find . -size +100M -type f \( -name "*.jpg" -o -name "*.png" \)
Privacy Controls
By default, Atuin AI only knows your operating system and which shell you are using. It does not send your command history, your file names, or your directory structure unless you explicitly grant access. You control the data boundary.
How This Works with AI Coding
If you are building with Claude Code, Cursor, or OpenCode, Atuin becomes a natural extension of your workflow. Here is how the pieces fit together:
The Command Memory Problem
AI coding tools generate commands for you constantly. "Run this to set up your database." "Run this to deploy." "Run this to fix that dependency issue." You run them all. But your AI tool does not remember what commands it told you to run last week in a different conversation. Your terminal's default history barely remembers either.
Atuin becomes your external memory. Every command your AI tool generates, every command you run manually — it is all searchable, timestamped, and tagged with the directory you were in.
The Multi-Machine Problem
Vibe coders often work across machines. You might develop on your laptop, deploy from your desktop, or SSH into a VPS to fix something. With default shell history, each machine is an island. You cannot search what you ran on your laptop while sitting at your desktop.
With Atuin sync, it does not matter where you ran the command. It is all in one searchable history.
The "What Did I Do?" Problem
Something broke. Your site was working yesterday. It is not working today. What changed? With default history, you are scrolling through hundreds of up-arrow presses hoping to spot what you did. With Atuin, you search by time range and directory:
Debugging What Changed
# What did I run in this project yesterday?
atuin search --cwd . --after "yesterday"
# What npm commands did I run this week?
atuin search --after "last monday" npm
# Show only commands that failed
atuin search --exit 1 --after "yesterday"
This is especially powerful when you are using AI tools that generate lots of commands. You can trace back through exactly what happened, in order, with timestamps.
Pro tip: When something breaks after an AI-assisted coding session, search Atuin for commands with non-zero exit codes (--exit 1). Failed commands you might have missed during a fast session often reveal the issue.
Common Mistakes and Fixes
Atuin Not Appearing After Install
The problem: You installed Atuin but pressing Ctrl+R still shows the old history search.
The fix: The init line was not added to your shell config, or you have not restarted your terminal. Check that eval "$(atuin init zsh)" (or your shell's equivalent) is in your config file, then open a new terminal window.
Check Your Shell Config
# For zsh — check if Atuin is initialized
grep atuin ~/.zshrc
# If nothing shows up, add it:
echo 'eval "$(atuin init zsh)"' >> ~/.zshrc
# Then restart your terminal or run:
source ~/.zshrc
Sync Not Working
The problem: You registered on one machine but your history is not showing up on the other.
The fix: Make sure you have run atuin login on the second machine and then atuin sync. Sync does not happen in real-time by default — you need to trigger it or enable the daemon.
Fix Sync
# On your second machine:
atuin login
atuin sync
# To enable automatic background sync, start the daemon:
atuin daemon
Ctrl+R Conflict with Other Tools
The problem: You have fzf or another tool that already binds to Ctrl+R.
The fix: Atuin should take priority if its init line comes after fzf's in your shell config. If not, you can rebind Atuin's search to a different key in ~/.config/atuin/config.toml.
AI Feature Not Available
The problem: You press ? on an empty prompt and nothing happens.
The fix: Make sure you are on Atuin v18.13 or later (atuin --version). If you installed via Homebrew, run brew upgrade atuin. The AI feature was introduced recently and requires the latest version.
Old History Missing
The problem: You installed Atuin but your old commands are not searchable.
The fix: Run atuin import auto to import your existing shell history. This only needs to be done once — after that, Atuin captures everything automatically.
What to Learn Next
Atuin is one tool in your terminal toolkit. Here is where to go from here:
- Terminal Commands Guide — If Atuin is your command memory, this guide teaches you the commands worth remembering. The essential terminal commands every vibe coder should know.
- What Is Git? —
gitcommands will probably be your most-searched Atuin history. Understanding Git means you will know what those commands do when you find them. - What Is npm? — Another constant source of terminal commands. Understanding npm means fewer "what was that install command?" moments.
- Claude Code Beginner's Guide — Claude Code runs entirely in your terminal, which means Atuin captures every command it generates. A powerful combination.
- What Is OpenCode? — Another terminal-based AI coding tool that pairs perfectly with Atuin's history and search.
Pro tip: Once you have Atuin running, start paying attention to your atuin stats output. Your most-used commands tell you a lot about your workflow — and which commands are worth turning into shell aliases to save even more time.
Frequently Asked Questions
Yes. Atuin is fully open-source (MIT licensed) and free. The core tool — history search, import, stats — is completely free with no limits. The sync feature uses Atuin Hub, which has a free tier that covers most individual users. If you want complete control over your data, you can self-host your own sync server for free as well.
No. This is the most common misconception. Atuin only replaces your shell's history system — the thing that happens when you press the up arrow or Ctrl+R. Your terminal app (iTerm2, Terminal, Warp, whatever you use) stays the same. Your shell (bash, zsh, fish) stays the same. Atuin layers on top of what you already have. You will not notice any difference except that your history search is dramatically better.
By default, the AI feature only knows your operating system and which shell you use. It does not automatically read or send your command history, file names, or directory structure. You choose what data to share with the AI, and all dangerous generated commands get flagged with a warning before you can run them. If you use the sync feature, your history is end-to-end encrypted before it leaves your machine.
Yes — that is one of Atuin's best features. Set up an Atuin Hub account (you can sign in with Google or GitHub), run atuin login on each machine, and your entire command history syncs across all of them with end-to-end encryption. The command you ran on your MacBook shows up when you search on your Linux VPS. If you prefer not to use Atuin Hub, you can self-host your own sync server.
Atuin supports bash, zsh, fish, and nushell. If you are on a Mac and have never changed your shell, you are running zsh — Atuin works out of the box. If you installed fish or nushell at some point, Atuin supports those too. The install script auto-detects your shell and configures itself accordingly.