Skip to main content

DiffMind

Human‑quality commit messages. Zero hassle.

PyPI Python License: MIT

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

DiffMind 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_PROVIDER
  • DIFFMIND_EMOJIS (1/0, true/false)
  • DIFFMIND_CONVENTIONAL (1/0, true/false)
  • OPENAI_API_KEY (for the OpenAI provider)

Git Hook

  • Installs prepare-commit-msg that 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 openai package is installed and OPENAI_API_KEY is set. Run diffmind doctor.
  • No staged changes? DiffMind only considers staged files. git add -A first or use diffmind commit -a.
  • Prefer manual edits? Use diffmind session and 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)

Source distribution for diffmind 0.1.1
File Size Uploaded
diffmind-0.1.1.tar.gz 38.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for diffmind 0.1.1
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page