Create pull request
SkillDev toolsThe creating-pull-requests skill is a dev-tools helper that lets an AI agent open a draft pull request on GitHub for the streamlit/streamlit repository. It handles branch creation, committing, and pushing when needed, then writes a title, description, and labels that follow the repository's conventions. The agent shows the full pull request content for approval and only runs the creation command after you agree.
Then ask your AI: use the Create pull request skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Have a GitHub account with access to the streamlit/streamlit repository and the gh command line tool available.
What your AI can do with it
- Creates a draft pull request on GitHub after user approval
- Validates an existing branch is committed and pushed
- Creates a branch, commits staged changes, and pushes it
- Names branches as {type}/{brief-description} in kebab-case
- Writes commit messages as an imperative verb, what, and where
- Assigns impact and change type labels and fills the PR template
Getting started
- Have a GitHub account with access to the streamlit/streamlit repository and the gh command line tool available.
- Install the skill where your agent can load it.
- Stage your changes with git add if you want the skill to handle branch creation, committing, and pushing.
- Tell the agent you are ready to submit a pull request and choose the already ready or automated mode.
- Review the full title, description, and labels the agent shows, then approve it so the draft pull request is created.
What this skill tells your AI
The instructions your AI receives, as published by streamlit/streamlit in .claude/skills/creating-pull-requests/SKILL.md and read by Ahel’s review.
Create a draft PR on GitHub with appropriate labels after user approval.
Critical constraints:
- MUST wait for user approval before running
gh pr create - MUST show complete PR content in chat before creating
- MUST follow the writing and labeling rules below
Step 1: Choose mode
Always ask the user first:
How would you like to proceed with creating the PR?
- Already Ready: I have a feature branch with all changes committed and pushed
- Automated: Handle branch creation, committing, and pushing automatically
Wait for user response before proceeding.
Step 2: Execute git workflow
Mode A: Already ready
Validate readiness:
git branch --show-current
git status
git branch -r | grep $(git branch --show-current)
Confirm with user, then proceed to Step 3.
Mode B: Automated
Assumes user has already staged changes with git add.
git status
git checkout develop
git checkout -b {type}/{descriptive-name}
git commit -m "{imperative-verb} {what} {where}"
git push --set-upstream origin $(git branch --show-current)
Branch naming: {type}/{brief-description} in kebab-case.
Types: feature, fix, refactor, chore, docs.
Examples: feature/add-height-plotly-charts, fix/dataframe-memory-leak-scrolling.
Commit message: <imperative verb> <what> <where>, ≤50 chars, no period.
Examples: Add height parameter to plotly charts, Fix memory leak in dataframe scrolling.
Step 3: Compose and create PR
When drafting the title and description below, follow the title/description guidance in the /reviewing-pr-description skill so they are clear and concise from the start.
3.1 Determine labels
All PRs require these labels:
| Category | Options |
|---|---|
| Impact | impact:users (affects user behavior) OR impact:internal (no user behavior change) |
| Change type | change:feature, change:bugfix, change:chore, change:refactor, change:docs, change:spec, change:other |
Note: PRs labeled change:spec (for spec/design documents only) are exempt from the impact:* requirement. Do not use change:spec for PRs with code changes.
3.2 Generate PR title
Format: [type] Description of change, ≤63 chars (fits squash-merge commit subjects).
Examples: [feature] Add height parameter to plotly charts, [fix] Extra padding on button.
3.3 Compose PR description
Read .github/pull_request_template.md for the required sections, then fill them in.
Writing rules:
- Highlight what matters. Omit the obvious.
- 2-4 bullets maximum for listing changes.
- No meta-commentary ("This PR...", "We have...", "I added..."). State what changed directly.
- Don't list: added tests, updated types, added validation, fixed linting (all obvious).
- DO explain non-obvious decisions (deprecations, unit choices, fallback behavior).
Good:
Adds
heightparameter tost.plotly_chart()usingHeighttype system.
- Deprecates
use_container_height(removed after 2025-12-31)
Bad (lists every change):
- Added
heightparameter to signature- Updated layout config dataclass
- Added validation for height values
- Added unit tests
Testing section — detect from changed files:
| Pattern | Test type |
|---|---|
lib/tests/**/*.py | Python unit tests |
frontend/**/*.test.{ts,tsx} | Frontend unit tests |
e2e_playwright/**/*_test.py | E2E tests |
Check the matching boxes in the PR template. If no test files changed, explain why. Leave "manual testing" unchecked (user fills in).
3.4 Write PR for user review
Write complete PR details to work-tmp/pr_description.md:
---
title: [PR title from 3.2]
labels: impact:{users|internal}, change:{type}
---
[PR description from 3.3]
Ask user: "I've written the PR details to work-tmp/pr_description.md. You can edit the title, labels, or description directly in that file. Reply 'yes' when ready to create the PR, or provide feedback for changes."
3.5 Create PR (after user approval only)
Read work-tmp/pr_description.md to get the (potentially edited) title, labels, and description:
# Parse frontmatter from the reviewed file
title=$(grep '^title:' work-tmp/pr_description.md | sed 's/^title: //')
labels=$(grep '^labels:' work-tmp/pr_description.md | sed 's/^labels: //' | sed 's/, /,/g')
# Extract body (everything after the closing --- of frontmatter)
awk '/^---$/{if(++count==2) flag=1; next} flag' work-tmp/pr_description.md > work-tmp/pr_body.md
# Create PR using parsed values
gh pr create \
--title "$title" \
--body-file work-tmp/pr_body.md \
--base develop \
--label "$labels" \
--draft
# Clean up temporary files
rm work-tmp/pr_description.md work-tmp/pr_body.md
Reference
For full details on writing principles, labeling, branch naming, and testing plans, see the Pull requests wiki.
Signals
- GitHub stars
- 46k
- Forks
- 4k
- Last commit
- Oct 2026
Questions
- Does it create the pull request without asking me first?
- No. It must show the complete pull request content in chat and wait for your approval before running gh pr create.
- What labels does it apply?
- Every pull request needs an impact label, impact:users or impact:internal, and a change type label such as change:feature, change:bugfix, change:chore, change:refactor, change:docs, change:spec, or change:other.
Advanced
- Item type
- skill
- Key
creating-pull-requests-streamlit- Source
- github.com/streamlit/streamlit
github.com/streamlit/streamlit
Related picks
Skill · mattpocock
The pick for TypeScripttypescript-providers
Skill · composiohq
The pick for TypeScriptdbos-python
Skill · sickn33
The pick for Pythonpython-design-patterns
Skill · wshobson
The pick for Pythonlark-markdown
Skill · larksuite
The pick for Markdownmarkdown-formatter
Skill · nvidia
The pick for Markdown