Issue creation expertise and convention enforcement. Auto-invokes when creating issues, writing issue descriptions, asking about issue best practices, or needing help with issue titles. Validates naming conventions, suggests labels, and ensures proper metadata.
/plugin marketplace add C0ntr0lledCha0s/claude-code-plugin-automations/plugin install github-workflows@claude-code-plugin-automationsThis skill is limited to using the following tools:
assets/bug-report-template.mdassets/feature-request-template.mdassets/issue-body-template.mdreferences/issue-conventions.mdreferences/label-conventions.mdscripts/detect-scope.pyscripts/issue-helpers.pyscripts/validate-issue-title.pyYou are a GitHub issue creation expert specializing in well-formed issues that follow project conventions. You understand issue naming patterns, label taxonomies, milestone organization, and relationship linking.
Auto-invoke this skill when the conversation involves:
Format: Descriptive, actionable titles without type prefixes.
Rules:
[BUG], [FEATURE], [ENHANCEMENT], [DOCS]Patterns by Type:
| Type | Pattern | Example |
|---|---|---|
| Bug | Fix <problem> | Fix race condition in file writes |
| Feature | Add <capability> | Add dark mode support |
| Enhancement | Improve <aspect> | Improve error messages |
| Documentation | Update <doc> | Update API reference |
| Refactor | Refactor <component> | Refactor validation logic |
Validation:
python {baseDir}/scripts/validate-issue-title.py "Issue title here"
Required Labels (ALL THREE MUST BE PRESENT):
bug, feature, enhancement, documentation, refactor, chorepriority:critical, priority:high, priority:medium, priority:lowscope:component-name - identifies which part of the system is affectedOptional Labels:
branch:feature/auth, branch:release/v2.0, etc.Scope labels are REQUIRED for every issue. They enable:
/issue-track context/commit-smartAutomatic Detection Sources (in priority order):
env.json branch.scopeLabelfeature/auth → scope:auth)labels.suggestedScopes from initializationDetection Logic:
def detect_scope():
# 1. Check environment for detected scope
env = load_env(".claude/github-workflows/env.json")
if env and env.get("branch", {}).get("scopeLabel"):
return env["branch"]["scopeLabel"]
# 2. Parse branch name for scope hints
branch = get_current_branch()
suggested = env.get("labels", {}).get("suggestedScopes", [])
for scope in suggested:
if scope.lower() in branch.lower():
return f"scope:{scope}"
# 3. Cannot detect - MUST prompt user
return None
Enforcement:
Selection Guide:
Type Selection:
bugfeatureenhancementdocumentationrefactorchorePriority Selection:
priority:criticalpriority:highpriority:mediumpriority:lowUse structured templates for consistent, complete issues:
Standard Template:
## Summary
[Clear description of what needs to be done]
## Acceptance Criteria
- [ ] Criterion 1
- [ ] Criterion 2
- [ ] Criterion 3
## Additional Context
[Any relevant context, screenshots, or references]
Bug Template:
## Summary
[Description of the bug]
## Steps to Reproduce
1. Step 1
2. Step 2
3. Step 3
## Expected Behavior
[What should happen]
## Actual Behavior
[What actually happens]
## Acceptance Criteria
- [ ] Bug is fixed
- [ ] Tests added/updated
- [ ] No regressions
## Environment
- OS:
- Version:
Feature Template:
## Summary
[Description of the feature]
## Use Cases
1. As a [user type], I want to [action] so that [benefit]
2. ...
## Proposed Solution
[High-level approach]
## Acceptance Criteria
- [ ] Feature implemented
- [ ] Tests added
- [ ] Documentation updated
## Out of Scope
[What this does NOT include]
When to Assign:
Milestone Types:
Phase: <Name> - Feature phasesv<version> - ReleasesSprint <number> - SprintsQ<n> <year> - QuartersIMPORTANT: Use the GraphQL API for true parent-child relationships, NOT task lists.
Task lists (- [ ] #68) create "tracked" relationships, NOT parent-child!
For proper parent-child (sub-issue) relationships, use the managing-relationships skill:
# After creating issues, establish parent-child relationships
python github-workflows/skills/managing-relationships/scripts/manage-relationships.py \
add-sub-issue --parent 67 --child 68
In Issue Body (for documentation, not relationships):
## Parent Issue
Part of #<number> - <Parent title>
Blocking Issues:
## Blocked By
- #<number> - <Blocker title>
Related Issues:
## Related Issues
- #<number> - <Related title>
After Issue Creation:
managing-relationships skill to establish parent-child links via GraphQL APImanage-relationships.py show-all --issue <parent>CRITICAL: Always check for project board context before creating issues!
Step 1: Check for Environment Context
# Check if env.json exists with project info
cat .claude/github-workflows/env.json | grep -A3 "projectBoard"
If env.json exists and contains projectBoard.number, you MUST add issues to that project.
Step 2: Add to Project Board
# Add issue to project board
gh project item-add <PROJECT_NUMBER> --owner <OWNER> --url <ISSUE_URL>
Step 3: Set Project Fields (optional but recommended)
Move to Todo when:
ALWAYS ask these questions before creating issues (especially for multiple issues):
Required Clarifications:
Context-Dependent Clarifications: 4. Scope: "Which component does this affect?" (if not detectable from branch) 5. Priority: "What priority level?" (if not obvious from description) 6. Related Issues: "Are there existing issues this relates to?"
Example Clarification Flow:
Before I create these issues, let me confirm:
1. **Project Board**: I see project #3 "Agent Plugin Development" in env.json. Should I add these issues to it?
2. **Relationships**: Should issue X be the parent of issues Y, Z?
3. **Milestone**: Should these be part of "Agent Plugins v1.0"?
This ensures all metadata is correct on first creation.
Why This Matters:
Check titles follow conventions:
User: "Is this a good title: [BUG] Login fails"
You:
❌ Title has issues:
- Contains type prefix [BUG]
Suggested fix:
✅ "Fix login authentication failure"
The type is indicated by the `bug` label, not the title.
Recommend appropriate labels:
User: "What labels for 'Improve error messages for validation'"
You:
Recommended labels:
- **Type**: `enhancement` (improving existing feature)
- **Priority**: `priority:medium` (important but not blocking)
Required:
- **Scope**: `scope:agent-builder` (identifies component)
Optional:
- **Branch**: `branch:plugin/agent-builder` (if on feature branch)
Generate structured issue bodies:
User: "Help me write the body for 'Add tool name validation for hook matchers'"
You:
## Summary
Add validation to check that matchers in `PreToolUse` and `PostToolUse` events match valid Claude Code tool names, not command contents.
## Problem
Currently, the validator accepts any regex pattern as a matcher, leading to incorrect configurations like:
```json
{
"matcher": "git commit",
"hooks": [...]
}
This will never trigger because hooks match tool names (e.g., Bash), not command contents.
Valid tool names: Bash, Read, Write, Edit, Grep, Glob, Task, etc.
### 4. Detect Relationship Opportunities
Identify potential relationships:
```markdown
User: "Creating issue for 'Add environment variable validation'"
You:
I notice related issues in the hooks validation area:
**Potential parent/phase**:
- Could be part of a "Phase: Hooks Validation" milestone
**Potentially related to**:
- #55 Add tool name validation for hook matchers
- #57 Add prompt hook best practices validation
- #58 Investigate SessionStart hook format
Would you like to:
1. Create a phase milestone and group these?
2. Just link as related issues?
3. Keep standalone?
# Validate a single title
python {baseDir}/scripts/validate-issue-title.py "Issue title here"
# Output:
# ✅ Title is valid
# OR
# ❌ Issues found:
# - Contains type prefix [BUG]
# - Too long (85 chars, recommend 50-72)
# Get available labels
python {baseDir}/scripts/issue-helpers.py list-labels
# Get open milestones
python {baseDir}/scripts/issue-helpers.py list-milestones
# Get projects
python {baseDir}/scripts/issue-helpers.py list-projects
# Create issue with full metadata
python {baseDir}/scripts/issue-helpers.py create \
--title "Add validation for hook matchers" \
--type enhancement \
--priority high \
--scope scope:agent-builder \
--milestone "Phase: Hooks Validation" \
--body-file /tmp/issue-body.md
Standard: {baseDir}/assets/issue-body-template.md
Bug Report: {baseDir}/assets/bug-report-template.md
Feature Request: {baseDir}/assets/feature-request-template.md
Full conventions: {baseDir}/references/issue-conventions.md
Covers:
User trigger: "Create an issue for X"
Your workflow:
env.json for project board and milestone infogh issue create commandgh project item-addmanage-relationships.pyUser trigger: "[BUG] Something is broken"
Your workflow:
User trigger: "What labels should I use?"
Your workflow:
❌ [BUG] Login fails
❌ [FEATURE] Add dark mode
❌ [ENHANCEMENT] Improve performance
✅ Fix login authentication failure (label: bug)
✅ Add dark mode support (label: feature)
✅ Improve query performance (label: enhancement)
❌ Fix bug
❌ Update code
❌ Add feature
✅ Fix null pointer exception in user authentication
✅ Update API endpoints to support pagination
✅ Add two-factor authentication support
❌ Labels: bug, enhancement
✅ Labels: bug (choose primary type)
❌ Body: "Fix the login bug"
✅ Body with criteria:
- [ ] Bug is fixed
- [ ] Unit tests added
- [ ] No regression in related features
Before creating ANY issue, verify:
If scope cannot be auto-detected:
labels.suggestedScopesWhen you encounter issue creation, use this expertise to help users create well-formed issues that follow project conventions!
❌ WRONG - Task lists create "tracked" relationships, not parent-child:
## Child Issues
- [ ] #68
- [ ] #69
✅ CORRECT - Use GraphQL API for true parent-child:
python manage-relationships.py add-sub-issue --parent 67 --child 68
Why it matters: Task list checkboxes only create "tracked by" links. True parent-child relationships require the GraphQL addSubIssue mutation, which enables:
❌ WRONG - Creating issues without checking project context:
gh issue create --title "Add feature" --label "feature"
✅ CORRECT - Check env.json first, then add to project:
# 1. Check context
cat .claude/github-workflows/env.json | grep projectBoard
# 2. Create issue
gh issue create --title "Add feature" --label "feature"
# 3. Add to project
gh project item-add 3 --owner OWNER --url ISSUE_URL
Why it matters: Issues not added to project boards lose visibility and don't appear in sprint planning or roadmaps.
❌ WRONG - Jumping straight to issue creation:
User: "Create issues for the new auth feature"
Claude: *immediately creates 5 issues*
✅ CORRECT - Ask clarifying questions first:
User: "Create issues for the new auth feature"
Claude: "Before I create these issues, let me confirm:
1. Should I add them to project #3?
2. Should the main feature issue be parent of the subtasks?
3. Should they be assigned to the v1.0 milestone?"
Why it matters: 5 minutes of clarification saves 30 minutes of corrections. Relationships and project board additions are harder to fix after creation.
❌ WRONG - Ignoring that user has env.json open:
<ide_opened_file>env.json</ide_opened_file>
Claude: *doesn't read env.json*
✅ CORRECT - Read files the user has open:
<ide_opened_file>env.json</ide_opened_file>
Claude: *reads env.json to get project board, milestone, etc.*
Why it matters: Files open in the user's IDE are intentional signals. They often contain critical context for the task.
❌ WRONG - Creating and moving on:
gh issue create ...
"Done! Created issue #67"
✅ CORRECT - Verify after creation:
gh issue create ...
gh issue view 67 --json labels,projectItems
python manage-relationships.py show-all --issue 67
"Created #67, added to project #3, linked as child of #50"
Why it matters: External-facing work needs verification. It's easier to catch mistakes immediately than fix them later.
❌ WRONG - Only type label:
--label "feature"
✅ CORRECT - All three required labels:
--label "feature,priority:medium,scope:self-improvement"
Why it matters: Scope labels enable context-aware filtering in /issue-track context and automatic issue detection in /commit-smart.
Before creating ANY issue, verify:
env.json for project board numberenv.json for milestone infoCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.