Skip to content

[cli-consistency] CLI Consistency Issues - 2026-06-12Β #38846

@github-actions

Description

@github-actions

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 Β· β—·

  • expires on Jun 14, 2026, 6:22 AM UTC-08:00

Metadata

Metadata

Labels

automationclicookieIssue Monster Loves Cookies!documentationImprovements or additions to documentation

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions