惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

SecWiki News
SecWiki News
H
Help Net Security
罗磊的独立博客
Stack Overflow Blog
Stack Overflow Blog
M
MIT News - Artificial intelligence
Jina AI
Jina AI
L
LangChain Blog
K
Kaspersky official blog
I
Intezer
Martin Fowler
Martin Fowler
爱范儿
爱范儿
AWS News Blog
AWS News Blog
The Hacker News
The Hacker News
Recorded Future
Recorded Future
人人都是产品经理
人人都是产品经理
H
Hackread – Cybersecurity News, Data Breaches, AI and More
C
CXSECURITY Database RSS Feed - CXSecurity.com
Spread Privacy
Spread Privacy
Simon Willison's Weblog
Simon Willison's Weblog
U
Unit 42
N
News and Events Feed by Topic
A
Arctic Wolf
G
GRAHAM CLULEY
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 聂微东
F
Fortinet All Blogs
C
Cisco Blogs
美团技术团队
Vercel News
Vercel News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
H
Hacker News: Front Page
T
Tailwind CSS Blog
I
InfoQ
宝玉的分享
宝玉的分享
Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
P
Palo Alto Networks Blog
A
About on SuperTechFans
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
云风的 BLOG
云风的 BLOG
TaoSecurity Blog
TaoSecurity Blog
Google Online Security Blog
Google Online Security Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Privacy & Cybersecurity Law Blog
H
Heimdal Security Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
O
OpenAI News
博客园 - Franky
Scott Helme
Scott Helme

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
5 CLI Tools I Use to Keep Terminal Workflows Less Annoying
Valeriy Bagr · 2026-05-08 · via DEV Community

5 CLI Tools I Use to Keep Terminal Workflows Less Annoying

Dark terminal workspace showing several CLI tools: command glossary, fuzzy finder, search output, syntax-highlighted file preview, and directory listing.

The terminal is supposed to make work faster, which is funny, because mine regularly turns into a junk drawer with a cursor. Old commands hide in history, aliases multiply quietly, and somehow I still end up searching the web for the same tar, find, grep, or Git command I already solved months ago.

This is not a “definitive best CLI tools ever created by humanity” list. Those lists usually become 47 tools you install, admire, and forget. These are five CLI tools I actually reach for when I want terminal work to feel less annoying across zsh, bash, macOS, and Linux.

The Small Problem With Terminal Productivity

Terminal workflows rarely collapse because of one dramatic failure. They usually decay through tiny repeated annoyances.

You forget the exact command. You remember an alias, but not what it does. You know a file exists somewhere, but not where. You open a config file and immediately wish it had syntax highlighting. You run ls and get a gray wall of filenames that technically contains information, in the same way a landfill technically contains furniture.

Good CLI tools do not need to replace your whole workflow. The useful ones shave off friction. They make the thing you already do slightly faster, clearer, or harder to mess up.

My go-to 5 CLI tools are:

  1. gloss — a command glossary for reusable shell commands
  2. fzf — fuzzy finding for almost everything
  3. ripgrep — fast text search
  4. bat — readable file viewing
  5. eza — a better ls for daily navigation

There are plenty of honorable mentions: zoxide, fd, jq, httpie, tmux, delta, lazygit, just, tldr, pet, navi, direnv, starship, and half the Rust-powered replacements for old Unix commands. I like many of them. But if the goal is fewer annoying terminal moments, these five cover a practical loop: remember, find, search, inspect, and navigate.

1. ⭐ Gloss — A Command Glossary for Reusable Shell Commands

Gloss TUI home screen showing saved command sections, scan, aliases, settings, and README navigation.

Let’s start with the biased one. I built gloss because I kept re-searching the same shell commands and spreading aliases across history, notes, random Markdown files, and shell config files.

At some point, shell history stops being useful memory and becomes a messy archaeological site. Yes, the command is probably in there. Somewhere. Under six failed attempts, three typos, and one questionable sudo experiment.

gloss gives reusable commands a small local home. You can save a command with a description and tags, search it in a TUI, scan zsh or bash config files, and sync selected aliases into one managed shell config block with backups.

That last part matters. I do not want a tool spraying aliases all over .zshrc or .bashrc like it has been left unsupervised with a paint roller. gloss writes only inside a dedicated managed block:

# >>> gloss aliases >>>
alias gs="git status"
alias ll="ls -lah"
# <<< gloss aliases <<<

Enter fullscreen mode Exit fullscreen mode

It is not meant to replace every dotfiles setup. A plain text file piped into fzf is a perfectly valid solution. Something like this can go a long way:

git status # check current repo state git
tar -czf archive.tar.gz folder # create compressed archive tar gzip
curl -I https://example.com # inspect headers curl http

Enter fullscreen mode Exit fullscreen mode

Then you can pipe it into fzf, select a line, and build your own little workflow. Honestly, that is the final boss of many developer tools: “could be a text file and fzf.”

gloss is for the point where I wanted more structure without turning it into a huge knowledge base. Descriptions, tags, TUI browsing, scan/import from zsh and bash, and safer alias sync were enough.

Gloss commands list screen.

