Skip to main content

lgit

LLM-powered git commit message generator

CI PyPI License Python

Generates conventional commits from git diffs using Claude AI or any OpenAI-compatible API.
Automatic changelog maintenance, multi-commit composition, and full history rewriting.


Features

  • Conventional commits — Generates properly formatted commit messages with type, scope, and past-tense summary (≤72 chars)
  • Automatic changelogs — Maintains CHANGELOG.md following Keep a Changelog format with monorepo support
  • Compose mode — Splits large staged changes into multiple logical atomic commits
  • Rewrite mode — Converts entire git history to conventional commits (with automatic backup)
  • Map-reduce analysis — Parallel per-file analysis for large commits without truncation
  • Any LLM provider — Works with Anthropic, OpenAI, OpenRouter, or any OpenAI-compatible API

Quick Start

# Install
uv tool install lgit-cli

# Configure (pick one)
export LLM_GIT_API_KEY=your_anthropic_key                    # Direct Anthropic
export LLM_GIT_API_URL=https://openrouter.ai/api/v1          # OpenRouter
litellm --port 4000                                           # Local proxy (default)

# Use
git add .
lgit                    # Analyze, update changelog, commit
lgit --dry-run          # Preview without committing
lgit --compose          # Split into multiple commits

Usage

Basic Commands

lgit                                # Analyze staged changes and commit
lgit --dry-run                      # Preview message without committing
lgit --copy                         # Copy message to clipboard
lgit -p                             # Commit and push
lgit -S                             # GPG sign the commit
lgit -s                             # Add Signed-off-by trailer
lgit --amend                        # Amend the previous commit
lgit > msg.txt                      # Save raw message to file (auto-detected pipe mode)
lgit --dry-run | git commit -F -    # Generate message and commit with custom git flags

# Modes
lgit --mode=unstaged                # Preview unstaged changes (no commit)
lgit --mode=commit --target=HEAD~1  # Analyze a specific commit

# Models
lgit -m opus                        # Use Opus for analysis (more capable)
lgit -m sonnet                      # Use Sonnet (default)

# Context
lgit Fixed regression from PR #123  # Add context via trailing text
lgit --fixes 123 456                # Add "Fixes #123, #456" to body
lgit --breaking                     # Mark as breaking change

Compose Mode

Split staged changes into multiple logical commits:

lgit --compose                      # Propose and create atomic commits
lgit --compose --compose-preview    # Preview splits without committing
lgit --compose --compose-max-commits 5
lgit --compose --compose-test-after-each

Rewrite Mode

Convert repository history to conventional commits:

lgit --rewrite                      # Rewrite full history (creates backup)
lgit --rewrite --rewrite-preview 10 # Preview first 10 commits
lgit --rewrite --rewrite-dry-run    # Show all changes without applying
lgit --rewrite --rewrite-start main~50  # Rewrite last 50 commits only
lgit --rewrite --rewrite-parallel 20    # 20 concurrent API calls

Profiling Trace

Write detailed tracing spans and HTTP timing events to a JSONL file:

lgit --trace-output /tmp/lgit-profile.jsonl --dry-run
LLM_GIT_TRACE_FILE=/tmp/lgit-profile.jsonl lgit --compose

Each span close event includes busy/idle timing from tracing-subscriber; API events also record TTFT, total response time, status, and response size.

Automatic Changelog

lgit automatically maintains CHANGELOG.md files when committing:

  • Auto-detection — Finds all CHANGELOG.md files in your repository
  • Monorepo support — Routes changes to the correct changelog based on file paths
  • Deduplication — Skips entries semantically similar to existing ones
  • Category mapping — Maps commit types to sections (Added, Fixed, Changed, etc.)
