Finishing a Development Branch
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
Resolve merge conflicts when upgrading SaaS Pegasus. An agent skill from saaspegasus/django-boilerplate.
$ npx skills add saaspegasus/django-boilerplate --skill resolve-pegasus-conflicts -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install saaspegasus/django-boilerplate resolve-pegasus-conflicts --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/saaspegasus/django-boilerplate.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/resolve-pegasus-conflicts .claude/skills/resolve-pegasus-conflicts && rm -rf skills-srcUse ~/.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/
Install the "resolve-pegasus-conflicts" agent skill from https://github.com/saaspegasus/django-boilerplate/tree/main/.claude/skills/resolve-pegasus-conflicts into .claude/skills/resolve-pegasus-conflicts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "resolve-pegasus-conflicts", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/saaspegasus/django-boilerplate/tree/main/.claude/skills/resolve-pegasus-conflictsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add saaspegasus/django-boilerplate --skill resolve-pegasus-conflicts -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install saaspegasus/django-boilerplate resolve-pegasus-conflicts --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/saaspegasus/django-boilerplate.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/resolve-pegasus-conflicts .agents/skills/resolve-pegasus-conflicts && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "resolve-pegasus-conflicts" agent skill from https://github.com/saaspegasus/django-boilerplate/tree/main/.claude/skills/resolve-pegasus-conflicts into .agents/skills/resolve-pegasus-conflicts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "resolve-pegasus-conflicts", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add saaspegasus/django-boilerplate --skill resolve-pegasus-conflicts -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install saaspegasus/django-boilerplate resolve-pegasus-conflicts --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/saaspegasus/django-boilerplate.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/resolve-pegasus-conflicts .cursor/skills/resolve-pegasus-conflicts && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "resolve-pegasus-conflicts" agent skill from https://github.com/saaspegasus/django-boilerplate/tree/main/.claude/skills/resolve-pegasus-conflicts into .cursor/skills/resolve-pegasus-conflicts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "resolve-pegasus-conflicts", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/saaspegasus/django-boilerplate.git --path .claude/skills/resolve-pegasus-conflicts--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add saaspegasus/django-boilerplate --skill resolve-pegasus-conflicts -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install saaspegasus/django-boilerplate resolve-pegasus-conflicts --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/saaspegasus/django-boilerplate.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/resolve-pegasus-conflicts .gemini/skills/resolve-pegasus-conflicts && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "resolve-pegasus-conflicts" agent skill from https://github.com/saaspegasus/django-boilerplate/tree/main/.claude/skills/resolve-pegasus-conflicts into .gemini/skills/resolve-pegasus-conflicts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "resolve-pegasus-conflicts", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install saaspegasus/django-boilerplate resolve-pegasus-conflictsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add saaspegasus/django-boilerplate --skill resolve-pegasus-conflicts -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/saaspegasus/django-boilerplate.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/resolve-pegasus-conflicts .github/skills/resolve-pegasus-conflicts && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "resolve-pegasus-conflicts" agent skill from https://github.com/saaspegasus/django-boilerplate/tree/main/.claude/skills/resolve-pegasus-conflicts into .github/skills/resolve-pegasus-conflicts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "resolve-pegasus-conflicts", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add saaspegasus/django-boilerplate --skill resolve-pegasus-conflicts -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install saaspegasus/django-boilerplate resolve-pegasus-conflicts --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/saaspegasus/django-boilerplate.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/resolve-pegasus-conflicts .opencode/skills/resolve-pegasus-conflicts && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "resolve-pegasus-conflicts" agent skill from https://github.com/saaspegasus/django-boilerplate/tree/main/.claude/skills/resolve-pegasus-conflicts into .opencode/skills/resolve-pegasus-conflicts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "resolve-pegasus-conflicts", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
resolve-pegasus-conflictsResolve merge conflicts when upgrading SaaS Pegasus. An agent skill from saaspegasus/django-boilerplate.
Resolve Pegasus Conflicts is an agent skill from saaspegasus/django-boilerplate. Resolve merge conflicts when upgrading SaaS Pegasus. Use when the user has merge conflicts after running git merge during a Pegasus upgrade, or when they need help with the merge process. Also use when the user mentions 'merge pegasus".
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Git workflow. It works with Git. The repository describes itself as: The original SaaS Boilerplate for Django, trusted by thousands. The licence is MIT.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit e9d11b0. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
gitnpmuvmakeFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Resolve Pegasus Conflicts loads about 3.2k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 1,614 words of instructions outside code blocks.
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.
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.
The full file from saaspegasus/django-boilerplate at commit e9d11b0, republished under its MIT licence (© saaspegasus). 1,614 words, ~3,202 tokens.
.claude/skills/resolve-pegasus-conflicts/SKILL.md (or your agent's skills folder).This skill helps users resolve merge conflicts when upgrading their SaaS Pegasus codebase. Most users will invoke this skill when they have merge conflicts after merging their main branch into a Pegasus upgrade branch, but you can also help run the merge process for them.
First, determine what the user needs help with by checking their current state:
git status to see if there's an active merge in progressgit merge and need help resolving conflicts (most common)The user has already run git merge <main branch> and has conflicts to resolve. Help them resolve the conflicts using these strategies:
Principle: When main/local and Pegasus disagree about a migration, main/local wins. Main's migration files typically reflect what the local DB (and prod) have already applied, so that history is the baseline you protect. When a Pegasus migration conflicts with or duplicates something main has already applied, you should drop Pegasus's version in favour of main's, then run ./manage.py makemigrations to re-express any genuine change as a clean forward diff (the change lives in the merged models, so makemigrations re-derives it).
git checkout --theirs <migration-file>, then run ./manage.py makemigrations after all conflicts are resolved.0002_customuser_language... → 0002_customuser_customer...). A rename is a delete-on-one-side + add-on-the-other, which git merges with no conflict markers — so it slips through silently and leaves you with a duplicate/competing migration the conflict step never flagged. After merging, always diff the migration dirs against main to catch this:git diff --name-status main HEAD -- '*/migrations/*.py'R (rename) the same as a conflict: restore main's file (git checkout main -- <file>), delete Pegasus's regenerated copy (git rm <file>), then ./manage.py makemigrations to regenerate the forward diff cleanly. Brand-new app migrations (all A, e.g. a freshly added ecommerce app) are fine — keep those as-is.pyproject.toml, requirements.in, package.jsonuv.lock, requirements.txt, package-lock.jsongit checkout --ours <lock-file> and git add <lock-file>uv sync (for uv.lock) or npm install (for package-lock.json) right after resolving to ensure dependencies are properly syncednpm run build or npm run dev after mergeIf the user wants you to run the merge:
git fetch to download the latest branches and commits from the remote (this ensures you can see the latest Pegasus upgrade branch)git branch -a to list all branches and look for the latest Pegasus upgrade branch (usually prefixed with pegasus-YYYY.MM, e.g., pegasus-2025.01)git status to see if they're already on the upgrade branchgit checkout <pegasus-branch-name>git pull to ensure the upgrade branch is up to date with the remotemain or master)git merge <main-branch> to merge the main development branch into the Pegasus upgrade branchuv syncnpm installAfter all conflicts are resolved and the merge is complete, run the verification steps below. By default, work straight through them without pausing for confirmation between steps — the user kicked off an upgrade and expects forward motion. Stop only if a step fails, or if the user has said they want to review before pushing.
npm install && npm run builduv sync./manage.py makemigrations then ./manage.py migrate. If migrate fails partway, see "Recovering from a partial migration" below../manage.py testmake ruff (auto-formats and auto-fixes lint issues)Commit any pending changes produced by the steps above (e.g. new migrations, formatting fixes) with a clear message. Docker users can substitute make upgrade for the build/migrate steps.
migrate commits each migration separately, so a failure partway through can leave earlier migrations applied while a later one fails — the DB is now in a half-migrated state that no longer matches its starting baseline. The local dev DB is typically kept at the same migration state as production, so it matters that you put it back. For Pegasus's schema-only, reversible migrations this is straightforward to undo.
./manage.py dbshell -- -c "SELECT app, name, applied FROM django_migrations ORDER BY applied DESC LIMIT 20;"./manage.py migrate <app> <last_good_migration> # or `zero` to unapply an app entirelyIrreversibleError — a data migration with no reverse defined), stop and raise to a human rather than forcing it. Don't pre-gate on atomic = False or side effects; just attempt the reverse and let it fail loudly if it can't. (If a forward op already dropped data, that loss happened on apply — reversing won't recover it, and that's also a human escalation.)./manage.py migrate and confirm the full chain applies cleanly from the baseline.If everything above passed, the default is to push so the user can open a PR:
git push -u origin <branch-name>Then report the branch name and a summary of what was upgraded. The push output includes a "Create a pull request" URL — surface that link to the user and tell them that's where they can review the diff and open the PR.
Hold off on pushing (and ask first) if any of these are true:
git config rerere.enabled true to remember conflict resolutions for future upgradesgit show HEAD:<file> and git show main:<file> to see the clean versions from each branch, rather than trying to parse the conflict markers in placeUser: "I have merge conflicts after upgrading Pegasus"
You: [Check git status, see conflicts in migrations and uv.lock]
You: "I can see you have conflicts in migrations and uv.lock. Let me help resolve these:
- For migrations: I'll keep your version and we'll regenerate them
- For uv.lock: I'll accept the Pegasus version and regenerate it
[Proceed to resolve conflicts]"User: "Can you help me merge my changes into the Pegasus upgrade branch?"
You: "I can help with that. Let me:
1. Find the latest Pegasus upgrade branch
2. Check out that branch (or confirm you're already on it)
3. Merge your main development branch into it
4. Help resolve any conflicts that come up
[Proceed with finding branch and running git merge main]"pegasus-YYYY.MM branch, direct them to the Pegasus upgrade documentationPegasus 2026.2.2 upgraded djstripe from 2.9 to 2.10. This is a significant upgrade that requires extra steps beyond normal conflict resolution.
djstripe 2.10 squashed all previous migrations into 0001_initial and 0002_2_10. After resolving migration conflicts, check if any app migrations reference old djstripe migrations (e.g. ('djstripe', '0012_2_8')) that no longer exist. If so, update those dependencies to ('djstripe', '0001_initial'). Do NOT delete migrations — update their dependency references instead.
Many model fields were removed as DB columns and now read from the stripe_data JSONField via @property accessors. Key changes on Product: default_price, type are now properties. This means:
select_related("default_price") will fail — remove it, just use .get() directlyfilter(), order_by(), values() on removed fields will fail — use stripe_data__<field> insteadproduct.default_price.id still works (it does a DB lookup from stripe_data)After running ./manage.py migrate, run ./manage.py djstripe_sync_models Product Price to repopulate stripe_data for existing records. Without this, properties like product.default_price will return None because the old FK data isn't in stripe_data yet.
The RunSQL migration that altered djstripe_paymentintent.capture_method column length (workaround for dj-stripe#2038) is no longer needed. Clear its operations list (keep the migration file as a no-op for the dependency chain).
© saaspegasus, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/resolve-pegasus-conflicts of saaspegasus/django-boilerplate.
Open the folder on GitHubat commit e9d11b0
Resolve Pegasus Conflicts 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Resolve Pegasus Conflicts this skillsaaspegasus/django-boilerplate | 177 | — | ~3.2k | Automated safety check: Pass | MIT | |
| Finishing a Development Branchobra/superpowers | 297k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Code Design Rationale Investigatorcursor/plugins | 10k | 9 repos | ~2.6k | Automated safety check: Pass | None | |
| Contributor-First PR MergeHKUDS/OpenHarness | 16k | 1 repos | ~847 | Automated safety check: Pass | MIT | |
| Migrate Internal Package into GhostTryGhost/Ghost | 56k | — | ~3.8k | Automated safety check: Pass | MIT | |
| Create Pull Requestcline/cline | 70k | 1 repos | ~1.6k | Automated safety check: Pass | Apache-2.0 |
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
cursor/plugins
Digs into why code is shaped the way it is by checking git history, pull requests and connected tools in parallel, then reporting a cited read on the tradeoffs.
HKUDS/OpenHarness
Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.
TryGhost/Ghost
Moves a package from another TryGhost repository into Ghost as an internal workspace package while keeping its Git history, with checkpoints for the steps that need an administrator.
cline/cline
Opens a GitHub pull request from your current branch with the gh CLI, after reviewing the commits and diff and gathering the details the PR needs.
tailcallhq/forgecode
Resolves Git merge conflicts with a plan-first workflow that keeps both sides' intent, regenerates lock files and backs up deleted-but-modified files.
saaspegasus/django-boilerplate
A skill your agent uses when the user asks to create, view, or modify a SaaS Pegasus project via the pegasus CLI — e.g.
saaspegasus/django-boilerplate
Upgrade to the latest version of SaaS Pegasus. An agent skill from saaspegasus/django-boilerplate.
saaspegasus/django-boilerplate
Interactively fix any type checking issues in Python code. An agent skill from saaspegasus/django-boilerplate.
saaspegasus/django-boilerplate
Upgrade Python dependencies using uv, then run post-upgrade checks to ensure nothing is broken.
saaspegasus/django-boilerplate
Upgrade JavaScript dependencies using npm-check-updates, then run post-upgrade checks to ensure nothing is broken.
Works with
Categories
Resolve merge conflicts when upgrading SaaS Pegasus. An agent skill from saaspegasus/django-boilerplate. Resolve Pegasus Conflicts is an agent skill from saaspegasus/django-boilerplate. Resolve merge conflicts when upgrading SaaS Pegasus.
Resolve Pegasus Conflicts fits situations like: the user has merge conflicts after running git merge during a Pegasus upgrade; they need help with the merge process; the user mentions merge pegasus.
Run `npx skills add saaspegasus/django-boilerplate --skill resolve-pegasus-conflicts -a claude-code`. Or copy the skill folder (.claude/skills/resolve-pegasus-conflicts in saaspegasus/django-boilerplate) into .claude/skills/resolve-pegasus-conflicts in your project. Claude Code loads it when a task matches its description.
Run `npx skills add saaspegasus/django-boilerplate --skill resolve-pegasus-conflicts -a codex`. Or copy the skill folder (.claude/skills/resolve-pegasus-conflicts in saaspegasus/django-boilerplate) into .agents/skills/resolve-pegasus-conflicts in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add saaspegasus/django-boilerplate --skill resolve-pegasus-conflicts -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/resolve-pegasus-conflicts, .gemini/skills/resolve-pegasus-conflicts, .github/skills/resolve-pegasus-conflicts and .opencode/skills/resolve-pegasus-conflicts in your project.
Going by SKILL.md and its folder, Resolve Pegasus Conflicts needs the command-line tools its instructions call (git, npm, uv and make). Our summary lists: Python 3; Node.js; Docker.
SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.
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.
Resolve Pegasus Conflicts is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Resolve Pegasus Conflicts: Finishing a Development Branch (obra/superpowers, 297k stars), Code Design Rationale Investigator (cursor/plugins, 10k stars), Contributor-First PR Merge (HKUDS/OpenHarness, 16k stars) and Migrate Internal Package into Ghost (TryGhost/Ghost, 56k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
saaspegasus (a GitHub organization) maintains it in saaspegasus/django-boilerplate, which has 177 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 8, 2026.
Source: saaspegasus/django-boilerplate on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.