Git Workflow and Versioning
addyosmani/agent-skills
Sets git habits for every change: short-lived branches, atomic commits with descriptive messages, clean pull requests, plus versioning, tagging and changelogs for releases.
Parse git history and produce or update a CHANGELOG.md following the Keep a Changelog convention.
$ npx skills add espennilsen/pi --skill changelog-generator -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install espennilsen/pi changelog-generator --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/espennilsen/pi.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/changelog-generator .claude/skills/changelog-generator && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "changelog-generator" agent skill from https://github.com/espennilsen/pi/tree/main/skills/changelog-generator into .claude/skills/changelog-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "changelog-generator", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/espennilsen/pi/tree/main/skills/changelog-generatorType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add espennilsen/pi --skill changelog-generator -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install espennilsen/pi changelog-generator --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/espennilsen/pi.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/changelog-generator .agents/skills/changelog-generator && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "changelog-generator" agent skill from https://github.com/espennilsen/pi/tree/main/skills/changelog-generator into .agents/skills/changelog-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "changelog-generator", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add espennilsen/pi --skill changelog-generator -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install espennilsen/pi changelog-generator --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/espennilsen/pi.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/changelog-generator .cursor/skills/changelog-generator && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "changelog-generator" agent skill from https://github.com/espennilsen/pi/tree/main/skills/changelog-generator into .cursor/skills/changelog-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "changelog-generator", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/espennilsen/pi.git --path skills/changelog-generator--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add espennilsen/pi --skill changelog-generator -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install espennilsen/pi changelog-generator --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/espennilsen/pi.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/changelog-generator .gemini/skills/changelog-generator && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "changelog-generator" agent skill from https://github.com/espennilsen/pi/tree/main/skills/changelog-generator into .gemini/skills/changelog-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "changelog-generator", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install espennilsen/pi changelog-generatorInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add espennilsen/pi --skill changelog-generator -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/espennilsen/pi.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/changelog-generator .github/skills/changelog-generator && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "changelog-generator" agent skill from https://github.com/espennilsen/pi/tree/main/skills/changelog-generator into .github/skills/changelog-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "changelog-generator", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add espennilsen/pi --skill changelog-generator -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install espennilsen/pi changelog-generator --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/espennilsen/pi.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/changelog-generator .opencode/skills/changelog-generator && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "changelog-generator" agent skill from https://github.com/espennilsen/pi/tree/main/skills/changelog-generator into .opencode/skills/changelog-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "changelog-generator", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
changelog-generatorParse git history and produce or update a CHANGELOG.md following the Keep a Changelog convention.
Changelog Generator is an agent skill from espennilsen/pi. 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…
Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Changelog and release notes, Commit messages and Git workflow. It works with Git and Angular. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 79d019b. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comkeepachangelog.comsemver.orgFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Changelog Generator loads about 3.7k tokens when it runs. Until then it costs about 237 tokens; SKILL.md has 1,421 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from espennilsen/pi at commit 79d019b, republished under its MIT licence (© espennilsen). 1,421 words, ~3,686 tokens.
.claude/skills/changelog-generator/SKILL.md (or your agent's skills folder).Parse a project's git history and produce a high-quality CHANGELOG.md following the Keep a Changelog 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 -20Map 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:
Merge branch..., Merge pull request...) — extract the PR title insteadci:, build:, changes only to .github/workflows/)chore:, dependency bumps without breaking changes)style: that don't affect behavior)chore: bump version to...)When commits don't follow a convention, categorize by analyzing the message content:
Flag breaking changes regardless of convention:
! after type/scope, or BREAKING CHANGE: in footerMark breaking entries with BREAKING: prefix in the changelog.
Transform raw commit data into human-readable changelog entries.
(#123), ([#123](url))(@username) for non-core contributors- Add dark mode support with automatic system preference detection (#142)
- **BREAKING:** Remove deprecated `v1/users` endpoint; use `v2/users` instead (#138)
- Fix memory leak in WebSocket connection handler (#145)# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- Description of new feature (#PR)
### Fixed
- Description of bug fix (#PR)
## [1.2.0] - 2025-09-15
### Added
- Add OAuth2 authentication support (#89)
- Add CSV export for user data (#92)
### Changed
- Improve query performance for large datasets (#91)
### Fixed
- Fix timezone handling in scheduled reports (#88)
- Fix incorrect pagination count on filtered results (#90)
### Removed
- **BREAKING:** Remove legacy XML API endpoint (#87)
## [1.1.0] - 2025-06-01
### Added
- ...
[Unreleased]: https://github.com/user/repo/compare/v1.2.0...HEAD
[1.2.0]: https://github.com/user/repo/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/user/repo/compare/v1.0.0...v1.1.0# Changelog — only one H1## [1.2.0] - 2025-09-15 — square brackets around version, ISO date### Added, ### Changed, etc. — only use categories that have entriesYYYY-MM-DD — no exceptionsNo existing changelog. Generate the full history.
# Get tags in chronological order
git tag --sort=creatordate
# Get date of a tag
git log -1 --format=%aI v1.0.0A CHANGELOG.md already exists. Add new entries.
## [Unreleased] (or at the top if no Unreleased)Never modify existing entries unless the user explicitly asks for a reformat.
User has a messy or inconsistent changelog. Rewrite to match the standard.
User wants to create a changelog entry for an upcoming release.
## [Unreleased] to the new version sectionIf the project has no tags, treat all commits as unreleased. Ask the user if they want to:
## [Unreleased] section## [0.1.0] retroactively from the initial commitIf the project is a monorepo with multiple packages:
git log -- packages/package-name/If the project uses squash merges, the PR title becomes the commit message. These are often well-written and can be used directly as changelog entries.
If there are >500 commits to process:
For projects that haven't reached 1.0:
After generating, verify:
# Changelog)## [X.Y.Z] - YYYY-MM-DD### Added, ### Changed, etc.git log --oneline. Curate and rewrite.The final output should be:
Always write the changelog as a file so the user can review and commit it directly.
© espennilsen, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/changelog-generator of espennilsen/pi.
Open the folder on GitHubat commit 79d019b
Changelog Generator next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Changelog Generator this skillespennilsen/pi | 122 | — | ~3.7k | Automated safety check: Pass | MIT | |
| Git Workflow and Versioningaddyosmani/agent-skills | 105k | 2 repos | ~3.5k | Automated safety check: Notes | MIT | |
| Git Committisfeng/Easydict | 15k | — | ~535 | Automated safety check: Pass | GPL-3.0 | |
| WooCommerce Git Commitwoocommerce/woocommerce | 11k | — | ~1.2k | Automated safety check: Pass | Custom licence | |
| Git Changes ReporterNo-Trade-No-Life/Yuan | 352 | — | ~1.2k | Automated safety check: Pass | MIT | |
| Shift Commit Rulesshift-editor/shift | 350 | — | ~1.4k | Automated safety check: Notes | Apache-2.0 |
addyosmani/agent-skills
Sets git habits for every change: short-lived branches, atomic commits with descriptive messages, clean pull requests, plus versioning, tagging and changelogs for releases.
tisfeng/Easydict
起草、创建或汇报 Angular-style 本地 Git 提交。用于明确的提交交付;分支集成使用 worktree-rebase-merge,不 push。
woocommerce/woocommerce
Commits pending changes with short, verb-first messages that follow WooCommerce repository conventions, splitting commits only when changes are clearly unrelated.
No-Trade-No-Life/Yuan
生成结构化 git 变更报告(JSON + Markdown)。使用此技能当用户提到"git 变更"、"commit 摘要"、"代码审查"、"release note"、"近期改动"、"每日摘要",或需要分析指定 commit 区间的代码变更。包含三元组结构(设计意图、核心代码、影响范围)的语义化报告,适用于代码审查、发布说明、团队同步、CI/CD 等场景。
shift-editor/shift
Rules for writing git commits in the Shift font editor repo: Conventional Commits subjects, user-facing changelog wording, concise subjects and logical commit boundaries.
escapeWu/perplexity-ai
Bumps a project version, updates both changelogs, builds the frontend, then commits, tags and pushes the release.
espennilsen/pi
Interact with GitHub repos, PRs, issues, CI, and notifications via the pi-github extension commands and gh CLI.
espennilsen/pi
Create, review, and improve skills for Pi agents. An agent skill from espennilsen/pi.
espennilsen/pi
Perform a comprehensive DRY (Don't Repeat Yourself) code review on a codebase.
espennilsen/pi
Reverse-engineer a design system from a live website (public URL or localhost).
espennilsen/pi
Read and extract content from PDF files — text, tables, metadata, and images.
espennilsen/pi
Manage Google Workspace via the gws CLI — Drive, Gmail, Sheets, Docs, Slides, People, Chat, Meet, Forms, and cross-service workflows.
Categories
Parse git history and produce or update a CHANGELOG.md following the Keep a Changelog convention. Changelog Generator is an agent skill from espennilsen/pi.md following the Keep a Changelog convention.
Changelog Generator fits situations like: — use this skill when: - User asks to generate; write a changelog - User mentions 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.
Run `npx skills add espennilsen/pi --skill changelog-generator -a claude-code`. Or copy the skill folder (skills/changelog-generator in espennilsen/pi) into .claude/skills/changelog-generator in your project. Claude Code loads it when a task matches its description.
Run `npx skills add espennilsen/pi --skill changelog-generator -a codex`. Or copy the skill folder (skills/changelog-generator in espennilsen/pi) into .agents/skills/changelog-generator in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add espennilsen/pi --skill changelog-generator -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/changelog-generator, .gemini/skills/changelog-generator, .github/skills/changelog-generator and .opencode/skills/changelog-generator in your project.
Going by SKILL.md and its folder, Changelog Generator needs the command-line tools its instructions call (git).
SKILL.md names 3 domains. In commands or code: github.com, keepachangelog.com and semver.org; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Changelog Generator is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Changelog Generator: Git Workflow and Versioning (addyosmani/agent-skills, 105k stars), Git Commit (tisfeng/Easydict, 15k stars), WooCommerce Git Commit (woocommerce/woocommerce, 11k stars) and Git Changes Reporter (No-Trade-No-Life/Yuan, 352 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
espennilsen (a GitHub user) maintains it in espennilsen/pi, which has 122 GitHub stars. The repository holds 36 skills in this directory. The repository was last updated on September 21, 2026.
Source: espennilsen/pi on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.