commit-message-linter
/install commit-message-linter
Commit Message Linter
Validate commit messages against Conventional Commits and custom rules. Pure Python, no dependencies.
Quick Start
# Lint last commit
python3 scripts/lint_commits.py
# Lint last 5 commits
python3 scripts/lint_commits.py --range HEAD~5..HEAD
# Lint a branch
python3 scripts/lint_commits.py --range main..feature-branch
# Lint a single message
python3 scripts/lint_commits.py --message "feat: add login"
# Read from stdin (git commit-msg hook)
python3 scripts/lint_commits.py --stdin \x3C .git/COMMIT_MSG
# Read from file
python3 scripts/lint_commits.py --file .git/COMMIT_MSG
Output Formats
python3 scripts/lint_commits.py --format text # human-readable (default)
python3 scripts/lint_commits.py --format json # CI/tooling
python3 scripts/lint_commits.py --format markdown # reports
Configuration
Generate default config:
python3 scripts/lint_commits.py init
Creates .commitlintrc.json. Also auto-discovers .commitlintrc or commitlint.config.json.
Key config options:
header_max_length(72) — max header charsrequire_conventional(true) — enforce\x3Ctype>[scope]: \x3Cdesc>formattypes— allowed types (feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert)scopes— allowed scopes (empty = any)require_scope(false) — mandate scoperequire_body(false) — mandate bodyheader_case— description start case: lower/upper/sentence/anyno_trailing_period(true) — reject trailing period on headerforbidden_patterns— regex patterns that reject commitsrequired_patterns— regex patterns that must match--strictflag treats warnings as errors
Rules Reference
| Rule | Level | Description |
|---|---|---|
| header-empty | error | Empty header |
| header-max-length | error | Header exceeds max length |
| header-min-length | warning | Header below min length |
| conventional-format | error | Not Conventional Commits format |
| type-enum | error | Type not in allowed list |
| scope-required | error | Missing required scope |
| scope-enum | error | Scope not in allowed list |
| description-empty | error | Empty description |
| description-case | warning | Wrong description case |
| header-no-period | warning | Trailing period |
| header-leading-whitespace | error | Leading whitespace |
| header-trailing-whitespace | warning | Trailing whitespace |
| body-separator | error | No blank line before body |
| body-required | warning | Missing required body |
| body-line-length | warning | Body line too long |
| body-max-lines | warning | Too many body lines |
| breaking-change-description | warning | Breaking ! without BREAKING CHANGE: in body |
| forbidden-pattern | error | Matches forbidden regex |
| required-pattern | warning | Doesn't match required regex |
Exit Codes
0— all commits pass (warnings OK unless--strict)1— errors found (or warnings with--strict)2— git/system error
CI Integration (Git Hook)
As commit-msg hook (.git/hooks/commit-msg):
#!/bin/sh
python3 path/to/lint_commits.py --file "$1" --strict
Auto-ignored: merge commits, reverts, version tags, "Initial commit".
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install commit-message-linter - 安装完成后,直接呼叫该 Skill 的名称或使用
/commit-message-linter触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
commit-message-linter 是什么?
Validate git commit messages against Conventional Commits spec and configurable rules. Use when linting commit messages, enforcing commit conventions, checki... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 80 次。
如何安装 commit-message-linter?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install commit-message-linter」即可一键安装,无需额外配置。
commit-message-linter 是免费的吗?
是的,commit-message-linter 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
commit-message-linter 支持哪些平台?
commit-message-linter 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 commit-message-linter?
由 charlie-morrison(@charlie-morrison)开发并维护,当前版本 v1.0.0。