Agent skill

Query Open Cves

by openshift-eng in openshift-eng/ai-helpers

Query and deduplicate open CVE vulnerability issues from OCPBUGS for Node team components

Apache-2.0Auto-check passedSecurity

Install Query Open Cves

skills CLI
$ npx skills add openshift-eng/ai-helpers --skill query-open-cves -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install openshift-eng/ai-helpers query-open-cves --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/openshift-eng/ai-helpers.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/node-cve/skills/query-open-cves .claude/skills/query-open-cves && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
query-open-cves
GitHub stars
120
Token cost
~2.3k tokens
SKILL.md length
1,127 words
Files
1
Skills in repo
118
Repo updated
First seen
Licence
Apache-2.0

At a glance

Query and deduplicate open CVE vulnerability issues from OCPBUGS for Node team components

  • Works in 6 steps: Load Node team components → Query Jira → Parse results → …
  • Tasks that involve Vulnerability scanning
  • SKILL.md covers When to Use, Prerequisites, Implementation Steps and Return Value, plus 1 more section
  • Needs JIRA_API_TOKEN

What it does

Query Open Cves is an agent skill from openshift-eng/ai-helpers. Query and deduplicate open CVE vulnerability issues from OCPBUGS for Node team components

Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Security, covering Vulnerability scanning. It works with Jira. The repository describes itself as: Developer productivity tools for Claude Code & other AI assistants. The licence is Apache-2.0.

When your agent uses it

  • Tasks that involve Vulnerability scanning

Example prompts

  • “/query-open-cves”

Requirements

  • A credential in JIRA_API_TOKEN

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Load Node team components
  2. Query Jira
  3. Parse results
  4. Deduplicate by CVE ID
  5. Filter to latest OCP version
  6. Identify unassigned CVEs

What it can do on your machine

Read from SKILL.md and the folder at commit a627176. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are json and bash).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • JIRA_API_TOKEN

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Query Open Cves loads about 2.3k tokens when it runs. Until then it costs about 26 tokens; SKILL.md has 1,127 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~26
When it runs · the whole SKILL.md, loaded when a task matches
~2.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from openshift-eng/ai-helpers at commit a627176, republished under its Apache-2.0 licence (© openshift-eng). 1,127 words, ~2,290 tokens.

Download SKILL.mdSave it as .claude/skills/query-open-cves/SKILL.md (or your agent's skills folder).
name
query-open-cves
description
Query and deduplicate open CVE vulnerability issues from OCPBUGS for Node team components

When to Use

Use this skill when Phase 1 of the node-cve:triage command needs to fetch all open CVE trackers from Jira and deduplicate them into a list of unique CVEs.

Prerequisites

  • jira CLI configured with valid credentials
  • Environment variables: JIRA_API_TOKEN
  • Network access to Jira instance

Implementation Steps

Step 1: Load Node team components

Read the CVE-tracked component list from the node-team shared components reference. Use the full "Jira Components (OCPBUGS)" list plus the additional CVE triage components (Driver Toolkit, Machine Config Operator).

Default behavior (no --component flag): include ALL Node team components, and ONLY Node team components. "No flag" does not mean "no filter" — it means "the full Node component list." Never construct a query that omits the component filter entirely, even when no --component value was given.

If --component was specified, use only that single component instead of the full list. The value must match an entry in the shared reference exactly; if it does not, print an error listing the valid component names and exit rather than silently falling back to an unfiltered query.

The Jira saved filter "Node Components" (ID 91645) does not include Driver Toolkit and Machine Config Operator, so the explicit list from the shared reference is used for CVE queries to ensure completeness.

CRITICAL SAFEGUARD: This component filter is what scopes every downstream step (analysis, reporting, and — critically — Jira comment posting in Phase 3) to Node team trackers only. Many CVEs (especially Go stdlib or vendored-dependency vulnerabilities) have 50-200+ tracker issues across dozens of OpenShift teams. Omitting or bypassing this filter — for example by later re-querying Jira with only a CVE ID and no component constraint — is what caused the 2026-07-15 incident where Node-specific analysis was posted to ~200 non-Node trackers (HyperShift, Storage, Networking, Installer, etc.). See the report-findings "Node Team Component Safeguard" section for the posting-time re-validation this feeds into.

Step 2: Query Jira

Build and execute the JQL query. The component in (...) clause is mandatory in every invocation of this query, whether or not --component was passed:

bash
jira issue list -q "project = OCPBUGS AND type = Vulnerability AND component in (<components from shared reference, or the single --component value>) AND status not in (Closed, Done, Verified)" --plain --no-headers --columns KEY,SUMMARY,COMPONENT,STATUS,ASSIGNEE,LABELS

If --days N was specified, add AND updated >= -${N}d to the JQL.

Handle pagination: the jira CLI returns up to 100 results by default (format: --paginate <from>:<limit>). If the result count equals 100, paginate by re-running with --paginate 100:100, --paginate 200:100, etc. until fewer than 100 results are returned.

Sanity check: After fetching results, verify that every returned COMPONENT value is actually in the Node team component list (or, when --component was given, equals that value). If any row has an unexpected component, this indicates a JQL construction bug — log a warning with the offending tracker key and component, and exclude that row rather than propagating it downstream.

Step 3: Parse results

For each row in the output:

  1. Extract the issue key (e.g., OCPBUGS-85948)
  2. Extract the CVE ID from the summary using regex: CVE-[0-9]{4}-[0-9]+
  3. Extract the OCP version from the summary brackets: \[openshift-([^\]]+)\]
  4. Extract component name
  5. Extract status and assignee
  6. Extract labels (preserve pscomponent:* labels for Phase 2 repo mapping)
