Skip to main content
skill CX Codex

conventional-commits — Claude Code skill: standard commit messages

The skill writes commit messages to the Conventional Commits spec: type, scope, body and footers. Useful when you want automated versioning and changelogs.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add patricio0312rev/skills --skill conventional-commits -a claude-code
Open on GitHub

What conventional-commits does

The skill reads your staged changes and builds a message on the <type>[optional scope]: <description> pattern. Types come from a fixed list: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert. A scope in parentheses names the module or file touched, like auth, api or docker.

Breaking changes get a ! after the type or a BREAKING CHANGE footer. Footers also carry issue links: Fixes #123, Closes #456, Refs #789, plus Reviewed-by and Co-authored-by. Descriptions are meant to be imperative, under 72 characters, lowercase, no trailing period.

It ships configs for commitlint and a Husky hook that lints messages on commit-msg, along with a semantic-release setup for version bumps. One thing to watch: the commitlint rules set scope-case to kebab-case and subject-case to lower-case, so capitalised subjects will fail the check.

What it helps with

  • turn staged changes into a commit message
  • flag a breaking change and describe the migration
  • link a commit to an issue with a Fixes footer
  • lint commit messages on the commit-msg hook
  • wire up automatic version bumps from commit types

Example prompts for the agent

  • write a commit message for the staged changes
  • format this as a conventional commit with the auth scope
  • add a breaking change note to the commit message

How to install conventional-commits

1Skills CLI (Vercel)

npx skills add patricio0312rev/skills --skill conventional-commits -a claude-code

2Manually: put the files in place

~/.claude/skills/conventional-commits/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/conventional-commits/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about conventional-commits

How do I install conventional-commits in Claude?

Run npx skills add patricio0312rev/skills --skill conventional-commits -a claude-code. The skill lands in ~/.claude/skills/conventional-commits/SKILL.md.

What does conventional-commits do?

It generates commit messages to the Conventional Commits spec: picks the type and scope, adds a body and footers, and marks breaking changes.

What tooling does it work with?

It includes a commitlint config, a Husky commit-msg hook example, and a semantic-release setup for automated versioning.

Source text

SKILL.md · MIT
---
name: conventional-commits
description: Generates semantic commit messages following the Conventional Commits specification with proper types, scopes, breaking changes, and footers. Use when users request "write commit message", "conventional commit", "semantic commit", or "format commit".
---

# Conventional Commits

Write standardized, semantic commit messages that enable automated versioning and changelog generation.

## Core Workflow

1. **Analyze changes**: Review staged files and modifications
2. **Determine type**: Select appropriate commit type (feat, fix, etc.)
3. **Identify scope**: Optional component/module affected
4. **Write description**: Concise summary in imperative mood
5. **Add body**: Optional detailed explanation
6. **Include footer**: Breaking changes, issue references

## Commit Message Format

```
<type>[optional scope]: <description>

[optional body]

[optional footer(s)]
```

## Commit Types

| Type | Description | Semver | Example |
|------|-------------|--------|---------|
| `feat` | New feature | MINOR | `feat: add user authentication` |
| `fix` | Bug fix | PATCH | `fix: resolve login redirect loop` |
| `docs` | Documentation only | - | `docs: update API reference` |
| `style` | Formatting, whitespace | - | `style: fix indentation in utils` |
| `refactor` | Code change, no feature/fix | - | `refactor: extract validation logic` |
| `perf` | Performance improvement | PATCH | `perf: optimize database queries` |
| `test` | Adding/fixing tests | - | `test: add unit tests for auth` |
| `build` | Build system, dependencies | - | `build: upgrade to Node 20` |
| `ci` | CI/CD configuration | - | `ci: add GitHub Actions workflow` |
| `chore` | Maintenance tasks | - | `chore: update .gitignore` |
| `revert` | Revert previous commit | - | `revert: undo feature flag change` |

## Scopes

Scopes indicate the area of the codebase affected:

