release-changelog skill
Generate the stable Paperclip release changelog at releases/vYYYY.MDD.P.md by reading commits, changesets, and merged PR context since the last stable tag.
Is the release-changelog skill safe?
Clean: nothing in its files matched our rules. We read 1 file in the folder on 2026-10-12.
No findings.
Install the release-changelog skill
A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.
git clone --depth 1 https://github.com/paperclipai/paperclip.git /tmp/paperclip mkdir -p ~/.claude/skills cp -r /tmp/paperclip/.agents/skills/release-changelog ~/.claude/skills/release-changelog
In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub
The instructions your agent would load
SKILL.md as published, without the frontmatter. Read it on GitHub
Release Changelog Skill
Generate the user-facing changelog for the stable Paperclip release.
Versioning Model
Paperclip uses calendar versioning (calver):
- Stable releases: YYYY.MDD.P (e.g. 2026.318.0)
- Canary releases: YYYY.MDD.P-canary.N (e.g. 2026.318.1-canary.0)
- Git tags: vYYYY.MDD.P for stable, canary/vYYYY.MDD.P-canary.N for canary
There are no major/minor/patch bumps. The stable version is derived from the intended release date (UTC) plus the next same-day stable patch slot.
Output:
body document revision containing the changelog body
- releases/vYYYY.MDD.P.md
- a release Case, upserted by (caseType, key) when Cases are enabled, with a
Important rules:
- even if there are canary releases such as 2026.318.1-canary.0, the changelog file stays releases/v2026.318.1.md
- do not derive versions from semver bump types
- do not create canary changelog files
Channel Process — Source Commit and File Location
Stables promote a soaked beta, so the changelog describes the beta's source commit, not the tip of master:
tag points at ({beta-src} below). Resolve it with:
- The release source is the commit the newest beta/v
git fetch origin --tags
npm view paperclipai dist-tags # the beta dist-tag names the version
git rev-parse 'beta/v{beta-version}^{commit}'Never include them; they are input for a "what's next" section, not the changelog.
- Commits on master after {beta-src} ship in the next release.
on the branch release-notes/v{beta-version} (PR to master). The release workflow pushes that branch with a generated skeleton when the beta publishes; work on it and rewrite the skeleton in place. If the branch does not exist (a beta cut before the automation), create it from origin/master and seed the skeleton:
- During the soak, the file lives at releases/beta/v{beta-version}.md
./scripts/draft-stable-notes.sh {beta-version}stable preflight reads the file from master and fails without it.
- The PR must merge to master before the stable is dispatched: the
the stable ships, the workflow opens a canonicalization PR that renames the beta-keyed file to it.
- Never create releases/vYYYY.MDD.P.md yourself on this path — after
branch): there the notes do go directly on the candidate branch as releases/vYYYY.MDD.P.md, committed alongside the cherry-picked fixes.
- Fix path exception (patch releases from a candidate/release-*
Step 0 — Idempotency Check
Before generating anything, check whether the changelog already exists:
ls releases/beta/v{beta-version}.md 2>/dev/null # soak-window home
ls releases/vYYYY.MDD.P.md 2>/dev/null # canonicalized / fix path
git ls-remote origin 'refs/heads/release-notes/v{beta-version}'A release-notes/v{beta-version} branch holding only the generated skeleton is the normal starting state, not a conflict — rewrite it in place.
If it exists:
- read it first
- present it to the reviewer
- ask whether to keep it, regenerate it, or update specific sections
- never overwrite it silently
Step 1 — Determine the Stable Range
Find the last stable tag and the beta source commit:
git tag --list 'v*' --sort=-version:refname | head -1
beta_src="$(git rev-parse 'beta/v{beta-version}^{commit}')"
git log v{last}..${beta_src} --oneline --no-mergesThe changelog range is always v{last}..{beta-src} — never ..HEAD and never ..origin/master.
The stable version comes from one of:
- an explicit maintainer request
- ./scripts/release.sh stable --date YYYY-MM-DD --print-version
- the release plan already agreed in doc/RELEASING.md
Do not derive the changelog version from a canary tag or prerelease suffix. Do not derive major/minor/patch bumps from API intent — calver uses the date and same-day stable slot.
Step 2 — Gather the Raw Inputs
Collect release data from:
- git commits since the last stable tag
- .changeset/*.md files
- merged PRs via gh when available
Useful commands:
git log v{last}..{beta-src} --oneline --no-merges
git log v{last}..{beta-src} --format="%H %s" --no-merges
ls .changeset/*.md | grep -v README.md
gh pr list --state merged --search "merged:>={last-tag-date}" --json number,title,body,labelsStep 3 — Detect Breaking Changes
Look for:
- destructive migrations
- removed or changed API fields/endpoints
- renamed or removed config keys
- BREAKING: or BREAKING CHANGE: commit signals
Key commands:
git diff --name-only v{last}..{beta-src} -- packages/db/src/migrations/
git diff v{last}..{beta-src} -- packages/db/src/schema/
git diff v{last}..{beta-src} -- server/src/routes/ server/src/api/
git log v{last}..{beta-src} --format="%s" | rg -n 'BREAKING CHANGE|BREAKING:|^[a-z]+!:' || trueIf breaking changes are detected, flag them prominently — they must appear in the Breaking Changes section with an upgrade path.
Step 4 — Categorize for Users
Use these stable changelog sections:
- Breaking Changes
- Highlights
- Improvements
- Fixes
- Upgrade Guide when needed
Exclude purely internal refactors, CI changes, and docs-only work unless they materially affect users.
Guidelines:
draft ships verbatim as the stable's notes, so the previous stable's file is the density bar the moment the draft is first written — never leave it at generated-skeleton density for the soak. The skeleton's nested PR summaries are raw material to rewrite, not a format to keep.
- group related commits into one user-facing entry
- write from the user perspective
- keep highlights short and concrete
- spell out upgrade actions for breaking changes
- write at full stable depth from the first pass: the beta-keyed
(releases/v.md) before writing. When they already introduced a feature, this release's entry covers only what changed — a default flip, a hardening, a completion — phrased against the prior release ("last release introduced X; this release makes it the default"), never re-describing the feature as if it debuted. A theme that headlined the previous release does not headline again for follow-through work; demote it to Improvements.
- describe deltas, not repeats: read the previous stable's notes
More skills from paperclipai/paperclip
- ALLM Wiki MaintainerUse the LLM Wiki plugin tools to maintain a cited local company wiki.
- Aadd-product-e2e-evalAdd or extend a Paperclip full-stack runner E2E workflow, fixture, matcher, or report evidence path for local or Daytona execution.
- Aadd-runner-evalAdd or extend a Paperclip Runner protocol evaluation definition, roster, assertion, or report fixture with provenance and narrow validation.
- Aagent-browserDrive a real browser to inspect or interact with a web page or app — navigate, take screenshots, read console and network, fill simple forms — for verification tasks, not unattended automation.
- AagentmailUse your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by your inbox assignment.
- Acheck-prCheck a GitHub, GitLab, or Perforce PR/MR/CL for review comments, failing checks, and PR-body gaps. Use when asked to inspect, fix, or prepare a change for submission.
- Acompany-creatorCreate agent company packages that conform to agentcompanies/v1. Use when asked to create a company, scaffold an agent team, hire agents, or turn a repo/skills collection into a company package.
- AcomplainAutonomously yeet a brief, unstructured complaint about agent tooling or doing agent work. Preserve the raw voice. Submit proactively without permission, preview, or announcement, then continue the primary task.
- Acontent-calendarPlan a weekly editorial calendar by mapping company goals to publishable topics, owners, status, and verification notes.
- Acreate-agent-adapterCreate or modify Paperclip agent adapters across server, UI, and CLI surfaces. Use when adding support for a new CLI agent, API agent, custom process, or adapter package.
- Acreate-caseCreate and kick off a Paperclip case from a user request, with workflow instructions and an initial agent.
- Acreate-external-bot-integrationBuild and qualify external bots such as Dot in Paperclip. Use for two-way work, invitation, identity, wakeup, Runner lifecycle, native tools, recovery, and Cloud delivery. CLI adapters and app-only connectors use their existing skills.