Agent skill

Release Highlights

by garfiec in garfiec/Librechat-Mobile

Add a hand-written Highlights section to a GitHub release whose notes were auto-generated, summarizing the release's PRs in user-facing language above the generated changelog.

MITAuto-check: notesDevelopment

Install Release Highlights

skills CLI
$ npx skills add garfiec/Librechat-Mobile --skill release-highlights -a claude-code

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

GitHub CLI
$ gh skill install garfiec/Librechat-Mobile release-highlights --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/garfiec/Librechat-Mobile.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release-highlights .claude/skills/release-highlights && 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
release-highlights
GitHub stars
111
Token cost
~2k tokens
SKILL.md length
1,070 words
Files
2 (incl. scripts)
Skills in repo
5
Repo updated
First seen
Licence
MIT

At a glance

Add a hand-written Highlights section to a GitHub release whose notes were auto-generated, summarizing the release's PRs in user-facing language above the generated changelog.

  • Works in 5 steps: Resolve the target → Read the release and every PR in it → Ask about anything ambiguous — once,… → …
  • A release has shipped and its notes are still a bare Whats Changed list
  • SKILL.md covers The invariant, Steps and Notes
  • Runs Python scripts from its folder; calls gh and python3

What it does

Release Highlights is an agent skill from garfiec/Librechat-Mobile. Add a hand-written Highlights section to a GitHub release whose notes were auto-generated, summarizing the release's PRs in user-facing language above the generated changelog. Reads every PR in the range, drafts the section in the repo's house style, asks about ambiguous wording, and writes only after approval. Use when a release has shipped and its notes are still a bare What's Changed list, or when backfilling releases that never got Highlights.

Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts (for example `scripts/insert_highlights.py`).

It sits in Development, covering Changelog and release notes. It works with GitHub and OpenAI. The repository describes itself as: Native Android & iOS client for LibreChat, built with Kotlin Multiplatform and Compose Multiplatform. The licence is MIT.

When your agent uses it

  • A release has shipped and its notes are still a bare Whats Changed list
  • Backfilling releases that never got Highlights

Example prompts

  • “/release-highlights”

Requirements

  • Python 3
  • Pre-approved tools (allowed-tools): Bash, Read, Write, Edit, AskUserQuestion

Workflow steps

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

  1. Resolve the target
  2. Read the release and every PR in it
  3. Ask about anything ambiguous — once, before drafting
  4. Draft in the house style
  5. Propose, then write

What it can do on your machine

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

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • Read
    • Write
    • Edit
    • AskUserQuestion

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • gh
    • python3

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

  • Network

    No URLs in SKILL.md. Its commands use 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

Release Highlights loads about 2k tokens when it runs. Until then it costs about 118 tokens; SKILL.md has 1,070 words of instructions outside code blocks.

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

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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash, Read, Write, Edit, AskUserQuestion

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 garfiec/Librechat-Mobile at commit bf2a609, republished under its MIT licence (© garfiec). 1,070 words, ~2,009 tokens.

Download SKILL.mdSave it as .claude/skills/release-highlights/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
release-highlights
description
Add a hand-written Highlights section to a GitHub release whose notes were auto-generated, summarizing the release's PRs in user-facing language above the generated changelog. Reads every PR in the range, drafts the section in the repo's house style, asks about ambiguous wording, and writes only after approval. Use when a release has shipped and its notes are still a bare What's Changed list, or when backfilling releases that never got Highlights.
allowed-tools
Bash, Read, Write, Edit, AskUserQuestion
argument-hint
[tag ...] (optional, defaults to the newest release) [--backfill] [--since <tag>]

Release Highlights

Adds a # Highlights section between the badge row and ## What's Changed on a published release. Nothing else about the release changes.

The invariant

Everything from ## What's Changed down is generated once, at publish time, and cannot be rebuilt. It carries the compare link, the New Contributors block, the build provenance attestation ID, and the CI run URL. Those come from the publish-time workflow run. If they are overwritten they are gone.

