Agent skill

Reevaluate Job Runs

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

Retroactively re-run Sippy Symptom detection on completed Prow CI job runs to apply or preview failure Labels

Apache-2.0Auto-check passed

Install Reevaluate Job Runs

skills CLI
$ npx skills add openshift-eng/ai-helpers --skill reevaluate-job-runs -a claude-code

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

GitHub CLI
$ gh skill install openshift-eng/ai-helpers reevaluate-job-runs --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/reevaluate-job-runs .claude/skills/reevaluate-job-runs && 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
reevaluate-job-runs
GitHub stars
120
Token cost
~2.6k tokens
SKILL.md length
1,190 words
Files
3
Skills in repo
118
Repo updated
First seen
Licence
Apache-2.0

At a glance

Retroactively re-run Sippy Symptom detection on completed Prow CI job runs to apply or preview failure Labels

  • SKILL.md covers When to Use This Skill, Prerequisites, Preview and Apply and Arguments and Options, plus 3 more sections
  • Runs Python scripts from its folder; calls python3, jq and curl; reaches sippy-auth.dptools.openshift.org and api.cr.j7t7.p1.openshiftapps.com; needs SIPPY_TOKEN

What it does

Reevaluate Job Runs is an agent skill from openshift-eng/ai-helpers. Retroactively re-run Sippy Symptom detection on completed Prow CI job runs to apply or preview failure Labels

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

The repository describes itself as: Developer productivity tools for Claude Code & other AI assistants. The licence is Apache-2.0.

Example prompts

  • “/reevaluate-job-runs”

Requirements

  • Python 3
  • A credential in SIPPY_TOKEN

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
    • 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:

    • sippy-auth.dptools.openshift.org
    • api.cr.j7t7.p1.openshiftapps.com
    • prow.ci.openshift.org

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

  • Credentials

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

    • SIPPY_TOKEN

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

Context cost

Reevaluate Job Runs loads about 2.6k tokens when it runs. Until then it costs about 32 tokens; SKILL.md has 1,190 words of instructions outside code blocks.

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

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,190 words, ~2,572 tokens.

Download SKILL.mdSave it as .claude/skills/reevaluate-job-runs/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
reevaluate-job-runs
description
Retroactively re-run Sippy Symptom detection on completed Prow CI job runs to apply or preview failure Labels

Reevaluate Job Runs

Sippy Symptoms recognize known conditions in OpenShift CI artifacts. A symptom selects artifact files with a glob and uses a string, regex, or file (existence) matcher. A match applies one or more Labels: stable, human-readable tags such as ImagePullNeverCompletes that appear in Sippy, Spyglass, and triage workflows.

Symptom detection normally runs automatically as new job artifacts arrive. Reevaluation asks Sippy to scan completed runs with the current symptom definitions, which is useful when a symptom was created or changed after those runs completed.

When to Use This Skill

Use this skill to:

  • Preview which symptoms and labels match existing runs without writing.
  • Apply a new or updated symptom to older completed runs.
  • Re-scan every job run behind a Component Readiness regression or triage.

Prerequisites

