sprint-release-notes
by @tenkus47
Automatically generate sprint release notes from a GitHub Project Board and publish to their respective repositories. Groups completed items by repository, g...
clawhub install sprint-release-notesπ About This Skill
name: sprint-release-notes description: > Automatically 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.
Sprint Release Notes Generator
Generate 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.
Required Inputs
Collect these from the user before starting:
1. GitHub Project Board URL β e.g., https://github.com/orgs/{org}/projects/{number} or https://github.com/users/{user}/projects/{number}
2. GitHub PAT Token β must have scopes: repo, read:org, project (read access to Projects v2)
3. Sprint identifier (optional) β if not provided, auto-detect the current/latest completed sprint iteration
If any of these are missing, ask the user before proceeding.
Workflow Overview
The skill executes in 7 phases. Run them sequentially:
1. Discover Sprint β Query the GitHub Project Board for the current sprint iteration 2. Categorize Items β Separate completed vs. deferred/carried-over items, and group by repository 3. Deep-Read Completed Items β For each completed item, read associated repo docs, PRs, commits 4. Evaluate Contributors β Score engineers for Lead Engineer & MVP recognition 5. Compile Per-Repo Release Notes β Generate separate markdown for each repository 6. Publish to Respective Repos β Create or update a GitHub Release per repo with the markdown as the release body 7. Post to Project Issue (Optional) β Comment on a designated issue with summary links
Phase 1: Discover Sprint
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.
Phase 2: Categorize Items & Group by Repo
Separate items into:
Group by Repository:
Map> body)Also extract metadata:
v1.{sprint_number}.0Phase 3: Deep-Read Completed Items
For 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:
Phase 4: Evaluate Contributors
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.
Phase 5: Compile Per-Repo Release Notes
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]*
Phase 6: Publish to Respective Repos (GitHub Releases)
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.Phase 7: Post Summary to Project Issue (Optional)
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 PublishedRelease 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.
Error Handling
project scope. Tell the user which scopes are needed.Important Notes
https://api.github.com β ensure network access is available