How-to

Command Guy: stop retyping the same shell commands every day

Command Guy is a workspace tab inside Traceptor that holds your most-used shell commands as one-click tiles. 27 built-ins out of the box — git, curl, npm, network diagnostics — plus any custom command you save. Live streaming output, exit codes, pinned favorites.

The Traceptor team6 min read
Command Guy: stop retyping the same shell commands every day

Every developer has a small set of shell commands they run all day. git status. npm run dev. curl -I example.com. lsof -i :3000the third time something stomps on your port. You either remember them all, alias half of them in a dotfile, or retype them three times a day for the rest of your career. There is a third way, and it’s built into Traceptor.

What Command Guy actually is

Command Guy is a workspace tab inside the Mac app — icon apple.terminal.fill, title bar tagline “Tap any tile to run instantly. Built-in favorites plus your own.” It’s a two‑pane layout: a Metro-style live-tile sidebar on the left with your commands, and a detail pane on the right that streams the live output of whichever command you just tapped. Free tier — no Premium gate, no rule limits, nothing to upgrade.

Each tile shows its name, its category color, and an indicator that animates while the command is running. Hit it once, the command starts; hit it again to stop. The detail pane shows stdout line‑by‑line as it arrives, with the exit code shown once the process finishes. You can keep multiple commands running in parallel and flip between them by selecting different tiles.

Command Guy’s Metro-style sidebar with category-colored tiles for Git Status, npm Dev, Curl Headers, and DNS Lookup, with one tile actively running

27 built-in commands, ready to go

Open Command Guy for the first time and the sidebar is already full. The shipped catalog covers the daily-driver workflows every developer hits, grouped by category and color-coded so you can find them by muscle memory after a week.

  • Git (5)— Git Status, Git Pull, Git Log (oneline, last 15), Git Diff (stat), and a Git Empty Commit one‑liner for when you need to kick CI without a real change.
  • Network (8) — Network Ports (listeners via lsof), My IP, Network Info, DNS Servers, Route Table, DNS Lookup, Trace Route, Open Sockets.
  • Curl (5) — Curl GET, Curl Headers (the -I shortcut), Curl Verbose (top 60 lines), Curl JSON POST against httpbin.org, and Curl My IP (piped through python3 -m json.tool for pretty output).
  • npm (3)— Install, Build, Dev. The three commands every Node project lives and dies by.
  • System (4) — List Files (ls -la), Disk Space (df -h), System Load (a clean top snapshot), Who I Am (whoami plus id).
  • Shell (1)— Brew Update + Upgrade, the one you forget to run for a month.
  • Misc (1)— Ping Google, the universal “is my internet broken?” check.

Run in 3 steps

Open the Command Guy tab

Hit the + button in the workspace tab bar and pick Command Guy. The picker lists it under utilities with the tagline “Save and run shell commands from your workspace.” Only one Command Guy tab can be open at a time, so re-opening it just re-selects the existing tab.

Tap a tile

The sidebar groups tiles into three sections: Pinned, Built-in, and My Commands. Hit any tile to run that command. While it runs, the tile shows a soft shimmer; when it finishes, the exit code lands next to the name.

Watch output stream in the detail pane

Stdout streams in real time, line by line. Long-running commands like npm run devor a tail-style process keep flushing output as it arrives, throttled to the main thread so the UI doesn’t choke on a chatty server. Exit code shows once the process ends; the Stop button kills the process cleanly if you need to bail.

Working directory matters

Every command carries a working directory field, defaulted to ~(your home folder). Edit it on a custom command to point at the repo or project you actually want the command to run in — ~/work/api-server, ~/dotfiles, whatever. For the built-ins, ~ is the right default; for npm run dev on your current project, save a copy with the project path baked in.

Add your own — custom commands

Hit the + in the sidebar header or the toolbar to add a new command. Three fields:

  • Name— the label that shows on the tile. Keep it short; you’ll be reading it at a glance.
  • Command— the actual shell string. Quoted arguments, pipes, redirection, environment variables — all work the way they would in a regular shell.
  • Working directory~ or an absolute path. The command runs as if you had cd'd there first.

Custom commands persist via @AppStorageand survive across Traceptor restarts. The same goes for pinned commands — pin the ones you reach for daily, and they move to the Pinned section at the top of the sidebar as full-width tiles so they’re always one tap away.

ruleName:        Start API server
Command:     npm run dev
Working dir: ~/work/api-server

Name:        Sync dotfiles
Command:     cd ~/dotfiles && git pull && stow .
Working dir: ~

Name:        Tail prod logs (read-only)
Command:     ssh ops@bastion -- "tail -f /var/log/api/access.log"
Working dir: ~

Six favorites from the built-in catalog

Git Empty Commit

The clever one. git commit --allow-empty -m "empty commit" exists for a single purpose: re-triggering a CI pipeline without an actual code change. Faster than re-running the build manually, cleaner than pushing a typo and amending.

Network Ports

lsof -i -n -P | grep LISTEN | head -20. The answer to “what’s already using port 3000?” in under a second. Pair it with the next tile in the chain — right-click the offending process in the output and kill it from your normal terminal.

Curl Headers

curl -I https://example.com. The minimum-viable HTTP check: is the server up, what status is it returning, what cache headers, which CDN. Two seconds, no opening a browser, no devtools.

DNS Lookup

nslookup google.com. The first command to run when something on the network “just feels off.” If DNS is broken, every higher-level diagnostic is meaningless — this rules it out in one tap.

Trace Route

traceroute -m 15 google.com. When a request is mysteriously slow, this tells you whether the latency is local (first hop), at your ISP, or somewhere out in the wild. The 15-hop cap keeps it from running forever.

Disk Space

df -h. The build that failed for no reason 95% of the time: you ran out of disk. One tap, you see the truth, you go delete an old Xcode DerivedData folder.

Why it’s in a debugging proxy

Because the moments you reach for these commands tend to cluster around the same moments you reach for a proxy. You’re debugging a flaky request — curl -Ithe host. You wonder if your dev server crashed — check the port. You see a weird CDN header — run a DNS lookup on the origin. Putting these tools one tab away from your captured traffic keeps the entire debugging loop inside one window, instead of bouncing to a terminal and losing your place.

That said, Command Guy doesn’t care that it lives inside a proxy debugger. The built-ins are useful in their own right; npm run devworks the same whether you have Traceptor open or not. It’s a personal command launcher first, a debugging companion second.

Small touches that matter

  • Category colors— orange for git, cyan for network, purple for curl, green for npm, indigo for system, yellow for shell, blue for custom. After a week you find tiles by color before you read the label.
  • Live shimmer on running tiles— subtle animation on the tile background while the process is alive, so you can see at a glance what’s still going.
  • Throttled output — an internal OutputThrottle coalesces high-frequency stdout into batched main-thread flushes, so a chatty npm run devcan’t melt the UI.
  • Clean shutdown— close the tab, every running process gets a clean stop. No zombies hiding behind your dock icon.

Keep reading