Install the "triage-fixed-cves" agent skill from https://github.com/openshift-eng/ai-helpers/tree/main/plugins/golang/skills/triage-fixed-cves into .claude/skills/triage-fixed-cves/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "triage-fixed-cves", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add openshift-eng/ai-helpers --skill triage-fixed-cves -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "triage-fixed-cves" agent skill from https://github.com/openshift-eng/ai-helpers/tree/main/plugins/golang/skills/triage-fixed-cves into .agents/skills/triage-fixed-cves/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "triage-fixed-cves", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add openshift-eng/ai-helpers --skill triage-fixed-cves -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "triage-fixed-cves" agent skill from https://github.com/openshift-eng/ai-helpers/tree/main/plugins/golang/skills/triage-fixed-cves into .cursor/skills/triage-fixed-cves/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "triage-fixed-cves", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add openshift-eng/ai-helpers --skill triage-fixed-cves -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "triage-fixed-cves" agent skill from https://github.com/openshift-eng/ai-helpers/tree/main/plugins/golang/skills/triage-fixed-cves into .gemini/skills/triage-fixed-cves/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "triage-fixed-cves", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add openshift-eng/ai-helpers --skill triage-fixed-cves -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "triage-fixed-cves" agent skill from https://github.com/openshift-eng/ai-helpers/tree/main/plugins/golang/skills/triage-fixed-cves into .github/skills/triage-fixed-cves/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "triage-fixed-cves", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add openshift-eng/ai-helpers --skill triage-fixed-cves -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "triage-fixed-cves" agent skill from https://github.com/openshift-eng/ai-helpers/tree/main/plugins/golang/skills/triage-fixed-cves into .opencode/skills/triage-fixed-cves/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "triage-fixed-cves", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
triage-fixed-cves
GitHub stars
120
Token cost
~3.5k tokens
SKILL.md length
1,773 words
Files
1
Skills in repo
118
Repo updated
First seen
Licence
Apache-2.0
At a glance
Triage Go stdlib CVEs against an OpenShift release image to determine which CVEs are fixed by the Go version each component was built with.
Works in 7 steps: Extract component images from the release → Identify the built binary per component… → Detect Go version per component → …
The user asks to triage Go stdlib CVEs against an OpenShift release image
SKILL.md covers Step 1 — Extract component…, Step 2 — Identify the built…, Step 3 — Detect Go version per… and Step 4 — Query Jira for open…, plus 3 more sections
Calls podman, go and curl; reaches pkg.go.dev and github.com
What it does
Triage Fixed Cves is an agent skill from openshift-eng/ai-helpers. Triage Go stdlib CVEs against an OpenShift release image to determine which CVEs are fixed by the Go version each component was built with. Use when the user asks to triage Go stdlib CVEs against an OpenShift release image, check which Go CVEs are fixed in a release, or cross-reference Go vulnerability fixes across OCP components. Triggers on: 'triage Go CVEs', 'Go stdlib CVE triage', 'which Go CVEs are fixed', 'Go vulnerability report for release', or any mention of Go stdlib CVE + OpenShift release image.
Its SKILL.md is about 3.5k 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 Docker and 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
The user asks to triage Go stdlib CVEs against an OpenShift release image
Check which Go CVEs are fixed in a release
Cross-reference Go vulnerability fixes across OCP components
: triage Go CVEs
Example prompts
“triage Go CVEs”
“Go stdlib CVE triage”
“which Go CVEs are fixed”
“/triage-fixed-cves”
Workflow steps
7 steps, taken from the step headings in SKILL.md.
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
Shell commands in SKILL.md call:
podman
go
curl
From the folder's file list and the shell code blocks in SKILL.md.
Network
Hosts in commands or code, which the agent is likely to contact:
pkg.go.dev
github.com
vuln.go.dev
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Triage Fixed Cves loads about 3.5k tokens when it runs. Until then it costs about 133 tokens; SKILL.md has 1,773 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~133
When it runs· the whole SKILL.md, loaded when a task matches
~3.5k
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.
Download SKILL.mdSave it as .claude/skills/triage-fixed-cves/SKILL.md (or your agent's skills folder).
name
triage-fixed-cves
description
Triage Go stdlib CVEs against an OpenShift release image to determine which CVEs are fixed by the Go version each component was built with.
Use when the user asks to triage Go stdlib CVEs against an OpenShift release image, check which Go CVEs are fixed in a release, or cross-reference Go vulnerability fixes across OCP components.
Triggers on: 'triage Go CVEs', 'Go stdlib CVE triage', 'which Go CVEs are fixed', 'Go vulnerability report for release', or any mention of Go stdlib CVE + OpenShift release image.
triage-fixed-cves
Analyze an OpenShift release image to determine which Go standard library CVE
Jira tickets have been addressed by the Go version used to build each
component. Produces a per-CVE, per-component cross-reference report.
The user provides a release image pullspec (e.g.
quay.io/openshift-release-dev/ocp-release:4.17.0-x86_64).
Execute every step below in order. Do not skip steps.
Step 1 — Extract component images from the release
bash
oc adm release info <RELEASE_IMAGE> --output=json
Parse the JSON output to get the list of component image references. Each
entry in .references.spec.tags[] provides a name (component name) and
.from.name (image pullspec).
Each tag also carries .annotations metadata. Extract the
io.openshift.build.source-location annotation — this is the canonical
source GitHub repository URL for that component (e.g.
https://github.com/openshift/cluster-version-operator). Also extract
io.openshift.build.commit.id which gives the exact source commit SHA
the image was built from. Record both for every component — they are used
in Steps 2 and 4.
Auth failure: If oc adm release info fails due to an authentication
error, STOP immediately. Report the auth failure to the user and do not
proceed. Do not attempt to locate pull secrets, probe environment variables,
or try alternative credential paths — the RWS pod's registry proxy handles
authentication transparently, so an auth failure means the proxy does not
have credentials for this registry and manual intervention is required.
Collect the full list of (component_name, image_pullspec, source_repo, source_commit) tuples before proceeding.
Step 2 — Identify the built binary per component via Dockerfile
For each component, identify exactly which binary is built and where it
lands in the final image by looking up the component's Dockerfile. Do NOT
scan the entire image for all ELF binaries.
CI images (most components)
Look up the ci-operator config at
github.com/openshift/release/ci-operator/config/openshift/<repo>/.
Match the correct config file for the release branch and build variant (e.g.
openshift-cluster-version-operator-release-4.17.yaml). The config's
images.items[] specifies the dockerfile_path for each image. Fetch that
Dockerfile from the component's own repository at the exact source commit
recorded in io.openshift.build.commit.id from Step 1 — do not use
tree/main or the branch tip, as the release image may have been built from
an older revision.
Builder substitutions: ci-operator configs may declare builder image
overrides via images.items[].inputs.as — these replace FROM targets in
the Dockerfile at build time, which can change the Go toolchain version used.
Note any such substitutions when recording the component's build context.
Release / nightly images
Check the ocp-build-data config on the matching branch (e.g.
github.com/openshift-eng/ocp-build-data/tree/openshift-4.17/images/<component>.yml).
The from: and dockerfile: fields point to the Dockerfile.
OKD builds: The ocp-build-data image config may contain an
okd_alignment section that specifies a different Dockerfile for OKD
builds. These are typically named Dockerfile.scos or Dockerfile.okd.
When this section is present, use the OKD-specific Dockerfile instead of
the default one for OKD images. As with CI images, fetch the OKD
Dockerfile at the exact source commit from io.openshift.build.commit.id
(Step 1), not from the branch tip.
Parse the Dockerfile
Look for:
go build -o <binary> or go install commands — these tell you the output
binary name.
COPY --from=builder <src> <dest> in multi-stage builds — this tells you
where the binary is placed in the final image.
Example: a Dockerfile with go build -o /go/bin/cvo ./cmd/cvo and
COPY --from=builder /go/bin/cvo /usr/bin/cluster-version-operator means
the target binary is /usr/bin/cluster-version-operator.
Step 3 — Detect Go version per component
For each component, extract the Go version from the specific binary
identified in Step 2.
bash
podman pull <IMAGE>
podman create --name tmp-extract <IMAGE>
podman cp tmp-extract:<binary_path> /tmp/target-binary
podman rm -f tmp-extract # always remove so the name is freed for the next component
go version /tmp/target-binary
Cleanup: Always run podman rm -f tmp-extract unconditionally after
extraction (even on failure) so the container name is available for the
next component. Wrap the extract-copy-remove sequence in a function or
loop body to ensure cleanup is never skipped.
Parse the output. The format is:
text
/tmp/target-binary: go1.22.5
Extract the semver-style version (e.g. 1.22.5).
Important caveats
Do NOT assume a single Go version across the release. Different
components may use different Go toolchain versions. ci-operator builder
image substitutions (images.items[].inputs.as) mean components can lag
behind or jump ahead of the "default" Go version for a release.
Inspect ONLY the specific binary identified from the Dockerfile. Do not
scan the entire image filesystem for ELF binaries — that is slow, wasteful,
and may pick up unrelated binaries from base images.
If a component's Dockerfile cannot be found, or the component is not built
from Go (e.g. a pure shell image or non-Go component), record it as
N/A — no Go binary found and skip it in later steps.
If the Dockerfile builds multiple Go binaries, checking any one of them
is sufficient — all binaries in the same image share the same builder
image and therefore the same Go toolchain version.
Process components in batches to avoid excessive pull traffic. 10–20 at a
time is reasonable.
Step 4 — Query Jira for open Go stdlib CVE trackers
Search for open Jira vulnerability issues that track Go standard library CVEs
affecting the components in this release.
4a — Map release components to Jira components
Using the io.openshift.build.source-location source repo URLs extracted in
Step 1, map each repo to its corresponding OCPBUGS Jira component name (e.g.
openshift/cluster-version-operator → cluster-version-operator).
4b — Query for open stdlib CVE trackers
Using the discovered component list, query Jira with the coordinator's
query_jira tool:
jql
project = OCPBUGS
AND type = Vulnerability
AND labels in ("arc:stdlib")
AND status not in (Closed, "Release Pending", Verified)
AND component in (<discovered components>)
AND summary ~ "openshift-<version>"
ORDER BY component ASC
Replace <discovered components> with the comma-separated list of Jira
component names from step 4a, and <version> with the target OCP version
(e.g. 4.17).
For each returned issue, record:
Jira issue key (e.g. OCPBUGS-12345)
CVE ID (e.g. CVE-2024-24790) — extract the CVE-YYYY-NNNNN pattern
from the issue summary
Summary text
Affected component(s) listed in Jira
Fix version if mentioned in the issue
Step 5 — Exclude vendored dependency CVEs
Filter out CVEs that affect vendored Go dependencies rather than the Go
standard library itself. The goal is to keep only CVEs that are fixed by
upgrading the Go toolchain version.
Exclusion rules
golang.org/x/* packages: CVEs affecting golang.org/x/net,
golang.org/x/crypto, golang.org/x/text, golang.org/x/image, etc.
are vendored dependencies, not stdlib. Exclude them.
Hybrid CVEs: Some CVEs affect both stdlib packages AND vendored modules
(e.g. a CVE that affects net/http in stdlib but also
golang.org/x/net/http2). Classify these into a separate "Hybrid"
category — do not list them as both included and excluded:
The stdlib portion IS fixed by a Go version upgrade — include this
in the per-CVE cross-reference (Steps 6–7).
The vendored portion requires a separate dependency bump — note this
in the hybrid section of the report.
Detection method: Read the Jira issue description and any linked
advisories. Look for:
Package paths starting with golang.org/x/ — vendored
Package paths like net/http, crypto/tls, os, runtime — stdlib
References to the Go vulnerability database entry
Produce three lists from this step:
Stdlib-only CVEs → proceed to Steps 6–7 cross-reference
Hybrid CVEs → proceed to Steps 6–7 cross-reference (stdlib portion)
AND note in the dedicated hybrid section of the report (Step 7.4)
Vendored-only CVEs → excluded; listed in the report (Step 7.5)
Show full SKILL.md (682 more words)Show less
Step 6 — Map CVEs to Go vulnerability DB and cross-reference
For each remaining stdlib CVE, determine which Go versions contain the fix,
then check each component against those fix versions.
6a — Extract GO-* ID from Jira remote links
ProdSec and ARC typically attach a pkg.go.dev/vuln/GO-* URL to Go CVE
tracker tickets as a web link (remote link). The coordinator's
get_jira_issue tool returns remote links in its output.
For each CVE's Jira issue:
Call get_jira_issue(issue_key) (you already have the issue key from
Step 4).
Look through the remote links / web links section of the response for a URL
matching pkg.go.dev/vuln/GO-* (e.g.
https://pkg.go.dev/vuln/GO-2024-2887).
Extract the GO-YYYY-NNNN ID from that URL.
This is more reliable than searching the vuln database by CVE text, because
the Go vulnerability database uses GO-* format IDs (not CVE IDs directly)
and text search can miss or return ambiguous results.
6b — Fetch fixed versions
Using the GO-* ID, fetch the vulnerability entry:
text
https://pkg.go.dev/vuln/<GO_ID>
Use web_fetch to retrieve the page content, or fetch the JSON:
bash
curl -s "https://vuln.go.dev/ID/<GO_ID>.json"
The vulnerability entry contains fixed version fields under each affected
module/package. For stdlib entries the module is stdlib (or std). The
fixed field tells you the first Go version where the vulnerability is
patched (e.g. 1.22.5).
Note: there may be multiple fix versions for different Go release branches
(e.g. fixed in 1.21.12 and 1.22.5). Record all of them.
Fallback if no remote link is present: If a Jira ticket does not have a
pkg.go.dev/vuln remote link, try searching the Go vulnerability database
web interface via web_fetch:
text
https://pkg.go.dev/vuln/list?q=<CVE_ID>
If no Go vulnerability database entry exists for a CVE, note it as "not in
Go vuln DB."
6c — Cross-reference: which components are fixed?
For each CVE, compare the fixed Go version(s) against each component's
detected Go version from Step 3.
For a given CVE with fixed versions [1.21.12, 1.22.5]:
A component built with Go 1.22.5 or later on the 1.22 branch → FIXED
A component built with Go 1.22.4 on the 1.22 branch → AFFECTED
A component built with Go 1.21.12 or later on the 1.21 branch → FIXED
A component built with Go 1.23.0 (a newer minor branch) → FIXED
(Go includes all prior fixes in new minor releases)
Version comparison rules:
Compare within the same minor release branch first (1.22.x vs 1.22.y).
A component on a newer minor branch (e.g. 1.23.x) than any listed fix
version is considered fixed.
A component on an older minor branch that has no fix listed for that branch
is AFFECTED unless explicitly listed as unaffected in the vuln DB entry.
Produce a structured Markdown report with the following sections:
7.1 — Summary of Go versions across the release
Table of all unique Go versions found, with a count of components using each.
Flag any outlier versions (components using a significantly older Go version
than the majority).
7.2 — Per-CVE breakdown
For each CVE (sorted by CVE ID):
CVE ID and Jira issue key (linked)
Summary (one-line description)
Fixed in Go versions: list all fix versions from the vuln DB
Affected components: list components whose Go version is older than
the fix
Fixed components: count of components already on a fixed Go version
Status: ALL FIXED | PARTIALLY FIXED (N of M) | ALL AFFECTED
7.3 — Outlier components
List components whose Go version is notably older than the release majority.
These are the highest-risk components for stdlib CVEs and likely need
builder image updates.
7.4 — Hybrid CVEs
List CVEs classified as hybrid in Step 5. For each, show:
The stdlib packages affected (fixed by the Go version upgrade) and their
cross-reference status from section 7.2.
The vendored packages affected (require a separate dependency bump) and
which components still carry the vulnerable vendored version.
This section prevents hybrid CVEs from being ambiguously double-listed as
both "included" and "excluded."
7.5 — Excluded CVEs
List CVEs excluded in Step 5 as vendored-only, with the reason for
exclusion (e.g. golang.org/x/net — vendored dependency, not stdlib).
Store the report
Write the report to a file and store it via store_text with a descriptive
label (e.g. golang-cve-triage-4.17.0) so the coordinator can share it with
the user.
Triage Fixed 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.
Triage Fixed Cves compared with similar skills
Skill
Stars
Used in
Tokens
Auto-check
Licence
Repo updated
Triage Fixed Cves this skillopenshift-eng/ai-helpers
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…
Aggregates scanner results into DefectDojo, deduplicates findings, tracks remediation SLAs and prepares compliance reports across products and pipelines.
Gathers security findings from Dependabot, GCP container scanning, Docker Scout and Linear security issues, then triages and remediates them across Warp's repos and images.
Scans container images, filesystems and SBOMs with Grype for known vulnerabilities, ranks them by CVSS, EPSS and CISA KEV, and wires scans into CI/CD thresholds.
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
Triage Go stdlib CVEs against an OpenShift release image to determine which CVEs are fixed by the Go version each component was built with. Triage Fixed Cves is an agent skill from openshift-eng/ai-helpers. Triage Go stdlib CVEs against an OpenShift release image to determine which CVEs are fixed by the Go version each component was built with.
When should I use Triage Fixed Cves?
Triage Fixed Cves fits situations like: the user asks to triage Go stdlib CVEs against an OpenShift release image; check which Go CVEs are fixed in a release; cross-reference Go vulnerability fixes across OCP components; : triage Go CVEs.
How do I install Triage Fixed Cves in Claude Code?
Run `npx skills add openshift-eng/ai-helpers --skill triage-fixed-cves -a claude-code`. Or copy the skill folder (plugins/golang/skills/triage-fixed-cves in openshift-eng/ai-helpers) into .claude/skills/triage-fixed-cves in your project. Claude Code loads it when a task matches its description.
How do I install Triage Fixed Cves in Codex?
Run `npx skills add openshift-eng/ai-helpers --skill triage-fixed-cves -a codex`. Or copy the skill folder (plugins/golang/skills/triage-fixed-cves in openshift-eng/ai-helpers) into .agents/skills/triage-fixed-cves in your project. Codex loads it when a task matches its description.
Can I use Triage Fixed 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 triage-fixed-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/triage-fixed-cves, .gemini/skills/triage-fixed-cves, .github/skills/triage-fixed-cves and .opencode/skills/triage-fixed-cves in your project.
What does Triage Fixed Cves need to run?
Going by SKILL.md and its folder, Triage Fixed Cves needs the command-line tools its instructions call (podman, go and curl).
Does Triage Fixed Cves access the network?
SKILL.md names 3 domains. In commands or code: pkg.go.dev, github.com and vuln.go.dev; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Is Triage Fixed 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 Triage Fixed Cves use?
Triage Fixed 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 Triage Fixed Cves use?
About 3.5k tokens (SKILL.md is roughly 14k 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 Triage Fixed Cves?
Skills that share tags, products or a category with Triage Fixed Cves: Building Vulnerability Dashboard With Defectdojo (mukul975/Anthropic-Cybersecurity-Skills, 34k stars), Cyberowlai (karimhabush/cyberowl, 263 stars), DefectDojo Vulnerability Management (AgentSecOps/SecOpsAgentKit, 220 stars) and Warp Vulnerability Triage (warpdotdev/warp, 65k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Triage Fixed 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.