Agent skill

Prepare Release

by pandulapeter in pandulapeter/campfire

Prepare a Campfire release by writing a paste-ready GitHub release-notes draft (with the stores' "what's new" blurb and Play's update priority embedded in it), updating the localized in-app update…

MPL-2.0Auto-check passedDevelopment

Install Prepare Release

skills CLI
$ npx skills add pandulapeter/campfire --skill prepare-release -a claude-code

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

GitHub CLI
$ gh skill install pandulapeter/campfire prepare-release --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/pandulapeter/campfire.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/prepare-release .claude/skills/prepare-release && 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
prepare-release
GitHub stars
101
Token cost
~4.9k tokens
SKILL.md length
2,758 words
Files
1
Skills in repo
5
Repo updated
First seen
Licence
MPL-2.0

At a glance

Prepare a Campfire release by writing a paste-ready GitHub release-notes draft (with the stores' "what's new" blurb and Play's update priority embedded in it), updating the localized in-app update…

  • Works in 10 steps: Determine the version. The release… → Find the previous release boundary — the… → List the commits in the range and group… → …
  • Tasks that involve Changelog and release notes
  • SKILL.md covers Process, Writing the changelog, Style — the GitHub release body and Style — the store "what's new"
  • Calls git and gh; reaches campfire-songbook.com

What it does

Prepare Release is an agent skill from pandulapeter/campfire. Prepare a Campfire release by writing a paste-ready GitHub release-notes draft (with the stores' "what's new" blurb and Play's update priority embedded in it), updating the localized in-app update message, and regenerating Android baseline profiles. Invoke this skill WHENEVER the task involves Campfire release preparation or release notes — cutting a release, bumping campfire.versionName, or any request to draft, write, summarize or update release notes / a changelog / "what's new" / "what changed since the last…

Its SKILL.md is about 4.9k 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 Changelog and release notes. It works with GitHub and Android. The repository describes itself as: A cross-platform songbook and metronome with a built-in chordPro editor, setlists, transposition, PDF export, and Dropbox sync. The licence is MPL-2.0.

When your agent uses it

  • Tasks that involve Changelog and release notes

Example prompts

  • “blurb and Play”
  • “what changed since the last version”
  • “/prepare-release”

Workflow steps

10 steps, taken from the first numbered list in SKILL.md.

  1. Determine the version. The release version is campfire.versionName in gradle.properties
  2. Find the previous release boundary — the last release tag, never a version bump commit (a bump can
  3. List the commits in the range and group them by feature. Many commits usually build one feature (a PDF
  4. Read the actual diffs — never summarize from commit subjects. Subjects are lossy and often name
  5. Judge every change against the last release tag, not against the previous commit. A user only knows what
  6. Note which platforms each surviving change affects. Campfire ships four builds from one codebase,
  7. Always update the in-app message. Follow .claude/skills/code-style/SKILL.md before editing resources.
  8. Always regenerate Android baseline profiles, and only once every other source change is in place — the
  9. Write the draft to .release-notes/.md (create the directory; /.release-notes/ is
  10. Do not create the tag, the release, or commit anything. Leave the draft, resources and generated profiles

What it can do on your machine

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

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • gh

    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:

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

Prepare Release loads about 4.9k tokens when it runs. Until then it costs about 176 tokens; SKILL.md has 2,758 words of instructions outside code blocks.

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

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 passed

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.

SKILL.md

The full file from pandulapeter/campfire at commit 94d4b7f, republished under its MPL-2.0 licence (© pandulapeter). 2,758 words, ~4,936 tokens.

Download SKILL.mdSave it as .claude/skills/prepare-release/SKILL.md (or your agent's skills folder).
name
prepare-release
description
Prepare a Campfire release by writing a paste-ready GitHub release-notes draft (with the stores' "what's new" blurb and Play's update priority embedded in it), updating the localized in-app update message, and regenerating Android baseline profiles. Invoke this skill WHENEVER the task involves Campfire release preparation or release notes — cutting a release, bumping `campfire.versionName`, or any request to draft, write, summarize or update release notes / a changelog / "what's new" / "what changed since the last version". This is the ONLY correct way to produce these notes; never summarize the changes by hand instead. Not triggered by ordinary code edits — only by release work.

Campfire release preparation

Produce one throwaway markdown file whose whole contents the user pastes into the description of a new GitHub release: the notes people read, followed by the hidden block publish-all.yml reads. Publishing that release is the entire release process, so the file has to be complete as it is — nothing to fill in, nothing to cut before pasting. Match the style of the existing notes at https://github.com/pandulapeter/campfire/releases.

Also update the tracked in-app message resources and regenerate the tracked Android profiles before the release is tagged. These are part of preparing every release, including a small release with empty notes.

Campfire is an app, not a library. The notes are for the people who use it — musicians — not for developers reading the source. Nothing about modules, classes, Gradle, Koin or the build belongs in them. If a change has no effect a user could notice, it is not in the notes.

Process

  1. Determine the version. The release version is campfire.versionName in gradle.properties (campfire.buildNumber, which every platform shares, moves with it). The GitHub tag is that number without the v prefix (4.0.1), even though the bump commit spells it with one.

  2. Find the previous release boundary — the last release tag, never a version bump commit (a bump can land for a version that was never published, and a release is what the tag marks):

    bash
    grep -n 'campfire.versionName' gradle.properties
    git fetch --tags origin
    gh release list --limit 3
    git describe --tags --abbrev=0 --match '[0-9]*.[0-9]*.[0-9]*' --exclude "$(sed -n 's/^campfire\.versionName=//p' gradle.properties)"
    git tag --list '[0-9]*.[0-9]*.[0-9]*' --sort=-v:refname | head -3

    The git describe line prints <last tag>: release tags are bare version numbers, so older v-prefixed tags (v1.0.0) are never a boundary, and the version being prepared is excluded so that a run after that version was already tagged (on HEAD or on a commit before it) still finds the release before it. The range is <last tag>..HEAD, for the GitHub notes, the stores' blurb and the in-app message alike: every change since the last published release is in scope, whatever else was prepared or reverted in between. Fetch the tags first: a release is published on GitHub, which creates its tag there and nowhere else, so a clone that has not fetched since misses the newest one and would put a release that already shipped into these notes. The <last tag> must be the newest non-pre-release that gh release list shows (other than the version being prepared); if the two disagree, stop and find out why before writing anything.

  3. List the commits in the range and group them by feature. Many commits usually build one feature (a PDF export is dozens), so cluster them by the user-visible capability before judging importance:

    bash
    git log <last tag>..HEAD --format='%H %s'
    git diff <last tag>..HEAD --stat -- presentation domain data chordpro app | tail -40

    Do not stop at the strings diff: a feature that rebuilds an existing screen (a new reading layout, new ways to page through a song) adds few strings and is easy to miss. Check which screens and CLAUDE.md sections changed most, and read those diffs.

  4. Read the actual diffs — never summarize from commit subjects. Subjects are lossy and often name the mechanism rather than the effect. For each commit:

    bash
    git show <hash>                                   # the change itself
    git show --name-only --format='' <hash>           # which areas it touched

    Pay particular attention to two files, because they say what a user will see:

    bash
    git diff <last tag>..HEAD -- presentation/src/commonMain/composeResources/values/strings.xml
    git diff <last tag>..HEAD --stat -- presentation domain data chordpro app

    New or changed strings are almost always a new feature, a new setting or a new message worth a bullet.

  5. Judge every change against the last release tag, not against the previous commit. A user only knows what was in the last published release. A fix for a bug introduced after that tag, for a feature or dialog that did not exist in it, or for a rough edge of something still unreleased, is part of that new work and never gets a bullet of its own: the feature's bullet already describes it as it now is. Test each candidate fix by asking whether somebody running the last release could have hit the problem. Never pad the list with recent small commits; if no fix qualifies, there is no fixes bullet. The same goes for polish of new features (layout tweaks, accessibility labels, performance of code that is new): it belongs inside the feature's description or nowhere.

    Then sort what you found into user-facing and not. Keep: new features, new settings, changed behavior somebody relied on, fixed bugs a user could hit, visible design changes, new or improved platform support, new languages, performance a user can feel (loading, scrolling, sync speed). Drop: refactors, dependency bumps, Lint and warning cleanups, test changes, CI and build configuration, documentation and CLAUDE.md edits — unless the build change is itself the user-visible thing (a smaller download, a fixed release build, a new distributable).

  6. Note which platforms each surviving change affects. Campfire ships four builds from one codebase, and a bullet that is only true on one of them has to say so ("on iOS", "on the web"). A change in commonMain is everywhere and needs no qualifier; a change under app/<platform> or in a <platform>Main source set usually needs one.

  7. Always update the in-app message. Follow .claude/skills/code-style/SKILL.md before editing resources. Set whats_new_message in both:

    • presentation/src/commonMain/composeResources/values/strings.xml (English);
    • presentation/src/commonMain/composeResources/values-hu/strings.xml (Hungarian).

    Write the bullets by Writing the changelog below: at most six, each a bold headline and a one-sentence description, sorted by importance. Before writing, list the feature clusters from step 3, rank them, and check that the six (or fewer) that made it are the ones a user would miss most.

    Store each bullet on one line as • **Headline** Description (the literal • , the headline between ** pairs, then a space and the description), and separate bullets with \n in the XML string (for example, • **Print in up to four columns** Fit more of a song on each page.\n• **...** ...). The dialog draws the headline bold on its own line with the description under it, as spaced rows in a scrollable area with fades at the top and bottom; its title and Get started button stay visible. No other Markdown, links, emoji, introductory paragraph or version number in the body. Translate the same bullets into natural Hungarian and escape XML correctly. Keep whats_new_title as the localized title with its %1$s version placeholder. Replace the previous message rather than appending history. Empty notes are valid: when the user wants no notes for a very small release, or there is no user-facing change to announce, explicitly set <string name="whats_new_message"></string> in both files. Never leave the previous release's text behind. Blank or whitespace-only messages suppress the dialog; the app still records the version as handled. The first installed version is always skipped, whatever its message contains.

  8. Always regenerate Android baseline profiles, and only once every other source change is in place — the in-app message and any code or resource edit made while preparing the release (step 7 included), since the profile is recorded from the built app and a later change would leave it stale. If anything under presentation, app or the shared modules changes after a recording, record it again. Follow app/baselineprofile/CLAUDE.md's recording procedure: use an English emulator (boot Resizable_Experimental if needed), wait for it to finish booting, and select it explicitly with ANDROID_SERIAL when several devices are connected. Uninstall com.pandulapeter.campfire only from that recording emulator if present, to start with a fresh library and avoid signing conflicts; never uninstall the .debug app or touch a user's physical device. Run:

    bash
    ./gradlew :app:android:generateBaselineProfile

    Verify that both baseline-prof.txt and startup-prof.txt in app/android/src/main/generated/baselineProfiles are nonempty and include app rules; the baseline profile must also contain androidx/navigation3 and org/koin rules. Leave both generated files in the working tree for review with the localized messages. Run this even for empty notes and releases without startup changes; never move generation into publishing CI. If recording is blocked, finish the resources and draft, report the exact blocker and command still needed, and do not claim the release preparation is complete.

  9. Write the draft to .release-notes/<version>.md (create the directory; /.release-notes/ is gitignored, so these scratch files stay untracked). The file's contents are the release body and nothing else — no preamble, no headings above the bullets, no "generated by", no meta commentary — ending in the hidden store block described below. For empty notes omit the visible bullets and leave the whats-new en-US block empty; still include every store-control comment. Never write a second draft file. The tracked resources and generated profiles above are required changes, not extra drafts. Then tell the user, briefly:

    • whether the in-app message was updated or cleared, and whether both Android profiles were regenerated;
    • the path, and that the file is a throwaway to delete after pasting;
    • to paste all of it into the description of a new release tagged <version> on the commit that carries that campfire.versionName (publish-all.yml refuses a tag that disagrees with it), with "Set as a pre-release" left off, since a pre-release ships nothing;
    • that publishing the release is what ships it: publish-all.yml sends the builds to Play and the website, submits the iOS and macOS builds for App Review and the Windows build for Microsoft Store certification (each published as soon as it passes), and attaches the Linux packages to the release itself — so the notes never list or link downloads.
  10. Do not create the tag, the release, or commit anything. Leave the draft, resources and generated profiles ready for review. Their commit must be included in the version's tag before publishing.

Show full SKILL.md (1,241 more words)Show less

Writing the changelog

The in-app message, the GitHub notes and the stores' block are one changelog in three formats: the same bullets, in the same order, with the same wording (the stores' block may drop bullets to fit, never reword them longer). These rules apply to all three.

Six bullets at most, however big the release. A patch has one to three. When there are more than six candidates, merge the related ones (one bullet per area, not per commit) and drop the least important rather than squeezing them in; a fix that is not worth its own bullet goes into the bullet of the feature it touches, or nowhere. Never pad a small release up to six.

Each bullet is a headline and one sentence.

  • The headline names the change in at most six words, the way the app names it (a Settings row, a menu entry, a screen): Export a setlist as a zip, not Better sharing.
  • The description is one sentence of at most 25 words (about 160 characters): what is different now, then what that lets the user do or spares them — the concrete benefit, not an adjective. Add where to find it only when it is not obvious from the headline, and only if it fits the limit. Count the words of every description before writing it out; one over 25 is rewritten, not kept.

Say what changed and why it is better — no more, no less.

  • Describe the change as a fact a user can check in the app: Songs now open where you left off. A claim about quality (faster, smoother, more reliable) is allowed only when the diff gives it a concrete meaning, and then states it: Large libraries open without the long pause on the launch screen.
  • No marketing words: never powerful, seamless, effortless, amazing, brand-new, exciting, revamped, supercharged, game-changing, beautiful, stunning, lightning-fast, enhanced experience, take … to the next level, we're thrilled, you'll love. No exclamation marks, no emoji.
  • No vague bullets either: never various improvements, bug fixes and performance improvements, minor tweaks, polish. A fix is described by what used to go wrong and no longer does: Imported Word documents no longer lose their last page. If that cannot be said in one sentence, the fix does not get a bullet.
  • Don't undersell: a change that alters how people use the app every day is said plainly at the top, with its real benefit, not buried as small improvements to the editor. A new capability is called new.
  • Address the user as you where it reads naturally; no we, no developer vocabulary, no version numbers.
  • Platform-only bullets name the platform (On Android, …, … on the web.).

Sort by importance from the user's perspective, not by commit count or chronology: what changes how people read and play songs every day first, then getting songs in and out, then new capabilities, then conveniences, then fixes.

Examples of the tone:

Too muchToo littleRight
A stunning new reading experience: Enjoy your songs like never before with our completely revamped song view!Song view changes: Various improvements.Columns on wide screens: Long songs are set in several columns, so a tablet shows a whole song without scrolling.
Lightning-fast sync: Sync is now blazing fast and super reliable.Sync fixes: Fixed some issues.Faster first sync: Connecting a large library uploads several files at once instead of one by one.

Style — the GitHub release body

Mirror the existing releases:

  • A flat list of - bullets. No sections, no grouping by type, no "Bug fixes" / "Features" headings.
  • The bullets of Writing the changelog, at most six, in the same order and words as the in-app message, each - **Headline**: description. — the headline with no trailing period, the description one sentence.
  • Plain language, the user's vocabulary. "Sync your library through your own Dropbox folder", not "Implement SyncEngine batching". Name features the way the app names them in Settings.
  • Link where a link helps — the web build ([here](https://campfire-songbook.com/app/)), the ChordPro site, a contributor's profile — in the markdown style the existing notes use.
  • Thank outside contributors inline. Find them with git log <last tag>..HEAD --format='%an' | sort -u and credit anyone who is not the maintainer (Pandula Péter).
  • Say so plainly when something was removed or now works differently, so nobody is surprised — e.g. the editor's auto save being taken out.

Style — the store "what's new"

publish-all.yml reads the stores' "what's new" text out of the release body itself, from HTML comments that the rendered release page does not show. They go at the very end of the draft, after a blank line, and all of them are always written:

<!-- whats-new en-US
- bullet one
- bullet two
-->
<!-- play-store update-priority: 3 -->
<!-- play-store submit: true -->
<!-- app-store submit: true -->
<!-- mac-app-store submit: true -->
<!-- microsoft-store submit: true -->
  • whats-new en-US is the changelog every store gets, not Play's alone — the App Store and the Mac App Store read the same block as the "What's New" of the version submitted for review, and the Microsoft Store as the "What's new in this version" of its submission — so nothing in it may be about one store or assume one platform unless the bullet itself is about that platform. The release's bullets, trimmed to the ones a store visitor would care about, in the same voice as the GitHub notes, one per line as - Headline: description. (the same six-at-most bullets, without the bold).
  • 500 characters at most, newlines included — Play's limit, the tightest of the stores. Check it with a real interpreter (e.g. Python's len() on the text between the comment's first line and its -->), not by eyeballing it, and report the count back. Shorten wording before dropping a bullet.
  • An empty block is valid for a small release with no notes. It has zero characters and no placeholder bullet.
  • No markdown: no links, no bold, no backticks. Plain - bullets and plain text only. Nothing in the block may contain -->.
  • play-store update-priority is Play's in-app update priority. Always write it, with 0 unless the user asked for something else, so the user can see it and change it before publishing: 0–1 leaves the update to Play's own schedule, 2–3 offers it inside the installed app, 4–5 blocks the app until it is installed (see the Updates section of CLAUDE.md). Never pick a number above 0 on your own; mention the line when reporting back, so a release that fixes something serious can be raised before it is published.
  • <store> submit says, per store, whether the release is sent for review / certification (true) or only uploaded and left as a draft there (false) — for new screenshots, say, which the pipeline cannot add, to be put in by hand before sending it from the store's console (the Microsoft Store's draft keeps the last release's package, which is replaced there with the Windows run's .msix artifact). Always write all four, true unless the user asked otherwise, so they can see them and flip one before publishing; anything but true or false stops the release. Mention them when reporting back.
  • Nothing misspelt is taken as absent. .github/scripts/release_description.py stops the release on a store name it does not know (play_store, playstore), a submit other than true or false and a priority outside 0–5, or a comment that names a store, submit, priority or whats-new in any other shape, and on notes over App Store Connect's 4 000 or Partner Center's 1 500 characters, so write the four store names exactly as above.

Where publish-android.yml is dispatched by hand instead, its release_notes input is a single-line field that takes the same text with a literal \n for every line break.

© pandulapeter, MPL-2.0. 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 .claude/skills/prepare-release of pandulapeter/campfire.

Open the folder on GitHubat commit 94d4b7f

Compare with similar skills

Prepare Release 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.

Prepare Release compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Prepare Release this skillpandulapeter/campfire101—~4.9kAutomated safety check: PassMPL-2.0
Release Changelogsk2andy/candy-browser508—~593Automated safety check: PassMPL-2.0
Release Notessesori-ai/sesori_apps_monorepo126—~3.6kAutomated safety check: PassCustom licence
Release Managerpoingstudios/godot-admob-plugin632—~357Automated safety check: PassMIT
Cutting A ReleaseTriliumNext/Trilium38k—~3.2kAutomated safety check: PassAGPL-3.0
Mole CLI Release Flowtw93/Mole70k—~2.6kAutomated safety check: PassGPL-3.0

Similar skills

  • Release Changelog

    sk2andy/candy-browser

    Create or update Candy Browser's English, image-rich, versioned release notes for the in-app What's New presentation and the matching GitHub release.

    508 GitHub stars~593 tokensUpdated today
    DevelopmentAuto-check passed
  • Release Notes

    sesori-ai/sesori_apps_monorepo

    Generate a polished, user-facing release-notes markdown file for a requested release (e.g.

    126 GitHub stars~3.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Release Manager

    poingstudios/godot-admob-plugin

    Manage and execute AdMob plugin releases. An agent skill from poingstudios/godot-admob-plugin.

    632 GitHub stars~357 tokensUpdated 8 days ago
    Game DevelopmentAuto-check passed
  • Cutting A Release

    TriliumNext/Trilium

    A skill your agent uses when cutting, preparing, or debugging a Trilium release — bumping the monorepo version, tagging, or diagnosing a failed "Release" workflow run.

    38k GitHub stars~3.2k tokensUpdated today
    DevelopmentAuto-check passed
  • Runbook for assessing and executing a Mole CLI release: distribution channels, pre-flight checks, capital-V tags, build artifacts and the handoff to curated release notes.

    70k GitHub stars~2.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Android UI Visual Review

    permissionlesstech/bitchat-android

    Analyze an Android pull request, branch, commit, or patch for user-visible changes and produce reproducible before/after screenshots from isolated builds.

    7.8k GitHub stars~2.6k tokensUpdated 2 days ago
    DevelopmentAuto-check passed

More from pandulapeter/campfire

  • Code Style

    pandulapeter/campfire

    Code style, commenting, and documentation conventions for the Campfire codebase.

    101 GitHub stars~2.8k tokensUpdated today
    Auto-check passed
  • Codebase Review

    pandulapeter/campfire

    The Campfire review-sweep process — read-only area reviewers, one plan file per verified finding, a README.md that indexes them into parallel lanes, an EXECUTION.md orchestrator brief, and later the…

    101 GitHub stars~3.3k tokensUpdated today
    Auto-check passed
  • Store Screenshots

    pandulapeter/campfire

    Retake Campfire's promotional images for every platform and form factor — the store listings (Play Store, App Store, Mac App Store, Microsoft Store), the Play Store feature graphic, Apple's product…

    101 GitHub stars~3k tokensUpdated today
    Auto-check passed
  • Commit Messages

    pandulapeter/campfire

    Commit message conventions for the Campfire repo. An agent skill from pandulapeter/campfire.

    101 GitHub stars~700 tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Prepare Release

What does Prepare Release do?

Prepare a Campfire release by writing a paste-ready GitHub release-notes draft (with the stores' "what's new" blurb and Play's update priority embedded in it), updating the localized in-app update…. Prepare Release is an agent skill from pandulapeter/campfire. Prepare a Campfire release by writing a paste-ready GitHub release-notes draft (with the stores' "what's new" blurb and Play's update priority embedded in it), updating the localized in-app update message, and regenerating Android baseline profiles.

When should I use Prepare Release?

Prepare Release fits situations like: tasks that involve Changelog and release notes.

How do I install Prepare Release in Claude Code?

Run `npx skills add pandulapeter/campfire --skill prepare-release -a claude-code`. Or copy the skill folder (.claude/skills/prepare-release in pandulapeter/campfire) into .claude/skills/prepare-release in your project. Claude Code loads it when a task matches its description.

How do I install Prepare Release in Codex?

Run `npx skills add pandulapeter/campfire --skill prepare-release -a codex`. Or copy the skill folder (.claude/skills/prepare-release in pandulapeter/campfire) into .agents/skills/prepare-release in your project. Codex loads it when a task matches its description.

Can I use Prepare Release 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 pandulapeter/campfire --skill prepare-release -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/prepare-release, .gemini/skills/prepare-release, .github/skills/prepare-release and .opencode/skills/prepare-release in your project.

What does Prepare Release need to run?

Going by SKILL.md and its folder, Prepare Release needs the command-line tools its instructions call (git and gh).

Does Prepare Release access the network?

SKILL.md names 1 domain. In commands or code: campfire-songbook.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Prepare Release safe to install?

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.

What licence does Prepare Release use?

Prepare Release is published under the MPL-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Prepare Release use?

About 4.9k tokens (SKILL.md is roughly 20k 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 Prepare Release?

Skills that share tags, products or a category with Prepare Release: Release Changelog (sk2andy/candy-browser, 508 stars), Release Notes (sesori-ai/sesori_apps_monorepo, 126 stars), Release Manager (poingstudios/godot-admob-plugin, 632 stars) and Cutting A Release (TriliumNext/Trilium, 38k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Prepare Release?

pandulapeter (a GitHub user) maintains it in pandulapeter/campfire, which has 101 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 9, 2026.

Source: pandulapeter/campfire on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.