Agent skill

Triage Regression

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

Create or update a Component Readiness triage record linking regressions to a JIRA bug

Apache-2.0Auto-check passed

Install Triage Regression

skills CLI
$ npx skills add openshift-eng/ai-helpers --skill triage-regression -a claude-code

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

GitHub CLI
$ gh skill install openshift-eng/ai-helpers triage-regression --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/ci/skills/triage-regression .claude/skills/triage-regression && 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
triage-regression
GitHub stars
120
Token cost
~2.4k tokens
SKILL.md length
583 words
Files
3
Skills in repo
118
Repo updated
First seen
Licence
Apache-2.0

At a glance

Create or update a Component Readiness triage record linking regressions to a JIRA bug

  • Works in 3 steps: Obtain Authentication Token → Run the Python Script → Parse the Output
  • SKILL.md covers When to Use This Skill, Prerequisites, Implementation Steps and Triage Types, plus 6 more sections
  • Runs Python scripts from its folder; calls python3 and jq; reaches redhat.atlassian.net and api.cr.j7t7.p1.openshiftapps.com

What it does

Triage Regression is an agent skill from openshift-eng/ai-helpers. Create or update a Component Readiness triage record linking regressions to a JIRA bug

Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `README.md` and `triage_regression.py`).

It works with Jira and Python. The repository describes itself as: Developer productivity tools for Claude Code & other AI assistants. The licence is Apache-2.0.

Example prompts

  • “/triage-regression”

Requirements

  • Python 3

Workflow steps

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

  1. Obtain Authentication Token
  2. Run the Python Script
  3. Parse the Output

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

    Ships script files (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • python3
    • jq

    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:

    • redhat.atlassian.net
    • api.cr.j7t7.p1.openshiftapps.com
    • sippy-auth.dptools.openshift.org

    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 Regression loads about 2.4k tokens when it runs. Until then it costs about 26 tokens; SKILL.md has 583 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.4k

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). 583 words, ~2,397 tokens.

Download SKILL.mdSave it as .claude/skills/triage-regression/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
triage-regression
description
Create or update a Component Readiness triage record linking regressions to a JIRA bug

Triage Regression

This skill creates or updates triage records via the Sippy API, linking one or more Component Readiness regressions to a JIRA bug.

When to Use This Skill

Use this skill when you need to:

  • File a triage record for one or more regressions identified by the analyze-regression command
  • Link multiple related regressions to a single JIRA bug
  • Update an existing triage to add more regressions or change details

