Automated summary
Automates feature wrap-up: validating the Git environment, running tests, squashing commits, and creating a GitHub pull request using Specimin plan context.
Strengths
- Chains a complete ordered flow: Git checks, tests, change review, squash, then PR creation
- Builds the commit message and PR description from the project's spec.md, plan.md, and implementation.md files
- Fails fast on a dirty working tree, the main branch, no commits ahead, or failing tests
- Asks for explicit confirmation before squashing and shows the commit history plus changed files
Limitations
- Tightly coupled to the .specimin/plans/{branch}/ layout and exits if the project was not initialized with /init
- Targets GitHub only through the gh CLI (install and auth required), not GitLab or Bitbucket
- Assumes a detectable main or master branch and describes no merge-conflict handling
Use it after a feature is implemented, tested, and committed, when you want a clean single-commit history and an open PR ready for review.
Don't invoke it mid-development, from the main branch, while tests are still failing, or in a repo that has not been set up for Specimin.
Security analysis
CautionThe skill uses powerful tools (git history rewriting, arbitrary test execution, and GitHub CLI PR creation) but each for an explicitly stated, legitimate purpose and gated behind a user confirmation prompt before the destructive-ish squash step. There is no obfuscation, no curl|sh, no secret/token exfiltration, and no attempt to disable safety. The main residual risks are executing repo-defined test commands and irreversible-ish history squashing, both typical for a wrap-up workflow, so it fits 'caution' rather than 'risky'.
- •Executes arbitrary repository test commands (e.g., `npm test`, `pytest`, `make test`) detected from the repo, which run project-supplied scripts/code
- •Rewrites local git history with `git reset --soft {MAIN_BRANCH}` followed by a new commit (recoverable via reflog, but history-altering)
- •Creates a remote pull request and may trigger a push via `gh pr create`, modifying server-side state on the user's GitHub repo
- •Uses `run_terminal_cmd` broadly across stages; no allowlisting or dry-run mode for the squash/PR steps
Examples
The feature is done — wrap it up: run the tests, squash my commits into one, and open a pull request for review.Prepare this branch for code review with gh, using the spec and plan in .specimin to write the PR description.Squash all my commits since main into a single conventional commit and create the pull request.name: "specimin-wrap" description: "Squash commits and create a pull request after feature implementation is complete. Only invoke when user explicitly requests to wrap up, create a PR, prepare for review, or finish the feature." allowed-tools:
- run_terminal_cmd
- read_file
Feature Wrap-Up Command
Prepare completed work for code review: squash commits, generate PR description, create pull request.
Stage 1: Validate Environment
Actions:
- Check uncommitted changes:
git status - Get current branch:
git rev-parse --abbrev-ref HEAD→ store asCURRENT_BRANCH - Detect main branch (try in order):
Store asgit show-ref --verify --quiet refs/heads/main && echo "main" || \ git show-ref --verify --quiet refs/heads/master && echo "master" || \ echo "unknown"MAIN_BRANCH. If "unknown", ask user: "What is your main branch name?" - Verify branch is not main: If
CURRENT_BRANCH == MAIN_BRANCH, error and exit - Check initialization: Verify
.specimin/plans/{CURRENT_BRANCH}/exists - Read feature context (for PR description generation):
.specimin/plans/{CURRENT_BRANCH}/spec.md.specimin/plans/{CURRENT_BRANCH}/plan.md.specimin/plans/{CURRENT_BRANCH}/implementation.md
Context Extraction Goals (from spec/plan):
- Feature objective (1-2 sentence summary)
- High-level changes by phase/component
- Acceptance criteria
- Testing approach
Error Handling:
- Uncommitted changes:
Warning: Uncommitted changes detected. Commit or stash before wrapping up.→ Exit - On main branch:
Error: Cannot wrap up main branch. Switch to feature branch first.→ Exit - Not initialized:
Error: Specimin not initialized. Run /init first.→ Exit - No commits ahead:
Error: No commits to squash. Branch up to date with {MAIN_BRANCH}.→ Exit ghnot installed:Error: GitHub CLI not installed. Install: https://cli.github.com/→ Exit- Not authenticated:
Error: Not authenticated with GitHub CLI. Run: gh auth login→ Exit
Checkpoint: Verify environment valid (no uncommitted changes, on feature branch, has commits to squash) before proceeding.
Stage 2: Run Tests
Actions:
-
Detect test framework and run appropriate test command:
- Python:
python3 -m pytestorpytest - JavaScript/TypeScript:
npm testoryarn test - Ruby:
bundle exec rspecorrake test - Go:
go test ./... - Rust:
cargo test - Java:
mvn testorgradle test - Other: Check for
Makefilewith test target, or ask user
- Python:
-
Run tests and capture output
-
Error Handling:
- Tests fail: Display failure summary and exit with message:
✗ Tests failed. Fix failing tests before wrapping up. {test failure summary} Run tests again after fixes and retry wrap. - Tests pass: Proceed to next stage
- No tests found: Warn user but continue:
⚠ No tests detected. Consider adding tests before creating PR. Proceed anyway? (yes/no)
- Tests fail: Display failure summary and exit with message:
Checkpoint: Verify all tests pass before proceeding to review changes.
Stage 3: Review Changes
Show user what will be squashed:
-
Commit history:
git log {MAIN_BRANCH}..HEAD --oneline -
Change summary:
git diff {MAIN_BRANCH}...HEAD --stat -
Files changed:
git diff {MAIN_BRANCH}...HEAD --name-only
Present:
I'll squash these commits into one:
[commit history]
Files changed:
[file list]
Proceed with squash and PR creation? (yes/no)
Wait for confirmation. If "no", exit gracefully.
Stage 4: Squash Commits
Once confirmed:
-
Generate commit message:
- Use feature objective from spec.md
- Summarize WHAT changed (not HOW)
- 1-2 sentences max
- Follow conventional commits:
feat:,fix:,refactor:,docs:
-
Perform squash:
git reset --soft {MAIN_BRANCH} git commit -m "{COMMIT_MESSAGE}"CRITICAL: No
--author, noCo-Authored-By:, no co-authoring metadata. User authorship only. -
Verify squash:
git log --oneline -1Confirm only one commit since main branch.
Checkpoint: Verify squash succeeded (single commit, correct message) before creating PR.
Stage 5: Create Pull Request
-
Generate PR title:
- Use commit message or feature name from spec
- Under 72 characters
- Clear and descriptive
-
Generate PR description (use template below with extracted context):
## Summary
{1-2 sentence feature objective from spec.md}
## Changes
{Bulleted list of high-level changes from plan.md phases or implementation.md completed tasks}
## Testing
{Testing approach from plan.md, or manual test scenarios}
## Acceptance Criteria
{Criteria from spec.md}
-
Create PR:
gh pr create --title "{PR_TITLE}" --body "$(cat <<'EOF' {PR_DESCRIPTION} EOF )" -
Display result:
✓ Squashed {N} commits into 1 commit ✓ Created pull request: {PR_URL} Your feature is ready for review!
No upstream remote: gh pr create will prompt to push if needed.
Complete Examples
Example 1: Simple CRUD Feature
Spec objective: "Add user profile management allowing users to update their name and email"
Commit message:
feat: add user profile management with update functionality
PR title:
feat: add user profile management
PR description:
## Summary
Add user profile management allowing users to update their name and email through a settings page.
## Changes
- Added User schema with name and email fields
- Implemented update_user/2 function with validation
- Created ProfileLive page with edit form
- Added integration tests for profile updates
## Testing
- Unit tests: Accounts.update_user/2 with valid/invalid inputs
- Integration tests: ProfileLive form submission and validation errors
- Manual: Navigate to /profile, update name/email, verify saved
## Acceptance Criteria
- [x] Users can view current profile information
- [x] Users can update name and email
- [x] Invalid emails show validation errors
- [x] Changes persist after page refresh
Example 2: Complex Integration Feature
Spec objective: "Integrate Stripe payment processing with retry logic and webhook handling for subscription management"
Commit message:
feat: integrate Stripe payment processing with webhook support
PR title:
feat: integrate Stripe payment processing
PR description:
## Summary
Integrate Stripe payment processing with automatic retry logic for failed charges and webhook handlers for subscription lifecycle events.
## Changes
- Added Stripe client module with exponential backoff retry logic
- Implemented payment processing functions (create_charge, refund_charge)
- Created webhook handler for subscription events (created, updated, canceled)
- Added Payment schema and database migrations
- Implemented error handling for network failures and invalid cards
## Testing
- Unit tests: StripeClient module with mocked HTTP responses
- Integration tests: Payment creation flow with test API keys
- Webhook tests: Event handling for all subscription states
- Manual: Create test charge in Stripe dashboard, verify webhook receipt
## Acceptance Criteria
- [x] Charges created successfully with valid cards
- [x] Network failures retry up to 3 times with backoff
- [x] Invalid cards return clear error messages
- [x] Webhooks update subscription status in database
- [x] Payment history visible to users
Note: This prompt optimized using research-backed principles: token efficiency (-30%), verification checkpoints (Reflexion 91%), consolidated examples (2-5 optimal), explicit context extraction (CGRAG 4x improvement), and minimal preamble (GPT-5-Codex guidance).
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/feature-wrap-up-with-pull-request-mmbizjr5/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/feature-wrap-up-with-pull-request-mmbizjr5' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/feature-wrap-up-with-pull-request-mmbizjr5/download' --output '.skill-downloads/feature-wrap-up-with-pull-request-mmbizjr5/SKILL.md.part' && mv '.skill-downloads/feature-wrap-up-with-pull-request-mmbizjr5/SKILL.md.part' '.skill-downloads/feature-wrap-up-with-pull-request-mmbizjr5/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/feature-wrap-up-with-pull-request-mmbizjr5/SKILL.md' && test -s '.skill-downloads/feature-wrap-up-with-pull-request-mmbizjr5/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/specimin-wrap' && cp -R '.skill-downloads/feature-wrap-up-with-pull-request-mmbizjr5' '.claude/skills/specimin-wrap'Cursor
test -f '.skill-downloads/feature-wrap-up-with-pull-request-mmbizjr5/SKILL.md' && test -s '.skill-downloads/feature-wrap-up-with-pull-request-mmbizjr5/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/specimin-wrap' && cp -R '.skill-downloads/feature-wrap-up-with-pull-request-mmbizjr5' '.cursor/skills/specimin-wrap'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/feature-wrap-up-with-pull-request-mmbizjr5'openskills read 'feature-wrap-up-with-pull-request-mmbizjr5'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/feature-wrap-up-with-pull-request-mmbizjr5/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
Configure a Chat Channel with SecretRefs
DevOps
Set up chat channels using non-interactive commands, with secrets only as SecretRefs. Covers gather, mutate, repair, and prove steps for reliable delivery.
Investigate ClickHouse CI Failures
DevOps
Investigate a ClickHouse CI failure end-to-end from a PR or S3 report URL. Fetches failed tests, classifies flaky vs real regression, and checks for existing issues/fixes.
Ansible PR Review
DevOps
Reviews an Ansible PR following the project's standardized process, including changelog checks, test coverage validation, and feedback tracking.