Agent skill

Fetch New PRs In Payload

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

Fetch pull requests that are new in a given OpenShift payload compared to the previous payload

Apache-2.0Auto-check passedDevelopment

Install Fetch New PRs In Payload

skills CLI
$ npx skills add openshift-eng/ai-helpers --skill fetch-new-prs-in-payload -a claude-code

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

GitHub CLI
$ gh skill install openshift-eng/ai-helpers fetch-new-prs-in-payload --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/fetch-new-prs-in-payload .claude/skills/fetch-new-prs-in-payload && 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
fetch-new-prs-in-payload
GitHub stars
120
Token cost
~2.6k tokens
SKILL.md length
588 words
Files
2
Skills in repo
118
Repo updated
First seen
Licence
Apache-2.0

At a glance

Fetch pull requests that are new in a given OpenShift payload compared to the previous payload

  • Works in 3 steps: Run the Python Script → Parse the Output → Use the Data
  • Tasks that involve Pull requests
  • SKILL.md covers When to Use This Skill, Prerequisites, Implementation Steps and Error Handling, plus 5 more sections
  • Runs Python scripts from its folder; calls python3, jq and curl; reaches github.com and redhat.atlassian.net

What it does

Fetch New PRs In Payload is an agent skill from openshift-eng/ai-helpers. Fetch pull requests that are new in a given OpenShift payload compared to the previous payload

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `fetch_new_prs_in_payload.py`).

It sits in Development, covering Pull requests. It works with Python. The repository describes itself as: Developer productivity tools for Claude Code & other AI assistants. The licence is Apache-2.0.

When your agent uses it

  • Tasks that involve Pull requests

Example prompts

  • “/fetch-new-prs-in-payload”

Requirements

  • Python 3

Workflow steps

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

  1. Run the Python Script
  2. Parse the Output
  3. Use the Data

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:

    • github.com
    • redhat.atlassian.net
    • sippy.dptools.openshift.org
    • amd64.ocp.releases.ci.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

Fetch New PRs In Payload loads about 2.6k tokens when it runs. Until then it costs about 30 tokens; SKILL.md has 588 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~30
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). 588 words, ~2,587 tokens.

Download SKILL.mdSave it as .claude/skills/fetch-new-prs-in-payload/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
fetch-new-prs-in-payload
description
Fetch pull requests that are new in a given OpenShift payload compared to the previous payload

Fetch New PRs in Payload

This skill fetches the list of pull requests that are new in a given OpenShift payload tag compared to the previous payload. It tries the Sippy payload diff API first, and falls back to the release controller API when Sippy has not yet ingested the payload (e.g., in-progress or very recent payloads).

When to Use This Skill

Use this skill when you need to:

  • Determine what changed between two consecutive payloads
  • Identify which PRs were included in a specific payload
  • Investigate whether a specific PR or component change landed in a payload
  • Correlate a regression or test failure with newly merged PRs
  • Build a changelog of what shipped in a payload

The payload tag can be obtained from the fetch-prowjob-json skill (release.openshift.io/tag annotation) or from release controller pages.

Prerequisites

  1. Network Access: Must be able to reach the Sippy API and/or the release controller

    • Sippy: curl -s https://sippy.dptools.openshift.org/api/health
    • Release controller: curl -s https://amd64.ocp.releases.ci.openshift.org/api/v1/releasestream/4-stable/latest
    • No authentication required for either
  2. Python 3: Python 3.6 or later

    • Check: python3 --version
    • Uses only standard library (no external dependencies)

Implementation Steps

Step 1: Run the Python Script

The skill uses a Python script to fetch and format the payload diff data:

bash
# Locate the Python script
FETCH_NEW_PRS="${CLAUDE_PLUGIN_ROOT}/skills/fetch-new-prs-in-payload/fetch_new_prs_in_payload.py"
if [ ! -f "$FETCH_NEW_PRS" ]; then
  FETCH_NEW_PRS=$(find ~/.claude/plugins -type f -path "*/ci/skills/fetch-new-prs-in-payload/fetch_new_prs_in_payload.py" 2>/dev/null | sort | head -1)
fi
if [ -z "$FETCH_NEW_PRS" ] || [ ! -f "$FETCH_NEW_PRS" ]; then echo "ERROR: fetch_new_prs_in_payload.py not found" >&2; exit 2; fi

# Fetch new PRs in JSON format
python3 "$FETCH_NEW_PRS" <payload_tag> --format json

