ops-triage — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ops-triage (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Before triaging, load:
cat ${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json — read project registry for repo pathscat ${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.json — ensure services healthymcp__doppler__*) → env → Doppler CLI fallback → password manager: SENTRY_AUTH_TOKEN, LINEAR_API_KEY, GITHUB_TOKEN${CLAUDE_PLUGIN_DATA_DIR}/memories/topics_active.md for issue context| Command | Usage | Output |
|---|---|---|
gh issue list --state open --json number,title,body,labels,assignees,createdAt,url --limit 50 | Open issues | JSON array |
gh issue list --repo <owner/repo> --state open --json number,title,labels,createdAt --limit 20 | Repo issues | JSON array |
gh pr list --state merged --search "#<N>" | PRs referencing issue | JSON array |
gh issue close <N> --comment "<msg>" | Close issue | Confirmation |
| Command | Usage | Output |
|---|---|---|
sentry-cli issues list --project <slug> --status unresolved | Unresolved issues | Issue list |
curl -H "Authorization: Bearer $SENTRY_AUTH_TOKEN" "https://sentry.io/api/0/projects/<org>/<proj>/issues/?query=is:unresolved" | API fallback when MCP unavailable | JSON array |
| Command | Usage | Output |
|---|---|---|
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 } } } }"}' | Active issues | JSON |
If CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 is set, use Agent Teams when dispatching fix agents for multiple issues. This enables:
Team setup (only when flag is enabled, Phase 4 dispatch):
TeamCreate("triage-fixers")
Agent(team_name="triage-fixers", name="fix-[issue-id]", subagent_type="ops:triage-agent", ...)Use broadcast(content="Root cause found: missing index on users.email — check if your issue is related") to share discoveries.
If the flag is NOT set, fall back to standard parallel subagents.
Run all of these simultaneously:
gh issue list --state open --json number,title,body,labels,assignees,createdAt,url --limit 50 2>/dev/nullREGISTRY="${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
doneIf Sentry MCP is connected, fetch unresolved issues for all projects. Otherwise run: echo "Sentry MCP not available"
Use mcp__linear__list_teams to get team IDs, then mcp__linear__list_issues with filter: {state: {type: {in: ["unstarted", "started"]}}} for each team.
For each Sentry issue, check if it's already fixed:
grep for the relevant code in the affected repo.git log --oneline --all -- [file] 2>/dev/null | head -20For each GitHub Issue:
gh pr list --state merged --search "#[N]")For issues confirmed fixed in code AND deployed, show the full list and use 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]If user picks "Review each one", show each issue individually with [Resolve] / [Skip] via AskUserQuestion.
For confirmed issues:
mcp__linear__update_issue with state: "Done"gh issue close [N] --comment "Auto-closed: fix confirmed deployed"Log all resolutions.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
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?]
──────────────────────────────────────────────────────Use batched AskUserQuestion calls (max 4 options each):
AskUserQuestion call 1:
[Dispatch agent for [top critical issue]]
[Dispatch agent for [second issue]]
[Assign issue to sprint (Linear)]
[More...]AskUserQuestion call 2 (only if "More..."):
[Bulk-assign all HIGH to current sprint]
[Done]When dispatching for an issue, spawn an Agent using agents/triage-agent.md with:
Filter to $ARGUMENTS project/source if specified.
Use TaskCreate for each issue being investigated. Update with TaskUpdate as issues are resolved/dispatched/skipped. Gives the user a live triage checklist.
When Sentry MCP hits quota limits, fall back to WebFetch with https://sentry.io/api/0/projects/<org>/<project>/issues/?query=is:unresolved (using SENTRY_AUTH_TOKEN header). Same for GitHub issue details when gh is slow.
Use WebSearch to find known solutions for recurring errors (e.g., "AWS RDS connection reset", "ECS task stopped reason"). Include findings in the triage board as context.
When dispatching fix agents, use LSP to find symbol definitions, references, and call hierarchies. This helps agents navigate unfamiliar codebases faster than grep.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.