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] # The upstream setup guide says `aicommits setup` and `aicommits config set` # create this file in the user's home directory. It can contain provider API # keys, so the whole file is treated as a secret. # https://github.com/Nutlope/aicommits#setup 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"]