From claude-github-tools
Creates well-formed GitHub Issues through a structured discovery process. Trigger this skill whenever the user types /gh-create-issue, says "create a GitHub issue for...", "log this as an issue", "make a ticket for...", "add this to the backlog", or any similar request to track or file work in GitHub. This skill investigates the codebase and checks for overlapping issues/PRs before writing anything — always use it proactively so issues are well-scoped before they're created.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-github-tools:gh-create-issueThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Your job is to create a high-quality, well-scoped GitHub Issue. The goal isn't
Your job is to create a high-quality, well-scoped GitHub Issue. The goal isn't just to record a request — it's to understand what's really being asked, surface any conflicts or concerns, and produce an issue that's ready to act on. Work should never start unless the user explicitly asks.
If the user invoked the skill with no description, ask:
"What's the issue you'd like to create? A sentence or two is enough to get started."
If they provided a description, proceed directly to investigation.
Run all of these in parallel — don't wait for one to complete before starting the next.
README.md — understand purpose, stack, and conventionsCLAUDE.md (root, plus any subdirectory relevant to the topic) — pick
up project standards and constraintsdocs/, DESIGN.md, ADR.md, etc.) that
touch the issue area — note anything that may need updating if this work shipsRun these directly in parallel using gh:
# Search for overlap
gh issue list --repo <owner>/<repo> --search '<keywords from description>' --json number,title,state
# List all open issues
gh issue list --repo <owner>/<repo> --state open --json number,title,labels
# List all open PRs
gh pr list --repo <owner>/<repo> --state open --json number,title,headRefName
# Fetch available labels
gh label list --repo <owner>/<repo> --json name,description
If you find significant overlap, flag it before proceeding:
"I found an existing issue/PR that covers similar ground: #N — [title]. Would you like to proceed with a new issue, link to that one, or update it instead?"
The queries above fetch labels. For milestones, run:
gh api repos/<owner>/<repo>/milestones --jq '.[] | {number, title, state}'
Based on your investigation, ask the questions you need to understand the issue well. Group related questions together — don't interrogate one point at a time. Be direct if something seems off.
Think about:
After the user responds, iterate if you need to — but work toward alignment, not an interrogation. Once scope is clear, move to drafting.
When the user's description reveals a cross-repo or cross-team contract — "we need repo A to provide X for repo B to consume" — apply consumer-perspective framing rather than implementation prescription. The issue owner may be a separate team or a separate agent in the producer repo; overspecifying implementation removes their latitude to design a better solution.
Detection: The request sounds like "document what we need from [other repo]," "lay out the contract between X and Y," or "file an issue against [producer] describing what [consumer] requires."
How to frame the issue:
docs/CI_CONSUMPTION.md with section 2 listing the paths."docs/X.md exists." The producer can satisfy the behavioral requirement however they choose.Counter-indication: Do not use this framing when the user wants prescriptive control ("make the doc look exactly like this template") or when the producer and consumer are the same person or agent. The pattern's value is in respecting cross-boundary autonomy.
Use this structure. Omit sections that don't apply to this issue.
## Summary
One or two sentences: what this is and why it matters.
## Context
Background, motivation, or related work. Why now? Who's affected?
## Acceptance Criteria
- [ ] Specific, testable criteria for "done"
- [ ] Include doc/README updates if the change affects setup, usage, or the
project spec
## Technical Notes
Relevant files, suggested approach, constraints, edge cases.
## Out of Scope
What this issue explicitly does NOT cover.
Select from the repo's existing labels. Aim for 1–3 that are precise and accurate — don't over-tag.
If this issue is clearly part of a broader initiative that will span multiple issues, suggest a milestone:
"This feels like it's part of a larger [X] effort. Want to assign it to an existing milestone, or create a new one?"
If it's a standalone issue, no milestone is needed — don't suggest one just to suggest one.
If the issue's work would affect any project spec files — README, technical docs, ADRs — include that explicitly in the Acceptance Criteria. Don't let those updates get treated as optional.
Present the full draft (body + labels + milestone recommendation) to the user and ask for approval before creating anything.
Once the user approves, create the issue using your configured GitHub MCP write tool if one is present (the model resolves the exact tool name, which varies by install), otherwise fall back to the gh CLI:
gh issue create --repo <owner>/<repo> --title "<title>" --body-file <file> --label <l1> --label <l2>
Write the body to a temp file rather than passing it inline, to avoid shell-escaping and encoding pitfalls. Apply the agreed labels and milestone.
Confirm with the issue number and URL.
After confirming creation, ask once:
"Would you like me to start working on this now?"
If yes, proceed. If no, stop. Never start working without a clear yes.
When the draft issue body would render as more than 40 lines of markdown — common for feat: and chore(standards): issues with full Acceptance Criteria, Technical Notes, and Out-of-Scope sections — save the draft to <git-toplevel>/.tmp/<YYYY-MM-DD>-issue-<slug>.md before Phase 4 (Draft the Issue) and present a short chat preview: title, labels, milestone recommendation, one-paragraph summary, and the file path. The user reads the file to approve the full body. After approval, the body is posted via gh issue create --body-file <path> (or the configured MCP tool's structured body field); the GitHub issue body becomes the durable record.
When an issue body is long, always write it to a .tmp/ file under the repo root and pass it via --body-file <path> instead of embedding it inline in chat — this keeps the conversation readable and sidesteps shell-escaping and encoding problems. For large payloads above ~30 KB, this pattern is mandatory: never inline a body of that size in a shell command.
npx claudepluginhub davepoon/buildwithclaude --plugin claude-github-toolsGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.