4 CLI Tools Every Developer Needs (That You've Never Heard Of)

Published: (March 19, 2026 at 08:51 PM EDT)
6 min read
Source: Dev.to

Source: Dev.to

Every developer has their toolkit—VS Code, Git, maybe a fancy terminal.
But the best productivity gains come from tiny CLI tools that eliminate those 30‑second annoyances you face 20 times a day.

That’s 10 minutes daily≈ 60 hours a year lost to friction.

I built four small, open‑source, npx‑ready tools you can try right now without installing anything.

# Try any of these instantly
npx @mj-muin/portguard
npx @mj-muin/oops-cli
npx @mj-muin/roast src/utils.js
npx @mj-muin/git-why src/auth.js

1. 🛡️ portguard – Kill Port Zombies in One Command

The problem

Error: listen EADDRINUSE: address already in use :::3000

You run lsof -i :3000, squint at the output, find the PID, then kill -9 it. Every. Single. Time.

The fix

npx @mj-muin/portguard

That’s it—see what’s running on your ports and kill it with a single command.

# List everything on common dev ports
portguard list

# Nuke whatever's on port 3000
portguard kill 3000

Real‑world usage

Add it to your package.json and never think about port conflicts again:

{
  "scripts": {
    "predev": "npx @mj-muin/portguard kill 3000 --silent",
    "dev": "next dev"
  }
}

Why this one’s first

No AI, no API keys, no config—zero friction for a problem every web developer hits daily.

📦 @mj-muin/portguardGitHub


2. 🔥 oops – Pipe Error Messages Straight to AI

The problem

You get a stack trace, copy it, open ChatGPT, paste it, wait, read the response, switch back to your terminal… six steps for every error, often missing file paths.

The fix

npm i -g @mj-muin/oops-cli

# Pipe any error directly to AI
node app.js 2>&1 | oops
python train.py 2>&1 | oops
cargo build 2>&1 | oops

oops captures the full stderr output—stack traces, file paths, line numbers—and sends it to Claude for instant analysis. The AI gets complete context, not a hurried copy‑paste.

What it looks like

$ node server.js 2>&1 | oops

🔍 Analyzing error...

 TypeError: Cannot read properties of undefined (reading 'id')
   at /app/src/handlers/user.js:42

💡 The `user` object is undefined because the middleware
   that sets `req.user` isn't running before this route.

🔧 Fix: Add your auth middleware before the route handler:
   app.get('/profile', authMiddleware, profileHandler)

No tab‑switching, no copy‑paste. The solution appears right where you’re working.

📦 @mj-muin/oops-cli — requires ANTHROPIC_API_KEY


3. 🔥 roast – AI Code Reviews at 2 am

The problem

You need a code review but:

  • It’s 2 am and the team is asleep
  • You’re solo with no reviewers
  • You know a function is ugly but can’t articulate why

The fix

npx @mj-muin/roast src/utils.js

roast reads the file and delivers a brutally honest review—bugs, code smells, anti‑patterns—delivered with personality.

Sample output

$ npx @mj-muin/roast src/helpers.js

🔥 ROAST REPORT: src/helpers.js
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🤦 Line 12‑89: This function is 77 lines long.
   That's not a function, that's a short story.
 Extract the validation logic into its own function.

🐛 Line 34: You're catching errors and doing nothing.
   `catch(e) {}` is not error handling, it's error hiding.
 At minimum, log it. Better: handle it or let it propagate.

💀 Line 56: `== null` vs `=== null`
   I see you like to live dangerously.
 Use strict equality. Always.

📊 Overall: 4/10 Functional but fragile.
   Fix the silent catch first. That WILL bite you in production.

It’s educational, not just critical—perfect for learning why something is bad, not just that it is.

📦 @mj-muin/roast — requires ANTHROPIC_API_KEY


4. 🏺 git-why – Understand Why Code Exists

The problem

git blame tells you who wrote a line and when, but not why.
You see a weird workaround from two years ago—was it a bug fix, a performance hack, a client request, or a 3 am panic commit? You have no clue and risk breaking something when you refactor.

The fix

npx @mj-muin/git-why src/auth.js

git-why reads the git history—commits, diffs, messages—and uses AI to explain the intent behind code changes. It’s like having the original author sit next to you and walk through their thinking.

When you need this

  • Onboarding – New team member? Point them at git-why instead of a 1‑hour walkthrough.
  • Refactoring – Know what you’re about to break before you break it.
  • Code archaeology – Finally understand that mysterious // DO NOT REMOVE comment.
  • Due diligence – Reviewing an inherited codebase? Get the “why” behind every decision.

📦 @mj-muin/git-whyGitHub


TL;DR

These four tiny CLI tools shave minutes off every day, add up to hours per year, and require virtually no setup. Give them a spin—your future self will thank you.

## Company Tools Overview

git-why — requires ANTHROPIC_API_KEY


The Philosophy Behind These Tools

PrincipleWhy
npx‑readyTry before you install. Zero commitment.
Single purposeEach tool does one thing well. Unix philosophy.
Terminal‑nativeNo web UI, no Electron app. Your terminal is your IDE.
Open sourceMIT licensed. Read the code, fork it, improve it.
  • oops, roast, git-why use Claude under the hood and need an ANTHROPIC_API_KEY.
  • portguard needs absolutely nothing.

Quick Start

# 1. The zero‑config one (no API key needed)
npx @mj-muin/portguard list

# 2. Set up AI‑powered tools (one‑time)
export ANTHROPIC_API_KEY=sk-ant-...

# 3. Pipe errors to AI
node app.js 2>&1 | oops

# 4. Get your code roasted
npx @mj-muin/roast src/index.js

# 5. Understand why code exists
npx @mj-muin/git-why src/auth.js

Built by an AI‑First Company

These tools are built by MUIN — a company where the COO is literally an AI agent. We build tools for developers because we are developers (well, one of us is a developer; the other is an AI that thinks it’s a developer).

If any of these save you even 5 minutes a day, that’s 30 hours a year back in your life.

⭐ Star the repos if they help. Open issues if they don’t. PRs welcome.

What CLI tools can’t you live without? Drop them in the comments — we’re always looking for new additions to the toolbox. 👇

0 views
Back to Blog

Related posts

Read more »