So: never regenerate a release body. Never call gh release edit --notes with prose you composed. Never let gh release create --generate-notes near an existing release. The only supported write is scripts/insert_highlights.py, which fetches the live body, splits it at the marker, and reassembles it with the tail byte-identical — then re-fetches and proves the tail did not change, printing a restore command if it did.

If the script refuses, that refusal is the feature. Do not work around it by editing the body by hand.

Steps

1. Resolve the target
  • No argument → the newest release: gh release list --repo garfiec/Librechat-Mobile --limit 1
  • Explicit tags → exactly those, in the order given.
  • --backfill → every release with no Highlights section. Enumerate them and confirm before touching any. There are releases going back to v0.1.1 that predate both calver and the Switchboard rename; they are almost never what the user meant. --since <tag> sets a floor. Backfill never runs implicitly.

Refuse a tag that already has a Highlights section. Replacing one is a separate, explicit request, and only then does --replace get passed.

2. Read the release and every PR in it
bash
gh release view "$TAG" --repo garfiec/Librechat-Mobile --json body -q .body

Extract the PR numbers from the What's Changed list, then read every one of them:

bash
for p in $PRS; do
  echo "=== #$p"
  gh pr view "$p" --json title,body -q '.title + "\n" + (.body | .[0:800])'
done

