Automated Git Commits with AI-generated Commit Messages
- Automatic Commits: Monitors file changes and performs commits automatically based on configurable triggers
- AI-generated Commit Messages: Uses OpenAI (default
gpt-4.1-mini), Anthropic Claude, or Ollama to generate meaningful commit messages - Commit Guardian: Intelligent protection logic with cooldown, quiet hours, branch protection, and keyword filters
- Visual Status Display: Progress bar and detailed feedback during the commit process
- Configurable Triggers: Control when commits should be executed with multiple trigger options
- Dashboard: Clear presentation of activities and settings with modern UI
- VSCode Integration: Fully integrated into the IDE with sidebar, status bar, and command palette
- Flexible Commit Styles: Support for Conventional Commits, Gitmoji, Angular, Atom, and Simple styles
- Multi-language Support: Generate commit messages in German or English
- Install the extension via the VSCode Marketplace
- Search for "Comitto" or install directly from marketplace.visualstudio.com
- Configure your preferred AI provider (see AI Providers)
- Activate automatic commits when ready
Comitto supports three AI providers for generating commit messages:
- API Key: Required (get from platform.openai.com)
- Models:
gpt-4.1-mini(recommended, default)gpt-4gpt-3.5-turbo- Other OpenAI models
- Configuration: Set via
comitto.openai.apiKeyandcomitto.openai.model
- API Key: Required (get from console.anthropic.com)
- Models:
claude-3-haiku-20240307(fast, cost-effective, default)claude-3-sonnet-20240229(balanced)claude-3-opus-20240229(most capable)
- Configuration: Set via
comitto.anthropic.apiKeyandcomitto.anthropic.model
- API Key: Not required (local installation)
- Endpoint: Default
http://localhost:11434/api/generate - Models: Any locally installed Ollama model (default:
granite3.3:2b) - Configuration: Set via
comitto.ollama.endpointandcomitto.ollama.model - Setup: Install Ollama from ollama.ai and pull your desired model
Comitto uses a sophisticated decision system to determine when to create automatic commits. The decision is based on multiple factors:
Commits are triggered when any of the following conditions are met:
- Setting:
comitto.triggerRules.onSave - Description: Triggers a commit evaluation when files are saved
- Use Case: Ideal for frequent small commits during active development
- Default:
true
- Setting:
comitto.triggerRules.onInterval - Description: Automatically evaluates commits at regular intervals
- Interval Setting:
comitto.triggerRules.intervalMinutes(default: 15 minutes) - Use Case: Useful for background work or when you forget to save
- Default:
false
- Setting:
comitto.triggerRules.onBranchSwitch - Description: Commits pending changes before switching branches
- Use Case: Ensures clean branch switches without losing work
- Default:
false
Even when a trigger fires, commits only occur if certain thresholds are met:
- Setting:
comitto.triggerRules.fileCountThreshold - Description: Minimum number of changed files required for auto-commit
- Default:
3 - Example: With threshold of 3, commits only occur when 3 or more files have changes
- Setting:
comitto.triggerRules.minChangeCount - Description: Minimum number of line changes required
- Default:
10 - Example: Prevents commits for trivial single-line changes
- Setting:
comitto.triggerRules.timeThresholdMinutes - Description: Minimum time (in minutes) that must pass since last auto-commit
- Default:
30 - Example: Prevents too frequent commits even if other conditions are met
- Setting:
comitto.triggerRules.filePatterns - Description: Glob patterns to include/exclude files from triggering commits
- Default:
["**/*"](all files) - Examples:
["src/**/*.ts"]- Only TypeScript files in src folder["**/*.{js,ts}"]- All JavaScript and TypeScript files["!**/test/**"]- Exclude test directories
The Guardian is an intelligent protection system that prevents inappropriate automatic commits:
- Setting:
comitto.guardian.smartCommitProtection - Description: Master switch for all guardian features
- Default:
true - Impact: When disabled, all guardian checks are bypassed (except for manual commits)
- Setting:
comitto.guardian.coolDownMinutes - Description: Minimum time between automatic commits
- Default:
5minutes - Use Case: Prevents commit spam during rapid development
- Behavior: Shows remaining cooldown time in notification
- Setting:
comitto.guardian.blockOnDirtyWorkspace - Description: Blocks auto-commits when files have unsaved changes
- Default:
true - Use Case: Ensures all changes are saved before committing
- Setting:
comitto.guardian.skipWhenDebugging - Description: Pauses auto-commits during active debug sessions
- Default:
true - Use Case: Prevents commits while debugging, allowing focused work
- Setting:
comitto.guardian.confirmOnLargeChanges - Description: Requires manual confirmation for large diffs
- Threshold:
comitto.guardian.maxDiffSizeKb(default: 512 KB) - Default:
true - Behavior: Shows dialog with diff size and confirmation buttons
- Setting:
comitto.guardian.maxFilesWithoutPrompt - Description: Maximum files that can be committed without confirmation
- Default:
8 - Behavior: Shows confirmation dialog when exceeded
- Setting:
comitto.guardian.protectedBranches - Description: Branches that require confirmation before auto-commit
- Default:
["main", "master", "release/*"] - Pattern Support: Supports wildcards (e.g.,
release/*,hotfix/*) - Behavior: Shows warning dialog before committing to protected branches
- Setting:
comitto.guardian.quietHours - Description: Time windows when auto-commits are suspended
- Format:
["HH:MM-HH:MM"](24-hour format) - Default:
[](no quiet hours) - Examples:
["22:00-08:00"]- No commits between 10 PM and 8 AM["12:00-13:00", "18:00-19:00"]- Lunch and dinner breaks
- Setting:
comitto.guardian.keywordsRequiringConfirmation - Description: Keywords in diffs that trigger confirmation dialogs
- Default:
["WIP", "DO-NOT-COMMIT"] - Use Case: Prevents accidental commits of work-in-progress or debug code
- Detection: Case-insensitive search in diff and status output
Comitto supports multiple commit message styles:
- Setting Value:
"conventional" - Format:
type: description - Types:
feat,fix,docs,style,refactor,test,chore - Example:
feat: add user authentication system
- Setting Value:
"gitmoji" - Format:
emoji description - Emojis: 🎉 (initial), 🐛 (bugfix), 📚 (docs), 💄 (UI), etc.
- Example:
🎉 add user authentication system
- Setting Value:
"angular" - Format:
type(scope): description - Example:
feat(auth): add user authentication system
- Setting Value:
"atom" - Format:
:emoji: description - Example:
:sparkles: add user authentication system
- Setting Value:
"simple" - Format: Simple descriptive messages
- Example:
Add user authentication system
Configuration: Set via comitto.gitSettings.commitMessageStyle
- Setting:
comitto.gitSettings.commitMessageLanguage - Options:
"en"(English) or"de"(German) - Default:
"de" - Impact: Affects AI-generated commit message language
The status bar item shows the current Comitto status:
- Idle: Green, shows "Überwacht" or "Watching"
- In Progress: Blue with progress percentage
- Error: Red with error indicator
- Click: Opens quick actions menu
Access the Comitto sidebar from the Activity Bar:
- Status Card: Current state and quick toggle
- Quick Actions: Manual commit, refresh, dashboard
- Settings Overview: AI provider, triggers, guardian status
- Debug Logs: Detailed execution logs (when debug enabled)
Open with Comitto: Show Dashboard command:
- Activity Monitor: Recent commits and statistics
- Configuration: Visual editors for all settings
- Trigger Configuration: Toggle and configure triggers
- Guardian Configuration: Manage protection settings
- AI Provider Setup: Configure API keys and models
Streamlined interface for quick configuration:
- Open with
Comitto: Show Simple User Interface - Cards for essential settings
- Guardian quick configuration
- Ideal for first-time setup
All commands available via Command Palette (Ctrl+Shift+P or Cmd+Shift+P):
Comitto: Enable Automatic Commits- Start auto-commit monitoringComitto: Disable Automatic Commits- Stop auto-commit monitoringComitto: Toggle Automatic Commits- Quick enable/disableComitto: Perform Manual AI Commit- Generate and commit immediatelyComitto: Show Dashboard- Open configuration dashboardComitto: Show Simple User Interface- Open streamlined UIComitto: Configure AI Provider- Set up OpenAI, Anthropic, or OllamaComitto: Configure Triggers- Manage trigger rulesComitto: Configure Guardian- Manage protection settingsComitto: Select Commit Style- Choose commit message formatComitto: Select Commit Language- Choose message languageComitto: Toggle Auto Push- Enable/disable automatic git pushComitto: Edit Branch- Set target branch for commitsComitto: Select Stage Mode- Choose staging strategyComitto: Refresh Settings- Reload configuration
| Setting | Type | Default | Description |
|---|---|---|---|
comitto.autoCommitEnabled |
boolean | false |
Enable/disable automatic commits |
comitto.aiProvider |
string | "openai" |
AI provider: openai, anthropic, or ollama |
| Setting | Type | Default | Description |
|---|---|---|---|
comitto.triggerRules.onSave |
boolean | true |
Trigger on file save |
comitto.triggerRules.onInterval |
boolean | false |
Trigger at intervals |
comitto.triggerRules.onBranchSwitch |
boolean | false |
Trigger on branch switch |
comitto.triggerRules.intervalMinutes |
number | 15 |
Interval duration |
comitto.triggerRules.fileCountThreshold |
number | 3 |
Minimum files for commit |
comitto.triggerRules.minChangeCount |
number | 10 |
Minimum line changes |
comitto.triggerRules.timeThresholdMinutes |
number | 30 |
Minimum time between commits |
comitto.triggerRules.filePatterns |
array | ["**/*"] |
File patterns to monitor |
| Setting | Type | Default | Description |
|---|---|---|---|
comitto.gitSettings.autoPush |
boolean | false |
Auto-push after commit |
comitto.gitSettings.pullBeforePush |
boolean | true |
Pull before pushing |
comitto.gitSettings.stageMode |
string | "all" |
Staging mode: all, modified, pattern |
comitto.gitSettings.branch |
string | "" |
Target branch (empty = current) |
comitto.gitSettings.useGitignore |
boolean | true |
Respect .gitignore rules |
comitto.gitSettings.commitMessageStyle |
string | "gitmoji" |
Commit style format |
comitto.gitSettings.commitMessageLanguage |
string | "de" |
Message language |
comitto.gitSettings.maxCommitAttempts |
number | 3 |
Retry attempts on failure |
| Setting | Type | Default | Description |
|---|---|---|---|
comitto.guardian.smartCommitProtection |
boolean | true |
Enable guardian protection |
comitto.guardian.coolDownMinutes |
number | 5 |
Cooldown between commits |
comitto.guardian.maxFilesWithoutPrompt |
number | 8 |
Max files without confirmation |
comitto.guardian.confirmOnLargeChanges |
boolean | true |
Confirm large diffs |
comitto.guardian.maxDiffSizeKb |
number | 512 |
Large diff threshold (KB) |
comitto.guardian.blockOnDirtyWorkspace |
boolean | true |
Block with unsaved files |
comitto.guardian.skipWhenDebugging |
boolean | true |
Pause during debug |
comitto.guardian.quietHours |
array | [] |
Time windows to pause |
comitto.guardian.protectedBranches |
array | ["main", "master", "release/*"] |
Branches requiring confirmation |
comitto.guardian.keywordsRequiringConfirmation |
array | ["WIP", "DO-NOT-COMMIT"] |
Keywords triggering confirmation |
| Setting | Type | Default | Description |
|---|---|---|---|
comitto.openai.apiKey |
string | "" |
OpenAI API key |
comitto.openai.model |
string | "gpt-4.1-mini" |
Model to use |
| Setting | Type | Default | Description |
|---|---|---|---|
comitto.anthropic.apiKey |
string | "" |
Anthropic API key |
comitto.anthropic.model |
string | "claude-3-haiku-20240307" |
Model to use |
| Setting | Type | Default | Description |
|---|---|---|---|
comitto.ollama.endpoint |
string | "http://localhost:11434/api/generate" |
Ollama API endpoint |
comitto.ollama.model |
string | "granite3.3:2b" |
Model name |
| Setting | Type | Default | Description |
|---|---|---|---|
comitto.uiSettings.simpleMode |
boolean | false |
Use simplified UI |
comitto.uiSettings.confirmBeforeCommit |
boolean | true |
Confirm before manual commits |
comitto.uiSettings.showNotifications |
boolean | true |
Show notifications |
comitto.uiSettings.theme |
string | "auto" |
UI theme: auto, light, dark |
| Setting | Type | Default | Description |
|---|---|---|---|
comitto.notifications.onCommit |
boolean | true |
Notify on successful commit |
comitto.notifications.onPush |
boolean | true |
Notify on successful push |
comitto.notifications.onError |
boolean | true |
Notify on errors |
comitto.notifications.onTriggerFired |
boolean | false |
Notify when trigger fires |
| Setting | Type | Default | Description |
|---|---|---|---|
comitto.debug.enabled |
boolean | false |
Enable debug logging |
comitto.debug.extendedLogging |
boolean | false |
Verbose logging |
comitto.debug.commitDiagnostics |
boolean | false |
Log commit diagnostics |
- Extended Git integration with new commands
- Auto-push configuration
- Branch editing support
- Commit style and language selection
- Updated UI provider with improved error handling
- Centralized settings management with Guardian
- Improved status bar with visual progress indicator
- Enhanced error handling for all AI providers
- Visual feedback during commit generation
- Better model selection for OpenAI with icons and categories
- Commit Guardian with quick configuration
- Overhauled settings manager with validation
- Smooth migration of old Ollama models
- Real-time configuration change reactions
- Modernized dashboard UI
- Guardian cards in simple interface
- Multi-provider AI support (OpenAI, Anthropic, Ollama)
- Configurable triggers (save, interval, branch switch)
- Advanced threshold system
- Dashboard and Simple UI
- Comprehensive notification system
For questions, issues, or feature requests:
- GitHub Issues: github.com/tilltmk/comitto/issues
- Documentation: See this README and in-app tooltips
- Common Errors: Check
COMMON_ERRORS.mdin the repository
MIT License - See LICENSE.txt for details
Made with ❤️ by tilltmk

