| name | issue-management |
| description | Work with GitHub issues - create, list, update, comment, and search issues using gh CLI |
GitHub Issue Management Skill
This skill provides comprehensive issue management operations including creating, listing, updating, and commenting on GitHub issues.
Available Operations
1. Create Issue
Create a new issue in a repository with title, body, labels, and assignees.
2. List Issues
List issues with various filters (state, labels, assignee, etc.).
3. Get Issue
Retrieve details of a specific issue.
4. Update Issue
Update issue properties like title, body, state, labels, or assignees.
5. Add Comment
Add a comment to an existing issue.
6. Search Issues
Search for issues across repositories.
Usage Examples
Create a New Issue
Basic issue:
gh issue create --repo owner/repo-name --title "Bug: Login not working" --body "Users cannot log in with valid credentials"
Issue with labels:
gh issue create --repo owner/repo-name \
--title "Feature: Add dark mode" \
--body "Add dark mode support to the application" \
--label "enhancement" \
--label "ui"
Issue with assignee:
gh issue create --repo owner/repo-name \
--title "Fix memory leak" \
--body "Memory usage increases over time" \
--label "bug" \
--assignee username
Interactive mode:
gh issue create --repo owner/repo-name
# Follow the prompts to enter title and body
From template:
gh issue create --repo owner/repo-name --template bug_report.md
List Issues
List all open issues:
gh issue list --repo owner/repo-name
List all issues (including closed):
gh issue list --repo owner/repo-name --state all
Filter by label:
gh issue list --repo owner/repo-name --label bug
Multiple labels (AND):
gh issue list --repo owner/repo-name --label bug --label critical
Filter by assignee:
gh issue list --repo owner/repo-name --assignee username
Filter by author:
gh issue list --repo owner/repo-name --author username
Limit results:
gh issue list --repo owner/repo-name --limit 50
Custom output format:
gh issue list --repo owner/repo-name --json number,title,state,labels --jq '.[] | "\(.number): \(.title)"'
Get Issue Details
View issue in terminal:
gh issue view 123 --repo owner/repo-name
View with comments:
gh issue view 123 --repo owner/repo-name --comments
View in browser:
gh issue view 123 --repo owner/repo-name --web
JSON output:
gh issue view 123 --repo owner/repo-name --json number,title,body,state,labels,assignees,createdAt
Update an Issue
Change issue state to closed:
gh issue close 123 --repo owner/repo-name
Close with comment:
gh issue close 123 --repo owner/repo-name --comment "Fixed in PR #456"
Reopen issue:
gh issue reopen 123 --repo owner/repo-name
Edit issue title and body:
gh issue edit 123 --repo owner/repo-name \
--title "Updated title" \
--body "Updated description"
Add labels:
gh issue edit 123 --repo owner/repo-name --add-label "needs-triage"
Remove labels:
gh issue edit 123 --repo owner/repo-name --remove-label "needs-triage"
Add assignees:
gh issue edit 123 --repo owner/repo-name --add-assignee user1,user2
Remove assignees:
gh issue edit 123 --repo owner/repo-name --remove-assignee user1
Interactive edit:
gh issue edit 123 --repo owner/repo-name
Add Comment to Issue
Add simple comment:
gh issue comment 123 --repo owner/repo-name --body "This is my comment"
Add multi-line comment:
gh issue comment 123 --repo owner/repo-name --body "First line
Second line
Third line"
Comment from file:
gh issue comment 123 --repo owner/repo-name --body-file comment.md
Interactive comment:
gh issue comment 123 --repo owner/repo-name
# Opens editor for comment
Search Issues
Search across all repositories:
gh search issues "memory leak" --limit 20
Search in specific repository:
gh search issues "bug" --repo owner/repo-name
Search with filters:
gh search issues "crash" --label bug --state open --limit 10
Search by author:
gh search issues "feature" --author username
Search by date:
gh search issues "security" --created ">2025-01-01"
Search in organization:
gh search issues "todo" --owner myorg
Complex query:
gh search issues "is:open label:bug assignee:username"
Common Patterns
Triage Workflow
# List new untriaged issues
gh issue list --repo owner/repo-name --label "needs-triage" --state open
# Review an issue
gh issue view 123 --repo owner/repo-name
# Add labels and assign
gh issue edit 123 --repo owner/repo-name \
--add-label "bug" \
--add-label "high-priority" \
--remove-label "needs-triage" \
--add-assignee developer1
# Add triage comment
gh issue comment 123 --repo owner/repo-name --body "Confirmed bug. High priority for next sprint."
Bug Report Processing
# Create bug from template
gh issue create --repo owner/repo-name \
--title "Bug: API returns 500 error" \
--body "$(cat bug-details.md)" \
--label "bug" \
--label "api"
# Get issue number from output, e.g., #456
# Link to related issue
gh issue comment 456 --repo owner/repo-name --body "Related to #123"
# Update when fixed
gh issue close 456 --repo owner/repo-name --comment "Fixed in commit abc123"
Bulk Operations
Close multiple stale issues:
# List stale issues
gh issue list --repo owner/repo-name --label "stale" --state open --json number --jq '.[].number' > stale_issues.txt
# Close each one
while read issue_num; do
gh issue close $issue_num --repo owner/repo-name --comment "Closing stale issue"
done < stale_issues.txt
Add label to multiple issues:
for issue in 101 102 103 104; do
gh issue edit $issue --repo owner/repo-name --add-label "sprint-3"
done
Issue Templates
Create from bug template:
gh issue create --repo owner/repo-name --template bug_report.md --web
Create from feature template:
gh issue create --repo owner/repo-name --template feature_request.md --web
Error Handling
Issue Not Found
# Check if issue exists
gh issue view 123 --repo owner/repo-name 2>&1 | grep -q "could not find" && echo "Issue not found"
Invalid Label
# List available labels first
gh label list --repo owner/repo-name
# Then create issue with valid label
gh issue create --repo owner/repo-name --title "Test" --body "Test" --label "valid-label"
Permission Denied
# Check repository access
gh auth status
# Verify you have write access
gh api repos/owner/repo-name --jq '.permissions'
Best Practices
- Use descriptive titles: Make titles clear and searchable
- Add relevant labels: Use labels for categorization and filtering
- Assign appropriately: Only assign when someone is actively working on it
- Link related issues: Reference related issues with #123 syntax
- Close with context: Always add a comment when closing issues
- Use templates: Create issue templates for consistency
- Regular triage: Review and label new issues regularly
- Track progress: Use project boards or milestones to track issue progress
Issue State Transitions
[Open] -> [Closed] # gh issue close
[Closed] -> [Open] # gh issue reopen
[Open] -> [In Progress] # Add label/project card
[In Progress] -> [Closed] # Complete work and close
Integration with Other Skills
- Use
repository-managementto create repos before creating issues - Use
pull-request-managementto link PRs that fix issues - Use
search-operationsfor advanced cross-repository issue searches - Use
commit-operationsto reference commits that address issues