Authentication to the sippy-auth API requires a Bearer token from the DPCR OpenShift cluster (https://api.cr.j7t7.p1.openshiftapps.com:6443). Use the oc-auth skill to select the correct context. Export the token rather than putting it in the process list:

bash
DPCR_CONTEXT="dpcr-context-name"
SIPPY_TOKEN="$(oc whoami -t --context="$DPCR_CONTEXT")"
export SIPPY_TOKEN
test -n "$SIPPY_TOKEN"

The implementation uses Python 3 and the standard library only. The examples that inspect API JSON also use jq and curl.

Preview and Apply

--dry-run uses the same asynchronous API and artifact scan as an applied reevaluation, but reports the labels without changing BigQuery, GCS, or PostgreSQL:

bash
JOB="periodic-ci-example-job"
BUILD_ID="1856789012345678848"
PROW_URL="https://prow.ci.openshift.org/view/gs/test-platform-results-public/logs/$JOB/$BUILD_ID"

python3 plugins/ci/skills/reevaluate-job-runs/reevaluate_job_runs.py \
  "$PROW_URL" --dry-run --format summary

After reviewing the preview, omit --dry-run to apply the current symptom set:

bash
python3 plugins/ci/skills/reevaluate-job-runs/reevaluate_job_runs.py \
  1856789012345678848 1856789012345678849 --format summary

The script deduplicates normalized IDs, submits one asynchronous batch, and polls until it is complete, failed, or cancelled. Sippy accepts at most 10,000 unique numeric build IDs in a request. Full Prow URLs are also accepted; query strings, fragments, trailing slashes, and duplicate inputs are normalized.

Save the batch ID for recovery

Immediately after Sippy accepts and validates a submission, the script prints and flushes the batch ID and same-origin status URL before the first status GET. Summary mode writes this notice to stdout. JSON mode writes it to stderr so stdout remains one parseable document: either the unchanged terminal API response or, if polling fails, an error object containing batch_id, status_url, and error. Save the notice: the server-side batch can keep running if the client loses its connection, exits, or its token expires.

To inspect that same batch later, obtain a fresh token with oc-auth, copy the printed sippy-auth status URL, and make an authenticated GET:

bash
STATUS_URL="https://sippy-auth.dptools.openshift.org/api/jobs/runs/reevaluate/d15dff1f-431c-48db-aa37-628ab42d755e"

curl --fail-with-body --silent --show-error \
  -H "Accept: application/json" \
  -H "Authorization: Bearer $SIPPY_TOKEN" \
  "$STATUS_URL" | jq .

Do not print or echo SIPPY_TOKEN. Only send it to the same https://sippy-auth.dptools.openshift.org origin. The script validates this origin and refuses redirects to a different origin.

The script does not have a resume option and does not accept an existing batch ID. The authenticated GET above observes an existing batch; running the script again creates a new submission.

Triage-wide workflow

Sippy has no triage-level reevaluate endpoint. List the regression IDs attached to the triage, collect every prowjob_run_id with the fetch-regression-details skill, and pass the resulting Bash array to one preview invocation:

bash
REGRESSION_IDS=(34446 34447 34448)
RUN_IDS=()

for REGRESSION_ID in "${REGRESSION_IDS[@]}"; do
  while IFS= read -r RUN_ID; do
    RUN_IDS+=("$RUN_ID")
  done < <(
    python3 plugins/ci/skills/fetch-regression-details/fetch_regression_details.py \
      "$REGRESSION_ID" --format json |
      jq -r '.job_runs[].prowjob_run_id'
  )
done

python3 plugins/ci/skills/reevaluate-job-runs/reevaluate_job_runs.py \
  "${RUN_IDS[@]}" --dry-run --format summary

Review the preview, then repeat the final command without --dry-run. The client deduplicates IDs across regressions and rejects more than 10,000 unique IDs before submission.

Arguments and Options

  • runs: One or more Prow build IDs or Prow job URLs (required; maximum 10,000 unique IDs).
  • --token TOKEN: Bearer token. Prefer SIPPY_TOKEN because command-line arguments are visible in process listings; --token takes precedence.
  • --dry-run: Report matches without writing changes.
  • --poll-interval SECONDS: Time between status requests (default 5; must be finite and greater than zero).
  • --format json|summary: Output format (default json).
Show full SKILL.md (633 more words)Show less

API Contract and Results

Both dry-run and applied requests use:

POST https://sippy-auth.dptools.openshift.org/api/jobs/runs/reevaluate

json
{"prow_job_build_ids": ["1856789012345678848"], "dry_run": false}

Sippy returns HTTP 202 with batch_id, requested, and links.status. The client follows the status link with authenticated GET requests. The batch response contains these aggregate fields:

FieldMeaning
statusBatch lifecycle: pending, processing, or running; terminal complete, failed, or cancelled.
requestedUnique run IDs accepted in the batch specification.
enqueuedNew River item jobs created for this batch.
dedupedItems linked to an already-existing equivalent River job instead of creating another.
completedItems whose River queue state is completed.
failedItems in discarded, cancelled, or synthetic orphaned queue states.
runningItems currently executing.
pendingAll other unfinished states, including not_enqueued, available, scheduled, retryable, and pending.

Each items[] entry has an item_key (the build ID), a River queue state, and optionally a result. Queue state is authoritative for progress. The result is the latest output recorded by an attempt and may describe a failed attempt while River has the item waiting to retry. Deduplicated items share the existing River job's output, and items without recorded output omit result.

When present, the per-run result fields mean:

FieldMeaning
prow_job_build_idProw build ID evaluated.
statussuccess, missing_error, eval_error, or rewrite_error.
symptoms_evaluatedNumber of supported active symptom definitions checked.
symptoms_matchedIDs of symptoms that matched the run's artifacts.
labels_appliedLabel IDs that were, or in dry-run would be, produced by those matches.
bq_entries_writtenBigQuery label rows written by an applied reevaluation.
gcs_artifacts_writtenGCS label JSON artifacts written by an applied reevaluation.
postgres_updatedWhether the PostgreSQL job-run label array was updated.
errorPer-run error detail when status is not success.
linksJob-run URL and links to matched symptom resources.

Zero-valued optional result fields are omitted. missing_error means Sippy could not find the run or its artifacts; eval_error means lookup or artifact scanning failed; rewrite_error means matching succeeded but a BigQuery, GCS, or PostgreSQL write failed.

For applied runs, Sippy deletes only BigQuery label rows with a non-empty symptom_id, then writes the current matches. BigQuery rows without a symptom ID are preserved as manual labels and merged into the PostgreSQL label array. A successful repeat against unchanged artifacts and symptom definitions therefore converges on the same symptom-derived label set. The multi-backend rewrite is not one atomic transaction, so use each item's result fields to confirm all stores were updated.

Error and Recovery Guidance

  • No early batch notice: validation or POST response validation failed, so there is no confirmed batch ID to recover. Fix the reported input/API error and submit again.
  • 401/403 or an HTML login page: the token is missing or expired. Refresh SIPPY_TOKEN with oc-auth; if a batch notice was already printed, query its status URL with the fresh token instead of assuming the batch stopped.
  • Connection, timeout, or malformed/non-JSON status response after the notice: save the flushed ID and URL. The failure is in client polling and does not prove the server-side batch failed. In JSON mode, stdout contains a single recovery object with batch_id, status_url, and error. Query the URL later.
  • 501: the request reached an instance with write endpoints disabled. Use the documented https://sippy-auth.dptools.openshift.org endpoint.
  • missing_error: verify the numeric build ID, that Sippy has ingested the run, and that the run's artifact bucket/path still exists.
  • Terminal failed or cancelled: inspect item queue states and their optional results. The client prints the terminal response and exits 1.

Input validation failures and API/polling errors exit 1. A complete batch exits 0; terminal failed or cancelled exits 1.

  • oc-auth: obtain or refresh authentication for sippy-auth.
  • manage-symptoms: create or update symptoms before reevaluation.
  • manage-labels: inspect and manage the labels symptoms apply.
  • list-symptoms: inspect current symptom matchers and label mappings.
  • diagnose-job-run-symptoms: explain symptoms and labels on one run.
  • fetch-regression-details: obtain all job-run IDs for a regression.
  • fetch-prow-job-runs: discover run IDs by job, variant, result, or time.

© 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/reevaluate-job-runs of openshift-eng/ai-helpers.

  • SKILL.md
  • reevaluate_job_runs.py
  • test_reevaluate_job_runs.py

Open the folder on GitHubat commit a627176

Compare with similar skills

Reevaluate Job Runs 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.

Reevaluate Job Runs compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Reevaluate Job Runs this skillopenshift-eng/ai-helpers120—~2.6kAutomated safety check: PassApache-2.0
Technical Job Searchgithub/awesome-copilot40k—~1.2kAutomated safety check: PassMIT
Threat Detectionalirezarezvani/claude-skills28k—~3.5kAutomated safety check: PassMIT
Job Application AssistantMadsLorentzen/ai-job-search45k—~1.2kAutomated safety check: NotesMIT
Job Application Managerreactive-resume/reactive-resume44k—~13kAutomated safety check: PassMIT
Python Background Jobswshobson/agents40k—~1.8kAutomated safety check: PassMIT

Similar skills

  • Technical Job Search

    github/awesome-copilot

    Official

    A skill your agent uses when a software engineer asks for help with job search tasks: parsing or analyzing a job description, tailoring a CV/resume, writing a cover letter, evaluating a job offer…

    40k GitHub stars~1.2k tokensUpdated 2 days ago
    Business, Finance & HRAuto-check passed
  • Threat Detection

    alirezarezvani/claude-skills

    A skill your agent uses when hunting for threats in an environment, analyzing IOCs, or detecting behavioral anomalies in telemetry.

    28k GitHub stars~3.5k tokensUpdated 1 mo ago
    SecurityAuto-check passed
  • Job Application Assistant

    MadsLorentzen/ai-job-search

    Evaluates job postings against your profile, then tailors a LaTeX CV and cover letter and prepares interview answers for the roles you pursue.

    45k GitHub stars~1.2k tokensUpdated 2 days ago
    Business, Finance & HRAuto-check: notes
  • Job Application Manager

    reactive-resume/reactive-resume

    Runs the job-search pipeline. An agent skill from reactive-resume/reactive-resume.

    44k GitHub stars~13k tokensUpdated yesterday
    Business, Finance & HRAuto-check passed
  • Python Background Jobs

    wshobson/agents

    Python background job patterns including task queues, workers, and event-driven architecture.

    40k GitHub stars~1.8k tokensUpdated 6 days ago
    Backend & APIsAuto-check passed
  • Resemble Detect

    github/awesome-copilot

    Official

    Deepfake detection and media safety — detect AI-generated audio, images, video, and text, trace synthesis sources, apply watermarks, verify speaker identity, and analyze media intelligence using…

    40k GitHub starsUsed in 3 repos~4.1k tokens
    Media & CreativeAuto-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 4 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 4 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 4 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 4 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 4 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 4 days ago
    Auto-check passed

Questions about Reevaluate Job Runs

What does Reevaluate Job Runs do?

Retroactively re-run Sippy Symptom detection on completed Prow CI job runs to apply or preview failure Labels. Reevaluate Job Runs is an agent skill from openshift-eng/ai-helpers.

How do I install Reevaluate Job Runs in Claude Code?

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

How do I install Reevaluate Job Runs in Codex?

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

Can I use Reevaluate Job Runs 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 reevaluate-job-runs -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/reevaluate-job-runs, .gemini/skills/reevaluate-job-runs, .github/skills/reevaluate-job-runs and .opencode/skills/reevaluate-job-runs in your project.

What does Reevaluate Job Runs need to run?

Going by SKILL.md and its folder, Reevaluate Job Runs needs Python for the scripts in its folder, the command-line tools its instructions call (python3, jq and curl) and credentials named SIPPY_TOKEN. Our summary lists: Python 3; A credential in SIPPY_TOKEN.

Does Reevaluate Job Runs access the network?

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

Is Reevaluate Job Runs 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 Reevaluate Job Runs use?

Reevaluate Job Runs 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 Reevaluate Job Runs use?

About 2.6k tokens (SKILL.md is roughly 10k 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 Reevaluate Job Runs?

Skills that share tags, products or a category with Reevaluate Job Runs: Technical Job Search (github/awesome-copilot, 40k stars), Threat Detection (alirezarezvani/claude-skills, 28k stars), Job Application Assistant (MadsLorentzen/ai-job-search, 45k stars) and Job Application Manager (reactive-resume/reactive-resume, 44k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Reevaluate Job Runs?

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.