mcpField
O
ops-triage

ops-triage

github.com/davepoon开发3.7k70 次安装今天更新
代码仓库

关于 ops-triage

ops-triage 是一个 Claude skill,可从 GitHub、Sentry 和 Linear 收集问题,并结合代码与部署历史核查,整理成分诊看板,适合跨项目协调问题处理和修复的团队。

主要功能

  1. 01并行收集问题
  2. 02结合代码和部署核查问题
  3. 03确认并关闭已修复问题
  4. 04生成带优先级的分诊看板
  5. 05派发修复 Agent 并跟踪任务

适用场景

  1. 01汇总各项目跟踪器中的未解决问题
  2. 02核查报告的问题是否已修复并部署
  3. 03协调问题处理并分配后续工作

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/davepoon/buildwithclaude --skill ops-triage

安装后在 Claude Code 中输入/ops-triage确认已加载。

详细介绍

运行时上下文

开始分类处理之前,先加载:

  1. 偏好设置:cat ${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json — 读取项目注册表,获取仓库路径
  2. 守护进程健康状态:cat ${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.json — 确保服务运行正常
  3. 密钥:通过 Doppler MCP (mcp__doppler__*) → 环境变量 → Doppler CLI 备用方案 → 密码管理器,解析以下密钥:SENTRY_AUTH_TOKEN、LINEAR_API_KEY、GITHUB_TOKEN
  4. 运维记忆:查看 ${CLAUDE_PLUGIN_DATA_DIR}/memories/topics_active.md,了解问题背景

运维 ► 跨平台分类处理

CLI/API 参考

gh CLI(GitHub)
命令用法输出
gh issue list --state open --json number,title,body,labels,assignees,createdAt,url --limit 50未关闭的问题JSON 数组
gh issue list --repo <owner/repo> --state open --json number,title,labels,createdAt --limit 20仓库问题JSON 数组
gh pr list --state merged --search "#<N>"提及问题的 PRJSON 数组
gh issue close <N> --comment "<msg>"关闭问题确认信息
sentry-cli / Sentry API
命令用法输出
sentry-cli issues list --project <slug> --status unresolved未解决的问题问题列表
curl -H "Authorization: Bearer $SENTRY_AUTH_TOKEN" "https://sentry.io/api/0/projects/<org>/<proj>/issues/?query=is:unresolved"MCP 不可用时的 API 备用方案JSON 数组
Linear GraphQL(MCP 不可用时的备用方案)
命令用法输出
curl -X POST https://api.linear.app/graphql -H "Authorization: $LINEAR_API_KEY" -H "Content-Type: application/json" -d '{"query":"{ issues(filter: {state: {type: {in: [\"started\",\"unstarted\"]}}}) { nodes { id title state { name } priority assignee { name } } } }"}'进行中的问题JSON

Agent Teams 支持

如果设置了 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1,在为多个问题派发修复 Agent 时使用 Agent Teams。这样可以:

  • 修复 Agent 可以共享发现(例如,修复 Sentry 错误的 Agent 发现其根因与某个 Linear 问题相同)
  • 如果交叉引用发现问题重复,你可以重新指派 Agent
  • Agent 会报告进度,你可以决定优先合并哪个修复

团队设置(仅在启用标志时,于阶段 4 派发):

TeamCreate("triage-fixers")
Agent(team_name="triage-fixers", name="fix-[issue-id]", subagent_type="ops:triage-agent", ...)

使用 broadcast(content="Root cause found: missing index on users.email — check if your issue is related") 分享发现。

如果未设置该标志,则使用标准并行子 Agent。

阶段 1 — 并行收集问题

同时运行以下所有操作:

GitHub Issues
gh issue list --state open --json number,title,body,labels,assignees,createdAt,url --limit 50 2>/dev/null
GitHub Issues(由注册表驱动)
REGISTRY="${CLAUDE_PLUGIN_ROOT}/scripts/registry.json"
[ -f "$REGISTRY" ] || REGISTRY="${CLAUDE_PLUGIN_ROOT}/scripts/registry.example.json"
for repo in $(jq -r '.projects[] | select(.gsd == true) | .repos[]' "$REGISTRY" 2>/dev/null); do
  echo "=== $repo ==="
  gh issue list --repo "$repo" --state open --json number,title,labels,createdAt --limit 20 2>/dev/null
done
Sentry

如果已连接 Sentry MCP,获取所有项目的未解决问题。 否则运行:echo "Sentry MCP not available"

Linear

使用 mcp__linear__list_teams 获取团队 ID,然后对每个团队使用 mcp__linear__list_issues,并传入 filter: {state: {type: {in: ["unstarted", "started"]}}}。


阶段 2 — 与代码交叉核对

对于每个 Sentry 问题,检查它是否已修复:

  1. 从 Sentry 事件中提取错误消息、文件路径和行号。
  2. 使用 grep 在受影响的仓库中搜索相关代码。
  3. 检查 Git 日志:git log --oneline --all -- [file] 2>/dev/null | head -20
  4. 如果修复已合并并部署(检查 ECS 部署时间戳),则标记为已解决。

对于每个 GitHub Issue:

  • 检查是否有已合并的 PR 提及该问题编号(gh pr list --state merged --search "#[N]")
  • 如果有 PR 提及且已合并,则标记为可能已解决

阶段 3 — 确认并处理已修复的问题

对于已确认代码已修复且已部署的问题,显示完整列表并使用 AskUserQuestion:

Found N issues confirmed fixed and deployed:

  [Sentry] [title] — fix in [commit], deployed [time ago]
  [Linear] [title] — fix in [commit], deployed [time ago]
  [GitHub] #[N] [title] — referenced in merged PR #[M]

  [Resolve all N]  [Review each one]  [Skip — don't auto-resolve]

如果用户选择“逐个审查”,则通过 AskUserQuestion 逐个显示问题,并提供 [Resolve] / [Skip] 选项。

对于已确认的问题:

  • Sentry:使用 Sentry MCP 解决问题
  • Linear:使用 mcp__linear__update_issue,并设置 state: "Done"
  • GitHub:执行 gh issue close [N] --comment "Auto-closed: fix confirmed deployed"

记录所有处理结果。


阶段 4 — 展示分诊看板

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 OPS ► TRIAGE — [date]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

AUTO-RESOLVED (already fixed)
 ✓ [Sentry] [title] — fix in [commit]
 ✓ [Linear] [title] — closed
 ✓ [GitHub] #[N] [title] — closed

ACTIVE ISSUES (needs work)
 CRITICAL  [source] [title] [age] [assigned?]
 HIGH      [source] [title] [age] [assigned?]
 MEDIUM    [source] [title] [age] [assigned?]

──────────────────────────────────────────────────────

使用批量 AskUserQuestion 调用(每次最多 4 个选项):

AskUserQuestion 调用 1:

  [Dispatch agent for [top critical issue]]
  [Dispatch agent for [second issue]]
  [Assign issue to sprint (Linear)]
  [More...]

AskUserQuestion 调用 2(仅当选择“更多...”时):

  [Bulk-assign all HIGH to current sprint]
  [Done]

派发修复 Agent

派发某个问题的处理任务时,使用 agents/triage-agent.md 启动一个 Agent,并提供:

  • 完整的问题上下文(错误、堆栈跟踪、受影响的代码)
  • 创建功能分支、修复问题并提交 PR 的指示
  • 完成或遇到阻塞时的反馈要求

如果指定了 $ARGUMENTS 项目/来源,则按其筛选。


原生工具用法

Tasks — 分诊进度

对于每个正在调查的问题,使用 TaskCreate 创建任务。随着问题得到解决、派发处理或跳过,使用 TaskUpdate 更新任务。这样用户就能实时查看分诊清单。

WebFetch — Sentry/GitHub 信息补充

当 Sentry MCP 达到配额限制时,改用 WebFetch 和 https://sentry.io/api/0/projects/<org>/<project>/issues/?query=is:unresolved(使用 SENTRY_AUTH_TOKEN 标头)。如果 gh 速度较慢,获取 GitHub 问题详情时也采用同样的方法。

WebSearch — 错误上下文

使用 WebSearch 查找常见错误的已知解决方案(例如,“AWS RDS connection reset”、“ECS task stopped reason”)。将找到的信息作为上下文纳入分诊看板。

LSP — 修复 Agent 的代码导航

派发修复 Agent 时,使用 LSP 查找符号定义、引用和调用层级。这能帮助 Agent 更快地浏览不熟悉的代码库,比使用 grep 更高效。

评论

支持 Markdown