Navigation

/commit: Conventional Commits, changesets and changelogs for your coding agent

An agent skill that writes Conventional Commits in your repo's own dialect, authors changesets automatically, and turns changelogs into release notes anyone can read.

10 min read
Draft

Commits that fit in

Every repository has its own dialect. The skill reads the types, scopes and language yours already uses — from commitlint config, git history and workspace layout — and caches the result so it never has to derive them twice.

fix(ui-button): default missing label and expose aria-disabled

Changesets on autopilot

If the repo versions with changesets, every releasable change gets one in the same commit: right package names from the workspace map, bump level from the commit type, consumer-facing wording. Ignored and private packages are skipped.

Changelogs for humans

Turn any release into plain-language notes grouped by impact, in any language, under one strict rule: every line traces to a real entry. Nothing is invented to sound friendly.

Install

Two ways in: the skills CLI for any agent, or the Claude Code plugin. Pick one — they install the same skill.

Any agent: the skills CLI

One command through the open agent-skills ecosystem. It detects the agents you have and wires the skill into each one.

# Install for this project (Claude Code, Cursor, Codex, +70 agents)
npx skills add EduardoLopes/commit-skill

# Or globally — available in every project
npx skills add EduardoLopes/commit-skill --global

# See what's inside before installing
npx skills add EduardoLopes/commit-skill --list

Claude Code: the plugin

Claude Code only, but it updates itself from git and its commands are namespaced — so /commit keeps working even when another skill on the machine claims the same name.

# Register the marketplace, then install
/plugin marketplace add EduardoLopes/commit-skill
/plugin install commit@commit-skill

# Pull the newest catalog from git — no re-install needed
/plugin marketplace update commit-skill

To give a whole team the skill with no setup at all, commit this to the repo’s .claude/settings.json. Every contributor gets /commit on their next launch, already pointed at your conventions.

{
  "extraKnownMarketplaces": {
    "commit-skill": {
      "source": { "source": "github", "repo": "EduardoLopes/commit-skill" }
    }
  },
  "enabledPlugins": { "commit@commit-skill": true }
}

Requirements

Node 18+ for the installer, git, and any supported coding agent (Claude Code, Cursor, Codex, …). For changeset features your repo needs a package manager — /commit init sets the rest up for you, installing changesets v3 when your runtime allows it (Node 22.11+, pnpm 10+, npm 10.9+ or yarn 4.5+) and falling back to v2 otherwise.

Quick start

Stage what you want to ship, then let the skill do the reading:

# Analyze staged changes and commit
/commit

# Validate a message you already wrote (fast path)
/commit -m "feat(auth): add passwordless login"

# Multiple unrelated changes? Split them into atomic commits
/commit --split

# Stage everything and commit, skipping the changeset for once
/commit --all --no-changeset

# Just show me the message, don't commit
/commit --dry-run

The first run in a repository detects your conventions, shows you what it found and offers to cache them. Press Enter to accept — every later run skips detection entirely.

Commands

CommandWhat it does
/commitAnalyze staged changes, write a Conventional Commit, author the changeset if the repo needs one, commit.
/commit initSet a repo up for changesets and conventional commits: install @changesets/cli, tailor config, add scripts, cache conventions. Migrates an existing v2 setup to v3.
/commit changesetCreate or verify changeset files for pending changes without committing anything. Verification runs changeset status --since <base>.
/commit changelog [version]Generate, rewrite or translate a changelog or standalone release notes for a version or range.

Flags for commit

FlagWhat it does
-m "message"Validate and format a message you provide — skips file analysis.
--splitSplit unrelated concerns into multiple atomic commits, in dependency order.
--allStage everything before analyzing (the default is staged changes only).
--no-changesetSkip changeset handling for this one commit.
--dry-runPrint the message and changeset preview without committing.

Flags for changelog

FlagWhat it does
--plainRewrite entries for non-technical readers, grouped by impact: New / Improved / Fixed.
--lang <code>Write the output in another language (pt-BR, es, …). Composes with --plain.
--notes [file]Emit a standalone release-notes document instead of editing any CHANGELOG.

How it works

Every repo has its own dialect of Conventional Commits. The skill derives it once and stores it where every future session can see it.

Detection runs in priority order:

  1. Tooling config. commitlint’s type-enum and scope-enum, commitizen, CONTRIBUTING.md. These are law — if they exist, they win.
  2. Git history. The last 200 subjects reveal the types actually in use, the rule that generates scopes, and the language your team writes in.
  3. Workspace layout. pnpm and npm workspaces, turbo and nx config, to map paths onto package names.
<!-- commit-conventions:start -->

## Commit conventions (cached by /commit)

- **Format**: Conventional Commits 1.0.0,
  descriptions in English, lowercase
  imperative, subject ≤ 72 chars
- **Types**: feat, fix, docs, refactor,
  perf, test, build, ci, chore
- **Scope rule**: path under packages/
  minus the ui/ segment
- **Versioning**: changesets; patch =
  fix, minor = feat, major = breaking

<!-- commit-conventions:end -->

The cache lives in CLAUDE.md, so it is committed, reviewable and shared. Edit it freely — the skill reads what you wrote. Delete the block and it re-detects from scratch.

Examples

Real outputs from the skill’s test suite: a monorepo bug fix, a repository bootstrap, and customer-facing release notes.

A fix, its commit and its changeset

$ /commit

  Analyzing staged changes… 1 file in packages/ui-button

  fix(ui-button): default missing label and expose aria-disabled

  Created .changeset/ui-button-aria-disabled.md (@acme/ui-button: patch)
  and staged it with the commit.
---
"@acme/ui-button": patch
---

Buttons no longer render the text "undefined" when created without a
label, and now expose `aria-disabled` so assistive technology announces
the disabled state correctly.

The changeset names the real package, takes patch from the commit type, and is written for the package’s consumers — not for reviewers of the diff.

Bootstrapping a repository

$ /commit init

  ✓ Installed @changesets/cli
  ✓ Scaffolded .changeset/config.json (baseBranch: main)
  ✓ Added scripts: changeset, version-packages, release
  ✓ Detected conventions from 200 commits — free-form history found,
    adopting Conventional Commits 1.0.0 going forward
  ✓ Cached conventions in CLAUDE.md
  ✓ Committed: build: set up changesets and conventional commits

Release notes anyone can read

Before — CHANGELOG.md
## 3.2.0

### Minor Changes

- a41f2c9: feat(uploader): add chunked multipart upload with resumable
  state persisted to IndexedDB
- 77c01ab: feat(gallery): virtualize grid rendering via IntersectionObserver

### Patch Changes

- 09d11fe: fix(exif): guard against null GPSInfo IFD when parsing orientation
- bb3e802: refactor(store): migrate selectors to memoized createSelector
After — RELEASE_NOTES-3.2.0.md
# Photo App — Novidades da versão 3.2.0

## Novidades

- **Envios que continuam de onde pararam.** Se a internet cair ou você
  fechar a página no meio de um envio, ele retoma de onde parou.
- **Galeria mais rápida com muitas fotos.** A galeria carrega apenas as
  fotos visíveis na tela, conforme você rola a página.

## Correções

- **Fotos sem dados de localização não causam mais erro.**

Note what is missing: the internal refactor(store) entry. Changes with no user-visible effect are dropped, never dressed up as improvements.

Use cases

Every /commit checks whether the staged files touch a published package. If they do, the changeset is authored and staged in the same commit — right package names from the workspace map, bump level from the commit type, ignore, linked and fixed honored. Release PRs stop being archaeology.

FAQ


Installable via skills.sh — the source lives on GitHub.