Agent skill

Write Release Notes

by imbue-ai in imbue-ai/sculptor

Summarize commits merged to origin/main as two outputs: internal release notes (categorized into Features, UI Polish, Testing, CI, Cleanup) and user-facing release notes (What's new, Improvements…

MITAuto-check passedDevelopment

Install Write Release Notes

skills CLI
$ npx skills add imbue-ai/sculptor --skill write-release-notes -a claude-code

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

GitHub CLI
$ gh skill install imbue-ai/sculptor write-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/imbue-ai/sculptor.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/write-release-notes .claude/skills/write-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
write-release-notes
GitHub stars
236
Token cost
~3.1k tokens
SKILL.md length
1,479 words
Files
1
Skills in repo
29
Repo updated
First seen
Licence
MIT

At a glance

Summarize commits merged to origin/main as two outputs: internal release notes (categorized into Features, UI Polish, Testing, CI, Cleanup) and user-facing release notes (What's new, Improvements…

  • Works in 6 steps: Resolve the commit range → Fetch merge commits → Categorize commits → …
  • Tasks that involve Changelog and release notes
  • SKILL.md covers Input, Step 1: Resolve the commit range, Step 2: Fetch merge commits and Step 3: Categorize commits, plus 4 more sections
  • Calls git

What it does

Write Release Notes is an agent skill from imbue-ai/sculptor. Summarize commits merged to origin/main as two outputs: internal release notes (categorized into Features, UI Polish, Testing, CI, Cleanup) and user-facing release notes (What's new, Improvements, Reliability). Two input modes: a Sculptor release version (e.g., "0.27") for single-release notes, or a date range (e.g., "Feb 14-23") for ad-hoc weekly notes. Defaults to the last 7 days.

Its SKILL.md is about 3.1k 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 and UI design. The repository describes itself as: Build product with grounded, parallel coding agents. The licence is MIT.

When your agent uses it

  • Tasks that involve Changelog and release notes
  • Tasks that involve UI design

Example prompts

  • “) for single-release notes, or a date range (e.g.,”
  • “/write-release-notes”

Workflow steps

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

  1. Resolve the commit range
  2. Fetch merge commits
  3. Categorize commits
  4. Consolidate and summarize
  5. Build the user-facing view
  6. Output format

What it can do on your machine

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

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

  • Network

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

Write Release Notes loads about 3.1k tokens when it runs. Until then it costs about 101 tokens; SKILL.md has 1,479 words of instructions outside code blocks.

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

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 imbue-ai/sculptor at commit f847102, republished under its MIT licence (© imbue-ai). 1,479 words, ~3,070 tokens.

Download SKILL.mdSave it as .claude/skills/write-release-notes/SKILL.md (or your agent's skills folder).
name
write-release-notes
description
Summarize commits merged to origin/main as two outputs: internal release notes (categorized into Features, UI Polish, Testing, CI, Cleanup) and user-facing release notes (What's new, Improvements, Reliability). Two input modes: a Sculptor release version (e.g., "0.27") for single-release notes, or a date range (e.g., "Feb 14-23") for ad-hoc weekly notes. Defaults to the last 7 days.
argument-hint
release-version | date-range

Write Release Notes

Produce a concise summary of work merged to origin/main. Two modes:

  • Release mode — summarize one Sculptor release (commits between the prior release tag and this release's tag or branch). Use when cutting or promoting a release.
  • Date-range mode — summarize work landed in a date window. Use for weekly status updates.

In both modes, produce two outputs in the same message:

  1. Internal release notes — the full categorized breakdown (Features, UI Polish, Testing, CI, Cleanup). For engineers and the team.
  2. User-facing release notes — a shorter, curated view (What's new, Improvements, Reliability) scoped to changes a typical user will notice.

The user-facing view is derived from the internal one by filtering and regrouping; it is not a separate analysis pass.

Input

Argument: $ARGUMENTS

Mode detection:

  • If the argument matches \d+\.\d+(\.\d+)? (optionally prefixed with v), treat it as a release version. Examples: 0.27, 0.27.0, v0.27.
  • Otherwise, treat it as a date range.
  • If no argument is provided, default to date-range mode with the last 7 days (relative to today's date).

Step 1: Resolve the commit range

Release mode

Normalize the version to X.Y.0 (e.g., 0.27 → 0.27.0).

Fetch tags first:

bash
git fetch origin --tags --quiet

Endpoint (tip of this release):

  • If sculptor-v{X.Y.0} tag exists, use it (release was promoted).
  • Else if origin/release/sculptor-v{X.Y.0} branch exists, use that (release is still in flight on RCs).
  • Else, abort and tell the user the release hasn't been cut yet.
bash
git rev-parse --verify sculptor-v{X.Y.0} 2>/dev/null \
  || git rev-parse --verify origin/release/sculptor-v{X.Y.0} 2>/dev/null

Start point (prior release tag, exclusive):

bash
git tag -l 'sculptor-v*' | grep -v rc | sort -V

Pick the highest tag whose version is strictly less than X.Y.0. That's the prior release. Don't assume X.Y-1 — version numbers can skip (e.g., 0.18 → 0.20, 0.22 → 0.24).

The range is <prev_tag>..<endpoint>. Example for 0.27 in flight: sculptor-v0.26.0..origin/release/sculptor-v0.27.0.

Date-range mode

Parse the argument into a start date and end date (both inclusive). Examples:

  • Feb 14-23 means Feb 14 through Feb 23
  • Feb 14 - Feb 23 means Feb 14 through Feb 23
  • last 7 days means 7 days ago through today
  • last week means 7 days ago through today
  • 2026-02-14 2026-02-23 means Feb 14 through Feb 23

If the input is ambiguous, ask the user to clarify.

Step 2: Fetch merge commits

What matters for release notes is when work landed on main (became available to users), not when the developer authored the commits. Use merge commits to determine this, since this repo uses a no-fast-forward merge strategy — every MR creates a merge commit.

Release mode
bash
git fetch origin --quiet
git log <prev_tag>..<endpoint> --merges --first-parent --format="%h %s"

--first-parent follows only the main / release-branch spine, so you get exactly the MR-level merge commits that landed (no internal merges from inside any single MR's history).

Then, to get individual commits for context (needed for categorization):

bash
git log <prev_tag>..<endpoint> --no-merges --format="%h %s"
Date-range mode
bash
git fetch origin main --quiet
git log origin/main --merges --after="<start-date>T00:00:00" --before="<end-date>T23:59:59" --format="%h %s"

Use the actual start and end dates with explicit times — T00:00:00 for the start and T23:59:59 for the end — so the range is inclusive on both sides. Do NOT use the "offset by one day" trick with date-only strings; git's approxidate parser handles bare dates inconsistently and will include commits outside the intended range.

For merge commits, the author date equals the merge time, so --after/--before filtering is accurate.

Then, to get the detailed individual commits for each MR (needed for categorization), run:

bash
git log origin/main --no-merges --after="<start-date>T00:00:00" --before="<end-date>T23:59:59" --format="%h %s"
Source-of-truth rule (both modes)

Use the merge commit list as the source of truth for what's included — if individual commits appear in the --no-merges output but their MR's merge commit is outside the chosen range, exclude them. Conversely, if a merge commit is in range but some of its individual commits have author dates outside the range, still include that work.

If the output is very large, save it to a temporary file and read it with the Read tool.

Step 3: Categorize commits

Read every commit message and sort each commit into exactly one of these categories:

Features

New user-facing capabilities, new API endpoints, new UI components, new backend services, new integrations. A feature is something that adds functionality that didn't exist before.

UI Polish

Bug fixes, visual tweaks, UX improvements, performance optimizations, and behavioral fixes to existing features. If a commit fixes, polishes, or improves something that already existed, it goes here — not in Features.

Testing

New test suites, test infrastructure, test migration, flaky test fixes, regression tests, test utilities, test skills. Anything whose primary purpose is improving test coverage or test reliability.

CI

CI pipeline changes, build system changes, CI job additions/removals, CI worker configuration, CI-specific fixes.

Cleanup

Dead code removal, refactoring with no behavior change, dependency removal, code quality sweeps, migration cleanup, removing deprecated features.

Categorization guidelines
  • A commit that adds a new feature AND its tests goes in Features (the tests are part of the feature).
  • A commit that adds tests for an existing feature goes in Testing.
  • New test infrastructure, test tooling, or test frameworks go in Testing — even if built from scratch — because their purpose is testing, not user-facing functionality.
  • A commit that fixes a bug goes in UI Polish, not Features.
  • A commit that removes a feature entirely goes in Cleanup.
  • Design docs and implementation plans go in Features (they're part of a feature's delivery).
  • If a commit truly doesn't fit any category, include it in the closest match.
Show full SKILL.md (641 more words)Show less

Step 4: Consolidate and summarize

Within each category, group related commits into single line items. For example, 15 commits for "Cmd+F Chat Search" become one bullet point, not 15.

Sort items within each category by significance — most impactful first. Rank by a mix of: (a) how many users it affects daily, (b) whether it's a new capability vs. an incremental improvement, and (c) architectural significance. User-facing workflow changes rank above infrastructure; foundational-but-invisible work ranks last.

Each bullet point must be:

  • 10 words or fewer
  • Formatted as: • *Label:* concise description
  • The label is a short feature/area name (2-4 words)
  • The description completes the thought

Good example:

• *Cmd+F Chat Search:* In-chat find with highlighting, navigation, and scroll

Bad example (too long):

• *Cmd+F Chat Search:* Implemented in-chat find functionality with CSS Custom Highlight API for match rendering, next/prev navigation with scroll-to-match, auto-expand of collapsed tool calls, and extensive polish

Step 5: Build the user-facing view

The user-facing view is a curated subset of the internal list, regrouped into three sections. Start from the internal categories you already produced — don't re-analyze the commits.

Sections

What's new Genuinely new capabilities or new default behaviors — things users couldn't do before, or that they now do differently by default. Usually 0–2 bullets per release. Omit the section if nothing qualifies.

Improvements Polish to features that already worked: visible UX wins, performance, clearer interactions, richer rendering. The thing existed; it's now better.

Reliability Bug fixes, stability work, and error-path improvements. Anything that fixes broken behavior. Include both stability work users will perceive (retries, clearer errors on transient failures) and visible defects (incorrect counts, sort order, dark-mode flashes) that now render correctly.

Filter rules

Include an item only if a typical user — not a developer or maintainer — would plausibly notice. Exclude:

  • Developer-only tools (devtools panels, in-app debug helpers)
  • Internal observability / telemetry (PostHog events, Sentry instrumentation)
  • Environment-variable knobs and other unsurfaced configuration (env vars are almost never user-facing — they exist for internal dev or escape-hatch use, not as documented product features)
  • Tests, CI, build infrastructure
  • Refactors and cleanup with no visible behavior change
  • Accessibility tweaks (unless a major a11y initiative for the release)
  • Backend internal stability with no user-perceptible effect (subprocess leaks, race fixes deep in the harness)

When uncertain, exclude — the user-facing list should feel curated, not exhaustive.

Keep the user-facing view public-safe: no real people's names, internal hostnames/service/tool names, or customer data — it is world-readable. (The internal notes may keep team-facing detail.) Same scrubbing as CLAUDE.md's "Public Visibility" section.

Mapping from internal categories
  • Internal Features → user-facing What's new (only if genuinely new to users; dev-only features are excluded entirely).
  • Internal UI Polish → split between Improvements (things that already worked and are now better) and Reliability (visible defects, incorrect behavior, error-path bugs that are now fixed).
  • Internal Testing / CI / Cleanup → excluded from the user-facing view unless something there has a direct user impact worth flagging.

Visible bug fixes that look like polish (e.g., a flash on load, wrong sort order, doubled counters) go in Reliability, not Improvements — the defect existed and now it doesn't.

Same formatting rules apply: ≤10 words per bullet, • *Label:* description, sorted by user impact within each section.

Step 6: Output format

Output both reports in the same message, each in its own code fence, internal first, then user-facing. Use Slack-compatible formatting throughout: *text* for bold (single asterisks), • for bullet points, no heading syntax — just bold the section names.

Internal release notes
*Internal release notes for <title>*

*Features*
• *Label:* concise description

*UI Polish*
• *Label:* concise description

*Testing*
• *Label:* concise description

*CI*
• *Label:* concise description

*Cleanup*
• *Label:* concise description
User-facing release notes
*<title heading>*

*What's new*
• *Label:* concise description

*Improvements*
• *Label:* concise description

*Reliability*
• *Label:* concise description
Titles

Internal title:

  • Release mode — *Internal release notes for v0.27* (use major.minor only, no patch suffix).
  • Date-range mode — *Internal release notes for <human-readable date range>* (e.g., Feb 14–23).

User-facing title:

  • Release mode — *Sculptor v0.27*.
  • Date-range mode — *Sculptor <human-readable date range>*.

Omit any section that has zero items in either output.

Do not

  • Include commit hashes in the output
  • Exceed 10 words per bullet point
  • Create a bullet point for every individual commit — always consolidate related work
  • Include a section header if it has no items
  • Pad the user-facing view with internal-only items just to fill a section
  • Repeat the user-facing view verbatim — it's a curated subset, not a copy

© imbue-ai, MIT. 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/write-release-notes of imbue-ai/sculptor.

Open the folder on GitHubat commit f847102

Compare with similar skills

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

Write Release Notes compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Write Release Notes this skillimbue-ai/sculptor236—~3.1kAutomated safety check: PassMIT
Simple Englishmoeru-ai/airi50k2 repos~4.6kAutomated safety check: PassMIT
StarRocks Release NotesStarRocks/starrocks12k—~1.9kAutomated safety check: NotesApache-2.0
Cutting A ReleaseTriliumNext/Trilium38k—~3.2kAutomated safety check: PassAGPL-3.0
React Router Release Notes Prepremix-run/react-router57k—~1.1kAutomated safety check: PassMIT
Mole CLI Release Flowtw93/Mole69k—~2.5kAutomated safety check: PassGPL-3.0

Similar skills

  • Simple English

    moeru-ai/airi

    Write or rewrite technical text with the rules of ASD-STE100 Simplified Technical English so it is clear, unambiguous, and free of AI slop.

    50k GitHub starsUsed in 2 repos~4.6k tokens
    DevelopmentAuto-check passed
  • StarRocks Release Notes

    StarRocks/starrocks

    Drafts English release notes for a StarRocks patch release from the PRs merged into its release branch, then opens a documentation PR and hands translation to /translate.

    12k GitHub stars~1.9k tokensUpdated today
    DevelopmentAuto-check: notes
  • 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
  • React Router Release Notes Prep

    remix-run/react-router

    Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.

    57k GitHub stars~1.1k tokensUpdated yesterday
    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.

    69k GitHub stars~2.5k tokensUpdated today
    DevelopmentAuto-check passed
  • Release

    PrefectHQ/fastmcp

    Cut a FastMCP release end to end. An agent skill from PrefectHQ/fastmcp.

    28k GitHub stars~2.9k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from imbue-ai/sculptor

All 29 skills in this repo
  • Auto QA Iphone

    imbue-ai/sculptor

    QA the Sculptor mobile web UI on a real iOS Simulator, driven headlessly from a Mac.

    236 GitHub stars~3.1k tokensUpdated yesterday
    Auto-check passed
  • Measure React Renders

    imbue-ai/sculptor

    Compare React component render counts between origin/main and the current branch during a user-defined UI scenario (e.g.

    236 GitHub stars~603 tokensUpdated yesterday
    Auto-check passed
  • Post PR To Slack

    imbue-ai/sculptor

    Post a one-line PR announcement to a Slack channel, and mark it :merged: when the PR merges.

    236 GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed
  • Batch Claude Runner

    imbue-ai/sculptor

    Run Claude programmatically against collections of files in the codebase.

    236 GitHub stars~308 tokensUpdated yesterday
    Auto-check passed
  • Build Sculptor Extension

    imbue-ai/sculptor

    Build or modify a Sculptor extension — a runtime ESM module loaded into the Sculptor UI.

    236 GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Code Review Checklist

    imbue-ai/sculptor

    Review a set of code changes against Sculptor's review categories and produce a markdown findings table.

    236 GitHub stars~3.6k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Write Release Notes

What does Write Release Notes do?

Summarize commits merged to origin/main as two outputs: internal release notes (categorized into Features, UI Polish, Testing, CI, Cleanup) and user-facing release notes (What's new, Improvements…. Write Release Notes is an agent skill from imbue-ai/sculptor. Summarize commits merged to origin/main as two outputs: internal release notes (categorized into Features, UI Polish, Testing, CI, Cleanup) and user-facing release notes (What's new, Improvements, Reliability).

When should I use Write Release Notes?

Write Release Notes fits situations like: tasks that involve Changelog and release notes; tasks that involve UI design.

How do I install Write Release Notes in Claude Code?

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

How do I install Write Release Notes in Codex?

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

Can I use Write 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 imbue-ai/sculptor --skill write-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/write-release-notes, .gemini/skills/write-release-notes, .github/skills/write-release-notes and .opencode/skills/write-release-notes in your project.

What does Write Release Notes need to run?

Going by SKILL.md and its folder, Write Release Notes needs the command-line tools its instructions call (git).

Does Write Release Notes access the network?

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

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

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

About 3.1k tokens (SKILL.md is roughly 12k 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 Write Release Notes?

Skills that share tags, products or a category with Write Release Notes: Simple English (moeru-ai/airi, 50k stars), StarRocks Release Notes (StarRocks/starrocks, 12k stars), Cutting A Release (TriliumNext/Trilium, 38k stars) and React Router Release Notes Prep (remix-run/react-router, 57k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Write Release Notes?

imbue-ai (a GitHub organization) maintains it in imbue-ai/sculptor, which has 236 GitHub stars. The repository holds 29 skills in this directory. The repository was last updated on October 6, 2026.

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