AI-powered commit message generator (CLI + git hook) with delightful terminal UX
Project description
DiffMind
Human‑quality commit messages. Zero hassle.
AI‑assisted commit message generator with a delightful terminal UX and a one‑command Git hook. Works offline (heuristics) and gets even better with OpenAI.
Highlights
- Polished commit messages for your staged changes
- Beautiful terminal UI (emoji‑friendly, powered by Rich)
- One‑liner Git hook to auto‑fill commit messages
- Works offline by default; seamlessly upgrades to OpenAI when available
- Simple config with sane defaults; interactive refine/edit session
Demo
Install
Requires Python 3.8+.
PyPI
- pipx (recommended, isolated CLI)
pipx install diffmind
- pipx with OpenAI extras
pipx install "diffmind[ai]"
- pip (core, offline)
pip install -U diffmind
- pip with OpenAI extras
pip install -U "diffmind[ai]"
Upgrade / uninstall:
- pipx upgrade
pipx upgrade diffmind
- pip upgrade
pip install -U diffmind
- pipx uninstall
pipx uninstall diffmind
- pip uninstall
pip uninstall diffmind
From Source
Option A — editable install (pip):
- Clone
git clone https://github.com/dirusanov/DiffMind.git
- Enter directory
cd DiffMind
- Install (editable) with OpenAI extras
pip install -e ".[ai]"
- Or install (editable) core only
pip install -e .
Option B — development setup (Poetry):
- Clone
git clone https://github.com/dirusanov/DiffMind.git
- Enter directory
cd DiffMind
- Install dependencies
poetry install
- Verify CLI in venv
poetry run diffmind --help
Quickstart
# One-time setup (detects OpenAI automatically if OPENAI_API_KEY is set)
diffmind init
# Suggest a message for staged changes
diffmind suggest
# Commit with the generated message (and stage all changes)
diffmind commit -a
# Interactive refinement session (arrows + free text)
diffmind session
Add the Git hook (if you skipped it during init):
diffmind hook install
What It Looks Like
┌──────────────────────────── Commit Message Suggestion ────────────────────────────┐
│ ✨ feat: add login form and validation (auth) │
│ │
│ - app/auth/LoginForm.tsx: +182 -0 │
│ - app/auth/validators.ts: +64 -0 │
│ - i18n/en.json: +12 -0 │
└──────────────────────────────────────────────────────────────────────────────────┘
💡 Use `diffmind commit` to commit with this message.
Interactive actions:
✅ Commit 🔁 Regenerate ✏️ Edit subject/body 📝 Open in $EDITOR ➕ Add bullet
Providers
- simple (default) — Fast, offline heuristics based on your staged diff and file paths
- openai (optional) — OpenAI chat completion for highly polished messages
Enable OpenAI:
- Set API key
export OPENAI_API_KEY=sk-...
- Install with extras (pip)
pip install -U "diffmind[ai]"
- Or install provider only (pip)
pip install -U openai
Or run the guided setup:
diffmind config wizard
Configuration
DiffMind reads configuration from the first existing file:
.diffmind.toml(repo)~/.config/diffmind/config.toml(user)
Example .diffmind.toml:
provider = "auto" # auto | simple | openai
conventional = true # Conventional Commit types
emojis = true # emoji prefix in subject
max_subject_length = 72
scope_strategy = "topdir" # topdir | none
language = "auto" # auto | en | ru
# OpenAI (optional)
openai_model = "gpt-4o-mini"
# openai_base_url = "https://api.openai.com/v1"
Environment overrides:
DIFFMIND_PROVIDERDIFFMIND_EMOJIS(1/0, true/false)DIFFMIND_CONVENTIONAL(1/0, true/false)OPENAI_API_KEY(for the OpenAI provider)
Git Hook
- Installs
prepare-commit-msgthat pre-fills an empty message using DiffMind - Respects existing messages (never overwrites non‑comment content)
Commands:
diffmind hook install
# ... later
diffmind hook uninstall
Troubleshooting
- OpenAI not detected? Ensure the
openaipackage is installed andOPENAI_API_KEYis set. Rundiffmind doctor. - No staged changes? DiffMind only considers staged files.
git add -Afirst or usediffmind commit -a. - Prefer manual edits? Use
diffmind sessionand choose “Open in $EDITOR”.
Security & Privacy
- The simple provider never sends code anywhere and runs locally.
- The OpenAI provider sends only the staged diff and prompt context to your configured OpenAI endpoint.
- You control when OpenAI is used (auto/explicit) and can disable it any time.
Contributing
Contributions are welcome! If you plan to add a provider or improve agent flows/prompts, please keep the UX consistent and simple. Open an issue to discuss ideas.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file diffmind-0.1.1.tar.gz.
File metadata
- Download URL: diffmind-0.1.1.tar.gz
- Upload date:
- Size: 38.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.13.7 Linux/6.17.8-061708-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
189af7b7ed787c4a51545db09373816daa1899a5a332f323ba5216d480ddf1e8
|
|
| MD5 |
aac597bb794d1b6b1c48e572d507bfaf
|
|
| BLAKE2b-256 |
a286c59db1e03f191cd27f5a2bdf6ea8ab92cc2ddd88504a5432a20126273998
|
File details
Details for the file diffmind-0.1.1-py3-none-any.whl.
File metadata
- Download URL: diffmind-0.1.1-py3-none-any.whl
- Upload date:
- Size: 45.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.13.7 Linux/6.17.8-061708-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a98f86a77a249b6672b98e510694f5018d77abe95f7a8a727b6652b64191fb4a
|
|
| MD5 |
bf1e378860d8f76711006adb6c3a1ca7
|
|
| BLAKE2b-256 |
68f6e3cdf43691d14b9b49df34f251d6a6f1be1564301e7ecff80217fc5285a0
|