Read all of them, including the ones that look mechanical — a chore( prefix sometimes hides a user-visible change, and a feat( prefix sometimes hides pure plumbing. The title is a claim about the change, not a description of its effect; the body's Summary/Problem section is what tells you whether a user would notice.

For each PR decide one thing: what changes for someone using the app? If the answer is "nothing they could observe", it is not a Highlights bullet.

3. Ask about anything ambiguous — once, before drafting

Collect every uncertain item across the whole release and ask them in a single round. Do not draft first and ask afterwards, and do not interrupt per-PR.

What counts as ambiguous is not "I don't understand the change" — read the PR again for that. It is when the change is understood but its framing is a judgment call the user owns:

  • Was this broken in a shipped build, or never working at all? ("banners display again" vs. "banners display" — the first claims a regression that may never have existed)
  • Is a fix worth naming, or is it noise that belongs in the Misc lines?
  • Does a staged feature land in this release or the next one?
  • Is an internal-sounding change actually user-visible?

If nothing is ambiguous, ask nothing.

4. Draft in the house style
markdown
# Highlights

* Features
  * <short user-facing phrase>
* Bug Fixes
  * <short user-facing phrase>
* Performance Improvements
* Misc Tech Debt Refactors
* Misc Stability Improvements

Rules, in force regardless of what prior releases happen to look like:

  • Categories are fixed and ordered: Features, Bug Fixes, Performance Improvements, Misc Tech Debt Refactors, Misc Stability Improvements. Omit any with nothing to say — a release with no features has no Features line. A new top-level category is allowed when a release genuinely does not fit, but say so explicitly when presenting the draft.
  • A category with nothing nameable stays a bare bullet. * Performance Improvements with no children is correct and common; it signals the work happened without itemizing it.
  • Sub-bullets are user-facing effects, in the user's vocabulary, sentence case, no trailing period, no PR links, no PR numbers, no commit-message prefixes. "Two-factor authentication now works end to end", not "fix(auth): make 2FA login work end to end".
  • Collapse staged PRs into one bullet. A feature delivered across several PRs is one thing to a user. Five prefetch PRs (#335, #341, #342, #343, #344) are one line about background cache warming; three access-gateway PRs (#294, #298, #312) are one line about custom request headers.
  • Never name infrastructure work individually. Dependabot bumps, CI changes, test additions, Claude skills, dead-code removal, comment cleanups, docs — these fold into the two Misc lines and are never their own sub-bullet.
  • Lead with the most visible change. If the release renames the app or changes the launcher icon, that is the first bullet.
  • Keep it to roughly 3–6 sub-bullets per category. If Bug Fixes runs to ten, the tail of the list is Misc Stability Improvements.
Show full SKILL.md (321 more words)Show less
5. Propose, then write

Present the draft as a fenced markdown block, plus the judgment calls worth flagging. Do not write until the user approves.

On approval:

bash
python3 .claude/skills/release-highlights/scripts/insert_highlights.py \
  --tag "$TAG" --highlights-file "$HL" --apply

Drop --apply first to dry-run it. The script backs up the original body, refuses on a pre-existing Highlights section, refuses on a missing or duplicated marker, refuses on an empty body, and verifies the tail after writing. Report what it prints — including the backup path — rather than paraphrasing it as success.

If it exits non-zero after the write, run the restore command it printed immediately and say what happened.

Notes

  • Repo is garfiec/Librechat-Mobile; the local directory is LibreChat-Android for legacy reasons.
  • The app is Switchboard; LibreChat is the backend it talks to. Release notes describe Switchboard. Do not rename backend references.
  • GitHub stores release bodies with CRLF line endings. Any pipeline that normalizes them rewrites every line below the marker — the content survives, but the tail is no longer the bytes that were published. The script reads the body verbatim, matches the existing line ending when building the inserted block, and never converts. Do not pre-process a body through tr, sed, or a Python .replace("\r\n", "\n") on the way in.
  • GitHub appends a trailing newline to a body it stores. The script strips trailing whitespace before writing so repeat edits cannot accrete blank lines, and tolerates that single newline when verifying. Any other difference in the tail is treated as corruption.
  • Reading a body with -q .body is fine — that is what step 2 does. What must never happen is a write round-tripped that way (gh release view -q .body > f && edit f && gh release edit): that pipeline drops the CRLFs and appends a newline per pass.
  • --backfill and --since are instructions in this file, not flags on the script. Nothing enforces them; they hold only as long as they are followed. The script's own guards are --apply, --replace, and the refusals listed above.

© garfiec, 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 1 other file (scripts) in .claude/skills/release-highlights of garfiec/Librechat-Mobile.

  • SKILL.md
  • scripts/insert_highlights.py

Open the folder on GitHubat commit bf2a609

Compare with similar skills

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

Release Highlights compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Release Highlights this skillgarfiec/Librechat-Mobile111—~2kAutomated safety check: NotesMIT
Releasepwrdrvr/openclaw-codex-app-server265—~2.2kAutomated safety check: PassMIT
Releasedevoxx/DevoxxGenieIDEAPlugin684—~1.7kAutomated safety check: PassMIT
AI Release Hunterdavila7/claude-code-templates33k—~2.9kAutomated safety check: NotesMIT
Skills Constitutionjiabaobei/skills-constitution232—~5.6kAutomated safety check: PassMIT
Publish ReleaseAyuilos/Miffan217—~680Automated safety check: PassAGPL-3.0

Similar skills

  • 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
  • Release

    devoxx/DevoxxGenieIDEAPlugin

    Release a new version of the DevoxxGenie IntelliJ plugin — prompt for the target version, bump it in the build files, write a curated CHANGELOG.md entry and plugin.xml change-notes from the git/PR…

    684 GitHub stars~1.7k tokensUpdated 11 days ago
    DevelopmentAuto-check passed
  • AI Release Hunter

    davila7/claude-code-templates

    Daily digest of AI releases from Anthropic, Meta, Vercel Labs, OpenAI and Google GitHub repos, the Claude Cowork changelog, the claude.dev blog and Hacker News, deduplicated against a local state…

    33k GitHub stars~2.9k tokensUpdated today
    DevelopmentAuto-check: notes
  • Skills Constitution

    jiabaobei/skills-constitution

    当 Agent 接到专业任务(编码/爬虫/文件操作/API调用/数据分析/文档/部署/推送等)时,强制先查记忆层和技能索引,有匹配必用、无匹配必搜、答复时自动推荐(排除已装)。用于防止 Agent 跳过技能直接硬扛通用能力。跨平台通用(WorkBuddy/Claude/ChatGPT/Cursor/Gemini 等 20+ 框架)。完整版本史见 CHANGELOG.md。

    232 GitHub stars~5.6k tokensUpdated 7 days ago
    Agent WorkflowsAuto-check passed
  • Publish Release

    Ayuilos/Miffan

    Publish a GitHub release for this fork, with a bilingual changelog that separates fork-owned changes from changes introduced by upstream merges.

    217 GitHub stars~680 tokensUpdated today
    DevelopmentAuto-check passed
  • Release Swift

    robinebers/openusage

    Cut a release of OpenUsage (Swift menu-bar app): pick a version, generate a categorized changelog, tag from main, and publish the GitHub Release with notes.

    4.3k GitHub stars~1.6k tokensUpdated today
    DevelopmentAuto-check passed

More from garfiec/Librechat-Mobile

  • Audit Deps

    garfiec/Librechat-Mobile

    Audit open dependabot PRs in this repo. An agent skill from garfiec/Librechat-Mobile.

    111 GitHub stars~2.4k tokensUpdated today
    Auto-check: notes
  • Update Web Assets

    garfiec/Librechat-Mobile

    Update the third-party JavaScript vendored into the app for the artifact, diagram, and math WebViews (KaTeX, mermaid, marked, highlight.js, Tailwind, Babel, React).

    111 GitHub stars~1.8k tokensUpdated today
    Auto-check: notes
  • Audit I18n

    garfiec/Librechat-Mobile

    Audit localization / i18n coverage across the compose-resources surface (10 modules x 9 locales).

    111 GitHub stars~7.2k tokensUpdated today
    Auto-check: notes
  • Sync Upstream

    garfiec/Librechat-Mobile

    Sync the Switchboard client with a newer official LibreChat server version — a stable release, a release candidate, or a PARTIAL sync up to an untagged upstream commit (e.g.

    111 GitHub stars~3.4k tokensUpdated today
    Auto-check: notes

Works with

Questions about Release Highlights

What does Release Highlights do?

Add a hand-written Highlights section to a GitHub release whose notes were auto-generated, summarizing the release's PRs in user-facing language above the generated changelog. Release Highlights is an agent skill from garfiec/Librechat-Mobile. Add a hand-written Highlights section to a GitHub release whose notes were auto-generated, summarizing the release's PRs in user-facing language above the generated changelog.

When should I use Release Highlights?

Release Highlights fits situations like: A release has shipped and its notes are still a bare Whats Changed list; backfilling releases that never got Highlights.

How do I install Release Highlights in Claude Code?

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

How do I install Release Highlights in Codex?

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

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

What does Release Highlights need to run?

Going by SKILL.md and its folder, Release Highlights needs Python for the scripts in its folder and the command-line tools its instructions call (gh and python3). Our summary lists: Python 3. Its frontmatter pre-approves these tools: Bash, Read, Write, Edit, AskUserQuestion.

Does Release Highlights access the network?

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

Is Release Highlights safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. 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 Release Highlights use?

Release Highlights 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 Release Highlights use?

About 2k tokens (SKILL.md is roughly 8k 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 Release Highlights?

Skills that share tags, products or a category with Release Highlights: Release (pwrdrvr/openclaw-codex-app-server, 265 stars), Release (devoxx/DevoxxGenieIDEAPlugin, 684 stars), AI Release Hunter (davila7/claude-code-templates, 33k stars) and Skills Constitution (jiabaobei/skills-constitution, 232 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Release Highlights?

garfiec (a GitHub user) maintains it in garfiec/Librechat-Mobile, which has 111 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 10, 2026.

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