Agent skill

Release Post

by quarto-dev in quarto-dev/quarto-r

Create professional package release blog posts following Tidyverse or Shiny blog conventions.

MITAuto-check passedWriting & Content

Install Release Post

skills CLI
$ npx skills add quarto-dev/quarto-r --skill release-post -a claude-code

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

GitHub CLI
$ gh skill install quarto-dev/quarto-r release-post --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/quarto-dev/quarto-r.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release-post .claude/skills/release-post && 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
release-post
GitHub stars
160
Used in
1 other repo
Token cost
~2.5k tokens
SKILL.md length
923 words
Files
5 (incl. scripts, references)
Skills in repo
10
Repo updated
First seen
Licence
MIT

At a glance

Create professional package release blog posts following Tidyverse or Shiny blog conventions.

  • Works in 7 steps: Gather Information → Structure the Post → Apply Content Guidelines → …
  • The user needs to:
  • SKILL.md covers Quick Start, Platform Selection, General Workflow and Reference Documentation, plus 3 more sections
  • Runs R scripts from its folder; reaches unsplash.com

What it does

Release Post is an agent skill from quarto-dev/quarto-r. Create professional package release blog posts following Tidyverse or Shiny blog conventions. Use when the user needs to: (1) Write a release announcement blog post for an R or Python package for tidyverse.org or shiny.posit.co, (2) Transform NEWS/changelog content into blog format, (3) Generate acknowledgments sections with contributor lists, (4) Format posts following specific blog platform requirements. Supports both Tidyverse (hugodown) and Shiny (Quarto) blog formats with automated contributor fetching and…

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts and reference files (for example `references/content-guidelines.md`, `references/shiny-formatting.md` and `references/tidyverse-formatting.md`).

It sits in Writing & Content, covering Blog and article writing and Changelog and release notes. It works with Python. The repository describes itself as: R interface to quarto-cli. The licence is MIT.

When your agent uses it

  • The user needs to:
  • Write a release announcement blog post for an R
  • Python package for tidyverse.org
  • Transform NEWS/changelog content into blog format

Example prompts

  • “/release-post”

Requirements

  • Python 3

Workflow steps

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

  1. Gather Information
  2. Structure the Post
  3. Apply Content Guidelines
  4. Transform NEWS Content
  5. Apply Platform-Specific Formatting
  6. Generate Acknowledgements
  7. Review and Polish

What it can do on your machine

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

    Ships 1 file in scripts/ (R), which the agent can run.

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

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • unsplash.com

    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

Release Post loads about 2.5k tokens when it runs, and up to ~10k if it reads all its reference files. Until then it costs about 140 tokens; SKILL.md has 923 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~140
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~10k

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); the scripts in this folder are not scanned.

SKILL.md

The full file from quarto-dev/quarto-r at commit bd2329a, republished under its MIT licence (© quarto-dev). 923 words, ~2,471 tokens.

Download SKILL.mdSave it as .claude/skills/release-post/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
release-post
description
Create professional package release blog posts following Tidyverse or Shiny blog conventions. Use when the user needs to: (1) Write a release announcement blog post for an R or Python package for tidyverse.org or shiny.posit.co, (2) Transform NEWS/changelog content into blog format, (3) Generate acknowledgments sections with contributor lists, (4) Format posts following specific blog platform requirements. Supports both Tidyverse (hugodown) and Shiny (Quarto) blog formats with automated contributor fetching and comprehensive style guidance.
metadata.author
Garrick Aden-Buie (@gadenbuie)
metadata.version
1.0
license
MIT

Package Release Post

Create professional R/Python package release blog posts following Tidyverse or Shiny blog conventions.

Quick Start

  1. Identify the blog platform: Tidyverse (tidyverse.org) or Shiny (shiny.posit.co)
  2. Verify NEWS.md or changelog exists for the package
  3. Gather package info: name, version, repository (e.g., "tidyverse/dplyr")
  4. Follow the workflow below
  5. Use scripts/get_contributors.R to generate acknowledgments
  6. Reference the appropriate formatting guide for final polish

Platform Selection

This skill supports two blog platforms with different formatting requirements:

  • Tidyverse blog (tidyverse.org)

    • Uses hugodown
    • R packages primarily
    • More rigid structure and conventions
    • See references/tidyverse-formatting.md
  • Shiny blog (shiny.posit.co)

    • Uses Quarto
    • R and Python packages
    • More flexible, feature-focused structure
    • See references/shiny-formatting.md

First, determine which platform the post is for, then follow the general workflow and apply platform-specific formatting.

