From qe-framework
Builds CLI tools with argument parsing, interactive prompts, shell completions, and progress indicators. Provides framework-specific guidance for Node.js (commander), Python (click/typer), and Go (cobra).
How this skill is triggered — by the user, by Claude, or both
Slash command
/qe-framework:Qcli-developerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
1. **Analyze UX** — Identify user workflows, command hierarchy, common tasks. Validate by listing all commands and their expected `--help` output before writing code.
--help output before writing code.<cli> --help to verify help text renders correctly and <cli> --version to confirm version output.Load detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| Design Patterns | references/design-patterns.md | Subcommands, flags, config, architecture |
| Node.js CLIs | references/node-cli.md | commander, yargs, inquirer, chalk |
| Python CLIs | references/python-cli.md | click, typer, argparse, rich |
| Go CLIs | references/go-cli.md | cobra, viper, bubbletea |
| UX Patterns | references/ux-patterns.md | Progress bars, colors, help text |
#!/usr/bin/env node
// npm install commander
const { program } = require('commander');
program
.name('mytool')
.description('Example CLI')
.version('1.0.0');
program
.command('greet <name>')
.description('Greet a user')
.option('-l, --loud', 'uppercase the greeting')
.action((name, opts) => {
const msg = `Hello, ${name}!`;
console.log(opts.loud ? msg.toUpperCase() : msg);
});
program.parse();
For Python (click/typer) and Go (cobra) quick-start examples, see references/python-cli.md and references/go-cli.md.
--help and --version flags// Node.js
const useColor = process.stdout.isTTY;
# Python
import sys
use_color = sys.stdout.isatty()
// Go
import "golang.org/x/term"
useColor := term.IsTerminal(int(os.Stdout.Fd()))
os.homedir() / os.UserHomeDir() / Path.home() instead.When implementing CLI features, provide:
--flag-name (kebab-case) across all languages.mytool config get KEY → root handles verbosity, config subcommand owns get, set, list.--non-interactive or env var.JavaScript/TypeScript (JSDoc)
/**
* Validates and parses user input.
* @param {string} input - Raw user input to validate
* @returns {Object} Parsed config object
* @throws {Error} If input is malformed
*/
Python (Docstring)
def parse_config(input_str: str) -> dict:
"""Validate and parse user input.
Args:
input_str: Raw user input to validate
Returns:
Parsed config object
Raises:
ValueError: If input is malformed
"""
Go (GoDoc)
// ParseConfig validates and parses user input.
// It returns a parsed config object or an error if input is malformed.
func ParseConfig(input string) (map[string]interface{}, error) {
eslint with plugin:commander or plugin:yargs. Enforce consistent option definitions.flake8 + black. Verify 2 spaces for groups, consistent docstrings.golangci-lint with rules for error handling and naming.shellcheck (mandatory for completion scripts). Address SC2086 (quote expansion), SC2181 (check exit codes).../, ..\\).eval(), exec(), or shell=True interpreters without strict validation.path.resolve() or os.path.abspath(); compare against allowed directory prefix.package-lock.json, poetry.lock, or go.sum.--help alone.Error: Invalid. Good: Error: Config file not found at ~/.myapp/config.yml. Create one with 'myapp init'.os.homedir(), Path.home(), or env vars instead of /home/user or C:\Users\User.CLI frameworks (commander, yargs, oclif, click, typer, argparse, cobra, viper), terminal UI (chalk, inquirer, rich, bubbletea), testing (snapshot testing, E2E), distribution (npm, pip, homebrew, releases), performance optimization
npx claudepluginhub inho-team/qe-framework --plugin qe-frameworkCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.