Template
Two templates cover the two kinds of scripts. Copy the right one exactly and fill in the specific logic.
- Simple: Scripts intended to be run directly by a user. These typically take either no arguments or a single positional argument. Start from
assets/template-simple.rb. It shows the one-argument form; if the script takes no arguments, delete the argument check and keep the top comment. - Complex: Scripts capable of taking multiple arguments via flags. Skill scripts should always be considered complex scripts. Start from
assets/template-complex.rb. These always support--help.
Conventions
- File:
<name>.rbwith kebab-case (e.g.,extract-pr-number.rb) - Make the file executable (
chmod +x) - Flag-based arguments using
--flag-name(kebab-case). Only use positional args for very simple cases. - Arguments are always required. Never make script arguments optional unless the user explicitly asks for it.
- Full variable names (
directory, notdir) - Call other commands with their long flags (
--session=main, not-s main), so the call reads without knowing the command - Exit
0for success,1for errors - stdout for primary output, stderr for errors/warnings/progress messages
Required patterns
Always:
#!/usr/bin/env rubyshebang# frozen_string_literal: truemagic comment, after the shebang- All error messages must start with
Error:and go to stderr viawarn
Simple scripts:
- A top comment describing what the script does
- No
--helpflag - If it takes an argument, print a usage message to stderr and exit
1when the argument is missing
Complex scripts:
print_helpmethod for help output--helpflag handled inside theOptionParserblock- Use
OptionParserfrom the standard library for argument parsing - Always call
print_helpwhen validation fails or unknown options are encountered - Validate required flags after parsing completes
- Rescue
OptionParser::InvalidOptionand printError: The option <option> is invalid.