React Router Pull Request Creator
remix-run/react-router
Packages finished React Router work into a draft pull request: branch, commit, push, a written PR body and the right GitHub labels.
Runs the full release workflow for the current project. An agent skill from jeremylongshore/tons-of-skills-marketplace.
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill promote -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace promote --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/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/productivity/claude-workflow-skills/skills/promote .claude/skills/promote && 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 "promote" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/plugins/productivity/claude-workflow-skills/skills/promote into .claude/skills/promote/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "promote", 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/jeremylongshore/tons-of-skills-marketplace/tree/main/plugins/productivity/claude-workflow-skills/skills/promoteType 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 jeremylongshore/tons-of-skills-marketplace --skill promote -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace promote --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/productivity/claude-workflow-skills/skills/promote .agents/skills/promote && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "promote" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/plugins/productivity/claude-workflow-skills/skills/promote into .agents/skills/promote/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "promote", 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 jeremylongshore/tons-of-skills-marketplace --skill promote -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace promote --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/productivity/claude-workflow-skills/skills/promote .cursor/skills/promote && 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 "promote" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/plugins/productivity/claude-workflow-skills/skills/promote into .cursor/skills/promote/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "promote", 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/jeremylongshore/tons-of-skills-marketplace.git --path plugins/productivity/claude-workflow-skills/skills/promote--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 jeremylongshore/tons-of-skills-marketplace --skill promote -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace promote --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/productivity/claude-workflow-skills/skills/promote .gemini/skills/promote && 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 "promote" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/plugins/productivity/claude-workflow-skills/skills/promote into .gemini/skills/promote/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "promote", 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 jeremylongshore/tons-of-skills-marketplace promoteInstalls 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 jeremylongshore/tons-of-skills-marketplace --skill promote -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/productivity/claude-workflow-skills/skills/promote .github/skills/promote && 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 "promote" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/plugins/productivity/claude-workflow-skills/skills/promote into .github/skills/promote/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "promote", 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 jeremylongshore/tons-of-skills-marketplace --skill promote -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace promote --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/productivity/claude-workflow-skills/skills/promote .opencode/skills/promote && 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 "promote" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/plugins/productivity/claude-workflow-skills/skills/promote into .opencode/skills/promote/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "promote", 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.
promoteRuns the full release workflow for the current project. An agent skill from jeremylongshore/tons-of-skills-marketplace.
Promote is an agent skill from jeremylongshore/tons-of-skills-marketplace. Runs the full release workflow for the current project. Commits any uncommitted changes, pushes to remote, creates and merges a PR if on a feature branch, determines the next semver version from conventional commits, creates an annotated git tag and GitHub release with generated notes, cleans up merged branches, and returns to a clean main. Use when the user says promote, ship, release, commit and push, tag and release, or get back to main.
Its SKILL.md is about 1.7k 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 Commit messages and Git workflow. It works with Git and GitHub. The repository describes itself as: Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com. The licence is MIT.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit cfae287. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitghnodeFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
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.
Promote loads about 1.7k tokens when it runs. Until then it costs about 113 tokens; SKILL.md has 490 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 noted patterns worth knowing about, such as sudo or a known installer.
Check for untracked `.env` files that could be accidentally staged:?\? .*\.env' && echo "WARNING: untracked .env files detected — review before staging"ho "WARNING: .gitignore does not exclude .env files"If any `.env` files would be staged:read -p "WARNING: .env files detected. Continue? (y/N) " confirmecho "ERROR: untracked .env files detected in non-interactive mode. Aborting."allowed-tools: BashAutomated 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 jeremylongshore/tons-of-skills-marketplace at commit cfae287, republished under its MIT licence (© jeremylongshore). 490 words, ~1,651 tokens.
.claude/skills/promote/SKILL.md (or your agent's skills folder).Runs the full release workflow from current working state to a tagged GitHub release on main.
Current branch: !git branch --show-current 2>/dev/null || echo "unknown"
Git status: !git status --short 2>/dev/null || echo "not a git repo"
Last tag: !git describe --tags --abbrev=0 2>/dev/null || echo "none"
Recent commits since last tag:
!`git log $(git describe --tags --abbrev=0 2>/dev/null || echo "")..HEAD --oneline -10 2>/dev/null || git log --oneline -10`Next version (calculated from commits above):
!`(last=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0"); IFS='.' read -r ma mi pa <<< "${last#v}"; log=$(git log "${last}..HEAD" --format="%s" 2>/dev/null); if echo "$log" | grep -qE "^[a-z]+(\([^)]+\))?!:"; then echo "v$((ma+1)).0.0"; elif echo "$log" | grep -qE "^feat"; then echo "v${ma}.$((mi+1)).0"; else echo "v${ma}.${mi}.$((pa+1))"; fi)`gh auth status 2>&1 || { echo "ERROR: gh is not authenticated. Run: gh auth login"; exit 1; }Check for untracked .env files that could be accidentally staged:
git status --short | grep -E '^\?\? .*\.env' && echo "WARNING: untracked .env files detected — review before staging"
cat .gitignore 2>/dev/null | grep -q '\.env' || echo "WARNING: .gitignore does not exclude .env files"If any .env files would be staged:
if [ -t 0 ]; then
# Interactive — ask for confirmation before continuing
read -p "WARNING: .env files detected. Continue? (y/N) " confirm
[[ "$confirm" =~ ^[Yy]$ ]] || { echo "Aborted."; exit 1; }
else
# Non-interactive — hard stop; too risky to proceed without human review
echo "ERROR: untracked .env files detected in non-interactive mode. Aborting."
exit 1
fiIf the git status above shows uncommitted or untracked changes:
git diff and git diff --cachedgit add -u, then review and add any
intentional new files individually. Avoid git add -A unless the user explicitly confirms.feat:, fix:, docs:, chore:, etc.) and a concise summaryIf there is nothing uncommitted, skip to Step 2.
Push the current branch to remote:
git push -u origin HEADSkip this step if already on main (or the repo's default branch).
If on a feature branch:
Scan commits since the last tag for issue references:
git log $(git describe --tags --abbrev=0 2>/dev/null || echo "")..HEAD --format="%B"Look for Closes #N, Fixes #N, Resolves #N (case-insensitive). Collect all issue numbers
found. If none are found:
if [ -t 0 ]; then
# Interactive — ask the user
read -p "Any GitHub issues this resolves? (e.g. 12 15 — or enter to skip) " issues
else
# Non-interactive — skip silently
issues=""
fiCreate a PR targeting main, including closing keywords in the body so GitHub closes the issues automatically on merge:
gh pr create --title "<type>: <summary>" --body "$(cat <<'EOF'
## Summary
<bullet points from commits>
Closes #N, Closes #N
🤖 Generated with [claude-workflow-skills:promote](https://github.com/ali5ter/claude-workflow-skills) on behalf of [Alister](https://github.com/ali5ter)
EOF
)"Omit the Closes lines if no issues were identified.
Enable auto-merge (squash preferred):
gh pr merge --auto --squashPoll until merged:
gh pr view --json state --jq '.state'Switch to main and pull:
git checkout main && git pullThe next version is pre-calculated in the context block above using these semver rules:
!: (e.g. feat!:, fix!:) → major bumpfeat → minor bumpConfirm the calculated version is correct given the commit list. If no previous tag exists, use
v1.0.0. Override only if the calculated version is clearly wrong (e.g. the injection returned
an error or empty output).
If .claude-plugin/plugin.json exists, update its version field to <next-version> (no v
prefix — plugin manifests use bare semver like 1.2.3):
node -e "
const fs = require('fs');
const f = '.claude-plugin/plugin.json';
const d = JSON.parse(fs.readFileSync(f, 'utf8'));
d.version = '<next-version>';
fs.writeFileSync(f, JSON.stringify(d, null, 2) + '\n');
"Then commit and push:
git add .claude-plugin/plugin.json
git commit -m "chore: sync plugin.json version to v<next-version>"
git pushSkip this step entirely if .claude-plugin/plugin.json does not exist.
git tag -a v<next-version> -m "Release v<next-version>"
git push origin v<next-version>
gh release create v<next-version> \
--generate-notes \
--title "v<next-version>"Skip this step if a PR was created in Step 3 — GitHub will close the issues automatically when
the PR merges via the Closes #N keywords in the PR body.
If the promotion was directly on main (no PR), close any identified issues now:
gh issue close <N> --comment "Resolved in $(gh release view v<next-version> --json url --jq '.url')"If a feature branch was merged in Step 3, delete it locally and remotely:
git branch -d <feature-branch>
git push origin --delete <feature-branch>git status
git log --oneline -5Report the GitHub release URL from gh release view v<next-version> --json url --jq '.url'.
© jeremylongshore, 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 plugins/productivity/claude-workflow-skills/skills/promote of jeremylongshore/tons-of-skills-marketplace.
Open the folder on GitHubat commit cfae287
Promote 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 |
|---|---|---|---|---|---|---|
| Promote this skilljeremylongshore/tons-of-skills-marketplace | 2.8k | — | ~1.7k | Automated safety check: Notes | MIT | |
| React Router Pull Request Creatorremix-run/react-router | 57k | — | ~2.5k | Automated safety check: Pass | MIT | |
| Draft Pull Request Creatorwordpress-mobile/WordPress-Android | 3.2k | — | ~881 | Automated safety check: Notes | GPL-2.0 | |
| Publish Pull Request for taskctltaskctl/taskctl | 434 | — | ~979 | Automated safety check: Pass | GPL-3.0 | |
| Git GitHub Opsc5inco/compose-pokedexer | 143 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Git Smart Pushexception-coder/npe_get_jobs | 176 | — | ~2.4k | Automated safety check: Notes | Custom licence |
remix-run/react-router
Packages finished React Router work into a draft pull request: branch, commit, push, a written PR body and the right GitHub labels.
wordpress-mobile/WordPress-Android
Commits and pushes current changes, writes a pull request title and body from the branch history and template, and opens a draft PR on GitHub after you approve it.
taskctl/taskctl
Publishes the current branch and opens or updates a GitHub pull request for the taskctl repo, after a pre-publish gate and with a description template matched to the change.
c5inco/compose-pokedexer
Handles Pokedexer Git and GitHub workflows: inspect changes, prepare commit messages, manage branches and pushes, and create or update issues and pull requests with safe file-based inputs.
exception-coder/npe_get_jobs
Analyze local code changes, automatically generate meaningful commit messages based on the changes, and push to remote repository (GitHub, GitLab, Gitee, Alibaba Cloud DevOps, etc.).
lobehub/lobehub
Creates a pull request for the current branch against canary, or splits a cross-layer branch into ordered stacked PRs so backend changes merge before their callers.
jeremylongshore/tons-of-skills-marketplace
Execute this skill enables AI assistant to conduct a security-focused code review using the security-agent plugin.
jeremylongshore/tons-of-skills-marketplace
Build this skill automates the adaptation of pre-trained machine learning models using transfer learning techniques.
jeremylongshore/tons-of-skills-marketplace
Execute proactive auto-loading: automatically detects and loads agents.md files.
jeremylongshore/tons-of-skills-marketplace
Aggregate and centralize performance metrics from applications, systems, databases, caches, and services.
jeremylongshore/tons-of-skills-marketplace
Execute this skill enables AI assistant to analyze capacity requirements and plan for future growth.
jeremylongshore/tons-of-skills-marketplace
Process use when you need to work with database indexing. An agent skill from jeremylongshore/tons-of-skills-marketplace.
Categories
Runs the full release workflow for the current project. An agent skill from jeremylongshore/tons-of-skills-marketplace. Promote is an agent skill from jeremylongshore/tons-of-skills-marketplace. Runs the full release workflow for the current project.
Promote fits situations like: the user says promote; commit and push; tag and release; get back to main.
Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill promote -a claude-code`. Or copy the skill folder (plugins/productivity/claude-workflow-skills/skills/promote in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/promote in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill promote -a codex`. Or copy the skill folder (plugins/productivity/claude-workflow-skills/skills/promote in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/promote 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 jeremylongshore/tons-of-skills-marketplace --skill promote -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/promote, .gemini/skills/promote, .github/skills/promote and .opencode/skills/promote in your project.
Going by SKILL.md and its folder, Promote needs the command-line tools its instructions call (git, gh and node). Its frontmatter pre-approves these tools: Bash.
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file; pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Promote is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.7k tokens (SKILL.md is roughly 6.6k 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 Promote: React Router Pull Request Creator (remix-run/react-router, 57k stars), Draft Pull Request Creator (wordpress-mobile/WordPress-Android, 3.2k stars), Publish Pull Request for taskctl (taskctl/taskctl, 434 stars) and Git GitHub Ops (c5inco/compose-pokedexer, 143 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jeremylongshore (a GitHub user) maintains it in jeremylongshore/tons-of-skills-marketplace, which has 2,827 GitHub stars. The repository holds 3,342 skills in this directory. The repository was last updated on October 10, 2026.
Source: jeremylongshore/tons-of-skills-marketplace on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.