commit-messagelisted
Install: claude install-skill juliuswiener/nord-kit
# commit-message
Terse, exact, why over what. Produce a paste-ready block and stop — the caller runs git.
## Subject
- `<type>(<scope>): <imperative summary>`, scope optional
- types: `feat fix refactor perf docs test chore build ci style revert`
- imperative — "add", "fix", "remove", never "added" or "adds"
- ≤50 characters, hard cap 72, no trailing period
- match the project's capitalisation after the colon
## Body — only where it earns its place
Skip it when the subject already says everything. Write one for a non-obvious *why*, and
**always** for breaking changes, security fixes, data migrations and reverts.
Wrap at 72, bullets with `-`, issue references last (`Closes #42`).
## Never
- "this commit does X", or "I / we / now / currently" — the diff says what changed
- restating the filename when the scope already names it
- emoji, unless the project already uses them
## Check before handing it over
The subject length is the one thing here that is mechanically checkable, and going over
is the failure this skill exists to prevent:
```sh
printf '%s' '<subject line>' | wc -c
```
## Examples
```
feat(api): add GET /users/:id/profile
Mobile client needs profile data without the full user payload to cut
LTE bandwidth on cold-launch.
Closes #128
```
```
feat(api)!: rename /v1/orders to /v1/checkout
BREAKING CHANGE: clients must migrate before 2026-06-01; old route 410s after.
```
## Trailers
**No attribution trailer by default.** Not one commit in nord-kit, clau