General Workflow

These steps apply to both platforms. Content guidelines are based on Tidyverse best practices but adapt them as needed for Shiny posts.

Step 1: Gather Information

Collect required information:

  • Platform: Tidyverse or Shiny blog?
  • Package name and version: e.g., "dplyr 1.2.0" or "shiny 1.9.0"
  • Repository: GitHub repo in "owner/repo" format
  • Package language: R or Python
  • NEWS content: Read the package's NEWS.md, CHANGELOG, or NEWS
  • Package description: One-sentence core purpose
  • Previous release tag: For contributor fetching (optional)
  • Featured image: For frontmatter (optional but recommended)
Step 2: Structure the Post

Create the post outline following this order:

  1. Frontmatter: Platform-specific YAML (see formatting references)

  2. Title and Opening:

    • Title: Package name and version
    • Opening: Announcement with one-sentence package description
    • Installation: Code block with installation command
    • Overview: Brief summary with link to full release notes
  3. Main Content (choose appropriate sections):

    • Migration guide (if breaking changes) - Always first when present
    • Lifecycle changes (deprecations, soft-deprecations, defunct)
    • Feature sections (one per major feature, descriptive headings)
    • Minor improvements (bulleted list)
  4. Acknowledgements (when appropriate):

    • Use scripts/get_contributors.R
    • Format: "A big thank you to all the folks who helped make this release happen:"
    • Comma-separated GitHub links
Step 3: Apply Content Guidelines

Follow the best practices in references/content-guidelines.md:

  • Opening style: "We're [random adjective expressing excitement] to announce the release of..."
  • Section organization: Migration → Lifecycle → Features → Improvements → Acknowledgements
  • Tone: Conversational, professional, enthusiastic but authentic
  • Technical precision: Use exact function names in backticks
  • Focus on benefits: Explain "why" not just "what"
  • Code examples: Realistic, well-commented, properly formatted
Step 4: Transform NEWS Content

Convert NEWS.md bullets to blog-friendly content:

  • Research features thoroughly: Don't just copy NEWS bullets—read function docs, check PRs, understand the context
  • Expand context: Why changes matter, not just what changed
  • Add complete code examples: Show realistic usage with full workflows, not just function signatures
  • Explain concepts first: For unfamiliar features, explain what they are and how they work before showing code
  • Group thematically: Combine related NEWS items into coherent sections
  • Use conversational tone: Transform terse bullets into prose
  • Link documentation: Add relevant links to docs and resources
  • Highlight breaking changes: Make migration paths clear
  • Multi-language parity (Shiny only): For R+Python packages on the Shiny blog, ensure all examples show both languages in tabsets
Step 5: Apply Platform-Specific Formatting

For Tidyverse posts, read references/tidyverse-formatting.md and apply:

  • hugodown frontmatter with slug, photo.url, photo.author
  • Specific slug format: packagename-x-y-z (hyphens replace dots)
  • R code blocks with r language identifier
  • Acknowledgements always included as final section

For Shiny posts, read references/shiny-formatting.md and apply:

  • Quarto frontmatter with YAML anchors for social media
  • Flexible title formatting
  • Use tabsets for Python/R or Express/Core variations
  • Platform-specific code block attributes
  • Acknowledgements optional, varies by post type
  • May use lead paragraphs, callouts, embedded media
Show full SKILL.md (352 more words)Show less
Step 6: Generate Acknowledgements

Run the contributor script:

bash
Rscript scripts/get_contributors.R "owner/repo"

Or with a specific starting tag for the previous version (or tag used for last release post):

bash
Rscript scripts/get_contributors.R "owner/repo" "v1.0.0"

Copy the markdown output into the Acknowledgements section.

Step 7: Review and Polish

Platform-agnostic checklist:

  • Frontmatter complete with all required fields
  • Opening clearly states package purpose
  • Installation code block present (both languages if applicable)
  • Sections organized logically
  • Code examples use proper syntax highlighting
  • Function names in backticks with parentheses: `function()`
  • Package names are not backticked or otherwise styled
  • Tone is conversational but not marketing-speak
  • No superlatives ("powerful", "rich", "seamless", etc.)
  • Features explained with context, not just listed
  • Concepts explained before showing code
  • All examples show R and Python variants (if applicable)
  • Links to full release notes included

Platform-specific checklist:

Tidyverse:

  • Slug format: package-x-y-z (hyphens, not dots)
  • Photo URL and author included
  • Acknowledgements section is final section
  • All contributors listed alphabetically

