software I recommend — nothing here is required by anything else on this site · updated 2026-10-06
| fd | find with the arguments the other way round — pattern first, path optional —
and it reads .gitignore without being asked. The same trade rg
makes against grep, made on the other half of the job. |
| bat | cat with syntax highlighting and line numbers, which is what turns a
file.ts:42 from an agent into something you check in one command. Also one of the
three renderers herdr-file-viewer on Plugins picks up on
sight. |
| delta git-delta | A pager for git diff, and the one tool on this page that installing does not
switch on. It has to be wired in —
git config --global core.pager delta and
git config --global interactive.diffFilter "delta --color-only" — or the binary
sits on PATH while every diff still comes out of the default pager. The exception
is herdr-file-viewer, which looks for it by name and needs no git config to use
it. |
| hunk | The same diff as a review UI rather than a scroll: a sidebar of the changed files, split or
stacked panes, --watch to reload as the tree moves under you. Nothing to wire —
hunk diff and hunk show stand on their own. Here for the changeset you
did not write: hunk skill path prints a skill file it installs nowhere, and an agent
pointed at it drives the open session over a local daemon, leaving its notes on the line they
are about instead of in chat scrollback. |
| icdiff | diff side by side and in colour, for the comparison git diff does
not cover: two files that were never in the same repository. |
| dasel | jq for the formats jq will not read — YAML, TOML, XML, CSV — under
one query syntax rather than four tools. Named here because agent config has drifted to TOML
(~/.codex/config.toml is where Codex keeps its plugins), and node cannot parse
that at all: this site's own generator shells out to a CLI to read it. |
| glow | Renders markdown in the terminal. Several skills' entire deliverable is a .md
written into the repo — research, learn-tw — and cat
on one of those hands you the source rather than the document. It is also the markdown renderer
herdr-file-viewer on Plugins looks for. |
| tspin tailspin | Colours a log by what its fields are — timestamps, levels, paths, numbers — with no
config and no per-format rules to write. tspin file.log, or pipe into it. |
| aria2c aria2 | curl -O for a download big enough to care about: it opens several connections at
once, and it resumes instead of starting over. Here rather than in a general list of
downloaders because of one flag — yt-dlp --downloader aria2c hands it every
fragment of a video, and yt-dlp is already the route
the rules
take for anything on YouTube. |
| fzf | Fuzzy-picks from any list on stdin and prints what you chose, which makes it a filter and not
an application: git branch | fzf is the whole idea. Its shell bindings put the
same picker on Ctrl-R. |
| yazi | A file manager in the terminal, with previews. The case for it over ls is a tree
you do not know yet — an unfamiliar repo, or a skill's references/ directory
when you are deciding whether it is worth reading. |
| jj jujutsu | A different version control model driving the same git repository: no staging area, every change amendable, conflicts recorded in a commit instead of blocking one. Worth a look next to the worktree rules the other pages assume, which exist largely to keep parallel work from colliding inside git's model. |
| git-filter-repo | Rewrites history across every ref — the supported answer to a key committed six months ago.
Not an alternative to git filter-branch so much as its replacement: git's own
documentation deprecates that one and points here. |
| httpie | curl for the case where you are reading the response rather than piping it —
JSON parsed and coloured by default, and a request syntax that is
http POST url key=value instead of four flags. |
| trivy | Scans a repository, an image or a filesystem for known vulnerabilities, misconfiguration and
committed secrets. The local counterpart to two skills on
Skills — code-security-audit and
env-secret-scanner — which read the code rather than check it against a
database. |
| mosh | ssh that survives the link dropping and the lid closing, because the session lives on the
server rather than in the connection. The same problem herdr solves one layer
up, for the layer underneath it. |
| timeout coreutils | macOS ships no timeout whatsoever, so an agent that writes
timeout 30 pnpm test — a reasonable thing to write — gets
command not found on a fresh Mac. That is the
prerequisites page's argument in its loud form, which is why this row is
the mildest thing here. Homebrew links the handful macOS genuinely lacks under their real
names (timeout, nproc, shuf, tac) and
everything else under a g prefix, so gdate and gsort
take GNU flags while BSD date and sort stay exactly as they were.
Nothing is shadowed unless you ask: that needs
$(brew --prefix coreutils)/libexec/gnubin on PATH, and it is worth
knowing that a script which then works for you fails for everyone without that line. |
| memex nicosuave/tap/memex | Indexes the session logs Claude Code, Codex, Cursor and Copilot are already writing, and
searches them: memex search, or memex tui to read one back. The
question it answers is the one scrollback cannot — which session was it where this was
decided, and what was the reasoning — and on a machine running as many agents as the rest of
this site describes, that history is the only record of half the decisions in it.
memex setup then installs a memex-search skill into whichever agents
you pick, which makes this the one row on the page that installs something for the agent
rather than for you. The index is built by memex index and is empty until it
runs. |
| mitmproxy | Shows every request a program makes, and lets you stop one, edit it, replay it. Point an
agent CLI through it and "what is this thing sending" stops being a question of trust and
becomes something you read. A cask rather than a formula, and HTTPS needs its certificate
trusted — mitm.it, reachable only while the proxy is running — or you get the
connections with none of their contents. This reads what a program is sending; deciding
whether it may send it at all is LuLu, on prerequisites. |
| tailscale tailscale-app | Puts your machines on one private network — WireGuard underneath, but the part that matters is
that there is nothing to configure: each device gets a stable 100.x address and a
name (<host>.<tailnet>.ts.net), and reaches the others through NAT,
café wifi and a phone tether alike. The case for it here is the second machine: work runs on
the desk, and the laptop that wants to read it is elsewhere. tailscale serve then
hands a local port to the rest of the tailnet over HTTPS, which is how what an agent just built
on localhost:3000 opens on a phone with no deploy, no tunnel service and no port
forwarded on the router. Two things to be deliberate about: every device is joined as
you, so adding one grants it that reach until you remove it from the admin console, and
tailscale funnel is the one subcommand that publishes to the open internet rather
than the tailnet — a different decision wearing an adjacent name. The daemon has to be running
and signed in before any of it works; tailscale status is the check. Free
on the Personal plan, which is the one a machine or three of your own sits inside; a team is a
paid plan. |
| cliclick | Moves the pointer and presses keys as real macOS events, which is the layer underneath the
browser automation on Skills: ego-browser and
agent-browser drive the page and stop at the edge of the window, and a native
file picker or permission sheet is on the other side of that edge. Needs Accessibility
permission for whichever terminal calls it — granted once, in System Settings, to the
terminal and not to cliclick. |
| ZoomIt microsoft/sysinternalstap/zoomit | Zooms into the running screen and lets you draw on it — the Sysinternals utility, rebuilt for macOS by Microsoft rather than ported. Ctrl+4 magnifies live, Ctrl+2 annotates at 1x, and neither is something the built-in screenshot tool does: that one freezes a rectangle and hands it to Preview. The row is here for one subcommand more than the demo work — Ctrl+Option+6 OCRs a screen region straight to the clipboard, which turns "paste a screenshot of this error into the agent" into pasting the text, and text is what the agent was going to have to reconstruct anyway. A cask from a tap of its own, macOS 14 or later, and nothing captures until Screen Recording permission is granted. |
| espanso | Types the rest for you: a short trigger becomes a long block, anywhere text goes in. A shell
alias does the same trick and stops at the edge of the terminal — this one reaches the browser
textarea you paste prompts into, the issue box, the commit message. That is the case for it
here: the standing preamble you retype at every fresh session becomes a file rather than
something you remember, under
~/Library/Application Support/espanso/match/ as YAML. It is a service, so a fresh
install expands nothing until espanso service register and
espanso start — espanso status is how you find out which side of that
you are on. |
| deeplx owo-network/brew/deeplx | Serves a DeepL-shaped translation endpoint on localhost:1188, which turns a
translation step into an HTTP call to a process on this machine rather than a key and a
per-character bill. Here for translation work you wire up yourself — nothing on
Skills calls it today. It is a daemon, not a one-shot command:
it has to be running before anything can call it. |
| hf | The Hugging Face Hub as a command — hf download for weights, and
hf upload the other way. The subcommand that earns it a row here is
hf skills: hf skills list reads a marketplace of skills for AI
assistants and hf skills add installs one, which is this site's whole subject
arriving from somewhere else entirely. Worth knowing before you conclude that
Skills and its install.sh are the only shape this
problem has. |
| Upscayl upscayl | Enlarges an image on this machine instead of asking for it to be generated again bigger — Real-ESRGAN through Vulkan, with an open backend, so it is your GPU and no key. The row above this page's image work rather than beside it: what comes back from an image model is whatever size that model emits, and the second pass costs a second generation. Two things to keep straight — it wants a Vulkan-capable GPU, and it does not recover detail, it invents plausible detail. Fine for how something looks, wrong for reading anything back off a screenshot as evidence. A window, not a command. |
| ImageOptim imageoptim | Drag images in, get the same images back smaller — lossless recompression, and every piece of metadata stripped on the way through. The second half is the one to care about here: a screenshot carries where it was taken and what took it, and screenshots are what you attach to issues and paste into prompts. Repository weight is the lesser argument, though it is real — an image committed once is downloaded by every clone forever. |
| tldraw offline tldraw | An infinite canvas that opens with no account and no network, and saves to a file on disk — which makes a diagram something a repository can hold rather than something living in a workspace someone else administers. It has a row on Bundles already, and this is deliberately not that row: there it is listed for what its Install Agent Skills menu item writes into your agent directories, and here for the canvas by itself. You can install it, never touch that menu item, and still have got the better end of the deal — sketching the shape of a thing before asking an agent to build it is the step that most often turns out to be the whole design. |
| jupyter lab jupyterlab | A notebook is the one thing an agent writes here that nothing else on this machine will run:
an editor shows you the JSON, and python on its own will not execute a cell. This
is what does. The case for it is narrower than "use notebooks" — it is that checking numeric
work by re-running the cell that produced it is a different and better check than reading the
diff that produced it. |
| IP Scanner the Mac App StorePaid | Lists every device answering on the network you are on, with names and icons you can set so the
list stays readable between scans, plus ping, port scan and Wake-on-LAN. macOS gives you
arp -a and a table of numbers. The use that earns the row is the one that arrives
with the second machine — a laptop, a mini, a phone running something you need to reach — and
the question of which address it took today, which the tailscale row above only
answers for the machines you put on a tailnet. Scanning is local, with no account behind it.
Free up to fifteen devices a scan; past that it is a one-time purchase, and it is on the
App Store rather than Homebrew. |
| NepTunes the Mac App Store | Scrobbles what Music or Spotify is playing to Last.fm and puts the track in the menu bar. This one has nothing to do with agents, and it is here for the same reason as everything else on the page: it is installed, it does one thing nothing else on the machine does, and a list that only admitted work software would be a less honest description of this machine. Free, on the App Store. |
| Unclutter unclutterPaid | Pull down from the top edge of the screen and three drawers come with it: clipboard history, loose files, and notes. The first is the one macOS still has no answer to — a copy is gone the moment the next copy happens, and the thing you lose that way is usually a token, a URL or an error you were about to paste somewhere. A one-time purchase, with a trial first. |
| RunCat Neo the Mac App Store | A cat runs in the menu bar, faster the harder the CPU is working. It reads as a toy and earns its row on one thing: an agent working in a pane you are not looking at is indistinguishable from an agent that has stopped, and this answers that without opening Activity Monitor or switching to the pane at all. From the author of RunCat, and the one row on this page with no Homebrew line — it is on the App Store only. |
| TG Pro tg-proPaid | Temperatures for every sensor in the machine, and the fans, which macOS exposes no control over
at all. The row above answers whether an agent is still working; this one answers whether the
machine is still working at full speed, and those are different questions — a long run does not
fail when it gets hot, it silently slows down, and Activity Monitor reports the load without ever
mentioning the reason. Reading the sensors needs nothing; setting a fan curve installs a
privileged helper — com.tunabellysoftware.TGFanHelper, under
/Library/PrivilegedHelperTools — behind an admin prompt the first time. Half the
application does not apply to a MacBook Air, which has no fans to control. A one-time
licence, with a trial before it. |
| Thaw thaw | Hides menu bar items behind one icon, which stops being cosmetic once a machine is set up the way these pages describe: every agent monitor is another item, and on a notched MacBook the bar runs out of room before the items do. Named rather than Ice, which is the better-known program and the one this is a fork of — the fork exists because the original appears to have stopped, and it is the one keeping up with macOS releases. It wants macOS 26 or later, so on anything older Ice is still the answer. |
| Rectangle rectangle | Windows to halves, quarters and thirds from the keyboard, or by throwing them at an edge. macOS 15 added tiling of its own, which makes this the row on the page whose case has genuinely weakened — take it if you want a shortcut per position rather than a drag, and skip it if the built-in tiling already covers what you do. The setup that makes it pay is the one these pages describe anyway: an agent in one pane, the app it is editing in another, and the diff in a third. Free and open source; the Rectangle Pro sold beside it is a separate application with a licence of its own, not this one asking to be upgraded. |
| KeepingYouAwake keepingyouawake | Stops the machine sleeping, from a menu bar icon, for a duration you pick. macOS already ships
caffeinate and it costs nothing, so the honest case for this is not capability but
the ending: a terminal you left running caffeinate -d in is a terminal you will
close and forget, and a long agent run that dies because the lid closed is a run you have to
start again. Click on, click off, and the icon is the reminder that it is still on. |
| Keka keka | Archive Utility opens .zip and stops. This opens .7z,
.rar, .tar.zst and the rest of what arrives from a Windows machine or
a release page, and it writes encrypted archives with a password rather than an unprotected zip
beside a message saying what the password is. A double-click tool, which is the point — the
command-line equivalents are already on this machine and are not what you reach for at the
moment a download finishes. Free from keka.io, which is what the cask installs; the App Store
copy is the same program with a price on it, sold as a way to fund the free one. |
| Pika pika | Picks the colour under the pointer anywhere on screen and copies it in the format you are about to paste — Hex, RGB, HSB, HSL, LAB or OpenGL, on ⌘1 through ⌘6. Digital Color Meter ships with macOS and reads one value in one format; this holds a foreground and a background at once, which is the shape the question actually has when the thing you are matching is a screenshot of a design and not a swatch. |
| IINA iina | mpv wearing a macOS application, which means it plays the file QuickTime refuses —
.mkv, an unusual codec, a subtitle track in a separate file — instead of sending you
to convert it first. Picture-in-picture, playback speed, and a window that behaves like a Mac
window. The relevance to the rest of the page is thin and the row is here anyway: half of what
ffmpeg gets pointed at, you first want to watch. |
| Adapter adapter | ffmpeg with a window in front of it — its own site says so: an FFmpeg back end,
VLC-rendered previews, batches, and an output size estimate before you commit to the encode.
ffmpeg itself is on the prerequisites page because skills shell
out to it, so this row is not for them. It is for you, at the moment when the conversion is a
one-off, the flags are not in your head, and reading the manual costs more than the job is
worth. |
| Cap cap | Screen recording that ends in something you can send. ⌘⇧5 already records and hands you a file; this records with a webcam corner and an editor for zooms, trims and captions, and it is open source with the storage left as your decision — its own cloud, your S3 bucket, entirely local, or self-hosted. Read the two modes carefully before the first recording, because they differ on where the pixels go: Instant Mode uploads while you record so the link exists the moment you stop, Studio Mode records locally and exports when you say. A screen with an agent session on it is a screen with tokens, paths and client names on it, so which mode is selected is a real decision, not a preference. The application and self-hosting are free and open source; the hosted side, links and workspaces included, is a paid plan. |
| OrbStack orbstack | Docker Desktop's job, done by something that starts in seconds and does not sit on the fans.
The docker command does not change — prerequisites asks for it
because one skill self-hosts a container, and whichever runtime answers, that line is the same.
Worth knowing which one is answering on your machine: readlink -f $(which docker)
says, and on this one it resolves inside OrbStack rather than Docker.app. Free for
personal, non-commercial use; commercial use is a paid plan. |
| PopClip popclipPaid | Select text anywhere and a small bar appears over it — copy, search, open a link, and whatever else you add, because the actions are extensions and there are hundreds of them. The right-click menu is macOS's answer to the same question and this one is shorter by a click and reachable with the mouse already where the text is. The relevance to these pages is unglamorous and daily: the loop of reading an error, taking the part that matters and putting it in front of an agent is one that runs dozens of times an hour. A licence, with a free trial before it. |
| Handy handy | Hold a key, talk, release, and the words land in whatever field the cursor is in. macOS has had dictation for years, so what this changes is where the audio goes: Whisper runs on this machine and nothing leaves it, which is the difference between dictating a prompt about your own code and dictating it to a service. Free and open source. The case for talking rather than typing is stronger for prompts than for prose — a paragraph of context you would not have bothered to type is exactly the paragraph that makes the difference to the answer. |
| Obsidian obsidian | Notes as a folder of Markdown files that you already know how to read, which is the whole reason it is on this page rather than any other note-taking application: an agent can open the vault with the tools it already has, and no export, API or integration stands between the two. Notes is the one that ships and keeps its notes in a database. Free, including for work — the optional subscriptions are Sync and Publish, and a vault that lives in a repository or a synced folder needs neither. |
| 1Password 1passwordSubscription | macOS ships Passwords now, so the row is not about storing passwords. It is about
op, the CLI that comes with this one:
op run --env-file=.env -- pnpm dev injects secrets into a process from the vault
and leaves nothing on disk, which is the difference between an agent that can read your keys out
of a .env and one that cannot. A subscription, and the CLI is part of it
rather than a separate purchase. |
| Phoenix Slides phoenix-slides | Points at a folder of images and moves through them at the speed of the arrow key — thumbnails first, full screen next, no import step and no library. Quick Look shows one file and Preview starts thinking somewhere around the second hundred, which is the size a folder of screenshots or generated images reaches without anyone deciding it should. Free. |
| BetterDisplay betterdisplayPaid | Resolution, scaling and brightness on external displays, at a granularity the Displays pane does not offer — including HiDPI on a monitor macOS has decided does not deserve it, which is what makes screenshots come out at a size you chose rather than a size you got. The free version covers the basics; flexible HiDPI scaling — the part this row is recommending it for — is in Pro, a one-time purchase. |
| DaisyDisk daisydiskPaid | The Storage pane in System Settings answers the question in categories, and the largest category
it knows is called Other. This answers it in paths: a ring per directory, click to descend, drag
what you find to a tray and delete it in one pass. The case for it is specific to a machine set up
like this one — node_modules per project, container images, model weights, a
~/Library/Caches nobody decided to grow — none of which any single act created, which
is exactly why none of them is where you would look. Scanning system locations and other users'
files needs more than it starts with: Full Disk Access, and a rescan as administrator.
A one-time licence covering several of your own Macs, with a trial first. |
| Itsycal itsycal | The menu bar clock tells you the time and, if you click it, the time. This puts a month under it and the day's events beside that, reading the calendars macOS already holds rather than an account of its own — so it shows nothing at all until you grant Calendar access on first launch, which reads as broken and is a permission. It can take the system clock's place entirely, date format included. Free and open source. |
| Fluor fluor | The fn keys are one global setting in Keyboard settings, and the right answer to it changes per application: F2 means something in an editor or a terminal-based tool and means brightness everywhere else. This makes that setting a per-application rule and flips it as you switch. Needs Accessibility permission — it has to see which application is in front. MIT, and finished rather than maintained: no release since 2022, no commit since 2021. It still does what it does, and it is not going to do anything else. |
Every row is on the machine this site is generated from — a shortlist out of what is actually installed, not one assembled for the page. What is left out is left out on purpose: that machine also carries firmware, audio and Windows toolchains that have nothing to do with any of this, and listing those would make it an inventory instead of a recommendation.