[Design] RFC Advanced Issue Support · Issue #13120 · cli/cli · GitHub
Skip to content

[Design] RFC Advanced Issue Support #13120

Closed

Description

@BagToad

Issues 2.0 CLI Design

Covering: Issue type support for gh CLI — create, edit, view, and list with --type flag, Sub-issues and parent relationship support — create, edit, and view with parent/sub-issue flags, Issue relationship support (blocked-by/blocking) — create, edit, and view, Combined Issues 2.0 scenarios — cross-feature interactions, full views, and regressions

Table of Contents

gh issue create

Category Scenario
Issue types With --type flag
Issue types Interactive mode — type picker
Errors Error: invalid type name
Sub-issues With --parent flag
Sub-issues With --parent using cross-repo URL
Relationships With --blocked-by and --blocking
Errors Error: GHES unsupported for relationships
Relationships Blocked by cross-repo issue (URL)
Combined All new flags together

gh issue edit

Category Scenario
Issue types Set issue type
Issue types Remove issue type
Errors Error: --set-type and --remove-type mutually exclusive
Sub-issues Set parent issue
Sub-issues Remove parent
Sub-issues Add sub-issues (comma-separated)
Sub-issues Remove sub-issue
Errors Error: --set-parent and --remove-parent mutually exclusive
Relationships Add and remove --blocked-by
Relationships Add --blocking (comma-separated)
Relationships Remove --blocking
Interactive Interactive metadata picker with new fields
Combined Batch edit with --set-type

gh issue view

Category Scenario
TTY View with issue type
JSON Issue type (--json)
TTY View with parent
TTY View with cross-repo parent
TTY Epic view — sub-issues with no parent
JSON Parent and sub-issues (--json)
TTY View with relationships
JSON Blocked-by and blocking (--json)
TTY Full view with all new fields populated
TTY Minimal view — unchanged from today
TTY Closed sub-issue with parent

gh issue list

Category Scenario
Issue types Filter by issue type
Issue types Combine --type with other filters

gh issue create

What is changing
  • Issue types: Create an issue with --type flag
  • Issue types: Interactive issue creation with type picker (repo has issue types configured)
  • Errors: Error when type name doesn't match any configured type in the repository
  • Sub-issues: Create an issue as a sub-issue of a parent
  • Sub-issues: Create a sub-issue with a cross-repo parent URL
  • Relationships: Create an issue with --blocked-by and --blocking flags (comma-separated)
  • Errors: Error when issue relationships are not supported on the target GHES version
  • Relationships: Create an issue blocked by an issue in another repository (via URL)
  • Combined: Create an issue with all new flags combined (type, parent, blocked-by, blocking)

With --type flag

Input:

$ gh issue create --title "Login broken" --type Bug --body "Can't log in"

Output:

Source & reproduction
printf 'Creating issue in {{repo:cli/cli}}

