Cut a new datadog-go release and update CHANGELOG.md following the repo's house style. Use when asked to "prepare a release", "cut version X.Y.Z", "update the changelog for the release", "bump the version", or "tag a release" for the DataDog/datadog-go repo. Walks the three-step release process (changelog → telemetry version → git tag) and enforces the 13 changelog guidelines.
npx skills add https://github.com/DataDog/datadog-go --skill release
Prepare a new release of github.com/DataDog/datadog-go:
CHANGELOG.md with all changes since the last release.statsd/telemetry.go so the client reports the new version in telemetry.Do the work on a branch and open a "Prepare X.Y.Z release" PR — do not push to master
or create the git tag yourself.
Find the last released version and collect every PR merged since its tag:
# Latest released tag (e.g. v5.9.0) — capture it so both ranges below use the
# SAME tag. Hardcoding a stale version here re-gathers already-released PRs.
LAST_TAG=$(git describe --tags --abbrev=0)
echo "$LAST_TAG"
# Merged PRs since that tag — titles + PR numbers
git log "$LAST_TAG"..master --oneline --merges
# or, if merges are squashed:
git log "$LAST_TAG"..master --oneline
For each PR, decide the next version per semver:
5.9.0 → 5.9.1) — only bugfixes / internal improvements, no new API.5.9.0 → 5.10.0) — new user-facing features or options, backward compatible.5.9.0 → 6.0.0) — breaking changes (API, behavior, import path, defaults).A new major changes the import path (.../datadog-go/v6/statsd); flag this loudly.
Use gh pr view <num> to confirm the PR title, author, and whether the author is an
external contributor (credit them — see guideline 9).
CHANGELOG.md lives at the repo root. Add a new release heading at the top of the
release list (right under the [//]: # reminder comment), keeping reverse chronological
order. The link-definition block at the very bottom is generated by PimpMyChangelog —
preserve its structure and add new [#nnn] / [@user] definitions there.
Note the reminder comment already in the file:
> [//]: # (comment: Don't forget to update statsd/telemetry.go:clientVersionTelemetryTag when releasing a new version)
xxxx-xx-xx only for anunreleased placeholder date; otherwise use the real release date.
# <version> / <YYYY-MM-DD> (e.g. # 5.8.3 / 2026-02-02). No extrablank sub-headings unless the release has structured sections like ## Breaking changes.
-) for all new entries. Older entries used *; do not copy thatstyle for new work.
[FEATURE], [IMPROVEMENT], [BUGFIX], [DOCUMENTATION], [TESTING], [OTHER].
For beta work stack tags: [BETA][FEATURE] (not the old [BETA FEATURE]).
- [BUGFIX] Gracefully reconnect when UDS connection is severed. See [#323][].- [BUGFIX] Change reconnect code path.Prevent, Export, Optimize, Revert, "Gracefully reconnect".
DD_EXTERNAL_ENV , ClientInterfaceEx , WithMaxSamplesPerContext() .
See [#123][]. For multiple: See [#182][] and [#185][]. Never paste raw GitHub URLs
into the bullet body — add/reuse a link definition at the bottom instead.
[@username][]. Do not use Thanks to / (Thanks ...)`. Datadog-employee PRs are not
credited with thanks.
10. Sub-bullets only for migration/operational context — caveats, precedence rules,
support notes. Indent them; prefer - for new sub-bullets.
11. Dedicated sections for major releases. For breaking changes use:
# 6.0.0 / YYYY-MM-DD
## Breaking changes
- ...
## Notes
- [FEATURE] ...
- [BUGFIX] ...
Reserve ## Breaking changes for API/behavior/dependency/import-path/default-setting
changes that require users to modify code or config.
12. Be explicit about reverts — name the affected version and the reason, e.g.
- [IMPROVEMENT] Revert 5.7.0 as it included a breaking change. or
- [BUGFIX] Revert 5.9.0 change to aggregation flushing because it introduced a breaking behavior change. See [#123][].
13. Add link definitions at the bottom, inside the PimpMyChangelog block:
[#123]: https://github.com/DataDog/datadog-go/pull/123
[@username]: https://github.com/username
Use /pull/<n> for PRs and /issues/<n> for issues (match what [#n] actually is).
Normal release:
# X.Y.Z / YYYY-MM-DD
- [FEATURE] Add `NewOption()` to configure example behavior. See [#123][], thanks [@contributor][].
- [IMPROVEMENT] Reduce allocations when sending metrics without tags. See [#124][].
- [BUGFIX] Fix reconnect behavior when the UDS connection is severed. See [#125][].
Major release:
# X.0.0 / YYYY-MM-DD
## Breaking changes
- `OldOption()` has been removed in favor of `NewOption()`.
- The default aggregation behavior now includes counts, gauges, and sets.
## Notes
- [FEATURE] Add `NewOption()` to configure example behavior. See [#123][].
- [BUGFIX] Fix reconnect behavior when the UDS connection is severed. See [#125][].
Each new entry:
# version / YYYY-MM-DD.- bullets.[FEATURE] / [IMPROVEMENT] / [BUGFIX] or another established tag.See [#123][]. when there is a PR or issue.thanks [@username][].## Breaking changes only when users may need to change code/config/imports/expectations.Bump the version the client reports in telemetry. In statsd/telemetry.go:
// clientVersionTelemetryTag is a tag identifying this specific client version.
var clientVersionTelemetryTag = "client_version:5.9.0"
Change the version string to the new release (e.g. client_version:5.10.0). This MUST
match the new CHANGELOG heading exactly. Verify nothing else hardcodes the old version:
grep -rn "client_version:\|5\.9\.0" statsd/ --include='*.go'
Commit both files together on a release branch and open the PR (mirrors past releases like
"Prepare 5.9.0 release (#392)"):
git switch -c <user>/prepare-X.Y.Z-release
git add CHANGELOG.md statsd/telemetry.go
git commit -s -m "Prepare X.Y.Z release"
gh pr create --title "Prepare X.Y.Z release" \
--body "Prepare X.Y.Z release. Update CHANGELOG.md with all changes since $LAST_TAG."
CHANGELOG.md (repo root) — new heading at top, link defs in thePimpMyChangelog block at the bottom.
statsd/telemetry.go → clientVersionTelemetryTag (client_version:X.Y.Z).github.com/DataDog/datadog-go/v5 — a new MAJOR bumps the /vN suffix.vX.Y.Z.master or create tags without explicit user confirmation.Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup
Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.
Next.js best practices - file conventions, RSC boundaries, data patterns, async APIs, metadata, error handling, route handlers, image/font optimization, bundling
Use when starting feature work that needs isolation from current workspace or before executing implementation plans - creates isolated git worktrees with smart directory selection and safety verification
Take datadog/release from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.