🤖 komit
AI-powered git commit message generator using local LLMs via Ollama. No API keys, no internet required — runs completely locally and privately.
Features
- 🧠 Local LLM — uses Ollama, no API keys needed
- 🌿 Branch-Aware Context — infers conventional types and scopes directly from your active git branch
- 📝 Multiple commit styles — conventional, simple, detailed
- 🔍 Smart diff allocation — per-file context budget, code files prioritized over docs
- 🔎 Deep mode — summarize each file separately for better messages on large changesets
- 💡 Explain mode — summarize what changed without committing
- 🕐 Recent commits context — last 3 commits included in the prompt for better inference
- 🔄 Regenerate — not happy? generate a new message instantly
- ✏️ Edit before commit — open your editor to tweak the message
- ⚙️ CLI flags — control style, model, and more from the command line
- 📁 Config file — persist your preferences with
komit init - 🌍 Universal — works via pip, binary, Homebrew, or shell script
- 🪟 Cross-platform — Linux, macOS, Windows
- ⚡ Fast — runs on your machine, no network calls to external APIs
- 🔒 Ollama validation — checks if Ollama is running and model exists before generating
- 🔁 Smart updates — detects pip vs binary install and updates accordingly
Requirements
- Ollama installed and running
- A local model pulled (e.g.
ollama pull qwen2.5:7b)
Recommended Models
| Model | Size | Best for |
|---|---|---|
qwen2.5:7b |
4.7GB | Best quality |
mistral:7b |
4.1GB | Good balance |
llama3.2:3b |
2.0GB | Fastest |
ollama pull qwen2.5:7b
Installation
Option 1 — Homebrew (macOS/Linux, recommended)
brew tap glemiu6/komit
brew install komit
Shell completion is included automatically — no extra setup needed.
Option 2 — One line install (Linux/macOS, no Python required)
curl -fsSL https://raw.githubusercontent.com/glemiu6/komit/master/scripts/install.sh | bash
Option 3 — Windows PowerShell
irm https://raw.githubusercontent.com/glemiu6/komit/master/scripts/install.ps1 | iex
Option 4 — pip
pip install komit
Option 5 — pipx (recommended for CLI tools)
pipx install komit
Option 6 — Download binary
Download the binary for your platform from GitHub Releases:
| Platform | Binary |
|---|---|
| Linux x86_64 | komit-linux-x86_64 |
| macOS Apple Silicon | komit-macos-arm64 |
| Windows | komit-windows-x86_64.exe |
Intel Mac users: use
pip install komitinstead.
# Linux/macOS
chmod +x komit-*
sudo mv komit-* /usr/local/bin/komit
Setup
Git alias (recommended)
git config --global alias.ai '!komit'
Now you can use git ai as a shortcut.
Shell completion
If installed via Homebrew, completion works automatically.
For other install methods, activate it once:
# bash
echo 'eval "$(register-python-argcomplete komit)"' >> ~/.bashrc
source ~/.bashrc
# zsh
echo 'eval "$(register-python-argcomplete komit)"' >> ~/.zshrc
source ~/.zshrc
# fish
register-python-argcomplete --shell fish komit | source
Usage
# stage your changes
git add .
# generate commit message
komit
# or via git alias
git ai
Subcommands & Maintenance
komit init # create or overwrite your config file
komit update # update to the latest version
komit uninstall # remove komit from your system
CLI flags
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--style |
-s |
conventional, simple, detailed |
config | Commit message format |
--model |
-m |
String | config | Ollama model to use |
--ollama-url |
-u |
URL | config | Ollama API endpoint |
--max_diff |
— | Integer | config | Max diff length in characters |
--timeout |
— | Integer | config | LLM request timeout in seconds |
--include_branch_name |
-ib |
Bool | config | Append branch name to commit message |
--dry-run |
-dr |
Flag | False |
Preview message without committing |
--explain |
— | Flag | False |
Explain staged changes without committing |
--deep |
— | Flag | False |
Summarize each file separately (slower, better on large diffs) |
--config |
— | Path | — | Path to a custom config file |
Examples
# simple style
komit --style simple
# use a faster model
komit --model llama3.2:3b
# preview without committing
komit --dry-run
# explain what changed without committing
komit --explain
# better messages on large diffs (slower)
komit --deep
# include branch name in the message
komit --include_branch_name True
# remote Ollama instance
komit --ollama-url http://192.168.1.10:11434
Interactive Experience
╭──────────────────────── Staged files (3) ────────────────────────╮
│ • src/auth.py │
│ • tests/test_auth.py │
│ • README.md │
╰───────────────────────────────────────────────────────────────────╯
Branch name: feat/auth-tokens
Model: qwen2.5:7b · Style: conventional
⠋ Generating commit message...
╭──────────────────── Suggested commit message ─────────────────────╮
│ feat: add JWT authentication token engine [feat/auth-tokens] │
╰───────────────────────────────────────────────────────────────────╯
» Choose an action: (y)es, (n)o, (e)dit, (r)egenerate (y):
| Option | Key | Behavior |
|---|---|---|
| Yes | y |
Commit with the generated message |
| No | n |
Cancel without committing |
| Edit | e |
Open your editor to modify the message |
| Regenerate | r |
Generate a new message |
Deep Mode
For large changesets with many files, --deep summarizes each file individually before generating the final commit message. More accurate, but slower since it makes one LLM call per file.
komit --deep
Explain Mode
Explains your staged changes in plain English without committing — useful for code review prep or PR descriptions.
komit --explain
Branch Name Parsing
When --include_branch_name is enabled, komit reads your branch name to infer the commit type and scope automatically.
| Branch | Inferred type | Inferred scope |
|---|---|---|
feat/auth-login |
feat |
auth |
fix/ui_button |
fix |
ui_button |
refactor/api-layer |
refactor |
api |
Supported types: feat, fix, chore, docs, style, refactor, test, ci, perf.
Configuration
Run komit init to create your config file at ~/.config/komit/config.toml:
model = "qwen2.5:7b"
style = "conventional"
ollama_url = "http://localhost:11434"
max_diff_length = 4000
timeout = 60
include_branch_name = false
CLI flags always override config file values.
Commit Style Outputs
Conventional (default)
feat: add user authentication
fix: resolve null pointer in response pipeline
Simple
Add user authentication
Fix null pointer in response pipeline
Detailed
feat: add user authentication
- Add JWT token generation pipeline
- Implement password hashing with bcrypt
- Add login and logout endpoints
Maintenance
komit update # update to latest version
komit uninstall # remove komit completely
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feat/my-cool-feature) - Commit your changes (
komit😉) - Push to the branch (
git push origin feat/my-cool-feature) - Open a Pull Request
License
Metadata
Release files for komit 1.0.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 | |
|---|---|---|---|
| komit-1.0.1.tar.gz | 21.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| komit-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 41.7 kB
Release files / komit-1.0.1.tar.gz
| Download URL | komit-1.0.1.tar.gz |
|---|---|
| Size | 21.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9a06460026fcf7abf06cfdac5b63f5cef67c321e79b93f227708de5030d6a5e7
|
|
BLAKE2b-256 checksum How to use checksums |
0c048d20d2e2efc77e1d5b03f13a436add8e9f7ef554178cda563e7840cf8dff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / komit-1.0.1-py3-none-any.whl
| Download URL | komit-1.0.1-py3-none-any.whl |
|---|---|
| Size | 20.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d654033215ca51e3c904e67c2b2187e4d004b64c0cbe3055c5ddc727fa1d4178
|
|
BLAKE2b-256 checksum How to use checksums |
ef7c4474a3cd005906ff6cdfbc3c0f98a6e77d9d2a8518d6568005b56e46eb38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|