Skip to content

thomwebb/gac

Repository files navigation

🚀 Git Auto Commit (gac)

PyPI version Changelog Python Build Status codecov Ruff mypy Contributions welcome License: MIT

English | 简体中文 | 繁體中文 | 日本語 | 한국어 | हिन्दी | Tiếng Việt | Français | Русский | Español | Português | Norsk | Svenska | Deutsch | Nederlands | Italiano

LLM-powered commit messages that understand your code!

Automate your commits! Replace git commit -m "..." with uvx gac for contextual, well-formatted commit messages generated by large language models!


What You Get

Intelligent, contextual messages that explain the why behind your changes:

GAC generating a contextual commit message


Quick Start

uvx gac init   # Configure your provider, model, and language
uvx gac  # Generate and commit with LLM

That's it! Review the generated message and confirm with y.


Key Features

🌐 29+ Supported Providers

  • AnthropicAzure OpenAICerebrasChatGPT (OAuth)Chutes.ai
  • Claude Code (OAuth)Crof.aiDeepSeekFireworksGeminiGitHub Copilot (OAuth)
  • GroqKimi for CodingLM StudioMiniMax.ioMistral AIMoonshot AI
  • NeuralwattOllamaOpenAIOpenCode GoOpenRouterQwen Cloud (CN & INTL)
  • ReplicateStreamlake/VanchinSynthetic.newTogether AIWafer.ai
  • Z.AI (API & Coding Plans)Custom Endpoints (Anthropic/OpenAI)

🧠 Smart LLM Analysis

  • Understands intent: Analyzes code structure, logic, and patterns to understand the "why" behind your changes, not just what changed
  • Semantic awareness: Recognizes refactoring, bug fixes, features, and breaking changes to generate contextually appropriate messages
  • Intelligent filtering: Prioritizes meaningful changes while ignoring generated files, dependencies, and artifacts
  • Intelligent commit grouping - Automatically group related changes into multiple logical commits with --group

📝 Multiple Message Formats

  • One-liner (-o flag): Single-line commit message following conventional commit format
  • Standard (default): Summary with bullet points explaining implementation details
  • Verbose (-v flag): Comprehensive explanations including motivation, technical approach, and impact analysis
  • 50/72 rule (--50-72 flag): Enforce the classic commit message format for optimal readability in git log and GitHub UI
  • DCO/Signoff (--signoff flag): Add Signed-off-by line for Developer Certificate of Origin compliance (required by Cherry Studio, Linux kernel, and other projects)

🌍 Multilingual Support

  • 25+ languages: Generate commit messages in English, Chinese, Japanese, Korean, Spanish, French, German, and 18+ more languages
  • Flexible translation: Choose to keep conventional commit prefixes in English for tool compatibility, or fully translate them
  • Multiple workflows: Set a default language with uvx gac language, or use -l <language> flag for one-time overrides
  • Native script support: Full support for non-Latin scripts including CJK, Cyrillic, Thai, and more

💻 Developer Experience

  • Interactive feedback: Type r to reroll, e to edit (in-place TUI by default, or your $GAC_EDITOR if set), or directly type your feedback like make it shorter or focus on the bug fix
  • Interactive questioning: Use --interactive (-i) to answer targeted questions about your changes for more contextual commit messages
  • One-command workflows: Complete workflows with flags like uvx gac -ayp (stage all, auto-confirm, push)
  • Git integration: Respects pre-commit and lefthook hooks, running them before expensive LLM operations
  • MCP server: Run uvx gac serve to expose commit tools to AI agents via the Model Context Protocol

📊 Usage Statistics

uvx gac stats               # Overview: total gacs, streaks, daily/weekly peaks, top projects & models
uvx gac stats models        # Per-model breakdown: gacs, tokens, latency, speed
uvx gac stats projects      # Per-project breakdown: gacs, commits, tokens across all repos
uvx gac stats reset         # Reset all stats (prompts for confirmation)
uvx gac stats reset model <model-id>  # Reset stats for a specific model only
  • Track your gacs: See how many commits you've made with gac, your current streak, peak daily/weekly activity, and top projects
  • Token tracking: Total prompt + completion tokens by day, week, project, and model — with high-score trophies for token usage too
  • Top models: See which models you use most and how many tokens each one consumes
  • High score celebrations: 🏆 trophies when you set new daily, weekly, token, or streak records; 🥈 for tying them
  • Opt-in during setup: uvx gac init asks whether to enable stats and explains exactly what's stored
  • Opt-out anytime: Set GAC_DISABLE_STATS=true (or 1/yes/on) to disable. Setting it to false/0/no (or unsetting) keeps stats enabled
  • Privacy-first: Stored locally in ~/.gac_stats.json. Only counts, dates, project names, and model names — no commit messages, code, or personal data. No telemetry

