List every command-line tool you installed with Homebrew, npm and Cargo
By Flavio
Print the tools you installed with Homebrew, npm and Cargo, then keep one catalog of them on your Mac with CLI Tools Cabinet.
You installed a command-line tool for one job, and now you can’t remember its name. Homebrew has a list, npm has a list, and Cargo has a list. Each one ignores the other two, and none of them know about a script you dropped in ~/bin six months ago.
You can print the three lists yourself. I’ll put those commands first. Then CLI Tools Cabinet keeps one catalog of the packages you explicitly installed with Homebrew, npm and Cargo, plus the commands sitting on your PATH.
A practical guide to Homebrew already covers how to install, update and remove packages. This tutorial doesn’t repeat that. It only answers what is already on the machine. The short list of tools I actually open every day is in The CLI tools I use every day. The catalog below is the long list I lose track of.
What you need
CLI Tools Cabinet runs on macOS 14 or later, on Apple silicon and Intel. After purchasing it, connect GitHub in Polar, accept the private repository invitation, and download the app from Releases. Unzip it and drag CLI Tools Cabinet to your Applications folder. It’s signed with my Apple Developer ID and notarized by Apple. Later versions come from that same private Releases page. Replace the installed app with the new copy.
The clitools command is not in the zip. Clone the private repository and, from its root, run:
./Scripts/install-cli.sh
You need Xcode 26 or a Swift 6.2 toolchain for that script. It builds clitools and links it into ~/.local/bin. If the shell can’t find the command, add that directory to your PATH.
Homebrew, npm and Cargo only need to be on the machine if you want their packages in the catalog.
Print the three lists yourself
Homebrew’s formula list is one name per line:
brew list --formula
That prints every formula Homebrew has installed, including formulae it pulled in as dependencies of something else. brew list --cask is the apps. Both commands, and the rest of install and upgrade, are in the Homebrew guide.
For npm packages you installed globally:
npm list -g --depth=0
--depth=0 keeps the list to those top-level packages, instead of every dependency under them. To check one package by name, use Find the installed version of an npm package.
Cargo tracks the binaries you installed with cargo install:
cargo install --list
You should see the packages Cargo has installed and their versions. The cargo install manual documents --list.
You now have three formats, and still no view of ~/bin or ~/.local/bin.
Scan them into one catalog
Open CLI Tools Cabinet, or run:
clitools scan
The scan finds packages you explicitly installed with Homebrew, npm and Cargo. It also looks in ~/bin, ~/.local/bin, and every folder your shell adds to PATH, such as ~/.bun/bin and ~/.deno/bin.
You should get a summary of what it found. You don’t need the same tools or counts as anyone else.
Commands that belong to one package stay in one entry. An npm package that ships five executables shows up once, not five times. Searching for psql can find the PostgreSQL package for that reason.
Each row has the source, the path and when you installed it. From the sidebar you can filter to what you installed today, in the last 7 days, or this month.
Read one manager back out
The catalog is one file, shared by the app and the CLI:
~/Library/Application Support/CliTools/catalog.json
clitools catalog-path prints that location. Ask for the Homebrew slice, or for the whole catalog as JSON:
clitools list --source homebrew
clitools list --json
--source homebrew is the source filter the CLI documents. npm and Cargo show up as the source on each row in the app, and in the JSON from clitools list --json.
Search when you remember the job and not the name:
clitools search markdown
That matches names, commands and descriptions.
Open one tool and keep the list usable
Select a tool and the detail pane shows its version and its help output. A Homebrew package also shows the description and the homepage. If the tool has a tldr page, the app downloads it. It also pulls the examples out of the tool’s own --help. Every example has a copy button.
A scan only discovers tools. Inspection is the step that runs a tool’s help and version commands. Do that for a tool you trust, not for every binary on the machine.
clitools show gh
clitools inspect gh
clitools examples gh
gh here is just a tool you might already have. Use the name you found.
Star the ones you use often. Archive hides a tool from the ordinary list. Archiving does not uninstall a package or remove its executable. You can restore it later.
clitools list --favorites
clitools list --unused
--unused means the tool does not appear in the shell history the app can read, so treat it as a clue when you’re cleaning up. clitools list --sort usage orders the catalog from that same history.
Under the details, Your History groups the commands from zsh, bash and fish that ran that tool, with how many times you ran each one and when you last ran it. The app reads those history files and keeps the result in memory. It does not write your history into catalog.json.
If a coding agent needs to pick a command from this catalog and check its flags, that’s a different job. I wrote it up in Help your coding agent find the CLI tools you already installed.
If something looks wrong
If the shell can’t find clitools, look in ~/.local/bin and check your PATH. The installer links the command there, and a new terminal picks up a PATH change that an old one still hasn’t.
If a tool you installed this morning is missing, run clitools scan again. If it is still missing, check that your login shell can find the command. The scan uses what that shell can see.
If a row has no description, inspect that tool. The scan doesn’t run --help on everything it finds.
If --unused marks a tool you use every day, the history line may not be in zsh, bash or fish, or it may not be a line the app groups under that tool. --unused only describes the history it read.
Back up catalog.json if you care about favorites, archived rows and inspected details. The file doesn’t contain the shell transcripts themselves. clitools --help prints the rest of the command list.
Get CLI Tools Cabinet
Catalog tools from Homebrew, npm, Cargo, and your PATH, with examples, shell history, and a JSON CLI for coding agents.
See CLI Tools Cabinet → · $20 including tax, with full source code.
Want me to talk about your product? You can sponsor this site.