GitFlow Toolkit is a CLI tool written in Go for standardizing git commit messages following the Angular commit message specification. It provides an interactive TUI for creating commits, branches, and managing git operations.
demo.webm
- Interactive commit message creation with type, scope, subject, body, and footer
- AI-powered commit message generation using LLM (OpenRouter, Groq, OpenAI, or local Ollama)
- Automatic
Signed-off-bygeneration - Git subcommand integration (
git ci,git ps,git feat, etc.) - Lucky commit hash prefix support
- Adaptive terminal UI with light and dark theme support
- Git
- macOS or Linux (Windows is not fully tested)
brew install mritd/gitflow-toolkit/gitflow-toolkitDownload the latest binary from the Release page and run the install command:
# Download the latest release (replace PLATFORM with: linux-amd64, darwin-arm64, etc.)
curl -fsSL https://github.com/mritd/gitflow-toolkit/releases/latest/download/gitflow-toolkit-PLATFORM -o gitflow-toolkit
chmod +x gitflow-toolkit
# Install (creates symlinks for git subcommands)
sudo ./gitflow-toolkit installgo install github.com/mritd/gitflow-toolkit/v3@latestNote: When installing via go install, you need to manually run gitflow-toolkit install to create git subcommand symlinks.
After installation, you can use the following git subcommands:
git ciThis opens an interactive TUI to create a commit message with:
- Type selection (feat, fix, docs, etc.)
- Scope input
- Subject line
- Optional body (supports external editor with
Ctrl+E) - Optional footer
git psPush the current branch to origin with a progress indicator.
git feat my-feature # Creates feat/my-feature
git fix bug-123 # Creates fix/bug-123
git docs readme # Creates docs/readme| Command | Description |
|---|---|
git ci |
Interactive commit message creation |
git ps |
Push current branch to remote |
git feat NAME |
Create branch feat/NAME |
git fix NAME |
Create branch fix/NAME |
git hotfix NAME |
Create branch hotfix/NAME |
git docs NAME |
Create branch docs/NAME |
git style NAME |
Create branch style/NAME |
git refactor NAME |
Create branch refactor/NAME |
git chore NAME |
Create branch chore/NAME |
git perf NAME |
Create branch perf/NAME |
git test NAME |
Create branch test/NAME |
The tool enforces the Angular commit message format:
type(scope): subject
body
footer
Signed-off-by: Name <email>
Supported types: feat, fix, docs, style, refactor, test, chore, perf, hotfix
All settings are configured via ~/.gitconfig under the [gitflow] section.
[gitflow]
# LLM API key (required for cloud providers)
llm-api-key = sk-or-v1-xxxxx
# LLM settings
llm-api-host = https://openrouter.ai
llm-api-path = /api/v1/chat/completions
llm-model = mistralai/devstral-2512:free
llm-temperature = 0.3
llm-diff-context = 5
llm-request-timeout = 2m
llm-max-retries = 0
llm-output-lang = en
llm-max-concurrency = 3
# Custom prompts (optional, language-specific)
llm-file-analysis-prompt = "Summarize this diff briefly."
llm-commit-prompt-en = "Your custom English commit prompt."
llm-commit-prompt-zh = "Your custom Chinese commit prompt."
llm-commit-prompt-bilingual = "Your custom bilingual commit prompt."
# Lucky commit prefix (hex characters, max 12)
lucky-commit-prefix = abc
# SSH strict host key checking (default: false)
ssh-strict-host-key = false
# Auto-detect commit type from branch name (default: false)
branch-auto-detect = true| Key | Description | Default |
|---|---|---|
llm-api-key |
API key for cloud LLM providers | - |
llm-api-host |
LLM API endpoint | see below |
llm-api-path |
API path (auto-detected for known providers) | see below |
llm-model |
LLM model name | see below |
llm-temperature |
Model temperature | 0.3 |
llm-diff-context |
Diff context lines | 5 |
llm-request-timeout |
Request timeout (Go duration, e.g., 2m, 30s) |
2m |
llm-max-retries |
Max retry count on failure | 0 |
llm-output-lang |
Output language (en, zh, bilingual) |
en |
llm-max-concurrency |
Max parallel file analysis | 3 |
llm-file-analysis-prompt |
Custom file analysis prompt | - |
llm-commit-prompt-en |
Custom English commit prompt | - |
llm-commit-prompt-zh |
Custom Chinese commit prompt | - |
llm-commit-prompt-bilingual |
Custom bilingual commit prompt | - |
lucky-commit-prefix |
Lucky commit hex prefix (max 12 chars) | - |
ssh-strict-host-key |
SSH strict host key checking | false |
branch-auto-detect |
Auto-detect commit type from branch name | false |
Generate commit messages automatically using LLM:
- Run
git ciand pressTabto switch to theAuto Generatebutton (or pressa) - Wait for AI to generate the commit message
- Review the generated message, then choose:
- Commit: Use the message as-is
- Edit: Open in
$EDITORfor modifications - Retry: Regenerate the message
Provider Selection:
| Provider | When | Default Host | Default Path | Default Model |
|---|---|---|---|---|
| OpenRouter | API key is set | https://openrouter.ai |
/api/v1/chat/completions |
mistralai/devstral-2512:free |
| Groq | Host contains groq.com |
https://api.groq.com |
/openai/v1/chat/completions |
- |
| OpenAI | Host contains openai.com |
https://api.openai.com |
/v1/chat/completions |
- |
| DeepSeek | Host contains deepseek.com |
https://api.deepseek.com |
/v1/chat/completions |
- |
| Mistral | Host contains mistral.ai |
https://api.mistral.ai |
/v1/chat/completions |
- |
| Ollama | No API key | http://localhost:11434 |
/api/generate |
qwen2.5-coder:7b |
| Other | Unknown host | - | /v1/chat/completions |
- |
Custom API Path:
If your provider uses a non-standard path, set it explicitly:
git config --global gitflow.llm-api-path "/custom/v1/chat/completions"Quick Start with OpenRouter (recommended):
git config --global gitflow.llm-api-key "sk-or-v1-xxxxx"
git ci # Press 'a' or Tab to Auto GenerateQuick Start with Local Ollama:
ollama pull qwen2.5-coder:7b
git ciLanguage Options:
en- English only (default)zh- Chinese subject and body (type/scope remain English)bilingual- Bilingual subjectenglish (中文)with Chinese body
Generate commit hashes with a specific prefix using lucky_commit:
# Install lucky_commit first
cargo install lucky_commit
# Set the desired prefix (hex characters, max 12)
git config --global gitflow.lucky-commit-prefix abc
# Commit as usual - hash will start with "abc"
git ci- Prefix must be valid hex characters (0-9, a-f)
- Maximum prefix length is 12 characters
- Press Ctrl+C during search to skip and keep original commit
Automatically pre-select the commit type based on your current branch name:
# Enable the feature
git config --global gitflow.branch-auto-detect true
# Now when you're on a branch like "feat/login" or "feature-new-ui"
git ci # Cursor will auto-select "feat" typeSupported branch prefixes:
| Branch Prefix | Commit Type |
|---|---|
feat, feature |
feat |
fix, bugfix, bug |
fix |
docs, doc, document |
docs |
style |
style |
refactor, refact |
refactor |
test, testing |
test |
chore |
chore |
perf, performance |
perf |
hotfix |
hotfix |
Supports separators: /, -, _ (e.g., feat/login, fix-bug-123, docs_readme)
brew uninstall gitflow-toolkit
brew untap mritd/gitflow-toolkitsudo gitflow-toolkit uninstallMIT