Agent skill

Create PR

by RLinf in RLinf/RLinf

Open a GitHub pull request for RLinf, or fix an existing one — checks the PR title against Conventional Commits, writes a precise description that follows .github/PULLREQUESTTEMPLATE.md, and lints…

Apache-2.0Auto-check passedDevelopment

Install Create PR

skills CLI
$ npx skills add RLinf/RLinf --skill create-pr -a claude-code

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

GitHub CLI
$ gh skill install RLinf/RLinf create-pr --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/RLinf/RLinf.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/create-pr .claude/skills/create-pr && 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
create-pr
GitHub stars
5.4k
Token cost
~2.2k tokens
SKILL.md length
1,116 words
Files
2
Skills in repo
9
Repo updated
First seen
Licence
Apache-2.0

At a glance

Open a GitHub pull request for RLinf, or fix an existing one — checks the PR title against Conventional Commits, writes a precise description that follows .github/PULLREQUESTTEMPLATE.md, and lints…

  • Works in 5 steps: Gather the facts before writing a word → Title → Body → …
  • Asked to create/open/submit a PR
  • SKILL.md covers Why this exists, 1. Gather the facts before…, 2. Title and 3. Body, plus 4 more sections
  • Runs Python scripts from its folder; calls python3, gh and git

What it does

Create PR is an agent skill from RLinf/RLinf. Open a GitHub pull request for RLinf, or fix an existing one — checks the PR title against Conventional Commits, writes a precise description that follows .github/PULLREQUESTTEMPLATE.md, and lints both before pushing. Use when asked to create/open/submit a PR, write or rewrite a PR description, or fix a PR title or body.

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

It sits in Development, covering Pull requests, Linting and formatting and Commit messages. It works with GitHub. The repository describes itself as: RLinf: Reinforcement Learning Infrastructure for Embodied and Agentic AI. The licence is Apache-2.0.

When your agent uses it

  • Asked to create/open/submit a PR
  • Rewrite a PR description

Example prompts

  • “/create-pr”

Requirements

  • Python 3
  • Docker

Workflow steps

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

  1. Gather the facts before writing a word
  2. Title
  3. Body
  4. Lint, then create
  5. Fixing a PR that is already open

What it can do on your machine

Read from SKILL.md and the folder at commit c70606f. 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
    • gh
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • github.com

    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

Create PR loads about 2.2k tokens when it runs. Until then it costs about 84 tokens; SKILL.md has 1,116 words of instructions outside code blocks.

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

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 RLinf/RLinf at commit c70606f, republished under its Apache-2.0 licence (© RLinf). 1,116 words, ~2,224 tokens.

Download SKILL.mdSave it as .claude/skills/create-pr/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
create-pr
description
Open a GitHub pull request for RLinf, or fix an existing one — checks the PR title against Conventional Commits, writes a precise description that follows .github/PULL_REQUEST_TEMPLATE.md, and lints both before pushing. Use when asked to create/open/submit a PR, write or rewrite a PR description, or fix a PR title or body.

Create a PR

Write the title and the description, then run the linter before you post:

bash
python3 .agents/skills/create-pr/lint_pr.py lint \
    --title "fix(libero): reset action queues between episodes" \
    --body-file /tmp/pr-body.md

Exit code 1 means at least one ERROR — fix it and re-run. It is the same checker you point at a PR that is already open:

bash
python3 .agents/skills/create-pr/lint_pr.py lint --pr 1444

The rules come from CONTRIBUTING.md ("PR Title and Description"), .github/PULL_REQUEST_TEMPLATE.md, and — for the title — the required pr-title-check job, which runs openGemini/pr-title-checker with strict: true. Every title rule that job enforces is an ERROR in the linter, so a clean lint means the check passes. Paths below are relative to the repo root.

Why this exists

Over the 25 most recently merged PRs the linter reports errors on 11 of them. The dominant failures, in order: template sections dropped (14), Types of changes / Checklist with nothing ticked (9), template <!--- ... --> hints left in (9), prose above the first heading (5). PR #1421 is the worst case — the whole body was pasted with a two-space indent, which nests every ### heading inside the Description and breaks the results table outright.

1. Gather the facts before writing a word

Never describe the PR from memory of what you intended. Read the diff:

bash
git fetch origin main
git log --oneline origin/main..HEAD
git diff --stat origin/main...HEAD

You need, concretely:

  • Which component the diff touches — that becomes the scope.
  • Every user-visible change — a new config key, a renamed flag, a moved doc page, a changed default. Internal churn does not go in the description.
  • What you actually ran to verify it — the e2e config name, the eval numbers, pre-commit run --all-files. "Tested locally" is not an answer.
  • The issue it closes, if any.

2. Title

<type>(<scope>): <description>
  • type: feat fix docs style refactor test chore perf build ci revert. Lowercase. On main the distribution is roughly feat 166 / fix 122 / docs 76 / chore 18 / refactor 14.
  • scope: the component the diff touches — embodiment, libero, realworld, readme, docker, collective, openpi_pytorch. Optional; drop it rather than invent one. [a-z0-9_-] only — a space, slash, dot or capital fails CI. feat(new) (PR #1421) passes CI but is the anti-pattern the linter warns on: it names the PR, not the code.
  • description: ≤ 50 characters, and that is the part after : , not the whole title. This is the rule PRs fail most often. It must start with a lowercase a-z (so support 5D parallelism, never 5D parallelism support), stay imperative, carry no trailing period, and use plain ASCII — π₀ in a title fails the check. add MolmoAct2 LIBERO evaluation support, not Added support for MolmoAct2.
  • Never append (#123) — GitHub adds it at squash-merge.

Fitting 50 characters is the whole discipline of the title: name the one change a reviewer needs to see in the PR list, and let the body carry the rest. If the PR does several things, title it after the largest and enumerate in Description.

Check just the title, no body needed:

bash
python3 .agents/skills/create-pr/lint_pr.py lint --title "feat(new): add stuff."

3. Body

Start from the skeleton so no section goes missing:

bash
python3 .agents/skills/create-pr/lint_pr.py template > /tmp/pr-body.md

Then fill it in. Keep all six headings, even where a section is one line. What each one is for:

SectionWhat goes in it
DescriptionOne sentence on what changed and where, then a bullet per user-visible change. ≤ 250 words, ≤ 12 bullets.
Motivation and ContextWhy the change is needed. Link the issue (Fixes #NNN).
How has this been tested?The command you ran and its outcome. Required by CONTRIBUTING.md when the PR can move the reward curve — give the numbers.
Additional informationFigures, logs, repro commands. May be empty.
Types of changesTick what applies. One or two boxes, not four.
Checklist:Tick what applies. CONTRIBUTING.md: a PR with an empty Description or Checklist is marked draft and not reviewed.

Style rules the linter enforces:

  • No leading indentation. Not on headings, not on paragraphs, not on table rows. Four spaces turns a paragraph into a code block; a table whose header and rows disagree on indent does not render as a table at all.
  • Delete the <!--- ... --> hints once a section is written.
  • Nothing above the first ### heading — put it in Description.
  • One line per paragraph. GitHub reflows; hard wraps only survive until someone edits the body.
Show full SKILL.md (448 more words)Show less

4. Lint, then create

bash
python3 .agents/skills/create-pr/lint_pr.py lint \
    --title "$TITLE" --body-file /tmp/pr-body.md

Add --docs-only for a documentation-only PR to drop the "how was this tested" warning. Add --quiet to omit the suggested fixes. Once it exits 0:

bash
gh pr create --base main --title "$TITLE" --body-file /tmp/pr-body.md

Commits must be signed off (git commit -s) and follow the same <type>(<scope>): <description> format — DCO checks the trailer, so make sure your name is not wrapped in quotes.

5. Fixing a PR that is already open

bash
python3 .agents/skills/create-pr/lint_pr.py lint --pr 1421

For the indent/wrap damage specifically, fix rewrites the body: it strips the paste offset (preserving genuine list nesting), pulls headings and tables flush left, and drops the template hints. --unwrap additionally joins hard-wrapped prose into one line per paragraph.

bash
python3 .agents/skills/create-pr/lint_pr.py fix --pr 1421 --unwrap > /tmp/fixed.md
python3 .agents/skills/create-pr/lint_pr.py lint --title "$TITLE" --body-file /tmp/fixed.md
gh pr edit 1421 --body-file /tmp/fixed.md
gh pr edit 1421 --title "feat(embodiment): add MolmoAct2 LIBERO evaluation support"

fix only de-indents a body the linter already flagged, so running it on a well-formed PR is a no-op apart from comment removal. Read the output before posting it — it is a mechanical rewrite, not an editor.

Gotchas

  • lint --pr N shells out to gh pr view, so it inherits your gh auth and the repo you are standing in. It is read-only; nothing is posted until you run gh pr edit / gh pr create yourself.
  • The skeleton from template fails its own lint — deliberately. It ships with no boxes ticked, and checkbox-unticked is an ERROR. Tick them.
  • The linter accepts ## as well as ### for section headings, because GitHub renders both. What it will not accept is a renamed section: a body using ## Testing instead of ### How has this been tested? reports section-missing.
  • Warnings do not fail the run (exit 0). body-hardwrap, body-comments and title-scope-vague are judgement calls — but a reviewer reads them the same way the linter does.
  • fix cannot recover a broken code fence. If body-fence fires (odd number of ```), everything after the stray fence has been swallowed by GitHub's renderer; find it and close it by hand.
  • Tables inside <details> still need flush-left rows. The <details> wrapper does not exempt them.
  • A good commit subject is not always a legal PR title. commit-check and pr-title-check are different jobs with different limits — commit subjects get ~72 characters, PR descriptions get 50. A one-commit PR that reuses its subject verbatim can fail.

Troubleshooting

  • error: gh pr view N failed: ... could not resolve to a PullRequest — wrong repo. cd to the RLinf checkout, or pass the number of a PR in this repo.
  • [E] body/body-indented persists after fix — the body mixes two paste offsets (e.g. part typed, part pasted). Dedent by hand; fix only removes a single uniform offset.
  • [W] body/section-order — you kept all the headings but reordered them. Harmless, but reviewers scan for the template order.
  • lint --title alone reports 0 error(s) on an empty body — that is correct, it only checks what you gave it. Pass --body-file too before you create.

© RLinf, 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 .agents/skills/create-pr of RLinf/RLinf.

  • SKILL.md
  • lint_pr.py

Open the folder on GitHubat commit c70606f

Compare with similar skills

Create PR 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.

Create PR compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Create PR this skillRLinf/RLinf5.4k—~2.2kAutomated safety check: PassApache-2.0
Codex Merge PRtbhb/vale-ai-tells115—~3kAutomated safety check: PassMIT
Merge PRtbhb/vale-ai-tells115—~3kAutomated safety check: PassApache-2.0
Development Workflowkid-sid/claude-spellbook189—~3.2kAutomated safety check: PassMIT
PR Finalize Reviewmicrosoft/garnet12k—~3.1kAutomated safety check: PassMIT
React Router Pull Request Creatorremix-run/react-router57k—~2.5kAutomated safety check: PassMIT

Similar skills

  • Codex Merge PR

    tbhb/vale-ai-tells

    Squash merge a pull request. An agent skill from tbhb/vale-ai-tells.

    115 GitHub stars~3k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Merge PR

    tbhb/vale-ai-tells

    Squash merge a pull request. An agent skill from tbhb/vale-ai-tells.

    115 GitHub stars~3k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Development Workflow

    kid-sid/claude-spellbook

    A skill your agent uses when choosing a branching strategy, writing a commit message, opening or reviewing a pull request, setting up commit linting, or tagging a versioned release.

    189 GitHub stars~3.2k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • PR Finalize Review

    microsoft/garnet

    Official

    Checks that a pull request's title and description match its implementation and reviews the code for Garnet best practices, reporting findings without posting them.

    12k GitHub stars~3.1k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • React Router Pull Request Creator

    remix-run/react-router

    Packages finished React Router work into a draft pull request: branch, commit, push, a written PR body and the right GitHub labels.

    57k GitHub stars~2.5k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Takes a change through a verdaccio pull request: branch, local checks, changeset, title and body, labels, CI and review rounds, and ports to other release lines.

    18k GitHub stars~1.9k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from RLinf/RLinf

All 9 skills in this repo
  • Adds example documentation for a new model or environment in RLinf (RST pages in the docs gallery for both English and Chinese).

    5.4k GitHub stars~1.9k tokensUpdated 5 days ago
    Auto-check passed
  • Adds a new publication page to the RLinf Sphinx docs (EN + ZH) and wires it into the Publications index/toctree.

    5.4k GitHub stars~1.1k tokensUpdated 5 days ago
    Auto-check passed
  • Docs Check

    RLinf/RLinf

    Cross-check RLinf documentation against code, natural explanation flow, and other docs, including English-Chinese parity.

    5.4k GitHub stars~2.1k tokensUpdated 5 days ago
    Auto-check passed
  • Install Check

    RLinf/RLinf

    Check, fix, or extend requirements/install.sh and its docker/Dockerfile coverage when adding a new embodied model or environment in RLinf, so the install logic reuses common utilities, keeps system…

    5.4k GitHub stars~2.3k tokensUpdated 5 days ago
    Auto-check passed
  • Test Install

    RLinf/RLinf

    Test that requirements/install.sh works for an embodied model/env by building its venv and running the matching CI e2e test.

    5.4k GitHub stars~2.3k tokensUpdated 5 days ago
    Auto-check passed
  • Adds install command in install script, Docker build stage in Dockerfile, and CI jobs for docker build and embodied e2e test when introducing a new model or environment in RLinf.

    5.4k GitHub stars~1.4k tokensUpdated 5 days ago
    Auto-check passed

Works with

Categories

Questions about Create PR

What does Create PR do?

Open a GitHub pull request for RLinf, or fix an existing one — checks the PR title against Conventional Commits, writes a precise description that follows .github/PULLREQUESTTEMPLATE.md, and lints…. Create PR is an agent skill from RLinf/RLinf.md, and lints both before pushing.

When should I use Create PR?

Create PR fits situations like: asked to create/open/submit a PR; rewrite a PR description.

How do I install Create PR in Claude Code?

Run `npx skills add RLinf/RLinf --skill create-pr -a claude-code`. Or copy the skill folder (.agents/skills/create-pr in RLinf/RLinf) into .claude/skills/create-pr in your project. Claude Code loads it when a task matches its description.

How do I install Create PR in Codex?

Run `npx skills add RLinf/RLinf --skill create-pr -a codex`. Or copy the skill folder (.agents/skills/create-pr in RLinf/RLinf) into .agents/skills/create-pr in your project. Codex loads it when a task matches its description.

Can I use Create PR 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 RLinf/RLinf --skill create-pr -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/create-pr, .gemini/skills/create-pr, .github/skills/create-pr and .opencode/skills/create-pr in your project.

What does Create PR need to run?

Going by SKILL.md and its folder, Create PR needs Python for the scripts in its folder and the command-line tools its instructions call (python3, gh and git). Our summary lists: Python 3; Docker.

Does Create PR access the network?

SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.

Is Create PR 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 Create PR use?

Create PR 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 Create PR use?

About 2.2k tokens (SKILL.md is roughly 8.9k 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 Create PR?

Skills that share tags, products or a category with Create PR: Codex Merge PR (tbhb/vale-ai-tells, 115 stars), Merge PR (tbhb/vale-ai-tells, 115 stars), Development Workflow (kid-sid/claude-spellbook, 189 stars) and PR Finalize Review (microsoft/garnet, 12k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Create PR?

RLinf (a GitHub organization) maintains it in RLinf/RLinf, which has 5,447 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 2, 2026.

Source: RLinf/RLinf on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.