I did a cursory search and found a few seemingly universal guidelines, though none of them spoke to how arguments and options should be used.
* use stdout and stderr appropriately (i.e., don't write messages to the user to stdout) * use exit codes to indicate success / failure cases * ensure output is consistent and easily parsed by other cli tools
What do you like? What do you hate? I would love to hear your thoughts on what style choices make for a more ergonomic cli tool.
Things like '--list' vs '--list-software-updates' depends on what the tool does. You might have '--list-formats', '--list-authors', and more, in which case a single '--list' might not be meaningful (unless it's clearly obvious what it will list).
It also depends on a lot on how the subcommands work together. You might have --define to be clear, but have it be used so often that your users will want '-d' because 1) it saves time, and 2) they use it so often they don't have a problem remembering what it means.
I can't think of any guides off-hand.
It's a category of UI design, so many UI/UX techniques could be applied to the task. That thought lead me to search for "command-line" and "UX" together, finding things like:
"3 Commandments for CLI Design" - https://medium.com/relay-sh/command-line-ux-in-2020-e537018e...
"Command Line User Experience" - https://techblog.cisco.com/blog/cli-ux
"Designing Great Command-Line User Experiences" - https://www.juliandunn.net/2016/08/09/designing-great-comman...
I think those have enough to get you started, and to help you find related resources.