The project is in a healthy, maintained state
Jeeves is a command-line tool that helps you create AI-powered Git commit messages
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 5.0
~> 13.0
~> 3.0

Runtime

~> 2.0
 Project Readme

Jeeves

Jeeves Logo

Jeeves creates Git commit messages from your changes using OpenRouter, the Anthropic API, or a local Ollama model. The bundled prompt adds gitmoji and a sarcastic roast of your engineering choices. Your own prompt can be neutral.

🐛 fix(client): retry only rate limits and server errors

Stop retrying permanent client errors. Asking a 404 more insistently was
never going to make the missing endpoint appear.

Install

Use Ruby 3.3 or newer and Git. Development uses Homebrew's current Ruby.

gem install jeeves-git-commit

From a source checkout:

bundle install
bundle exec rake install

Alternatively, ./install.sh links this checkout's executable into your PATH. The checkout must remain available when using this installation method.

Configure

For OpenRouter, export OPENROUTER_API_KEY. Optionally set GIT_COMMIT_OPENROUTER_MODEL to your preferred model. The provider defaults to OpenRouter.

To call Anthropic directly, save these settings. GIT_COMMIT_ANTHROPIC_MODEL is optional and defaults to claude-haiku-5-5:

GIT_COMMIT_PROVIDER=anthropic
ANTHROPIC_API_KEY=your-anthropic-key
GIT_COMMIT_ANTHROPIC_MODEL=claude-haiku-5-5

To use an installed local Ollama model, save these in your shell's configuration or the environment file your shell already loads:

GIT_COMMIT_PROVIDER=ollama
GIT_COMMIT_LOCAL_MODEL=your-installed-model

Plain jeeves then uses local generation; no per-command flag or cloud key is needed. See configuration for installation, fish syntax, all settings, prompt customization, and input limits.

Version 4 renames GIT_COMMIT_MODEL to GIT_COMMIT_OPENROUTER_MODEL. Jeeves requires Ruby 3.3 or newer and validates conventional commit subjects by default; use GIT_COMMIT_MESSAGE_FORMAT=plain for a custom format. Existing personal prompts are preserved. See the release notes.

Use

# Generate and commit the staged changes
jeeves

# Stage all changes, then generate and commit
jeeves --all

# Inspect the message without staging, committing, or pushing
jeeves --dry-run
jeeves --all --dry-run

# Generate from a supplied diff; only the message goes to stdout
git diff | jeeves

# Push only after a successful commit
jeeves --push

# Use a saved provider and its model for one command
jeeves --provider openrouter
jeeves --provider anthropic

# Override the local model for one command
jeeves --local --model another-installed-model
Option Purpose
-a, --all Include all working-tree changes
-d, --dry-run Print the message without changing the real index or HEAD
-p, --push Push after a successful commit
--provider openrouter|anthropic|ollama Override the provider
--local Use Ollama for this invocation
--model MODEL Override the selected provider's model
--version Print the version
-h, --help Print help

Git and generation failures stop the command with a nonzero exit status. Jeeves checks that staged changes and HEAD still match what it reviewed before committing. See architecture and Git behavior.

Local generation defaults to a 65,536-token context. Oversized diffs are automatically shortened, with a warning and omission notices for the model. Only the model input is shortened; Git commits the complete staged changes. See input limits.

Develop

bin/setup
bundle install
bundle exec rake test
bundle exec rake lint
bundle exec rake build
bin/check --full
bin/doctor

bin/check runs fast foundation checks. bin/check --documents-only checks Markdown. bin/check --full adds bin/check-application: Ruby tests, lint, and gem build. Application checks are not part of the two routine modes. Built gems go in gems/. Publishing with rake push is an explicit release action; it is never part of normal validation.

License

Jeeves uses the MIT license. The adopted project foundation retains its separate license notice.