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
Release files for diffmind 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| diffmind-0.1.1.tar.gz | 38.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| diffmind-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 83.7 kB
Release files / diffmind-0.1.1.tar.gz
| Download URL | diffmind-0.1.1.tar.gz |
|---|---|
| Size | 38.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
189af7b7ed787c4a51545db09373816daa1899a5a332f323ba5216d480ddf1e8
|
|
BLAKE2b-256 checksum How to use checksums |
a286c59db1e03f191cd27f5a2bdf6ea8ab92cc2ddd88504a5432a20126273998
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.2.1 CPython/3.13.7 Linux/6.17.8-061708-generic
|
Release files / diffmind-0.1.1-py3-none-any.whl
| Download URL | diffmind-0.1.1-py3-none-any.whl |
|---|---|
| Size | 45.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a98f86a77a249b6672b98e510694f5018d77abe95f7a8a727b6652b64191fb4a
|
|
BLAKE2b-256 checksum How to use checksums |
68f6e3cdf43691d14b9b49df34f251d6a6f1be1564301e7ecff80217fc5285a0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.2.1 CPython/3.13.7 Linux/6.17.8-061708-generic
|