Install
openclaw skills install @tenkus47/sprint-release-notesAutomatically generate sprint release notes from a GitHub Project Board and publish to their respective repositories. Groups completed items by repository, generates per-repo markdown, and publishes it as each repo's GitHub Release description (create or update by tag), not as committed files under docs/. Optionally posts a summary comment to a designated issue. Use this skill whenever the user mentions sprint release notes, sprint summary, sprint review, project board summary, GitHub project board, release notes from sprints, "what shipped this sprint", "generate release notes", "sprint report", or wants to compile documentation from completed sprint items. Also trigger when the user wants to publish release notes to their respective repos. This skill requires a GitHub PAT token and a GitHub Project Board URL.
openclaw skills install @tenkus47/sprint-release-notesGenerate executive-ready sprint release notes by reading a GitHub Project Board (v2), analyzing completed items, reading associated documentation, evaluating contributor performance, and publishing a polished markdown release note to a designated repo.
Collect these from the user before starting:
https://github.com/orgs/{org}/projects/{number} or https://github.com/users/{user}/projects/{number}repo, read:org, project (read access to Projects v2)If any of these are missing, ask the user before proceeding.
The skill executes in 7 phases. Run them sequentially:
Read the reference file for the full GraphQL queries:
view /path/to/skill/references/github-queries.md
Use the GitHub GraphQL API (https://api.github.com/graphql) with the user's PAT token.
Step 1.1: Fetch the project ID from the board URL.
organization.projectV2(number: N) or user.projectV2(number: N)Step 1.2: Fetch iteration fields.
Step 1.3: Fetch all items in the current sprint iteration.
Separate items into:
Group by Repository:
Map<repo_name, List<completed_items>>body)Also extract metadata:
v1.{sprint_number}.0For each completed item, gather context from the associated repository. This is the intelligence-gathering phase. Read the reference file for API patterns:
view /path/to/skill/references/github-queries.md
For each completed item:
3a. PR Descriptions & Commits
3b. Documentation Changes
/docs, README.md, or wiki-related pathsGET /repos/{owner}/{repo}/contents/{path}3c. README Files
README.md for overall project context3d. Labels & Metadata
Categorization heuristic for release notes sections:
Score each contributor who worked on completed items. Read the scoring reference:
view /path/to/skill/references/contributor-scoring.md
Collect per-contributor metrics:
Scoring formula:
Score = (PRs_merged × 2) + (lines_changed / 100) + (reviews_given × 3) + (bugs_fixed × 4) + (challenge_score × 5)
If scores are very close (within 10%), note both contributors.
For each repository group, generate a separate release notes document using the template below (this becomes the GitHub Release body).
Repository Mapping:
Use the exact template below. Replace all [placeholders] with real data. If a section has no items, write "No changes this sprint." instead of removing the section.
# 🚀 Sprint Release Notes: [Sprint Name/Number] - [Repo Name]
**Date:** [YYYY-MM-DD] | **Version:** v1.[sprint_number].0 | **Status:** Shipped | **Repository:** [repo_name]
---
## 🎯 Summary
[2-3 sentences: What was the primary objective for this repository? What shipped?]
---
## ✨ New Features
* **[Issue Title]**: [Short description of what changed].
---
## 🛠️ Infrastructure & Tech Debt
* **[Issue Title]**: [Description of work done].
---
## 🐛 Bug Fixes
* **[Issue Title]**: [Description of fix].
---
## 📊 Items Completed
- [ ] #[issue_number] [issue_title]
---
*Generated from GitHub Project Board - Sprint [sprint_name]*
For each repository that had completed items, publish the sprint markdown as that repo’s Release (the Releases page / releases/latest UI), not as a file in the tree.
Step 6.1: Derive the release tag and name from the sprint (aligned with Phase 2):
v1.[sprint_number].0 (same as the Version line in the template)Step 6.2: Resolve whether a release for that tag already exists:
GET /repos/{owner}/{repo}/releases/tags/v1.[sprint_number].0
id, update it (Step 6.4).Step 6.3: Create a new release (creates the tag on the default branch if the tag does not exist yet):
POST /repos/{owner}/{repo}/releases
JSON body (minimal):
tag_name: v1.[sprint_number].0target_commitish: the repo’s default branch (e.g. main)name: same as tag_name (or a short sprint title if the user prefers)body: the full markdown from Phase 5draft: falseprerelease: falseStep 6.4: Update an existing release’s notes and title flags:
PATCH /repos/{owner}/{repo}/releases/{release_id}
Example (curl; use the user’s PAT and API version header as appropriate):
curl -L -X PATCH \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/repos/OWNER/REPO/releases/RELEASE_ID \
-d '{
"name": "v1.2.3",
"body": "Updated release notes",
"draft": false,
"prerelease": false
}'
Step 6.5: Track each repo’s html_url from the create/update response for Phase 7 and the user summary.
Notes:
repo on private repos).Authorization: Bearer with Accept: application/vnd.github+json for REST calls; include X-GitHub-Api-Version when using calendar-dated API versions.body.If the user specifies a designated issue to post the summary:
Step 7.1: Collect all published release URLs (html_url from each create/update response).
Step 7.2: Use GitHub Issues API to add a comment:
POST /repos/{owner}/{repo}/issues/{issue_number}/comments
Comment template:
## 🚀 Sprint [sprint_number] Release Notes Published
Release notes have been published to each repository’s Releases:
| Repository | Release |
|------------|---------|
| [repo_1] | [release_link_1] |
| [repo_2] | [release_link_2] |
| ... | ... |
---
*Generated automatically from GitHub Project Board*
Step 7.3: Confirm success and provide the user with all published links.
project scope. Tell the user which scopes are needed.https://api.github.com — ensure network access is available