Repository navigation
[Design] RFC Advanced Issue Support #13120
Description
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
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 1360Expected 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 createInput:
$ My new issueOutput:
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 1360Output:
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 1360Expected effects
- Created issue has issueType.name matching the --type argument
Error: invalid type name
Input:
$ gh issue create --title "Oops" --type BugzOutput:
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 1360With --parent flag
Input:
$ gh issue create --title "Implement parser" --body "Parse the thing" --parent 100Output:
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 1360Expected 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/42Output:
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 1360Expected effects
- Issue was created successfully
- Issue is a sub-issue of Refactor config package and add functionality go-gh#42 (cross-repo parent)
With --blocked-by and --blocking
Input:
$ gh issue create --title "Deploy v2" --blocked-by 200,201 --blocking 300Output:
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 1360Expected 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 200Output:
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 1360Blocked by cross-repo issue (URL)
Input:
$ gh issue create --title "Blocked by upstream" --blocked-by https://github.com/cli/go-gh/issues/42Output:
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 1360Expected 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 300Output:
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 1360Expected 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 FeatureOutput:
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 1360Expected effects
- Issue issueType.name is updated to match the --set-type argument
Remove issue type
Input:
$ gh issue edit 123 --remove-typeOutput:
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 1360Expected effects
- Issue issueType is null after removal
Error: --set-type and --remove-type mutually exclusive
Input:
$ gh issue edit 123 --set-type Bug --remove-typeOutput:
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 1360Set parent issue
Input:
$ gh issue edit 123 --set-parent 100Output:
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 1360Expected effects
- Issue parent field matches the --set-parent argument
Remove parent
Input:
$ gh issue edit 123 --remove-parentOutput:
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 1360Expected effects
- Issue parent field is null
Add sub-issues (comma-separated)
Input:
$ gh issue edit 100 --add-sub-issue 123,124,125Output:
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 1360Expected effects
- All specified issues appear in the target issue's subIssues list
Remove sub-issue
Input:
$ gh issue edit 100 --remove-sub-issue 123Output:
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 1360Expected 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-parentOutput:
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 1360Add and remove --blocked-by
Input:
$ gh issue edit 123 --add-blocked-by 200 --remove-blocked-by 201Output:
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 1360Expected 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,301Output:
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 1360Expected effects
- Issue blocking list includes the issues specified by --add-blocking
Remove --blocking
Input:
$ gh issue edit 123 --remove-blocking 300Output:
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 1360Expected effects
- Specified issue no longer appears in this issue's blocking list
Interactive metadata picker with new fields
Input:
$ gh issue edit 123Input:
$ {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 1360Output:
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 1360Input:
$ 100Output:
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 1360Output:
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 1360Expected effects
- Issue issueType.name is updated to "Bug"
- Issue parent is set to start on a manpage #100
Batch edit with --set-type
Input:
$ gh issue edit 123 124 125 --set-type BugOutput:
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 1360Expected 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 123Output:
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 1360Issue type (--json)
Input:
$ gh issue view 123 --json issueTypeOutput:
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 1360View with parent
Input:
$ gh issue view 123Output:
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 1360View with cross-repo parent
Input:
$ gh issue view 129Output:
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 1360Epic view — sub-issues with no parent
Input:
$ gh issue view 100Output:
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 1360Parent and sub-issues (--json)
Input:
$ gh issue view 123 --json parent,subIssues,subIssuesSummaryOutput:
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 1360View with relationships
Input:
$ gh issue view 123Output:
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 1360Blocked-by and blocking (--json)
Input:
$ gh issue view 123 --json blockedBy,blockingOutput:
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 1360Full view with all new fields populated
Input:
$ gh issue view 123Output:
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 1360Minimal view — unchanged from today
Input:
$ gh issue view 456Output:
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 1360Closed sub-issue with parent
Input:
$ gh issue view 124Output:
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 1360gh 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 BugOutput:
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 1360Combine --type with other filters
Input:
$ gh issue list --type Bug --state closed --label p1Output:
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
github-actions commentedon Apr 8, 2026
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 wantedContributions 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.
lemeurherve commentedon Apr 9, 2026
Is there a plan to support issue fields too? https://github.com/orgs/community/discussions/189141
BagToad commentedon Apr 10, 2026
@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.
CnkwebB commentedon Apr 14, 2026
dfaivre-pcs commentedon Apr 24, 2026
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. Thegh issue view --json subIssuesSummaryspec 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 whatgh issue create --parentwill likely wrap. Other users are seeing the same symptom.Not a blocker — flagging in case it's worth verifying the backend before shipping
--parentand--json subIssuesSummary, or noting in release notes until resolved.Investigation and comment drafted with Claude Code.
BagToad commentedon Jun 4, 2026
Completed in #13057.
pokui commentedon Aug 8, 2026
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.