Shiny:

  • YAML anchors used for description (&desc, *desc)
  • Social media cards configured (open-graph, twitter-card)
  • Appropriate filters specified if using tabsets/shinylive
  • Tabsets used for showing paired variants (Python/R, Express/Core)
  • Multi-language tabsets used consistently (for R+Python packages only)

Reference Documentation

Load these as needed for detailed guidance:

Content Guidelines

references/content-guidelines.md - General best practices for all release posts:

  • Post structure and organization
  • Opening style and tone
  • Section hierarchy and organization
  • Code examples and formatting
  • Before/after patterns
  • Acknowledgments conventions
Platform-Specific Formatting

references/tidyverse-formatting.md - Tidyverse blog requirements:

  • hugodown frontmatter structure
  • Slug and title conventions
  • Photo attribution
  • Code block formatting
  • Lifecycle section structure
  • Acknowledgements format

references/shiny-formatting.md - Shiny blog requirements:

  • Quarto frontmatter with YAML anchors
  • Social media card configuration
  • Lead paragraphs and callouts
  • Tabsets for variants
  • Line highlighting and annotations
  • Video embedding
  • Flexible acknowledgements

Resources

  • scripts/get_contributors.R: Fetch formatted contributor list using usethis::use_tidy_thanks()
  • references/content-guidelines.md: General content best practices (platform-agnostic)
  • references/tidyverse-formatting.md: Tidyverse-specific formatting requirements
  • references/shiny-formatting.md: Shiny-specific formatting requirements

Platform-Specific Quick Reference

Tidyverse Post Template
markdown
---
output: hugodown::hugo_document
slug: package-x-y-z
title: package x.y.z
date: YYYY-MM-DD
author: Your Name
description: >
    Brief description
photo:
  url: https://unsplash.com/photos/id
  author: Photographer Name
categories: [package]
tags: [package]
---

# package x.y.z

We're pleased to announce the release of package x.y.z...

```r
install.packages("package")
```

...

## Acknowledgements

A big thank you to all the folks who helped make this release happen:

[Contributors from get_contributors.R]
Shiny Post Template
markdown
---
title: Package Name x.y.z
description: &desc |
  Brief description of the release.
author: "Your Name"
date: "YYYY-MM-DD"

image: feature.png

open-graph:
  image: feature.png
  description: *desc
twitter-card:
  image: feature.png
  description: *desc
---

# package x.y.z

We're excited to announce package x.y.z...

[Installation for Python or R]

...

Tips

  • Breaking changes first: Put migration guides before features
  • Highlight the wins: Lead with the most exciting features
  • Show don't tell: Use code examples liberally
  • Link generously: Help readers find more information
  • Keep it conversational: Write like you're explaining to a colleague
  • Be authentic: Enthusiasm should feel genuine, not marketing-speak

© quarto-dev, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files (scripts, references) in .claude/skills/release-post of quarto-dev/quarto-r.

  • SKILL.md
  • references/content-guidelines.md
  • references/shiny-formatting.md
  • references/tidyverse-formatting.md
  • scripts/get_contributors.R

Open the folder on GitHubat commit bd2329a

Used in 1 other repository

We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in quarto-dev/quarto-r, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Release Post 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.

Release Post compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Release Post this skillquarto-dev/quarto-r1601 repos~2.5kAutomated safety check: PassMIT
Adk Style GuideBrainDAO/adk-ts119—~1.8kAutomated safety check: PassMIT
No Em Dashespetera2c/simple-table229—~195Automated safety check: PassMIT
SepiaNanako0129/sepia3k—~3.6kAutomated safety check: PassMIT
Blogtheopenco/llmgateway1.7k—~2.2kAutomated safety check: PassCustom licence
Penguin Harness DevPrism-Shadow/penguin-harness2.5k—~3.4kAutomated safety check: PassApache-2.0