# Or fetch as human-readable summary grouped by component
python3 "$FETCH_NEW_PRS" <payload_tag> --format summary
Step 2: Parse the Output

The script outputs structured JSON data that can be further processed:

bash
# Store JSON output in a variable for processing
pr_data=$(python3 "$script_path" 4.22.0-0.ci-2026-02-06-195709 --format json)

# Extract specific fields using jq if needed
total=$(echo "$pr_data" | jq '.total_prs')
pr_urls=$(echo "$pr_data" | jq -r '.pull_requests[].url')
components=$(echo "$pr_data" | jq -r '[.pull_requests[].component] | unique[]')

# Find PRs for a specific component
echo "$pr_data" | jq '.pull_requests[] | select(.component == "hypershift")'

# Find PRs with associated bugs
echo "$pr_data" | jq '.pull_requests[] | select(.bug_url != "")'
Step 3: Use the Data

The structured data includes all PR details from the payload diff:

json
{
  "payload_tag": "4.22.0-0.nightly-2026-01-15-114134",
  "total_prs": 17,
  "pull_requests": [
    {
      "url": "https://github.com/openshift/assisted-service/pull/8594",
      "pull_request_id": "8594",
      "component": "agent-installer-api-server",
      "description": "Create Enhancement Document for 3rd Party CNI / No CNI Support in Assisted Installer",
      "bug_url": "https://redhat.atlassian.net/browse/MGMT-22584"
    },
    {
      "url": "https://github.com/openshift/hypershift/pull/7470",
      "pull_request_id": "7470",
      "component": "hypershift",
      "description": "use InfraStatus.APIPort for custom DNS kubeconfig",
      "bug_url": "https://redhat.atlassian.net/browse/OCPBUGS-72258"
    }
  ]
}

Error Handling

The Python script handles common error cases automatically:

Case 1: Payload Not Found (404)
bash
python3 fetch_new_prs_in_payload.py 4.22.0-0.ci-9999-99-99-000000
# Error: Payload '4.22.0-0.ci-9999-99-99-000000' not found.
# Verify the payload tag exists (e.g., 4.22.0-0.ci-2026-02-06-195709).
Case 2: Network Error
bash
python3 fetch_new_prs_in_payload.py 4.22.0-0.ci-2026-02-06-195709
# Error: Failed to connect to Sippy API: [Errno -2] Name or service not known
# Check network connectivity.
Case 3: Missing Arguments
bash
python3 fetch_new_prs_in_payload.py
# usage: fetch_new_prs_in_payload.py [-h] [--format {json,summary}] payload_tag
# fetch_new_prs_in_payload.py: error: the following arguments are required: payload_tag

Exit Codes:

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

Data Sources

The script tries two APIs in order:

  1. Sippy (primary) — has longer history but only includes completed payloads
  2. Release controller (fallback) — available immediately for in-progress and recent payloads, but has shorter retention

The output format is identical regardless of which source is used. The fallback is automatic and transparent.

API Details

Sippy Endpoint
text
GET https://sippy.dptools.openshift.org/api/payloads/diff?toPayload={payload_tag}
Parameters
  • toPayload (required): The payload tag to diff against its predecessor (e.g., 4.22.0-0.ci-2026-02-06-195709)
Show full SKILL.md (248 more words)Show less
Response Schema

The API returns a JSON array of PR objects:

json
[
  {
    "id": 0,
    "created_at": "0001-01-01T00:00:00Z",
    "updated_at": "0001-01-01T00:00:00Z",
    "deleted_at": null,
    "url": "https://github.com/openshift/hypershift/pull/7470",
    "pull_request_id": "7470",
    "name": "hypershift",
    "description": "use InfraStatus.APIPort for custom DNS kubeconfig",
    "bug_url": "https://redhat.atlassian.net/browse/OCPBUGS-72258"
  }
]

Raw API Fields:

  • id, created_at, updated_at, deleted_at: Database metadata (not useful for consumers)
  • url: Full GitHub pull request URL
  • pull_request_id: PR number as a string
  • name: Component name(s) affected by this PR (may contain comma-separated values for multi-component PRs, e.g., "olm-catalogd, olm-operator-controller")
  • description: PR title/description
  • bug_url: Associated Jira bug URL (empty string if none)

The Python script remaps name to component in its output for clarity.

Examples

Example 1: Fetch PRs as JSON
bash
python3 "$FETCH_NEW_PRS" 4.22.0-0.nightly-2026-01-15-114134 --format json