Best for:

  • people with lots of reusable shell commands
  • people who forget what their aliases do
  • people who want a local command glossary close to the terminal
  • people who like TUIs but do not want a huge app

Not for:

  • people happy with shell history alone
  • people who already have a clean text file + fzf setup
  • people who do not want any tool touching shell config files, even with preview/backups

Useful links:

2. fzf — Fuzzy Finding for Almost Everything

fzf running inside a terminal with filtered file results and a preview pane.

Once commands are saved somewhere, the next problem is finding things fast. That is where fzf earns its reputation.

fzf is a general-purpose fuzzy finder. That sounds boring until it becomes the thing quietly powering half your terminal. Files, command history, processes, Git branches, directories, snippets — if you can pipe a list into it, fzf can help you choose from that list without typing the exact thing.

The classic use case is command history search. Instead of pressing the up arrow like you are trying to win the saddest slot machine, you fuzzy-search your previous commands.

history | fzf

Enter fullscreen mode Exit fullscreen mode

Most shell integrations go further and bind this to Ctrl+R, which makes old command lookup feel less like memory work and more like search.

I also like fzf for file selection:

vim "$(find . -type f | fzf)"

Enter fullscreen mode Exit fullscreen mode

That example is intentionally basic. In practice, you might combine fzf with fd, ripgrep, bat, Git, or custom scripts. Some setups use previews, so you can move through search results and see file contents before selecting anything.

A simple preview example:

fzf --preview 'bat --style=numbers --color=always {}'

Enter fullscreen mode Exit fullscreen mode

That is where fzf starts feeling less like a small filter and more like a terminal interaction layer.

I use it for:

  • finding old commands
  • jumping to files
  • selecting Git branches
  • choosing scripts
  • narrowing down noisy output
  • building tiny one-off terminal menus

The nice thing is that fzf does not ask you to change your whole terminal life. It slips into existing commands. It is duct tape, but premium duct tape — the kind that fixes the workflow and somehow makes it look intentional.

3. ripgrep — Fast Text Search Without the Usual Pain

ripgrep output in a terminal showing highlighted search matches across project files.

After finding files, I usually need to search inside them. For that, ripgrep, usually called rg, is my default.

The simple pitch: it is like grep, but fast, practical, and less interested in punishing you for having a modern project folder.

rg "DATABASE_URL"

Enter fullscreen mode Exit fullscreen mode

That searches recursively, prints useful matches, and by default respects .gitignore. This is one of those defaults that sounds small but saves real irritation. Most of the time, I do not want search results from node_modules, build directories, generated files, vendor folders, or whatever digital compost heap lives in a project.

For source code, config files, notes, and scripts, rg is usually the first thing I reach for.

A few examples:

rg "alias " ~/.zshrc ~/.bashrc ~/.bash_aliases

Enter fullscreen mode Exit fullscreen mode

rg "TODO|FIXME" .

Enter fullscreen mode Exit fullscreen mode

rg --type go "func main"

Enter fullscreen mode Exit fullscreen mode

rg --hidden --glob '!node_modules' "API_KEY"

Enter fullscreen mode Exit fullscreen mode

The --type filtering is especially useful. Search only Go files, Python files, Markdown files, JSON files, and so on. It reduces noise without making you write a tiny shell spell every time.

How I use it with gloss is simple: when I find a command or pattern I keep searching for repeatedly, that is usually a sign it belongs in the glossary. rg helps me discover the thing; gloss helps me remember why I cared.

That separation is useful. Search tools are excellent at discovery. They are not always great at turning discoveries into reusable knowledge.

4. bat — A Less Miserable Way to Read Files

bat displaying a shell config file with line numbers, syntax highlighting, and Git gutter markers.

There is nothing wrong with cat. It does exactly what it says. It throws file contents into your terminal and then calmly walks away from the scene.

But for reading code, scripts, configs, Markdown, YAML, JSON, or anything where your eyes are expected to survive the experience, bat is much nicer.

bat is often described as a better cat: syntax highlighting, line numbers, Git integration, automatic paging for long files, and generally more readable output.

bat ~/.zshrc

Enter fullscreen mode Exit fullscreen mode

bat README.md

Enter fullscreen mode Exit fullscreen mode

bat package.json

Enter fullscreen mode Exit fullscreen mode

It is not a complicated tool, which is part of the appeal. You can use it directly, or you can pair it with fzf as a previewer:

fzf --preview 'bat --color=always --style=numbers {}'

Enter fullscreen mode Exit fullscreen mode

That combo is excellent. fzf lets you choose; bat lets you preview without opening each file. It is the difference between rummaging through a drawer with the lights off and having labels on the boxes.

I especially like bat for:

  • previewing shell scripts before running/editing them
  • reading config files
  • checking Markdown
  • inspecting JSON/YAML quickly
  • making fzf previews more useful

Some people alias cat to bat. I do not always do that, because I still like plain cat for scripts and pipes where predictable minimal output matters. But for human reading, bat wins almost every time.

5. eza — A Better ls for Daily Navigation

eza listing a project directory with colorized file types, Git status, and tree view.

The last tool is less dramatic, but it improves one of the most common terminal actions: looking around.

eza is a modern replacement for ls. It is the community-maintained successor to exa, and it gives you colorized output, icons if you want them, Git status, better long listings, and tree views.

A few common commands:

eza

Enter fullscreen mode Exit fullscreen mode

eza -la

Enter fullscreen mode Exit fullscreen mode

eza --tree --level=2

Enter fullscreen mode Exit fullscreen mode

eza -la --git

Enter fullscreen mode Exit fullscreen mode

The Git status view is useful in project folders. You can see what changed without immediately jumping into git status, and the tree output is handy when you need a quick mental map of a project.

I do not think eza changes your life. That would be an alarming amount of emotional pressure to put on a file listing tool. But it does make directory inspection clearer, and that matters because navigation is constant background noise in terminal work.

There is also lsd, which fills a similar role. Some people prefer its style. I lean toward eza, but both are worth trying. This is one of those choices where the “best” tool is the one whose output your brain reads fastest.

How These CLI Tools Fit Together

The real benefit is not in using each tool separately. It is in how they form a small workflow loop.

Here is a realistic version.

You start in a project folder and use eza to inspect the layout:

eza --tree --level=2

Enter fullscreen mode Exit fullscreen mode

You use ripgrep to search for a config value, function, command, or old script:

rg "deploy"

Enter fullscreen mode Exit fullscreen mode

You pipe files into fzf when the result list gets too long:

rg --files | fzf

Enter fullscreen mode Exit fullscreen mode

You preview selected files with bat:

fzf --preview 'bat --color=always --style=numbers {}'

Enter fullscreen mode Exit fullscreen mode

And this is where gloss fits into the loop. When a command keeps coming back — maybe a deployment command, Docker cleanup command, local server shortcut, curl header check, or some deeply specific rg/find combo — I save it with a description and tags:

gloss add

Enter fullscreen mode Exit fullscreen mode

Later, instead of searching history again or trying to remember which note file contains the command, I hit gloss list or open the TUI:

gloss

Enter fullscreen mode Exit fullscreen mode

Or I scan existing shell config files and import useful aliases/functions I already had lying around:

gloss scan

Enter fullscreen mode Exit fullscreen mode

That is the whole point. Do not collect CLI tools like decorative mugs. Build a loop where each tool removes one small annoyance.

For me, the loop looks like this:

  • eza helps me see where I am
  • rg helps me find what I need
  • fzf helps me choose from noisy output
  • bat helps me read before acting
  • gloss helps me keep those commands within reach

It is not fancy. It is just less irritating.

A Few Honorable Mentions

There are other CLI tools worth keeping nearby, depending on the work.

zoxide is a smarter cd that learns where you go and lets you jump around by partial names. It is one of those tools that feels weird for a day and then makes normal cd feel like walking to another city.

fd is a friendlier, faster alternative to find, with sensible defaults and clean output.

jq is essential if JSON appears in your life, willingly or otherwise.

httpie is easier to read than curl when testing APIs manually.

delta makes Git diffs easier to inspect.

tmux is still hard to beat when you need persistent terminal sessions, panes, and project workspaces.

tldr is perfect when man pages are too detailed and you only need the common examples.

pet and navi are especially relevant if you like command snippets and interactive cheatsheets. They overlap with parts of the problem gloss touches, though each tool approaches it differently.

Final Thoughts

You do not need every tool on this list. In fact, installing too many CLI tools at once is how a clean terminal turns into a garage where every shelf contains “useful stuff” nobody can identify.

Start with one annoying workflow.

If you constantly search old commands, try gloss or a plain text file with fzf. If file search is slow, try ripgrep. If opening files in the terminal hurts your eyes, try bat. If navigation feels muddy, try eza or zoxide.

The best CLI tools for productivity are not the ones with the longest feature lists. They are the ones that quietly remove friction from work you already do.


The terminal does not need to become your entire personality. It just needs to stop making simple things harder than they should be.

FAQ

  • What are the best CLI tools for productivity?
    For a practical starting set, I would pick gloss, fzf, ripgrep, bat, and eza. Together they help with command recall, fuzzy selection, text search, file preview, and directory navigation.

  • Do these tools work with both zsh and bash?
    Most of them work fine in both zsh and bash. Some shell integrations, shortcuts, or plugins may require shell-specific setup, but the core tools are generally cross-platform.

  • Is gloss better than a text file with fzf?
    Not always. A text file with fzf is a great minimal setup. gloss is useful when you want more structure: descriptions, tags, TUI browsing, scan/import from shell configs, and managed alias sync with backups.

  • Should I replace standard Unix tools like grep, cat, and ls?
    You do not have to replace them completely. I still think it is worth knowing the standard tools. But for daily local work, tools like ripgrep, bat, and eza often provide better defaults and clearer output.

  • Which tool should I install first?
    Start with the annoyance you feel most often. If you lose commands, try gloss or fzf. If you search code constantly, try ripgrep. If you read files in the terminal, try bat. If directory listings feel noisy, try eza.


What is one small CLI tool that changed your daily workflow more than expected?