An out-of-the-box Claude Code skill that automatically scans, triages, and routes GitHub issues based on model affinity. Built for the vLLM-Ascend project but configurable for any multi-model repository.
- Daily scan — Fetches open issues matching a configurable label, filters out stale/closed/waiting issues
- Model matching — Identifies which model series each issue belongs to (DSv4, GLM, Kimi, Qwen3-next, etc.)
- Comment analysis — Reads existing comments to detect duplicates, PRs, user confirmations, NPU errors, and triager activity
- Information gap check — Flags missing config, logs, PLOG traces
- Auto-reply drafting — Generates standardized triage replies with model-owner @mentions
- Review pipeline — Interactive Claude Code confirmation flow before publishing
- Batch publish — Posts replies +
/wait-feedbacklabels in one go
- GitHub CLI (
gh) — install guide - jq — JSON processor (
winget install jqlang.jq/brew install jq/apt install jq) - Claude Code — for the interactive review & publish pipeline
- GitHub token with
reposcope —gh auth loginthengh auth refresh -s repo
# Clone into your Claude Code skills directory
git clone git@github.com:Dawn952/issue-preprocessor.git ~/.claude/skills/issue-preprocessorcd ~/.claude/skills/issue-preprocessor
bash scripts/install.shThe wizard will ask you:
| Question | Example |
|---|---|
| Target GitHub repo | vllm-project/vllm-ascend |
| Label to scan | llm-model |
| Your GitHub username | your-handle |
| Known triagers | alice, bob |
| Maintainers (can close) | maintainer1, maintainer2 |
| Model → Owner mapping | DSv4 → @alice, GLM → @bob, ... |
In Claude Code, just mention "issue preprocessing" or "scan issues":
> Run the issue preprocessor scan
Or manually from the terminal:
bash ~/.claude/skills/issue-preprocessor/scripts/scan-issues.sh --test 10Linux / WSL (cron):
crontab -e
# Add: 0 8 * * * bash ~/.claude/skills/issue-preprocessor/scripts/scan-issues.shWindows (Task Scheduler):
$trigger = New-ScheduledTaskTrigger -Daily -At 08:00
$action = New-ScheduledTaskAction -Execute "bash" -Argument "~/.claude/skills/issue-preprocessor/scripts/scan-issues.sh"
Register-ScheduledTask -TaskName "IssuePreprocessor" -Trigger $trigger -Action $action┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ scan-issues │───▶│ Claude Code │───▶│ gh issue │
│ .sh │ │ review │ │ comment │
│ (fetch+match)│ │ pipeline │ │ (publish) │
└──────────────┘ └──────────────┘ └──────────────┘
scan-issues.sh— Bash script that fetches issues, filters by labels, matches model series, and outputs structured JSON- Claude Code skill (
SKILL.md) — Reads the JSON, analyzes each issue's comments, drafts triage replies, and walks you through an interactive confirmation pipeline - Publish — Confirmed replies are posted to GitHub via
gh issue comment
issue-preprocessor/
├── SKILL.md # Claude Code skill definition
├── README.md # This file
├── config.json.template # Configuration template
├── config.json # Your config (generated by install.sh, gitignored)
├── .gitignore
├── scripts/
│ ├── install.sh # Interactive first-time setup
│ └── scan-issues.sh # Daily issue fetch + model matching
├── templates/
│ └── triage-reply.md # Reply template with comment-analysis rules
└── references/
└── responsibility-matrix.md # Model-owner mapping reference
Edit config.json to add/remove model series:
{
"models": [
{
"series": "MyModel",
"title_patterns": ["mymodel-v2", "mmv2"],
"body_patterns": ["mymodel"],
"owner": "my-teammate"
}
]
}title_patterns— Keywords matched against the issue title (higher priority)body_patterns— Keywords matched against the issue body (fallback)owner— GitHub handle to @mention in replies
MIT