← Back to blog
·Developer Experience

Why Developer Tools Need Better CLI Experiences

Most CLI tools are designed for machines, not humans. Here's how to build CLIs that developers actually enjoy using.

developer-toolscliux

The CLI is Having a Renaissance

GUIs get all the design love. Dashboards, web apps, mobile interfaces — they have entire teams dedicated to making them beautiful and usable. Meanwhile, CLIs get a --help flag and a README.

That's changing. Tools like gh, railway, turso, and wrangler have shown that a CLI can be delightful. And with AI-powered development becoming the norm, the terminal is more relevant than ever.

What Good CLI Design Looks Like

After building and using hundreds of CLI tools, here's what separates the great ones:

1. Progressive Disclosure

Don't dump every option on the user. The basic command should do the obvious thing. Advanced options exist but stay out of the way.

# Good: obvious default behavior
deploy

Also good: power when needed

deploy --region us-east-1 --env production --skip-tests

2. Helpful Error Messages

Bad error: Error: ENOENT

Good error:

Error: Config file not found at ./config.yml

Did you mean to run this from your project root?
Try: cd my-project && deploy

3. Interactive When Appropriate

If a command needs three pieces of info, don't make the user memorize flag names. Ask them:

? Select environment: (use arrows)
  ❯ production
    staging
    development

But also support the non-interactive path for scripts and CI.

The AI-CLI Convergence

Here's what's interesting: AI agents primarily interact through text. The CLI is their native interface. As we build more agent-driven workflows, the quality of CLI design directly impacts agent reliability.

A well-structured CLI with clear output formats, predictable behavior, and good error messages isn't just nice for humans — it's essential for AI agents that need to parse and act on the output.

The Minimum Bar

Every CLI tool should have:

  • Colored output that degrades gracefully (respect NO_COLOR)
  • JSON output mode (--json) for programmatic use
  • Autocomplete for shells (bash, zsh, fish)
  • Contextual help — not just global --help, but per-subcommand
  • Sensible defaults that work for 80% of use cases

Build for the Terminal Renaissance

The developers who care about CLI design will build the tools that last. The terminal isn't going anywhere — if anything, AI is making it more central to how we work.

Build CLIs like you'd build a product. Because that's what they are.