Prerequisites

  1. OpenShift CLI Authentication: Required for authenticating to the sippy-auth API

    • Must be logged into the DPCR cluster via oc login
    • Cluster API: https://api.cr.j7t7.p1.openshiftapps.com:6443
    • Use the oc-auth skill to obtain the Bearer token
  2. Python 3: Python 3.6 or later

    • Check: python3 --version
    • Uses only standard library (no external dependencies)
  3. Input Data: Requires regression IDs, a JIRA bug URL, and a triage type

    • Regression IDs: from Component Readiness UI or fetch-regression-details skill
    • JIRA URL: an existing JIRA bug (e.g., https://redhat.atlassian.net/browse/OCPBUGS-12345)
    • Triage type: product, test, ci-infra, or product-infra

Implementation Steps

Step 1: Obtain Authentication Token

Use the oc-auth skill to obtain a Bearer token from the DPCR cluster:

bash
# Get token from the DPCR cluster context
# The oc-auth skill's curl_with_token.sh uses this cluster for sippy-auth
DPCR_CLUSTER="https://api.cr.j7t7.p1.openshiftapps.com:6443"

# Find the oc context for the DPCR cluster and get the token
CONTEXT=$(oc config get-contexts -o name 2>/dev/null | while read -r ctx; do
  server=$(oc config view -o jsonpath="{.clusters[?(@.name=='$(oc config view -o jsonpath="{.contexts[?(@.name=='$ctx')].context.cluster}" 2>/dev/null)')].cluster.server}" 2>/dev/null || echo "")
  server_clean=$(echo "$server" | sed -E 's|^https?://||')
  if [ "$server_clean" = "api.cr.j7t7.p1.openshiftapps.com:6443" ]; then
    echo "$ctx"
    break
  fi
done)

if [ -z "$CONTEXT" ]; then
  echo "Error: Not logged into DPCR cluster. Please run: oc login $DPCR_CLUSTER"
  exit 1
fi

TOKEN=$(oc whoami -t --context="$CONTEXT" 2>/dev/null)
if [ -z "$TOKEN" ]; then
  echo "Error: Failed to get token. Please re-authenticate to DPCR cluster."
  exit 1
fi
Step 2: Run the Python Script
bash
script_path="plugins/ci/skills/triage-regression/triage_regression.py"

# Create a new triage for one regression
python3 "$script_path" 33639 \
  --token "$TOKEN" \
  --url "https://redhat.atlassian.net/browse/OCPBUGS-12345" \
  --type product \
  --format json

# Create a new triage for multiple regressions
python3 "$script_path" 33639,33640,33641 \
  --token "$TOKEN" \
  --url "https://redhat.atlassian.net/browse/OCPBUGS-12345" \
  --type product \
  --description "API discovery regression across metal variants" \
  --format json

# Update an existing triage to add more regressions (url and type inherited from existing triage)
python3 "$script_path" 33639,33640,33641,33642 \
  --token "$TOKEN" \
  --triage-id 456 \
  --format json

Arguments:

  • regression_ids: Required comma-separated list of regression IDs (integers)

Required Options:

  • --token <token>: OAuth Bearer token for sippy-auth (obtained from oc-auth skill)
  • --url <jira_url>: JIRA bug URL (required for create, optional for update - uses existing value)
  • --type <triage_type>: Triage type: product, test, ci-infra, product-infra (required for create, optional for update - uses existing value)

Options:

  • --triage-id <id>: Existing triage ID to update (omit to create new)
  • --description <text>: Description for the triage
  • --format json|summary: Output format (default: json)
Step 3: Parse the Output
bash
output=$(python3 "$script_path" 33639 \
  --token "$TOKEN" \
  --url "https://redhat.atlassian.net/browse/OCPBUGS-12345" \
  --type product \
  --format json)

success=$(echo "$output" | jq -r '.success')

if [ "$success" = "true" ]; then
  triage_id=$(echo "$output" | jq -r '.triage.id')
  echo "Triage created with ID: $triage_id"
else
  error=$(echo "$output" | jq -r '.error')
  echo "Error: $error"
fi

Triage Types

TypeDescription
productActual product regressions (default for most bugs)
testTest framework issues (flaky tests, test bugs)
ci-infraCI infrastructure problems that did not impact customers
product-infraInfrastructure problems that impacted CI and customers

API Details

Base URL: https://sippy-auth.dptools.openshift.org

Authentication: Bearer token from the DPCR cluster (api.cr.j7t7.p1.openshiftapps.com:6443)

Create Triage:

  • Method: POST
  • Endpoint: /api/component_readiness/triages
  • Headers: Authorization: Bearer <token>, Content-Type: application/json
  • Body:
    json
    {
      "url": "https://redhat.atlassian.net/browse/OCPBUGS-12345",
      "type": "product",
      "description": "Optional description",
      "regressions": [{"id": 33639}, {"id": 33640}]
    }

Update Triage:

  • Method: PUT
  • Endpoint: /api/component_readiness/triages/{id}
  • Headers: Authorization: Bearer <token>, Content-Type: application/json
  • Body: Same as create, but must include "id" matching the URL path
Show full SKILL.md (229 more words)Show less

Script Output Format

JSON Format (--format json)

Success Response:

json
{
  "success": true,
  "operation": "create",
  "regression_ids": [33639],
  "triage": {
    "id": 456,
    "url": "https://redhat.atlassian.net/browse/OCPBUGS-12345",
    "type": "product",
    "description": "API discovery regression",
    "regressions": [
      {"id": 33639}
    ],
    "links": {
      "self": "/api/component_readiness/triages/456"
    }
  }
}

Error Response:

json
{
  "success": false,
  "error": "HTTP error 400: Bad Request",
  "detail": "regression ID 99999 not found",
  "operation": "create",
  "regression_ids": [99999]
}
Summary Format (--format summary)
Triage Create - SUCCESS
============================================================

Triage ID: 456
URL: https://redhat.atlassian.net/browse/OCPBUGS-12345
Type: product
Description: API discovery regression
Linked Regressions: 1
  - Regression 33639

Error Handling

Case 1: Authentication Failure
json
{
  "success": false,
  "error": "HTTP error 401: Unauthorized",
  "detail": "",
  "operation": "create",
  "regression_ids": [33639]
}

Re-authenticate to the DPCR cluster and obtain a fresh token.

Case 2: Invalid Regression ID
json
{
  "success": false,
  "error": "HTTP error 400: Bad Request",
  "detail": "regression ID 99999 not found",
  "operation": "create",
  "regression_ids": [99999]
}
Case 3: Invalid Triage Type

The script validates triage type locally before making the API call:

Error: Invalid type 'invalid'. Must be one of: product, test, ci-infra, product-infra

Exit Codes:

  • 0: Success
  • 1: Error (invalid input, API error, network error, etc.)

Examples

Example 1: Triage a Single Regression
bash
python3 plugins/ci/skills/triage-regression/triage_regression.py \
  33639 \
  --token "$TOKEN" \
  --url "https://redhat.atlassian.net/browse/OCPBUGS-12345" \
  --type product \
  --format json
bash
python3 plugins/ci/skills/triage-regression/triage_regression.py \
  33639,33640,33641 \
  --token "$TOKEN" \
  --url "https://redhat.atlassian.net/browse/OCPBUGS-12345" \
  --type product \
  --description "Same root cause: API discovery failure across metal variants" \
  --format json
Example 3: Update Existing Triage with Additional Regressions
bash
# First, get the existing triage ID from regression data
existing_triage_id=$(echo "$regression_data" | jq -r '.triages[0].id')

# Update it with additional regression IDs (url and type inherited from existing triage)
python3 plugins/ci/skills/triage-regression/triage_regression.py \
  33639,33640,33641,33642 \
  --token "$TOKEN" \
  --triage-id "$existing_triage_id" \
  --format json
Example 4: Triage a Test Flake
bash
python3 plugins/ci/skills/triage-regression/triage_regression.py \
  33639 \
  --token "$TOKEN" \
  --url "https://redhat.atlassian.net/browse/OCPBUGS-67890" \
  --type test \
  --description "Flaky test: intermittent timeout in discovery suite" \
  --format json

Notes

  • Uses only Python standard library - no external dependencies required
  • Authenticates to https://sippy-auth.dptools.openshift.org using a Bearer token from the DPCR cluster
  • Use the oc-auth skill to obtain the token (requires oc login to DPCR cluster)
  • Validates triage type locally before making the API call
  • When creating, do not provide --triage-id; when updating, --triage-id is required
  • The API will validate that all regression IDs exist and return an error if any are missing
  • When updating a triage, the script automatically fetches existing regressions and merges them with the new ones (safe additive behavior)
  • The API automatically looks up and links the JIRA bug if the URL matches an imported bug

See Also

  • Related Skill: oc-auth (provides authentication tokens for sippy-auth)
  • Related Skill: fetch-regression-details (provides regression IDs and existing triage info)
  • Related Command: /ci:analyze-regression (analyzes regressions and suggests triage)

© 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

SKILL.md and 2 other files in plugins/ci/skills/triage-regression of openshift-eng/ai-helpers.

  • SKILL.md
  • README.md
  • triage_regression.py

Open the folder on GitHubat commit a627176

Compare with similar skills

Triage Regression 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 Regression compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Triage Regression this skillopenshift-eng/ai-helpers120—~2.4kAutomated safety check: PassApache-2.0
Rota Check Periodic Jobsoracle/graalpython1.7k—~792Automated safety check: PassCustom licence
Kanban TuiZaloog/kanban-tui285—~4.1kAutomated safety check: PassMIT
GitHub PR Mirrororacle/graalpython1.7k—~1.3kAutomated safety check: PassCustom licence
Atlassian Readonly Skillssillsdev/FieldWorks110—~1.3kAutomated safety check: PassCustom licence
Atlassian Skillssillsdev/FieldWorks110—~2.7kAutomated safety check: PassCustom licence

Similar skills

  • Rota Check Periodic Jobs

    oracle/graalpython

    Official

    Analyze current GraalPy periodic job failures for ROTA. An agent skill from oracle/graalpython.

    1.7k GitHub stars~792 tokensUpdated yesterday
    Testing & QAAuto-check passed
  • Kanban Tui

    Zaloog/kanban-tui

    Comprehensive kanban board and task management via ktui CLI.

    285 GitHub stars~4.1k tokensUpdated 1 mo ago
    Productivity & AutomationAuto-check passed
  • GitHub PR Mirror

    oracle/graalpython

    Official

    Mirror an external GitHub pull request into the internal GraalPython Bitbucket review flow, including OCA label checks, Jira creation or reuse, preserving PR commits, pre-commit cleanup, and handoff…

    1.7k GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed
  • Atlassian Readonly Skills

    sillsdev/FieldWorks

    Read-only Python utilities for Jira (SIL Data Center): fetch an issue, search with JQL, read transitions, links, worklogs, agile boards and projects.

    110 GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed
  • Atlassian Skills

    sillsdev/FieldWorks

    Python utilities for Jira (SIL Data Center) covering issue management, JQL search, workflows and transitions, links, agile boards, worklogs and projects.

    110 GitHub stars~2.7k tokensUpdated yesterday
    Auto-check passed
  • Scrum Master

    alirezarezvani/claude-skills

    Advanced Scrum Master skill for data-driven agile team analysis and coaching.

    28k GitHub starsUsed in 1 repo~2.4k tokens
    Product & Project ManagementAuto-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 2 days ago
    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 2 days ago
    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 2 days ago
    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 2 days ago
    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 2 days ago
    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 2 days ago
    Auto-check passed

Works with

Questions about Triage Regression

What does Triage Regression do?

Create or update a Component Readiness triage record linking regressions to a JIRA bug. Triage Regression is an agent skill from openshift-eng/ai-helpers.

How do I install Triage Regression in Claude Code?

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

How do I install Triage Regression in Codex?

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

Can I use Triage Regression 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-regression -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-regression, .gemini/skills/triage-regression, .github/skills/triage-regression and .opencode/skills/triage-regression in your project.

What does Triage Regression need to run?

Going by SKILL.md and its folder, Triage Regression needs Python for the scripts in its folder and the command-line tools its instructions call (python3 and jq). Our summary lists: Python 3.

Does Triage Regression access the network?

SKILL.md names 3 domains. In commands or code: redhat.atlassian.net, api.cr.j7t7.p1.openshiftapps.com and sippy-auth.dptools.openshift.org; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Triage Regression 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 Regression use?

Triage Regression 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 Regression use?

About 2.4k tokens (SKILL.md is roughly 9.6k 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 Regression?

Skills that share tags, products or a category with Triage Regression: Rota Check Periodic Jobs (oracle/graalpython, 1.7k stars), Kanban Tui (Zaloog/kanban-tui, 285 stars), GitHub PR Mirror (oracle/graalpython, 1.7k stars) and Atlassian Readonly Skills (sillsdev/FieldWorks, 110 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Triage Regression?

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.