Skip to content

Instantly share code, notes, and snippets.

@rvanbaalen
Last active January 28, 2026 14:38
Show Gist options
  • Select an option

  • Save rvanbaalen/b46cc4f04149f04191bb555aadc7901c to your computer and use it in GitHub Desktop.

Select an option

Save rvanbaalen/b46cc4f04149f04191bb555aadc7901c to your computer and use it in GitHub Desktop.
Make Issue Skill for Claude Code - Smart GitHub issue creation

Make Issue Skill for Claude Code

A Claude Code skill that streamlines GitHub issue creation with smart label suggestions and issue type support.

Features

  • Automatically detects and uses repository issue templates
  • Fetches available issue types (GitHub Projects)
  • Smart label suggestions based on issue content
  • Groups labels by category for easy selection
  • Creates issues in a single API call with all metadata

Installation

Quick Install

curl -fsSL https://gist.githubusercontent.com/rvanbaalen/b46cc4f04149f04191bb555aadc7901c/raw/install.sh | bash

Manual Install

  1. Download SKILL.md from this gist
  2. Place it at ~/.claude/skills/make-issue/SKILL.md
mkdir -p ~/.claude/skills/make-issue
curl -fsSL https://gist.githubusercontent.com/rvanbaalen/b46cc4f04149f04191bb555aadc7901c/raw/SKILL.md -o ~/.claude/skills/make-issue/SKILL.md

Usage

In Claude Code, run:

/make-issue <brief description of the issue>

Examples

/make-issue login button not working on mobile Safari
/make-issue add dark mode support to settings page
/make-issue memory leak in websocket connection handler

How It Works

  1. Fetches repository metadata, issue types, and labels in parallel
  2. Prompts you to select an issue template (if available)
  3. Prompts you to select an issue type (if available)
  4. Suggests relevant labels and lets you choose from categorized groups
  5. Creates the issue with all selected options in a single request

Requirements

Uninstall

curl -fsSL https://gist.githubusercontent.com/rvanbaalen/b46cc4f04149f04191bb555aadc7901c/raw/install.sh | bash -s -- --uninstall

Or manually:

rm -rf ~/.claude/skills/make-issue

License

MIT


Created by Robin van Baalen

