install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/TerminalSkills/skills/commander" ~/.claude/skills/comeonoliver-skillshub-commander && rm -rf "$T"
manifest:
skills/TerminalSkills/skills/commander/SKILL.mdsource content
Commander.js
Overview
Commander is the standard library for building Node.js CLIs. Parse arguments, define subcommands, generate help text, and handle options. Powers thousands of CLIs including create-react-app, eslint, and prisma.
Instructions
Step 1: Basic CLI
// cli.ts — CLI with commands and options import { Command } from 'commander' const program = new Command() .name('mytools') .description('Developer productivity toolkit') .version('1.0.0') program .command('init') .description('Initialize a new project') .argument('<name>', 'project name') .option('-t, --template <type>', 'project template', 'default') .option('--no-git', 'skip git initialization') .option('-d, --dry-run', 'show what would be created') .action(async (name, opts) => { console.log(`Creating project: ${name}`) console.log(`Template: ${opts.template}`) if (opts.dryRun) { console.log('(dry run)'); return } await createProject(name, opts) }) program .command('deploy') .description('Deploy to production') .option('-e, --env <environment>', 'target environment', 'production') .option('--force', 'skip confirmation') .action(async (opts) => { if (!opts.force) { const ok = await confirm(`Deploy to ${opts.env}?`) if (!ok) process.exit(0) } await deploy(opts.env) }) program.parse()
Step 2: Package Setup
{ "name": "mytools", "bin": { "mytools": "./dist/cli.js" }, "scripts": { "build": "tsc", "dev": "tsx src/cli.ts" } }
# Development npx tsx src/cli.ts init my-project --template react # After build + npm link mytools init my-project --template react mytools deploy --env staging mytools --help
Guidelines
- Commander auto-generates
from your command definitions.--help - Use
for required positional args,argument()
for flags.option()
flags automatically create boolean negations (e.g.,--no-*
→--no-git
).opts.git === false- Exit codes: 0 for success, 1 for errors. Commander handles parse errors automatically.
- For interactive prompts, pair with Inquirer or @clack/prompts.