Generate conventional, descriptive commit messages from git diffs. Analyzes staged changes or branch diffs and produces well-formatted commit messages follow...
---
name: commit-message-writer
description: "Generate conventional, descriptive commit messages from git diffs. Analyzes staged changes or branch diffs and produces well-formatted commit messages following the Conventional Commits specification (feat, fix, chore, docs, refactor, test, etc.). Use when the user wants to: (1) Generate a commit message from 'git diff --staged', (2) Write a message for unpushed commits, (3) Rewrite a vague commit message, (4) Generate changelog entries from a range of commits, (5) Ensure team consistency with Conventional Commits. Best for developers, teams using standardized commit conventions, open-source maintainers, and anyone tired of 'fixed stuff' commit messages."
version: 1.0.0
homepage: https://clawhub.ai
metadata:
openclaw:
emoji: "π"
requires:
bins:
- git
---
# Commit Message Writer
Generate **conventional, descriptive, and scoped** commit messages from your git diffs β no more "fixed bug" or "updated files".
## When to Use
β
**USE this skill when:**
- "Write a commit message for my staged changes"
- "Generate a commit message from this diff"
- "Rewrite my last commit message to be conventional"
- "Generate changelog-style messages for commits abc..def"
- "Summarize what changed in this branch"
- "Generate messages for all unpushed commits"
- "Check if my commit message follows conventions"
β **DON'T use this skill when:**
- Need sweeping refactors explained β use a code review skill
- Need full changelog generation between releases β use a release tool
- Working on binary-only repos (no meaningful diff)
## How It Works
1. Reads the git diff (staged, branch, or provided inline)
2. Analyzes what files changed, what functions/classes were affected, and the nature of each change
3. Constructs a **Conventional Commits** message:
```
<type>(<scope>): <short summary>
<body>
<footer>
```
4. Explains the reasoning so you can review before committing
## Available Actions
### `write:staged`
Read `git diff --staged` and generate a commit message.
```
Write a commit message for my staged changes
```
β Analyzes staged diff, outputs a formatted commit message with type, scope, description, and body.
### `write:diff`
Read changes between the current branch and its base (main/master).
```
Summarize all changes in this branch as a commit message
```
### `write:range`
Generate a changelog or multiple commit messages for a range of commits.
```
Generate conventional commit messages for commits HEAD~5..HEAD
```
### `write:provided`
Given an inline diff or file list, generate a commit message.
```
Here's a diff: [...paste diff...]. Write a commit message.
```
### `rewrite:last`
Improve the last commit message to follow conventions.
```
Rewrite my last commit message in conventional format
```
### `validate`
Check whether a message follows Conventional Commits.
```
Validate this message: "fix(api): handle null pointer in user lookup"
```
β Confirms it's valid, or explains what to fix.
## Commit Type Reference
| Type | Usage |
|------------|-------------------------------------------------|
| `feat` | A new feature |
| `fix` | A bug fix |
| `docs` | Documentation only changes |
| `style` | Formatting, missing semicolons, etc. (no logic) |
| `refactor` | Code change that neither fixes a bug nor adds a feature |
| `perf` | Code change that improves performance |
| `test` | Adding or correcting tests |
| `chore` | Build, CI, dependencies, tooling |
| `ci` | CI/CD configuration changes |
## Example
> User: "Write a commit message for my staged changes"
>
> Assistant: *(runs `git diff --staged`, analyzes changes)*
>
> ```
> feat(auth): add OAuth2 refresh token rotation
>
> - Implement refresh token rotation on every token refresh
> - Invalidate old refresh tokens immediately after use
> - Add TTL config for refresh tokens (default 30 days)
> - Update token endpoint to return rotated refresh token
>
> Closes: #452
> ```
## Notes
- Always shows you the proposed message before suggesting you run `git commit`.
- Respects `.gitignore` β won't try to diff ignored files.
- For large diffs (>500 lines), summarizes chunk-level changes rather than line-by-line.
don't have the plugin yet? install it then click "run inline in claude" again.
by @clawhub