Post-Hoc Recovery Evaluation: Measuring Agent Recovery After Unsafe Tool Execution
A research project that makes recovery a first-class evaluation object: injecting controlled, sandboxed unsafe-execution events into agent benchmarks and measuring...
Build a CLI that analyzes your Git diff and suggests clear Conventional Commits-style messages, with human review always in control.

A command-line tool that reads the diff of your staged changes and drafts a concise, conventional commit message for you. The tool assists developers — it classifies the change, proposes a subject line, and optionally a short body — but it never commits on its own and never claims perfect understanding of your code. You review, edit, and approve every message before it lands in your history.
Commit messages are a form of communication with your future self and your teammates, yet most are written in five seconds and say almost nothing. “Update file” tells you nothing about intent. “Fix bug” doesn’t say which bug or why the change is safe. When someone runs git blame six months later, the message is the only record of why a line changed.
Writing good messages consistently is a low-value chore: the interesting work is in the diff, and the summary feels like paperwork. Teams respond with linting rules that reject bad messages, which only adds friction. What’s missing is a tool that does the summarization work and leaves the developer in control of the result.
The tool works in four stages: read, classify, draft, and review.
The CLI runs git diff --staged (or an equivalent for your VCS) and captures:
Before generating anything, the tool classifies the change into conventional types based on the files and diff content — feat for new behavior, fix for corrections, refactor, docs, test, chore, and so on. Classification is a hint, not a verdict: the user can always override it.
A language model turns the diff summary into a candidate message:
The prompt is explicit that the message must describe what the diff actually does, never invent features, and flag uncertainty rather than guess.
The tool prints the candidate message and waits. The user can accept it, edit it, regenerate, or discard. Only an explicit accept stages the commit. The model never commits, pushes, or rewrites history on its own.
$ git add src/parser.py tests/test_parser.py $ gcm generate ✎ feat(parser): support quoted identifiers in config values The config loader previously split on whitespace, which broke values containing spaces. This adds quote-aware tokenization and tests for single- and double-quoted cases.
[a]ccept [e]dit [r]egenerate [d]iscard: a ✓ Commit created: 1a2b3c4
type(scope): subject formatting when the team wants it--local mode never sends your code anywheregit diff --staged (fallback: full diff when nothing is staged)..gcmrc config file for defaults (type mapping, body length, model choice).git diff --staged reading with per-file summaries.git commit executed only after explicit accept.Multi-commit histories, IDE extensions, pre-commit hooks, and local-model support are natural second-phase additions.
pip install → gcm generate).git commit. It never needs network access in local mode, and it never modifies files.type(scope) usage.Commit-message linters tell you your message is bad. Commit-message templates give you a shape to fill. This tool is neither: it drafts the message from the actual diff and keeps a human in the loop. That makes it the commit-time counterpart to other AI developer tooling — it sits beside an AI-powered documentation generator for REST APIs and the AI code review assistant for Python teams as part of the same assistant family, but it solves a different job: summarizing your changes, not reviewing or documenting someone else’s code.
It is also deliberately a CLI with a local-model option, which is what makes it usable on private codebases where cloud tools are a non-starter.
| Tool type | Approach | Limitation |
|———–|———-|————|
| Commit message linters | Enforce format rules on messages you write | Don’t help you write the message |
| Commit templates / hooks | Provide a skeleton to fill in | Still manual; no summarization |
| Cloud AI commit tools | Summarize diffs via API | Send code off-machine; opaque prompts |
| Editor autocomplete | Suggest while you type | No diff awareness; message still hand-written |
This Idea’s differentiators: diff-grounded drafting, Conventional Commits support, a local-model mode for private code, and a review-before-commit loop.
git diff --staged)Browse more Artificial Intelligence ideas · Innovation Ideas
A research project that makes recovery a first-class evaluation object: injecting controlled, sandboxed unsafe-execution events into agent benchmarks and measuring...
A research project that answers the question every failed agent run raises: which step broke it? Building an attributed corpus...
A research project that audits the measurement instruments themselves: applying the ABC validity-checklist methodology to agent-security benchmarks to find task-validity...
Ready to level up? These ideas offer more complexity:
Published on September 7, 2026
A team of developers, researchers, and innovators who review and publish practical ideas for builders and creators.
Published on September 7, 2026
A team of developers, researchers, and innovators who review and publish practical ideas for builders and creators.