plugins/dev-tools/skills/designing-clis/SKILL.md
Use when building, improving, or reviewing command-line interfaces for better user experience - before implementing commands/output/errors, when users report confusion or frustration, or when CLI feels hard to use - provides UX principles, visual design techniques, and practical patterns for creating discoverable, delightful CLIs
npx skillsauth add technicalpickles/pickled-claude-plugins designing-clisInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Modern CLIs are conversations between human and machine. Great CLIs feel discoverable, responsive, and forgiving. Poor CLIs leave users guessing, waiting, and frustrated.
Core principle: Every CLI interaction should answer: "What happened? What can I do? What's next?"
Building:
Improving:
Reviewing:
| Working On | Read This | |------------|-----------| | New CLI under time pressure | practical-patterns.md (Priority Checklist) | | Adding to existing CLI | practical-patterns.md (Working with Existing CLIs) | | Fixing "confusing" CLI | practical-patterns.md (CLI UX Audit Checklist) | | Command structure, flags | ux-principles.md (Familiarity, Discoverability) | | Output formatting | visual-techniques.md (Layout, Spacing, Color) | | Error messages, help text | practical-patterns.md (Error Message Patterns) | | Overall architecture | ux-principles.md (complete overview) |
See ux-principles.md for detailed guidance and examples.
See visual-techniques.md for implementation patterns.
❌ Silent operations - No feedback during slow operations ✅ Show progress, confirmations, or at minimum "Working..."
❌ Cryptic errors without guidance - "Error: invalid input" ✅ Explain what's wrong, what's valid, how to fix: "Error: Invalid environment 'production'. Valid: dev, staging, prod"
❌ No --help text - Forces users to read docs or source ✅ Every command supports --help with usage and examples
❌ Wrong exit codes - Always returns 0, breaks scripting ✅ 0 for success, 1 for errors
❌ Color-only information - Inaccessible without color support ✅ Always pair color with text/symbols, support --no-color
❌ Walls of unstructured text - Dense output hard to scan ✅ Use spacing, alignment, hierarchy to structure information
When building CLI urgently, include these first (high impact, low effort):
Skip initially (lower priority):
Detailed guidance:
Research materials:
tools
--- name: writing-for-scannability description: Use when structuring prose so readers can skim it - drafting or restructuring READMEs, docs, PR or issue bodies, design docs, RFCs, or any long-form text where a wall of prose hides the structure. Also use when explicitly asked to make something scannable or skimmable, convert prose to a list, surface a buried list, fix a wall of text, or decide whether bullets or prose fit. Strong signal: text with parallel sentence shapes, contrast markers ("that
development
Ignore actually-lsp nudges for an ecosystem in this project. Use when the user wants to silence, dismiss, or ignore the LSP setup nudges for a specific ecosystem (Rust, TypeScript, Ruby), or invokes `/actually-lsp-ignore` directly. Writes `dismissed=true` to `.claude/actually-lsp.json`. Persistent across sessions for this project only.
tools
Diagnose and fix LSP setup for the current project's detected ecosystems (Rust, TypeScript, Ruby). Use when the SessionStart hook nudged about a missing LSP plugin, when the env isn't ready (no `bundle install`, no `cargo build`, missing server binary), when LSP calls are failing, or when the user invokes `/actually-lsp-doctor` directly. Walks the per-ecosystem state machine, reports what's missing, then runs the fix.
tools
--- name: investigating-runs description: Use whenever the user mentions a GitHub Actions / GHA run, even casually — invoke this skill before reaching for raw `gh` commands, because the bundled `gha-snapshot` helper distills `gh run view --log-failed` (a firehose) into a readable block with per-job status, failed-step log tails, and annotations. Specific triggers (any one is enough): a `github.com/.../actions/runs/...` URL; the phrase "GitHub Actions" or "GHA"; the `gh run` CLI; a failing workfl