Back to Beads

Newsletter Generator

scripts/generate-newsletter_README.md

1.0.33.3 KB
Original Source

Newsletter Generator

This script generates a weekly Beads newsletter based on the changelog, git commits, and code changes.

Setup

Environment Variables

Set the appropriate API key for your chosen model:

bash
# For Claude
export ANTHROPIC_API_KEY="your-api-key"

# For OpenAI
export OPENAI_API_KEY="your-api-key"

# Optionally set the model (defaults to claude-sonnet-4-20250514)
export AI_MODEL="claude-sonnet-4-20250514"
# or
export AI_MODEL="gpt-4o"

# Optional: Auto-commit and push
export AUTO_COMMIT="true"

Usage

Generate a newsletter (last week)

bash
git checkout main
git pull
uv run scripts/generate-newsletter.py

Generate for last N days

bash
uv run scripts/generate-newsletter.py --days 30

Generate since a specific date

bash
# Since an absolute date
uv run scripts/generate-newsletter.py --since 2025-12-15

# Or use relative format (last 14 days)
uv run scripts/generate-newsletter.py --since 14d

Generate for a specific release range

bash
# From v0.39 to v0.48
uv run scripts/generate-newsletter.py --from-release v0.39.0 --to-release v0.48.0

# From v0.39 to present
uv run scripts/generate-newsletter.py --from-release v0.39.0

# Up to v0.48.0
uv run scripts/generate-newsletter.py --to-release v0.48.0

With specific AI model

bash
uv run scripts/generate-newsletter.py --model gpt-4o

Dry run (print to stdout)

bash
uv run scripts/generate-newsletter.py --dry-run

Output to specific file

bash
uv run scripts/generate-newsletter.py --output my-newsletter.md

Help

bash
uv run scripts/generate-newsletter.py --help

Cron Job Setup

Add to your crontab for weekly generation:

bash
# Run every Monday at 9 AM
0 9 * * 1 cd /path/to/beads && uv run scripts/generate-newsletter.py

How It Works

The newsletter generator creates a deeper dive beyond the changelog with workflow-impacting content:

  1. Reads the most recent version from CHANGELOG.md
  2. Determines time period - uses "last week" or "since last release" (whichever is longer), or as specified
  3. Fetches git commits for that period
  4. Extracts changelog section for the current version
  5. Extracts new commands & options - diffs the cmd/ directory between versions, parses cobra command definitions to identify new CLI commands with descriptions
  6. Extracts breaking changes - mines the changelog for explicit breaking change entries
  7. Finds documentation context - searches README.md and docs/ for relevant command documentation
  8. Sends structured data to AI - includes commits, changelog, new commands, and breaking changes
  9. AI generates narrative newsletter - creates prose sections (not bullet lists) explaining:
    • Why new commands matter and how to use them
    • What breaking changes require and migration paths
    • Which features users should prioritize exploring
  10. Writes to NEWSLETTER.md

The AI prompt specifically requests narrative paragraphs to help users understand workflow impacts and new features worth exploring, rather than just listing changes.

Supported Models

ProviderExample Models
Anthropicclaude-sonnet-4-20250514, claude-opus-4-20250514
OpenAIgpt-4o, gpt-4o-mini, o1-preview, o3-mini

The script auto-detects the provider from the model name.