Issue Prioritizer
Analyze issues from a GitHub repository and rank them by Adjusted Score — ROI penalized by Tripping Scale (solution sanity), Architectural Impact, and Actionability.
This is a read-only skill. It analyzes and presents information. The user makes all decisions.
When to use
- - Triaging or ranking issues in a repository
- Identifying quick wins for contributors
- Filtering out non-actionable items (questions, duplicates)
- Detecting over-engineered proposals
- Matching issues to contributor skill levels
When NOT to use
- - Managing forks or syncing with upstream → use
fork-manager instead - General GitHub CLI queries (PR status, CI runs) → use
github instead - Reviewing code changes before publishing → use
pr-review instead
Requirements
- -
gh CLI authenticated (gh auth login)
Instructions
Step 1: Get Repository
If the user didn't specify a repository, ask which one to analyze (format: owner/repo).
Step 2: Fetch Issues
Basic fetch (most recent):
CODEBLOCK0
Default limit is 30. Store the full JSON response.
Targeted fetch with --topic:
When the user specifies --topic <keyword> (e.g. --topic telegram, --topic agents), use GitHub search to find issues matching that topic instead of just fetching the most recent:
CODEBLOCK1
Multiple topics can be combined: --topic "telegram agents" searches for issues containing either term.
Targeted fetch with --search:
When the user specifies --search <query>, pass it directly as a GitHub search query for full control:
CODEBLOCK2
Examples:
- -
--search "telegram in:title" — only title matches - INLINECODE14 — bugs mentioning telegram
- INLINECODE15 — bugs or enhancements about telegram/agents
- INLINECODE16 — active discussions about telegram
Label-based fetch with --label:
CODEBLOCK3
All fetch modes can be combined: --topic telegram --label bug --limit 50 fetches up to 50 open bugs about telegram.
Error handling:
- - Auth error → tell user to run INLINECODE19
- Rate limited → inform user, suggest reducing INLINECODE20
- Repo not found → check format INLINECODE21
- No issues → report and exit (if using --topic/--search, suggest broadening the query)
- Missing fields → treat null/missing body and labels as empty
Step 3: Filter Issues with Existing PRs
Note: If user specified --include-with-prs, skip this entire step and proceed to Step 4 with all fetched issues.
Before analyzing, check for open PRs that already address issues to avoid duplicate work.
CODEBLOCK4
Detect linked issues using ALL of these methods:
Method 1 — Explicit Keywords (high confidence):
Scan PR title and body (case-insensitive):
- -
fixes #N, fix #N, INLINECODE25 - INLINECODE26 ,
close #N, INLINECODE28 - INLINECODE29 ,
resolve #N, INLINECODE31
Method 2 — Issue References (medium confidence):
- -
#N anywhere in text - INLINECODE33 ,
issue #N, related to #N, INLINECODE36
Method 3 — Title Similarity (fuzzy):
Normalize titles (lowercase, remove punctuation/common words). If 70%+ word overlap → likely linked.
Method 4 — Semantic Matching (ambiguous cases):
Extract key terms from issue (error names, function names, components). Check if PR body discusses same things.
Confidence icons:
- - 🔗 Explicit link (fixes/closes/resolves)
- 📎 Referenced (#N mentioned)
- 🔍 Similar title (fuzzy match)
- 💡 Semantic match (same components)
Remove linked issues from analysis. Report them separately before the main report.
If all issues have PRs, report that and exit.
Step 4: Analyze Each Issue
For each remaining issue, score the following:
Difficulty (1-10)
Base score: 5. Adjustments:
| Signal | Adjustment |
|---|
| Documentation only | -3 |
| Has proposed solution |
-2 |
| Has reproduction steps | -1 |
| Clear error message | -1 |
| Unknown root cause | +3 |
| Architectural change | +3 |
| Race condition/concurrency | +2 |
| Security implications | +2 |
| Multiple systems involved | +2 |
Importance (1-10)
| Range | Level | Examples |
|---|
| 8-10 | Critical | Crash, data loss, security vulnerability, service down |
| 6-7 |
High | Broken functionality, errors, performance issues |
| 4-5 | Medium | Enhancements, feature requests, improvements |
| 1-3 | Low | Cosmetic, documentation, typos |
Tripping Scale (1-5) — Solution Sanity (How "Out There" Is It?)
| Score | Label | Description |
|---|
| 1 | Total Sanity | Proven approach, standard patterns |
| 2 |
Grounded w/Flair | Practical with creative touches |
| 3 | Dipping Toes | Exploring cautiously |
| 4 | Wild Adventure | Bold, risky, unconventional |
| 5 | Tripping | Questionable viability |
Red Flags (+score): rewrite from scratch, buzzwords (blockchain, AI-powered, ML-based), experimental/unstable, breaking change, custom protocol
Green Flags (-score): standard approach, minimal change, backward compatible, existing library, well-documented
Architectural Impact (1-5)
Always ask: "Is there a simpler way?" before scoring.
| Score | Label | Description |
|---|
| 1 | Surgical | Isolated fix, 1-2 files, no new abstractions |
| 2 |
Localized | Small addition, follows existing patterns exactly |
| 3 | Moderate | New component within existing architecture |
| 4 | Significant | New subsystem, new patterns, affects multiple modules |
| 5 | Transformational | Restructures core, changes paradigms, migration needed |
Red Flags (+score): "rewrite", "refactor entire", new framework for existing capability, changes across >5 files, breaking API changes, scope creep
Green Flags (-score): single file fix, uses existing utilities, follows established patterns, backward compatible, easily revertible
Critical: If a simple solution exists, architectural changes are wrong. Don't create a "validation framework" when a single if-check suffices.
Actionability (1-5) — Can it be resolved with a PR?
| Score | Label | Description |
|---|
| 1 | Not Actionable | Question, discussion, duplicate, support request |
| 2 |
Needs Triage | Missing info, unclear scope, needs clarification |
| 3 | Needs Investigation | Root cause unknown, requires debugging first |
| 4 | Ready to Work | Clear scope, may need some design decisions |
| 5 | PR Ready | Solution is clear, just needs implementation |
Blockers (-score): questions ("how do I?"), discussions ("thoughts?"), labels (duplicate, wontfix, question), missing repro
Ready signals (+score): action titles ("fix:", "add:"), proposed solution, repro steps, good-first-issue label, specific files mentioned
Derived Values
CODEBLOCK5
Calculation Formulas
CODEBLOCK6
Tripping Scale Multiplier:
| Score | Label | Multiplier |
|---|
| 1 | Total Sanity | 1.00 (no penalty) |
| 2 |
Grounded w/Flair | 0.85 |
| 3 | Dipping Toes | 0.70 |
| 4 | Wild Adventure | 0.55 |
| 5 | Tripping | 0.40 |
Architectural Impact Multiplier:
| Score | Label | Multiplier |
|---|
| 1 | Surgical | 1.00 (no penalty) |
| 2 |
Localized | 0.90 |
| 3 | Moderate | 0.75 |
| 4 | Significant | 0.50 |
| 5 | Transformational | 0.25 |
Actionability Multiplier:
| Score | Label | Multiplier |
|---|
| 5 | PR Ready | 1.00 (no penalty) |
| 4 |
Ready to Work | 0.90 |
| 3 | Needs Investigation | 0.70 |
| 2 | Needs Triage | 0.40 |
| 1 | Not Actionable | 0.10 |
Step 5: Categorize
- - Quick Wins: ROI ≥ 1.5 AND Difficulty ≤ 5 AND Trip ≤ 3 AND Arch ≤ 2 AND Actionability ≥ 4
- Critical Bugs: issueType = "bug" AND Importance ≥ 8
- Tripping Issues: Trip ≥ 4
- Over-Engineered: Arch ≥ 4 (simpler solution likely exists)
- Not Actionable: Actionability ≤ 2
Sort all issues by AdjustedScore descending.
Step 6: Present Results
CODEBLOCK7
Options
- -
--json: Raw JSON output - INLINECODE38 /
--md: Markdown table output - INLINECODE40 : Show only quick wins
- INLINECODE41 : Filter by contributor level
- INLINECODE42 : Number of issues to analyze (default: 30)
- INLINECODE43 : Search issues by topic (e.g.
--topic telegram, --topic "agents telegram") - INLINECODE46 : Raw GitHub search query for full control (e.g.
--search "label:bug telegram in:title") - INLINECODE48 : Filter by GitHub label (e.g.
--label bug) - INLINECODE50 : Skip PR filtering, include all issues
LLM Deep Analysis (Optional)
For higher-quality scoring, use an LLM to analyze each issue individually. For each issue, prompt the model with the issue details and scoring criteria, requesting structured JSON output:
CODEBLOCK8
Truncate issue bodies longer than 2000 characters before sending to the model.
When to use LLM Deep Analysis:
- - Complex repositories with nuanced issues
- When accuracy matters more than speed
- For repositories you're unfamiliar with
Tradeoffs: Slower (~2-5s per issue) but more accurate. 1 API call per issue.
Integration: For each issue, call the LLM with the analysis prompt, parse the JSON response, and merge into results before Step 5 (Categorize).
Issue Prioritizer
分析来自 GitHub 仓库的议题,并根据调整后得分对其进行排名——即 ROI 经过三重惩罚(解决方案合理性)、架构影响和可操作性调整后的结果。
这是一个只读技能。它仅分析和呈现信息。所有决策由用户做出。
何时使用
- - 对仓库中的议题进行分类或排序
- 为贡献者识别速赢项
- 过滤掉不可操作项(问题、重复项)
- 检测过度设计的提案
- 将议题与贡献者技能水平匹配
何时不使用
- - 管理分支或与上游同步 → 改用 fork-manager
- 常规 GitHub CLI 查询(PR 状态、CI 运行) → 改用 github
- 在发布前审查代码变更 → 改用 pr-review
前提条件
- - gh CLI 已认证(gh auth login)
操作说明
步骤 1:获取仓库
如果用户未指定仓库,询问要分析哪个仓库(格式:owner/repo)。
步骤 2:获取议题
基础获取(最新):
bash
gh issue list --repo {owner/repo} --state open --limit {limit} --json number,title,body,labels,createdAt,comments,url
默认限制为 30。存储完整的 JSON 响应。
使用 --topic 定向获取:
当用户指定 --topic <关键词>(例如 --topic telegram、--topic agents)时,使用 GitHub 搜索查找匹配该主题的议题,而不仅仅是获取最新的:
bash
在标题和正文中搜索主题关键词
gh issue list --repo {owner/repo} --state open --limit {limit} --search {topic} in:title,body --json number,title,body,labels,createdAt,comments,url
多个主题可以组合:--topic telegram agents 搜索包含任一术语的议题。
使用 --search 定向获取:
当用户指定 --search <查询> 时,直接将其作为 GitHub 搜索查询传递以获得完全控制:
bash
gh issue list --repo {owner/repo} --state open --limit {limit} --search {query} --json number,title,body,labels,createdAt,comments,url
示例:
- - --search telegram in:title — 仅标题匹配
- --search label:bug telegram — 提及 telegram 的 bug
- --search label:bug,enhancement telegram agents — 关于 telegram/agents 的 bug 或增强
- --search comments:>5 telegram — 关于 telegram 的活跃讨论
使用 --label 基于标签获取:
bash
gh issue list --repo {owner/repo} --state open --limit {limit} --label {label} --json number,title,body,labels,createdAt,comments,url
所有获取模式可以组合:--topic telegram --label bug --limit 50 获取最多 50 个关于 telegram 的开放 bug。
错误处理:
- - 认证错误 → 告知用户运行 gh auth login
- 速率限制 → 告知用户,建议减少 --limit
- 仓库未找到 → 检查格式 owner/repo
- 无议题 → 报告并退出(如果使用 --topic/--search,建议扩大查询范围)
- 缺失字段 → 将 null/缺失的正文和标签视为空
步骤 3:过滤已有 PR 的议题
注意: 如果用户指定了 --include-with-prs,则跳过此步骤,直接使用所有获取的议题进入步骤 4。
在分析之前,检查是否有已存在的开放 PR 解决了某些议题,以避免重复工作。
bash
gh pr list --repo {owner/repo} --state open --json number,title,body,url
使用以下所有方法检测关联议题:
方法 1 — 显式关键词(高置信度):
扫描 PR 标题和正文(不区分大小写):
- - fixes #N、fix #N、fixed #N
- closes #N、close #N、closed #N
- resolves #N、resolve #N、resolved #N
方法 2 — 议题引用(中等置信度):
- - 文本中任何位置的 #N
- issue N、issue #N、related to #N、addresses #N
方法 3 — 标题相似度(模糊匹配):
标准化标题(小写,移除标点/常见词)。如果单词重叠度达到 70% 以上 → 可能关联。
方法 4 — 语义匹配(模糊情况):
从议题中提取关键术语(错误名称、函数名称、组件)。检查 PR 正文是否讨论相同内容。
置信度图标:
- - 🔗 显式链接(fixes/closes/resolves)
- 📎 已引用(提及 #N)
- 🔍 相似标题(模糊匹配)
- 💡 语义匹配(相同组件)
从分析中移除关联议题。在主报告之前单独报告它们。
如果所有议题都有 PR,则报告并退出。
步骤 4:分析每个议题
对于每个剩余议题,对以下项进行评分:
难度(1-10)
基础分:5。调整项:
-2 |
| 有复现步骤 | -1 |
| 清晰的错误信息 | -1 |
| 未知根因 | +3 |
| 架构变更 | +3 |
| 竞态条件/并发 | +2 |
| 安全影响 | +2 |
| 涉及多个系统 | +2 |
重要性(1-10)
| 范围 | 级别 | 示例 |
|---|
| 8-10 | 关键 | 崩溃、数据丢失、安全漏洞、服务宕机 |
| 6-7 |
高 | 功能损坏、错误、性能问题 |
| 4-5 | 中 | 增强、功能请求、改进 |
| 1-3 | 低 | 外观、文档、拼写错误 |
三重评分(1-5)— 解决方案合理性(有多离谱?)
有创意的务实 | 实用且带有创意 |
| 3 | 谨慎尝试 | 谨慎探索 |
| 4 | 大胆冒险 | 大胆、有风险、非常规 |
| 5 | 离谱 | 可行性存疑 |
红旗(+分):从头重写、流行词(区块链、AI 驱动、基于机器学习)、实验性/不稳定、破坏性变更、自定义协议
绿旗(-分):标准方法、最小变更、向后兼容、现有库、文档完善
架构影响(1-5)
在评分前始终问:是否有更简单的方法?
| 分数 | 标签 | 描述 |
|---|
| 1 | 微创 | 隔离修复,1-2 个文件,无新抽象 |
| 2 |
局部 | 小规模添加,完全遵循现有模式 |
| 3 | 中等 | 在现有架构内新增组件 |
| 4 | 重大 | 新子系统、新模式、影响多个模块 |
| 5 | 变革性 | 重构核心、改变范式、需要迁移 |
红旗(+分):重写、重构整个、为现有功能引入新框架、跨 5 个以上文件的变更、破坏性 API 变更、范围蔓延
绿旗(-分):单文件修复、使用现有工具、遵循既定模式、向后兼容、易于回滚
关键: 如果存在简单的解决方案,架构变更就是错误的。不要在一个 if 检查就足够的情况下创建验证框架。
可操作性(1-5)— 能否通过 PR 解决?
| 分数 | 标签 | 描述 |
|---|
| 1 | 不可操作 | 问题、讨论、重复、支持请求 |
| 2 |
需要分类 | 信息缺失、范围不清、需要澄清 |
| 3 | 需要调查 | 根因未知,需要先调试 |
| 4 | 可着手工作 | 范围清晰,可能需要一些设计决策 |
| 5 | PR 就绪 | 解决方案清晰,只需实现 |
阻碍因素(-分):问题(我如何做?)、讨论(有什么想法?)、标签(重复、不修复、问题)、缺少复现
就绪信号(+分):操作标题(修复:、添加:)、提议的解决方案、复现步骤、good-first-issue 标签、提及特定文件
派生值
issueType