Release
Ships completed work in the ai-agent-skills repository. Two phases depending on context: WRAP UP (on a feature branch with committed work — updates CHANGELOG, README, marketplace.json, commits, pushes, creates a PR) and CUT RELEASE (on main after a merge — determines semver bump, updates CHANGELOG version section, tags, pushes, creates a GitHub draft release). Use when the user says "ship this", "I'm done", "create a PR", "cut a release", "tag a release", "wrap this up", or "release it". Always checks GitHub auth first. Load the `conventions` skill for commit and PR formatting rules.From its SKILL.md
npx -y skills add psenger/catholic-ai-skills --skill releaseAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 8 commands, including `gh auth status` and 7 more.
SKILL.md
6.8 KB, ~1.7k tokens by cl100k_base, as published. Nobody here has run it
Release
Ships completed work. The skill detects context and runs the right phase:
- On a feature branch with committed work → WRAP UP phase
- On main after a merge → CUT RELEASE phase
For all message formatting, follow the conventions skill.
Step 0 — Auth & Identity (always)
Check for a GitHub MCP server in available tools. If none:
gh auth status
Stop if neither is available: "I need the GitHub MCP server or gh CLI authenticated. Run gh auth login."
Confirm identity — use mcp__github__get_me if the GitHub MCP server is available, otherwise:
gh api user --jq '"@\(.login) — \(.name)"'
Show the result and ask: "I'll be acting as @username — is that right?" Wait for confirmation.
WRAP UP Phase
Triggered when on any non-main branch (feature/, fix/, chore/, refactor/, test/, etc.) with a clean working tree.
Step 1 — Verify State
git branch --show-current # must not be main
git status --porcelain # must be empty — all work committed
If the tree is dirty, stop: "You have uncommitted changes. Commit or stash them first."
Step 2 — Detect What Changed
git diff main...HEAD --name-only
Determine:
- Was a new skill added? Look for a new directory under
skills/not present on main. - Was an existing skill modified? Look for changes inside
skills/<name>/. - Is this a bug fix, refactor, or docs change? Look at changed files outside
skills/.
Derive the issue number from the branch name (e.g. feature/14-add-handoff-skill → #14).
If none found, ask the user for the issue number.
Step 3 — Update Admin Files
CHANGELOG.md — add a bullet to ## [Unreleased] under the correct subsection:
- New skill →
### Added - Updated skill →
### Changed - Bug fix →
### Fixed
Bullet format (see conventions skill):
- **skill-name** — <what changed and why>. ([#N](issue-url))
README.md — only if a new skill was added:
- Add a row to the skills table
- Add a
### skill-nameprose section following the existing pattern
.claude-plugin/marketplace.json — update whenever a skill was added or modified:
- New skill → add an entry with
"version": "1.0.0" - Existing skill enhanced (new feature, new behaviour) → bump
minor(e.g.1.0.0→1.1.0) - Existing skill bug fix or docs only → bump
patch(e.g.1.1.0→1.1.1)
New skill entry format:
{
"name": "<skill-name>",
"source": "./skills/<skill-name>",
"description": "<description from SKILL.md frontmatter>",
"version": "1.0.0"
}
Step 4 — Commit Admin Updates
git add CHANGELOG.md README.md .claude-plugin/marketplace.json
git commit -m "chore(<skill-name>): update changelog, readme, and marketplace"
Only stage files that actually changed.
Step 5 — Push and Create PR
git push -u origin <branch-name>
Create a PR using the repo's PR template (.github/pull_request_template.md):
gh pr create \
--draft \
--title "<type>(<scope>): <subject>" \
--body "$(cat <<'EOF'
## What
<brief description of the change>
## Why
<why this change is needed>
## Type of Change
- [x] <tick the correct box from the template>
## Skill Checklist
- [x] `SKILL.md` has valid YAML frontmatter (`name`, `description`, `allowed-tools`)
- [x] `name` is lowercase-hyphenated and matches the directory name
- [x] `description` is written in third person with trigger words
- [x] Reference files are in `references/` (one level deep)
- [x] `SKILL.md` is under 500 lines
- [x] No secrets, credentials, or PII committed
- [x] `.claude-plugin/marketplace.json` updated (if new skill)
- [x] `README.md` skills table updated (if new skill)
## Testing
- [ ] Tested locally by invoking the skill with a realistic prompt
- [ ] Verified the skill activates correctly (not confused with another skill)
Closes #<issue-number>
EOF
)"
Print the PR URL. Tell the user: "Draft PR created: <URL>. Review it, mark it ready for review, and merge to main. Then run /release again on main to cut the release."
CUT RELEASE Phase
Triggered when on main with a clean working tree.
Step 1 — Pre-flight
git branch --show-current # must be: main
git status --porcelain # must be empty
git fetch origin
git rev-list HEAD..origin/main --count # must be: 0
Abort clearly if any check fails.
Step 2 — Determine Version
git describe --tags --abbrev=0 # last tag, e.g. v1.0.0
git log <last-tag>..HEAD --oneline # commits since last tag
Apply semver rules (from conventions skill):
BREAKING CHANGEfooter ortype!:→ majorfeat→ minorfix,chore,docs,refactor,test→ patch
Present the proposed version and the commits that drove the decision. Wait for explicit confirmation before proceeding.
Step 3 — Update CHANGELOG.md
Three edits in order:
- Insert
## [Unreleased]\n\nabove the current## [Unreleased]heading - Rename the existing
## [Unreleased]to## [X.Y.Z] - YYYY-MM-DD(today's date) - Update comparison links at the bottom:
- Add:
[X.Y.Z]: https://github.com/psenger/ai-agent-skills/compare/<last-tag>...vX.Y.Z - Update:
[Unreleased]: https://github.com/psenger/ai-agent-skills/compare/vX.Y.Z...HEAD
- Add:
Step 4 — Commit and Tag
git add CHANGELOG.md
git commit -m "chore(release): cut vX.Y.Z release"
git tag -a vX.Y.Z -m "Release vX.Y.Z"
Step 5 — Push
git push origin main
git push origin vX.Y.Z
Step 6 — Create Draft Release
Extract the release body from the ## [X.Y.Z] CHANGELOG section (down to the next ## [):
gh release create vX.Y.Z \
--draft \
--title "vX.Y.Z" \
--notes "<extracted changelog section>"
Step 7 — Done
Print:
Draft release created: <URL>
Review on GitHub and click Publish when ready.
Publishing triggers any CI release workflows.
Do not publish the release — the user does this manually.
What ships with it: 4 files
21.1 KB alongside SKILL.md
.workspace/
- README.md4.0 KB
Gives 3 of the 12 instructions most ship operate skills give in ~1.7k tokens
Counted across 1,077 of the 1,713 authors here whose files we hold, read 2026-09-06
- Create GitHub releasehere, and in 44 of 1077, across 43 files
- Run the test suitein 30 of 1077, across 25 files
- Create and push git tagin 27 of 1077, across 26 files
- Push commits and tagsin 27 of 1077
- Create annotated tagin 25 of 1077, across 22 files
- Ensure working tree is cleanhere, and in 24 of 1077
- Check for product marketing context firstin 23 of 1077, across 6 files
- Commit version bump changesin 22 of 1077, across 21 files
- Update CHANGELOG.mdhere, and in 21 of 1077, across 20 files
- Structure launch marketing across three channel typesin 20 of 1077, across 5 files
- Commit and tag the releasein 20 of 1077, across 18 files
- Update the CHANGELOG for new releasesin 19 of 1077
Said here and by no other author read
- Check for a GitHub MCP server in available tools
- Confirm identity before proceeding
- Commit admin updates
- Verify main branch state before cutting release
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.