home / skills / marcelorodrigo / agent-skills / conventional-commit

conventional-commit skill

/skills/conventional-commit

This skill helps you craft conventional commit messages that follow the spec, improving clarity and history readability during code changes.

npx playbooks add skill marcelorodrigo/agent-skills --skill conventional-commit

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
4.1 KB
---
name: conventional-commit
description: Create conventional commit messages following best conventions. Use when committing code changes, writing commit messages, or formatting git history. Follows conventional commits specification.
license: MIT
metadata:
  version: "1.0.0"
---

# Conventional Commit Messages

Follow these conventions when creating commits.

## Prerequisites

Before committing, ensure you're working on a feature branch, not the main branch.

```bash
# Check current branch
git branch --show-current
```

If you're on `main` or `master`, create a new branch first:

```bash
# Create and switch to a new branch
git checkout -b <type>/<short-description>
```

Branch naming should follow the pattern: `<type>/<short-description>` where type matches the commit type (e.g., `feat/add-user-auth`, `fix/null-pointer-error`, `refactor/extract-validation`).

## Format

```
<type>(<scope>): <subject>

<body>

<footer>
```

The header is required. Scope is optional. All lines must stay under 100 characters.

## Commit Types

| Type | Purpose |
|------|---------|
| `build` | Build system or CI changes |
| `chore` | Routine maintenance tasks |
| `ci` | Continuous integration configuration |
| `deps` | Dependency updates |
| `docs` | Documentation changes |
| `feat` | New feature |
| `fix` | Bug fix |
| `perf` | Performance improvement |
| `refactor` | Code refactoring (no behavior change) |
| `revert` | Revert a previous commit |
| `style` | Code style and formatting |
| `test` | Tests added, updated or improved |

## Subject Line Rules

- Use imperative, present tense: "Add feature" not "Added feature"
- Capitalize the first letter
- No period at the end
- Maximum 70 characters

## Body Guidelines

- Explain **what** and **why**, not how
- Use imperative mood and present tense
- Include motivation for the change
- Contrast with previous behavior when relevant

## Conventional Commits
The commit contains the following structural elements, to communicate intent to the consumers of your library:

- fix: a commit of the type fix patches a bug in your codebase (this correlates with PATCH in Semantic Versioning).
- feat: a commit of the type feat introduces a new feature to the codebase (this correlates with MINOR in Semantic Versioning).
- BREAKING CHANGE: a commit that has a footer BREAKING CHANGE:, or appends a ! after the type/scope, introduces a breaking API change (correlating with MAJOR in Semantic Versioning). A BREAKING CHANGE can be part of commits of any type.
- types other than fix: and feat: are allowed, for example @commitlint/config-conventional (based on the Angular convention) recommends build:, chore:, ci:, docs:, style:, refactor:, perf:, test:, and others.
- footers other than BREAKING CHANGE: <description> may be provided and follow a convention similar to git trailer format.


## Examples

### Simple fix

```
fix(api): Handle null response in user endpoint

The user API could return null for deleted accounts, causing a crash
in the dashboard. Add null check before accessing user properties.
```

### Feature with scope

```
feat(alerts): Add Slack thread replies for alert updates

When an alert is updated or resolved, post a reply to the original
Slack thread instead of creating a new message. This keeps related
notifications grouped together.
```

### Refactor

```
refactor: Extract common validation logic to shared module

Move duplicate validation code from three endpoints into a shared
validator class. No behavior change.
```

### Breaking change

```
feat(api)!: Remove deprecated v1 endpoints

Remove all v1 API endpoints that were deprecated in version 23.1.
Clients should migrate to v2 endpoints.

BREAKING CHANGE: v1 endpoints no longer available
```

## Revert Format

```
revert: feat(api): Add new endpoint

This reverts commit abc123def456.

Reason: Caused performance regression in production.
```

## Principles

- Each commit should be a single, stable change
- Commits should be independently reviewable
- The repository should be in a working state after each commit

## References

- [Conventional Commits Specification](https://www.conventionalcommits.org/en/v1.0.0/#specification)

Overview

This skill generates conventional commit messages that follow the Conventional Commits specification and common best practices. It helps format headers, bodies, scopes, and footers so commits are clear, reviewable, and semantically meaningful. Use it to standardize commit history and enable automated versioning and changelogs.

How this skill works

The skill inspects your change description, affected files, and intended intent (fix, feat, docs, etc.) to produce a properly formatted commit. It enforces header rules (type, optional scope, subject), wraps body lines under 100 characters, and includes footers such as BREAKING CHANGE or revert metadata when requested. It can also suggest branch names matching the chosen type.

When to use it

  • When creating a new commit to ensure consistent, machine-readable messages
  • When preparing pull requests or changelogs that rely on semantic commit types
  • When you need to mark breaking changes for automated major version bumps
  • When updating CI, dependencies, or docs and you want standard commit types
  • When reverting a previous change and want the proper revert format

Best practices

  • Work on feature branches named <type>/<short-description> (e.g., feat/add-login)
  • Write the header in imperative present tense, capitalize first letter, no trailing period
  • Keep header ≤ 70 characters and wrap body lines under 100 characters
  • Use the body to explain what and why, not implementation details
  • Add BREAKING CHANGE: in the footer or append ! to type/scope for breaking API changes

Example use cases

  • Create a bugfix commit: fix(auth): Prevent token refresh race condition
  • Add a new feature with scope: feat(payments): Support Apple Pay tokenization
  • Document changes: docs(readme): Update integration guide for v2 API
  • Mark breaking API change: feat(api)!: Remove deprecated v1 endpoints with BREAKING CHANGE footer
  • Revert a faulty commit using the revert format including reason and original commit header

FAQ

What commit types should I use for dependency updates?

Use deps for dependency updates or chore when the change is routine maintenance; choose deps if you want a dedicated semantic type.

How do I indicate a breaking change?

Either append ! after the type or type(scope)! in the header and include a BREAKING CHANGE: <description> footer describing the impact and migration steps.