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.
Complete issue → PR → merge lifecycle with readiness checks. An agent skill from bradygaster/squad.
$ npx skills add bradygaster/squad --skill pr-lifecycle -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install bradygaster/squad pr-lifecycle --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/bradygaster/squad.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.copilot/skills/pr-lifecycle .claude/skills/pr-lifecycle && 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 "pr-lifecycle" agent skill from https://github.com/bradygaster/squad/tree/dev/.copilot/skills/pr-lifecycle into .claude/skills/pr-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-lifecycle", 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/bradygaster/squad/tree/dev/.copilot/skills/pr-lifecycleType 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 bradygaster/squad --skill pr-lifecycle -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install bradygaster/squad pr-lifecycle --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bradygaster/squad.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.copilot/skills/pr-lifecycle .agents/skills/pr-lifecycle && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pr-lifecycle" agent skill from https://github.com/bradygaster/squad/tree/dev/.copilot/skills/pr-lifecycle into .agents/skills/pr-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-lifecycle", 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 bradygaster/squad --skill pr-lifecycle -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install bradygaster/squad pr-lifecycle --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bradygaster/squad.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.copilot/skills/pr-lifecycle .cursor/skills/pr-lifecycle && 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 "pr-lifecycle" agent skill from https://github.com/bradygaster/squad/tree/dev/.copilot/skills/pr-lifecycle into .cursor/skills/pr-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-lifecycle", 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/bradygaster/squad.git --path .copilot/skills/pr-lifecycle--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 bradygaster/squad --skill pr-lifecycle -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install bradygaster/squad pr-lifecycle --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bradygaster/squad.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.copilot/skills/pr-lifecycle .gemini/skills/pr-lifecycle && 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 "pr-lifecycle" agent skill from https://github.com/bradygaster/squad/tree/dev/.copilot/skills/pr-lifecycle into .gemini/skills/pr-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-lifecycle", 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 bradygaster/squad pr-lifecycleInstalls 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 bradygaster/squad --skill pr-lifecycle -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/bradygaster/squad.git skills-src && mkdir -p .github/skills && cp -r skills-src/.copilot/skills/pr-lifecycle .github/skills/pr-lifecycle && 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 "pr-lifecycle" agent skill from https://github.com/bradygaster/squad/tree/dev/.copilot/skills/pr-lifecycle into .github/skills/pr-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-lifecycle", 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 bradygaster/squad --skill pr-lifecycle -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install bradygaster/squad pr-lifecycle --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bradygaster/squad.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.copilot/skills/pr-lifecycle .opencode/skills/pr-lifecycle && 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 "pr-lifecycle" agent skill from https://github.com/bradygaster/squad/tree/dev/.copilot/skills/pr-lifecycle into .opencode/skills/pr-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-lifecycle", 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.
pr-lifecycleComplete issue → PR → merge lifecycle with readiness checks. An agent skill from bradygaster/squad.
PR Lifecycle is an agent skill from bradygaster/squad. Complete issue → PR → merge lifecycle with readiness checks
Its SKILL.md is about 4.8k 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: Squad: AI agent teams for any project. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1fd7e03. 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:
gitghnpmnpxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, gh, npm and npx, which can reach the network depending on how they are called.
From 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.
PR Lifecycle loads about 4.8k tokens when it runs. Until then it costs about 18 tokens; SKILL.md has 1,667 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 bradygaster/squad at commit 1fd7e03, republished under its MIT licence (© bradygaster). 1,667 words, ~4,782 tokens.
.claude/skills/pr-lifecycle/SKILL.md (or your agent's skills folder).This skill is the canonical Copilot-agent lifecycle for the Squad repository. It covers the full path from picking up a GitHub issue to merging a PR. Where older docs (templates, copilot-instructions, CONTRIBUTING.md) conflict with this skill, this skill takes precedence for Copilot agents.
For advanced scenarios (worktrees, multi-repo coordination), see .copilot/skills/git-workflow/SKILL.md.
✅ THIS SKILL COVERS:
❌ THIS SKILL DOES NOT COVER:
git-workflow skill)git-workflow skill).squad/skills/release-process).copilot/skills/reviewer-protocol)Read the issue. Understand the acceptance criteria before writing code.
Confirm capability fit. Check your capability profile in .squad/team.md. 🟢 = proceed. 🟡 = proceed but flag in PR. 🔴 = comment on issue and stop.
Branch from dev:
git fetch origin dev
git checkout dev
git rebase origin/dev
git checkout -b squad/{issue-number}-{slug}squad/{issue-number}-{kebab-case-slug}squad/42-fix-login-validationmainMark in-progress (optional):
gh issue edit {number} --add-label "status:in-progress"Make your changes. Follow the codebase conventions:
@ts-ignoreBuild:
npm run buildTest:
npm testType check:
npm run lintStage specific files only:
git add path/to/file1.ts path/to/file2.tsgit add ., git add -A, or git commit -aPre-push safety check:
# Verify file count matches intent (expect ≤10 files for most fixes)
git diff --cached --stat
# Verify NO unintended deletions
git diff --cached --diff-filter=D --name-onlyIf you see unexpected files or deletions, unstage them: git reset HEAD <file>
Single commit with issue reference:
git commit -m "Brief description of change
Closes #{issue-number}
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>"git rebase -i origin/dev and squash all into onegit reset --soft to squash — it picks up delta from dev and contaminates the commitAdd changeset (if required):
A changeset is required when your PR modifies files under packages/squad-sdk/src/ or packages/squad-cli/src/.
npx changeset addThis prompts for: which packages changed, bump type (patch/minor/major), summary.
Or create manually at .changeset/{descriptive-name}.md:
---
'@bradygaster/squad-cli': patch
---
Brief description of the changeIf the changeset creates a second commit, squash it into your main commit.
Push:
git push -u origin squad/{issue-number}-{slug}Create PR targeting dev:
gh pr create --repo bradygaster/squad --base dev \
--title "fix: brief description (#issue-number)" \
--body "Closes #{issue-number}
## Summary
What this PR does and why.
## Changes
- File-level description of changes
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>"Title conventions:
fix: description (#N)feat: description (#N)docs: description (#N)chore: description (#N)Labels:
fix, feat, docs, or repo-health for typesquad:{agent-name} if working as a squad memberskip-changelog only with reviewer approval (escape hatch)Scope rules by label:
repo-health: Only modify .github/, scripts/, root config, tests, docs. Never modify packages/*/src/fix or feat: May modify product source. Must include changeset when touching packages/*/src/An automated readiness check runs on every push and posts a checklist comment on the PR. All 11 checks must pass before review (check 11 is informational-only).
| What | PR must contain exactly 1 commit |
| Pass | Push a single, squashed commit |
| Fix | git rebase -i origin/dev → squash all commits into one → git push --force-with-lease |
| Gotcha | Never git reset --soft to squash — contaminates the commit with unrelated changes |
| What | PR must not be marked as draft |
| Pass | Create PR as ready, or convert: gh pr ready |
| Fix | gh pr ready {number} or use the GitHub UI |
| Gotcha | The readiness check still runs on drafts but will show ❌ until you mark ready |
| What | PR branch must not be behind dev |
| Pass | Rebase onto latest dev before pushing |
| Fix | git fetch origin dev && git rebase origin/dev && git push --force-with-lease |
| Gotcha | After rebasing, the readiness check re-runs automatically on the new push |
| What | The copilot-pull-request-reviewer bot must post an APPROVED review |
| Pass | Wait — Copilot review is triggered automatically on PR creation/push |
| Fix | If Copilot hasn't reviewed after 5 minutes, push an empty commit to re-trigger: git commit --allow-empty -m "trigger review" && git push then squash before merge |
| Gotcha | Copilot review state is APPROVED, CHANGES_REQUESTED, or COMMENTED. Only APPROVED passes |
| What | PRs that modify packages/squad-sdk/src/ or packages/squad-cli/src/ must include a .changeset/*.md file or a CHANGELOG.md edit |
| Pass | Run npx changeset add and commit the generated file |
| Fix | npx changeset add → select affected package(s) → select bump type → write summary → git add .changeset/ && git commit --amend --no-edit && git push --force-with-lease |
| Gotcha | The skip-changelog label bypasses this check but requires reviewer approval. Non-source changes (docs, config, tests) don't need a changeset |
| What | PR must be cleanly mergeable with the base branch |
| Pass | Keep branch rebased on dev |
| Fix | git fetch origin dev && git rebase origin/dev → resolve conflicts → git push --force-with-lease |
| Gotcha | GitHub may show null mergeability briefly while computing — the check treats this as passing |
| What | Warns if PR includes .squad/ or docs/proposals/ files |
| Pass | Don't include team state or proposal files in product PRs |
| Fix | Remove unintended files: git reset HEAD .squad/ docs/proposals/ then amend your commit |
| Gotcha | This check is informational only — it always passes but flags attention. Including these files is OK if intentional (e.g., updating agent history) |
| What | All review threads opened by copilot-pull-request-reviewer must be resolved |
| Pass | Address each Copilot comment, then click "Resolve conversation" in the GitHub UI |
| Fix | Go to the PR's "Files changed" tab → find unresolved Copilot threads → fix the code or explain why no change is needed → click "Resolve conversation" |
| Gotcha | Outdated threads (on code that's since changed) are automatically skipped. Only active, unresolved threads block |
| What | All CI check runs (excluding the readiness check itself) must be green |
| Pass | Fix any build, test, or lint failures and push |
| Fix | Read the failing check's logs (gh run view {run-id} --log-failed), fix the issue, push |
| Gotcha | Pending/in-progress checks also show ❌. Wait for all checks to complete before evaluating. The readiness check re-runs after CI completes via workflow_run trigger |
| What | PR body or commit message must reference an issue (Closes #N, Fixes #N, Resolves #N, or Part of #N) |
| Pass | Include Closes #N in PR body or commit message |
| Fix | Edit PR body to add Closes #{issue-number}, or amend commit message |
| Gotcha | Case-insensitive matching. Only closing keywords are recognized |
| What | Warns when zero-dependency bootstrap files are modified (always passes) |
| Pass | Always passes — this is informational only |
| Fix | If flagged, verify the changed bootstrap file still has zero external dependencies |
| Gotcha | Protected files are listed in copilot-instructions.md. The check warns but does not block |
Handling Copilot review feedback:
git commit --amend --no-edit && git push --force-with-leaseRebasing when behind dev:
git fetch origin dev
git rebase origin/dev
# Resolve any conflicts
git push --force-with-leaseRe-running CI:
gh run rerun {run-id} --failedIf readiness check is stale:
Merge preconditions:
Who merges:
Post-merge cleanup:
git checkout dev
git pull origin dev
git branch -d squad/{issue-number}-{slug}
git push origin --delete squad/{issue-number}-{slug}Verify issue auto-close:
Closes #{N}, the issue closes automatically on mergegh issue close {number}# Branch
git fetch origin dev && git checkout dev && git rebase origin/dev
git checkout -b squad/610-fix-broken-link
# Fix
# ... edit docs/some-file.md ...
# Validate
npm run build && npm test
# Commit (no changeset needed — docs only)
git add docs/some-file.md
git diff --cached --stat # verify: 1 file
git commit -m "docs: fix broken link in contributing guide
Closes #610
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>"
# Push and PR
git push -u origin squad/610-fix-broken-link
gh pr create --repo bradygaster/squad --base dev \
--title "docs: fix broken link (#610)" \
--body "Closes #610"# Branch
git fetch origin dev && git checkout dev && git rebase origin/dev
git checkout -b squad/42-add-profile-api
# Implement
# ... edit packages/squad-sdk/src/profile/index.ts ...
# ... edit packages/squad-sdk/src/index.ts (re-export) ...
# Validate
npm run build && npm test && npm run lint
# Changeset (required — touches packages/squad-sdk/src/)
npx changeset add
# Select: @bradygaster/squad-sdk, minor, "Add profile API"
# Stage and commit
git add packages/squad-sdk/src/profile/index.ts packages/squad-sdk/src/index.ts .changeset/
git diff --cached --stat # verify file count
git diff --cached --diff-filter=D --name-only # verify no deletions
git commit -m "feat: add profile API
Closes #42
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>"
# Push and PR
git push -u origin squad/42-add-profile-api
gh pr create --repo bradygaster/squad --base dev \
--title "feat: add profile API (#42)" \
--body "Closes #42
## Summary
Adds profile resolution API to the SDK.
## Changes
- New module: packages/squad-sdk/src/profile/
- Re-exported from barrel file"main (always branch from dev)main with PRs (always target dev)git add . or git add -A (stage specific files only)git commit -a (same risk as broad staging)git reset --soft to squash (contaminates commit with dev delta)dev or main (only force-push your own feature branch).squad/ files in product PRs without intention (scope check warns)After analyzing .github/workflows/squad-ci.yml, three gaps were identified. Gaps 1 and 3 are now implemented (checks 10 and 11). Gap 2 is deferred.
Problem: Nothing verifies that the PR body or commit message references an issue (Closes #N or Part of #N). Orphan PRs are hard to trace.
Recommendation: Add checkIssueLinkage(prBody, commitMessages) to pr-readiness.mjs.
/**
* Check: Issue linkage.
* @param {string} prBody — PR description text
* @param {Array<{ commit: { message: string } }>} commits
* @returns {{ pass: boolean, detail: string }}
*/
export function checkIssueLinkage(prBody, commits) {
const issuePattern = /(closes|fixes|resolves|part of)\s+#\d+/i;
const bodyHasRef = issuePattern.test(prBody || '');
const commitHasRef = (commits || []).some(
(c) => issuePattern.test(c.commit?.message || '')
);
if (bodyHasRef || commitHasRef) {
return { pass: true, detail: 'Issue reference found' };
}
return {
pass: false,
detail: 'No issue reference — add `Closes #N` to PR body or commit message',
};
}Integration point: After check 2 (draft status), before check 3 (branch freshness). Data is already available from the commits and PR body fetched in the orchestrator.
Problem: The CI status check (check 9) verifies that existing checks are green, but doesn't verify that the expected set of checks actually ran. If a workflow is misconfigured or skipped, the PR could pass with zero CI checks.
Recommendation: Add checkRequiredChecksPresent(checkRuns, files) to pr-readiness.mjs.
/** Minimum required check names that must appear for source PRs. */
export const REQUIRED_CHECKS = ['Squad CI / test'];
/**
* Check: Required CI checks are present.
* @param {Array<{ name: string }>} checkRuns
* @param {Array<{ filename: string }>} files
* @returns {{ pass: boolean, detail: string }}
*/
export function checkRequiredChecksPresent(checkRuns, files) {
const touchesSource = (files || []).some(
(f) => SOURCE_PATTERN.test(f.filename)
);
if (!touchesSource) {
return { pass: true, detail: 'No source changes — required checks not enforced' };
}
const checkNames = new Set((checkRuns || []).map((cr) => cr.name));
const missing = REQUIRED_CHECKS.filter((name) => !checkNames.has(name));
if (missing.length > 0) {
return {
pass: false,
detail: `Required check(s) not found: ${missing.join(', ')}`,
};
}
return { pass: true, detail: 'All required checks present' };
}Integration point: After check 9 (CI status). Uses the same checkRuns and files data already fetched.
Problem: The repo has zero-dependency bootstrap files that must never import external packages (documented in copilot-instructions.md). The squad-repo-health.yml workflow runs a bootstrap protection check, but the PR readiness comment doesn't surface it — contributors don't see the warning until they check the separate workflow.
Recommendation: Add checkProtectedFiles(files) to pr-readiness.mjs as an informational check (always passes, like scope clean).
/** Bootstrap files that must remain zero-dependency. */
export const PROTECTED_FILES = [
'packages/squad-cli/src/cli/core/detect-squad-dir.ts',
'packages/squad-cli/src/cli/core/errors.ts',
'packages/squad-cli/src/cli/core/gh-cli.ts',
'packages/squad-cli/src/cli/core/output.ts',
'packages/squad-cli/src/cli/core/history-split.ts',
];
/**
* Check: Protected file changes (informational).
* @param {Array<{ filename: string }>} files
* @returns {{ pass: boolean, detail: string }}
*/
export function checkProtectedFiles(files) {
const touched = (files || []).filter(
(f) => PROTECTED_FILES.includes(f.filename)
);
if (touched.length === 0) {
return { pass: true, detail: 'No protected bootstrap files changed' };
}
return {
pass: true,
detail: `⚠️ ${touched.length} protected bootstrap file(s) changed: ${touched.map((f) => f.filename.split('/').pop()).join(', ')} — verify zero-dependency constraint`,
};
}Integration point: After check 7 (scope clean). Uses the same files data. Informational only — warns but doesn't block.
| Check | Type | Blocks PR? | Status |
|---|---|---|---|
| Issue linkage (Check 10) | Hard gate | Yes | Implemented |
| Required checks present | Hard gate | Yes | Deferred |
| Protected file warning (Check 11) | Informational | No | Implemented |
All three use data that pr-readiness.mjs already fetches — no new API calls needed. Total addition: ~60 lines of check functions + ~10 lines of orchestration wiring.
© bradygaster, 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 .copilot/skills/pr-lifecycle of bradygaster/squad.
Open the folder on GitHubat commit 1fd7e03
PR Lifecycle 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 |
|---|---|---|---|---|---|---|
| PR Lifecycle this skillbradygaster/squad | 3.3k | — | ~4.8k | Automated safety check: Pass | MIT | |
| Finishing a Development Branchobra/superpowers | 296k | 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 | 55k | — | ~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.
bradygaster/squad
Review and validate claims using counter-hypothesis testing.
bradygaster/squad
How to review PRs for architectural quality — module boundaries, dependency direction, export surface, pattern consistency
bradygaster/squad
Preserve content when moving entries between tracked Squad state files
bradygaster/squad
Defensive CI/CD patterns: semver validation, token checks, retry logic, and draft detection
bradygaster/squad
Checklist and patterns for wiring new CLI commands into cli-entry.ts
bradygaster/squad
Enables squad agents on different machines to share work via git-based task queuing
Works with
Categories
Complete issue → PR → merge lifecycle with readiness checks. An agent skill from bradygaster/squad. PR Lifecycle is an agent skill from bradygaster/squad.
PR Lifecycle fits situations like: tasks that involve Git workflow.
Run `npx skills add bradygaster/squad --skill pr-lifecycle -a claude-code`. Or copy the skill folder (.copilot/skills/pr-lifecycle in bradygaster/squad) into .claude/skills/pr-lifecycle in your project. Claude Code loads it when a task matches its description.
Run `npx skills add bradygaster/squad --skill pr-lifecycle -a codex`. Or copy the skill folder (.copilot/skills/pr-lifecycle in bradygaster/squad) into .agents/skills/pr-lifecycle 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 bradygaster/squad --skill pr-lifecycle -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pr-lifecycle, .gemini/skills/pr-lifecycle, .github/skills/pr-lifecycle and .opencode/skills/pr-lifecycle in your project.
Going by SKILL.md and its folder, PR Lifecycle needs the command-line tools its instructions call (git, gh, npm and npx). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use git, gh, npm and npx, which can reach the network depending on how they are called. 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.
PR Lifecycle is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.8k tokens (SKILL.md is roughly 19k 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 PR Lifecycle: Finishing a Development Branch (obra/superpowers, 296k 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, 55k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
bradygaster (a GitHub user) maintains it in bradygaster/squad, which has 3,257 GitHub stars. The repository holds 31 skills in this directory. The repository was last updated on October 8, 2026.
Source: bradygaster/squad on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.