A VS Code extension that streamlines creating GitHub Pull Requests using a worktree-based workflow — no more context switching between your editor and terminal.
Once installed, look for the Quick PR Studio icon ($(git-pull-request)) in the VS Code activity bar — all commands and worktree management are available from the sidebar.
Choose between two workflow modes:
One-Shot Mode (default):
- Select changed files — pick which modified/staged files to include
- Fill in PR details — commit message, branch name, PR title/body, target branch
- One click — the extension automatically:
- Creates a temporary git worktree from your current branch
- Copies selected files to the worktree
- Commits and pushes to a new branch
- Creates a PR via GitHub CLI (
gh pr create) - Cleans up the temporary worktree
- Opens the PR URL in your browser
Step-by-Step Mode — for PRs that need multiple commits:
- Start — name your branch and target
- Add commits — select files, write commit messages, repeat as needed
- Finalize — write PR title/body, push, and create the PR
| Tool | Required | Notes |
|---|---|---|
| Node.js | Yes | For building from source |
| Git | Yes | Must be authenticated with your remote |
GitHub CLI (gh) |
Yes | Must be authenticated (gh auth login) |
- gh CLI: Run
gh auth loginor setGH_TOKEN/GITHUB_TOKENenvironment variable. - Git: Ensure your remote can be pushed to (HTTPS or SSH).
- Make changes in your repository and stage them in VS Code's Source Control panel
- Click the Quick PR Studio sidebar icon, then click "Create Pull Request", or run the command from the Command Palette (
Ctrl+Shift+P) - Select the files you want to include, view side-by-side diffs by double-clicking file rows
- Fill in the form and click Create PR
- Click "Start Step-by-Step PR" in the sidebar (activity bar), or run the command from the palette
- Enter a branch name and target branch to create a worktree
- Use "Add Commit" to select files, write commit messages — repeat as needed
- Click "Finalize" to write PR title/body, push, and create the PR
- Monitor and manage all worktrees from the sidebar
- Worktree isolation: Your working directory stays untouched — all operations happen in a temporary worktree
- Two workflow modes: One-shot for quick PRs, step-by-step for multi-commit PRs with sidebar management
- File-level selection: Include only the changes you want in each PR
- Side-by-side diff view: Double-click any file to preview changes before including them
- AI-powered generation (optional): Auto-generate PR title, body, commit message, and branch name using OpenAI-compatible APIs — only fills empty fields, preserving your existing input
- SSH fallback: Automatically retries push via SSH if HTTPS connection fails
- Worktree sidebar: View and manage all active worktrees from the activity bar
- Customizable rules: Project-level PR title/body/commit message/branch name templates via
.quick-pr-studio/directory - Auto-initialized config:
.quick-pr-studio/directory with default settings is created automatically on first activation - Full debug logging: Complete AI prompts and raw responses are logged to
.quick-pr-studio/log.logfor troubleshooting - Loading indicators: Buttons disable automatically on click and show progress text; VS Code notifications display real-time progress for each step
You can test Quick PR Studio using the dedicated sandbox repository:
This repository is intentionally minimal with no application code — it's a safe practice ground for creating Pull Requests. It includes:
- CONTRIBUTING.md — Guidelines for acceptable PRs (no prohibited content, file size limits)
- CI pipeline — Automatically checks file sizes (< 100 KB) and scans for prohibited content
- CODEOWNERS — Protects critical files (LICENSE, README, CONTRIBUTING, .github)
- Pre-commit hook — Prevents committing oversized files
- Quick PR Studio settings — Pre-configured
.quick-pr-studio/settings.json
To test:
- Clone the test repo:
git clone https://github.com/SunYanbox/quick-pr-studio-test-repo.git - Make any change (edit a file, add a file, etc.)
- Run Quick PR Studio to create a Pull Request
Any well-intentioned PR is welcome — no format requirements. See CONTRIBUTING.md for details.
| Setting | Default | Description |
|---|---|---|
quick-pr-studio.ai.enabled |
false |
Enable AI generation for PR title and body |
quick-pr-studio.ai.apiKey |
"" |
API key for OpenAI-compatible API |
quick-pr-studio.ai.baseUrl |
"" |
Base URL for OpenAI-compatible API |
quick-pr-studio.ai.model |
gpt-4o-mini |
Model name for OpenAI-compatible API |
quick-pr-studio.ai.promptTemplate |
(built-in) | System prompt for AI generation |
quick-pr-studio.cleanupWorktreeAfterPr |
true |
Delete worktree automatically after PR creation (one-shot) |
quick-pr-studio.workflowMode |
"one-shot" |
PR workflow mode: one-shot or step-by-step |
quick-pr-studio.autoCleanupWorktree |
false |
Auto-delete worktree after successful PR (step-by-step) |
Place .quick-pr-studio/settings.json in your project root:
{
"defaultBaseBranch": "main"
}Optional rule files:
.quick-pr-studio/PR title rule.md— Custom title format rules.quick-pr-studio/PR body rule.md— Custom body template rules.quick-pr-studio/commit message rule.md— Custom commit message format rules.quick-pr-studio/branch name rule.md— Custom branch naming rules
This is a VS Code extension. To run from source:
# 1. Install dependencies
npm install
# 2. Open the project in VS Code
code .
# 3. Press F5 to launch the Extension Development HostThe extension activates on the command quick-pr-studio.createPr.
npm run buildsrc/
├── extension.ts # Extension entry point & command registration
├── inputService.ts # Webview-based PR forms (one-shot + step-by-step)
├── gitService.ts # Git operations (worktree, commit, push, diff, log)
├── prService.ts # GitHub CLI interaction (gh pr create)
├── projectConfig.ts # Project-level configuration loader
├── aiService.ts # AI-powered PR content generation
├── worktreeManager.ts # Worktree metadata registry (worktrees.json)
├── worktreeTreeView.ts # Sidebar TreeDataProvider with actions
├── worktreeWebview.ts # Worktree detail & operations webview panel
└── logger.ts # File-based structured logging