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. Authenticate (preferred: Codex):
    • Codex CLI (preferred): run npx @openai/codex@latest and sign in (uses your ChatGPT account)
    • API key (alternative): export OPENAI_API_KEY=...
  4. Stage changes and run:
    • git add -A
    • cmtr

Codex mode is preferred because it uses your ChatGPT account usage (not separate API billing) and requires no API key. If Codex isn't on your PATH, cmtr will run it via npx @openai/codex@latest as long as you're signed in. If OPENAI_API_KEY is not set and you are signed into Codex, cmtr will use Codex automatically.

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 --print-prompt
    • Print the prompts used to generate the message.
  • 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"
prefer_codex = false
base_url = "https://api.openai.com/v1"
organization = "org_..."

Set prefer_codex = true to force Codex CLI (even if OPENAI_API_KEY is set). Use cmtr auth status to see which mode will be selected and why.

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
  • CMTR_PREFER_CODEX

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 or install/login to Codex CLI.
  • Unsure which auth mode is active: run cmtr auth status.
  • 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.2.5.tar.gz (17.6 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.2.5-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for cmtr-0.2.5.tar.gz
Algorithm Hash digest
SHA256 f67c15a9b54f4173c2b1b143593281ec1e82c1f9e514dc0361cf06bfafb1e333
MD5 f35313bc1c380f665b96275332721b8b
BLAKE2b-256 dcd5d55092959e3c02d627491e7889772e82dfaaba752613119044beeedbfbf7

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmtr-0.2.5.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.2.5-py3-none-any.whl.

File metadata

  • Download URL: cmtr-0.2.5-py3-none-any.whl
  • Upload date:
  • Size: 22.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.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 35006fb37f7a99b5685e9a2b7929406f1d4346d605ba2285764f7f6fa05d56a4
MD5 52a9a507d5105894074e0ff5e9ede2eb
BLAKE2b-256 ca326cd3ef14ff82193510c2b6448266955a8eb164af479c5348c60da0bf0e08

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmtr-0.2.5-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