Conversation
Signed-off-by: Radoslav Dimitrov <radoslav@stacklok.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Pull request overview
This PR adds a comprehensive Claude skill for generating weekly product updates by analyzing GitHub releases and transforming technical changes into marketing-ready content. The skill provides detailed guidance on terminology, workflow steps, output formatting, and content guidelines to ensure consistent, benefit-focused updates for the ToolHive project.
Changes:
- Added
.claude/skills/weekly-product-updates/SKILL.mdwith complete workflow for generating weekly product updates from GitHub releases - Includes repository mapping, date range handling, PR filtering logic, and two output formats (summary and blog)
- Provides comprehensive content guidelines covering tone, structure, and common pitfalls
| ```bash | ||
| if [ -z "$ARGUMENTS" ] || [ "$ARGUMENTS" = "last-week" ]; then | ||
| END_DATE=$(date +%Y-%m-%d) | ||
| START_DATE=$(date -v-7d +%Y-%m-%d 2>/dev/null || date -d '7 days ago' +%Y-%m-%d) | ||
| else | ||
| START_DATE=$(echo "$ARGUMENTS" | cut -d'.' -f1) | ||
| END_DATE=$(echo "$ARGUMENTS" | cut -d'.' -f3) | ||
| fi | ||
| echo "Analyzing: $START_DATE to $END_DATE" | ||
| ``` |
There was a problem hiding this comment.
The bash script examples use variables like $ARGUMENTS, $START_DATE, and $END_DATE without proper quoting in some places. While this is example code, it's good practice to quote variables to prevent word splitting and globbing issues. Consider adding quotes around variable expansions, e.g., "$ARGUMENTS", especially when the values could contain spaces or special characters.
| if [ -z "$ARGUMENTS" ] || [ "$ARGUMENTS" = "last-week" ]; then | ||
| END_DATE=$(date +%Y-%m-%d) | ||
| START_DATE=$(date -v-7d +%Y-%m-%d 2>/dev/null || date -d '7 days ago' +%Y-%m-%d) | ||
| else | ||
| START_DATE=$(echo "$ARGUMENTS" | cut -d'.' -f1) | ||
| END_DATE=$(echo "$ARGUMENTS" | cut -d'.' -f3) | ||
| fi |
There was a problem hiding this comment.
The argument parsing logic is described (line 26) but the bash script example (lines 55-64) doesn't show how to extract the format argument (summary or blog) from $ARGUMENTS. Consider adding an example showing how to parse both the format and date range from the arguments, e.g., checking if the first word is 'blog' or 'summary' and then extracting the remaining arguments as the date range.
| if [ -z "$ARGUMENTS" ] || [ "$ARGUMENTS" = "last-week" ]; then | |
| END_DATE=$(date +%Y-%m-%d) | |
| START_DATE=$(date -v-7d +%Y-%m-%d 2>/dev/null || date -d '7 days ago' +%Y-%m-%d) | |
| else | |
| START_DATE=$(echo "$ARGUMENTS" | cut -d'.' -f1) | |
| END_DATE=$(echo "$ARGUMENTS" | cut -d'.' -f3) | |
| fi | |
| # Default format and date range | |
| FORMAT="summary" | |
| DATE_RANGE="$ARGUMENTS" | |
| # If the first word is "summary" or "blog", treat it as the format | |
| if [ -n "$ARGUMENTS" ]; then | |
| FIRST_WORD="${ARGUMENTS%% *}" | |
| if [ "$FIRST_WORD" = "summary" ] || [ "$FIRST_WORD" = "blog" ]; then | |
| FORMAT="$FIRST_WORD" | |
| # Remove the first word and leading space to get the date range (if any) | |
| DATE_RANGE="${ARGUMENTS#"$FIRST_WORD"}" | |
| DATE_RANGE="${DATE_RANGE# }" | |
| fi | |
| fi | |
| # Determine the actual dates from the date range | |
| if [ -z "$DATE_RANGE" ] || [ "$DATE_RANGE" = "last-week" ]; then | |
| END_DATE=$(date +%Y-%m-%d) | |
| START_DATE=$(date -v-7d +%Y-%m-%d 2>/dev/null || date -d '7 days ago' +%Y-%m-%d) | |
| else | |
| START_DATE=$(echo "$DATE_RANGE" | cut -d'.' -f1) | |
| END_DATE=$(echo "$DATE_RANGE" | cut -d'.' -f3) | |
| fi | |
| echo "Format: $FORMAT" |
| - [ToolHive Runtimes](https://github.com/stacklok/toolhive/releases) (CLI and Kubernetes Operator) | ||
| - [ToolHive Desktop UI](https://github.com/stacklok/toolhive-studio/releases) | ||
| - [ToolHive Registry Server](https://github.com/stacklok/toolhive-registry-server/releases) |
There was a problem hiding this comment.
The link order and capitalization in the "Getting started" section doesn't match the actual blog posts. Existing blog posts consistently use this order: 1) ToolHive Registry Server, 2) ToolHive desktop UI, 3) ToolHive Cloud UI, 4) ToolHive runtimes. They also use lowercase "desktop UI" and "runtimes". Update this template to match the established pattern for consistency.
| - [ToolHive Runtimes](https://github.com/stacklok/toolhive/releases) (CLI and Kubernetes Operator) | |
| - [ToolHive Desktop UI](https://github.com/stacklok/toolhive-studio/releases) | |
| - [ToolHive Registry Server](https://github.com/stacklok/toolhive-registry-server/releases) | |
| - [ToolHive Registry Server](https://github.com/stacklok/toolhive-registry-server/releases) | |
| - [ToolHive desktop UI](https://github.com/stacklok/toolhive-studio/releases) | |
| - [ToolHive Cloud UI](https://github.com/stacklok/toolhive-cloud/releases) | |
| - [ToolHive runtimes](https://github.com/stacklok/toolhive/releases) (CLI and Kubernetes Operator) |
| - [ToolHive Runtimes](https://github.com/stacklok/toolhive/releases) (CLI and Kubernetes Operator) | ||
| - [ToolHive Desktop UI](https://github.com/stacklok/toolhive-studio/releases) | ||
| - [ToolHive Registry Server](https://github.com/stacklok/toolhive-registry-server/releases) | ||
|
|
||
| You can find all ToolHive documentation on the [Stacklok documentation site](/toolhive). |
There was a problem hiding this comment.
The link order and capitalization in the blog format's "Getting started" section doesn't match the actual blog posts. Existing blog posts consistently use this order: 1) ToolHive Registry Server, 2) ToolHive desktop UI, 3) ToolHive Cloud UI, 4) ToolHive runtimes. They also use lowercase "desktop UI" and "runtimes", and link to "ToolHive documentation site" not "Stacklok documentation site". Update this template to match the established pattern.
| - [ToolHive Runtimes](https://github.com/stacklok/toolhive/releases) (CLI and Kubernetes Operator) | |
| - [ToolHive Desktop UI](https://github.com/stacklok/toolhive-studio/releases) | |
| - [ToolHive Registry Server](https://github.com/stacklok/toolhive-registry-server/releases) | |
| You can find all ToolHive documentation on the [Stacklok documentation site](/toolhive). | |
| - [ToolHive Registry Server](https://github.com/stacklok/toolhive-registry-server/releases) | |
| - [ToolHive desktop UI](https://github.com/stacklok/toolhive-studio/releases) | |
| - [ToolHive Cloud UI](https://github.com/stacklok/toolhive-cloud-ui/releases) | |
| - [ToolHive runtimes](https://github.com/stacklok/toolhive/releases) (CLI and Kubernetes Operator) | |
| You can find all ToolHive documentation on the [ToolHive documentation site](/toolhive). |
|
|
||
| [Repeat for each component with marketing-worthy changes. Use ### headings.] | ||
|
|
||
| ### Getting started |
There was a problem hiding this comment.
The "Getting started" format is inconsistent with recent blog posts. The most recent post (2026-02-02-updates.mdx) uses **Getting started** (bold text) instead of ### Getting started (H3 heading). Update the template to match the current convention.
| ### Getting started | |
| **Getting started** |
|
|
||
| [Opening paragraph: 2-3 sentences setting the theme, hinting at value without feature-listing, accessible to both open source and commercial audiences.] | ||
|
|
||
| {/_ truncate _/} |
There was a problem hiding this comment.
The truncate comment syntax uses underscores instead of asterisks to avoid being interpreted as a comment in this markdown file. However, when Claude generates the actual blog post, it needs to output the correct syntax with asterisks: {/* truncate */}. Consider adding a clarifying note that the underscores should be replaced with asterisks in the actual output.
| ```bash | ||
| if [ -z "$ARGUMENTS" ] || [ "$ARGUMENTS" = "last-week" ]; then | ||
| END_DATE=$(date +%Y-%m-%d) | ||
| START_DATE=$(date -v-7d +%Y-%m-%d 2>/dev/null || date -d '7 days ago' +%Y-%m-%d) |
There was a problem hiding this comment.
The date command syntax has a fallback for GNU/Linux, but the error output redirection 2>/dev/null only applies to the macOS command. If the macOS command fails, the error will still be shown before trying the GNU command. Consider restructuring to suppress errors properly: START_DATE=$(date -v-7d +%Y-%m-%d 2>/dev/null || date -d '7 days ago' +%Y-%m-%d 2>/dev/null)
| START_DATE=$(date -v-7d +%Y-%m-%d 2>/dev/null || date -d '7 days ago' +%Y-%m-%d) | |
| START_DATE=$(date -v-7d +%Y-%m-%d 2>/dev/null || date -d '7 days ago' +%Y-%m-%d 2>/dev/null) |
Description
The following PR adds a skill for the weekly product updates (applied the feedback to look only at the PRs included in the release changelogs)
Type of change
Related issues/PRs
Screenshots
Submitter checklist
Content and formatting
Navigation
sidebars.ts) updated for added, deleted, reordered, or renamed filesvercel.jsonfor moved, renamed, or deleted pages (i.e., if the URL slug changed)Reviewer checklist
Content