Flag add
Skill zakelfassi/skills-driven-development/examples/cli-tool/skills/flag-add
Agents that learn by doing — and remember how they did it. A methodology for AI agents to create, evolve, and share reusable skills.
npx -y skills add zakelfassi/skills-driven-development --skill flag-addAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 17 stars17 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Add a CLI flag to shipctl end-to-end — argument parser definition, help text, shell completion scripts, documentation, and tests. Use when adding a new option or flag, when extending an existing subcommand, or when asked to "add a --flag-name option".
SKILL.md
3.5 KB, as published. Nobody here has run it
Flag Add
Add a new CLI flag to a shipctl command end-to-end.
Inputs
- Command path (e.g.,
release,build cross,config set) - Flag name (long form, e.g.,
--output-dir) - Short alias (optional, e.g.,
-o) - Type (string, bool, integer, path)
- Default value (or
requiredif mandatory) - Description (one-line, used in help text and docs)
Steps
-
Define the flag in the parser
For Rust +
clap:// In the relevant Args struct (src/cmd/{command}.rs) #[arg(long, short = '{alias}', default_value = "{default}", help = "{description}")] pub {flag_name}: {type},For Go +
cobra:// In the relevant command file (cmd/{command}.go) cmd.Flags().{TypeVar}(&opts.{FlagName}, "{flag-name}", {default}, "{description}") -
Wire the value into the command logic Pass the flag value through to whatever downstream call needs it. Verify the happy path compiles:
cargo check/go build ./.... -
Update the help text Run
shipctl {command} --helpand confirm the flag appears with the correct description and default. -
Add shell completions Regenerate completions (invoke
manpage-syncskill, or manually):shipctl completions bash > completions/shipctl.bash shipctl completions zsh > completions/_shipctl shipctl completions fish > completions/shipctl.fishCommit the updated completion files.
-
Update documentation Edit
docs/reference/{command}.md:- Add a row to the Flags table:
| --{flag-name} | {type} | {default} | {description} | - Add an Examples entry if the flag has a non-obvious use
- Add a row to the Flags table:
-
Write or extend a test
// tests/cmd_{command}.rs #[test] fn test_{flag_name}_flag() { let output = Command::cargo_bin("shipctl").unwrap() .arg("{command}") .arg("--{flag-name}").arg("{test-value}") .assert().success(); // assert output contains expected value } -
Verify the full suite passes
cargo test --workspace
Conventions
- Long flags are kebab-case (
--output-dir, not--outputDir) - Boolean flags use
--flag/--no-flagpair when toggling a default-on behavior - Flags that accept file paths validate existence (return error with
ENOENTmessage) - Help text: imperative mood, no trailing period, max 72 chars
- Short aliases: only for the top 10 most-used flags; don't add new ones without team sign-off
Edge Cases
- Conflicting short alias: Run
shipctl --helpon the parent command to audit existing aliases; pick a different letter or omit the alias. - Required flag without a default: Add a clear error message with the flag name and an example invocation.
- Flag affects multiple subcommands: Define it at the parent command level with
PersistentFlags()(cobra) orArgsflattening (clap). - Boolean flag default is
true: Document this prominently; many users expect flags to be opt-in.