Skip to main content

AI-powered git commit message generator

Project description

cmtr

cmtr writes your git commit messages for you. It uses the OpenAI API (gpt-5.2), the staged diff, and recent commit history to match the repository's style.

Quick start (recommended)

  1. Install uv (if needed), then run:
    • uvx cmtr@latest
  2. Optional: add a shell alias:
    • alias cmtr="uvx cmtr@latest"
  3. Export your API key:
    • export OPENAI_API_KEY=...
  4. Stage changes and run:
    • git add -A
    • cmtr

Or install the git hook:

  • cmtr --hook
    • Installs a prepare-commit-msg hook that automatically generates a commit message right before the commit editor opens. If there is already a message or you're in a rebase/fixup/squash flow, it skips.

Usage

  • cmtr
    • Behaves like git commit -v, but injects a generated commit message.
  • cmtr --dry-run
    • Print the generated message without committing.
  • cmtr --no-edit
    • Skip opening the editor after generating the message.
  • cmtr --hook
    • Install the prepare-commit-msg hook to auto-generate messages on every commit.
  • cmtr --uninstall-hook
    • Remove the hook.

Extra git commit flags can be passed directly (for example, --no-verify). Avoid -m/-F/-C/-c because cmtr supplies the message.

How it builds context

  • Uses staged files (git diff --cached) for the actual changes.
  • Finds shared paths and samples recent git log messages on those paths to learn the repo's style.

Configuration

Configuration is loaded in this order (later overrides earlier):

  1. XDG config file (~/.config/cmtr/config.toml or $XDG_CONFIG_HOME/cmtr/config.toml)
  2. cmtr.toml in the repo root (optional repo-specific overrides)
  3. Environment variables
  4. CLI flags

Manage global config with:

  • cmtr config path
  • cmtr config list
  • cmtr config get model
  • cmtr config set model gpt-5.2
  • cmtr config unset model

Example config file:

model = "gpt-5.2"
max_diff_bytes = 12000
max_patch_lines = 400
max_log_entries = 20
max_log_paths = 4
max_log_body_lines = 6
timeout_seconds = 60
reasoning_effort = "none"
text_verbosity = "low"
base_url = "https://api.openai.com/v1"
organization = "org_..."

Environment variables:

  • OPENAI_API_KEY
  • OPENAI_BASE_URL
  • OPENAI_ORG
  • CMTR_MODEL
  • CMTR_MAX_DIFF_BYTES
  • CMTR_MAX_PATCH_LINES
  • CMTR_MAX_LOG_ENTRIES
  • CMTR_MAX_LOG_PATHS
  • CMTR_MAX_LOG_BODY_LINES
  • CMTR_TIMEOUT_SECONDS
  • CMTR_REASONING_EFFORT
  • CMTR_TEXT_VERBOSITY

Development

Local development:

  • mise install
  • mise run install
  • mise run run

Type checking:

  • mise run typecheck
  • uv run ty check

If you are installing manually, run uv sync --group dev first to install the ty tool.

Troubleshooting

  • No staged changes: run git add before cmtr.
  • Missing API key: set OPENAI_API_KEY in your environment.
  • Hook failures: a # cmtr failed: ... comment is appended to the commit message template.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cmtr-0.1.0.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cmtr-0.1.0-py3-none-any.whl (16.6 kB view details)

Uploaded Python 3

File details

Details for the file cmtr-0.1.0.tar.gz.

File metadata

  • Download URL: cmtr-0.1.0.tar.gz
  • Upload date:
  • Size: 12.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cmtr-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e49080035d48b094f4094a3807e996cc4733f1d5847a8be39fddb3c818ffaeb9
MD5 1aec0b99c4fe0ee404c57c89daac9a67
BLAKE2b-256 9d6917b3a24bd72a970daf10a49415d974fa21e240a8699d5da5718e83daa3d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmtr-0.1.0.tar.gz:

Publisher: publish.yml on shayne/cmtr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cmtr-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: cmtr-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 16.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cmtr-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1f87c38c4e5e26892a308ace2b7195bd7e35f56b3f434c7dfcf8c8ad42929f83
MD5 242659b750b95efb95d199fd861a2638
BLAKE2b-256 733554706a375eac714828fc924b1769aca5d326772bae5c8f6a374242ecc64f

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmtr-0.1.0-py3-none-any.whl:

Publisher: publish.yml on shayne/cmtr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page