Configuration
GG uses a flexible configuration system that adapts to both project-specific and global needs.
This allows teams to maintain consistent standards across projects while enabling customization when needed.
The configuration is managed through a YAML file named .gg.yaml
.
Configuration file location
GG implements a cascading configuration system that searches for settings in multiple locations, following a predictable precedence order.
1. Project-level configuration ./.gg.yaml
- Located in the current working directory
- Provides project-specific settings
- Ideal for repository-specific commit conventions or team standards
- Can be version-controlled with the project
2. Global configuration ~/.gg.yaml
- Located in the user's home directory
- Serves as a fallback when no project configuration exists
- Perfect for personal preferences and default settings
- Applies across all projects without their own configuration
Required fields
There are only two required fields in the config file: provider
and model
.
- Name
provider
- Description
The AI provider to use. Must be "openai", "anthropic" or "ollama".
Default: none
- Name
model
- Description
The model to use. For example, "gpt-4o" or "claude-3-5-sonnet-20240620".
Default: none
Optional fields
- Name
auto_commit
- Description
When enabled, generates and applies a commit message immediately without user interaction or confirmation.
Ideal for automated workflows, CI/CD pipelines, and AI agents where manual intervention is not desired or possible.
Default: false
- Name
number_of_suggestions
- Description
The number of suggestions to return.
Default: 3
- Name
git
- Description
Configuration for the git context.
- Name
prompt_templates
- Description
Configuration for the prompt templates.
Git context
- Name
excluded_files
- Description
The files to exclude from the git context. Default: ["package-lock.json", "yarn.lock", "go.sum", "Pipfile.lock", "Gemfile.lock", "pom.xml", "build.gradle", "composer.lock", "Cargo.lock", "Package.resolved", "stack.yaml.lock"]
- Name
excluded_directories
- Description
The directories to exclude from the git context. Default: ["node_modules", "vendor", "dist", "build"]
- Name
excluded_file_extensions
- Description
The file extensions to exclude from the git context. Default: ["png", "jpg", "jpeg", "gif", "ico", "svg", "pdf", "zip", "tar", "gz", "rar", "mp3", "wav", "ogg", "m4a", "mp4", "avi", "mov", "wmv", "exe", "dll", "so", "dylib", "bin", "jar", "war", "ear", "class", "pyc", "o", "a", "min.js", "min.css", "map", "pb.go", "sqlite", "db"]
Prompt templates
- Name
system
- Description
The system prompt.
system: | You are a commit message assistant. Generate only the commit message with no additional text or explanations.
- Name
context
- Description
The context prompt. This is the prompt that will be used to generate the commit message.
context: | Files changed: {status_short} Detailed changes: {diff_staged} Requirements for the commit message: - Commit message MUST be a single line - Commit message MUST be under 72 characters - Commit message MUST be in present tense - Commit message MUST NOT have a trailing period - Commit message MUST complete: "If applied, this commit will ..." - Commit message MUST be prefixed with a TYPE and REQUIRE terminal colon and space. Possible types: - feat (new feature for the user, not a new feature for build script) - fix (bug fix for the user, not a fix to a build script) - docs (changes to the documentation) - style (formatting, missing semi colons, etc; no production code change) - refactor (refactoring production code, eg. renaming a variable) - test (adding missing tests, refactoring tests; no production code change) - chore (updating grunt tasks etc; no production code change) Here are some examples of correct commit messages: - feat: add Polish language - feat: allow provided config object to extend other configs - feat: send an email to the customer when a product is shipped - docs: correct spelling of CHANGELOG - chore: drop support for Node 6
All configuration options with defaults values
All configuration options with defaults values
provider:
model:
auto_commit: false
number_of_suggestions: 3
providers:
openai:
endpoint: https://api.openai.com/v1/chat/completions
anthropic:
endpoint: https://api.anthropic.com/v1/messages
ollama:
endpoint: http://localhost:11434/api/generate
git:
excluded_files:
- "package-lock.json"
- "yarn.lock"
- "go.sum"
- "Pipfile.lock"
- "Gemfile.lock"
- "pom.xml"
- "build.gradle"
- "composer.lock"
- "Cargo.lock"
- "Package.resolved"
- "stack.yaml.lock"
excluded_directories:
- "node_modules"
- "vendor"
- "dist"
- "build"
excluded_file_extensions:
- "png"
- "jpg"
- "jpeg"
- "gif"
- "ico"
- "svg"
- "pdf"
- "zip"
- "tar"
- "gz"
- "rar"
- "mp3"
- "wav"
- "ogg"
- "m4a"
- "mp4"
- "avi"
- "mov"
- "wmv"
- "exe"
- "dll"
- "so"
- "dylib"
- "bin"
- "jar"
- "war"
- "ear"
- "class"
- "pyc"
- "o"
- "a"
- "min.js"
- "min.css"
- "map"
- "pb.go"
- "sqlite"
- "db"
prompt_templates:
system: |
You are a commit message assistant.
Generate only the commit message with no additional text or explanations.
context: |
Files changed:
{status_short}
Detailed changes:
{diff_staged}
Requirements for the commit message:
- Commit message MUST be a single line
- Commit message MUST be under 72 characters
- Commit message MUST be in present tense
- Commit message MUST NOT have a trailing period
- Commit message MUST complete: "If applied, this commit will ..."
- Commit message MUST be prefixed with a TYPE and REQUIRE terminal colon and space.
Possible types:
- feat (new feature for the user, not a new feature for build script)
- fix (bug fix for the user, not a fix to a build script)
- docs (changes to the documentation)
- style (formatting, missing semi colons, etc; no production code change)
- refactor (refactoring production code, eg. renaming a variable)
- test (adding missing tests, refactoring tests; no production code change)
- chore (updating grunt tasks etc; no production code change)
Here are some examples of correct commit messages:
- feat: add Polish language
- feat: allow provided config object to extend other configs
- feat: send an email to the customer when a product is shipped
- docs: correct spelling of CHANGELOG
- chore: drop support for Node 6