一键导入
issue-dispatcher
Triage GitHub issues queue - check hygiene, identify actionable items, prioritize, invoke handler for each. The "what to work on" decision layer.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Triage GitHub issues queue - check hygiene, identify actionable items, prioritize, invoke handler for each. The "what to work on" decision layer.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | issue-dispatcher |
| description | Triage GitHub issues queue - check hygiene, identify actionable items, prioritize, invoke handler for each. The "what to work on" decision layer. |
| user-invocable | false |
Part of: Autonomous Issue Dispatch System Downstream:
issue-handler→ CTO Agent →qa-submission(per-project)
The Dispatcher answers: "What should we work on next?"
It does NOT diagnose or fix. It manages the queue:
Dispatcher is holistic. It sees the entire queue, not individual issues.
Dispatcher is not a fixer. It triages and delegates. The moment you start reading logs or writing code, you've become a Handler.
Dispatcher respects project status. Backlog means backlog. Don't auto-promote items without explicit instruction.
gh issue list --state open --json number,title,labels,projectItems,createdAt,updatedAt
🚨 Labels alone are not sufficient. For each issue, read comments:
gh issue view NUMBER --json body,comments,labels,state
Why: Comments contain critical status info that may not be reflected in labels:
What to look for:
| Comment Pattern | Meaning |
|---|---|
| "QA Submitted" + Slack link | Already in QA (should have pending-qa label) |
| "Fixed in commit X" | Implemented, may be ready for QA or closure |
| "Blocked on..." | Blocked, needs action |
| "Backlog" or "Later" | Should have backlog label |
Auto-fix mismatches: If comment says "QA Submitted" but no pending-qa label → add the label.
For each issue, verify:
| Check | Pass | Fail Action |
|---|---|---|
| Has project board status | ✅ | Flag: "No status assigned" |
| Labels match status | ✅ | Flag: "needs-qa label but in Backlog" |
| Not stale (updated < 30 days OR in Backlog) | ✅ | Flag: "Stale - no updates in 30+ days" |
Auto-fix hygiene issues when clear:
needs-qa label + Backlog status → Either remove label OR move to QA (ask)Report hygiene issues:
HYGIENE ISSUES:
- #8: has 'needs-qa' but status is Backlog (mismatch)
- #45: no project status assigned
- #12: stale (last update 45 days ago)
Sort issues into buckets:
| Bucket | Criteria | Action |
|---|---|---|
| Actionable | In Todo/Doing, has enough info | → Handler |
| Blocked | Missing info, waiting on external | → Comment asking for info |
| Backlog | Explicitly backlogged | → Skip unless asked |
| Needs QA | In QA column or has needs-qa label | → Human QA, not Handler |
🚨 Priority Labeling Policy:
backlog label = low priority / not urgentRank by (common sense):
For each actionable issue (in priority order):
Invoke issue-handler for #71
Context:
- Priority: 2 of 5 actionable
- Age: 3 days
- Estimated effort: Low (UI fix)
- Labels: bug
- Status: Todo
Batch vs Sequential:
DISPATCH SUMMARY:
Queue: 30 open issues
- Actionable: 5
- Blocked: 3
- Backlog: 20
- Needs QA: 2
Hygiene issues fixed: 1
Hygiene issues flagged: 2 (need human decision)
Dispatched to Handler:
1. #71 - Role dropdown click-away (Low effort, 3 days old)
2. #68 - Approval counter bug (Low effort, 5 days old)
3. #67 - Hook/CTA propagation (Medium effort, 6 days old)
Skipped (blocked):
- #73 - Missing requirements, commented asking for clarification
Skipped (backlog):
- 20 issues in backlog (not dispatched unless requested)
Bug Intake creates issues with:
Dispatcher expects these to exist. If missing, flag as hygiene issue.
Handler receives:
Handler returns:
When Handler completes diagnosis → CTO picks up: Dispatcher does NOT notify reporter yet. Wait for QA Submission.
When Handler is blocked: Dispatcher may ask Bug Intake to loop back to reporter for more info.
Full queue scan, hygiene checks, prioritization, dispatch.
"Run issue triage" / "Check pending issues"
Filter for quick wins only.
"Find low-hanging fruit" / "What can we fix quickly?"
Criteria:
Skip queue scan, dispatch specific issue directly.
"Handle issue #71"
Still performs hygiene check on that issue.
| Not Dispatcher's Job | Who Does It |
|---|---|
| Read logs | Handler |
| Write code | CTO Agent (Developer) |
| Run tests | CTO Agent (QA Engineer) |
| Diagnose root cause | Handler |
| Notify reporter | Bug Intake / QA Submission |
| Accept/reject QA | Human |
Dispatcher is the traffic controller, not the mechanic.
The github-issue-manager agent and issue-dispatcher skill are complementary:
| Component | Responsibility | Operations |
|---|---|---|
github-issue-manager | READ/WRITE individual issues | Create, update status, verify Kanban, fetch with filtering |
issue-dispatcher | TRIAGE/ORCHESTRATE queue | Analyze, prioritize, dispatch to handler |
The manager owns all issue I/O (including due-date filtering). The dispatcher is a higher-level workflow that triages and dispatches.
When to use which:
github-issue-managergithub-issue-managergithub-issue-managerissue-dispatcherissue-dispatcher🚨 Filtering is the manager's job. The dispatcher inherits the manager's due-date filtering. When the dispatcher fetches issues (Step 1), it must apply the same filtering rules defined in the manager (skip future-dated issues silently).
🚨 ALWAYS include issue titles when referencing issues:
Examples:
Table format:
| Issue | Status |
|-------|--------|
| #13 - Fix hardcoded OpenRouter referer | NOT implemented |
| #65 - Email verification | NOT implemented |
Never assume user remembers what issue numbers mean.
Dispatcher behavior can be tuned per-project via CLAUDE.md:
## Issue Dispatcher Config
- **Auto-dispatch:** false (require manual trigger)
- **Max parallel:** 1 (sequential only)
- **Stale threshold:** 14 days (faster for active projects)
- **Skip labels:** ["wontfix", "duplicate", "on-hold"]
If not specified, defaults apply.
| Skill | Location | Relationship |
|---|---|---|
autonomous-issue-dispatch | ~/.claude/skills/ | Parent architecture — defines the full pipeline this skill belongs to |
issue-handler | ~/.claude/skills/ | Downstream — Dispatcher invokes Handler for each actionable issue |
bug-intake | ~/.claude/skills/ | Upstream — Bug Intake creates GitHub issues that Dispatcher triages |
dev-loop | ~/.claude/skills/ | Upstream — Dev Loop runs Bug Intake repeatedly, feeding this queue |
qa-submission | .claude/skills/ (per-project) | Downstream (via CTO) — QA submission after Handler → CTO completes fix |
github-issue-manager | Agent | Tool — All issue I/O (read, write, label, status) delegated to this agent |
Google Apps Script development best practices learned from production. Use when building Apps Script automation, payment API integrations, Google Sheets menu functions, modal dialogs, Poka Yoke quality gates, or running Apps Script functions from CLI. Covers UI dialog philosophy, API field discovery, submission architecture (source_amount vs transfer_amount), clasp CLI logging, run-appscript.sh function execution, and gate flow design.
Orchestration overview for the autonomous issue dispatch system. Handles bugs AND features from ANY entry point. References the component skills (dispatcher, handler) and per-project skills (bug-intake, qa-submission). Use when user says "dispatch", "fix these issues", "batch implement", "implement this", "build this", "develop this", "here's a plan", or any implementation/feature/fix request — including direct conversational requests to Claude Code.
Generalized Slack bug intake. Scans bug-report channels, auto-fixes small bugs, dispatches big work with clear specs, defers only genuinely ambiguous items to owner. Uses emoji reactions to track state. Each repo provides workspace config via local bug-intake skill. Supports shared channels where multiple repos receive bugs from one Slack channel via semantic routing.
PreToolUse hooks that block direct production database access and raw SQL write operations. Prevents bypass scripts that skip Drizzle ORM migration tracking, and HARD BLOCKS raw psql writes with no bypass — all writes must go through Admin API.
Standard development SOP for ALL code changes — bug fixes, features, refactors, any implementation. Defines the universal pipeline (investigate → fix → test → deploy → QA) and scope-based decision matrix. Also provides continuous scanning mode for autonomous operation. Use when implementing ANY code change, fixing bugs, building features, or when user says "start dev loop", "cowork", "fix this", "implement this", "build this". Each workspace can override with local skill.
Knowledge management for Claude Code projects. Use when: creating skills or agents, deciding where to put new knowledge (skill vs CLAUDE.md vs reference-data vs memory vs agent), routing information, CLAUDE.md hygiene, editing/modifying CLAUDE.md or skills or agents or memory files, extracting content from bloated files, or any discussion about knowledge architecture, documentation structure, or SOP placement. MUST be invoked BEFORE proposing any edits to CLAUDE.md, skills, agents, or memory - no exceptions.