Runs the full release workflow for the current project. An agent skill from jeremylongshore/tons-of-skills-marketplace.

MITAuto-check: notesDevelopment

Install Promote

skills CLI
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill promote -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jeremylongshore/tons-of-skills-marketplace promote --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
promote
GitHub stars
2.8k
Token cost
~1.7k tokens
SKILL.md length
490 words
Files
1
Skills in repo
3,342
Repo updated
First seen
Licence
MIT

At a glance

Runs the full release workflow for the current project. An agent skill from jeremylongshore/tons-of-skills-marketplace.

  • Works in 10 steps: Pre-flight checks → Commit any uncommitted changes → Push → …
  • The user says promote
  • SKILL.md covers Step 0: Pre-flight checks, Step 1: Commit any uncommitted…, Step 2: Push and Step 3: Merge to main (feature…, plus 6 more sections
  • Calls git, gh and node; reaches github.com

What it does

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.

When your agent uses it

  • The user says promote
  • Commit and push
  • Tag and release
  • Get back to main

Example prompts

  • “/promote”

Requirements

  • Pre-approved tools (allowed-tools): Bash

Workflow steps

10 steps, taken from the step headings in SKILL.md.

  1. Pre-flight checks
  2. Commit any uncommitted changes
  3. Push
  4. Merge to main (feature branch only)
  5. Confirm next version
  6. Sync plugin manifest (if present)
  7. Tag and release
  8. Close resolved issues (main branch only)
  9. Clean up merged feature branch
  10. Confirm clean state

What it can do on your machine

Read from SKILL.md and the folder at commit cfae287. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • gh
    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~113
When it runs · the whole SKILL.md, loaded when a task matches
~1.7k

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.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:36
    Check for untracked `.env` files that could be accidentally staged:
  • NoteMentions a .env fileSKILL.md:39
    ?\? .*\.env' && echo "WARNING: untracked .env files detected — review before staging"
  • NoteMentions a .env fileSKILL.md:40
    ho "WARNING: .gitignore does not exclude .env files"
  • NoteMentions a .env fileSKILL.md:43
    If any `.env` files would be staged:
  • NoteMentions a .env fileSKILL.md:48
    read -p "WARNING: .env files detected. Continue? (y/N) " confirm
  • NoteMentions a .env fileSKILL.md:52
    echo "ERROR: untracked .env files detected in non-interactive mode. Aborting."
  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash

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.

SKILL.md

The full file from jeremylongshore/tons-of-skills-marketplace at commit cfae287, republished under its MIT licence (© jeremylongshore). 490 words, ~1,651 tokens.

Download SKILL.mdSave it as .claude/skills/promote/SKILL.md (or your agent's skills folder).
name
promote
description
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.
allowed-tools
Bash
disable-model-invocation
true

Promote Changes

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:

text
!`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):

text
!`(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)`

Step 0: Pre-flight checks

bash
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:

bash
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:

bash
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
fi

Step 1: Commit any uncommitted changes

If the git status above shows uncommitted or untracked changes:

  1. Review the diff: git diff and git diff --cached
  2. Stage changes selectively — prefer tracked files: git add -u, then review and add any intentional new files individually. Avoid git add -A unless the user explicitly confirms.
  3. Draft a conventional commit message from the changes — lead with a type prefix (feat:, fix:, docs:, chore:, etc.) and a concise summary
  4. Commit using a heredoc so multi-line messages format correctly

If there is nothing uncommitted, skip to Step 2.

Step 2: Push

Push the current branch to remote:

bash
git push -u origin HEAD

Step 3: Merge to main (feature branch only)

Skip this step if already on main (or the repo's default branch).

If on a feature branch:

  1. Scan commits since the last tag for issue references:

    bash
    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:

    bash
    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=""
    fi
  2. Create a PR targeting main, including closing keywords in the body so GitHub closes the issues automatically on merge:

    bash
    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.

  3. Enable auto-merge (squash preferred):

    bash
    gh pr merge --auto --squash
  4. Poll until merged:

    bash
    gh pr view --json state --jq '.state'
  5. Switch to main and pull:

    bash
    git checkout main && git pull
Show full SKILL.md (210 more words)Show less

Step 4: Confirm next version

The next version is pre-calculated in the context block above using these semver rules:

  • Commit subject with !: (e.g. feat!:, fix!:) → major bump
  • Commit subject beginning with feat → minor bump
  • All other commits → patch bump

Confirm 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).

Step 5: Sync plugin manifest (if present)

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):

bash
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:

bash
git add .claude-plugin/plugin.json
git commit -m "chore: sync plugin.json version to v<next-version>"
git push

Skip this step entirely if .claude-plugin/plugin.json does not exist.

Step 6: Tag and release

bash
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>"

Step 7: Close resolved issues (main branch only)

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:

bash
gh issue close <N> --comment "Resolved in $(gh release view v<next-version> --json url --jq '.url')"

Step 8: Clean up merged feature branch

If a feature branch was merged in Step 3, delete it locally and remotely:

bash
git branch -d <feature-branch>
git push origin --delete <feature-branch>

Step 9: Confirm clean state

bash
git status
git log --oneline -5

Report 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

Files

Just SKILL.md in plugins/productivity/claude-workflow-skills/skills/promote of jeremylongshore/tons-of-skills-marketplace.

Open the folder on GitHubat commit cfae287

Compare with similar skills

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.

Promote compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Promote this skilljeremylongshore/tons-of-skills-marketplace2.8k—~1.7kAutomated safety check: NotesMIT
React Router Pull Request Creatorremix-run/react-router57k—~2.5kAutomated safety check: PassMIT
Draft Pull Request Creatorwordpress-mobile/WordPress-Android3.2k—~881Automated safety check: NotesGPL-2.0
Publish Pull Request for taskctltaskctl/taskctl434—~979Automated safety check: PassGPL-3.0
Git GitHub Opsc5inco/compose-pokedexer143—~1.3kAutomated safety check: PassMIT
Git Smart Pushexception-coder/npe_get_jobs176—~2.4kAutomated safety check: NotesCustom licence

Similar skills

  • 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.

    57k GitHub stars~2.5k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Draft Pull Request Creator

    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.

    3.2k GitHub stars~881 tokensUpdated yesterday
    DevelopmentAuto-check: notes
  • 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.

    434 GitHub stars~979 tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • Git GitHub Ops

    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.

    143 GitHub stars~1.3k tokensUpdated 8 days ago
    DevelopmentAuto-check passed
  • Git Smart Push

    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.).

    176 GitHub stars~2.4k tokensUpdated 17 days ago
    DevelopmentAuto-check: notes
  • Pull Request Creation

    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.

    83k GitHub stars~3.2k tokensUpdated today
    DevelopmentAuto-check passed

More from jeremylongshore/tons-of-skills-marketplace

All 3,342 skills in this repo
  • Performing Security Code Review

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to conduct a security-focused code review using the security-agent plugin.

    2.8k GitHub starsUsed in 2 repos~1.3k tokens
    Auto-check: notes
  • Adapting Transfer Learning Models

    jeremylongshore/tons-of-skills-marketplace

    Build this skill automates the adaptation of pre-trained machine learning models using transfer learning techniques.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Agent Context Loader

    jeremylongshore/tons-of-skills-marketplace

    Execute proactive auto-loading: automatically detects and loads agents.md files.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Aggregating Performance Metrics

    jeremylongshore/tons-of-skills-marketplace

    Aggregate and centralize performance metrics from applications, systems, databases, caches, and services.

    2.8k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Analyzing Capacity Planning

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to analyze capacity requirements and plan for future growth.

    2.8k GitHub stars~947 tokensUpdated today
    Auto-check passed
  • Analyzing Database Indexes

    jeremylongshore/tons-of-skills-marketplace

    Process use when you need to work with database indexing. An agent skill from jeremylongshore/tons-of-skills-marketplace.

    2.8k GitHub stars~2k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Promote

What does Promote do?

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.

When should I use Promote?

Promote fits situations like: the user says promote; commit and push; tag and release; get back to main.

How do I install Promote in Claude Code?

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.

How do I install Promote in Codex?

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.

Can I use Promote in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Promote need to run?

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.

Does Promote access the network?

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.

Is Promote safe to install?

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.

What licence does Promote use?

Promote is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Promote use?

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.

What are the alternatives to Promote?

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.

Who maintains Promote?

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.