project/
├── CHANGELOG.md              ← covers: src/, docs/
├── packages/
│   ├── core/
│   │   └── CHANGELOG.md      ← covers: packages/core/**
│   └── cli/
│       └── CHANGELOG.md      ← covers: packages/cli/**

Disable with --no-changelog or changelog_enabled = false in config.

Configuration

Create ~/.config/llm-git/config.toml:

# API
api_base_url = "http://localhost:4000"    # Default: LiteLLM proxy
api_key = "sk-..."                        # Or use LLM_GIT_API_KEY env var

# Model — any role accepts a `;`-separated fallback chain, tried left to right
analysis_model = "claude-sonnet-4.5"      # Diff analysis / classification
summary_model = "claude-haiku-4-5"        # Summary line generation
map_model = ""                            # Per-file map phase; empty = summary_model
fast_model = "flash-lite;haiku"           # Fast mode; falls back when the primary stalls

# Commit message limits
summary_guideline = 72                    # Target length
summary_soft_limit = 96                   # Triggers retry
summary_hard_limit = 128                  # Absolute max

# Features
changelog_enabled = true
auto_fast_threshold_lines = 200           # Auto-use fast mode for small diffs; 0 disables
map_reduce_enabled = true                 # Parallel analysis for large commits
disable_git_background_features = true    # Disables fsmonitor/untrackedCache for lgit subprocesses

# Commit signing
gpg_sign = false                          # GPG sign commits by default (-S)
signoff = false                           # Add Signed-off-by trailer by default (-s)

Provider Examples

Anthropic Direct:

api_base_url = "https://api.anthropic.com/v1"
api_key = "sk-ant-..."

OpenRouter:

api_base_url = "https://openrouter.ai/api/v1"
api_key = "sk-or-..."
analysis_model = "anthropic/claude-sonnet-4.5"
summary_model = "anthropic/claude-haiku-4-5"

OpenAI:

api_base_url = "https://api.openai.com/v1"
api_key = "sk-..."
analysis_model = "gpt-4o"
summary_model = "gpt-4o-mini"

The client asks all providers for markdown/plain-text responses and parses the same response format across OpenRouter, LiteLLM, Anthropic, and OpenAI endpoints.

Commit Types

Customize commit type classification:

[types.feat]
description = "New public API or user-observable behavior change"
diff_indicators = ["pub fn", "pub struct", "export function"]

[types.fix]
description = "Fixes incorrect behavior"
diff_indicators = ["unwrap() → ?", "bounds check", "error handling"]

[types.refactor]
description = "Internal restructuring with unchanged behavior"
hint = "If behavior changes, use feat instead."

Changelog Categories

[[categories]]
name = "Breaking"
header = "Breaking Changes"
match.body_contains = ["breaking", "incompatible"]

[[categories]]
name = "Added"
match.types = ["feat"]

[[categories]]
name = "Fixed"
match.types = ["fix"]

[[categories]]
name = "Changed"
default = true

Environment Variables

Variable Description Default
LLM_GIT_API_URL API endpoint http://localhost:4000
LLM_GIT_API_KEY API key none
LLM_GIT_CONFIG Config file path ~/.config/llm-git/config.toml
LLM_GIT_VERBOSE Debug output false
LLM_GIT_TRACE_FILE JSONL profiling trace output path none

Installation

From PyPI

uv tool install lgit-cli    # recommended
pipx install lgit-cli       # or
pip install lgit-cli

From source

git clone https://github.com/can1357/llm-git.git
cd llm-git
uv tool install .

Prerequisites

  • Python 3.14+
  • Git
  • API access (Anthropic, OpenAI, OpenRouter, or local LiteLLM proxy)

License

MIT

Metadata

Release files for lgit-cli 5.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lgit-cli 5.4.0
File Size Uploaded
lgit_cli-5.4.0.tar.gz 758.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for lgit-cli 5.4.0
File Interpreter ABI Platform
lgit_cli-5.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 929.6 kB

Release files / lgit_cli-5.4.0.tar.gz

Download URL lgit_cli-5.4.0.tar.gz
Size 758.2 kB
Tags Source
SHA-256 checksum
How to use checksums
6d46f070d49b6b7f39f6bfdcf25700ba5ea91deab51f9aa73a0073122c85a1c5
BLAKE2b-256 checksum
How to use checksums
6caa2ca836fec249c951b183c7512e70d86b97cde23182c5677ec1e9fd7959d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 24, 2026.

Transparency log

Release files / lgit_cli-5.4.0-py3-none-any.whl

Download URL lgit_cli-5.4.0-py3-none-any.whl
Size 171.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a979ae76824a0767ad98378622ac35652d54f7a306b86b21013947d7ae7ba825
BLAKE2b-256 checksum
How to use checksums
91db2aedddce025f1f00abff58eb6b88a6ff5cffa1b41d47302d89c1384c2de2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 24, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

5.4.0 This release

2 release files

5.3.0

2 release files

5.2.0

2 release files

5.1.1

2 release files

5.1.0

2 release files

5.0.0

2 release files

4.3.0

2 release files

4.2.1

2 release files

4.2.0

2 release files

4.1.0

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.7.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