```bash
# Component/module scopes
feat(auth): add OAuth2 support
fix(api): handle timeout errors
docs(readme): add installation steps

# File-based scopes
style(eslint): update linting rules
build(docker): optimize image size

# Layer scopes
refactor(service): extract user service
test(e2e): add checkout flow tests
```

## Breaking Changes

Mark breaking changes with `!` or `BREAKING CHANGE` footer:

```bash
# Using ! notation
feat(api)!: change response format to JSON:API

# Using footer
feat(api): change response format

BREAKING CHANGE: Response now follows JSON:API specification.
Clients must update their parsers.
```

## Commit Message Examples

### Simple Feature
```
feat: add dark mode toggle
```

### Feature with Scope
```
feat(ui): add dark mode toggle to settings page
```

### Bug Fix with Issue Reference
```
fix(auth): resolve session expiration race condition

The session refresh was racing with the expiration check,
causing intermittent logouts.

Fixes #234
```

### Breaking Change
```
feat(api)!: migrate to v2 response format

BREAKING CHANGE: All API responses now use camelCase keys
instead of snake_case. Update client parsers accordingly.

Migration guide: https://docs.example.com/v2-migration
```

### Multiple Footers
```
fix(payments): correct tax calculation for EU customers

Updated tax calculation to use customer's billing country
instead of shipping country for digital goods.

Fixes #456
Reviewed-by: Alice
Co-authored-by: Bob <[email protected]>
```

### Revert Commit
```
revert: feat(auth): add OAuth2 support

This reverts commit abc123def456.

Reason: OAuth provider has rate limiting issues in production.
Will re-implement with proper caching.
```

## Description Guidelines

### Do
- Use imperative mood: "add" not "added" or "adds"
- Keep under 72 characters
- Start with lowercase
- No period at the end
- Be specific and concise

### Don't
- "Fixed bug" (too vague)
- "Updated stuff" (not descriptive)
- "WIP" (commit when ready)
- "misc changes" (split into separate commits)

### Good Examples
```bash
feat: add email verification flow
fix: prevent duplicate form submissions
refactor: extract payment processing to service
perf: cache user preferences in memory
docs: add API authentication examples
```

### Bad Examples
```bash
# Too vague
fix: fixed it
update: updates

# Wrong tense
feat: added new feature
fix: fixes the bug

# Too long
feat: add a new feature that allows users to export their data in multiple formats including CSV, JSON, and XML
```

## Body Guidelines

When to include a body:
- Changes need context or explanation
- Complex logic that isn't self-evident
- Breaking changes require migration info
- Multiple related changes in one commit

```
fix(cache): invalidate user cache on profile update

Previously, profile updates were not reflected until cache expiry.
This caused confusion when users updated their avatar and didn't
see the change immediately.

The fix adds cache invalidation after successful profile updates
and ensures CDN purge for static assets.
```

## Footer Tokens

| Token | Purpose | Example |
|-------|---------|---------|
| `Fixes` | Closes issue | `Fixes #123` |
| `Closes` | Closes issue | `Closes #456` |
| `Refs` | References issue | `Refs #789` |
| `BREAKING CHANGE` | Breaking change | `BREAKING CHANGE: description` |
| `Reviewed-by` | Reviewer credit | `Reviewed-by: Name` |
| `Co-authored-by` | Co-author credit | `Co-authored-by: Name <email>` |

## Integration with Tooling

### Commitlint Configuration

```javascript
// commitlint.config.js
module.exports = {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'type-enum': [
      2,
      'always',
      [
        'feat', 'fix', 'docs', 'style', 'refactor',
        'perf', 'test', 'build', 'ci', 'chore', 'revert'
      ]
    ],
    'scope-case': [2, 'always', 'kebab-case'],
    'subject-case': [2, 'always', 'lower-case'],
    'subject-max-length': [2, 'always', 72],
    'body-max-line-length': [2, 'always', 100]
  }
};
```

### Husky Pre-commit Hook

```bash
# .husky/commit-msg
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx --no-install commitlint --edit "$1"
```

### Package.json Setup

```json
{
  "devDependencies": {
    "@commitlint/cli": "^18.0.0",
    "@commitlint/config-conventional": "^18.0.0",
    "husky": "^8.0.0"
  },
  "scripts": {
    "prepare": "husky install"
  }
}
```

## Semantic Release Integration

Conventional commits enable automated versioning:

```yaml
# .releaserc.yml
branches:
  - main
plugins:
  - "@semantic-release/commit-analyzer"
  - "@semantic-release/release-notes-generator"
  - "@semantic-release/changelog"
  - "@semantic-release/npm"
  - "@semantic-release/git"
```

### Version Bumping Rules

| Commit Type | Version Bump | Example |
|-------------|--------------|---------|
| `feat` | Minor (0.X.0) | 1.2.0 → 1.3.0 |
| `fix` | Patch (0.0.X) | 1.2.0 → 1.2.1 |
| `perf` | Patch (0.0.X) | 1.2.0 → 1.2.1 |
| `BREAKING CHANGE` | Major (X.0.0) | 1.2.0 → 2.0.0 |
| Others | No bump | 1.2.0 → 1.2.0 |

## Commit Message Generator

When analyzing changes, generate a commit message:

```bash
# 1. Check staged changes
git diff --cached --name-only

# 2. Analyze change type
# - New files = likely feat
# - Modified test files = test
# - Modified docs = docs
# - Bug-related keywords = fix

# 3. Identify scope from path
# src/components/Button.tsx → components or ui
# src/services/auth.ts → auth or services

# 4. Generate message
feat(ui): add loading state to Button component
```

## Best Practices

1. **One logical change per commit**: Don't mix features with fixes
2. **Commit early, commit often**: Small, focused commits
3. **Write for reviewers**: Messages should explain why, not just what
4. **Reference issues**: Link to tickets/issues when applicable
5. **Use scopes consistently**: Establish team conventions
6. **Review before committing**: `git diff --cached` to verify changes

## Output Checklist

Every commit message should:

- [ ] Start with valid type (feat, fix, docs, etc.)
- [ ] Use imperative mood in description
- [ ] Keep description under 72 characters
- [ ] Include scope when applicable
- [ ] Mark breaking changes with `!` or footer
- [ ] Reference related issues in footer
- [ ] Provide body for complex changes
- [ ] Follow team's scope conventions

© patricio0312rev · MIT · patricio0312rev/skills

Similar skills

All skills for Git and GitHub →

From the same set26

jsdoc-typescript-docs A skill that writes JSDoc comments across a TypeScript codebase and builds docs from them with TypeDoc. Handy when functions have piled up without descriptions. CX Codex +1 547installs dockerfile-optimizer A skill that rewrites your Dockerfile around multi-stage builds: smaller images, faster builds, working layer cache. Useful when the image has bloated or CI drags. CX Codex +1 530installs animation-micro-interaction-pack A set of reusable motion patterns for interfaces: hover effects, entrances and exits, gesture feedback. Useful when a UI feels static and you want it to move without hand-tuning timings. CX Codex +1 499installs explaining-code Walks through unfamiliar code in steps: an everyday analogy, an ASCII diagram of the flow, then a line-by-line breakdown. Handy when you inherit a repo. CX Codex +1 473installs nginx-config-optimizer A skill that writes Nginx configs: reverse proxy, load balancing, caching, SSL and rate limits. Useful when you need to set up or rewrite a server config. CX Codex +1 433installs codebase-summarizer Scans your repository and writes ARCHITECTURE.md: entry points, module relationships, Mermaid diagrams and where-to-edit guides. CX Codex +1 394installs redis-patterns A skill that steers your coding agent through Redis work: caching, session storage, rate limiting, pub/sub and distributed locks. CX Codex +1 361installs accessibility-auditor The skill reviews your markup for accessibility and repairs it: semantics, ARIA, keyboard flow, contrast. Useful before shipping a form or a modal. CX Codex +1 355installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor