pi-heartbeat
Configure periodic health checks via HEARTBEAT.md and the /heartbeat command.
Parse git history and produce or update a CHANGELOG.md following the Keep a Changelog convention. Supports Conventional Commits, basic prefix conventions, and unstructured commit messages. Intelligently categorizes changes, detects breaking changes, links to PRs/issues, and
$ npx -y skills add espennilsen/pi --skill changelog-generator --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/changelog-generatorContext preview
The summary Claude sees to decide when to auto-load this skill.
Parse git history and produce or update a CHANGELOG.md following the Keep a Changelog convention. Supports Conventional Commits, basic prefix conventions, and unstructured commit messages. Intelligently categorizes changes, detects breaking changes, links to PRs/issues, and
name: changelog-generator description: > Parse git history and produce or update a CHANGELOG.md following the Keep a Changelog convention. Supports Conventional Commits, basic prefix conventions, and unstructured commit messages. Intelligently categorizes changes, detects breaking changes, links to PRs/issues, and handles both initial generation and incremental updates. **Triggers — use this skill when:** - User asks to "generate", "create", "update", or "write" a changelog - User mentions "CHANGELOG", "changelog", "release notes" - User says "document changes", "what changed since last release" - User wants to "prepare a release" and needs a changelog entry - User asks to "clean up" or "reformat" an existing changelog **Covers:** Any git-based project. Handles Conventional Commits (feat/fix/chore), Angular convention, basic prefixes (Add/Fix/Remove), and freeform commit messages. Outputs Keep a Changelog format with optional Common Changelog enhancements.
Parse a project's git history and produce a high-quality CHANGELOG.md following the [Keep a Changelog](https://keepachangelog.com/) convention.
A changelog is for **humans**, not machines. It answers: "What meaningful changes happened between version X and version Y?" Raw commit logs fail at this because they contain noise — typo fixes, merge commits, CI tweaks, and refactors that don't affect users. This skill filters signal from noise and writes entries that a user or contributor can actually understand.
---
Before generating anything, understand the project's commit and versioning patterns.
# 1. Check if we're in a git repo git rev-parse --is-inside-work-tree 2>/dev/null # 2. Get all tags (versions) sorted by date git tag --sort=-creatordate | head -30 # 3. Detect versioning scheme # SemVer: v1.2.3 or 1.2.3 # CalVer: 2025.01, 2025-01-15 # Other: named releases, build numbers git tag --sort=-creatordate | head -10 # 4. Detect commit convention # Sample recent commits to identify the pattern git log --oneline -30 # 5. Check for existing changelog cat CHANGELOG.md 2>/dev/null cat HISTORY.md 2>/dev/null cat CHANGES.md 2>/dev/null # 6. Check for existing config that hints at convention cat .commitlintrc* commitlint.config.* 2>/dev/null # Commitlint cat .czrc .cz.toml 2>/dev/null # Commitizen cat cliff.toml 2>/dev/null # git-cliff cat .versionrc* 2>/dev/null # standard-version # 7. Get remote URL for PR/issue links git remote get-url origin 2>/dev/null # 8. Package manifest for current version cat package.json 2>/dev/null | grep '"version"' cat pyproject.toml 2>/dev/null | grep 'version' cat Cargo.toml 2>/dev/null | grep '^version'
**Extract from the analysis:**
| Fact | How to determine | |------|-----------------| | Commit convention | Pattern match on recent commits (see detection rules below) | | Versioning scheme | Tag format analysis | | Latest version/tag | Most recent tag | | Remote URL | `git remote get-url origin` — needed for PR/issue links | | Existing changelog | Check for CHANGELOG.md or variants | | Unreleased commits | Commits since the latest tag |
Analyze the last 30–50 commits to detect which convention is in use. Apply these rules in order:
**Conventional Commits / Angular**
Pattern: ^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\(.+\))?!?: Example: feat(auth): add OAuth2 support Example: fix!: resolve race condition in queue
→ If >50% of commits match this pattern, use Conventional Commits parsing.
**Basic Prefix**
Pattern: ^(Add|Fix|Remove|Update|Change|Deprecate|Security)[: ] Example: Add user export feature Example: Fix login redirect loop
→ If >50% of commits match this pattern, use basic prefix parsing.
**Freeform / No Convention** → If neither pattern dominates, use AI-assisted categorization (see Phase 3).
Report the detected convention to the user before proceeding.
Extract commits for the target range and categorize them.
# All commits since last tag (for Unreleased section) git log $(git describe --tags --abbrev=0 2>/dev/null)..HEAD \ --pretty=format:"%H|%s|%b|%an|%ae|%aI" 2>/dev/null # Commits between two tags (for a specific version) git log v1.1.0..v1.2.0 \ --pretty=format:"%H|%s|%b|%an|%ae|%aI" # If no tags exist, get all commits git log --pretty=format:"%H|%s|%b|%an|%ae|%aI" # Get PR/merge info if available git log --merges --oneline -20
Map commits to Keep a Changelog categories:
| Keep a Changelog Category | Conventional Commits types | Basic prefixes | Description | |---------------------------|---------------------------|----------------|-------------| | **Added** | `feat` | Add, Create, Implement | New features | | **Changed** | `refactor`, `perf`, `style` | Change, Update, Refactor, Improve | Changes to existing functionality | | **Deprecated** | — (detect from message) | Deprecate | Soon-to-be removed features | | **Removed** | — (detect from message) | Remove, Delete, Drop | Removed features | | **Fixed** | `fix` | Fix, Resolve, Correct | Bug fixes | | **Security** | — (detect from message) | Security | Vulnerability fixes |
Do NOT include these in the changelog unless they have user-facing impact:
This repository is my Pi coding agent home directory. I keep it under version control and symlink it to ~/.pi/agent so Pi loads configuration, extensions, skills, and runtime state from here.
Configure periodic health checks via HEARTBEAT.md and the /heartbeat command.
Manage persistent memory across sessions. Use when asked to remember, recall, forget, or review what was stored. Covers long-term…
Track and manage projects with git status via dashboard and tool.
Delegate tasks to specialized subagents for parallel or sequential execution.
Audit, generate, update, and lint AGENTS.md files across all projects. Use when asked to check project context files, scaffold…