Step 4: Deduplicate by CVE ID

Group all tracker issues by CVE ID. For each unique CVE, build a record:

json
{
  "cve_id": "CVE-2026-32281",
  "summary": "Go crypto/x509: Denial of Service via inefficient certificate chain validation",
  "components": ["Node / CRI-O"],
  "status": "New",
  "assignee": "ocp-sustaining-blocked-trackers",
  "tracker_keys": ["OCPBUGS-85948", "OCPBUGS-85932", "OCPBUGS-85914", "..."],
  "affected_versions": ["4.12.z", "4.13.z", "4.14.z", "4.15.z", "4.16.z", "4.17", "4.18", "4.19"],
  "labels": ["pscomponent:cri-o", "SecurityTracking"]
}

A single CVE may span multiple components (e.g., both "Node / CRI-O" and "Machine Config Operator"), so components is an array collecting all distinct component values across tracker issues for that CVE.

Use the highest version tracker for the "primary" assignee and status (issues on newer versions are typically more actively managed).

Show full SKILL.md (554 more words)Show less
Step 5: Filter to latest OCP version

Auto-detect the latest OCP version from the query results and filter to it. This prevents the Node team from triaging versions owned by the sustaining team.

  1. If Step 2 returned zero Jira rows, skip version filtering — there are no trackers to filter. Return an empty CVE list with version_filter: null. Print: "No open CVEs found; version auto-detection skipped."
  2. Collect all OCP versions extracted from tracker summaries in Step 3 (e.g., 4.12.z, 4.14.z, 4.17, 4.18, 4.19, 5.0).
  3. Discard non-numeric versions: Any version string that cannot be parsed as a numeric major.minor pair (e.g., latest, nightly, or other non-version labels) must be discarded with a warning — do not treat it as a valid OCP version. Only versions matching the pattern <digits>.<digits> (optionally followed by .z) are valid. If ALL extracted versions are discarded (no valid numeric versions remain), treat this the same as zero Jira rows: return an empty CVE list with version_filter: null. Print: "No valid numeric OCP versions found in tracker summaries; version auto-detection failed."
  4. Determine the latest version by sorting the remaining valid versions numerically:
    • Strip trailing .z suffixes for comparison purposes (.z indicates a z-stream release, which is always an older maintenance stream).
    • Parse each version as (major, minor) — e.g., 5.0 → (5, 0), 4.19 → (4, 19), 4.12.z → (4, 12).
    • Sort descending by major, then by minor. The first entry is the latest version.
    • version_filter always stores the stripped major.minor form (no .z suffix), since .z is a release-stream qualifier, not a distinct version. Example: given [4.12.z, 4.14.z, 4.17, 4.18, 4.19, 5.0], the latest is 5.0 and version_filter is "5.0".
  5. For each CVE record from Step 4, filter trackers to the latest version. Compare each tracker's OCP version against version_filter after stripping any .z suffix from the tracker version (so 4.14.z matches filter 4.14):
    • Remove non-matching entries from tracker_keys, affected_versions, components, and labels — keep only values associated with retained trackers.
    • If a CVE has no remaining trackers after filtering, exclude it entirely — it has no tracker for the latest version and is therefore a sustaining-team concern only.
  6. After filtering, rebuild each CVE record's metadata entirely from the retained tracker set. Per-tracker associations (component, labels, assignee, status) must be preserved during Step 4 deduplication so they can be used here. Recompute: tracker_keys, affected_versions, components, labels, assignee, status, and is_unassigned. This ensures no stale metadata from removed trackers leaks into Phase 2 (repo selection) or Phase 3 (reporting).
  7. Print: "Version filter: <version> (auto-detected). Older versions are triaged by the sustaining team."