Expected Output:

json
{
  "payload_tag": "4.22.0-0.nightly-2026-01-15-114134",
  "total_prs": 17,
  "pull_requests": [
    {
      "url": "https://github.com/openshift/assisted-service/pull/8594",
      "pull_request_id": "8594",
      "component": "agent-installer-api-server",
      "description": "Create Enhancement Document for 3rd Party CNI / No CNI Support in Assisted Installer",
      "bug_url": "https://redhat.atlassian.net/browse/MGMT-22584"
    },
    {
      "url": "https://github.com/openshift/machine-config-operator/pull/5509",
      "pull_request_id": "5509",
      "component": "machine-config-operator",
      "description": "Set `NodeDegraded` MCN condition when node state annotation is set to `Degraded`",
      "bug_url": "https://redhat.atlassian.net/browse/OCPBUGS-67229"
    }
  ]
}
Example 2: Fetch PRs as Summary
bash
python3 "$FETCH_NEW_PRS" 4.22.0-0.nightly-2026-01-15-114134 --format summary

Expected Output:

text
New PRs in payload 4.22.0-0.nightly-2026-01-15-114134
============================================================
Total: 17 new pull requests

  agent-installer-api-server (1 PRs):
    - Create Enhancement Document for 3rd Party CNI / No CNI Support in Assisted Installer [https://redhat.atlassian.net/browse/MGMT-22584]
      https://github.com/openshift/assisted-service/pull/8594

  hypershift (4 PRs):
    - [kubevirt] Make L3 migration labeling conditional [https://redhat.atlassian.net/browse/OCPBUGS-66205]
      https://github.com/openshift/hypershift/pull/7308
    - feat(api): add support for graceful service account signing key rotation [https://redhat.atlassian.net/browse/CNTRLPLANE-1768]
      https://github.com/openshift/hypershift/pull/7324
    - Scaffold OpenShiftManager controller [https://redhat.atlassian.net/browse/API-1835]
      https://github.com/openshift/hypershift/pull/7445
    - use InfraStatus.APIPort for custom DNS kubeconfig [https://redhat.atlassian.net/browse/OCPBUGS-72258]
      https://github.com/openshift/hypershift/pull/7470

  machine-config-operator (2 PRs):
    - Set `NodeDegraded` MCN condition when node state annotation is set to `Degraded` [https://redhat.atlassian.net/browse/OCPBUGS-67229]
      https://github.com/openshift/machine-config-operator/pull/5509
    - Prevent unnecessary systemd unit disable [https://redhat.atlassian.net/browse/OCPBUGS-58023]
      https://github.com/openshift/machine-config-operator/pull/5527
Example 3: Use with fetch-prowjob-json Skill

Combine with the fetch-prowjob-json skill to get the payload tag from a Prow job, then find what PRs were new in that payload:

bash
# 1. Get payload tag from prowjob.json (via fetch-prowjob-json skill)
#    payload_tag = metadata.annotations["release.openshift.io/tag"]
#    e.g., "4.22.0-0.ci-2026-02-06-195709"

# 2. Fetch new PRs in that payload
python3 "$FETCH_NEW_PRS" "$payload_tag" --format json

Notes

  • Neither API requires authentication for read-only access
  • The Python script uses only standard library modules (no external dependencies)
  • The previous payload is determined automatically; you only provide the target payload
  • Payload tags follow the format: {version}-0.{stream}-{date}-{time} (e.g., 4.22.0-0.ci-2026-02-06-195709 or 4.22.0-0.nightly-2026-01-15-114134)
  • The component field (called name in the raw API) may contain multiple comma-separated component names for PRs that affect multiple components
  • PRs without an associated bug will have an empty string for bug_url
  • An empty response array means no new PRs were found (the payload may be identical to its predecessor)

See Also

  • Related Skill: fetch-prowjob-json (provides payload tag from Prow job metadata)
  • Related Skill: fetch-regression-details (for correlating regressions with payload changes)
  • Related Command: /ci:analyze-regression (analyzes regressions that may be caused by new PRs)

© 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 1 other file in plugins/ci/skills/fetch-new-prs-in-payload of openshift-eng/ai-helpers.

  • SKILL.md
  • fetch_new_prs_in_payload.py

Open the folder on GitHubat commit a627176

Compare with similar skills

Fetch New PRs In Payload 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.

Fetch New PRs In Payload compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Fetch New PRs In Payload this skillopenshift-eng/ai-helpers120—~2.6kAutomated safety check: PassApache-2.0
Skyvern Version BumpSkyvern-AI/skyvern23k—~1kAutomated safety check: NotesAGPL-3.0
Code Review Skillawesome-skills/code-review-skill2.1k—~2.8kAutomated safety check: NotesMIT
Create Cuda Python Pull RequestNVIDIA/cuda-python3.4k—~1.1kAutomated safety check: PassApache-2.0
pybind11 Release Preparationpybind/pybind1118k—~1.7kAutomated safety check: PassCustom licence
Docling Pull Request Reviewdocling-project/docling69k—~1kAutomated safety check: PassMIT

Similar skills

  • Skyvern Version Bump

    Skyvern-AI/skyvern

    Walks through a Skyvern open-source release bump: update the version, rebuild the Python and TypeScript SDKs with Fern, commit, and open a pull request.

    23k GitHub stars~1k tokensUpdated today
    DevelopmentAuto-check: notes
  • Code Review Skill

    awesome-skills/code-review-skill

    Provides comprehensive code review guidance for React 19, Vue 3, Angular 17+, Svelte 5, Rust, TypeScript, Java, Java 8, PHP, Ruby, Rails, Python, Django, FastAPI, Go, C/.NET, Kotlin, Swift, Dart…

    2.1k GitHub stars~2.8k tokensUpdated 1 mo ago
    DevelopmentAuto-check: notes
  • Official

    Create a CUDA Python pull request from an approved personal or organization-owned fork, including the GitHub CLI GraphQL fallback for renamed organization-owned forks.

    3.4k GitHub stars~1.1k tokensUpdated today
    DevelopmentAuto-check passed
  • Opens the pybind11 release-preparation pull request: picking the release base, bumping the version in common.h and integrating the changelog, following docs/release.rst.

    18k GitHub stars~1.7k tokensUpdated today
    DevelopmentAuto-check passed
  • Docling Pull Request Review

    docling-project/docling

    Reviews or re-reviews a Docling pull request in fixed stages, with findings that can be reproduced and an explicit record of every check that was run.

    69k GitHub stars~1k tokensUpdated today
    DevelopmentAuto-check passed
  • Code Reviewer

    jewbetcha/opentrace

    Comprehensive code review skill for TypeScript, JavaScript, Python, Swift, Kotlin, Go.

    116 GitHub starsUsed in 2 repos~1.1k tokens
    DevelopmentAuto-check: notes

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 3 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 3 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 3 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 3 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 3 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 3 days ago
    Auto-check passed

Works with

Categories

Questions about Fetch New PRs In Payload

What does Fetch New PRs In Payload do?

Fetch pull requests that are new in a given OpenShift payload compared to the previous payload. Fetch New PRs In Payload is an agent skill from openshift-eng/ai-helpers.

When should I use Fetch New PRs In Payload?

Fetch New PRs In Payload fits situations like: tasks that involve Pull requests.

How do I install Fetch New PRs In Payload in Claude Code?

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

How do I install Fetch New PRs In Payload in Codex?

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

Can I use Fetch New PRs In Payload 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 fetch-new-prs-in-payload -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/fetch-new-prs-in-payload, .gemini/skills/fetch-new-prs-in-payload, .github/skills/fetch-new-prs-in-payload and .opencode/skills/fetch-new-prs-in-payload in your project.

What does Fetch New PRs In Payload need to run?

Going by SKILL.md and its folder, Fetch New PRs In Payload needs Python for the scripts in its folder and the command-line tools its instructions call (python3, jq and curl). Our summary lists: Python 3.

Does Fetch New PRs In Payload access the network?

SKILL.md names 4 domains. In commands or code: github.com, redhat.atlassian.net, sippy.dptools.openshift.org and amd64.ocp.releases.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 Fetch New PRs In Payload 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 Fetch New PRs In Payload use?

Fetch New PRs In Payload 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 Fetch New PRs In Payload 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 Fetch New PRs In Payload?

Skills that share tags, products or a category with Fetch New PRs In Payload: Skyvern Version Bump (Skyvern-AI/skyvern, 23k stars), Code Review Skill (awesome-skills/code-review-skill, 2.1k stars), Create Cuda Python Pull Request (NVIDIA/cuda-python, 3.4k stars) and pybind11 Release Preparation (pybind/pybind11, 18k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Fetch New PRs In Payload?

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.