Security Assessment
amd/gaia
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…
A skill your agent uses when posting a completed CVE analysis report or PR follow-up as a Jira comment on the source ticket from /compliance:analyze-cve.
$ npx skills add openshift-eng/ai-helpers --skill report-to-jira -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install openshift-eng/ai-helpers report-to-jira --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/openshift-eng/ai-helpers.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/compliance/skills/report-to-jira .claude/skills/report-to-jira && rm -rf skills-srcUse ~/.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/
Install the "report-to-jira" agent skill from https://github.com/openshift-eng/ai-helpers/tree/main/plugins/compliance/skills/report-to-jira into .claude/skills/report-to-jira/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report-to-jira", 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.
$skill-installer install https://github.com/openshift-eng/ai-helpers/tree/main/plugins/compliance/skills/report-to-jiraType 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.
$ npx skills add openshift-eng/ai-helpers --skill report-to-jira -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install openshift-eng/ai-helpers report-to-jira --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/openshift-eng/ai-helpers.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/compliance/skills/report-to-jira .agents/skills/report-to-jira && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "report-to-jira" agent skill from https://github.com/openshift-eng/ai-helpers/tree/main/plugins/compliance/skills/report-to-jira into .agents/skills/report-to-jira/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report-to-jira", 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.
$ npx skills add openshift-eng/ai-helpers --skill report-to-jira -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install openshift-eng/ai-helpers report-to-jira --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/openshift-eng/ai-helpers.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/compliance/skills/report-to-jira .cursor/skills/report-to-jira && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "report-to-jira" agent skill from https://github.com/openshift-eng/ai-helpers/tree/main/plugins/compliance/skills/report-to-jira into .cursor/skills/report-to-jira/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report-to-jira", 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.
$ gemini skills install https://github.com/openshift-eng/ai-helpers.git --path plugins/compliance/skills/report-to-jira--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add openshift-eng/ai-helpers --skill report-to-jira -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install openshift-eng/ai-helpers report-to-jira --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/openshift-eng/ai-helpers.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/compliance/skills/report-to-jira .gemini/skills/report-to-jira && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "report-to-jira" agent skill from https://github.com/openshift-eng/ai-helpers/tree/main/plugins/compliance/skills/report-to-jira into .gemini/skills/report-to-jira/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report-to-jira", 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.
$ gh skill install openshift-eng/ai-helpers report-to-jiraInstalls 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).
$ npx skills add openshift-eng/ai-helpers --skill report-to-jira -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/openshift-eng/ai-helpers.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/compliance/skills/report-to-jira .github/skills/report-to-jira && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "report-to-jira" agent skill from https://github.com/openshift-eng/ai-helpers/tree/main/plugins/compliance/skills/report-to-jira into .github/skills/report-to-jira/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report-to-jira", 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.
$ npx skills add openshift-eng/ai-helpers --skill report-to-jira -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install openshift-eng/ai-helpers report-to-jira --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/openshift-eng/ai-helpers.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/compliance/skills/report-to-jira .opencode/skills/report-to-jira && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "report-to-jira" agent skill from https://github.com/openshift-eng/ai-helpers/tree/main/plugins/compliance/skills/report-to-jira into .opencode/skills/report-to-jira/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report-to-jira", 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.
report-to-jiraA skill your agent uses when posting a completed CVE analysis report or PR follow-up as a Jira comment on the source ticket from /compliance:analyze-cve.
Report To Jira is an agent skill from openshift-eng/ai-helpers. Use when posting a completed CVE analysis report or PR follow-up as a Jira comment on the source ticket from /compliance:analyze-cve.
Its SKILL.md is about 4.1k 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.
5 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.
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.
Shell commands in SKILL.md call:
python3curlFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use curl, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
JIRA_API_TOKENJIRA_TOKENATLASSIAN_API_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Report To Jira loads about 4.1k tokens when it runs. Until then it costs about 38 tokens; SKILL.md has 1,378 words of instructions outside code blocks.
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.
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.
The full file from openshift-eng/ai-helpers at commit a627176, republished under its Apache-2.0 licence (© openshift-eng). 1,378 words, ~4,107 tokens.
.claude/skills/report-to-jira/SKILL.md (or your agent's skills folder).Posts the completed CVE analysis report as a comment on the source Jira ticket — the same ticket the CVE details were read from (SOURCE_TICKET, set in Phase 0.5 from --jira=/--jql=). Always called as the last step of Phase 4, after the report has been generated. Also reused by create-fix-pr (Phase 6) for a short follow-up comment containing the PR URL.
If no Jira ticket was involved (direct <CVE-ID> mode), this skill is skipped entirely — there is nothing to post to.
Before posting, verify the following are available from the parent command:
CVE-2024-45338)SOURCE_TICKET — the Jira ticket key from --jira=/--jql= (e.g. OCPBUGS-12345). This is the only ticket this skill writes to.jira_context — label snapshot from Phase 0.5 (jira_context["labels"]); used as a hint only — Step 4.5 re-fetches current labels before writingHIGH / MEDIUM / LOW / NEEDS_REVIEW)AUTO_APPROVE (yes/no, default no) — governs the Step 3b visibility-downgrade fallback promptIf SOURCE_TICKET is not available (direct CVE mode): return status: skipped with reason "no_source_ticket".
If the report is incomplete or Phase 3 did not finish, return status: skipped with reason.
Read ${AI_HELPERS_WORKSPACE:-.}/.work/compliance/analyze-cve/${CVE_ID}/report.md from Phase 3 and post it in full. The Jira comment is the report — do not pre-emptively shorten it or write a separate jira-comment.md.
Write standard Markdown — Jira Cloud renders Markdown natively when posted with contentFormat: "markdown" (see markdown-for-jira reference if that plugin is installed; the syntax is standard CommonMark either way). No wiki-markup conversion is needed.
Default body = attribution header + entire report.md. If Phase 4 produced a remediation plan not already under ## Remediation in the report, append it as ## Remediation Plan (Phase 4).
Prepend the following attribution header before the report:
> ⚠️ **This analysis was performed automatically by `/compliance:analyze-cve`.**
> Results should be reviewed by a human before acting on remediation steps.
---
Jira comment bodies are capped at 32,767 characters. Apply these steps in order — only move to the next step if the comment is still over 32,000 chars:
govulncheck scrollback, call-graph DOT, or megabyte grep output with a one-line pointer:_(Full output truncated — see `${AI_HELPERS_WORKSPACE:-.}/.work/compliance/analyze-cve/<CVE_ID>/govulncheck-source.txt`)_report.md. Retain: risk level, repository/branch/commit, dependency versions, govulncheck conclusion, four-algorithm call-graph table, manual verification findings, recommendation, and artifact paths. Omit repeated narrative and any remaining large code blocks. Note at the top:_(Full report exceeded Jira comment limit — summary below. See `${AI_HELPERS_WORKSPACE:-.}/.work/compliance/analyze-cve/<CVE_ID>/report.md`.)_embargo_status: True, abort immediately.Credential rule: Never print, echo, or log any token, key, or password value. Reference credentials only via environment variable names. Never interpolate a credential value into a logged string.
CVE analysis reports contain security-sensitive findings. Prefer restricted (internal-only) visibility when the Jira instance supports it.
If a token is available in the environment, try the REST API directly so the comment can carry a visibility restriction the MCP tool does not support. Try both auth schemes and let the HTTP response decide which one worked — credentials may be exposed differently depending on the runtime (a local shell with a bare token vs. a CI/RWS runner with a mounted service-account email+token pair):
JIRA_EMAIL and a token are available.JIRA_API_TOKEN="${JIRA_API_TOKEN:-${JIRA_TOKEN:-${ATLASSIAN_API_TOKEN:-}}}"
JIRA_BASE_URL="${JIRA_URL:-}"
JIRA_EMAIL="${JIRA_EMAIL:-}"
if [ -n "${JIRA_API_TOKEN}" ] && [ -n "${JIRA_BASE_URL}" ]; then
case "${JIRA_BASE_URL}" in
https://*) ;;
*) echo "ERROR: JIRA_BASE_URL must use HTTPS (got: ${JIRA_BASE_URL})"; exit 1 ;;
esac
cat > /tmp/cve-report-comment.txt << 'COMMENT_EOF'
<constructed comment from Step 2>
COMMENT_EOF
COMMENT_BODY=$(cat /tmp/cve-report-comment.txt)
COMMENT_JSON_BODY=$(echo "${COMMENT_BODY}" | python3 -c "import json,sys; print(json.dumps(sys.stdin.read()))")
post_comment() {
# $1 = auth mode: "basic" (email+token) or "bearer" (token only)
# Build the Authorization header inside this function after set +x so
# credentials never appear in traced argv when post_comment is invoked.
local auth_mode="$1" curl_cfg http_code auth_header
curl_cfg=$(mktemp)
chmod 600 "${curl_cfg}"
trap 'rm -f "${curl_cfg}"' RETURN EXIT INT TERM
[[ $- == *x* ]] && local _was_tracing=true || local _was_tracing=false
set +x
if [ "${auth_mode}" = "basic" ]; then
auth_header="Basic $(printf '%s:%s' "${JIRA_EMAIL}" "${JIRA_API_TOKEN}" | base64 | tr -d '\n')"
else
auth_header="Bearer ${JIRA_API_TOKEN}"
fi
printf 'header = "Authorization: %s"\n' "${auth_header}" > "${curl_cfg}"
unset auth_header
$_was_tracing && set -x || true
http_code=$(curl -s -o /tmp/jira-post-response.txt -w "%{http_code}" \
--connect-timeout 15 \
--max-time 60 \
-X POST \
-K "${curl_cfg}" \
"${JIRA_BASE_URL}/rest/api/2/issue/${SOURCE_TICKET}/comment" \
-H "Content-Type: application/json" \
--data-binary @- << EOF
{
"body": ${COMMENT_JSON_BODY},
"visibility": {
"type": "group",
"value": "Red Hat Employee"
}
}
EOF
)
echo "${http_code}"
}
HTTP_STATUS=""
if [ -n "${JIRA_EMAIL}" ] && [ -n "${JIRA_API_TOKEN}" ]; then
echo "Attempting REST post with Basic auth (email + token)..."
HTTP_STATUS=$(post_comment basic)
fi
# Only retry with the other auth scheme when Basic wasn't attempted at all
# (no JIRA_EMAIL) or came back with an actual auth failure (401/403). This
# POST is not idempotent: retrying it for every other status (400, 429,
# 5xx, or curl's own "000") risks creating a duplicate comment if the first
# request was actually accepted server-side but the response was lost or
# malformed. Any other failure goes straight to Step 3b instead of retrying.
if { [ -z "${HTTP_STATUS}" ] || [ "${HTTP_STATUS}" = "401" ] || [ "${HTTP_STATUS}" = "403" ]; } && [ -n "${JIRA_API_TOKEN}" ]; then
echo "Attempting REST post with Bearer auth..."
HTTP_STATUS=$(post_comment bearer)
fi
echo "Jira API HTTP status: ${HTTP_STATUS:-none attempted}"
if [ "${HTTP_STATUS}" = "201" ]; then
echo "✓ Comment posted with restricted visibility"
else
echo "✗ REST API failed (HTTP ${HTTP_STATUS:-n/a}) — will fall back to MCP tool"
cat /tmp/jira-post-response.txt 2>/dev/null || true
fi
fiThe
visibilityobject above targetsredhat.atlassian.net. On other Jira Cloud instances, adjusttype/valueto match an equivalent internal-only group, or omitvisibilityentirely if none exists.
000) → do not retry with Bearer (the POST is not idempotent) — go directly to Step 3b.JIRA_API_TOKEN, JIRA_EMAIL, the computed BASIC_AUTH value, or the contents of ${curl_cfg} — only the HTTP status code and response body (which contains no credentials).addCommentToJiraIssue(
issue_key=SOURCE_TICKET,
comment_body="<constructed comment from Step 2>",
contentFormat="markdown"
)⚠️ The MCP tool does not expose a
visibilityparameter — the comment will be visible to everyone with access to the ticket, not restricted to an internal group.
This visibility downgrade is gated by AUTO_APPROVE when it happens after Step 3a was actually attempted and failed (i.e. restricted posting was possible in principle but didn't work):
AUTO_APPROVE=no and Step 3a was attempted and failed → ask the user:⚠️ Restricted-visibility posting is unavailable (no REST credentials, or the request failed). The MCP fallback will post this comment visible to everyone with ticket access. Proceed?AUTO_APPROVE=yes and Step 3a was attempted and failed → proceed automatically via the MCP fallback. Clearly log that this comment was posted without the internal-only restriction.Fallback — jira-cli (if MCP is also unavailable):
jira issue comment add "${SOURCE_TICKET}" \
--body "$(cat /tmp/cve-report-comment.txt)" \
--no-inputAfter posting, output to the session:
✅ Report posted to <SOURCE_TICKET>
<JIRA_BASE_URL>/browse/<SOURCE_TICKET>
CVE: <CVE_ID>
Risk level: <level>If the post fails:
❌ Failed to post report to <SOURCE_TICKET>
Error: <error message>
The full report has been displayed above. Please copy and paste it
into <SOURCE_TICKET> manually.Do not retry more than once. On failure, display the comment body in the session so the user can post it manually.
Add the label ai-cve-analyzed to SOURCE_TICKET to prevent redundant re-processing on future runs.
Only run this step if Step 3 succeeded. If Step 3 failed for any reason, skip this step entirely — do not add the label to a ticket that did not receive the comment.
Jira's update API replaces the entire label list — it does not append. Sending only ["ai-cve-analyzed"] will delete all existing labels on the ticket. This is a destructive operation and must never happen.
Before writing, always:
fresh = getJiraIssue(issue_key=SOURCE_TICKET)
current_labels = fresh["fields"]["labels"] # never start from an empty listjira_context["labels"] only as a fallback if the re-fetch fails.ai-cve-analyzed to current_labels# current_labels comes from the mandatory re-fetch above (Step 4.5)
if "ai-cve-analyzed" not in current_labels:
new_labels = current_labels + ["ai-cve-analyzed"]
else:
new_labels = current_labels # already marked — nothing to write
editJiraIssue(
issue_key=SOURCE_TICKET,
fields={"labels": new_labels}
)Fallback — jira-cli (appends without replacing — safe to use directly):
jira issue edit "${SOURCE_TICKET}" --label "ai-cve-analyzed" --no-inputAfter the update call, re-fetch the ticket labels and confirm:
updated = getJiraIssue(issue_key=SOURCE_TICKET)
updated_labels = updated["fields"]["labels"]
assert "ai-cve-analyzed" in updated_labels, "New label missing"
for label in current_labels:
assert label in updated_labels, f"LABEL LOST: {label}"If the new label is missing: log a non-fatal warning — the report is already posted:
⚠️ Could not add 'ai-cve-analyzed' label to <SOURCE_TICKET>. Add it manually to prevent re-processing.If an existing label was lost: this is a data integrity error — log it and output the original label list so the user can restore it:
❌ LABEL INTEGRITY ERROR on <SOURCE_TICKET>
The following labels were present before the update but are now missing:
<list of lost labels>
Original full label list (restore manually):
<current_labels>If both checks pass:
✅ Label 'ai-cve-analyzed' added to <SOURCE_TICKET>. Labels verified intact.Success:
{
"skill": "report-to-jira",
"status": "success",
"source_ticket": "<SOURCE_TICKET>",
"cve_id": "<CVE_ID>",
"risk_level": "<HIGH|MEDIUM|LOW|NEEDS_REVIEW>",
"method": "rest | mcp | jira-cli"
}Skipped:
{
"skill": "report-to-jira",
"status": "skipped",
"reason": "<no_source_ticket | report incomplete | phase 3 did not finish>"
}Failed:
{
"skill": "report-to-jira",
"status": "failed",
"source_ticket": "<SOURCE_TICKET>",
"error": "<error message>",
"fallback": "comment body displayed in session for manual posting"
}Called from Phase 4 of the analyze-cve skill as the final step, after the report has been fully generated.
Input: complete report content, CVE ID, risk level, SOURCE_TICKET (from Phase 0.5), AUTO_APPROVE
Output: confirmation of comment and label posted to SOURCE_TICKET, or status: skipped/failed per above
Also called from Phase 6 (create-fix-pr) for a short follow-up comment containing only the GitHub PR URL. That path uses the section below and must not replace this analysis comment or change labels.
Post a new comment on SOURCE_TICKET after a remediation PR is opened. Invoked by create-fix-pr.
Do not run this path unless SOURCE_TICKET is set, Phase 6 produced a PR_URL, and the user approved opening the PR.
Do not:
ai-cve-analyzed stays as Phase 4 left it)embargo_status = True, abort)### Remediation PR opened
A pull request is open for this CVE.
- **PR:** [<PR_URL>](<PR_URL>)
- **CVE:** <CVE_ID>
- **Change:** <what Phase 5 changed — `<module>` <old> → <new> only for a dependency bump; otherwise a short source/config summary>
- **Base branch:** <BASE_BRANCH>Use the same procedure as Step 3 (REST with restricted visibility first if configured, MCP/jira-cli fallback otherwise).
On failure, print the comment in the session for manual paste. Do not treat a Jira follow-up failure as a GitHub PR failure — the PR itself is still a success.
Return:
{
"skill": "report-to-jira",
"status": "success | skipped | failed",
"mode": "pr_followup",
"source_ticket": "<SOURCE_TICKET>",
"pr_url": "<PR_URL>"
}© 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
Just SKILL.md in plugins/compliance/skills/report-to-jira of openshift-eng/ai-helpers.
Open the folder on GitHubat commit a627176
Report To Jira 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Report To Jira this skillopenshift-eng/ai-helpers | 120 | — | ~4.1k | Automated safety check: Pass | Apache-2.0 | |
| Security Assessmentamd/gaia | 1.6k | — | ~1.8k | Automated safety check: Pass | MIT | |
| Building Vulnerability Dashboard With Defectdojomukul975/Anthropic-Cybersecurity-Skills | 34k | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Deepsec Documentation Guidevercel-labs/deepsec | 8.1k | — | ~956 | Automated safety check: Pass | Apache-2.0 | |
| Shiro Attack CLISummerSec/ShiroAttack2 | 2.6k | — | ~945 | Automated safety check: Pass | MIT | |
| Cve Remediationrundeck/rundeck | 6.3k | — | ~2.9k | Automated safety check: Pass | Apache-2.0 |
amd/gaia
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…
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…
vercel-labs/deepsec
Points the agent at deepsec's own docs to answer questions about initializing, configuring, resuming, scanning with and extending the vulnerability scanner.
SummerSec/ShiroAttack2
当用户要求利用、检测或测试 Apache Shiro rememberMe 反序列化漏洞 (Shiro-550, CVE-2016-4437) 时使用。触发词包括 "Shiro"、"rememberMe"、"shiro attack"、"CVE-2016-4437"、"Shiro-550"、"爆破 Shiro key"、"利用 Shiro"、"Shiro…
rundeck/rundeck
Verify if a CVE affects the project and remediate it. An agent skill from rundeck/rundeck.
mono/SkiaSharp
Update native dependencies (libpng, libexpat, zlib, libwebp, harfbuzz, freetype, libjpeg-turbo, etc.) in SkiaSharp's Skia fork.
openshift-eng/ai-helpers
Find and independently validate actionable reliability defects across OpenShift release jobs and presubmits, then export portable issue handoffs.
openshift-eng/ai-helpers
Fetch and address all PR review comments — categorize by priority, make code changes, post replies, and push.
openshift-eng/ai-helpers
Categorize Jira issues into Red Hat Sankey Activity Type categories using MCP Jira tools.
openshift-eng/ai-helpers
Decide whether a GitHub PR has unanswered authorized review comments or new required CI failures worth a follow-up agent.
openshift-eng/ai-helpers
Analyze OpenShift must-gather diagnostic data including cluster operators, pods, nodes, and network components.
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
Works with
Categories
A skill your agent uses when posting a completed CVE analysis report or PR follow-up as a Jira comment on the source ticket from /compliance:analyze-cve. Report To Jira is an agent skill from openshift-eng/ai-helpers. Use when posting a completed CVE analysis report or PR follow-up as a Jira comment on the source ticket from /compliance:analyze-cve.
Report To Jira fits situations like: posting a completed CVE analysis report; PR follow-up as a Jira comment on the source ticket from /compliance:analyze-cve.
Run `npx skills add openshift-eng/ai-helpers --skill report-to-jira -a claude-code`. Or copy the skill folder (plugins/compliance/skills/report-to-jira in openshift-eng/ai-helpers) into .claude/skills/report-to-jira in your project. Claude Code loads it when a task matches its description.
Run `npx skills add openshift-eng/ai-helpers --skill report-to-jira -a codex`. Or copy the skill folder (plugins/compliance/skills/report-to-jira in openshift-eng/ai-helpers) into .agents/skills/report-to-jira in your project. Codex loads it when a task matches its description.
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 report-to-jira -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/report-to-jira, .gemini/skills/report-to-jira, .github/skills/report-to-jira and .opencode/skills/report-to-jira in your project.
Going by SKILL.md and its folder, Report To Jira needs the command-line tools its instructions call (python3 and curl) and credentials named JIRA_API_TOKEN, JIRA_TOKEN and ATLASSIAN_API_TOKEN. Our summary lists: Python 3; A credential in JIRA_API_TOKEN; A credential in JIRA_TOKEN.
SKILL.md contains no URLs. Its commands use curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
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.
Report To Jira 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.
About 4.1k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Report To Jira: 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.
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.