Agent skill

Beta Prerelease

by rvdbreemen in rvdbreemen/OTGW-firmware

Publish an OTGW-firmware beta prerelease — bump VERSIONPRERELEASE, push to otgw-1.x.x, tag, and let CI build + publish the GitHub prerelease

GPL-3.0Auto-check passedDevelopment

Install Beta Prerelease

skills CLI
$ npx skills add rvdbreemen/OTGW-firmware --skill beta-prerelease -a claude-code

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

GitHub CLI
$ gh skill install rvdbreemen/OTGW-firmware beta-prerelease --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/rvdbreemen/OTGW-firmware.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/beta-prerelease .claude/skills/beta-prerelease && 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
beta-prerelease
GitHub stars
207
Token cost
~2.7k tokens
SKILL.md length
1,077 words
Files
1
Skills in repo
13
Repo updated
First seen
Licence
GPL-3.0

At a glance

Publish an OTGW-firmware beta prerelease — bump VERSIONPRERELEASE, push to otgw-1.x.x, tag, and let CI build + publish the GitHub prerelease

  • Works in 10 steps: Prepare — clean state on otgw-1.x.x → ADR validation → Bump prerelease → …
  • Tasks that involve Changelog and release notes
  • SKILL.md covers Usage, Token-efficiency rules (apply…, When to use and How this differs from /release, plus 5 more sections
  • Calls git, gh and python; needs GITHUB_TOKEN

What it does

Beta Prerelease is an agent skill from rvdbreemen/OTGW-firmware. Publish an OTGW-firmware beta prerelease — bump VERSIONPRERELEASE, push to otgw-1.x.x, tag, and let CI build + publish the GitHub prerelease

Its SKILL.md is about 2.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 Changelog and release notes. It works with GitHub, Discord and Home Assistant. The repository describes itself as: A ESP8266 devkit firmware for the Nodoshop version of the Opentherm Gateway (OTGW). The licence is GPL-3.0.

When your agent uses it

  • Tasks that involve Changelog and release notes

Example prompts

  • “/beta-prerelease”

Requirements

  • Python 3
  • A credential in GITHUB_TOKEN

Workflow steps

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

  1. Prepare — clean state on otgw-1.x.x
  2. ADR validation
  3. Bump prerelease
  4. Refresh README + CHANGELOG + RELEASE_NOTES (mandatory, P2, P3)
  5. Build verification (P1)
  6. Evaluator
  7. Commit and push to otgw-1.x.x
  8. Create and push the prerelease tag
  9. Wait for the GitHub Action (P5)
  10. Discord announcement (CHECKPOINT)

What it can do on your machine

Read from SKILL.md and the folder at commit 5e66c3b. 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
    • python

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

  • Network

    No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.

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

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • GITHUB_TOKEN

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

Context cost

Beta Prerelease loads about 2.7k tokens when it runs. Until then it costs about 40 tokens; SKILL.md has 1,077 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~40
When it runs · the whole SKILL.md, loaded when a task matches
~2.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 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 rvdbreemen/OTGW-firmware at commit 5e66c3b, republished under its GPL-3.0 licence (© rvdbreemen). 1,077 words, ~2,704 tokens.

Download SKILL.mdSave it as .claude/skills/beta-prerelease/SKILL.md (or your agent's skills folder).
name
beta-prerelease
description
Publish an OTGW-firmware beta prerelease — bump _VERSION_PRERELEASE, push to otgw-1.x.x, tag, and let CI build + publish the GitHub prerelease
disable-model-invocation
true

/beta-prerelease - OTGW-firmware Beta Prerelease Skill

Publish a single beta build to field testers in Discord #beta-testing. Lightweight, repeatable many times within one minor cycle. Does NOT merge to main, does NOT touch the stable _SEMVER_CORE.

Usage

/beta-prerelease

No arguments. Auto-detects the current _VERSION_PRERELEASE and increments it via bin/bump-prerelease.sh.

Token-efficiency rules (apply throughout all phases)

  • P1 Build output: Pipe through tee .tmp/build_beta.log | tail -5. Only read .tmp/build_beta.log if exit code != 0.
  • P2 Phase 3 reads: Use targeted grep/sed to extract only the relevant section from each file. Never read README, CHANGELOG, or RELEASE_NOTES in full.
  • P3 Phase 3 writes: Edit each file and note "Updated." immediately. Do NOT keep all edited content in context — keep only the filename.
  • P4 Known Traps: Summarized as 5 bullets below. Read .github/workflows/beta-prerelease.yml only if a trap is actually hit.
  • P5 Phase 8 CI poll: Use gh run watch instead of opening a browser.

When to use

Run when a firmware change under src/OTGW-firmware/** or src/libraries/** is committed and ready for field testing. Do NOT use for docs-only commits or full releases to main (use /release <version> for those).

How this differs from /release

Aspect/release/beta-prerelease
Target branchdev then merge to mainotgw-1.x.x only
Bumps _SEMVER_COREyesno
GitHub releasestable, not prereleaseprerelease: true
Discord channels#nederlandse-ondersteuning, #english-support#beta-testing
Mandatory checkpoints21 (Discord announcement)

Writing style rules

  • Never use em dashes — use colons, periods, commas, or parentheses instead.
  • All release text MUST be in English (international audience).
  • No emojis in release notes or Discord posts.

Process

Phase 0: Prepare — clean state on otgw-1.x.x

The 1.x maintenance/LTS line lives in its own worktree. Run this skill FROM the wt-otgw-1.x.x worktree. Do NOT git checkout otgw-1.x.x inside the dev tree: the branch is already checked out in the worktree and the checkout will fail.

  1. Confirm the branch: git rev-parse --abbrev-ref HEAD must print otgw-1.x.x.
  2. Verify clean state: git status must be clean (or only the firmware change about to be bumped). Then git pull origin otgw-1.x.x.
  3. Detect the latest prerelease tag:
    bash
    git fetch --tags
    PREV_TAG=$(git tag --list 'v*-*.*' --sort=-v:refname | head -1)
  4. Detect the latest public stable release (store as LATEST_PUBLIC):
    bash
    LATEST_PUBLIC=$(gh release view --json tagName --jq '.tagName' 2>/dev/null \
      || git tag --list 'v[0-9]*.[0-9]*.[0-9]*' --sort=-v:refname | grep -v -- '-' | head -1)
  5. Read current prerelease: grep _VERSION_PRERELEASE src/OTGW-firmware/version.h
Phase 1: ADR validation

Skip by default. Only pause if the staged firmware change introduces a new architectural pattern, dependency, or NFR shift. Most beta cycles do not need this gate.

Phase 2: Bump prerelease
bash
bin/bump-prerelease.sh

Prints the transition (e.g. beta.3 -> beta.4). Store the new value as NEW_PRERELEASE. The helper does NOT git-add — you stage in Phase 6.

Assemble the tag: TAG="v${SEMVER_CORE}-${NEW_PRERELEASE}"

Phase 3: Refresh README + CHANGELOG + RELEASE_NOTES (mandatory, P2, P3)

The GitHub Action reads these files at the tagged commit. Stale narrative at the tag = stale release page (Trap 1). Refresh immediately after the bump so NEW_PRERELEASE is known.

Staleness check (P2 — targeted extractions, not full reads):

bash
# 1. Commits since last public release (the change set to account for)
git log --pretty=format:'%h %s' "${LATEST_PUBLIC}..HEAD" -- src/OTGW-firmware/ src/libraries/ docs/

# 2. Existing narrative — CHANGELOG [Unreleased] is the rolling beta log on the
#    1.x line. (The README "What's New in v<stable>" sections are refreshed at
#    STABLE release, not per beta, and there is no RELEASE_NOTES_*-beta file.)
grep -A 35 "## \[Unreleased\]" CHANGELOG.md | head -40

Decision:

  • Every commit subject since LATEST_PUBLIC appears under CHANGELOG ## [Unreleased] → pass silently, continue to Phase 4.
  • Any commit missing → refresh the CHANGELOG now. Stop and ask only if the gap is ambiguous; otherwise edit in-session.

Authoring rules (P3 — write immediately, keep only filename in context):

  1. CHANGELOG.md — append under ## [Unreleased] using Keep-a-Changelog headings (### Added/Changed/Fixed/Removed/Documentation). One bullet per change, with ADR/TASK/PR/GH-issue reference. → note "Updated." This is the only mandatory narrative for a 1.x beta.
  2. README.md — leave untouched. The 1.x README's "What's New in v<stable>" sections are refreshed at STABLE release (via /release), not per beta.
  3. RELEASE_NOTES_<next-stable>.md (e.g. RELEASE_NOTES_1.7.1.md) — optional during a beta cycle (authored in full at stable release). Update it now only if you keep a running draft. → note "Updated."

Skip the CHANGELOG edit only when this is a re-cut at the same change surface (previous tag hit Trap 2). Note the reason in the commit message.

Phase 4: Build verification (P1)
bash
mkdir -p .tmp
python build.py --firmware 2>&1 | tee .tmp/build_beta.log | tail -5
echo "Exit: $?"

Must exit 0. On failure: read .tmp/build_beta.log for diagnosis, fix, retry. Do NOT push a tag on a broken build.

Show full SKILL.md (440 more words)Show less
Phase 5: Evaluator
bash
python evaluate.py --quick

Must show no new failures. Pre-existing baseline failures unrelated to this change: document in the commit message.

Phase 6: Commit and push to otgw-1.x.x
bash
# The 1.x bin/bump-prerelease.sh updates version banners across ~24 files and
# does NOT auto-stage. Stage the real change set (on Windows, --ignore-cr-at-eol
# filters out EOL-only churn). On a clean Phase-0 tree this is exactly the bump
# banners + version.h + data/version.hash + your firmware change + CHANGELOG.md:
git add $(git diff --ignore-cr-at-eol --name-only)

git commit -m "chore(release): ${NEW_PRERELEASE}

<one-line summary of what is in this beta>"

git push origin otgw-1.x.x

If the pre-commit hook blocks: re-stage version.h + data/version.hash and retry. Do NOT bypass with OTGW_BUMP_HOOK_DISABLE=1.

Note: the .githooks/commit-msg task-hook requires a TASK-NNN whose backlog/tasks/task-NNN-*.md is tracked in THIS worktree. The backlog lives in the dev tree, so a 1.x firmware commit usually cannot satisfy it. Use a chore(release): ... subject (exempt from the task-hook) for the bump commit, or OTGW_TASK_HOOK_DISABLE=1 if you reference a cross-tree TASK-NNN.

Phase 7: Create and push the prerelease tag
bash
SEMVER_CORE=$(grep '_SEMVER_CORE ' src/OTGW-firmware/version.h | awk -F'"' '{print $2}')
TAG="v${SEMVER_CORE}-${NEW_PRERELEASE}"

git tag -a "${TAG}" -m "Beta prerelease ${NEW_PRERELEASE}"
git push origin "${TAG}"

The push fires .github/workflows/beta-prerelease.yml. CI builds firmware + filesystem, creates a GitHub prerelease, uploads .ino.bin, .littlefs.bin, SHA256SUMS, flash scripts, and the flash-bundle zip.

Phase 8: Wait for the GitHub Action (P5)
bash
gh run watch --exit-status

When it exits 0, verify the release:

bash
gh release view "${TAG}" --json tagName,isPrerelease,assets \
  --jq '{tag: .tagName, prerelease: .isPrerelease, assets: [.assets[].name]}'

Expected assets: *.ino.bin, *.littlefs.bin, SHA256SUMS, flash_otgw.sh, flash_otgw.bat, OTGW-firmware-*-flash-bundle.zip.

On failure: inspect logs with gh run view --log-failed, fix the issue, and re-run via workflow_dispatch or push a new tag.

Phase 9: Discord announcement (CHECKPOINT)

Prepare announcement for #beta-testing (channel ID 914498730001072149). Diff link points at LATEST_PUBLIC (testers want to see what changed since the last stable, not since a previous beta).

Beta ${NEW_PRERELEASE} is up.

Version: ${SEMVER_CORE}-${NEW_PRERELEASE}
What is new: <one or two sentences>
Download: https://github.com/rvdbreemen/OTGW-firmware/releases/tag/${TAG}
Diff vs ${LATEST_PUBLIC}: https://github.com/rvdbreemen/OTGW-firmware/compare/${LATEST_PUBLIC}...${TAG}
Changelog: https://github.com/rvdbreemen/OTGW-firmware/blob/${TAG}/CHANGELOG.md

Please flash and report findings here (good and bad).

CHECKPOINT: Show the announcement to the user before sending.

Dry-run (testing without publishing)

bash
git checkout -b test/beta-prerelease-dryrun
git tag -a v0.0.0-beta.dryrun -m "dryrun" && git push origin v0.0.0-beta.dryrun
# watch the Action, then clean up:
gh release delete v0.0.0-beta.dryrun --yes
git push --delete origin v0.0.0-beta.dryrun && git tag -d v0.0.0-beta.dryrun
git checkout otgw-1.x.x && git branch -d test/beta-prerelease-dryrun

Known traps (P4 — full detail in beta-prerelease.yml)

  1. Trap 1: Immutable-releases locks publish — upload after gh release create returns HTTP 422. Workaround already in CI: draft-first, attach all assets, then flip --draft=false. If you hit this manually, re-tag under the next beta number.
  2. Trap 2: Deleted immutable release reserves the tag forever — even after deletion, the tag cannot be reused. Bump the prerelease number and note the skipped tag in the commit message.
  3. Trap 3: GITHUB_TOKEN events do not chain — release-assets.yml (triggered by release: published) does not fire when the release is created by GITHUB_TOKEN. beta-prerelease.yml is therefore self-contained (generates SHA256SUMS + zip + flash scripts itself).
  4. Trap 4: Diff link to previous beta hides what testers care about — always link vs LATEST_PUBLIC (the non-prerelease "Latest" release), not the previous beta tag.
  5. Trap 5: Stale narrative at tagged commit is permanent — Phase 3 refresh runs before the tag is pushed for this reason. Skipping Phase 3 = stale release page that cannot be edited after publish.

Important rules

  • Never use em dashes in any generated text.
  • Always push to remote after every commit.
  • Never force-push to otgw-1.x.x.
  • Build and evaluator gates are mandatory — do not push a tag if either is red.
  • One checkpoint: the Discord announcement in Phase 9.
  • Do NOT bypass the bump-check hook with OTGW_BUMP_HOOK_DISABLE=1 — if the hook blocks, you forgot to stage version.h / data/version.hash.

© rvdbreemen, GPL-3.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/beta-prerelease of rvdbreemen/OTGW-firmware.

Open the folder on GitHubat commit 5e66c3b

Compare with similar skills

Beta Prerelease 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.

Beta Prerelease compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Beta Prerelease this skillrvdbreemen/OTGW-firmware207—~2.7kAutomated safety check: PassGPL-3.0
Releasekellerza/sunsynk339—~920Automated safety check: PassApache-2.0
Releasepwrdrvr/openclaw-codex-app-server265—~2.2kAutomated safety check: PassMIT
Writing Release NotesGoneTone/genshin-impact-wish-gacha-analyzer152—~1.6kAutomated safety check: PassMIT
Releasecdpuk/ha-bestway135—~998Automated safety check: PassMIT
GitHub Issue Solverhomeassistant-extras/device-card131—~3.4kAutomated safety check: PassMIT

Similar skills

  • Release

    kellerza/sunsynk

    Bump sunsynk version (major/minor/bugfix), rewrite the Unreleased changelog heading, commit, push to main, and open a draft GitHub release with a v-prefixed tag.

    339 GitHub stars~920 tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • Release

    pwrdrvr/openclaw-codex-app-server

    Plan and publish a GitHub Release in a tag-driven repository.

    265 GitHub stars~2.2k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Writing Release Notes

    GoneTone/genshin-impact-wish-gacha-analyzer

    A skill your agent uses when drafting GitHub release notes or changelog content for this project (Genshin Impact Wish Gacha Analyzer).

    152 GitHub stars~1.6k tokensUpdated 5 days ago
    DevelopmentAuto-check passed
  • Release

    cdpuk/ha-bestway

    Cut a release of this integration - bump the version in manifest.json, run the validation gates, commit, tag the merged commit, and draft categorised release notes for the GitHub release form.

    135 GitHub stars~998 tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • GitHub Issue Solver

    homeassistant-extras/device-card

    Accept a GitHub issue URL or issue details, create a comprehensive plan (in plan mode - shows plan first), then implement the solution including tests and documentation, create/update release notes…

    131 GitHub stars~3.4k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Create a Discord-ready Neva release announcement from a GitHub release payload.

    1.1k GitHub stars~500 tokensUpdated 1 mo ago
    DevelopmentAuto-check passed

More from rvdbreemen/OTGW-firmware

All 13 skills in this repo
  • DOCX

    rvdbreemen/OTGW-firmware

    A skill your agent uses whenever the user wants to create, read, edit, or manipulate Word documents (.docx files).

    207 GitHub starsUsed in 33 repos~4.3k tokens
    Auto-check passed
  • PPTX

    rvdbreemen/OTGW-firmware

    Use this skill any time a .pptx file is involved in any way — as input, output, or both.

    207 GitHub starsUsed in 34 repos~2.3k tokens
    Auto-check passed
  • XLSX

    rvdbreemen/OTGW-firmware

    Use this skill any time a spreadsheet file is the primary input or output.

    207 GitHub starsUsed in 35 repos~2.9k tokens
    Auto-check passed
  • Implement Next Task

    rvdbreemen/OTGW-firmware

    Drive the autonomous 2.0.0 ESP32-S3-only async + FreeRTOS migration (epic TASK-865).

    207 GitHub stars~2.1k tokensUpdated 3 days ago
    Auto-check passed
  • Lint

    rvdbreemen/OTGW-firmware

    Lints existing Architecture Decision Records against the four verification gates (Completeness, Evidence, Clarity, Consistency).

    207 GitHub stars~4.3k tokensUpdated 3 days ago
    Auto-check passed
  • Migrate

    rvdbreemen/OTGW-firmware

    Guided rewrite of legacy-shaped ADRs into the canonical-seven-section template enforced by /adr-kit:lint.

    207 GitHub stars~2.5k tokensUpdated 3 days ago
    Auto-check passed

Categories

Questions about Beta Prerelease

What does Beta Prerelease do?

Publish an OTGW-firmware beta prerelease — bump VERSIONPRERELEASE, push to otgw-1.x.x, tag, and let CI build + publish the GitHub prerelease. Beta Prerelease is an agent skill from rvdbreemen/OTGW-firmware.

When should I use Beta Prerelease?

Beta Prerelease fits situations like: tasks that involve Changelog and release notes.

How do I install Beta Prerelease in Claude Code?

Run `npx skills add rvdbreemen/OTGW-firmware --skill beta-prerelease -a claude-code`. Or copy the skill folder (.claude/skills/beta-prerelease in rvdbreemen/OTGW-firmware) into .claude/skills/beta-prerelease in your project. Claude Code loads it when a task matches its description.

How do I install Beta Prerelease in Codex?

Run `npx skills add rvdbreemen/OTGW-firmware --skill beta-prerelease -a codex`. Or copy the skill folder (.claude/skills/beta-prerelease in rvdbreemen/OTGW-firmware) into .agents/skills/beta-prerelease in your project. Codex loads it when a task matches its description.

Can I use Beta Prerelease 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 rvdbreemen/OTGW-firmware --skill beta-prerelease -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/beta-prerelease, .gemini/skills/beta-prerelease, .github/skills/beta-prerelease and .opencode/skills/beta-prerelease in your project.

What does Beta Prerelease need to run?

Going by SKILL.md and its folder, Beta Prerelease needs the command-line tools its instructions call (git, gh and python) and credentials named GITHUB_TOKEN. Our summary lists: Python 3; A credential in GITHUB_TOKEN.

Does Beta Prerelease access the network?

SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Beta Prerelease 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 Beta Prerelease use?

Beta Prerelease is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Beta Prerelease use?

About 2.7k tokens (SKILL.md is roughly 11k 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 Beta Prerelease?

Skills that share tags, products or a category with Beta Prerelease: Release (kellerza/sunsynk, 339 stars), Release (pwrdrvr/openclaw-codex-app-server, 265 stars), Writing Release Notes (GoneTone/genshin-impact-wish-gacha-analyzer, 152 stars) and Release (cdpuk/ha-bestway, 135 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Beta Prerelease?

rvdbreemen (a GitHub user) maintains it in rvdbreemen/OTGW-firmware, which has 207 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 6, 2026.

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