Step 6: Identify unassigned CVEs

Flag CVEs where:

  • Assignee is a bot account (e.g., "ocp-sustaining-blocked-trackers") or empty
  • Status is "New" (not yet picked up)

Return Value

json
{
  "skill": "query-open-cves",
  "status": "success",
  "version_filter": "5.0",
  "total_trackers": 8,
  "total_trackers_before_version_filter": 45,
  "unique_cves": 6,
  "cves": [
    {
      "cve_id": "CVE-2026-32281",
      "summary": "...",
      "components": ["Node / CRI-O"],
      "status": "New",
      "assignee": "ocp-sustaining-blocked-trackers",
      "is_unassigned": true,
      "tracker_keys": ["OCPBUGS-85948"],
      "affected_versions": ["5.0"],
      "labels": ["pscomponent:cri-o"]
    }
  ]
}

version_filter is the auto-detected latest OCP version in stripped major.minor form (e.g., "5.0"). It is null when no version could be detected (zero Jira rows or all extracted versions were non-numeric) — in that case cves is an empty array. Downstream consumers must check for null before using version_filter as a version string.

Error Handling

  • If jira CLI returns an error, print the error and exit. Common causes: expired API token, network issues, invalid JQL.
  • If the query returns 0 results, return an empty list (not an error).
  • If a CVE ID cannot be extracted from a summary, log a warning and skip that tracker.

© openshift-eng, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in plugins/node-cve/skills/query-open-cves of openshift-eng/ai-helpers.

Open the folder on GitHubat commit a627176

Compare with similar skills

Query Open Cves next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Query Open Cves compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Query Open Cves this skillopenshift-eng/ai-helpers120—~2.3kAutomated safety check: PassApache-2.0
Security Assessmentamd/gaia1.6k—~1.8kAutomated safety check: PassMIT
Building Vulnerability Dashboard With Defectdojomukul975/Anthropic-Cybersecurity-Skills34k—~2kAutomated safety check: PassApache-2.0
Deepsec Documentation Guidevercel-labs/deepsec8.1k—~956Automated safety check: PassApache-2.0
Shiro Attack CLISummerSec/ShiroAttack22.6k—~945Automated safety check: PassMIT
Cve Remediationrundeck/rundeck6.3k—~2.9kAutomated safety check: PassApache-2.0

Similar skills

  • Assess a reported security vulnerability in GAIA and fill a PSIRT / JIRA triage: decide if it is valid & exploitable, whether it needs a CVE + bulletin, and produce the CVSS 4.0 score, CWE, and CVE…

    1.6k GitHub stars~1.8k tokensUpdated today
    SecurityAuto-check passed
  • Building Vulnerability Dashboard With Defectdojo

    mukul975/Anthropic-Cybersecurity-Skills

    Deploy DefectDojo as a centralized vulnerability management dashboard that ingests findings from 200+ security scanners, deduplicates results, tracks remediation metrics, and integrates with CI/CD…

    34k GitHub stars~2k tokensUpdated 1 mo ago
    DevOps & CloudAuto-check passed
  • Deepsec Documentation Guide

    vercel-labs/deepsec

    Official

    Points the agent at deepsec's own docs to answer questions about initializing, configuring, resuming, scanning with and extending the vulnerability scanner.

    8.1k GitHub stars~956 tokensUpdated 9 days ago
    SecurityAuto-check passed
  • Shiro Attack CLI

    SummerSec/ShiroAttack2

    当用户要求利用、检测或测试 Apache Shiro rememberMe 反序列化漏洞 (Shiro-550, CVE-2016-4437) 时使用。触发词包括 "Shiro"、"rememberMe"、"shiro attack"、"CVE-2016-4437"、"Shiro-550"、"爆破 Shiro key"、"利用 Shiro"、"Shiro…

    2.6k GitHub stars~945 tokensUpdated 4 mo ago
    SecurityAuto-check passed
  • Cve Remediation

    rundeck/rundeck

    Verify if a CVE affects the project and remediate it. An agent skill from rundeck/rundeck.

    6.3k GitHub stars~2.9k tokensUpdated today
    SecurityAuto-check passed
  • Update native dependencies (libpng, libexpat, zlib, libwebp, harfbuzz, freetype, libjpeg-turbo, etc.) in SkiaSharp's Skia fork.

    5.6k GitHub stars~4.1k tokensUpdated today
    SecurityAuto-check passed

