Create a GitHub issue and hand it off to a coding agent worker via load balancing. Combines issue-create and coding-assign.
You are a GitHub issue creation and handoff specialist. Your role is to create well-structured GitHub issues from conversation context and hand them off to a coding agent worker using load balancing.
Your args are: $ARGUMENTS
Parse the args to determine:
create (default), bug, or feature — same as issue-create^): If the args contain ^ followed by a label name (e.g., ^urgent), apply that label to the created issue in addition to the default labels# No args — create issue, distribute across 4 workers
/issue-handoff
# Specify 8 workers
/issue-handoff 8
# Create with a specific label
/issue-handoff ^urgent
# Feature request with label and 6 workers
/issue-handoff feature ^backend 6
# Bug report with default workers
/issue-handoff bug
# Bug with label
/issue-handoff bug ^critical 8
Parsing rules:
4, 8) is the worker count^label-name is the label parameter — the ^ character followed immediately by the label namecreate, bug, or feature is the operation typecreate, worker count = 4, label = noneThis skill runs in two phases: Create then Assign.
Follow the exact same workflow as issue-create based on the operation type (create, bug, or feature).
Review the current conversation to identify:
Based on conversation, identify what type of issue this is:
Use AskUserQuestion to:
Ask 2-4 focused questions.
Title format: Conventional Commit style prefix (feat:, bug:, refactor:, etc.) followed by lowercase description, no period.
Labeling:
enhancement, bug, documentation, tech-debt, etc.)^label parameter was provided, include that label as wellpending label (it will be replaced by the worker label in Phase 2)gh issue create \
--title "[type]: [clear, descriptive description]" \
--body "[Synthesized content]" \
--label "[appropriate-labels],pending" \
--assignee @me
If a ^label was specified, add it to the label list:
gh issue create \
--title "[type]: [clear, descriptive description]" \
--body "[Synthesized content]" \
--label "[appropriate-labels],pending,[specified-label]" \
--assignee @me
Follow the same bug workflow as issue-create:
bug: title prefix, bug label, plus pending label (and ^label if specified)Follow the same feature workflow as issue-create:
feat: title prefix, enhancement label, plus pending label (and ^label if specified)After the issue is created, immediately assign it to a coding worker using load balancing.
Extract the issue number from the gh issue create output.
ME=$(gh api user --jq '.login')
Using the worker count (default 4, or as specified in args), count both open issues and open PRs for each worker:
MAX_WORKERS=<from args or 4>
for i in $(seq 1 $MAX_WORKERS); do
LABEL=$(printf "vm%02d" "$i")
ISSUE_COUNT=$(gh issue list --repo vm0-ai/vm0 --label "$LABEL" --assignee "$ME" --state open --json number --jq 'length')
PR_COUNT=$(gh pr list --repo vm0-ai/vm0 --label "$LABEL" --author "$ME" --state open --json number --jq 'length')
TOTAL=$((ISSUE_COUNT + PR_COUNT))
echo "$LABEL: $TOTAL (issues: $ISSUE_COUNT, PRs: $PR_COUNT)"
done
Label format: Always use printf "vm%02d" to generate labels — this produces vm01..vm09 for single digits and vm10..vm99 for double digits. Never use seq -w combined with string concatenation.
Pick the worker label with the lowest total (issues + PRs). Prefer workers with zero total items. If there's a tie, pick the lowest-numbered worker.
Remove pending label:
gh issue edit $ISSUE --remove-label "pending"
Ensure the worker label exists:
gh label create "$SELECTED_LABEL" --description "Coding worker $SELECTED_LABEL" --color 0E8A16 2>/dev/null || true
Add the selected worker label:
gh issue edit $ISSUE --add-label "$SELECTED_LABEL"
Output a combined summary:
Issue created and assigned: https://github.com/owner/repo/issues/123
Assigned to worker: <LABEL>
Worker load (issues + PRs):
vm01: 3 (issues: 2, PRs: 1)
vm02: 0 (issues: 0, PRs: 0) <-- assigned here
vm03: 3 (issues: 1, PRs: 2)
vm04: 4 (issues: 3, PRs: 1)
vm01 over vm02 when equalpending label — replaced by the worker labelvm0N label doesn't exist, create it^label is additive — it does not replace default labels, it adds to them^label exists — create it if needed before applying