Summary
Comprehensive CLI inspection of gh-aw found 18 issues (2 high, 6 medium, 10 low).
| Severity |
Count |
| π΄ High |
2 |
| π‘ Medium |
6 |
| π΅ Low |
10 |
Commands inspected: 34 | Date: 2026-06-12 | Run: 27420894190
π΄ High
H1 β outcomes command in wrong CLI group (code bug)
outcomes appears under Additional Commands instead of Analysis Commands in gh aw --help. Root cause: outcomesCmd.GroupID = "analysis" is missing in cmd/gh-aw/main.go. Every other analysis command has this assignment; outcomesCmd does not.
Fix: Add outcomesCmd.GroupID = "analysis" near line 838β844 in main.go.
H2 β remove docs say "prefix" but CLI implements substring matching
CLI help (correct):
You can provide a substring to match multiple workflows
gh aw remove test- # Remove all workflows containing 'test-' in name
Docs (wrong):
Accepts a workflow ID (basename without .md) or prefix pattern.
gh aw remove test- # Remove all workflows starting with 'test-'
Fix: Update docs β replace "prefix pattern" β "substring pattern" and "starting with" β "containing".
π‘ Medium
6 medium findings
M1 β fix docs missing --disable-codemod flag
CLI has --disable-codemod strings Disable specific codemod IDs (repeatable) but docs Options list only shows --dir/-d, --list-codemods, --write.
M2 β upgrade docs missing --disable-codemod flag
CLI has --disable-codemod strings Disable specific codemod IDs during the fix step (repeatable) but docs Options list omits it.
M3 β compile --force missing -f short alias
Every other command with --force exposes -f (add, new, update, deploy). compile uniquely omits it:
--force Force overwrite of existing dependency files # no -f
M4 β list --path vs --dir for remote directories
list uses --path for remote repo directory (--path only works with --repo), while every other command reuses --dir for both local and remote. Users must learn a different flag name in list alone.
M5 β --approve missing from update and deploy
compile, run, and upgrade all expose --approve to bypass safe-update enforcement during recompilation. update and deploy trigger the same enforcement but offer no escape hatch.
M6 β Mixed --disable-xxx vs --no-xxx negation style
update mixes both styles in the same command:
--disable-release-bump Disable automatic major version bumps
--disable-security-scanner Disable security scanning
--no-compile Skip recompiling workflows
--no-merge Override local changes with upstream
--no-stop-after Remove any stop-after field
Same inconsistency in add, upgrade, deploy. Suggested convention: standardize on --no-xxx.
π΅ Low
10 low findings
L1 β forecast inconsistent experimental label
Main help: (experimental) β Command help: [EXPERIMENTAL]. Should be consistent.
L2 β project new docs omit -l alias for --link
CLI: -l, --link string β Docs only mention --link.
L3 β update missing --json/-j (but upgrade has it)
upgrade supports machine-readable JSON output; update does not despite doing equivalent work.
L4 β upgrade missing --engine/-e
upgrade internally calls compile but doesn't forward --engine to let users override the AI engine.
L5 β add-wizard missing flags present in add
add-wizard is missing --append, --disable-security-scanner, --force/-f, and --name/-n that add exposes.
L6 β compile --logical-repo missing -l short alias
trial -l/--logical-repo has a short alias; compile --logical-repo does not, despite the same concept.
L7 β outcomes --output missing default value
audit and logs show (default ".github/aw/logs") for their -o/--output. outcomes --output shows no default.
L8 β -e/--engine means "filter" in logs vs "override" elsewhere
In all 10+ commands, -e overrides the AI engine. In logs only, it filters historical runs. Same flag name, opposite semantic direction.
L9 β logs --last is a redundant alias for --count/-c
--last int Alias for --count adds confusion with no short form and no clear advantage over --count/-c.
L10 β trial --timeout doesn't document 0 = no timeout
logs and forecast both say (0 = no timeout). trial --timeout is silent on this behavior.
Method
- CLI help collected via
./gh-aw [cmd] --help for all 34 commands/subcommands
- Compared against
docs/src/content/docs/setup/cli.md
- Code verified in
cmd/gh-aw/main.go
Generated by β
CLI Consistency Checker Β· 1.3K AIC Β· β 13.4 AIC Β· β 15.8K Β· β·
Summary
Comprehensive CLI inspection of
gh-awfound 18 issues (2 high, 6 medium, 10 low).Commands inspected: 34 | Date: 2026-06-12 | Run: 27420894190
π΄ High
H1 β
outcomescommand in wrong CLI group (code bug)outcomesappears under Additional Commands instead of Analysis Commands ingh aw --help. Root cause:outcomesCmd.GroupID = "analysis"is missing incmd/gh-aw/main.go. Every other analysis command has this assignment;outcomesCmddoes not.Fix: Add
outcomesCmd.GroupID = "analysis"near line 838β844 inmain.go.H2 β
removedocs say "prefix" but CLI implements substring matchingCLI help (correct):
Docs (wrong):
Fix: Update docs β replace "prefix pattern" β "substring pattern" and "starting with" β "containing".
π‘ Medium
6 medium findings
M1 β
fixdocs missing--disable-codemodflagCLI has
--disable-codemod strings Disable specific codemod IDs (repeatable)but docs Options list only shows--dir/-d,--list-codemods,--write.M2 β
upgradedocs missing--disable-codemodflagCLI has
--disable-codemod strings Disable specific codemod IDs during the fix step (repeatable)but docs Options list omits it.M3 β
compile --forcemissing-fshort aliasEvery other command with
--forceexposes-f(add,new,update,deploy).compileuniquely omits it:M4 β
list --pathvs--dirfor remote directorieslistuses--pathfor remote repo directory (--pathonly works with--repo), while every other command reuses--dirfor both local and remote. Users must learn a different flag name inlistalone.M5 β
--approvemissing fromupdateanddeploycompile,run, andupgradeall expose--approveto bypass safe-update enforcement during recompilation.updateanddeploytrigger the same enforcement but offer no escape hatch.M6 β Mixed
--disable-xxxvs--no-xxxnegation styleupdatemixes both styles in the same command:Same inconsistency in
add,upgrade,deploy. Suggested convention: standardize on--no-xxx.π΅ Low
10 low findings
L1 β
forecastinconsistent experimental labelMain help:
(experimental)β Command help:[EXPERIMENTAL]. Should be consistent.L2 β
project newdocs omit-lalias for--linkCLI:
-l, --link stringβ Docs only mention--link.L3 β
updatemissing--json/-j(butupgradehas it)upgradesupports machine-readable JSON output;updatedoes not despite doing equivalent work.L4 β
upgrademissing--engine/-eupgradeinternally calls compile but doesn't forward--engineto let users override the AI engine.L5 β
add-wizardmissing flags present inaddadd-wizardis missing--append,--disable-security-scanner,--force/-f, and--name/-nthataddexposes.L6 β
compile --logical-repomissing-lshort aliastrial -l/--logical-repohas a short alias;compile --logical-repodoes not, despite the same concept.L7 β
outcomes --outputmissing default valueauditandlogsshow(default ".github/aw/logs")for their-o/--output.outcomes --outputshows no default.L8 β
-e/--enginemeans "filter" inlogsvs "override" elsewhereIn all 10+ commands,
-eoverrides the AI engine. Inlogsonly, it filters historical runs. Same flag name, opposite semantic direction.L9 β
logs --lastis a redundant alias for--count/-c--last int Alias for --countadds confusion with no short form and no clear advantage over--count/-c.L10 β
trial --timeoutdoesn't document0 = no timeoutlogsandforecastboth say(0 = no timeout).trial --timeoutis silent on this behavior.Method
./gh-aw [cmd] --helpfor all 34 commands/subcommandsdocs/src/content/docs/setup/cli.mdcmd/gh-aw/main.go