Changelog
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.5.0] - 2026-07-28
Added
--all/-astaging of tracked modifications and deletions before generation- Exact machine-readable output with
--stdout, including non-rewritingalter - Sequential multi-candidate generation and selection with
--generate N/-g N - Invocation-only prompt guidance with
--prompt TEXT/-p TEXT - Repository-local
prepare-commit-msgmanagement throughcgen hook - Authenticated live model discovery and searchable selection through
cgen modeland the configuration editor
[1.4.1] - 2026-07-23
Changed
- Updated all Rust dependencies, including the
ureq3,toml1.1,sha20.11,inquire0.9,colored3, andshlex2 major releases - Raised the MSRV to Rust 1.85, the minimum required by the updated dependency graph
- Updated GitHub Actions to their current supported major releases
Fixed
- Try fallback presets when a provider rejects a request as too large (
HTTP 413) - Include the path and line number for sensitive-content findings, and ignore the documented
your-key-hereAPI-key placeholder
[1.4.0] - 2026-07-23
Added
- Sparse project
.envoverrides with an interactive “Inherit global value” action - Configurable diff byte/sensitive-path guards and explicit
--allow-large-diff/--allow-sensitiveoverrides - Linux ARM64 and x86_64 musl release artifacts with SHA-256 manifests
- Rust 1.74 MSRV declaration and CI gate
- One-shot self-correction: when the LLM returns an invalid commit message, the validator error and rejected attempt are fed back to the model for a corrective retry before failing
ACR_WARN_LLM_FILES_ENABLED/ACR_WARN_LLM_FILES_THRESHOLD: warn on the count of files actually sent to the LLM (the token-relevant subset), merged with the staged-files warning into a single confirmation that reports the payload size- Staged-file listing marks files excluded from the LLM payload with
(not sent to LLM) ACR_MAX_OUTPUT_TOKENSto configure the LLM completion token cap (default 512, previously hard-coded)
Changed
- Local
.envupdates preserve unrelated variables, comments, and absent inherited settings - Configuration parsing rejects invalid booleans, integers, push modes, gitmoji formats, templates, locales, headers, and globs
- Provider fallbacks share one total deadline and run only for classified transient failures
- Preset/config/cache writes are owner-only, lock-protected, and atomically replaced
- History cache entries use stable identifiers, deduplicate rewrites, and retain the latest 200 commits
- Self-update targets the current installation, pins the release version, and verifies checksums before replacement
- Release CI builds with
--locked, validates the requested tag, publishes checksums, and gates crates.io publication behind the release - CI now enforces formatting, strict Clippy, cross-platform tests, MSRV, dependency audit, installer syntax, and aligned coverage
- Locked dependencies use patched TLS, error-handling, randomness, and test-serialization releases; terminal UI features avoid unnecessary unmaintained/yanked transitive paths while preserving Rust 1.74 support
- Rewrote the base LLM prompts around current prompt-engineering research: enumerated commit types, imperative-mood and header-length rules, anti-fabrication constraints, mode-matched few-shot examples, and explicit one-liner precedence
- Staged diffs are sent wrapped in
<diff>tags as data to describe, with the task restated after the diff - A blank
ACR_LLM_SYSTEM_PROMPTnow selects the built-in default prompt, and configs still storing a retired shipped default are upgraded to the current default automatically - The config view shows
(built-in default)for an uncustomized system prompt instead of the stored text - Anthropic requests pin
temperatureto 0, matching the other providers - Conventional Commit shape is enforced on LLM output only; templated and manually edited messages receive structural validation (empty/NUL)
- Staged-file warnings are evaluated after diff filtering, so hard safety gates run before any confirmation prompt
cgen promptandcgen undono longer perform the startup update check
Fixed
- Partial global TOML files no longer turn omitted default-true booleans off
- Unicode API keys/prompts no longer panic during masking or truncation
- Interpolation no longer mutates process environment or silently removes missing variables
- Confirmation cancellation can no longer select an affirmative default
- LM Studio receives the complete system instruction
- Empty, malformed, fully excluded, oversized, or sensitive diffs are stopped before provider calls
- Generated, regenerated, templated, and manually edited commit messages are validated before Git receives them
- Non-HEAD/root rewrites record the rewritten commit identity rather than HEAD
- Root-commit undo keeps changes staged
- Pushed rewrites use an explicit force-with-lease path and created tags are pushed explicitly
- Selected-repository history uses that repository for
git show - Concurrent preset/cache writes no longer silently overwrite one another
- The updater uses the published
auto-commit-rscrate rather than a nonexistent package - Non-English locales no longer instruct the LLM to translate Conventional Commit types, which produced headers that failed message validation
- Fallback presets that differ from the active configuration only by API headers are attempted instead of silently skipped
Removed
- High-MSRV
editdependency; editor launching is handled internally - Unused
enabledflag inside the presets file's[fallback]section (existing files containing it still parse)
[1.3.2] - 2026-06-25
Added
--set KEY=VALUEflag to override any setting for a single run (ephemeral, never persisted);auto_updateexcepted--diff-include GLOB/--diff-exclude GLOBflags to refine which files are sent to the LLM for a single run (allow-over-deny precedence)
[1.3.1] - 2026-04-09
Fixed
- Fixed oLLaMa streaming content issue
[1.3.0] - 2026-04-06
Added
- Added oLLaMa as a built-in provider
[1.2.2] - 2026-03-05
Fixed
- Fixed prompt issue where smaller LLMs weren't grasping single-line commits
[1.2.1] - 2026-03-02
Fixed
- Gitmoji spec no longer overrides the Conventional Commit spec
- When editing a LLM-generated message you start editing from the existing message
[1.2.0] - 2026-03-02
Added
ACR_DIFF_EXCLUDE_GLOBSconfiguration: exclude files from LLM analysis by glob pattern while still committing them- Default exclusion patterns for common binary/generated files:
*.json,*.xml,*.csv,*.pdf,*.lock, images, fonts, minified assets - Seven new built-in LLM providers: Grok, DeepSeek, OpenRouter, Mistral, Together, Fireworks, Perplexity
- LLM presets: save, load, rename, duplicate, delete, export/import reusable provider configurations via
cgen config - Fallback order: automatic retry with alternate LLM presets when the primary provider returns an HTTP error
ACR_FALLBACK_ENABLEDconfiguration flag (default: enabled) to toggle LLM fallback behavior- Per-repository commit cache: track which commits were AI-generated
cgen historysubcommand to browse AI-generated commits per repository (withgit showintegration)ACR_TRACK_GENERATED_COMMITSconfiguration flag (default: enabled) to toggle commit tracking- Preset management menu in
cgen config(save current as preset, load preset, manage presets, configure fallback order) - Preset change tracking: warns when loaded preset fields are modified and offers to update on save
- Export/import presets as TOML (with optional API key redaction)
cgen presetstandalone subcommand to manage LLM presets directlycgen fallbackstandalone subcommand to configure fallback order directly- Config view: "Show descriptions [?]" toggle to display help text for each setting
- Config view: "Search settings [/]" to find settings by name (auto-expands matching groups)
- Config view: improved color variance with bright white for groups, bright cyan for subgroups
Changed
ACR_AUTO_UPDATEis now a global-only setting and will not be written to local.envfilescall_llmnow usescall_llm_with_fallbackinternally, enabling automatic provider retrygenerate_final_messagereports which fallback preset was used (if any)- Config menu now includes preset and fallback management entries
- All (y/N) confirmation prompts replaced with interactive Select menus showing "Yes"/"No" options
- Config view: selected item header now strips tree-drawing characters for cleaner display
- Preset management: restructured menu - select a preset first via "Manage existing preset...", then choose action (Rename/Duplicate/Delete)
Fixed
- Cursor no longer resets to top of view when collapsing headers on the
cgen configview
[1.1.0] - 2026-02-24
Added
cgen updatesubcommand to manually update to the latest versionACR_AUTO_UPDATEconfiguration flag (defaults to unset; prompts on first run)- Automatic version checking against GitHub releases on every run
- Auto-update support when
ACR_AUTO_UPDATE=1(updates silently before proceeding) - Update warning displayed at the end of output when a newer version is available and auto-update is off
cgen promptsubcommand to print the LLM system prompt without running anythingcgen confignow auto-detects git repo: prompts for global vs local scope inside a repo, opens global directly outside one
Changed
- Staged files display now uses tree-style characters (
├──,└──) instead of bullet points - Boolean config fields display "enabled"/"disabled" instead of "1 (yes)"/"0 (no)" in the interactive config UI
- Interactive config groups settings into collapsible tree sections (Basic expanded, Advanced collapsed with subgroups)
cgen config --globalflag removed; scope selection is now interactive when inside a git repo
[1.0.0] - 2026-02-23
- Initial release of the tool