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.
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…
$ npx skills add pandulapeter/campfire --skill prepare-release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install pandulapeter/campfire prepare-release --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/pandulapeter/campfire.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/prepare-release .claude/skills/prepare-release && 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 "prepare-release" agent skill from https://github.com/pandulapeter/campfire/tree/master/.claude/skills/prepare-release into .claude/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-release", 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/pandulapeter/campfire/tree/master/.claude/skills/prepare-releaseType 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 pandulapeter/campfire --skill prepare-release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install pandulapeter/campfire prepare-release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandulapeter/campfire.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/prepare-release .agents/skills/prepare-release && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "prepare-release" agent skill from https://github.com/pandulapeter/campfire/tree/master/.claude/skills/prepare-release into .agents/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-release", 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 pandulapeter/campfire --skill prepare-release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install pandulapeter/campfire prepare-release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandulapeter/campfire.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/prepare-release .cursor/skills/prepare-release && 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 "prepare-release" agent skill from https://github.com/pandulapeter/campfire/tree/master/.claude/skills/prepare-release into .cursor/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-release", 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/pandulapeter/campfire.git --path .claude/skills/prepare-release--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 pandulapeter/campfire --skill prepare-release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install pandulapeter/campfire prepare-release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandulapeter/campfire.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/prepare-release .gemini/skills/prepare-release && 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 "prepare-release" agent skill from https://github.com/pandulapeter/campfire/tree/master/.claude/skills/prepare-release into .gemini/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-release", 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 pandulapeter/campfire prepare-releaseInstalls 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 pandulapeter/campfire --skill prepare-release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/pandulapeter/campfire.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/prepare-release .github/skills/prepare-release && 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 "prepare-release" agent skill from https://github.com/pandulapeter/campfire/tree/master/.claude/skills/prepare-release into .github/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-release", 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 pandulapeter/campfire --skill prepare-release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install pandulapeter/campfire prepare-release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandulapeter/campfire.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/prepare-release .opencode/skills/prepare-release && 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 "prepare-release" agent skill from https://github.com/pandulapeter/campfire/tree/master/.claude/skills/prepare-release into .opencode/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-release", 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.
prepare-releasePrepare 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. 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.
10 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 94d4b7f. 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:
gitghFrom 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:
campfire-songbook.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.
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.
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 pandulapeter/campfire at commit 94d4b7f, republished under its MPL-2.0 licence (© pandulapeter). 2,758 words, ~4,936 tokens.
.claude/skills/prepare-release/SKILL.md (or your agent's skills folder).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.
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.
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):
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 -3The 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.
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:
git log <last tag>..HEAD --format='%H %s'
git diff <last tag>..HEAD --stat -- presentation domain data chordpro app | tail -40Do 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.
Read the actual diffs — never summarize from commit subjects. Subjects are lossy and often name the mechanism rather than the effect. For each commit:
git show <hash> # the change itself
git show --name-only --format='' <hash> # which areas it touchedPay particular attention to two files, because they say what a user will see:
git diff <last tag>..HEAD -- presentation/src/commonMain/composeResources/values/strings.xml
git diff <last tag>..HEAD --stat -- presentation domain data chordpro appNew or changed strings are almost always a new feature, a new setting or a new message worth a bullet.
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).
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.
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.
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:
./gradlew :app:android:generateBaselineProfileVerify 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.
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:
<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;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.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.
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.
Export a setlist as a zip, not Better sharing.Say what changed and why it is better — no more, no less.
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.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.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.small improvements to the editor. A new capability is called new.you where it reads naturally; no we, no developer vocabulary, no version numbers.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 much | Too little | Right |
|---|---|---|
| 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. |
Mirror the existing releases:
- bullets. No sections, no grouping by type, no "Bug fixes" / "Features"
headings.- **Headline**: description. — the headline with no trailing period, the description one sentence.SyncEngine batching". Name features the way the app names them in Settings.[here](https://campfire-songbook.com/app/)), the
ChordPro site, a contributor's profile — in the markdown style the existing notes use.git log <last tag>..HEAD --format='%an' | sort -u
and credit anyone who is not the maintainer (Pandula Péter).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).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.- 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..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
Just SKILL.md in .claude/skills/prepare-release of pandulapeter/campfire.
Open the folder on GitHubat commit 94d4b7f
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Prepare Release this skillpandulapeter/campfire | 101 | — | ~4.9k | Automated safety check: Pass | MPL-2.0 | |
| Release Changelogsk2andy/candy-browser | 508 | — | ~593 | Automated safety check: Pass | MPL-2.0 | |
| Release Notessesori-ai/sesori_apps_monorepo | 126 | — | ~3.6k | Automated safety check: Pass | Custom licence | |
| Release Managerpoingstudios/godot-admob-plugin | 632 | — | ~357 | Automated safety check: Pass | MIT | |
| Cutting A ReleaseTriliumNext/Trilium | 38k | — | ~3.2k | Automated safety check: Pass | AGPL-3.0 | |
| Mole CLI Release Flowtw93/Mole | 70k | — | ~2.6k | Automated safety check: Pass | GPL-3.0 |
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.
sesori-ai/sesori_apps_monorepo
Generate a polished, user-facing release-notes markdown file for a requested release (e.g.
poingstudios/godot-admob-plugin
Manage and execute AdMob plugin releases. An agent skill from poingstudios/godot-admob-plugin.
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.
tw93/Mole
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.
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.
pandulapeter/campfire
Code style, commenting, and documentation conventions for the Campfire codebase.
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…
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…
pandulapeter/campfire
Commit message conventions for the Campfire repo. An agent skill from pandulapeter/campfire.
Categories
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.
Prepare Release fits situations like: tasks that involve Changelog and release notes.
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.
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.
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.
Going by SKILL.md and its folder, Prepare Release needs the command-line tools its instructions call (git and gh).
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.
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.
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.
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.
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.
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.