A CLI tool that generates semantic Japanese commit message prompts for LLMs from Git diff information.
Project description
komitto (commit)
A CLI tool for generating semantic commit message prompts from git diff information. The generated prompt is automatically copied to the clipboard, allowing you to paste it into an LLM to create your commit message.
Key Features
- Analyzes staged changes (
git diff --staged) and optionally compares multiple contexts. - Converts change details into a structured XML/JSON format that LLMs can understand.
- LLM API Integration: Directly calls APIs from providers like OpenAI, Gemini, Anthropic, Ollama, etc., using settings defined in
komitto.toml. - Contextual Understanding: Automatically includes recent commit logs in the prompt to preserve project context and style.
- Style Learning (
komitto learn): Analyzes your commit history to generate a custom system prompt that matches your project's commit style. - Combines with system prompts specifically designed for commit message generation; templates can be overridden per-context, per-template, or per-model.
- Copies the final generated prompt (or raw LLM output) to the clipboard.
- Provides functionality to attach additional context about the changes via command-line arguments.
- Interactive Mode (
-i/--interactive): Review, edit, regenerate, or commit the generated message in a rich TUI interface. - TUI Interface: Built with Textual for a modern terminal experience with real-time streaming.
- Editor Integration: Edit the commit message using your preferred editor (VISUAL/EDITOR/GIT_EDITOR).
- Robust Error Handling: Gracefully handles various error scenarios with helpful feedback.
Installation
pip install komitto
For development installation, use:
pip install -e .
Language Support
komitto automatically detects your language based on OS locale. Supported languages:
- English (
en) – default - Japanese (
ja)
Set KOMITTO_LANG=ja to force Japanese.
Usage
Prompt Generation Mode (Default)
- Stage changes with
git add. - Run
komitto. - The generated prompt is copied to your clipboard.
komitto
# -> Prompt copied!
AI-Automated Generation (Recommended when configured)
Configure provider, model, and other API settings in komitto.toml. Then running komitto will call the LLM, stream tokens, and copy the final commit message to the clipboard.
komitto
# -> 🤖 Generating...
# -> ✅ Copied!
Interactive Mode
komitto -i
Available commands during the interactive loop:
y– Accept and commit (git commit -m <msg>)e– Edit the message in an external editorr– RegeneratenorCtrl-C– Cancel
Comparison Mode
Compare two different configurations side-by-side:
komitto --compare ctxA ctxB
Two columns are displayed; press a or b to select one, then commit or edit as usual.
Passing Additional Context
Add free-form context that will be merged into the prompt:
komitto "Urgent bug fix for payment processing"
Editor Integration
During interactive mode you can invoke the configured editor at any time. The selection order is:
$GIT_EDITOR$VISUAL$EDITOR- Git's built-in default (
notepadon Windows,viotherwise).
Style Learning
Analyze your existing commit history to automatically generate a system prompt tailored to your project:
komitto learn
This command:
- Reads recent commit messages from your repository
- Analyzes the language, format, and conventions used
- Generates a custom system prompt matching your style
- Optionally updates
komitto.tomlautomatically
CLI Options
| Option | Description |
|---|---|
-i, --interactive |
Enable interactive TUI mode |
-c, --context-name NAME |
Use a specific context profile from config |
-t, --template NAME |
Use a specific prompt template from config |
-m, --model NAME |
Use a specific model from config |
--compare CTX1 CTX2 |
Compare outputs from two context configurations |
Customization via Configuration File
Create a project-specific configuration with:
komitto init
Configuration files are looked up in this order (later overrides earlier):
- User config directory (
%APPDATA%\komitto\config.toml, etc.) - Project directory
./komitto.toml
Sample komitto.toml
[prompt]
system = """
You are a helpful assistant that produces semantic commit messages following Conventional Commits.
Analyze the diff below and output only the subject line (<=50 chars) and an optional body.
"""
[llm]
provider = "openai"
model = "gpt-4o"
api_key = "${OPENAI_API_KEY}"
base_url = "https://api.openai.com/v1"
history_limit = 5
[templates.simple]
system = "[{prompt}] Commit message: "
[contexts.release]
template = "simple"
model = "gpt4"
# Excludes are merged from defaults; add project-specific patterns:
[git]
exclude = [
"node_modules/**",
"*.lock"
]
Using Ollama/LM Studio
[llm]
provider = "openai" # still used for compatibility layer
model = "qwen3"
base_url = "http://localhost:11434/v1"
# No api_key needed for most local setups
How It Works (Internal Flow)
git diff --stagedretrieves staged changes.- Differences are transformed into a structured representation (
file path | operation | surrounding function/class signatures) in XML-like format. - The configuration file defines a system prompt; this is merged with any user-provided context and the diff representation to produce the final LLM input.
- Depending on CLI flags, the tool either streams tokens live (Rich UI) or returns a complete string instantly.
- The resulting text is copied to the clipboard; in interactive mode the user can accept, edit, regenerate, or cancel.
License
MIT © 2025-2026
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 komitto-0.3.5.tar.gz.
File metadata
- Download URL: komitto-0.3.5.tar.gz
- Upload date:
- Size: 33.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
397257f89f563c157308ad9745bf074ab66e269afe0c9735aba0735a1c007b81
|
|
| MD5 |
9f3b0bfe4ecec296eb644d545f7c6972
|
|
| BLAKE2b-256 |
b1194b7afac9e875f421fbba9bd0c3f35adb82080c4aeec3a3a226887e8a2b1c
|
Provenance
The following attestation bundles were made for komitto-0.3.5.tar.gz:
Publisher:
publish.yaml on MXCAKE3893/komitto
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
komitto-0.3.5.tar.gz -
Subject digest:
397257f89f563c157308ad9745bf074ab66e269afe0c9735aba0735a1c007b81 - Sigstore transparency entry: 1340633890
- Sigstore integration time:
-
Permalink:
MXCAKE3893/komitto@eb606697559d552c78d213253325866543ded055 -
Branch / Tag:
refs/tags/v0.3.5 - Owner: https://github.com/MXCAKE3893
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@eb606697559d552c78d213253325866543ded055 -
Trigger Event:
release
-
Statement type:
File details
Details for the file komitto-0.3.5-py3-none-any.whl.
File metadata
- Download URL: komitto-0.3.5-py3-none-any.whl
- Upload date:
- Size: 35.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
506121f4eefd2ccc59a44ab7c1d79abee21f821f9804d8bf27b3a91a8ecf71b5
|
|
| MD5 |
65fe9bbc255b42240e0e765e3e9863fd
|
|
| BLAKE2b-256 |
3de1a7d0a8996d3918e410b582b1f851957f20f2c6d29227fa4062cebf1fd4d2
|
Provenance
The following attestation bundles were made for komitto-0.3.5-py3-none-any.whl:
Publisher:
publish.yaml on MXCAKE3893/komitto
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
komitto-0.3.5-py3-none-any.whl -
Subject digest:
506121f4eefd2ccc59a44ab7c1d79abee21f821f9804d8bf27b3a91a8ecf71b5 - Sigstore transparency entry: 1340633891
- Sigstore integration time:
-
Permalink:
MXCAKE3893/komitto@eb606697559d552c78d213253325866543ded055 -
Branch / Tag:
refs/tags/v0.3.5 - Owner: https://github.com/MXCAKE3893
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@eb606697559d552c78d213253325866543ded055 -
Trigger Event:
release
-
Statement type: