Install
$ agentstack add skill-jamie-bitflight-claude-skills-daily-releases ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
$ARGUMENTS
Daily Releases
Create GitHub Releases with AI-categorized changelogs for every day that had commits. Uses the same pipeline as /create-merge-request-changelog — real AI analysis, not template substitution.
Automatic Invocation
When this skill is activated, immediately begin processing without asking the user. Parse any arguments from ``:
--start-date YYYY-MM-DD Only process days on or after this date
--end-date YYYY-MM-DD Only process days on or before this date (default: today)
--branch BRANCH Git branch (default: origin/main)
--dry-run Preview without creating releases
Process
Requires GITHUB_TOKEN for release status checks (list) and publishing.
Working directory: Run all commands from the repository root. Paths below assume cwd is the repo root.
Step 1: List days to process
uv run .claude/skills/daily-releases/scripts/list_daily_ranges.py [--branch BRANCH] [--start-date ...] [--end-date ...] [-R OWNER/REPO]
This outputs a JSON array. Each entry has:
{
"date": "2026-02-21",
"tag": "v2026.02.21",
"base_ref": "",
"head_ref": "",
"commit_count": 12,
"release_exists": true,
"needs_update": false
}
Skip entries where release_exists: true and needs_update: false — those are up to date.
For --dry-run, print the list and stop.
Step 2: For each day that needs a release
Work through days chronologically. For each day, the pipeline collects data, buckets it by token budget, analyses each bucket with a Haiku subagent, synthesises the results, then formats and publishes. Days with few commits pass through a single bucket with no synthesis overhead.
2a. Collect dataset
uv run .claude/skills/daily-releases/scripts/collect_day_dataset.py \
./daily-releases// [-R OWNER/REPO]
Writes ./daily-releases//dataset/:
files.json— changed source files with status and line countscommits.json— commits with SHA, message, files touchedissues.json— GitHub issues/PRs referenced or closed (empty if no token)diffs/.diff— per-file unified diff for each source file
Source files: *.py .js .cjs .mjs .ts .tsx .sh .md .json .yaml .yml Excluded: dist/ build/ node_modules/ vendor/ .venv/ and similar build outputs.
2b. Create token-bounded buckets
uv run .claude/skills/daily-releases/scripts/bucket_day_data.py \
./daily-releases// [--token-limit 100000]
Token limit defaults to env var DAILY_RELEASES_TOKEN_LIMIT or 100000.
Groups source files by directory module, fills buckets greedily keeping each under the token limit (measured with tiktoken cl100k_base as a proxy).
Writes ./daily-releases//buckets/bucket_NNN/:
manifest.json—{bucket_id, files, token_count, commit_shas}content.txt— file diffs followed by commit messages for this bucket
Prints a summary listing bucket count and token sizes.
2c. Analyse each bucket (delegate — do NOT read bucket files yourself)
For each bucket_NNN/ directory found under ./daily-releases//buckets/:
Agent(
subagent_type="general-purpose",
model="claude-haiku-4-5-20251001",
prompt="""
Read: ./daily-releases//buckets/bucket_NNN/content.txt
Apply the Per-Bucket Analysis Prompt from:
.claude/skills/daily-releases/references/synthesis_prompt.md
Write the structured JSON output to:
./daily-releases//summaries/bucket_NNN.json
Report "bucket_NNN.json written" when done.
"""
)
Replace ` and NNN` with actual values before emitting each Agent() call. Buckets may be processed in parallel — each writes to its own summary file.
After all agents return, verify each summaries/bucket_NNN.json exists. Stop with an error if any is missing.
2d. Synthesise summaries into analysis.json
If exactly one bucket exists: promote its JSON directly — copy summaries/bucket_001.json to analysis.json, adding a statistics block from dataset/files.json counts (commitcount, fileschanged, linesadded, linesdeleted). No synthesis agent needed.
If two or more buckets exist:
Agent(
subagent_type="general-purpose",
model="claude-haiku-4-5-20251001",
prompt="""
Apply the Day Synthesis Prompt from:
.claude/skills/daily-releases/references/synthesis_prompt.md
Read all bucket summary files:
./daily-releases//summaries/bucket_001.json
./daily-releases//summaries/bucket_002.json
... (list all that exist)
Also read ./daily-releases//dataset/files.json for statistics counts.
Write the merged analysis JSON to: ./daily-releases//analysis.json
Report "analysis.json written" when done.
"""
)
After the agent returns, verify ./daily-releases//analysis.json exists. Stop with an error if missing.
2e. Format into release notes
uv run .claude/skills/create-merge-request-changelog/scripts/format_mr_description.py \
./daily-releases//analysis.json \
--no-preview \
--output ./daily-releases//description.md
2f. Publish the release
uv run .claude/skills/daily-releases/scripts/publish_daily_release.py \
--date \
--tag \
--head-ref \
--notes-file ./daily-releases//description.md
Add --keep-existing-tag=false if updating a release that already has the correct tag commit.
Step 3: Report
After processing all days, print a summary:
Processed N days:
- Created: X new releases
- Updated: Y existing releases
- Skipped: Z already up to date
Reference files
- [./scripts/listdailyranges.py](./scripts/listdailyranges.py) — list days + commit ranges
- [./scripts/collectdaydataset.py](./scripts/collectdaydataset.py) — per-file diff + commit + issues extraction into
dataset/ - [./scripts/bucketdaydata.py](./scripts/bucketdaydata.py) — token-bounded semantic bucketing into
buckets/ - [./scripts/publishdailyrelease.py](./scripts/publishdailyrelease.py) — create/update git tag + GitHub release
- [./references/synthesisprompt.md](./references/synthesisprompt.md) — per-bucket analysis prompt + day synthesis prompt
- [../create-merge-request-changelog/scripts/formatmrdescription.py](../create-merge-request-changelog/scripts/formatmrdescription.py) — render analysis.json to markdown
Reference paths above are relative to this skill directory; CLI commands use repo-root paths.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Jamie-BitFlight
- Source: Jamie-BitFlight/claude_skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.