⚡
Install & Setup
Quick install
curl --proto '=https' --tlsv1.2 -LsSf \ https://setup.atuin.sh | sh
Shell init (add to rc file)
# bash eval "$(atuin init bash)" # zsh eval "$(atuin init zsh)" # fish atuin init fish | source
First-time setup
| atuin register -u <user> -e <email> | Create sync account |
| atuin import auto | Import existing history |
| atuin sync | Initial sync |
⌨️
Keyboard Shortcuts
Navigation
| ↑ ↓ / Ctrl+P Ctrl+N | Move through results |
| ← → | Move cursor in query |
| Alt+1–9 | Jump to result #N |
Actions
| Enter | Execute selected command |
| Tab | Return to shell for editing |
| Ctrl+O | Open command inspector |
| Ctrl+Y | Copy selected command |
| Ctrl+A d | Delete selected entry |
| Ctrl+A D | Delete all entries matching selected command |
| Ctrl+O Ctrl+D | Delete entry (preview in inspector first) |
| Ctrl+C / Ctrl+D / Esc | Cancel search |
Mode switching
| Ctrl+R | Cycle filter mode |
| Ctrl+S | Cycle search mode |
Vim mode
| Esc | Enter vim-normal mode |
| j k | Move through results (normal) |
| i | Return to insert mode |
🔍
Filter Modes (Ctrl+R)
| Mode | Searches |
|---|---|
| global | All history: every machine, session & directory (default) |
| host | This machine only |
| session | Current shell session only |
| session-preload / SESSION+ | Current session + global history from before session start |
| directory | Current working directory only |
| workspace | Entire git repo tree (auto in git repos) |
✦
Search Modes (Ctrl+S)
| Mode | Behavior |
|---|---|
| prefix | Matches commands starting with your query |
| fulltext | Matches anywhere in the command string |
| fuzzy | fzf-style: letters in order, gaps allowed; supports 'exact ^start end$ !not (default) |
| daemon-fuzzy | Fuzzy with frecency ranking via the daemon (needs [daemon] enabled) |
📜
History Commands
Browse & search
| atuin history list | List all history |
| atuin history list --cmd-only | List commands only (no metadata) |
| atuin search <query> | Non-interactive search |
| atuin search -i <query> | Interactive TUI search |
| atuin search --human <query> | Search with human-readable timestamps |
Search filters
--cwd <dir> | Filter by directory |
--exit <code> | Filter by exit code (0 = success) |
--after <time> | After a point in time |
--before <time> | Before a point in time |
--limit <n> | Limit result count |
--human | Human-readable timestamps |
Delete & prune
| atuin search --delete <query> | Delete matching entries (run without --delete first to preview) |
| atuin search --delete-it-all | Delete ALL local history (irreversible) |
| atuin history prune --dry-run | Preview what prune removes |
| atuin history prune | Remove entries matching history_filter / cwd_filter |
| atuin history dedup --dry-run --before <date> --dupkeep <n> | Preview duplicate removal |
| atuin history dedup --before <date> --dupkeep <n> | Remove duplicates (same command, cwd & host), keep newest n |
| atuin store verify | Check all local records decrypt with current key |
| atuin store purge | Delete local records that can't be decrypted |
☁️
Sync & Account
Sync
| atuin sync | Sync with server (bidirectional) |
| atuin sync --force | Force full re-sync |
Account
| atuin register -u <u> -e <e> | Create account |
| atuin login -u <user> | Login to sync server |
| atuin logout | Logout |
| atuin account delete | Delete account & all synced data (local history kept) |
Key management
| atuin key | Show encryption key (keep safe!) |
Import
| atuin import auto | Auto-detect shell & import |
| atuin import bash | Import from bash history |
| atuin import zsh | Import from zsh history |
| atuin import fish | Import from fish history |
Other
| atuin stats | Show usage statistics |
| atuin stats all | Show all-time usage statistics |
| atuin doctor | Diagnose issues & dump system info |
| atuin-server start | Run self-hosted server (separate atuin-server binary) |
💡
Useful Examples
Practical queries
# All failed commands in current dir atuin search --exit 1 --cwd . # Successful git commits after yesterday 3pm atuin search --exit 0 --after "yesterday 3pm" git commit # Commands run in the last hour atuin search --after "1 hour ago" # Find and delete command-not-found entries atuin search --delete --exit 127 # Preview pruning without deleting atuin history prune --dry-run # Stats for last 7 days (also: today, month, year) atuin stats week # Stats for a single day (24h from that point) atuin stats last friday # Import from custom history file HISTFILE=~/.zsh_custom_history atuin import zsh
Supported time formats
Relative
"2 hours ago", "last week"Natural
"yesterday 3pm", "last monday"Absolute
"2024-01-15"
⚙️
Config Reference ~/.config/atuin/config.toml
Sync
sync_address | Server URL (default: api.atuin.sh) |
auto_sync | true / false |
sync_frequency | "5m" (default), "1h", "0" (every cmd) |
network_timeout | Duration (default: "30s") |
update_check | Check for new releases (default: true) |
UI & Keymaps
[theme] name | "default" · "autumn" · "marine" |
keymap_mode | "emacs" · "vim-normal" · "vim-insert" · "auto" |
filter_mode | Default filter mode on open ("global") |
search_mode | Default search mode on open ("fuzzy") |
[ui] columns | Columns shown in TUI list |
Filtering
history_filter | Regex list: skip matching cmds |
cwd_filter | Regex list: skip matching dirs |
Stored metadata per command
commandexit_codeduration
cwdhostnamesession
timestampusershell
📄
Example config.toml
## ~/.config/atuin/config.toml # Sync auto_sync = true sync_frequency = "5m" sync_address = "https://api.atuin.sh" # UI keymap_mode = "vim-insert" filter_mode = "global" search_mode = "fuzzy" # Exclude commands from history (unanchored regex) # A leading space already skips one command history_filter = [ "^sudo -i$", "^export .*TOKEN=", ] # Exclude directories from recording cwd_filter = [ "^/tmp/", "^/private/", ] # Updates (checks at most once per hour) update_check = true # Tables go after top-level keys [theme] name = "default" [ui] # Columns shown in search TUI columns = ["time", "duration", "exit", "command"]
