An open API service indexing awesome lists of open source software.

https://github.com/mxcake3893/komitto

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.
https://github.com/mxcake3893/komitto

cli commit-message developer developer-tools git llm openai productivity python tools

Last synced: 5 months ago
JSON representation

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.

Awesome Lists containing this project

README

          

# komitto (commit)

[English](./README.md) | [日本語](./README-ja.md)

`git diff` の情報からセマンティックなコミットメッセージのプロンプトを生成するCLIツールです。生成されたプロンプトは自動的にクリップボードにコピーされるため、LLM(大規模言語モデル)に貼り付けてコミットメッセージを作成できます。

## 主な機能

- ステージされた変更(`git diff --staged`)を解析し、オプションで複数のコンテキストを比較可能。
- 変更内容を、LLMが理解しやすい構造化されたXML/JSON形式に変換。
- **LLM API連携**: `komitto.toml` の設定に基づき、OpenAI, Gemini, Anthropic, Ollama などのプロバイダーのAPIを直接呼び出し可能。
- **コンテキスト理解**: プロジェクトの文脈やスタイルを維持するため、直近のコミットログを自動的にプロンプトに含めます。
- **スタイル学習** (`komitto learn`): コミット履歴を分析し、プロジェクトのコミットスタイルに合わせたカスタムシステムプロンプトを生成。
- コミットメッセージ生成用に特別に設計されたシステムプロンプトと組み合わせ可能。テンプレートは、コンテキストごと、テンプレートごと、またはモデルごとに上書きできます。
- 生成された最終的なプロンプト(または生のLLM出力)をクリップボードにコピー。
- コマンドライン引数経由で、変更に関する追加コンテキストを付与する機能を提供。
- **インタラクティブモード** (`-i`/`--interactive`): リッチなTUIインターフェースで、生成されたメッセージの確認、編集、再生成、コミットが可能。
- **TUIインターフェース**: [Textual](https://textual.textualize.io/)を使用して構築された、リアルタイムストリーミング対応のモダンなターミナル体験。
- **エディタ連携**: お好みのエディタ(VISUAL/EDITOR/GIT_EDITOR)を使用してコミットメッセージを編集可能。
- **堅牢なエラーハンドリング**: さまざまなエラーシナリオに対して、役立つフィードバックとともに適切に対処。

## インストール

```bash
pip install komitto
```

開発用のインストールを行う場合は、以下を使用してください:

```bash
pip install -e .
```

## 言語サポート

komittoはOSのロケールに基づいて言語を自動検出します。サポートされている言語:

* 英語 (`en`) – デフォルト
* 日本語 (`ja`)

`KOMITTO_LANG=ja` を設定することで、強制的に日本語にすることができます。

## 使い方

### プロンプト生成モード(デフォルト)

1. `git add` で変更をステージします。
2. `komitto` を実行します。
3. 生成されたプロンプトがクリップボードにコピーされます。

```bash
komitto
# -> Prompt copied!
```

### AI自動生成(設定済みの場合推奨)

`komitto.toml` で `provider`、`model`、その他のAPI設定を行います。その後 `komitto` を実行すると、LLMを呼び出してトークンをストリーミングし、最終的なコミットメッセージをクリップボードにコピーします。

```bash
komitto
# -> 🤖 Generating...
# -> ✅ Copied!
```

### インタラクティブモード

```bash
komitto -i
```

インタラクティブなループ中に使用可能なコマンド:

* `y` – 承認してコミットする (`git commit -m `)
* `e` – 外部エディタでメッセージを編集する
* `r` – 再生成する
* `n` または `Ctrl-C` – キャンセル

### 比較モード

2つの異なる設定を並べて比較します:

```bash
komitto --compare ctxA ctxB
```

2つの列が表示されます。`a` または `b` を押してどちらかを選択し、通常通りコミットまたは編集を行います。

### 追加コンテキストの付与

プロンプトにマージされる自由形式のコンテキストを追加できます:

```bash
komitto "Urgent bug fix for payment processing"
```

### エディタ連携

インタラクティブモード中は、いつでも設定されたエディタを呼び出すことができます。選択順序は以下の通りです:

1. `$GIT_EDITOR`
2. `$VISUAL`
3. `$EDITOR`
4. Gitの組み込みデフォルト(Windowsでは `notepad`、それ以外では `vi`)。

### スタイル学習

既存のコミット履歴を分析し、プロジェクトに最適化されたシステムプロンプトを自動生成します:

```bash
komitto learn
```

このコマンドは以下を行います:
1. リポジトリから直近のコミットメッセージを読み込み
2. 使用されている言語、フォーマット、規約を分析
3. スタイルに合わせたカスタムシステムプロンプトを生成
4. オプションで `komitto.toml` を自動的に更新

### CLIオプション

| オプション | 説明 |
|----------------------------|--------------------------------------------------|
| `-i`, `--interactive` | インタラクティブTUIモードを有効化 |
| `-c`, `--context-name 名前` | 設定からコンテキストプロファイルを指定 |
| `-t`, `--template 名前` | 設定からプロンプトテンプレートを指定 |
| `-m`, `--model 名前` | 設定からモデルを指定 |
| `--compare CTX1 CTX2` | 2つのコンテキスト設定からの出力を比較 |

## 設定ファイルによるカスタマイズ

以下を実行して、プロジェクト固有の設定を作成します:

```bash
komitto init
```

設定ファイルは以下の順序で検索されます(後の方が優先されます):

1. ユーザー設定ディレクトリ (`%APPDATA%\komitto\config.toml` など)
2. プロジェクトディレクトリ `./komitto.toml`

### `komitto.toml` のサンプル

```toml
[prompt]
system = """
あなたはConventional Commitsに従ったセマンティックなコミットメッセージを作成する役立つアシスタントです。
以下のdiffを分析し、件名行(50文字以内)とオプションの本文のみを出力してください。
"""

[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"

# 除外設定はデフォルトからマージされます。プロジェクト固有のパターンを追加してください:
[git]
exclude = [
"node_modules/**",
"*.lock"
]
```

### Ollama/LM Studio の使用

```toml
[llm]
provider = "openai" # 互換レイヤーのためにopenaiを使用します
model = "qwen3"
base_url = "http://localhost:11434/v1"
# 多くのローカルセットアップではapi_keyは不要です
```

## 仕組み(内部フロー)

1. `git diff --staged` でステージされた変更を取得します。
2. 差分は、XMLライクな形式の構造化表現(`ファイルパス | 操作 | 関連する関数/クラスのシグネチャ`)に変換されます。
3. 設定ファイルで定義された**システムプロンプト**が、ユーザー提供のコンテキストやdiffの表現とマージされ、最終的なLLM入力が生成されます。
4. CLIフラグに応じて、ツールはトークンをライブストリーミング(リッチUI)するか、完全な文字列を即座に返します。
5. 結果のテキストはクリップボードにコピーされます。インタラクティブモードでは、ユーザーは承認、編集、再生成、またはキャンセルが可能です。

## ライセンス

MIT © 2024-2025