A year ago I published and is a specification for adding human and machine readable meaning to commit messages. It provides an easy set of rules for creating an explicit commit history, which makes it easier to write automated tools on top of.
3. Better Project History
Conventional commits create a more readable and searchable project history, making it easier to understand what changes were made and why.
Setting Up Full Automation
To achieve complete automation of versioning and releases, you'll need several tools working together. Let's set them up step by step.
1. Commitlint
While not mandatory, , though there are other similar tools available (, etc.).
Install simple-git-hooks:
npm install --save-dev simple-git-hooks
Create .simple-git-hooks.json:
{
"commit-msg": "npx commitlint --edit \"$1\""
}
Now run npx simple-git-hooks to activate the hooks and you're ready to go!
GitHub Action
You can also set up commit linting via GitHub Actions when commits are pushed to the repository.
Create .github/workflows/commit.yml:
name: Commit Validation
on:
pull_request:
types: [opened, synchronize]
jobs:
commitlint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Validate commit messages
run: npx commitlint --from=HEAD~1
Monorepo Project Configuration
In monorepos, it's common practice to use scopes in Conventional Commits that correspond to workspace names in the monorepo. This helps identify which workspace(s) are affected by each commit. For example:
feat(store): add user authentication state
fix(ui): resolve button styling issue
docs(router): update routing configuration guide
You can use specialized packages to automatically get project scopes:
- for pnpm workspaces
is an optional but very convenient tool that provides an interactive CLI for creating Conventional Commits.
,
conventional-commit-message, that teaches the agent to produce correct Conventional Commit messages - choosing the type and scope by release impact, flagging breaking changes, and validating against your Commitlint config when it is available.
It works with Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, and other agents that support the skills format. Install it with either package runner:
CODE# pnpm
pnpx skills add conventional-changelog/conventional-changelog --skill conventional-commit-message
# npm
npx skills add conventional-changelog/conventional-changelog --skill conventional-commit-message
From then on, asking the agent for a commit message yields a changelog-ready message that follows the same convention Commitlint enforces. See is a comprehensive GitHub Action that automates version updates, changelog generation, and releases. The project is based on .
The setup described below can also be done for you by an AI coding agent: the , projects are supported.
Let's look at an example of configuring the action for a project with pnpm workspaces using the
When the pull request is merged, it will automatically release the project.
package.
Conclusion
There is also a recommendation to use squash merge for pull requests to keep the commit history in the main branch clean and well-structured. This ensures that each merge commit follows conventional commit standards and makes the project history more readable.
By implementing Conventional Commits with this toolchain, you'll have a fully automated release pipeline that maintains consistency, improves project history readability, and reduces manual overhead in version management.
For more details, guides and API references, check out the documentation websites: .
If you want to see real projects using Conventional Commits and their configurations, here are a few examples:
↗ Original-Artikel auf dev.to lesenVollständiger Original-BerichtAusführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
SOCIAL SHARE CARD GENERATOR