id = "aicommits"
name = "AI Commits"
homepage = "https://github.com/Nutlope/aicommits"
description = "A CLI that writes your git commit messages for you with AI."
executables = ["aicommits"]
[dotfiles]
paths = []
secret = ["~/.aicommits"]
[commands]
format = 1
label = "Generate commit message"
description = "Generate a commit message for the staged changes with AI. Setup, config, hook and update subcommands are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = false, short_attached = false, short_bundles = false }
[[commands.source]]
id = "readme"
kind = "manual"
url = "https://github.com/Nutlope/aicommits#readme"
revision = "main 2026-10"
evidence = """
- `--all` or `-a`: Automatically stage changes in tracked files for the commit (default: **false**)
- `--clipboard` or `-c`: Copy the selected message to the clipboard instead of committing (default: **false**)
- `--generate` or `-g`: Number of messages to generate (default: **1**)
- `--exclude` or `-x`: Files to exclude from AI analysis
- `--type` or `-t`: Git commit message format (default: **plain**). Supports `plain`, `conventional`, and `gitmoji`
- `--prompt` or `-p`: Custom prompt to guide the LLM behavior (e.g., specific language, style instructions)
- `--no-verify` or `-n`: Bypass pre-commit hooks while committing (default: **false**)
- `--yes` or `-y`: Skip confirmation when committing after message generation (default: **false**)
"""
[[commands.field]]
id = "all"
label = "Stage tracked changes"
type = "boolean"
option = ["--all", "-a"]
sources = ["readme"]
[[commands.field]]
id = "type"
label = "Message format"
type = "enum"
option = ["--type", "-t"]
choices = [{ value = "plain", label = "Plain" }, { value = "conventional", label = "Conventional Commits" }, { value = "gitmoji", label = "Gitmoji" }]
sources = ["readme"]
[[commands.field]]
id = "generate"
label = "Messages to generate"
type = "integer"
option = ["--generate", "-g"]
sources = ["readme"]
[[commands.field]]
id = "prompt"
label = "Custom prompt"
type = "string"
option = ["--prompt", "-p"]
sources = ["readme"]
[[commands.field]]
id = "exclude"
label = "Exclude files"
type = "string"
option = ["--exclude", "-x"]
multiple = true
sources = ["readme"]
[[commands.field]]
id = "clipboard"
label = "Copy to clipboard instead of committing"
type = "boolean"
option = ["--clipboard", "-c"]
sources = ["readme"]
[[commands.field]]
id = "yes"
label = "Skip confirmation"
type = "boolean"
option = ["--yes", "-y"]
sources = ["readme"]
[[commands.field]]
id = "no_verify"
label = "Bypass pre-commit hooks"
type = "boolean"
option = ["--no-verify", "-n"]
effect = "overwrite"
sources = ["readme"]
[[commands.task]]
id = "commit"
label = "Commit with an AI message"
fields = ["all", "type", "prompt", "yes"]
required = []
[[commands.task]]
id = "copy"
label = "Copy a message only"
fields = ["type", "generate", "clipboard"]
required = ["clipboard"]
set = { clipboard = [true] }
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["all", "type", "generate", "prompt", "clipboard", "yes"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["exclude", "no_verify"]