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