원클릭으로
release-notes
// Generate release notes for major/minor releases. Use when user says "release notes", "write release notes", "draft changelog", "prepare release announcement", "what changed since last release", or "generate upgrade guide".
// Generate release notes for major/minor releases. Use when user says "release notes", "write release notes", "draft changelog", "prepare release announcement", "what changed since last release", or "generate upgrade guide".
Triage inbox emails with himalaya. Use when user says "check email", "triage email", "email triage", "check inbox", "process email", "email me", "what emails do I have", "clear inbox", "inbox zero", "follow ups", "awaiting reply", "who hasn't replied", or "chase up".
Find deepening opportunities in a TypeScript package, leaning on TS-package-native seams (package.json `exports`, subpath/conditional exports, workspace `packages/*`, factories + hooks, plugin shapes, citty/hookable/unbuild conventions). Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a TS library/CLI/monorepo more testable and AI-navigable. Works on single-repo packages and pnpm monorepos.
Triage open issues by difficulty and impact. Use when user says "review issues", "triage issues", "what should I work on", "prioritize backlog", "rank issues", "find quick wins", or "what's high priority".
Find deepening opportunities in a Nuxt codebase, leaning on Nuxt-native seams (hooks, modules, layers, plugins, composables, server routes, nitro, runtime config). Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a Nuxt app/module more testable and AI-navigable.
Use when user asks to "conform package", "check standards", "sync package", "audit project config", "update catalogs", "add github actions", "setup eslint", "configure vitest", "init package", "create npm package", "scaffold project", "init nuxt module", "create nuxt module", "scaffold module", "sync nuxt module", "add playground", "setup test fixtures", "configure @nuxt/test-utils", or needs help with pnpm workspace catalogs, obuild config, standard npm package architecture, Nuxt module architecture, runtime vs build-time code, addImports, addServerHandler, or nuxt-module-builder.
Strategic Product & Scope Review. Use this skill when planning a new feature, architecting a change, or reviewing a project's strategy. It challenges premises, maps ambition modes, and ensures zero silent failures.
| name | release-notes |
| description | Generate release notes for major/minor releases. Use when user says "release notes", "write release notes", "draft changelog", "prepare release announcement", "what changed since last release", or "generate upgrade guide". |
| user_invocable | true |
| context | fork |
| argument-hint | [version] |
| effort | high |
Generate Nuxt-style release notes with highlights, categorized changelog, and LLM upgrade prompts for breaking changes.
gh repo view --json nameWithOwner --jq '.nameWithOwner' 2>/dev/null || echo 'unknown'git tag --sort=-v:refname | head -10 | tr '\n' ', 'cat package.json 2>/dev/null | jq -r '.version // "unknown"'gh release view --json body --jq '.body' 2>/dev/null | head -40 || echo 'no prior releases'git tag --sort=-v:refname may interleave v1.2.0-beta.1 with stable tags. Filter with grep -v '\-' when needed.feat:, fix:, perf:, etc. prefixes. If commits are freeform, infer category from the diff: new files/exports = Enhancement, changed test assertions = Fix, package.json dep changes = Chore, etc.! suffix (feat!:, fix!:) AND BREAKING CHANGE: in commit bodies, not just type prefixes.git log only shows the merge author. Use gh pr list --search to find actual PR authors.! suffix constantly. Always cross-reference with the export diff (Step 1b) to catch unlabeled breaking changes.Track release note history:
echo "$(date -I) VERSION TAG" >> "${CLAUDE_PLUGIN_DATA}/release-notes-history.log"
From the preprocessed state above, determine:
$ARGUMENTS if provided, otherwise from current version, otherwise askPREV_TAG..HEADRun IN PARALLEL:
# Full commit log with bodies (for BREAKING CHANGE detection)
git log PREV_TAG..HEAD --format='%H|%s|%b' --no-merges
# Stat summary
git log PREV_TAG..HEAD --stat --no-merges
# All PRs merged since last tag
gh pr list --state merged --search "merged:>=PREV_TAG_DATE" --limit 100 --json number,title,body,author,labels
# Breaking changes (! suffix or BREAKING CHANGE in body)
git log PREV_TAG..HEAD --format='%H %s' --no-merges | grep -E '!:|BREAKING CHANGE'
Commit messages in most cases miss breaking changes. Diff the actual exports to catch unlabeled ones:
# Compare exports between tags (adapt paths to project structure)
# For packages with src/index.ts or similar entry point:
git diff PREV_TAG..HEAD -- src/index.ts src/exports.ts src/public.ts index.ts
# For Nuxt modules, also check runtime/ and composables/:
git diff PREV_TAG..HEAD -- src/runtime/ src/module.ts
# Check for removed or renamed exports
git diff PREV_TAG..HEAD -- '*.d.ts' | grep -E '^\-export'
Flag any removed exports, renamed functions, changed type signatures, or removed config options as potential breaking changes even if commits don't label them.
Analyze docs changes to enrich highlights and catch migration notes already written:
# Docs changes since last tag
git diff PREV_TAG..HEAD --stat -- docs/ README.md MIGRATION.md UPGRADING.md '*.md'
# Read any migration or upgrade docs that were added/modified
git diff PREV_TAG..HEAD --name-only -- docs/ '*.md' | grep -iE 'migrat|upgrad|breaking|changelog'
Read any modified migration docs in full. These in most cases contain context that commit messages lack and should inform both the Highlights narrative and the upgrade prompt.
Major dependency upgrades in most cases introduce transitive breaking changes:
# Diff package.json dependencies
git diff PREV_TAG..HEAD -- package.json | grep -E '^\+.*"(dependencies|peerDependencies)"' -A 50 | grep -E '^\+\s+"'
If any dependency had a major version bump, note it as a potential source of breaking changes and check that dep's own changelog for migration notes.
A mislabeled breaking change is the costliest error in a release note: a missed one strands users on broken upgrades, a false one scares them off a safe bump. After steps 1a-1d produce a candidate breaking-change list, verify each one against the actual diff before it reaches the notes.
For a handful of candidates, verify inline. For 10+ (large release, 10+ changed exports), spawn a verifier per candidate — drive it with the Workflow tool as a parallel verify stage; this skill's instructions are the opt-in. Each verifier gets the candidate plus the relevant diff hunk and answers:
exports map)?Drop candidates the verifier clears as non-breaking; keep a one-line note of why, in case the user disagrees.
Compare the target version against findings:
0.x.y): minor bumps can contain breaking changes per semver spec, but still note them clearlyParse conventional commit prefixes into changelog sections. See references/changelog-categories.md for the full mapping.
Select 3-7 changes that deserve narrative treatment in the Highlights section. Criteria:
feat:)perf:)For each highlight, fetch the full PR body if not already available:
gh pr view NUMBER --json body,title --jq '.title + "\n" + .body'
Check the preprocessed "Prior release style" above. If the repo has existing GitHub releases, match that structure and tone. If no prior releases exist (or user requests it), follow the Nuxt release format. See references/nuxt-release-format.md for the exact structure.
Structure:
# vX.Y.Z
## 👀 Highlights
[1-2 sentence intro: what this release focuses on, tone should be enthusiastic but not breathless]
### EMOJI Feature Title
[2-3 sentences explaining the feature, why it matters, what it enables]
[Code example if applicable]
... repeat for each highlight ...
## ⚠️ Breaking Changes
[Only if breaking changes exist. List each with migration steps.]
## ✅ Upgrading
[Package manager commands + brief notes]
## 👉 Changelog
> [Compare link: PREV_TAG...vX.Y.Z](REPO_URL/compare/PREV_TAG...vX.Y.Z)
### 🚀 Enhancements
- Description of change ([#NUMBER](REPO_URL/pull/NUMBER))
### 🔥 Performance
...
### 🩹 Fixes
...
### 💅 Refactors
...
### 📖 Documentation
...
### 🏡 Chore
...
### ❤️ Contributors
[List of contributors]
/humanize-writing. The biggest wins for release notes: cut the over-explained takeaway ("this means users can now...") and use specific version numbers, PR links, and real benchmark figures instead of vague claims.If breaking changes exist, generate an upgrade prompt that helps users migrate. Read the template at ${CLAUDE_SKILL_DIR}/templates/upgrade-prompt.md.
The upgrade prompt should be:
Write the upgrade prompt to a standalone file:
echo "PROMPT_CONTENT" > upgrade-prompt-vX.Y.Z.md
Also embed it in the release notes as a collapsible section after ⚠️ Breaking Changes:
<details>
<summary>🤖 LLM Upgrade Prompt — paste this into Claude, ChatGPT, etc. to migrate your codebase</summary>
UPGRADE_PROMPT_CONTENT
</details>
This way users discover the prompt directly in the GitHub release page.
Present the release notes in full. Then:
Ask if the user wants to create a GitHub release draft:
gh release create vX.Y.Z --draft --title "vX.Y.Z" --notes "$(cat <<'EOF'
RELEASE_NOTES
EOF
)"
Use --draft so the user can review before publishing.
Report the file path of the standalone upgrade prompt (if generated).
Log to history:
echo "$(date -I) vX.Y.Z PREV_TAG" >> "${CLAUDE_PLUGIN_DATA}/release-notes-history.log"