# Daily Releases

> Create GitHub Releases with AI-analyzed changelogs for every calendar day with commits on origin/main. Use when creating daily release notes, backfilling releases, or generating AI-categorized changelogs per day. Uses collect → bucket → analyze → synthesize → publish pipeline via Haiku subagents. Idempotent — skips up-to-date days, updates releases where new commits were added. Accepts optional -…

- **Type:** Skill
- **Install:** `agentstack add skill-jamie-bitflight-claude-skills-daily-releases`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [Jamie-BitFlight](https://agentstack.voostack.com/s/jamie-bitflight)
- **Installs:** 0
- **Category:** [Developer Tools](https://agentstack.voostack.com/c/developer-tools)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [Jamie-BitFlight](https://github.com/Jamie-BitFlight)
- **Source:** https://github.com/Jamie-BitFlight/claude_skills/tree/main/.claude/skills/daily-releases

## Install

```sh
agentstack add skill-jamie-bitflight-claude-skills-daily-releases
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## 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 ``:

```text
--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

```bash
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:

```json
{
  "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

```bash
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 counts
- `commits.json` — commits with SHA, message, files touched
- `issues.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

```bash
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/`:

```python
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 (commit_count, files_changed, lines_added,
lines_deleted). No synthesis agent needed.

**If two or more buckets exist:**

```python
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

```bash
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

```bash
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:

```text
Processed N days:
  - Created: X new releases
  - Updated: Y existing releases
  - Skipped: Z already up to date
```

## Reference files

- [./scripts/list_daily_ranges.py](./scripts/list_daily_ranges.py) — list days + commit ranges
- [./scripts/collect_day_dataset.py](./scripts/collect_day_dataset.py) — per-file diff + commit + issues extraction into `dataset/`
- [./scripts/bucket_day_data.py](./scripts/bucket_day_data.py) — token-bounded semantic bucketing into `buckets/`
- [./scripts/publish_daily_release.py](./scripts/publish_daily_release.py) — create/update git tag + GitHub release
- [./references/synthesis_prompt.md](./references/synthesis_prompt.md) — per-bucket analysis prompt + day synthesis prompt
- [../create-merge-request-changelog/scripts/format_mr_description.py](../create-merge-request-changelog/scripts/format_mr_description.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](https://github.com/Jamie-BitFlight)
- **Source:** [Jamie-BitFlight/claude_skills](https://github.com/Jamie-BitFlight/claude_skills)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-jamie-bitflight-claude-skills-daily-releases
- Seller: https://agentstack.voostack.com/s/jamie-bitflight
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
