From buehler
Use when reporting a bug, filing an issue, investigating a problem, fixing an already-investigated issue, or quickly capturing a backlog idea — supports fast ad-hoc issue capture with an explicit gate before investigation, duplicate detection, root-cause investigation, severity/priority recommendation, stabilization tracking, and lightweight backlog capture
How this skill is triggered — by the user, by Claude, or both
Slash command
/buehler:issueThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Type:** Rigid. Follow this process exactly.
Type: Rigid. Follow this process exactly.
/issue is usually invoked mid-session while the user is doing other work. Submission must be fast — parse, dedup, create, report, then stop. Investigation is expensive and must never run until the user explicitly asks for it via the AskUserQuestion gate in Step 5.
Never spawn the investigator agent before Step 5. Never run systematic debugging during capture.
This skill has three modes:
Capture (default) — /issue {description}
Human describes a bug, enhancement, or problem. The skill captures it as a GitHub issue fast, then asks the user whether to enrich with a description, run an investigation, both, or stop.
Fix — /issue fix #{issue_number}
For an already-investigated issue. The skill executes a TDD fix.
Backlog — /issue backlog "idea title" or /issue backlog {tier} "idea title"
Quick capture of a backlog idea with an explicit tier. No milestone, no investigation option, no dedup. Tier is now, next, later (default), or icebox.
You MUST create a task for each of these items and complete them in order:
AskUserQuestion (Step 5)Read .github/buehler.yaml from the project root. Extract:
owner and repo from git remotebase_branch (default: main)test_command, lint_command, build_command (needed later if investigation is chosen)Fetch open milestones:
gh api repos/{owner}/{repo}/milestones?state=open --jq '.[] | "\(.number)\t\(.title)"'
Read preflight capability flags from the PreToolUse hook's additionalContext (JSONL):
repo.issue_types — pass/failrepo.sub_issues — pass/failFrom the human's description, extract without invoking any agent:
type:bug if the description mentions broken/crash/error/failing behavior; type:task if it's an enhancement, refactor, or improvement. Default to type:bug if ambiguous.#N), find which milestone they belong to.gh issue list --repo {owner}/{repo} --milestone "{milestone_title}" \
--search "\"Stabilization: {milestone_title}\" in:title" \
--json number,title --jq '.[0].number'
Keep this step cheap — no file reads, no code search, no debugging. You are only parsing the human's text plus a couple of gh API calls.
Do a single fast search — do NOT invoke an agent and do NOT read candidate issue bodies in depth.
gh issue list --repo {owner}/{repo} --state open \
--search "{keywords from title}" \
--json number,title --limit 5
"This looks similar to #{N} — {title}. Attach your context as a comment on that issue instead? (yes / no — create a new one)"
yes: gh issue comment {N} --body "{human description}" and stop. Report Added context to #{N}.no: proceed to Step 4.Create the GitHub Issue with a placeholder body. This is a fast capture — do not enrich yet.
For type:bug:
gh issue create --repo {owner}/{repo} \
--title "{concise_title}" \
--milestone "{milestone_title}" \
--label "type:bug" \
--body "$(cat <<'BODY'
**Parent:** #{stabilization_ticket_number_or_parent_story_or_none}
## Initial Report
{human description — verbatim}
## Fix Guidance
<!-- Investigation pending — run `/issue` investigation gate to populate -->
BODY
)"
For type:task:
gh issue create --repo {owner}/{repo} \
--title "{concise_title}" \
--milestone "{milestone_title}" \
--label "type:task" \
--body "$(cat <<'BODY'
## Objective
{one sentence derived from the human's description}
## Initial Report
{human description — verbatim}
## Investigation
<!-- Investigation pending — run `/issue` investigation gate to populate -->
BODY
)"
If in stabilization context, link as sub-issue of the stabilization ticket:
# If Sub-issues API available:
gh api graphql -f query='mutation { addSubIssue(input: {issueId: "{stabilization_ticket_node_id}", subIssueId: "{new_issue_node_id}"}) { issue { id } } }'
# Fallback: include <!-- buehler:parent #{stabilization_ticket_number} --> in the body
Capture the new issue number. Report to the human in one line:
Captured #{issue_number}: {title}(milestone: {milestone_title or "none"}, type: {type})
This is the hard gate. Invoke AskUserQuestion exactly once with these options:
questions:
- question: "Issue #{issue_number} is captured. What would you like to do next?"
header: "Next step"
multiSelect: false
options:
- label: "Add description"
description: "I'll ask you for details and update the issue body. No investigation."
- label: "Run investigation"
description: "Spawn the investigator agent to find root cause and recommend severity/priority."
- label: "Both"
description: "Add a description first, then run the investigation."
- label: "Done — leave as-is"
description: "Keep the fast-capture body. You can run investigation later with `/issue` on the same description."
Do not proceed past this gate without a user selection. Do not spawn the investigator unless the user chose "Run investigation" or "Both".
If "Done — leave as-is":
If "Add description":
gh issue edit {issue_number} --repo {owner}/{repo} --body "{updated_body}"
If "Run investigation":
skills/issue/investigator-prompt.md{placeholders} with values from Steps 1–4, including {issue_number}, {issue_title}, {issue_type}, and {milestone_title}{interactive_flag} to trueAgent tool:
subagent_type: "buehler:investigator"
prompt: {filled_prompt}
Investigation complete for #{issue_number}.
Recommended severity: {severity_recommendation}
Recommended priority: {priority_recommendation}
Reasoning: {reasoning}
Blast radius: {blast_radius}
Fix mode: {fix_mode} (auto-detected)
Proposed fix: {proposed_fix}
Apply these labels? (yes / override with different values / skip)
gh issue edit --add-labelIf "Both":
/issue fix #N)gh issue view {issue_number} --repo {owner}/{repo} --json body,title,labels,milestone
Verify the issue has investigation findings (Fix Guidance or Investigation section populated, not the <!-- Investigation pending --> placeholder). If not investigated yet, tell the human: "This issue hasn't been investigated yet. Run /issue on the same description and choose 'Run investigation' at the gate, or manually add investigation findings to the issue body."
Extract: root cause, affected files, proposed fix approach, severity, priority.
Auto-detect vibe vs PR mode:
# Check branch protection
gh api repos/{owner}/{repo}/branches/{base_branch}/protection 2>/dev/null
gh api repos/{owner}/{repo} --jq '.permissions.push'
Tell the human which mode was detected and what will happen.
Vibe mode:
superpowers:test-driven-developmentsuperpowers:verification-before-completionfix: {description} (Fixes #{issue_number})gh issue close {issue_number} --repo {owner}/{repo} --reason completed
PR mode:
fix/{issue_number}-{slug}superpowers:test-driven-developmentsuperpowers:verification-before-completionfix: {description}gh pr create --title "Fix #{issue_number}: {title}" \
--body "Fixes #{issue_number}
## Root Cause
{from investigation}
## Fix
{what was changed}
## Test Plan
- [ ] New test reproduces the issue
- [ ] Fix makes the test pass
- [ ] Full test suite passes with no regressions"
Fixes #N reference./issue backlog "idea title")now, next, later (default), icebox/issue backlog "add rate limiting to public API"
/issue backlog now "fix onboarding flow before launch"
/issue backlog icebox "explore GraphQL migration"
Parse the arguments after backlog:
now, next, later, or icebox, use it as the tier. The rest is the title.later. Everything after backlog is the title.Read owner/repo from git remote:
gh repo view --json owner,name --jq '.owner.login + "/" + .name'
Create the issue:
gh issue create --repo {owner}/{repo} \
--title "{title}" \
--label "backlog:{tier}" --label "type:task" \
--body ""
Capture the issue number from the output.
Report: Backlog item #{number} created with backlog:{tier}
Ask the user: "Want to add any detail to the description for later?"
gh issue edit {number} --repo {owner}/{repo} --body "{user_input}"
AskUserQuestion gate (backlog mode is already fast-capture by contract)Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Applies a firm's KYC/AML rules grid to parsed onboarding records: assigns risk rating, checks required documents, outputs rule outcomes with citations, and routes for escalation.
Generates daily or weekly digests of activity from connected sources (chat, email, docs, tasks, CRM), highlighting action items, decisions, mentions, and project updates.
npx claudepluginhub corrigantj/buehler --plugin buehler