Cutting A Release
TriliumNext/Trilium
A skill your agent uses when cutting, preparing, or debugging a Trilium release — bumping the monorepo version, tagging, or diagnosing a failed "Release" workflow run.
Draft the GitHub release notes for a new Batfish release. An agent skill from batfish/batfish.
$ npx skills add batfish/batfish --skill release-notes -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install batfish/batfish release-notes --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/batfish/batfish.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release-notes .claude/skills/release-notes && 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 "release-notes" agent skill from https://github.com/batfish/batfish/tree/master/.claude/skills/release-notes into .claude/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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/batfish/batfish/tree/master/.claude/skills/release-notesType 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 batfish/batfish --skill release-notes -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install batfish/batfish release-notes --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/batfish/batfish.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/release-notes .agents/skills/release-notes && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "release-notes" agent skill from https://github.com/batfish/batfish/tree/master/.claude/skills/release-notes into .agents/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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 batfish/batfish --skill release-notes -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install batfish/batfish release-notes --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/batfish/batfish.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/release-notes .cursor/skills/release-notes && 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 "release-notes" agent skill from https://github.com/batfish/batfish/tree/master/.claude/skills/release-notes into .cursor/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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/batfish/batfish.git --path .claude/skills/release-notes--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 batfish/batfish --skill release-notes -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install batfish/batfish release-notes --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/batfish/batfish.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/release-notes .gemini/skills/release-notes && 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 "release-notes" agent skill from https://github.com/batfish/batfish/tree/master/.claude/skills/release-notes into .gemini/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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 batfish/batfish release-notesInstalls 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 batfish/batfish --skill release-notes -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/batfish/batfish.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/release-notes .github/skills/release-notes && 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 "release-notes" agent skill from https://github.com/batfish/batfish/tree/master/.claude/skills/release-notes into .github/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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 batfish/batfish --skill release-notes -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install batfish/batfish release-notes --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/batfish/batfish.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/release-notes .opencode/skills/release-notes && 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 "release-notes" agent skill from https://github.com/batfish/batfish/tree/master/.claude/skills/release-notes into .opencode/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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.
release-notesDraft the GitHub release notes for a new Batfish release. An agent skill from batfish/batfish.
Release Notes is an agent skill from batfish/batfish. Draft the GitHub release notes for a new Batfish release. Use when asked to prep or cut a release, draft release notes, or summarize what changed since the last tag. Produces a short curated summary written for someone deciding whether to upgrade, credits the people who filed the issues behind each change, and leaves it as an unpublished draft for review.
Its SKILL.md is about 1.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. The repository describes itself as: Batfish is a network configuration analysis tool that can find bugs and guarantee the correctness of (planned or current) network configurations. It enables network engineers to… The licence is Apache-2.0.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit a7797d4. 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:
ghgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh and git, which can reach the network depending on how they are called.
From 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.
Release Notes loads about 1.9k tokens when it runs. Until then it costs about 93 tokens; SKILL.md has 898 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 batfish/batfish at commit a7797d4, republished under its Apache-2.0 licence (© batfish). 898 words, ~1,895 tokens.
.claude/skills/release-notes/SKILL.md (or your agent's skills folder).A release covers 500+ commits, and almost none of them belong in the notes. The
reader is an operator deciding whether to upgrade and what will break, not a
contributor reading the diff. Anything they cannot observe from outside Batfish
is noise — the **Full Changelog** link at the bottom is what serves anyone who
wants the commit-by-commit view.
Two failure modes dominate:
git log, because the fix was authored by a maintainer — see step 4.The format has changed between releases; the most recent one is the model, not the older ones.
gh release list --repo batfish/batfish --limit 5
gh release view <previous-tag> --repo batfish/batfishTags are date-based (v2026.08.27). Ask which date to use rather than
guessing: it goes in the title, the tag, and the changelog link.
GitHub can compute the PR list and the first-time-contributor list:
gh api -X POST repos/batfish/batfish/releases/generate-notes \
-f tag_name=<new-tag> -f target_commitish=master \
-f previous_tag_name=<previous-tag> -q .body > working/generated-notes.mdTake ## New Contributors only, and strip bot lines (dependabot[bot],
github-actions[bot]) and any @dhalperi with @Copilot line — a maintainer is
not a new contributor. The generated PR list is raw material for step 3, not
something to paste in.
PREV=v2025.07.07
git fetch origin master --tags
git log --oneline "$PREV"..origin/master | wc -l
# who did the work, bots included, so you know what to discount
git log --format='%an' "$PREV"..origin/master | sort | uniq -c | sort -rn
# what areas moved: subject prefixes, most-touched first
git log --format='%s' "$PREV"..origin/master \
| sed -E 's/ \(#[0-9]+\)$//; s/:.*//' | sort | uniq -c | sort -rn | head -40A prefix with 30+ commits and no prior release note is usually a new vendor or a new subsystem — that is the headline. Read the whole non-bot PR list from step 2 once; it is a few hundred lines and there is no substitute for reading it.
Fixes trailers find only some of it. Many fixes land with no trailer, and
the reporter's name appears nowhere in the commit. Sweep closed issues over the
release window instead, then read the authors:
git log --format='===%h|%s%n%b' "$PREV"..origin/master \
| awk '/^===/{c=$0} /(Fixes|For|Closes) batfish\/batfish#[0-9]+/{print c" >> "$0}'
gh issue list --repo batfish/batfish --state closed --limit 200 \
--search "closed:>=<previous-release-date>" \
--json number,title,author,closedAt \
-q '.[] | [.closedAt[0:10], .number, .author.login, .title] | @tsv' | sortAnything authored by someone outside the project is a credit. Confirm what closed
it before claiming the fix (gh api repos/batfish/batfish/issues/<N>/timeline),
since issues also get closed as stale or as duplicates.
Credit inline, next to the change, not in a trailing thank-you list:
(#10113, thanks @user). Long-open feature requests are worth naming
specifically, along with anyone who made the work possible — a vendor contact who
supplied a lab image counts.
Users experience Batfish through the Docker images and pybatfish, so packaging
and client features belong in these notes even though they are not in this
repo's log. They are also the claims most easily gotten wrong, so read the source
rather than recalling it: batfish/docker for image and publishing changes
(check .github/workflows/reusable-upload.yml for what platforms actually get
pushed), batfish/pybatfish for the client and the MCP server (pyproject.toml
for the extra and entry point, pybatfish/mcp/server.py for the tool set). Say
which component ships the feature, and carry over any beta warning the code
itself states.
| Include | Leave out |
|---|---|
| New vendors and config formats | Refactors, renames, code organization |
| New user-facing capability (MCP server, image platforms, new questions) | Dependency and lockfile churn |
| Vendor modeling fixes and new syntax support, grouped by vendor | Internal performance work, BDD/engine internals |
| Protocol correctness fixes (BGP, OSPF, IS-IS, EVPN) | Symbolic route policy engine internals |
| New or changed warnings that alter what users see | Grammar hygiene, test-only changes, CI |
| Breaking changes | Docs and developer tooling, unless a contributor-facing release |
Collapse everything internal into a single line — "General performance and scaling work throughout the stack, covering parsing, preprocessing, and the dataplane" — rather than enumerating it.
Give these their own short list under a Breaking changes: heading, even if past
releases had no such section. Anything that silently changes results or stops a
working setup qualifies: a raised JDK floor, removed question columns, removed
entry points. Name the replacement where there is one. Be specific about which
component: "the Java Batfish CLI's interactive mode" and "pybatfish" are
different things to a reader.
Write the body to working/release-notes.md and never publish:
gh release create <new-tag> --repo batfish/batfish --draft --target master \
--title "Batfish <new-tag>" --notes-file working/release-notes.md
gh release edit <untagged-id> --repo batfish/batfish --notes-file working/release-notes.mdMechanics worth knowing: a draft has no real tag yet, so gh addresses it by an
untagged-<hash> id, and that id changes on every edit — take the URL from
each command's output rather than reusing the previous one. --tag and --title
on gh release edit retag a draft cleanly if the date changes, but the
**Full Changelog** link is plain text in the body and must be edited too.
Publishing is the user's call; hand them the draft URL.
Bullets are prose, one sentence or two, no bold-first labels. State what changed and what a user can now do. Bold only the headline items, such as a new vendor.
© batfish, Apache-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/release-notes of batfish/batfish.
Open the folder on GitHubat commit a7797d4
Release Notes 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 |
|---|---|---|---|---|---|---|
| Release Notes this skillbatfish/batfish | 1.5k | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| 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 | |
| Draft Release Notesjamiepine/voicebox | 57k | — | ~941 | Automated safety check: Pass | MIT | |
| Mole Release Notes Publishertw93/Mole | 70k | — | ~1.9k | Automated safety check: Pass | GPL-3.0 | |
| Release Bumpjamiepine/voicebox | 57k | — | ~1.1k | Automated safety check: Pass | MIT |
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.
jamiepine/voicebox
Writes or refreshes the Unreleased section of CHANGELOG.md as a themed narrative built from the commits, PRs and diff since the last version tag.
tw93/Mole
Publishes curated, bilingual release notes for an existing Mole version tag with gh release edit, including contributor thanks and reactions, after the release workflow finishes.
jamiepine/voicebox
Ends a release cycle by moving the Unreleased changelog notes under a dated version heading, bumping version files with bumpversion and tagging the commit.
jfernandez/bpftop
Cut a new versioned release of bpftop — pick the version, open a version-bump PR, sign-tag the merge commit on main, and draft GitHub release notes in the project's established format.
batfish/batfish
Review a Batfish PR that touches vendor config handling - any .g4 grammar, an extractor or ConfigurationBuilder under a grammar/ directory, vendor model classes under representation/ or vendor/…
Works with
Categories
Draft the GitHub release notes for a new Batfish release. An agent skill from batfish/batfish. Release Notes is an agent skill from batfish/batfish. Draft the GitHub release notes for a new Batfish release.
Release Notes fits situations like: draft release notes; summarize what changed since the last tag.
Run `npx skills add batfish/batfish --skill release-notes -a claude-code`. Or copy the skill folder (.claude/skills/release-notes in batfish/batfish) into .claude/skills/release-notes in your project. Claude Code loads it when a task matches its description.
Run `npx skills add batfish/batfish --skill release-notes -a codex`. Or copy the skill folder (.claude/skills/release-notes in batfish/batfish) into .agents/skills/release-notes 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 batfish/batfish --skill release-notes -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-notes, .gemini/skills/release-notes, .github/skills/release-notes and .opencode/skills/release-notes in your project.
Going by SKILL.md and its folder, Release Notes needs the command-line tools its instructions call (gh and git). Our summary lists: Docker.
SKILL.md contains no URLs. Its commands use gh and git, which can reach the network depending on how they are called. 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.
Release Notes is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.6k 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 Release Notes: Cutting A Release (TriliumNext/Trilium, 38k stars), Mole CLI Release Flow (tw93/Mole, 70k stars), Draft Release Notes (jamiepine/voicebox, 57k stars) and Mole Release Notes Publisher (tw93/Mole, 70k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
batfish (a GitHub organization) maintains it in batfish/batfish, which has 1,498 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 9, 2026.
Source: batfish/batfish on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.