Easier opinionated Git workflows.
omut commitgenerates commit messages with AI.omut branchgenerates branch names with AI.--testmodes fit cleanly into hooks, scripts, and CI.- Repo rules live in
omut.config.toml, with glob support where it helps.
flowchart LR
A[Stage changes] --> B[Run omut commit]
B --> C{Pick path}
C --> D[Manual flow]
C --> E[AI flow]
D --> F[Choose type and scope]
E --> G[Generate from staged diff]
F --> H[Confirm]
G --> H
H --> I[Create commit]
git add .
omut commit
omut branch
omut commit --test "feat(ui): refresh cards"
omut branch --test feat/refresh-cardsnpm i -g @omut/omutgit clone https://github.com/dominnya/omut
cd omut
cargo install --path .- Open any Git repo.
- Run
omut initwhen you want AI or repo-specific rules. - Stage files with
git add. - Run
omut commitfor a commit message, oromut branchfor a branch name. - Pick
Manual,AI, orView Diff. - Confirm and let
omutfinish the job.
| Command | What you get |
|---|---|
omut commit |
Interactive commit flow for staged changes. |
omut commit --test "feat(ui): refresh cards" |
Commit message validation against repo rules. |
omut branch |
Interactive branch flow, plus git checkout -b after confirmation. |
omut branch --test feat/refresh-cards |
Branch name validation against repo rules. |
omut init |
A starter omut.config.toml in repo root. |
# omut β AI-powered conventional commit CLI
# Docs: https://github.com/dominnya/omut
# Commit message settings
[commit]
# Allowed conventional commit types
# Supports globs: ["*"] = any type, ["feat*"] = starts with feat
types = ["feat", "fix", "chore", "docs", "deps", "ci"]
# Available scopes (empty = freeform)
# Supports globs: ["*"] = any scope, ["api*"] = starts with api
scopes = []
# Require a scope for every commit
scope_required = false
# Show AI option first when choosing commit method
ai_first = false
# Branch naming conventions
[branch]
# Allowed branch prefixes (e.g. feat/*, fix/*)
# Supports globs: ["*"] = any prefix, ["release*"] = starts with release
allowed_prefixes = ["feat", "fix", "hotfix", "chore", "ci"]
# "warn" or "block" on invalid branch names
enforce = "warn"
# Branches exempt from prefix checks
# Supports globs: ["release/*", "main"] = all release branches + main
exempt_branches = ["main", "master", "develop", "dev", "staging", "production", "release"]
# AI provider settings
# Supported providers: claude, openai, gemini, codex, copilot
[ai]
provider = "claude"
# Claude β uses `claude` CLI when available, falls back to HTTP API
# Env: CLAUDE_API_KEY or ANTHROPIC_API_KEY
[ai.claude]
model = "claude-sonnet-4-6"
base_url = "https://api.anthropic.com"
# OpenAI β HTTP API
# Env: OPENAI_API_KEY
[ai.openai]
model = "gpt-5.4-mini"
base_url = "https://api.openai.com/v1"
# Gemini β uses `gemini` CLI when available, falls back to HTTP API
# Env: GEMINI_API_KEY or GOOGLE_API_KEY
[ai.gemini]
model = "gemini-3.1-flash-lite-preview"
base_url = "https://generativelanguage.googleapis.com"
# Codex β uses `codex` CLI when available, falls back to HTTP API
# Env: CODEX_API_KEY or OPENAI_API_KEY
[ai.codex]
model = "codex-mini-latest"
base_url = "https://api.openai.com/v1"
# Copilot β uses `copilot` CLI (requires GitHub Copilot subscription)
# No API key needed
[ai.copilot]
model = "claude-haiku-4.5"Globs work in types, scopes, allowed_prefixes, and exempt_branches.
Default rules
| Area | Default |
|---|---|
| Commit types | feat, fix, chore, docs, deps, ci |
| Commit scopes | Freeform |
| Scope required | false |
| AI first | false |
| Branch prefixes | feat, fix, hotfix, chore, ci |
| Branch enforcement | warn |
| Exempt branches | main, master, develop, dev, staging, production, release |
| Default AI provider | claude |
| Provider | How it runs | What to set |
|---|---|---|
| Claude | claude CLI when available, otherwise Anthropic API |
CLAUDE_API_KEY or ANTHROPIC_API_KEY |
| OpenAI | Chat Completions API | OPENAI_API_KEY |
| Gemini | gemini CLI when available, otherwise Google API |
GEMINI_API_KEY or GOOGLE_API_KEY |
| Codex | codex CLI when available, otherwise OpenAI-compatible API |
CODEX_API_KEY or OPENAI_API_KEY |
| Copilot | copilot CLI |
GitHub Copilot sign-in |
OpenAI-compatible endpoints also work by setting a custom base_url in the matching provider block.
AI commit prompts aim for short Conventional Commit messages with allowed types and scopes. AI branch prompts aim for prefix/kebab-case-name.
This project is under MIT license. You can freely use it for your own purposes.