{{url:https://github.com/cli/cli/issues/127}}
' > create-with-type.ans
freeze create-with-type.ans --output create-with-type.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • Created issue has issueType.name matching the --type argument
  • Created issue has title matching the --title argument

Interactive mode — type picker

Input:

$ gh issue create

Input:

$ My new issue

Output:

Source & reproduction
printf '\033[1;92m?\033[0m \033[1mIssue type\033[0m  \033[0;36m[Use arrows to move, type to filter]\033[0m
\033[1;36m>\033[0m Bug
  Feature
  Task
' > create-interactive-type-step4.ans
freeze create-interactive-type-step4.ans --output create-interactive-type-step4.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Output:

Source & reproduction
printf 'Creating issue in {{repo:cli/cli}}

{{url:https://github.com/cli/cli/issues/130}}
' > create-interactive-type-step6.ans
freeze create-interactive-type-step6.ans --output create-interactive-type-step6.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • Created issue has issueType.name matching the --type argument

Error: invalid type name

Input:

$ gh issue create --title "Oops" --type Bugz

Output:

Source & reproduction
printf 'type "Bugz" not found; available types: {{type_list:Bug, Feature, Task}}
' > create-error-invalid-type.ans
freeze create-error-invalid-type.ans --output create-error-invalid-type.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

With --parent flag

Input:

$ gh issue create --title "Implement parser" --body "Parse the thing" --parent 100

Output:

Source & reproduction
printf 'Creating issue in {{repo:cli/cli}}

{{url:https://github.com/cli/cli/issues/126}}
' > create-with-parent.ans
freeze create-with-parent.ans --output create-with-parent.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • Issue was created successfully
  • Created issue has parent matching the --parent argument

With --parent using cross-repo URL

Input:

$ gh issue create --title "Fix dependency" --parent https://github.com/cli/go-gh/issues/42

Output:

Source & reproduction
printf 'Creating issue in {{repo:cli/cli}}

{{url:https://github.com/cli/cli/issues/129}}
' > create-with-parent-url.ans
freeze create-with-parent-url.ans --output create-with-parent-url.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects

With --blocked-by and --blocking

Input:

$ gh issue create --title "Deploy v2" --blocked-by 200,201 --blocking 300

Output:

Source & reproduction
printf 'Creating issue in {{repo:cli/cli}}

{{url:https://github.com/cli/cli/issues/128}}
' > create-with-relationships.ans
freeze create-with-relationships.ans --output create-with-relationships.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • Issue was created successfully
  • Created issue has blockedBy list matching the --blocked-by arguments
  • Created issue has blocking list matching the --blocking argument

Error: GHES unsupported for relationships

Input:

$ gh issue create --title "Test" --blocked-by 200

Output:

Source & reproduction
printf 'issue relationships are not supported on this GitHub Enterprise Server version
' > create-error-ghes-relationships.ans
freeze create-error-ghes-relationships.ans --output create-error-ghes-relationships.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Blocked by cross-repo issue (URL)

Input:

$ gh issue create --title "Blocked by upstream" --blocked-by https://github.com/cli/go-gh/issues/42

Output:

Source & reproduction
printf 'Creating issue in {{repo:cli/cli}}

{{url:https://github.com/cli/cli/issues/131}}
' > create-with-cross-repo-blocking.ans
freeze create-with-cross-repo-blocking.ans --output create-with-cross-repo-blocking.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • Created issue has blockedBy list including the cross-repo issue specified by URL

All new flags together

Input:

$ gh issue create --title "Deploy v2" --type Task --parent 100 --blocked-by 200 --blocking 300

Output:

Source & reproduction
printf 'Creating issue in {{repo:cli/cli}}

{{url:https://github.com/cli/cli/issues/130}}
' > create-all-flags.ans
freeze create-all-flags.ans --output create-all-flags.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • Created issue has issueType, parent, blockedBy, and blocking fields matching the flag arguments
  • Created issue has parent matching the --parent argument
  • Created issue has blockedBy list matching the --blocked-by argument
  • Created issue has blocking list matching the --blocking argument

gh issue edit

What is changing
  • Issue types: Set issue type with --set-type flag
  • Issue types: Remove issue type with --remove-type flag
  • Errors: Error when both --set-type and --remove-type are specified
  • Sub-issues: Set or replace the parent issue
  • Sub-issues: Remove the parent issue
  • Sub-issues: Add multiple sub-issues using comma-separated values
  • Sub-issues: Remove a sub-issue
  • Errors: Error when --set-parent and --remove-parent are used together
  • Relationships: Add and remove blocked-by relationships in one call
  • Relationships: Add blocking relationships with comma-separated values
  • Relationships: Remove a blocking relationship
  • Interactive: Interactive metadata picker showing all new fields (Type, Parent)
  • Combined: Batch edit — set type on multiple issues in one call

Set issue type

Input:

$ gh issue edit 123 --set-type Feature

Output:

Source & reproduction
printf '{{url:https://github.com/cli/cli/issues/123}}
' > edit-change-type.ans
freeze edit-change-type.ans --output edit-change-type.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • Issue issueType.name is updated to match the --set-type argument

Remove issue type

Input:

$ gh issue edit 123 --remove-type

Output:

Source & reproduction
printf '{{url:https://github.com/cli/cli/issues/123}}
' > edit-remove-type.ans
freeze edit-remove-type.ans --output edit-remove-type.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • Issue issueType is null after removal

Error: --set-type and --remove-type mutually exclusive

Input:

$ gh issue edit 123 --set-type Bug --remove-type

Output:

Source & reproduction
printf 'specify only one of --set-type or --remove-type
' > edit-error-mutual-type.ans
freeze edit-error-mutual-type.ans --output edit-error-mutual-type.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Set parent issue

Input:

$ gh issue edit 123 --set-parent 100

Output:

Source & reproduction
printf '{{url:https://github.com/cli/cli/issues/123}}
' > edit-set-parent.ans
freeze edit-set-parent.ans --output edit-set-parent.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • Issue parent field matches the --set-parent argument

Remove parent

Input:

$ gh issue edit 123 --remove-parent

Output:

Source & reproduction
printf '{{url:https://github.com/cli/cli/issues/123}}
' > edit-remove-parent.ans
freeze edit-remove-parent.ans --output edit-remove-parent.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • Issue parent field is null

Add sub-issues (comma-separated)

Input:

$ gh issue edit 100 --add-sub-issue 123,124,125

Output:

Source & reproduction
printf '{{url:https://github.com/cli/cli/issues/100}}
' > edit-add-sub-issues.ans
freeze edit-add-sub-issues.ans --output edit-add-sub-issues.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • All specified issues appear in the target issue's subIssues list

Remove sub-issue

Input:

$ gh issue edit 100 --remove-sub-issue 123

Output:

Source & reproduction
printf '{{url:https://github.com/cli/cli/issues/100}}
' > edit-remove-sub-issue.ans
freeze edit-remove-sub-issue.ans --output edit-remove-sub-issue.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • Specified issue no longer appears in the target issue's subIssues list

Error: --set-parent and --remove-parent mutually exclusive

Input:

$ gh issue edit 123 --set-parent 100 --remove-parent

Output:

Source & reproduction
printf 'specify only one of --set-parent or --remove-parent
' > edit-error-mutual-parent.ans
freeze edit-error-mutual-parent.ans --output edit-error-mutual-parent.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Add and remove --blocked-by

Input:

$ gh issue edit 123 --add-blocked-by 200 --remove-blocked-by 201

Output:

Source & reproduction
printf '{{url:https://github.com/cli/cli/issues/123}}
' > edit-add-remove-blocked-by.ans
freeze edit-add-remove-blocked-by.ans --output edit-add-remove-blocked-by.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • Issue blockedBy list includes the issues specified by --add-blocked-by
  • Removed issue no longer appears in blockedBy list; added issue does appear

Add --blocking (comma-separated)

Input:

$ gh issue edit 123 --add-blocking 300,301

Output:

Source & reproduction
printf '{{url:https://github.com/cli/cli/issues/123}}
' > edit-add-blocking.ans
freeze edit-add-blocking.ans --output edit-add-blocking.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • Issue blocking list includes the issues specified by --add-blocking

Remove --blocking

Input:

$ gh issue edit 123 --remove-blocking 300

Output:

Source & reproduction
printf '{{url:https://github.com/cli/cli/issues/123}}
' > edit-remove-blocking.ans
freeze edit-remove-blocking.ans --output edit-remove-blocking.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • Specified issue no longer appears in this issue's blocking list

Interactive metadata picker with new fields

Input:

$ gh issue edit 123

Input:

$ {down}{down}{down}{down} {down}

Output:

Source & reproduction
printf '\033[1;92m?\033[0m \033[1mWhat would you like to edit?\033[0m  \033[0;36m[Use arrows to move, space to select, type to filter]\033[0m
  [ ] Title
  [ ] Body
  [ ] Assignees
  [ ] Labels
  [ ] Type
  [ ] Parent
  [ ] Projects
  [ ] Milestone
' > edit-interactive-step2.ans
freeze edit-interactive-step2.ans --output edit-interactive-step2.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Output:

Source & reproduction
printf '\033[1;92m?\033[0m \033[1mType\033[0m  \033[0;36m[Use arrows to move, type to filter]\033[0m
\033[1;36m>\033[0m Bug
  Feature
  Task
' > edit-interactive-step3.ans
freeze edit-interactive-step3.ans --output edit-interactive-step3.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Input:

$ 100

Output:

Source & reproduction
printf '\033[1;92m?\033[0m \033[1mParent issue number or URL\033[0m
' > edit-interactive-step4.ans
freeze edit-interactive-step4.ans --output edit-interactive-step4.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Output:

Source & reproduction
printf '{{url:https://github.com/cli/cli/issues/123}}
' > edit-interactive-step5.ans
freeze edit-interactive-step5.ans --output edit-interactive-step5.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects

Batch edit with --set-type

Input:

$ gh issue edit 123 124 125 --set-type Bug

Output:

Source & reproduction
printf '{{url:https://github.com/cli/cli/issues/123}}
{{url:https://github.com/cli/cli/issues/124}}
{{url:https://github.com/cli/cli/issues/125}}
' > edit-batch-type.ans
freeze edit-batch-type.ans --output edit-batch-type.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360
Expected effects
  • All specified issues have issueType.name matching the --set-type argument

gh issue view

What is changing
  • TTY: Issue view showing type on state line and in metadata
  • JSON: JSON output for issueType field
  • TTY: Issue view showing parent in metadata
  • TTY: Issue view with a cross-repo parent showing full owner/repo prefix
  • TTY: Epic issue view with multiple sub-issues and no parent
  • JSON: JSON output for parent, subIssues, and subIssuesSummary fields
  • TTY: Issue view showing blocked-by and blocking metadata
  • JSON: JSON output for blockedBy and blocking fields
  • TTY: Issue view with ALL new fields populated (type, parent, blocked-by, blocking, sub-issues)
  • TTY: Issue view with no new fields set — proves no regression from today's output
  • TTY: Closed sub-issue view — parent shown, no sub-issues section

View with issue type

Input:

$ gh issue view 123

Output:

Source & reproduction
printf '\033[1m{{title:Login broken}}\033[0m {{repo_ref:cli/cli#123}}
\033[0;90m{{issue_type:Bug}}\033[0m · \033[0;32m{{state:Open}}\033[0m · {{author:user1}} opened {{time_ago:about 2 hours ago}} · {{count:0}} comments
\033[1mLabels:\033[0m {{labels:bug}}
\033[1mType:\033[0m   {{issue_type:Bug}}

  \033[38;5;252m{{body_text:Something is broken when users try to log in.}}\033[0m

\033[0;90mView this issue on GitHub: {{url:https://github.com/cli/cli/issues/123}}\033[0m
' > view-with-type.ans
freeze view-with-type.ans --output view-with-type.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Issue type (--json)

Input:

$ gh issue view 123 --json issueType

Output:

Source & reproduction
printf '{
  "issueType": {
    "id": "{{title:IT_kwDOABCD12}}",
    "name": "{{issue_type:Bug}}",
    "description": "{{title:Something isn'\''t working}}",
    "color": "{{title:d73a4a}}"
  }
}
' > view-json-issue-type.ans
freeze view-json-issue-type.ans --output view-json-issue-type.png --language json --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

View with parent

Input:

$ gh issue view 123

Output:

Source & reproduction
printf '\033[1m{{title:Implement OAuth flow}}\033[0m {{repo_ref:cli/cli#123}}
\033[0;32m{{state:Open}}\033[0m · {{author:user1}} opened {{time_ago:about 2 hours ago}} · {{count:2}} comments
\033[1mParent:\033[0m \033[0;32m{{state:Open}}\033[0m {{issue_ref:cli/cli#100}} {{title:Epic: Authentication overhaul}}

  \033[38;5;252m{{body_text:Implementing the OAuth flow as described in the parent issue.}}\033[0m

\033[0;90mView this issue on GitHub: {{url:https://github.com/cli/cli/issues/123}}\033[0m
' > view-with-parent.ans
freeze view-with-parent.ans --output view-with-parent.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

View with cross-repo parent

Input:

$ gh issue view 129

Output:

Source & reproduction
printf '\033[1m{{title:Fix go-gh dependency}}\033[0m {{repo_ref:cli/cli#129}}
\033[0;32m{{state:Open}}\033[0m · {{author:user1}} opened {{time_ago:about 1 hour ago}} · {{count:0}} comments
\033[1mParent:\033[0m \033[0;32m{{state:Open}}\033[0m {{issue_ref:cli/go-gh#42}} {{title:Refactor auth module}}

  \033[38;5;252m{{body_text:The }}\033[38;5;203;48;5;236m{{code:go-gh}}\033[0m\033[38;5;252m{{body_text: auth module changed its API in v2. We need}}\033[0m
  \033[38;5;252m{{body_text:to update our usage to match.}}\033[0m

\033[0;90mView this issue on GitHub: {{url:https://github.com/cli/cli/issues/129}}\033[0m
' > view-cross-repo-parent.ans
freeze view-cross-repo-parent.ans --output view-cross-repo-parent.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Epic view — sub-issues with no parent

Input:

$ gh issue view 100

Output:

Source & reproduction
printf '\033[1m{{title:Authentication overhaul}}\033[0m {{repo_ref:cli/cli#100}}
\033[0;32m{{state:Open}}\033[0m · {{author:user1}} opened {{time_ago:about 1 week ago}} · {{count:12}} comments
\033[1mAssignees:\033[0m {{assignees:user1, user2}}
\033[1mLabels:\033[0m    {{labels:epic, auth}}
\033[1mType:\033[0m      {{issue_type:Task}}
\033[1mProjects:\033[0m  {{project:Auth Overhaul (In Progress)}}
\033[1mMilestone:\033[0m {{milestone:v2.0}}

  \033[38;5;252m{{body_text:This epic tracks the full authentication overhaul for v2.0.}}\033[0m
  \033[38;5;252m{{body_text:All sub-issues must be completed before release.}}\033[0m

\033[1mSub-issues\033[0m · {{count:3}}/{{count:5}} ({{percent:60%%}})
\033[0;35m{{state:Closed}}\033[0m {{issue_ref:cli/cli#101}} {{title:Design auth module API}}
\033[0;35m{{state:Closed}}\033[0m {{issue_ref:cli/cli#102}} {{title:Implement OAuth token exchange}}
\033[0;35m{{state:Closed}}\033[0m {{issue_ref:cli/cli#103}} {{title:Add SSO support}}
\033[0;32m{{state:Open}}\033[0m   {{issue_ref:cli/cli#104}} {{title:Token refresh logic}}
\033[0;32m{{state:Open}}\033[0m   {{issue_ref:cli/cli#105}} {{title:Migration guide}}

\033[0;90mView this issue on GitHub: {{url:https://github.com/cli/cli/issues/100}}\033[0m
' > view-epic.ans
freeze view-epic.ans --output view-epic.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Parent and sub-issues (--json)

Input:

$ gh issue view 123 --json parent,subIssues,subIssuesSummary

Output:

Source & reproduction
printf '{
  "parent": {
    "number": {{number:100}},
    "title": "{{title:Epic: Authentication overhaul}}",
    "url": "{{url:https://github.com/cli/cli/issues/100}}",
    "state": "{{state:OPEN}}"
  },
  "subIssues": [
    {
      "number": {{number:124}},
      "title": "{{title:Implement OAuth flow}}",
      "url": "{{url:https://github.com/cli/cli/issues/124}}",
      "state": "{{state:CLOSED}}"
    },
    {
      "number": {{number:125}},
      "title": "{{title:Add token refresh}}",
      "url": "{{url:https://github.com/cli/cli/issues/125}}",
      "state": "{{state:OPEN}}"
    }
  ],
  "subIssuesSummary": {
    "total": {{count:2}},
    "completed": {{count:1}},
    "percentCompleted": {{count:50}}.0
  }
}
' > view-json-parent-subissues.ans
freeze view-json-parent-subissues.ans --output view-json-parent-subissues.png --language json --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

View with relationships

Input:

$ gh issue view 123

Output:

Source & reproduction
printf '\033[1m{{title:Deploy v2}}\033[0m {{repo_ref:cli/cli#123}}
\033[0;32m{{state:Open}}\033[0m · {{author:user1}} opened {{time_ago:about 1 hour ago}} · {{count:0}} comments
\033[1mBlocked by:\033[0m
\033[0;32m{{state:Open}}\033[0m {{issue_ref:cli/cli#200}} {{title:API rate limiting}}
\033[0;32m{{state:Open}}\033[0m {{issue_ref:cli/cli#201}} {{title:Fix auth tokens}}
\033[1mBlocking:\033[0m
\033[0;32m{{state:Open}}\033[0m {{issue_ref:cli/cli#300}} {{title:Release v2.0}}

  \033[38;5;252m{{body_text:Deploy the v2.0 release once all blockers are resolved.}}\033[0m

\033[0;90mView this issue on GitHub: {{url:https://github.com/cli/cli/issues/123}}\033[0m
' > view-with-relationships.ans
freeze view-with-relationships.ans --output view-with-relationships.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Blocked-by and blocking (--json)

Input:

$ gh issue view 123 --json blockedBy,blocking

Output:

Source & reproduction
printf '{
  "blockedBy": [
    {
      "number": {{number:200}},
      "title": "{{title:API rate limiting}}",
      "url": "{{url:https://github.com/cli/cli/issues/200}}",
      "state": "{{state:OPEN}}"
    },
    {
      "number": {{number:201}},
      "title": "{{title:Fix auth tokens}}",
      "url": "{{url:https://github.com/cli/cli/issues/201}}",
      "state": "{{state:OPEN}}"
    }
  ],
  "blocking": [
    {
      "number": {{number:300}},
      "title": "{{title:Release v2.0}}",
      "url": "{{url:https://github.com/cli/cli/issues/300}}",
      "state": "{{state:OPEN}}"
    }
  ]
}
' > view-json-relationships.ans
freeze view-json-relationships.ans --output view-json-relationships.png --language json --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Full view with all new fields populated

Input:

$ gh issue view 123

Output:

Source & reproduction
printf '\033[1m{{title:Implement OAuth flow}}\033[0m {{repo_ref:cli/cli#123}}
\033[0;90m{{issue_type:Bug}}\033[0m · \033[0;32m{{state:Open}}\033[0m · {{author:user1}} opened {{time_ago:about 2 hours ago}} · {{count:5}} comments
\033[1mAssignees:\033[0m {{assignees:user1, user2}}
\033[1mLabels:\033[0m    {{labels:enhancement, auth}}
\033[1mType:\033[0m      {{issue_type:Bug}}
\033[1mParent:\033[0m    \033[0;32m{{state:Open}}\033[0m {{issue_ref:cli/cli#100}} {{title:Epic: Authentication overhaul}}
\033[1mBlocked by:\033[0m
\033[0;32m{{state:Open}}\033[0m {{issue_ref:cli/cli#200}} {{title:API rate limiting}}
\033[1mBlocking:\033[0m
\033[0;32m{{state:Open}}\033[0m {{issue_ref:cli/cli#300}} {{title:Release v2.0}}
\033[0;32m{{state:Open}}\033[0m {{issue_ref:cli/cli#301}} {{title:Update docs}}
\033[1mProjects:\033[0m  {{project:Auth Overhaul (In Progress)}}
\033[1mMilestone:\033[0m {{milestone:v2.0}}

  \033[38;5;252m{{body_text:The OAuth flow is currently broken when users attempt to log in}}\033[0m
  \033[38;5;252m{{body_text:with SSO-enabled organizations. This needs to be fixed before}}\033[0m
  \033[38;5;252m{{body_text:the v2.0 release.}}\033[0m

  \033[38;5;39;1m## {{heading:Steps to reproduce}}\033[0m

  \033[38;5;252m1. Log in with an SSO-enabled org\033[0m
  \033[38;5;252m2. Attempt to authorize the OAuth app\033[0m
  \033[38;5;252m3. Observe the \033[38;5;203;48;5;236m{{code:403}}\033[0m\033[38;5;252m error\033[0m

\033[1mSub-issues\033[0m · {{count:1}}/{{count:2}} ({{percent:50%%}})
\033[0;35m{{state:Closed}}\033[0m {{issue_ref:cli/cli#124}} {{title:Implement OAuth flow}}
\033[0;32m{{state:Open}}\033[0m   {{issue_ref:cli/cli#125}} {{title:Add token refresh}}

\033[0;90mView this issue on GitHub: {{url:https://github.com/cli/cli/issues/123}}\033[0m
' > view-full.ans
freeze view-full.ans --output view-full.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Minimal view — unchanged from today

Input:

$ gh issue view 456

Output:

Source & reproduction
printf '\033[1m{{title:Simple bug report}}\033[0m {{repo_ref:cli/cli#456}}
\033[0;32m{{state:Open}}\033[0m · {{author:user1}} opened {{time_ago:about 1 day ago}} · {{count:0}} comments
\033[1mLabels:\033[0m {{labels:bug}}

  \033[38;5;252m{{body_text:Something is broken when running }}\033[38;5;203;48;5;236m{{code:gh issue list}}\033[0m\033[38;5;252m{{body_text: with the}}\033[0m
  \033[38;5;203;48;5;236m{{code:--assignee}}\033[0m\033[38;5;252m{{body_text: flag. It returns an empty list even when there}}\033[0m
  \033[38;5;252m{{body_text:are assigned issues.}}\033[0m

\033[0;90mView this issue on GitHub: {{url:https://github.com/cli/cli/issues/456}}\033[0m
' > view-minimal.ans
freeze view-minimal.ans --output view-minimal.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Closed sub-issue with parent

Input:

$ gh issue view 124

Output:

Source & reproduction
printf '\033[1m{{title:Implement OAuth flow}}\033[0m {{repo_ref:cli/cli#124}}
\033[0;35m{{state:Closed}}\033[0m · {{author:user1}} opened {{time_ago:about 3 days ago}} · {{count:2}} comments
\033[1mParent:\033[0m \033[0;32m{{state:Open}}\033[0m {{issue_ref:cli/cli#100}} {{title:Epic: Authentication overhaul}}

  \033[38;5;252m{{body_text:Implemented the OAuth flow as described in the parent issue.}}\033[0m
  \033[38;5;252m{{body_text:See cli/cli#100 for the full design.}}\033[0m

  \033[38;5;39;1m## {{heading:Changes}}\033[0m

  \033[38;5;252m{{body_text:• Added OAuth token exchange in }}\033[38;5;203;48;5;236m{{code:pkg/auth/oauth.go}}\033[0m
  \033[38;5;252m{{body_text:• Updated login command to use new flow}}\033[0m

\033[0;90mView this issue on GitHub: {{url:https://github.com/cli/cli/issues/124}}\033[0m
' > view-closed-sub-issue.ans
freeze view-closed-sub-issue.ans --output view-closed-sub-issue.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

gh issue list

What is changing
  • Issue types: Filter issue list by type
  • Issue types: Combine --type with --state and --label filters

Filter by issue type

Input:

$ gh issue list --type Bug

Output:

Source & reproduction
printf 'Showing {{count:1}} of {{count:15}} issues in {{repo:cli/cli}}

\033[0;32m#{{number:123}}\033[0m  {{title:Implement OAuth flow}}     \033[0;90m{{labels:auth, enhancement}}\033[0m   \033[0;90m{{time_ago:about 2 hours ago}}\033[0m
' > list-filter-by-type.ans
freeze list-filter-by-type.ans --output list-filter-by-type.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Combine --type with other filters

Input:

$ gh issue list --type Bug --state closed --label p1

Output:

Source & reproduction
printf 'Showing {{count:2}} of {{count:8}} issues in {{repo:cli/cli}}

\033[0;35m#{{number:89}}\033[0m   {{title:Login crash on Safari}}    \033[0;90m{{labels:p1, bug}}\033[0m             \033[0;90m{{time_ago:about 1 week ago}}\033[0m
\033[0;35m#{{number:67}}\033[0m   {{title:Memory leak in auth}}      \033[0;90m{{labels:p1, bug}}\033[0m             \033[0;90m{{time_ago:about 2 weeks ago}}\033[0m
' > list-type-with-filters.ans
freeze list-type-with-filters.ans --output list-type-with-filters.png --language ansi --font.family 'JetBrains Mono,SF Mono,Menlo,monospace' --font.size 12 --line-height 1.4 --window --padding '20,40,20,20' --background '#2b3037' --margin 20 --shadow.blur 6 --border.radius 8 --width 1360

Activity

  1. github-actions commented on Apr 8, 2026

    @github-actions
    Contributor

    Thank you for your issue! We have categorized it as an enhancement (feature or improvement) request, and it has been added to our backlog. In doing so, we are not committing to implementing this feature at this time, but, we will consider it for future releases based on community feedback and our own product roadmap.

    Unless you see the help wanted Contributions welcome label, we are not currently looking for external contributions for this feature.

    If you come across this issue and would like to see it implemented, please add a thumbs up! This will help us prioritize the feature. Please only comment if you have additional information or viewpoints to contribute.

  2. added
    gh-issuerelating to the gh issue command
    and removed on Apr 8, 2026
  3. lemeurherve commented on Apr 9, 2026

    @lemeurherve

    Is there a plan to support issue fields too? https://github.com/orgs/community/discussions/189141

  4. BagToad commented on Apr 10, 2026

    @BagToad
    MemberAuthor

    Is there a plan to support issue fields too? https://github.com/orgs/community/discussions/189141

    @lemeurherve no plans currently, but I'm sure that would be valuable to work on after the issue relationships etc. in this issue ship 👍 Something for the team to discuss.

  5. CnkwebB commented on Apr 14, 2026

    @CnkwebB
  6. dfaivre-pcs commented on Apr 24, 2026

    @dfaivre-pcs

    Heads up for this design issue: there may be a github.com backend bug where subIssuesSummary (GraphQL) / sub_issues_summary (REST) freezes at {total: 1, completed: 0} after the first sub-issue is linked. The gh issue view --json subIssuesSummary spec in the issue body (example around line 1097) would expose that stale value to CLI users.

    We haven't fully confirmed this isn't a client-side mistake on our end — but it reproduces for us through every sub-issue write path we've tried, including createIssue(input: {parentIssueId, …}), which is what gh issue create --parent will likely wrap. Other users are seeing the same symptom.

    Not a blocker — flagging in case it's worth verifying the backend before shipping --parent and --json subIssuesSummary, or noting in release notes until resolved.


    Investigation and comment drafted with Claude Code.

  7. BagToad commented on Jun 4, 2026

    @BagToad
    MemberAuthor

    Completed in #13057.

  8. pokui commented on Aug 8, 2026

    @pokui

    I know this is closed: please advise if I should create a new issue. Your design forces one to pick an issue type whereas it is optional in the web interface. There should be an option to not select a type.

    I only found out about this after my upgraded gh cli tool started forcing me to pick a type.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementa request to improve CLIgh-issuerelating to the gh issue command

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions