1. act — Run GitHub Actions locally
$ brew install act
If you've ever pushed a commit just to test whether your CI pipeline works, act is for you.
It runs your GitHub Actions workflows locally using Docker. You get the exact same environment as GitHub's runners, but on your machine, in seconds, without burning through your Actions minutes or cluttering your commit history with "fix CI" messages.
The setup is straightforward: install act, make sure Docker is running, and run act in any repo that has a .github/workflows directory. It reads your workflow files and executes them locally.
I've been using it for three months now. The time it saves is real. A workflow that would take 4 minutes to test on GitHub takes 20 seconds locally.
The only gotcha: some GitHub-specific features (like certain secrets or GitHub Packages) need extra configuration. For standard build/test/lint pipelines it just works.
View on CLIHunt →2. atuin — Shell history that doesn't suck
$ brew install atuin
Your shell history is a mess. You know this.
atuin replaces your shell history with a SQLite database and gives you a proper search interface. Instead of Ctrl+R and hoping for the best, you get a full-screen fuzzy search that filters by directory, exit code, time, and hostname.
The killer feature for me is cross-device sync. I work across three machines. Before atuin, a command I ran on my work laptop was invisible on my personal machine. Now my history is everywhere, encrypted, synced automatically.
You can self-host the sync server or use their hosted option. Either way the local experience is the same.
One week with atuin and you won't want to go back.
View on CLIHunt →3. mise — Finally a version manager that doesn't make me angry
$ brew install mise
If you've used nvm, rbenv, pyenv, or asdf, you know the ritual: install the version manager, add it to your shell config, restart your terminal, install the version, set the local version, wonder why it's still using the system version.
mise does all of this but 35x faster (their benchmark, not mine — though it feels accurate) and with a single unified interface for Node, Python, Ruby, Go, and 100+ other runtimes.
The .tool-versions file is compatible with asdf, so if you're already using asdf you can switch with zero configuration changes. It just becomes faster.
I migrated from asdf two months ago. The only thing I miss is nothing.
View on CLIHunt →That's it for this week. If you have a tool you think belongs here, submit it to CLIHunt — we review everything within 48 hours.