gai

AI-powered git commit message generator

Version License: MIT Bun TypeScript

Generate Conventional Commits messages using AI — based on your project context, code diff, and commit history.


Features

  • 3-layer context — project overview, staged diff, and recent commit history
  • Conventional Commitsfeat(scope): description format by default
  • Interactive file selection — ↑/↓ to navigate, space to select, top-level "Select all"
  • OpenAI-compatible API — works with DeepSeek, OpenAI, Ollama, and more
  • Review before commit — confirm, edit, or abort the generated message
  • Zero dependencies — built entirely on Bun native APIs

Quick Start

# Install dependencies
bun install

# Configure your API key
bun run gai config

# Generate a commit message
bun run gai

Usage

gai                Generate commit message (interactive file selection)
gai --auto         Auto-stage all changed files
gai --dry-run      Generate message without committing
gai config         Configure API settings
gai --help         Show help
gai --version      Show version

Interactive Flow

$ gai

  Select files to stage:
     ◉ Select all
      ◉ src/git.ts (modified)
      ○ src/ai.ts (modified)
      ◉ src/newfile.ts (new)

  ↑/↓ navigate, space select, enter confirm

  Generating commit message...

  Generated commit message:
    feat(git): add interactive file staging and commit wrapper

  Use this message? [Y/n/e] Y

  Committed successfully!

Configuration

Via gai config (interactive)

bun run gai config

Via environment variables

Variable Default Description
GAI_API_KEY Required. Your API key
GAI_API_BASE https://api.deepseek.com/v1 API base URL
GAI_MODEL deepseek-v4-flash Model name
GAI_MAX_TOKENS 500 Max response tokens
GAI_TEMPERATURE 0.7 Sampling temperature

Via .env file

Bun auto-loads .env — no dotenv needed:

GAI_API_KEY=sk-your-key
GAI_API_BASE=https://api.deepseek.com/v1
GAI_MODEL=deepseek-v4-flash

Using other providers

OpenAI
GAI_API_KEY=sk-xxx
GAI_API_BASE=https://api.openai.com/v1
GAI_MODEL=gpt-4o
Ollama (local)
GAI_API_KEY=ollama
GAI_API_BASE=http://localhost:11434/v1
GAI_MODEL=llama3
OpenRouter
GAI_API_KEY=sk-or-xxx
GAI_API_BASE=https://openrouter.ai/api/v1
GAI_MODEL=anthropic/claude-sonnet-4

How It Works

┌─────────────────────────────────────────────┐
│                gai                           │
├─────────────────────────────────────────────┤
│  1. Collect project context                  │
│     ├─ README.md / package.json              │
│     └─ Directory structure                   │
│                                              │
│  2. Collect code changes                     │
│     └─ git diff --staged                     │
│                                              │
│  3. Collect commit history                   │
│     └─ git log --oneline -10                 │
│                                              │
│  4. Build prompt → Call AI API               │
│                                              │
│  5. Review → Confirm → Commit                │
└─────────────────────────────────────────────┘

Build

Compile to a standalone binary:

bun run build
# Output: ./gai

Test

bun test

License

MIT

S
Description
No description provided
Readme MIT 362 KiB
v0.1.3 Latest
2026-06-17 21:32:17 +08:00
Languages
TypeScript 100%