You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: website/developer-tools/cli-tools.md
+33-73Lines changed: 33 additions & 73 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -104,10 +104,6 @@ Requirements: None (static binary). Optional: clipboard support via xclip/xsel o
104
104
105
105
**Trade-offs:** Slightly slower than plain cat due to syntax highlighting overhead (negligible for typical use). Requires Nerd Font or compatible font for icon support in some terminal setups. Syntax highlighter is opinionated—custom language definitions require configuration rather than built-in extensibility.
106
106
107
-
**vs cat:** Adds syntax highlighting and line numbers automatically without additional piping. Better for code inspection; cat remains faster for raw text piping to other commands.
108
-
109
-
**vs less with syntax plugins:** bat is simpler—no paging required for most files (output fits terminal), no plugin configuration needed for basic usage. Trade: less offers interactive scrolling and searching for large files where bat defaults to paging.
110
-
111
107
**Installation:**
112
108
113
109
```bash
@@ -122,6 +118,39 @@ sudo apt install bat # Debian/Ubuntu
122
118
sudo pacman -S bat # Arch
123
119
```
124
120
121
+
## Git Operations
122
+
123
+
### lazygit
124
+
125
+

126
+
127
+
[**lazygit**](https://github.com/jesseduffield/lazygit) is a Go-based Git TUI (terminal user interface) for visual branch management, interactive staging, and commit navigation. Cross-platform with extensive customization options.
128
+
129
+
**Key differentiators:** Visual branch tree shows repository topology without command memorization. Interactive staging supports hunk selection and individual line staging. Commit navigation browses history with inline diffs. Customizable keybindings via YAML config. Mouse support for clicking to select, scrolling through commits. Multi-worktree awareness for parallel branch development.
130
+
131
+
**Best suited for:** Developers managing multi-worktree workflows who need visual branch context. Engineers doing complex interactive rebases, cherry-picks, and merges. Users wanting git discoverability via menu-driven interface instead of command memorization.
132
+
133
+
**Trade-offs:** Performance degrades on massive repositories (Linux kernel: 57s load time, 2.6GB RAM usage). Not a replacement for all git commands—some operations faster via raw CLI. Learning curve for keybindings, though discoverable via built-in help menu.
134
+
135
+
**Installation:**
136
+
137
+
```bash
138
+
# macOS
139
+
brew install lazygit
140
+
141
+
# Go
142
+
go install github.com/jesseduffield/lazygit@latest
143
+
144
+
# Windows
145
+
scoop install lazygit
146
+
147
+
# Linux package managers
148
+
sudo apt install lazygit # Debian/Ubuntu
149
+
sudo pacman -S lazygit # Arch
150
+
```
151
+
152
+
Requirements: git. Optional: custom config in `~/.config/lazygit/config.yml`.

319
-
320
-
[**Atuin**](https://atuin.sh/) is a Rust-based shell history tool that replaces Ctrl+R with searchable command history backed by SQLite. Cross-platform (macOS, Linux, BSD), actively maintained, production-ready.
321
-
322
-
**Key differentiators:** Full-text search across command history with filtering by directory, exit code, execution duration, and session. Multi-line command support preserves complex agent invocations (cargo runs, docker commands, multi-step pipelines). Local SQLite database works completely offline—cloud sync is optional and self-hostable. Statistics command (`atuin stats`) provides command usage analytics by directory and frequency. Shell integrations (bash, zsh, fish, nushell) with configurable keybindings beyond Ctrl+R. Fuzzy searching with context preview shows command output and metadata.
323
-
324
-
**Best suited for:** Engineers managing multi-agent workflows who need to recall complex, multi-line invocations from previous sessions. Developers switching between directories and projects who benefit from directory-scoped history filtering. Teams wanting to share sanitized command history patterns across machines without cloud dependency.
325
-
326
-
**Trade-offs:** Requires database migration from shell's native history format (one-time import). Fuzzy search interface differs from traditional Ctrl+R—learning curve for muscle memory. Cloud sync adds latency on slow connections, but works perfectly offline with local SQLite—sync is entirely optional and not required for core functionality. Self-hosting option available for privacy-conscious teams.
327
-
328
-
**vs McFly:** Both support multi-line commands and fuzzy searching. Atuin offers better analytics (`atuin stats`) and offline-first design. McFly focused on scoring frequently used commands; Atuin balances frecency with richer filtering.
329
-
330
-
**vs Ctrl+R:** Interactive fuzzy search and filtering (by directory, exit code, duration) replaces linear history search. Preserves complex multi-line commands instead of truncating. Cross-machine sync optional, unlike shell history's single-machine scope.
331
-
332
-
**vs fzf history integration:** fzf provides general-purpose fuzzy selection; Atuin specializes in command history with shell-aware parsing and rich metadata. Atuin's database enables analytics—fzf works on flat history lists. Can use both: fzf for general file selection, Atuin for command recall.
333
-
334
-
**Installation:**
335
-
336
-
```bash
337
-
# macOS
338
-
brew install atuin
339
-
340
-
# Cargo (Rust)
341
-
cargo install atuin
342
-
343
-
# Linux package managers
344
-
sudo apt install atuin # Debian/Ubuntu
345
-
sudo pacman -S atuin # Arch
346
-
```
347
-
348
-
Requirements: Rust 1.70+ if building from source. Optional: cloud sync account for cross-machine history (local-only operation fully supported without account).
349
-
350
-
## Git Operations
351
-
352
-
### lazygit
353
-
354
-

355
-
356
-
[**lazygit**](https://github.com/jesseduffield/lazygit) is a Go-based Git TUI (terminal user interface) for visual branch management, interactive staging, and commit navigation. Cross-platform with extensive customization options.
357
-
358
-
**Key differentiators:** Visual branch tree shows repository topology without command memorization. Interactive staging supports hunk selection and individual line staging. Commit navigation browses history with inline diffs. Customizable keybindings via YAML config. Mouse support for clicking to select, scrolling through commits. Multi-worktree awareness for parallel branch development.
359
-
360
-
**Best suited for:** Developers managing multi-worktree workflows who need visual branch context. Engineers doing complex interactive rebases, cherry-picks, and merges. Users wanting git discoverability via menu-driven interface instead of command memorization.
361
-
362
-
**Trade-offs:** Performance degrades on massive repositories (Linux kernel: 57s load time, 2.6GB RAM usage). Not a replacement for all git commands—some operations faster via raw CLI. Learning curve for keybindings, though discoverable via built-in help menu.
363
-
364
-
**Installation:**
365
-
366
-
```bash
367
-
# macOS
368
-
brew install lazygit
369
-
370
-
# Go
371
-
go install github.com/jesseduffield/lazygit@latest
372
-
373
-
# Windows
374
-
scoop install lazygit
375
-
376
-
# Linux package managers
377
-
sudo apt install lazygit # Debian/Ubuntu
378
-
sudo pacman -S lazygit # Arch
379
-
```
380
-
381
-
Requirements: git. Optional: custom config in `~/.config/lazygit/config.yml`.
0 commit comments