gh-issue-report
Issue Report
Investigate a bug, confirm it hasn't been reported, optionally verify in source code, and file a structured issue — all in one workflow.
Arguments
/gh-issue-report— interactive: asks for repo and bug description/gh-issue-report <owner/repo> <description>— uses arguments directly
Phase 1: Intake
-
Resolve target repo:
- If argument includes
owner/repo, use it. - If the current directory is a git repo, offer it as default.
- Otherwise, ask.
- If argument includes
-
Bug description: If provided as argument, use it. Otherwise ask:
What bug are you seeing? Include steps to reproduce if you have them.
-
Determine repo locality:
- Check if the repo is cloned locally (look for matching remote in
git remote -vor check common paths). - Local: use file system tools (Read, Grep, Glob) for code investigation.
- Remote-only: use
gh apito fetch repo contents for code investigation.
- Check if the repo is cloned locally (look for matching remote in
Phase 2: Search Existing Issues
-
Search for duplicates using multiple query strategies in parallel:
gh issue list -R <repo> --state all --search "<keywords from description>" --limit 20Run 2-3 searches with different keyword combinations extracted from the bug description (e.g., key nouns, component names, error messages). Cast a wide net.
-
Evaluate matches:
- If a clear duplicate exists: show it to the user and ask whether to proceed or comment on the existing issue.
- If partial matches exist: show them and note the differences.
- If no matches: continue.
Phase 3: Check Repo Conventions
-
Fetch contributing guide and issue templates in parallel:
# Contributing guide gh api 'repos/<repo>/contents/CONTRIBUTING.md' --jq '.content' | base64 -d # Issue templates gh api 'repos/<repo>/contents/.github/ISSUE_TEMPLATE' --jq '.[].name'If issue templates exist, fetch the relevant one (usually
bug_report.mdorbug_report.yml):gh api 'repos/<repo>/contents/.github/ISSUE_TEMPLATE/<template>' --jq '.content' | base64 -d -
Extract conventions: note title prefix (e.g.,
[bug]), required labels, required sections, and any special instructions from the contributing guide.
Phase 4: Code Investigation
Adapt investigation depth based on what's achievable. Start lightweight; go deeper only when the lightweight pass yields promising leads.
-
Lightweight pass — identify relevant files:
For local repos:
Use Grep/Glob to find files matching component names, error messages, or keywords from the bug description.For remote repos:
gh api 'repos/<repo>/git/trees/main?recursive=1' --jq '.tree[].path' | grep -iE '<keywords>'If this yields no useful results (no matching files, or too many to be actionable), skip to Phase 5 and draft the issue without code-level root cause. Note in the issue body that root cause was not confirmed in code.
-
Deep investigation — if the lightweight pass found relevant files (< 10 candidates), read them to understand the bug:
For local repos: use Read tool directly.
For remote repos:
gh api 'repos/<repo>/contents/<path>' --jq '.content' | base64 -dUse subagents for parallel investigation when reading multiple files. Focus on:
- Where the relevant state is stored (React state, store, DB, etc.)
- What triggers the bug (lifecycle, navigation, race condition, etc.)
- Why the current implementation fails
-
Assess findings:
- Root cause confirmed: include it in the issue with file paths and line references.
- Suspected but unconfirmed: include as hypothesis, clearly labeled.
- Nothing actionable found: omit code analysis from the issue, describe only the observed behavior.
Phase 5: Draft Issue
-
Compose the issue following the repo's template and conventions:
Always include:
- Title: follow repo convention (e.g.,
[bug] ...), keep under 80 chars - Description: clear, concise explanation of the bug
- Steps to reproduce: numbered list
- Expected vs actual behaviour
Include when available:
- Root cause: with file paths and line references from Phase 4
- Suggested fix: if root cause is clear enough to propose a direction
- Environment: platform, version, relevant config
- Title: follow repo convention (e.g.,
-
Infer labels: fetch repo labels and match against the issue content:
gh label list -R <repo> --json name,description --jq '.[] | "\(.name)\t\(.description)"'Only use labels that exist on the repo. If the template specifies a label (e.g.,
bug), use it. -
Present draft to user:
Here's the issue I'll file. Want me to adjust anything?
Show the full title, labels, and body. Wait for approval.
Phase 6: File Issue
-
Create the issue:
gh issue create -R <repo> \ --title "<title>" \ --label "<labels>" \ --body "$(cat <<'EOF' <body> EOF )" -
Report result:
Filed: <issue-url>
More from jackchuka/skills
restaurant-search
Search for Japanese restaurants using the `hpp` CLI (HotPepper Gourmet API). Use when the user wants to find a restaurant, plan a dinner, search for izakayas, or book a group meal in Japan. Triggers on requests like "find a restaurant near Shibuya", "search for izakayas in 新宿", "restaurant for 10 people in 浜松町", "dinner spot near Tokyo station".
61claude-skill-prereq-audit
>
11software-design
Opinionated guide to software design principles and architectural patterns. Use when reviewing code design, planning feature architecture, asking "is this the right design?", "how should I structure this?", or requesting design philosophy guidance. Triggers on questions about SOLID, DRY, KISS, YAGNI, Clean Architecture, DDD, hexagonal architecture, composition vs inheritance, coupling, cohesion, or any software design trade-off discussion.
11claude-skill-spec-audit
>
11gh-oss-release-prep
>
11gh-oss-release
>
10