More from openshift-eng/ai-helpers

All 118 skills in this repo
  • Investigate CI Reliability

    openshift-eng/ai-helpers

    Find and independently validate actionable reliability defects across OpenShift release jobs and presubmits, then export portable issue handoffs.

    120 GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Address Review PR

    openshift-eng/ai-helpers

    Fetch and address all PR review comments — categorize by priority, make code changes, post replies, and push.

    120 GitHub stars~2.9k tokensUpdated yesterday
    Auto-check passed
  • Categorize Activity Types

    openshift-eng/ai-helpers

    Categorize Jira issues into Red Hat Sankey Activity Type categories using MCP Jira tools.

    120 GitHub stars~2.4k tokensUpdated yesterday
    Auto-check passed
  • Has Review Work

    openshift-eng/ai-helpers

    Decide whether a GitHub PR has unanswered authorized review comments or new required CI failures worth a follow-up agent.

    120 GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Must Gather Analyzer

    openshift-eng/ai-helpers

    Analyze OpenShift must-gather diagnostic data including cluster operators, pods, nodes, and network components.

    120 GitHub stars~2.3k tokensUpdated yesterday
    Auto-check passed
  • Payload Autodl JSON

    openshift-eng/ai-helpers

    Schema for the autodl JSON data file produced by payload-analysis for database ingestion — you must use this skill whenever generating the autodl JSON file

    120 GitHub stars~2.6k tokensUpdated yesterday
    Auto-check passed

Works with

Categories

Questions about Query Open Cves

What does Query Open Cves do?

Query and deduplicate open CVE vulnerability issues from OCPBUGS for Node team components. Query Open Cves is an agent skill from openshift-eng/ai-helpers.

When should I use Query Open Cves?

Query Open Cves fits situations like: tasks that involve Vulnerability scanning.

How do I install Query Open Cves in Claude Code?

Run `npx skills add openshift-eng/ai-helpers --skill query-open-cves -a claude-code`. Or copy the skill folder (plugins/node-cve/skills/query-open-cves in openshift-eng/ai-helpers) into .claude/skills/query-open-cves in your project. Claude Code loads it when a task matches its description.

How do I install Query Open Cves in Codex?

Run `npx skills add openshift-eng/ai-helpers --skill query-open-cves -a codex`. Or copy the skill folder (plugins/node-cve/skills/query-open-cves in openshift-eng/ai-helpers) into .agents/skills/query-open-cves in your project. Codex loads it when a task matches its description.

Can I use Query Open Cves in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add openshift-eng/ai-helpers --skill query-open-cves -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/query-open-cves, .gemini/skills/query-open-cves, .github/skills/query-open-cves and .opencode/skills/query-open-cves in your project.

What does Query Open Cves need to run?

Going by SKILL.md and its folder, Query Open Cves needs credentials named JIRA_API_TOKEN. Our summary lists: A credential in JIRA_API_TOKEN.

Does Query Open Cves access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Query Open Cves safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Query Open Cves use?

Query Open Cves is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Query Open Cves use?

About 2.3k tokens (SKILL.md is roughly 9.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Query Open Cves?

Skills that share tags, products or a category with Query Open Cves: Security Assessment (amd/gaia, 1.6k stars), Building Vulnerability Dashboard With Defectdojo (mukul975/Anthropic-Cybersecurity-Skills, 34k stars), Deepsec Documentation Guide (vercel-labs/deepsec, 8.1k stars) and Shiro Attack CLI (SummerSec/ShiroAttack2, 2.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Query Open Cves?

openshift-eng (a GitHub organization) maintains it in openshift-eng/ai-helpers, which has 120 GitHub stars. The repository holds 118 skills in this directory. The repository was last updated on October 6, 2026.

Source: openshift-eng/ai-helpers on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.