🛡️ Built-in Security

  • Automatic secret detection: Scans for API keys, passwords, and tokens before committing
  • Interactive protection: Prompts before committing potentially sensitive data with clear remediation options
  • Smart filtering: Ignores example files, template files, and placeholder text to reduce false positives

Usage Examples

Basic Workflow

# Stage your changes
git add .

# Generate and commit with LLM
uvx gac

# Review → y (commit) | n (cancel) | r (reroll) | e (edit) | or type feedback

Common Commands

Command Description
uvx gac Generate commit message
uvx gac -y Auto-confirm (no review needed)
uvx gac -a Stage all before generating commit message
uvx gac -S Interactively select files to stage
uvx gac -o One-line message for trivial changes
uvx gac -v Verbose format with Motivation, Technical Approach, and Impact Analysis
uvx gac -h "hint" Add context for LLM (e.g., uvx gac -h "bug fix")
uvx gac -s Include scope (e.g., feat(auth):)
uvx gac -i Ask questions about changes for better context
uvx gac -g Group changes into multiple logical commits
uvx gac -p Commit and push
uvx gac stats View your gac usage statistics

Power User Examples

# View your commit statistics
uvx gac stats

# Stats for all projects
uvx gac stats projects

# Complete workflow in one command
uvx gac -ayp -h "release preparation"

# Detailed explanation with scope
uvx gac -v -s

# Quick one-liner for small changes
uvx gac -o

# Generate commit message in a specific language
uvx gac -l ja

# Group changes into logically related commits
uvx gac -ag

# Interactive mode with verbose output for detailed explanations
uvx gac -iv

# Debug what the LLM sees
uvx gac --show-prompt

# Skip security scan (use carefully)
uvx gac --skip-secret-scan

# Add signoff for DCO compliance (Cherry Studio, Linux kernel, etc.)
uvx gac --signoff

Interactive Feedback System

Not happy with the result? You have several options:

# Simple reroll (no feedback)
r

# Edit the commit message
e
# By default: in-place TUI with vi/emacs keybindings
# Press Esc+Enter or Ctrl+S to submit, Ctrl+C to cancel

# Set GAC_EDITOR to open your preferred editor instead:
# GAC_EDITOR=code gac    → opens VS Code (--wait auto-applied)
# GAC_EDITOR=vim gac     → opens vim
# GAC_EDITOR=nano gac    → opens nano

# Or just type your feedback directly!
make it shorter and focus on the performance improvement
use conventional commit format with scope
explain the security implications

# Press Enter on empty input to see the prompt again

The edit feature (e) lets you refine the commit message:

  • Default (in-place TUI): Multi-line editing with vi/emacs key bindings — correct typos, adjust wording, restructure
  • With GAC_EDITOR: Opens your preferred editor (code, vim, nano, etc.) — full editor power including find/replace, macros, etc.

GUI editors like VS Code are automatically handled: gac inserts --wait so the process blocks until you close the editor tab. No extra configuration needed.


Configuration

Run uvx gac init to configure your provider interactively, or set environment variables:

Need to change providers or models later without touching language settings? Use uvx gac model for a streamlined flow that skips the language prompts.

# Example configuration
GAC_MODEL=anthropic:your-model-name
OPENAI_API_KEY=your_key_here
ANTHROPIC_API_KEY=your_key_here

See .gac.env.example for all available options.

Want commit messages in another language? Run uvx gac language to select from 25+ languages including Español, Français, 日本語, and more.

Want to customize commit message style? See docs/CUSTOM_SYSTEM_PROMPTS.md for guidance on writing custom system prompts.


Getting Help


About

Intelligent LLM-powered git commit message generator that understands your code!

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages