Agent skill

Write Release Announcements

by Gremlinq in Gremlinq/ExRam.Gremlinq

A skill your agent uses to write the release notes and the announcement texts for an upcoming release, from the pull requests merged since the previous tag.

MITAuto-check passedDevelopment

Install Write Release Announcements

skills CLI
$ npx skills add Gremlinq/ExRam.Gremlinq --skill write-release-announcements -a claude-code

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

GitHub CLI
$ gh skill install Gremlinq/ExRam.Gremlinq write-release-announcements --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/Gremlinq/ExRam.Gremlinq.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/write-release-announcements .claude/skills/write-release-announcements && 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
write-release-announcements
GitHub stars
187
Token cost
~1.6k tokens
SKILL.md length
919 words
Files
4 (incl. scripts, references)
Skills in repo
3
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses to write the release notes and the announcement texts for an upcoming release, from the pull requests merged since the previous tag.

  • Works in 6 steps: Run scripts/collect-prs.sh. It resolves… → Read the excluded list out loud to the… → Propose a grouping of the remaining pull… → …
  • Write the release notes and the announcement texts for an upcoming release
  • SKILL.md covers Usage, Where the texts go, and why…, Workflow and Curation is not automatic, plus 3 more sections
  • Runs Shell scripts from its folder; calls git and gh

What it does

Write Release Announcements is an agent skill from Gremlinq/ExRam.Gremlinq. Use this skill to write the release notes and the announcement texts for an upcoming release, from the pull requests merged since the previous tag. Produces releases/<version/release-notes.md plus LinkedIn and Discord texts. Invokes when asked to "write release announcements", "write the release notes" or similar, and is invoked by the prepare-release skill. Does NOT bump versions, create tags or publish anything.

Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including scripts and reference files (for example `references/channel-style.md`, `scripts/check-lengths.sh` and `scripts/collect-prs.sh`).

It sits in Development, covering Changelog and release notes. It works with LinkedIn, Discord, .NET and Azure Cosmos DB. The repository describes itself as: A .NET object-graph-mapper for Apache TinkerPop™ Gremlin enabled databases. The licence is MIT.

When your agent uses it

  • Write the release notes and the announcement texts for an upcoming release
  • From the pull requests merged since the previous tag

Example prompts

  • “write release announcements”
  • “write the release notes”
  • “/write-release-announcements”

Requirements

  • A Bash shell

Workflow steps

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

  1. Run scripts/collect-prs.sh. It resolves the previous release tag, the target version
  2. Read the excluded list out loud to the user. The script drops anything labelled
  3. Propose a grouping of the remaining pull requests into Features / Fixes / Performance /
  4. Write the texts into releases// following
  5. Run scripts/check-lengths.sh releases/ and fix what it reports. Missing
  6. Commit: git add releases/ && git commit -m "Add release notes and announcements for ".

What it can do on your machine

Read from SKILL.md and the folder at commit bb8c6fe. 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

    Ships 2 files in scripts/ (Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • git
    • gh

    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 no API keys, tokens, secrets or passwords.

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

Context cost

Write Release Announcements loads about 1.6k tokens when it runs, and up to ~3.9k if it reads all its reference files. Until then it costs about 112 tokens; SKILL.md has 919 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~112
When it runs · the whole SKILL.md, loaded when a task matches
~1.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~3.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); the scripts in this folder are not scanned.

SKILL.md

The full file from Gremlinq/ExRam.Gremlinq at commit bb8c6fe, republished under its MIT licence (© Gremlinq). 919 words, ~1,637 tokens.

Download SKILL.mdSave it as .claude/skills/write-release-announcements/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
write-release-announcements
description
Use this skill to write the release notes and the announcement texts for an upcoming release, from the pull requests merged since the previous tag. Produces releases/<version>/release-notes.md plus LinkedIn and Discord texts. Invokes when asked to "write release announcements", "write the release notes" or similar, and is invoked by the prepare-release skill. Does NOT bump versions, create tags or publish anything.

Write Release Announcements

Turns the pull requests merged since the last release into the four texts a release needs.

Usage

write release announcements

Runs standalone whenever the texts need to be written or rewritten, and is invoked by prepare-release as the step before the version is bumped.

Where the texts go, and why the order matters

Everything lands in releases/<version>/ -- for example releases/14.2.0/:

FileBecomes
release-notes.mdthe GitHub release body (pack.yml passes it to gh release create --notes-file); in ExRam.Gremlinq, publishBlogPost.yml then also copies it verbatim into the blog on docs.gremlinq.net
linkedin.mda manual LinkedIn post
discord-tinkerpop.mda manual post in the TinkerPop Discord
discord-dotnet.mda manual post in the .NET Discord

The LinkedIn and Discord channels described here, and the worked examples in the channel style guide, are ExRam.Gremlinq's own -- written for that library's audience and communities. A repository that shares this skill but does not run its own LinkedIn/Discord announcements should confirm with the user which of the four texts, if any, are wanted before writing all of them.

These files must be committed before nbgv prepare-release runs. That command creates the branch the release tag is put on, and the current branch is then rebased onto it -- so the tag points at the earlier state. In ExRam.Gremlinq, pack.yml and openAnnouncementChecklist.yml both read these files out of the tag; a repository without those workflows still benefits from the same ordering, since a tag whose release-notes.md is missing falls back to a worse, auto-generated body. Commit them late and they will not be there.

That is why this skill commits its own output rather than leaving it staged.

Workflow

  1. Run scripts/collect-prs.sh. It resolves the previous release tag, the target version (via nbgv) and the pull requests merged since, and prints JSON. Pass a tag as an argument to collect for a different range.
  2. Read the excluded list out loud to the user. The script drops anything labelled skip-changelog and the release-preparation pull requests. That is a floor, not curation -- see below.
  3. Propose a grouping of the remaining pull requests into Features / Fixes / Performance / Maintenance, together with anything you think should be dropped, and get agreement before writing. Propose dropping every pull request with tests_only set: its lead says "Tests only", so it changes nothing a reader of the notes would notice. Check the lead, since the flag only matches the words.
  4. Write the texts into releases/<version>/ following the channel style guide. release_kind in the JSON says whether this is a patch, minor or major release: a patch gets release-notes.md only, unless the user asks for the rest.
  5. Run scripts/check-lengths.sh releases/<version> and fix what it reports. Missing release notes fail it; the three channel texts are optional, so a patch release passes with only the notes. A Discord text over 2000 characters is rejected by Discord outright.
  6. Commit: git add releases/<version> && git commit -m "Add release notes and announcements for <version>". When only release-notes.md was written, say so: "Add release notes for <version>".
Show full SKILL.md (420 more words)Show less

Curation is not automatic

The skip-changelog label removes the obvious chores. It does not decide what is worth announcing, and the history shows why: the hand-written notes for 14.1.1 covered 7 of the 13 pull requests in range. Kept were a CI change (Trusted Publishing) and a test-reporting change; dropped were dependency bumps and Actions maintenance. There is no rule that separates those -- it is a judgement about what a reader of the changelog would care about.

So: propose, show what you would drop and why, and let the user decide. Do not quietly truncate, and do not pad the notes with everything in range either.

The range for 14.1.2 shows what the label misses. Eight pull requests there only added contract tests ("Say that a bulk set may shout its type name", "Tests only."), and none carried skip-changelog. They described behaviour the library already had, so a release note for them would have announced a change that never happened. tests_only catches that case; reading the leads still catches the rest.

Writing the entries

Each pull request in the JSON carries a lead field: the text above its first ## heading, with the pull request template's HTML comment already stripped. That is the change's changelog entry. Use lead, not body -- authors routinely leave the template comment in, and it sits above that heading, so reading body by hand would carry "Replace this comment with one to three sentences..." into the published notes and from there, verbatim, into the blog post.

If a lead runs longer than about two sentences, summarise it -- the notes are scanned, not read.

If a lead is empty or useless, the entry cannot be reconstructed honestly from the title alone. Say so, and either read the diff for that one change or ask. Do not paraphrase the title back as if it were a description; that is the failure mode the open-pull-request skill exists to prevent, and it should not be reintroduced here.

Key requirements

  • Version comes from nbgv get-version, never from a guess or from version.json read by hand.
  • Every release-note entry links to its pull request as ([#2417](url)).
  • No author names. Nearly every pull request here is the maintainer's own.
  • Do not create tags, do not bump version.json, do not push. That is prepare-release.
  • Do not post anything anywhere. Every text is posted by hand, and whether it is posted at all is the maintainer's decision.

References

  • Channel Style - what each of the four texts is for, its limits, and a worked example of each

© Gremlinq, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (scripts, references) in .agents/skills/write-release-announcements of Gremlinq/ExRam.Gremlinq.

  • SKILL.md
  • references/channel-style.md
  • scripts/check-lengths.sh
  • scripts/collect-prs.sh

Open the folder on GitHubat commit bb8c6fe

Compare with similar skills

Write Release Announcements 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.

Write Release Announcements compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Write Release Announcements this skillGremlinq/ExRam.Gremlinq187—~1.6kAutomated safety check: PassMIT
Maintain DisCatSharpAiko-IT-Systems/DisCatSharp140—~1.2kAutomated safety check: PassMIT
.NET Release Verificationdotnet/core22k—~1.8kAutomated safety check: PassMIT
Add Analyzerdotnet/roslynator3.5k—~1.3kAutomated safety check: PassCustom licence
Generate .NET Release changes.jsondotnet/core22k—~1.7kAutomated safety check: PassMIT
Release Feature Scoringdotnet/core22k—~2.2kAutomated safety check: PassMIT

Similar skills

  • Maintain DisCatSharp

    Aiko-IT-Systems/DisCatSharp

    Guides changes to the DisCatSharp C# Discord library: tracing a payload field through parsing, serialization and caches, then validating across target frameworks.

    140 GitHub stars~1.2k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Official

    Validates .NET release data with the release-notes CLI: download URL liveness, SHA512 hashes, CDN latest.version files and aka.ms redirects.

    22k GitHub stars~1.8k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Add Analyzer

    dotnet/roslynator

    Official

    A skill your agent uses when adding a new RCS diagnostic in roslynator (RCS0 formatting, RCS1 general, RCS9 code-analysis), wiring roslynator EditorConfig options, or when docs say CHANGELOG.md…

    3.5k GitHub stars~1.3k tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • Produces the changes.json manifest for a .NET preview, RC or GA milestone by choosing the right VMR base and head refs and running release-notes generate changes.

    22k GitHub stars~1.7k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Official

    Ranks the changes in a release manifest and writes a scored features file that release notes, docs and blog posts can each cut at their own threshold.

    22k GitHub stars~2.2k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Official

    Audits a scored features.json file and its draft release notes against editorial examples to catch over-scored, under-scored, or missing entries.

    22k GitHub stars~1.6k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from Gremlinq/ExRam.Gremlinq

  • Open Pull Request

    Gremlinq/ExRam.Gremlinq

    A skill your agent uses when opening a pull request for the current branch, or when an existing pull request needs a better description - including when the check-description CI check has failed.

    187 GitHub stars~1.5k tokensUpdated yesterday
    Auto-check passed
  • Prepare Release

    Gremlinq/ExRam.Gremlinq

    A skill your agent uses when preparing a new release. An agent skill from Gremlinq/ExRam.Gremlinq.

    187 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Write Release Announcements

What does Write Release Announcements do?

A skill your agent uses to write the release notes and the announcement texts for an upcoming release, from the pull requests merged since the previous tag. Gremlinq. Use this skill to write the release notes and the announcement texts for an upcoming release, from the pull requests merged since the previous tag.

When should I use Write Release Announcements?

Write Release Announcements fits situations like: write the release notes and the announcement texts for an upcoming release; from the pull requests merged since the previous tag.

How do I install Write Release Announcements in Claude Code?

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

How do I install Write Release Announcements in Codex?

Run `npx skills add Gremlinq/ExRam.Gremlinq --skill write-release-announcements -a codex`. Or copy the skill folder (.agents/skills/write-release-announcements in Gremlinq/ExRam.Gremlinq) into .agents/skills/write-release-announcements in your project. Codex loads it when a task matches its description.

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

What does Write Release Announcements need to run?

Going by SKILL.md and its folder, Write Release Announcements needs a shell for the scripts in its folder and the command-line tools its instructions call (git and gh). Our summary lists: A Bash shell.

Does Write Release Announcements 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 Write Release Announcements 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Write Release Announcements use?

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

How many tokens does Write Release Announcements use?

About 1.6k tokens (SKILL.md is roughly 6.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.2k tokens, read only when the agent opens those files.

What are the alternatives to Write Release Announcements?

Skills that share tags, products or a category with Write Release Announcements: Maintain DisCatSharp (Aiko-IT-Systems/DisCatSharp, 140 stars), .NET Release Verification (dotnet/core, 22k stars), Add Analyzer (dotnet/roslynator, 3.5k stars) and Generate .NET Release changes.json (dotnet/core, 22k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Write Release Announcements?

Gremlinq (a GitHub organization) maintains it in Gremlinq/ExRam.Gremlinq, which has 187 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 7, 2026.

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