Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/buildinternet/releases/generating-release-contentnpx skills add buildinternet/releases --skill generating-release-contentgit clone --depth 1 https://github.com/buildinternet/releasesWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/buildinternet/releases/generating-release-content)<a href="https://agentmods.dev/skills/buildinternet/releases/generating-release-content"><img src="https://agentmods.dev/badge/skills/buildinternet/releases/generating-release-content.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00143 | $0.04570 |
| Opus 5 | $0.00072 | $0.02285 |
| Sonnet 5 | $0.00029 | $0.00914 |
| Haiku 4.5 | $0.00014 | $0.00457 |
Grade A, and why
generating-release-content scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
Do not run `releases admin release update` or curl PATCH — the parent writes. How it starts
The opening of the file, as written. The whole thing — 273 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Generating Release Content
Populate the four AI-generated fields on a release:
title_generated— self-contained news headline (60–90 chars, hard cap 100)title_short— Axios "smart brevity" headline for chrome-stripped surfacessummary— 1–2 sentence prose blurbcomposition—{bugs, features, enhancements}counts (stored onreleases.metadata.$.composition)
The fields are the same whether you're generating for the first time or rewriting after a prompt change. There is no "new vs. regen" branch in the pipeline — last write wins.
The production prompt emits two more tags this skill does not persist. Since #1696 the shared prompt also outputs <breaking> (upgrade-risk verdict: major/minor/none/unknown) and <migration> (≤3-sentence upgrade steps), persisted at ingest to releases.breaking / releases.migration_notes. The write paths this skill uses can't carry them: PATCH /v1/releases/:id is .strict() and rejects breaking/migrationNotes, and the bulk script's UPDATE only sets the four fields above. Parse and discard them locally (they'll appear in the raw output); regenerating them is ingest-only for now.
Prompt is canonical in code, not in this skill
The system prompt and all parsing rules live in packages/ai/src/release-content.ts. Read it directly; do not paraphrase it back into the user message. The same module is consumed by the ingest worker (workers/api/src/workflows/poll-and-fetch.ts), the backfill script (scripts/generate-release-content.ts, OpenRouter by default), and this skill, so any drift between local-agent output and ingest-time output starts there.
Re-export from that file:
SYSTEM_PROMPT— pass verbatim as the system message, withcache_control: { type: "ephemeral" }buildReleaseBlock(input)— build the user message body from aSummarizeReleaseInput(org slug, source name, product name, title, version, url, content)isEmptyContent(body)— short-circuit boilerplate-only bodies; skip the model and write NULLsparseReleaseContent(text)— pull<title>,<title_short>,<summary>,<composition>(plus<breaking>/<migration>, which this skill's write paths drop — see above) out of a responseMODEL(claude-haiku-4-5— Anthropic fallback /--anthropic*paths only),MAX_OUTPUT_TOKENS(420 — 280 pre-#1696 cap + buffer for the breaking/migration tags),MAX_BODY_CHARS(8000). Live summarize + the backfill script default to OpenRouter~deepseek/deepseek-v4-flash-latest(SUMMARIZE_MODEL/RELEASE_CONTENT_MODEL).
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 5d ago First seen · 273 lines · 143 tokens per session scan A 0e771c76d6a8
generating-release-content is a skill published in the GitHub repository buildinternet/releases (6 stars, last pushed yesterday), licensed Apache-2.0. It adds 143 tokens to every session and 4,570 once invoked, about $0.0007 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
releases-cli
Use the releases CLI to search, browse, and read the Releases.sh changelog registry from the terminal — the keyless, agent-friendly peer of the Releases MCP. Activate when the user mentions "releases CLI", runs a releases command, asks how to install it, or wants to look up releases, sources, orgs, collections, or…
releases-mcp
Use when the user asks about recent releases, changelogs, what's new in a library, breaking changes, version updates, or wants to compare products. Activates for questions like "what changed in Next.js 15?", "latest Tailwind releases", "compare Bun vs Deno releases".
release-notes
Generate GitHub release notes for the Membrane api-gateway repo by collecting the commits between the last release and master, grouping them into Features / Improvements / Fixes / Security / Dependencies, and linking each to its PR. Use whenever the user wants to draft, extract, or write release notes / a changelog /…
changelog-cli
Generate a user-facing changelog for the next stable release. Reads git log between the last stable tag and HEAD, categorizes changes, and outputs formatted release notes. Use before triggering a stable release.
changelog-generator
Generate a polished CHANGELOG.md and release-notes.md from a local git repository (or a captured .git-log.txt dump). Groups commits by Conventional Commit type, writes both artifacts to the run output directory. Use when asked to draft release notes, summarize commits between tags, or produce a human-readable…
release
Guide the Backend.AI release process - run release.sh, generate changelog via towncrier, consolidate RC entries for final releases with subsection grouping.