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.
Drive a backpromote (sf hardis:work:backpromote, Beta) from a coding agent, and solve the merges it asks for.
$ npx skills add hardisgroupcom/sfdx-hardis --skill backpromote -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis backpromote --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/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/backpromote .claude/skills/backpromote && 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 "backpromote" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/backpromote into .claude/skills/backpromote/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backpromote", 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/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/backpromoteType 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 hardisgroupcom/sfdx-hardis --skill backpromote -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis backpromote --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/backpromote .agents/skills/backpromote && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "backpromote" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/backpromote into .agents/skills/backpromote/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backpromote", 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 hardisgroupcom/sfdx-hardis --skill backpromote -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis backpromote --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/backpromote .cursor/skills/backpromote && 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 "backpromote" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/backpromote into .cursor/skills/backpromote/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backpromote", 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/hardisgroupcom/sfdx-hardis.git --path .claude/skills/backpromote--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 hardisgroupcom/sfdx-hardis --skill backpromote -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis backpromote --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/backpromote .gemini/skills/backpromote && 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 "backpromote" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/backpromote into .gemini/skills/backpromote/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backpromote", 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 hardisgroupcom/sfdx-hardis backpromoteInstalls 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 hardisgroupcom/sfdx-hardis --skill backpromote -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/backpromote .github/skills/backpromote && 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 "backpromote" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/backpromote into .github/skills/backpromote/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backpromote", 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 hardisgroupcom/sfdx-hardis --skill backpromote -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis backpromote --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/backpromote .opencode/skills/backpromote && 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 "backpromote" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/backpromote into .opencode/skills/backpromote/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backpromote", 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.
backpromoteDrive a backpromote (sf hardis:work:backpromote, Beta) from a coding agent, and solve the merges it asks for.
Backpromote is an agent skill from hardisgroupcom/sfdx-hardis. Drive a backpromote (sf hardis:work:backpromote, Beta) from a coding agent, and solve the merges it asks for. Use when asked to bring what was merged in a parent major branch (integration, uat...) into a developer sandbox or a scratch org, to read or fix the "Backpromotes" Pull Request comments, or when a backpromote stopped with status waitingForMerges or conflictsRemaining.
Its SKILL.md is about 2.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 Pull requests. It works with Salesforce. The repository describes itself as: French-army-knife Toolbox for Salesforce. Orchestrates base commands and assist users with interactive wizards to make much more than native Salesforce CLI + Allows you to define…. The licence is AGPL-3.0.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 9625b22. 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:
sfgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GITHUB_TOKENCI_SFDX_HARDIS_GITLAB_TOKENCI_SFDX_HARDIS_BITBUCKET_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Backpromote loads about 2.2k tokens when it runs. Until then it costs about 98 tokens; SKILL.md has 888 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 hardisgroupcom/sfdx-hardis at commit 9625b22, republished under its AGPL-3.0 licence (© hardisgroupcom). 888 words, ~2,236 tokens.
.claude/skills/backpromote/SKILL.md (or your agent's skills folder).sf hardis:work:backpromote deploys into a developer sandbox what the team merged in a parent
major branch since the last backpromote of that sandbox: the metadata (computed by sfdx-git-delta on
the window of merged Pull Requests) and the deployment actions declared by those Pull Requests. The
command page is docs/hardis/work/backpromote.md, and the user guide is
docs/salesforce-devops-backpromote.md.
Vocabulary: parent branch (developmentBranch or one of availableTargetBranches), target sandbox
(never a major org), sandbox name (from the instance URL, --sandbox-name overrides), backpromote
branch backpromote/<parent branch>/<sandbox name> (holds the manual merges only), start Pull Request,
window, "Backpromotes" comment (the only source of the history).
Everything runs with --json; every decision is a flag; nothing is asked in --agent mode.
sf hardis:work:backpromote --plan --json --target-org <alias> --parent-branch <branch>.
Read status (ok, blocked, nothingToDo), checks (a failed gitProvider check means no
token: set GITHUB_TOKEN, CI_SFDX_HARDIS_GITLAB_TOKEN, SYSTEM_ACCESSTOKEN or
CI_SFDX_HARDIS_BITBUCKET_TOKEN), pullRequests[] (newest first, backpromote non null when the
sandbox already received it, selected for the default start), scan.found, window, items[],
deletions[], actions[] (alreadyRunOn set when it already ran in this sandbox), comparison[]
and runId. When scan.found is false nothing is selected: pick the start with
--from-pull-request <number> and run the plan again with --run-id <runId>.comparison[] entry with status different or pendingInOrg, read the two
(or three) versions at versions.sandbox, versions.parentHead and versions.base (absolute
paths in the cache), then choose: --on-diff "<file>=git" (overwrite with the parent branch
version, the default), =org (keep the org version, the item is listed as kept and offered again
next time) or =merge. --on-diff-default git|org|merge covers the rest. An item with
noOverwrite: true (listed in manifest/package-no-overwrite.xml) is deployed when every
comparison[] entry of it is missingInOrg; when the sandbox already has it, it is left alone
unless --include-no-overwrite Type:Name names it (then it takes decisions like any item). Untick with
--exclude-metadata Type:Name, --skip-destructive, --actions a,b, --skip-actions.sf hardis:work:backpromote --agent --json --run-id <runId> --target-org <alias> --parent-branch <branch> --from-pull-request <n> [decisions]. The checkout is switched to the
backpromote branch (uncommitted changes are stashed, the JSON says so in checkout), the
pre-deployment actions run, the metadata is deployed (NoTestRun), the deletions, the
post-deployment actions, then the "Backpromotes" comments are written and the branch is pushed
when it holds merges. Exit code 0 with status ok, nothingToDo or waitingForMerges; exit
code 1 with the plan in data for refused, conflictsRemaining, deployFailed, pushRejected.status: waitingForMerges means the files marked merge were written with
conflict markers in the checkout (comparison[].file is relative to gitRoot, the prompt is in
promptFile, the exact command in runCommand). Edit each file, leave no
<<<<<<<, |||||||, =======, >>>>>>> line, commit the solved files on the backpromote branch
(the body of the message says what was kept from each side), then run runCommand. It checks
the files, commits any merged file still uncommitted, deploys and pushes the branch. A file left with markers is
not deployed and is listed as "conflict pending": the next plan offers it first.status: deployFailed lists the refused components in
result.deployErrors (file, line, the Salesforce error, the sfdx-hardis hint in tip and the AI
suggestion in aiTip when there is one), and result.deployErrorsPromptFile holds a prompt with
all of it. Fix the files on the backpromote branch and nowhere else (no other branch, no Pull
Request), commit them there, then run the same command again. A component that cannot be fixed
now is left out with --exclude-metadata Type:Name.result.actions.pending lists the manual actions (and the ones whose custom
username could not be authenticated). Once done by hand in the sandbox:
sf hardis:work:backpromote --confirm-action <id> --json --run-id <runId> --target-org <alias> --parent-branch <branch>.git checkout <checkout.originalBranch>, git stash pop when
checkout.stashed is true, then propose git merge origin/<parent branch> so that the next
hardis:work:save does not commit the backpromoted metadata as the story's own work.Every call is idempotent: running the same command twice deploys nothing twice and runs no action
twice (the comment rows are the state). --reset --auto deletes the backpromote branch and abandons
the pending merges; the history in the comments is never touched.
| What | Where |
|---|---|
| Command | src/commands/hardis/work/backpromote.ts |
| Pure rules (branch and sandbox names, history walk, two-way merge, flags, prompt) | src/common/utils/backpromoteRules.ts |
| "Backpromotes" comment (parse, render, upsert, cached reads) | src/common/utils/backpromoteCommentUtils.ts |
| Git (fetch, checkout switch, branch rebuild, merge-file, push with lease, delta cache) | src/common/utils/backpromoteGitUtils.ts |
| Org (target org, retrieve to the cache, comparison, deployments) | src/common/utils/backpromoteOrgUtils.ts |
| Plan JSON version 3, run state, terminal prompts | src/common/utils/backpromotePlanUtils.ts |
| Pull Request listing and action execution shared with promotion branches | src/common/utils/backpromoteUtils.ts |
| VS Code panel | ../vscode-sfdx-hardis/src/commands/showBackpromote.ts, src/utils/backpromote/, src/webviews/lwc-ui/modules/s/backpromote/ |
| End to end runbook | .claude/skills/promotion-branches-e2e/reference/runbook.md, section 6bis |
© hardisgroupcom, AGPL-3.0. 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/backpromote of hardisgroupcom/sfdx-hardis.
Open the folder on GitHubat commit 9625b22
Backpromote 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 |
|---|---|---|---|---|---|---|
| Backpromote this skillhardisgroupcom/sfdx-hardis | 401 | — | ~2.2k | Automated safety check: Pass | AGPL-3.0 | |
| Finishing a Development Branchobra/superpowers | 296k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Check PRonyx-dot-app/onyx | 32k | 2 repos | ~2.3k | Automated safety check: Pass | MIT | |
| Understand Diff AnalysisEgonex-AI/Understand-Anything | 86k | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| PR Design DocOpenHands/OpenHands | 90k | — | ~2.4k | Automated safety check: Pass | MIT |
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.
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
onyx-dot-app/onyx
Checks a GitHub, GitLab, or Perforce (p4) pull request (or merge request, or shelved changelist) for unresolved review comments, failing status checks, and incomplete PR descriptions.
Egonex-AI/Understand-Anything
Reads your git changes or a pull request against a prebuilt knowledge graph of the project to explain what changed, which components are affected and what is risky.
OpenHands/OpenHands
For a non-trivial pull request, write a self-contained HTML design doc under the temporary .pr/ directory and link a visibility-appropriate preview in the PR description, so maintainers grasp the…
woocommerce/woocommerce
Reviews WooCommerce code changes against the project's standards, flagging backend PHP architecture, naming, documentation, data integrity and testing violations.
hardisgroupcom/sfdx-hardis
Walks the sfdx-hardis training course end to end as a learner would, against a real Developer Edition org and fork, fixing broken steps and screenshots that no longer match.
hardisgroupcom/sfdx-hardis
Runs a full end-to-end test of sfdx-hardis promotion branches and backpromote against real Salesforce orgs and a throwaway repository, then writes a report.
hardisgroupcom/sfdx-hardis
Explains how the sfdx-hardis Salesforce CLI plugin is built: its TypeScript and Oclif stack, command layout, agent-mode flag and provider classes for git, notifications and AI.
hardisgroupcom/sfdx-hardis
Style rules for adding CHANGELOG.md entries: short, user-facing bullets grouped by command under the beta section, each linking the command's docs page.
hardisgroupcom/sfdx-hardis
Documentation standards for sfdx-hardis commands (description format with Command Behavior and Technical explanations sections, MkDocs site, build:doc).
hardisgroupcom/sfdx-hardis
Decision framework for fixing jscpd (copy-paste detector) errors.
Works with
Categories
Drive a backpromote (sf hardis:work:backpromote, Beta) from a coding agent, and solve the merges it asks for. Backpromote is an agent skill from hardisgroupcom/sfdx-hardis. Drive a backpromote (sf hardis:work:backpromote, Beta) from a coding agent, and solve the merges it asks for.
Backpromote fits situations like: asked to bring what was merged in a parent major branch (integration; uat...) into a developer sandbox; fix the Backpromotes Pull Request comments; A backpromote stopped with status waitingForMerges.
Run `npx skills add hardisgroupcom/sfdx-hardis --skill backpromote -a claude-code`. Or copy the skill folder (.claude/skills/backpromote in hardisgroupcom/sfdx-hardis) into .claude/skills/backpromote in your project. Claude Code loads it when a task matches its description.
Run `npx skills add hardisgroupcom/sfdx-hardis --skill backpromote -a codex`. Or copy the skill folder (.claude/skills/backpromote in hardisgroupcom/sfdx-hardis) into .agents/skills/backpromote 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 hardisgroupcom/sfdx-hardis --skill backpromote -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/backpromote, .gemini/skills/backpromote, .github/skills/backpromote and .opencode/skills/backpromote in your project.
Going by SKILL.md and its folder, Backpromote needs the command-line tools its instructions call (sf and git) and credentials named GITHUB_TOKEN, CI_SFDX_HARDIS_GITLAB_TOKEN and CI_SFDX_HARDIS_BITBUCKET_TOKEN. Our summary lists: A credential in GITHUB_TOKEN; A credential in CI_SFDX_HARDIS_GITLAB_TOKEN.
SKILL.md contains no URLs. Its commands use git, 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.
Backpromote is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.9k 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 Backpromote: Finishing a Development Branch (obra/superpowers, 296k stars), PR Babysitter (openinterpreter/openinterpreter, 69k stars), Check PR (onyx-dot-app/onyx, 32k stars) and Understand Diff Analysis (Egonex-AI/Understand-Anything, 86k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
hardisgroupcom (a GitHub organization) maintains it in hardisgroupcom/sfdx-hardis, which has 401 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 8, 2026.
Source: hardisgroupcom/sfdx-hardis on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.