From software-craft
Create distinctive, user-respecting command-line interfaces with exceptional UX. Use this skill when the user asks to build CLI tools, scripts, or terminal applications. Generates well-crafted CLIs that follow platform conventions and treat users as humans, not machines.
npx claudepluginhub bengous/claude-code-plugins --plugin software-craftThis skill uses the workspace's default tool permissions.
This skill guides creation of command-line interfaces that respect users' time and intelligence. Implement real working CLIs with exceptional attention to ergonomics, error handling, and composability.
Applies Acme Corporation brand guidelines including colors, fonts, layouts, and messaging to generated PowerPoint, Excel, and PDF documents.
Builds DCF models with sensitivity analysis, Monte Carlo simulations, and scenario planning for investment valuation and risk assessment.
Calculates profitability (ROE, margins), liquidity (current ratio), leverage, efficiency, and valuation (P/E, EV/EBITDA) ratios from financial statements in CSV, JSON, text, or Excel for investment analysis.
Share bugs, ideas, or general feedback.
This skill guides creation of command-line interfaces that respect users' time and intelligence. Implement real working CLIs with exceptional attention to ergonomics, error handling, and composability.
The user provides CLI requirements: a tool, script, or terminal application to build. They may include context about the purpose, target users, or technical constraints.
<cli_design_thinking>
Before coding, understand the context and commit to a clear interaction model:
CLIs are conversations. Every invocation is a turn in a dialogue. Design for the user who runs your command wrong the first time—that's the normal case.
Then implement working code that is:
<cli_ux_guidelines>
Simple by default, power available. The 90% use case should require zero flags. Advanced options exist but don't clutter basic usage.
<example_good title="Progressive help">
$ mytool --help Usage: mytool
Process files efficiently.
Options: -o, --output Output location (default: stdout) -h, --help Show this help
Run 'mytool --help-all' for advanced options. </example_good>
Errors are teaching moments. Tell users what went wrong, why, and how to fix it.
<example_bad title="Hostile error"> $ mytool config.yaml Error: invalid input </example_bad>
<example_good title="Helpful error"> $ mytool config.yaml Error: Cannot read 'config.yaml': file not found
Did you mean one of these? ./configs/config.yaml ./config.yml
Run 'mytool --help' for usage. </example_good>
Human-readable by default. Machine-readable on request.
<example_good title="Output modes">
$ mytool status ✓ Database: connected (15ms) ✓ Cache: healthy (3ms) ✗ API: timeout after 5000ms
$ mytool status --json {"database":{"ok":true,"latency_ms":15},"cache":{"ok":true,"latency_ms":3},"api":{"ok":false,"error":"timeout"}} </example_good>
Respect TTY detection—no colors in pipes. Confirm state changes ("Created config.json"). Show progress for anything over 1 second.
--output), short flags for frequency (-o)--help, --version, --verbose, --quiet, --dry-run, --force, --json<example_good title="Standard flags"> $ mytool --version mytool 2.1.0
$ mytool -v process data.csv # -v = --verbose $ mytool process data.csv -v # same result, order doesn't matter $ mytool --dry-run delete old/ # shows what would be deleted </example_good>
- for stdin/stdout<example_good title="Stdin support"> $ cat data.csv | mytool process - $ mytool process - < data.csv $ mytool process data.csv -o - # output to stdout </example_good>
Apply configuration in this order: Flags → Environment → Project config → User config → Defaults.
<example_good title="Config precedence"> $ mytool --output /tmp/out.txt # 1. Flag wins $ MYTOOL_OUTPUT=/var/out.txt mytool # 2. Env var
</example_good> </cli_ux_guidelines>
<cli_anti_patterns>
Avoid hostile errors that leave users stranded:
Avoid breaking conventions that users expect:
-help instead of --help → Use GNU-style double-dash for long flagscmd -v file and cmd file -v work the sameAvoid user-hostile defaults:
--force to skip confirmation--yes or flag alternativesAvoid output crimes:
isatty() and respect NO_COLOR<cli_success_criteria>
Your CLI is well-designed when:
cmd --help gives them enough to complete basic tasks--json, no interactive prompts block automation<cli_complexity_matching>
A single-purpose tool needs minimal flags and maximum clarity—think cat, wc, head.
A multi-command suite needs consistent subcommand structure, shared flags, and shell completions—think git, docker, kubectl.
Don't add a plugin system to a grep replacement. Don't force a simple tool into a subcommand hierarchy it doesn't need. </cli_complexity_matching>
The best CLIs feel like they were written by someone who uses the terminal 8 hours a day and has strong opinions about what makes tools pleasant to use. Channel that energy.