#!/usr/bin/env bash
#
# Make Issue Skill Installer for Claude Code
# Created by Robin van Baalen (https://robinvanbaalen.nl)
#
set -e
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
MAGENTA='\033[0;35m'
CYAN='\033[0;36m'
BOLD='\033[1m'
DIM='\033[2m'
NC='\033[0m' # No Color
# Config
SKILL_NAME="make-issue"
INSTALL_DIR="$HOME/.claude/skills/$SKILL_NAME"
INSTALL_PATH="$INSTALL_DIR/SKILL.md"
GIST_RAW_URL="https://gist.githubusercontent.com/rvanbaalen/b46cc4f04149f04191bb555aadc7901c/raw/SKILL.md"
# ASCII Art
print_header() {
echo -e "${CYAN}"
echo " ┌─────────────────────────────────────────┐"
echo " │ │"
echo -e " │ ${BOLD}Make Issue${NC}${CYAN} Skill for Claude Code │"
echo " │ │"
echo " └─────────────────────────────────────────┘"
echo -e "${NC}"
}
print_footer() {
echo -e "${DIM}─────────────────────────────────────────────${NC}"
echo -e "${DIM}Created by Robin van Baalen • robinvanbaalen.nl${NC}"
echo ""
}
# Status indicators
info() {
echo -e "${BLUE}ℹ${NC} $1"
}
success() {
echo -e "${GREEN}✓${NC} $1"
}
warn() {
echo -e "${YELLOW}⚠${NC} $1"
}
error() {
echo -e "${RED}✗${NC} $1"
}
step() {
echo -e "${MAGENTA}▸${NC} $1"
}
# Check dependencies
check_dependencies() {
local missing=()
if ! command -v curl &> /dev/null; then
missing+=("curl")
fi
if ! command -v gh &> /dev/null; then
missing+=("gh (GitHub CLI)")
fi
if [ ${#missing[@]} -gt 0 ]; then
error "Missing dependencies: ${missing[*]}"
echo ""
info "Please install the missing dependencies and try again."
exit 1
fi
}
# Install function
install() {
print_header
echo -e "${BOLD}Installing...${NC}"
echo ""
# Check dependencies
step "Checking dependencies..."
check_dependencies
success "Dependencies found"
# Create directory
step "Creating skill directory..."
if [ ! -d "$INSTALL_DIR" ]; then
mkdir -p "$INSTALL_DIR"
success "Created $INSTALL_DIR"
else
success "Directory exists"
fi
# Check for existing installation
if [ -f "$INSTALL_PATH" ]; then
warn "Existing installation found"
echo -e " ${DIM}Backing up to ${INSTALL_PATH}.bak${NC}"
cp "$INSTALL_PATH" "${INSTALL_PATH}.bak"
fi
# Download skill file
step "Downloading skill..."
if curl -fsSL "$GIST_RAW_URL" -o "$INSTALL_PATH" 2>/dev/null; then
success "Downloaded successfully"
else
# Fallback: try to copy from local if running from gist directory
if [ -f "SKILL.md" ]; then
cp "SKILL.md" "$INSTALL_PATH"
success "Installed from local file"
else
error "Failed to download skill"
exit 1
fi
fi
echo ""
echo -e "${GREEN}${BOLD}Installation complete!${NC}"
echo ""
echo -e " ${DIM}Installed to:${NC} $INSTALL_PATH"
echo ""
echo -e " ${BOLD}Usage:${NC}"
echo -e " ${CYAN}/make-issue${NC} ${DIM}<brief description>${NC}"
echo ""
echo -e " ${BOLD}Example:${NC}"
echo -e " ${CYAN}/make-issue${NC} login button broken on Safari"
echo ""
print_footer
}
# Uninstall function
uninstall() {
print_header
echo -e "${BOLD}Uninstalling...${NC}"
echo ""
if [ -d "$INSTALL_DIR" ]; then
step "Removing skill directory..."
rm -rf "$INSTALL_DIR"
success "Removed $INSTALL_DIR"
echo ""
echo -e "${GREEN}${BOLD}Uninstall complete!${NC}"
else
warn "Skill not found at $INSTALL_DIR"
echo ""
info "Nothing to uninstall"
fi
echo ""
print_footer
}
# Show help
show_help() {
print_header
echo -e "${BOLD}Usage:${NC}"
echo " ./install.sh Install the skill"
echo " ./install.sh --uninstall Uninstall the skill"
echo " ./install.sh --help Show this help"
echo ""
echo -e "${BOLD}Or via curl:${NC}"
echo " curl -fsSL <url>/install.sh | bash"
echo " curl -fsSL <url>/install.sh | bash -s -- --uninstall"
echo ""
print_footer
}
# Main
case "${1:-}" in
--uninstall|-u)
uninstall
;;
--help|-h)
show_help
;;
*)
install
;;
esac
name description
make-issue
Create a new GitHub issue based on the $ARGUMENTS input from the user.

You're going to create a new GitHub issue based on the $ARGUMENTS input from the user.

The user has briefly described the issue in the $ARGUMENTS.

Procedure

1. Gather Repository Info

Run these commands in parallel to collect all necessary data upfront:

  • Check for issue templates in .github/ISSUE_TEMPLATE/
  • Get repo metadata: gh repo view --json owner,name,id
  • Fetch available issue types:
    gh api graphql -f query='
      query($owner: String!, $name: String!) {
        repository(owner: $owner, name: $name) {
          issueTypes(first: 20) {
            nodes {
              id
              name
              description
            }
          }
        }
      }
    ' -f owner='{owner}' -f name='{repo}'
  • Fetch all available labels:
    gh label list --limit 100 --json name,description,color
    If the repository has more than 100 labels, increase the limit or paginate.

2. Template Selection

If issue templates are available, ask the user which template to use.

3. Issue Type Selection

If issue types are available, present them using AskUserQuestion and let the user select one.

4. Label Selection

Analyze the issue content and auto-suggest relevant labels:

  • Group labels by category/prefix (e.g., "type:", "priority:", "area:", "status:")
  • For each category, use AskUserQuestion with multiSelect enabled
  • Always show your auto-suggested labels and indicate which ones you recommend
  • Make sure to cover ALL available labels across multiple questions if needed

5. Write the Issue

Write the issue concise and to the point but with enough working information and context.

6. Create the Issue

Create the issue in a single request with all selected labels.

With issue type:

gh api graphql -f query='
  mutation($repositoryId: ID!, $title: String!, $body: String!, $issueTypeId: ID!, $labelIds: [ID!]) {
    createIssue(input: {repositoryId: $repositoryId, title: $title, body: $body, issueTypeId: $issueTypeId, labelIds: $labelIds}) {
      issue {
        number
        url
      }
    }
  }
' -f repositoryId='{repoId}' -f title='{title}' -f body='{body}' -f issueTypeId='{selectedIssueTypeId}' -f labelIds='["{labelId1}","{labelId2}"]'

Without issue type:

gh issue create --title '{title}' --body '{body}' --label 'label1,label2'

7. Provide Link

Provide a link to the newly created issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment