关于 ops-triage
ops-triage 是一个 Claude skill,可从 GitHub、Sentry 和 Linear 收集问题,并结合代码与部署历史核查,整理成分诊看板,适合跨项目协调问题处理和修复的团队。
主要功能
- 01并行收集问题
- 02结合代码和部署核查问题
- 03确认并关闭已修复问题
- 04生成带优先级的分诊看板
- 05派发修复 Agent 并跟踪任务
适用场景
- 01汇总各项目跟踪器中的未解决问题
- 02核查报告的问题是否已修复并部署
- 03协调问题处理并分配后续工作
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ davepoon/ buildwithclaude --skill ops-triage安装后在 Claude Code 中输入/ops-triage确认已加载。
详细介绍
运行时上下文
开始分类处理之前,先加载:
- 偏好设置:
cat ${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json— 读取项目注册表,获取仓库路径 - 守护进程健康状态:
cat ${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.json— 确保服务运行正常 - 密钥:通过 Doppler MCP (
mcp__doppler__*) → 环境变量 → Doppler CLI 备用方案 → 密码管理器,解析以下密钥:SENTRY_AUTH_TOKEN、LINEAR_API_KEY、GITHUB_TOKEN - 运维记忆:查看
${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>" | 提及问题的 PR | JSON 数组 |
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 问题,检查它是否已修复:
- 从 Sentry 事件中提取错误消息、文件路径和行号。
- 使用
grep在受影响的仓库中搜索相关代码。 - 检查 Git 日志:
git log --oneline --all -- [file] 2>/dev/null | head -20 - 如果修复已合并并部署(检查 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 更高效。