Similar skills

  • Adk Style Guide

    BrainDAO/adk-ts

    ADK-TS brand voice, terminology, and writing conventions. An agent skill from BrainDAO/adk-ts.

    119 GitHub stars~1.8k tokensUpdated 3 mo ago
    Writing & ContentAuto-check passed
  • No Em Dashes

    petera2c/simple-table

    Avoid em dashes in marketing copy, hero text, changelogs, blog posts, docs, UI strings, and chat.

    229 GitHub stars~195 tokensUpdated 3 days ago
    Writing & ContentAuto-check passed
  • Sepia

    Nanako0129/sepia

    Make AI-generated writing read as human-written, in fiction and in professional prose.

    3k GitHub stars~3.6k tokensUpdated 2 days ago
    Writing & ContentAuto-check passed
  • Blog

    theopenco/llmgateway

    Write and validate an LLM Gateway marketing blog post in the repository's current house style, including structured frontmatter and a gpt-image-2 OpenGraph image.

    1.7k GitHub stars~2.2k tokensUpdated today
    Writing & ContentAuto-check passed
  • Penguin Harness Dev

    Prism-Shadow/penguin-harness

    A skill your agent uses when developing PenguinHarness itself — changing packages/{core,server,web,cli,desktop,landing,docs,skills}, the built-in model catalog, the installers or the release…

    2.5k GitHub stars~3.4k tokensUpdated today
    Writing & ContentAuto-check passed
  • Create Release Blog

    web-infra-dev/rstest

    Generate a narrative version release blog post from commits within a tag range.

    505 GitHub stars~4.7k tokensUpdated today
    Writing & ContentAuto-check passed

More from quarto-dev/quarto-r

All 10 skills in this repo
  • Create Release Checklist

    quarto-dev/quarto-r

    Create a release checklist and GitHub issue for an R package.

    160 GitHub starsUsed in 1 repo~1.9k tokens
    Auto-check: notes
  • Alt Text

    quarto-dev/quarto-r

    Generate and improve accessible alt text for data visualizations and images in R packages and Quarto documents.

    160 GitHub starsUsed in 1 repo~1.7k tokens
    Auto-check passed
  • CLI

    quarto-dev/quarto-r

    Comprehensive R package for command-line interface styling, semantic messaging, and user communication.

    160 GitHub starsUsed in 1 repo~2.8k tokens
    Auto-check passed
  • Quarto Authoring

    quarto-dev/quarto-r

    A skill your agent uses when the user is explicitly working with Quarto, .qmd files, quarto.yml, Quarto projects, or Quarto features such as callouts, cross-references, citations, Mermaid diagrams…

    160 GitHub starsUsed in 1 repo~1.9k tokens
    Auto-check passed
  • Testing R Packages

    quarto-dev/quarto-r

    Best practices for writing R package tests using testthat version 3+.

    160 GitHub starsUsed in 1 repo~2.8k tokens
    Auto-check passed
  • Cran Extrachecks

    quarto-dev/quarto-r

    Prepare R packages for CRAN submission by checking for common ad-hoc requirements not caught by devtools::check().

    160 GitHub starsUsed in 1 repo~3.7k tokens
    Auto-check passed

Works with

Questions about Release Post

What does Release Post do?

Create professional package release blog posts following Tidyverse or Shiny blog conventions. Release Post is an agent skill from quarto-dev/quarto-r. Create professional package release blog posts following Tidyverse or Shiny blog conventions.

When should I use Release Post?

Release Post fits situations like: the user needs to:; write a release announcement blog post for an R; Python package for tidyverse.org; transform NEWS/changelog content into blog format.

How do I install Release Post in Claude Code?

Run `npx skills add quarto-dev/quarto-r --skill release-post -a claude-code`. Or copy the skill folder (.claude/skills/release-post in quarto-dev/quarto-r) into .claude/skills/release-post in your project. Claude Code loads it when a task matches its description.

How do I install Release Post in Codex?

Run `npx skills add quarto-dev/quarto-r --skill release-post -a codex`. Or copy the skill folder (.claude/skills/release-post in quarto-dev/quarto-r) into .agents/skills/release-post in your project. Codex loads it when a task matches its description.

Can I use Release Post 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 quarto-dev/quarto-r --skill release-post -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/release-post, .gemini/skills/release-post, .github/skills/release-post and .opencode/skills/release-post in your project.

What does Release Post need to run?

Going by SKILL.md and its folder, Release Post needs R for the scripts in its folder. Our summary lists: Python 3.

Does Release Post access the network?

SKILL.md names 1 domain. In commands or code: unsplash.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Release Post 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Release Post use?

Release Post is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Release Post use?

About 2.5k tokens (SKILL.md is roughly 9.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.9k tokens, read only when the agent opens those files.

What are the alternatives to Release Post?

Skills that share tags, products or a category with Release Post: Adk Style Guide (BrainDAO/adk-ts, 119 stars), No Em Dashes (petera2c/simple-table, 229 stars), Sepia (Nanako0129/sepia, 3k stars) and Blog (theopenco/llmgateway, 1.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Release Post?

quarto-dev (a GitHub organization) maintains it in quarto-dev/quarto-r, which has 160 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on September 10, 2026.

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