Agent skill

Release Notes

by batfish in batfish/batfish

Draft the GitHub release notes for a new Batfish release. An agent skill from batfish/batfish.

Apache-2.0Auto-check passedDevelopment

Install Release Notes

skills CLI
$ npx skills add batfish/batfish --skill release-notes -a claude-code

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

GitHub CLI
$ gh skill install batfish/batfish release-notes --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/batfish/batfish.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release-notes .claude/skills/release-notes && 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-notes
GitHub stars
1.5k
Token cost
~1.9k tokens
SKILL.md length
898 words
Files
1
Skills in repo
2
Repo updated
First seen
Licence
Apache-2.0

At a glance

Draft the GitHub release notes for a new Batfish release. An agent skill from batfish/batfish.

  • Works in 9 steps: Read the last two releases first → Seed the mechanical parts → Survey the range and find the themes → …
  • Draft release notes
  • SKILL.md covers 1. Read the last two releases…, 2. Seed the mechanical parts, 3. Survey the range and find… and 4. Credit whoever asked for…, plus 5 more sections
  • Calls gh and git

What it does

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.

When your agent uses it

  • Draft release notes
  • Summarize what changed since the last tag

Example prompts

  • “/release-notes”

Requirements

  • Docker

Workflow steps

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

  1. Read the last two releases first
  2. Seed the mechanical parts
  3. Survey the range and find the themes
  4. Credit whoever asked for the change
  5. Ground cross-repo claims in the other repo
  6. Decide what belongs
  7. Call out breaking changes explicitly
  8. Create it as an unpublished draft
  9. Writing the bullets

What it can do on your machine

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

    • gh
    • git

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

  • Network

    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.

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

Always · name and description, kept in context so the agent knows when to use it
~93
When it runs · the whole SKILL.md, loaded when a task matches
~1.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); files beside SKILL.md are not scanned.

SKILL.md

The full file from batfish/batfish at commit a7797d4, republished under its Apache-2.0 licence (© batfish). 898 words, ~1,895 tokens.

Download SKILL.mdSave it as .claude/skills/release-notes/SKILL.md (or your agent's skills folder).
name
release-notes
description
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.

Drafting a Batfish release

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:

  • Transcribing the shortlog. A bullet per merged PR, or a curated list that still includes refactors, dependency bumps, and engine internals. The signal is buried and the notes go unread.
  • Uncredited contributions. A fix lands because somebody outside the project filed a good issue, and the notes never say so. Most of these are invisible in git log, because the fix was authored by a maintainer — see step 4.

1. Read the last two releases first

The format has changed between releases; the most recent one is the model, not the older ones.

bash
gh release list --repo batfish/batfish --limit 5
gh release view <previous-tag> --repo batfish/batfish

Tags 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.

2. Seed the mechanical parts

GitHub can compute the PR list and the first-time-contributor list:

bash
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.md

Take ## 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.

3. Survey the range and find the themes

bash
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 -40

A 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.

4. Credit whoever asked for the change

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:

bash
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' | sort

Anything 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.

5. Ground cross-repo claims in the other repo

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.

Show full SKILL.md (395 more words)Show less

6. Decide what belongs

IncludeLeave out
New vendors and config formatsRefactors, 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 vendorInternal 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 seeGrammar hygiene, test-only changes, CI
Breaking changesDocs 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.

7. Call out breaking changes explicitly

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.

8. Create it as an unpublished draft

Write the body to working/release-notes.md and never publish:

bash
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.md

Mechanics 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.

9. Writing the bullets

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.

  • The change, not the implementation. "IKE gateways and IPsec tunnels are modeled" beats naming the classes that model them.
  • Group by vendor or theme, one bullet each, with the specifics as a clause: a bullet per PR fragments what is really one story.
  • No implementation-detail nouns. Class names, grammar rule names, and PR titles are for the changelog.
  • Stop at the claim. Do not append a clause explaining why it matters.
  • Fifteen to twenty bullets for a year of work is right. Prefer cutting a bullet to shortening every bullet.

© 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

Files

Just SKILL.md in .claude/skills/release-notes of batfish/batfish.

Open the folder on GitHubat commit a7797d4

Compare with similar skills

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.

Release Notes compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Release Notes this skillbatfish/batfish1.5k—~1.9kAutomated safety check: PassApache-2.0
Cutting A ReleaseTriliumNext/Trilium38k—~3.2kAutomated safety check: PassAGPL-3.0
Mole CLI Release Flowtw93/Mole70k—~2.6kAutomated safety check: PassGPL-3.0
Draft Release Notesjamiepine/voicebox57k—~941Automated safety check: PassMIT
Mole Release Notes Publishertw93/Mole70k—~1.9kAutomated safety check: PassGPL-3.0
Release Bumpjamiepine/voicebox57k—~1.1kAutomated safety check: PassMIT

Similar skills

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

    38k GitHub stars~3.2k tokensUpdated today
    DevelopmentAuto-check passed
  • 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.

    70k GitHub stars~2.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Draft 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.

    57k GitHub stars~941 tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • 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.

    70k GitHub stars~1.9k tokensUpdated today
    DevelopmentAuto-check passed
  • Release Bump

    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.

    57k GitHub stars~1.1k tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Cut Release

    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.

    2.7k GitHub stars~2k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed

More from batfish/batfish

  • Review Vendor PR

    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/…

    1.5k GitHub stars~6.8k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Release Notes

What does Release Notes do?

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.

When should I use Release Notes?

Release Notes fits situations like: draft release notes; summarize what changed since the last tag.

How do I install Release Notes in Claude Code?

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.

How do I install Release Notes in Codex?

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.

Can I use Release Notes 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 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.

What does Release Notes need to run?

Going by SKILL.md and its folder, Release Notes needs the command-line tools its instructions call (gh and git). Our summary lists: Docker.

Does Release Notes access the network?

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.

Is Release Notes 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 Release Notes use?

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.

How many tokens does Release Notes use?

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.

What are the alternatives to Release Notes?

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.

Who maintains Release Notes?

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.