Agent Skill
2/7/2026

changelog

Generate weekly changelog entries for blog and all GitHub repos. Use when asked to summarize changes, update the changelog, or at the end of a productive week. Analyzes git history across repos and creates curated summaries with deep links.

I
idvorkin
3GitHub Stars
1Views
npx skills add idvorkin/idvorkin.github.io

SKILL.md

Namechangelog
DescriptionGenerate weekly changelog entries for blog and all GitHub repos. Use when asked to summarize changes, update the changelog, or at the end of a productive week. Analyzes git history across repos and creates curated summaries with deep links.

name: changelog description: Generate weekly changelog entries for blog and all GitHub repos. Use when asked to summarize changes, update the changelog, or at the end of a productive week. Analyzes git history across repos and creates curated summaries with deep links. allowed-tools: Bash, Read, Edit, Write

Changelog Generator

Generate weekly changelog entries for the blog and other GitHub repos with deep links.

When To Use

  • When asked to summarize recent blog changes
  • When asked to update the changelog
  • At the end of a productive week of work
  • When asked "what changed this week"
  • When asked to review changes across all repos

Workflow

1. Determine Time Range

Default to the last 7 days, or use user-specified range:

# Get commits from last 7 days
git log --since="$(date -d '7 days ago' +%Y-%m-%d)" --oneline upstream/main | wc -l

# Or specific date range
git log --since="2026-01-25" --until="2026-02-01" --oneline upstream/main

2. Identify Changed Content Files

Find the most-modified content files:

git log --since="$START_DATE" --name-only --pretty=format: upstream/main \
  | grep -E "^_d/|^_posts/" \
  | sort | uniq -c | sort -rn | head -20

3. Read Actual Content Diffs (NOT commit messages!)

IMPORTANT: Descriptions must be based on the ACTUAL CONTENT added, not commit messages. Commit messages are often vague or misleading.

For blog content, read the diffs to see what was actually written:

# Get the actual content diff for a file
git diff upstream/main~N..upstream/main -- _d/ai-journal.md | head -200

# For a specific commit
git show COMMIT_HASH -- _d/filename.md

What to extract from diffs:

  • New section headers (what topics were added?)
  • Key concepts, frameworks, or models introduced
  • Specific examples or case studies
  • Quotes or references to external sources
  • Tables, lists, or structured content

Example - BAD (from commit message):

"Add spiritual health content"

Example - GOOD (from actual diff):

"Vanaprastha framework: 4-stage Hindu life model (Brahmacharya→Grihastha→Vanaprastha→Sannyasa). Three obstacles: 'None' identity trap, Santa in the Church, Tyranny of Time."

For other repos, get diff summaries:

# Get commit with file changes and patch preview
gh api "repos/idvorkin/REPO/commits/HASH" \
  --jq '{message: .commit.message, files: [.files[] | {name: .filename, patch: .patch[0:500]}]}'

4. Generate Changelog Entry

Create entry in _d/changelog.md with this format:

## Week of YYYY-MM-DD

_N commits this week_

### [Theme Name]

Description of changes in this theme:

- **Item title** - Description ([blog](/permalink#section)) ([github](https://github.com/idvorkin/idvorkin.github.io/commit/SHORTHASH))

Deep Link Format

Always include both blog and GitHub links where applicable:

  • Blog link: ([blog](/permalink)) or ([blog](/permalink#section-anchor))
  • GitHub icon link: [<i class="fa fa-github"></i>](https://github.com/idvorkin/idvorkin.github.io/commit/SHORTHASH)

Use short commit hashes (first 9 chars) for readability. The GitHub icon (<i class="fa fa-github"></i>) renders as a clickable icon.

5. Finding Section Anchors

To find the correct section anchor for a blog post:

# Get headers from a file
grep "^#" _d/filename.md | head -20

Section anchors are slugified headers:

  • ### My Section Title#my-section-title
  • ### AI & Machine Learning#ai--machine-learning

Example Output

BAD - based on commit messages (vague, unhelpful):

- **Software Survival 3.0** - Added Steve Yegge's framework
- **Code as Costly Signal** - Discussed what code signals

GOOD - based on actual content diffs (specific, informative):

## Week of 2026-01-25

_41 commits this week_

### AI Journal Updates

Five new entries on AI-era software development ([blog](/ai-journal#2026-01-31)):

- **Software Survival 3.0** - Yegge's survival ratio: `Survival ∝ (Savings × Usage × H) / (Awareness + Friction)`. Six levers: insight compression, substrate efficiency, broad utility, publicity, minimize friction, human coefficient. "Nobody is coming for grep." [<i class="fa fa-github"></i>](https://github.com/idvorkin/idvorkin.github.io/commit/bdedc6f02)
- **Code as Cattle, Not Pets** - Infrastructure parallel: servers went from pets (unique hostnames) to cattle (who cares which server). Code making same shift. "The system is dead, long live the factory." [<i class="fa fa-github"></i>](https://github.com/idvorkin/idvorkin.github.io/commit/81b465c2c)

Notice how the GOOD version includes:

  • Actual formulas/frameworks from the content
  • Specific quotes
  • Key concepts explained
  • Concrete examples mentioned in the post

Common Themes to Look For

ThemeFiles to CheckKeywords
AI/Techai-*.md, how-igor-chops.mdAI, coding, CHOP
Health*-pain.md, physical-*.mdpain, exercise, health
Spiritualspiritual-*.md, religion.md, meditation.mdspiritual, meditation
Life Planninggap-year.md, y20*.md, retire.mdgoals, planning
Infrastructure.claude/, scripts/, _plugins/fix, improve, add command

Update TOC

After adding a new week, update the TOC at the top of the changelog:

<!-- vim-markdown-toc-start -->

- [Week of 2026-01-25](#week-of-2026-01-25)
  - [AI Journal Updates](#ai-journal-updates)
  - [Theme 2](#theme-2)
<!-- vim-markdown-toc-end -->

Cross-Repo Changelog

List Active Repos

Find repos with recent activity:

gh repo list idvorkin --limit 50 --json name,pushedAt \
  --jq '.[] | select(.pushedAt > "DATE") | .name'

Get Commits from All Active Repos

gh repo list idvorkin --limit 100 --json name,pushedAt \
  --jq '.[] | select(.pushedAt > "DATE") | .name' | while read repo; do
  echo "=== $repo ==="
  gh api repos/idvorkin/$repo/commits \
    --jq '.[0:10] | .[] | "\(.sha[0:9]) \(.commit.message | split("\n")[0])"' 2>/dev/null
  echo ""
done

Key Repos to Track

RepoPurposeWhat to Look For
idvorkin.github.ioBlogContent changes, new posts
SettingsDotfiles/toolsNew commands, config changes
nlpAI/NLP toolsNew models, features
chop-conventionsCHOP docsWorkflow improvements
tony_teslaVoice AITony/Vapi updates
*-explainerVisualizationsNew explainers

Cross-Repo Entry Format

For regular repos (link repo name to GitHub):

**[Settings](https://github.com/idvorkin/Settings)** (dotfiles & tools)
- Added terminal tab switching command [<i class="fa fa-github"></i>](https://github.com/idvorkin/Settings/commit/HASH)

For explainers/apps with deployments (link name to deployment, icon to repo):

**[monitor-explainer](https://monitor-explorer.surge.sh)** (visualization) [<i class="fa fa-github"></i>](https://github.com/idvorkin/monitor-explainer)
- Added comprehensive content [<i class="fa fa-github"></i>](https://github.com/idvorkin/monitor-explainer/commit/HASH)

Link Patterns

TypeName Links ToGitHub Icon
Regular repoGitHub repoCommit link
Explainer/appLive deploymentRepo link (header) + Commit link (items)

GitHub Icon Link Format

[<i class="fa fa-github"></i>](https://github.com/idvorkin/REPO_NAME/commit/SHORTHASH)

Commit Message

When committing changelog updates:

Add changelog entry for week of YYYY-MM-DD

Summarizes N commits across themes:
- Theme 1: brief description
- Theme 2: brief description
- Other projects: brief description
Skills Info
Original Name:changelogAuthor:idvorkin