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