Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Creates a draft pull request on GitHub with proper labels, branch naming, and description formatting. Use when changes are ready to be submitted as a PR to the streamlit/streamlit repository.
.claude/skills/streamlit-creating-pull-requests/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 37% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 15% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 127% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-19 | ✗→✓ | ▲ Improved | -29% | 0% |
Create a draft PR on GitHub with appropriate labels after user approval.
Critical constraints:
gh pr createAlways ask the user first:
> How would you like to proceed with creating the PR? > > 1. Already Ready: I have a feature branch with all changes committed and pushed > 2. Automated: Handle branch creation, committing, and pushing automatically
Wait for user response before proceeding.
Validate readiness:
bashgit branch --show-current git status git branch -r | grep $(git branch --show-current)
Confirm with user, then proceed to Step 3.
Assumes user has already staged changes with git add.
bashgit 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.
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.
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.
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.
Read .github/pull_request_template.md for the required sections, then fill them in.
Writing rules:
Good: > Adds height parameter to st.plotly_chart() using Height type system. > - Deprecates use_container_height (removed after 2025-12-31)
Bad (lists every change): > - Added height parameter 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).
Write complete PR details to work-tmp/pr_description.md:
markdown--- 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."
Read work-tmp/pr_description.md to get the (potentially edited) title, labels, and description:
bash# 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
For full details on writing principles, labeling, branch naming, and testing plans, see the Pull requests wiki.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 34,438 | 14,035 | -59% | 1 | 1 | 0% | 1,575 | 1,819 | +15% | 0 | 0 | — |
case-02 | fail→fail | 10,376 | 9,160 | -12% | 1 | 1 | 0% | 1,358 | 1,659 | +22% | 0 | 0 | — |
case-03 | fail→fail | 4,679 | 9,737 | +108% | 1 | 1 | 0% | 664 | 1,822 | +174% | 0 | 0 | — |
case-04 | pass→fail | 73,720 | 12,909 | -82% | 1 | 1 | 0% | 2,527 | 1,704 | -33% | 0 | 0 | — |
case-05 | pass→fail | 28,477 | 9,241 | -68% | 1 | 1 | 0% | 1,786 | 1,639 | -8% | 0 | 0 | — |
case-06 | pass→pass | 6,590 | 5,141 | -22% | 1 | 1 | 0% | 1,105 | 2,234 | +102% | 0 | 0 | — |
case-07 | fail→pass | 7,641 | 3,310 | -57% | 1 | 1 | 0% | 1,322 | 1,816 | +37% | 0 | 0 | — |
case-08 | fail→fail | 21,120 | 5,073 | -76% | 1 | 1 | 0% | 1,491 | 2,045 | +37% | 0 | 0 | — |
case-09 | fail→pass | 10,671 | 4,210 | -61% | 1 | 1 | 0% | 1,822 | 2,095 | +15% | 0 | 0 | — |
case-10 | pass→pass | 3,948 | 8,082 | +105% | 1 | 1 | 0% | 484 | 2,091 | +332% | 0 | 0 | — |
case-11 | pass→pass | 7,014 | 5,585 | -20% | 1 | 1 | 0% | 1,075 | 2,048 | +91% | 0 | 0 | — |
case-12 | fail→pass | 5,276 | 24,923 | +372% | 1 | 1 | 0% | 735 | 1,672 | +127% | 0 | 0 | — |
case-13 | fail→fail | 10,065 | 8,879 | -12% | 1 | 1 | 0% | 817 | 2,435 | +198% | 0 | 0 | — |
case-14 | fail→fail | 9,014 | 5,852 | -35% | 1 | 1 | 0% | 1,275 | 2,219 | +74% | 0 | 0 | — |
case-15 | pass→pass | 22,818 | 3,691 | -84% | 1 | 1 | 0% | 914 | 1,668 | +82% | 0 | 0 | — |
case-16 | pass→pass | 5,071 | 2,479 | -51% | 1 | 1 | 0% | 460 | 1,664 | +262% | 0 | 0 | — |
case-17 | pass→pass | 5,265 | 3,312 | -37% | 1 | 1 | 0% | 641 | 1,588 | +148% | 0 | 0 | — |
case-18 | fail→pass | 58,348 | 4,684 | -92% | 1 | 1 | 0% | 1,650 | 1,866 | +13% | 0 | 0 | — |
case-19 | fail→pass | 16,187 | 4,184 | -74% | 1 | 1 | 0% | 2,659 | 1,894 | -29% | 0 | 0 | — |
case-20 | fail→fail | 7,167 | 10,888 | +52% | 1 | 1 | 0% | 829 | 1,666 | +101% | 0 | 0 | — |
case-21 | fail→pass | 31,951 | 3,680 | -88% | 1 | 1 | 0% | 2,124 | 1,687 | -21% | 0 | 0 | — |
case-22 | pass→pass | 10,147 | 4,169 | -59% | 1 | 1 | 0% | 1,465 | 2,039 | +39% | 0 | 0 | — |
case-23 | fail→pass | 45,781 | 5,360 | -88% | 1 | 1 | 0% | 1,378 | 1,892 | +37% | 0 | 0 | — |
case-24 | fail→pass | 18,130 | 3,418 | -81% | 1 | 1 | 0% | 1,116 | 1,685 | +51% | 0 | 0 | — |
case-25 | fail→pass | 7,774 | 3,165 | -59% | 1 | 1 | 0% | 1,035 | 1,699 | +64% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted, and 20 counted toward the lift figure. The other 5 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +28 percentage points is the difference between those two pass rates over the 20 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.