Your friendly dino that writes commit messages so you don't have to.
Pick a tag, jot a quick note, hit Generate. The dino reads your changes and spits out a clean commit message ready to drop into Source Control.
First time setup
- Grab a free Gemini API key from https://aistudio.google.com/apikey
- Open the Command Palette with
Ctrl+Shift+P(orCmd+Shift+Pon Mac). - Run DinoCommitz: Set Gemini API Key.
- Paste your key. Done.
Your key is stashed safely in VSCode's secret storage. The dino won't leak it.
How to use it
- Stage your changes with git (or the Source Control panel).
- Click the dino icon in the activity bar on the left.
- Pick a tag like
[FIX]or[IMP]. - Type a quick hint about what you changed.
- Hit Generate. Wait a blink.
- Hit Insert into SCM. Your message lands in the Source Control box.
- Commit like normal. Roar.
Commands
Open the Command Palette and type "DinoCommitz" to find these:
| Command | Shortcut | What it does |
|---|---|---|
| DinoCommitz: Open Commit Builder | Ctrl+Alt+P / Cmd+Alt+P |
Opens the main dino panel. |
| DinoCommitz: Pick Commit Tag | Ctrl+Alt+T / Cmd+Alt+T |
Quick tag picker. |
| DinoCommitz: Generate & Insert into SCM | Opens the panel ready to generate. | |
| DinoCommitz: Set Gemini API Key | Save your key. | |
| DinoCommitz: Clear Gemini API Key | Delete your saved key. | |
| DinoCommitz: Clear Form | Wipe the current draft. |
Settings
Open VSCode Settings and search "DinoCommitz" to tweak these:
| Setting | Default | What it does |
|---|---|---|
dinoCommits.model |
gemini-2.5-flash |
Pick your flavor of Gemini. |
dinoCommits.tagPreset |
odoo |
Odoo, Conventional, or your own. |
dinoCommits.customTags |
empty | Your own tag list when preset is custom. |
dinoCommits.titleFormat |
{tag} [{module}: ]{title} |
How the final title looks. |
dinoCommits.showModuleField |
on | Show or hide the module input. |
dinoCommits.maxTitleLength |
80 |
Keeps titles short and sweet. |
dinoCommits.guidelineMode |
default |
Bundled Odoo rules or your own. |
dinoCommits.customGuideline |
empty | Paste your own rules. |
dinoCommits.customInstructions |
empty | Extra hints for the dino. |
dinoCommits.insertChapterFooter |
off | Adds a Chapter #n line. |
dinoCommits.appendSignOff |
off | Adds Signed-off-by from your git config. |
dinoCommits.includeStagedDiffInPrompt |
off | Feed your actual diff to the dino every time. |
dinoCommits.detectOdooManifest |
on | Auto-fill the Odoo module name. |
dinoCommits.detectTicketRef |
on | Pull JIRA-123 or #456 from your branch name. |
Tag presets
Three packs come baked in:
- Odoo:
[FIX],[IMP],[ADD],[REF], and friends. - Conventional:
feat,fix,chore,docs, and friends. - Custom: bring your own.
Making your own tags
Drop this into your settings.json:
"dinoCommits.tagPreset": "custom",
"dinoCommits.customTags": [
{ "tag": "[BUG]", "label": "BUG", "description": "Bug fix" },
{ "tag": "[FEAT]", "label": "FEAT", "description": "New feature" },
{ "tag": "[CHORE]", "label": "CHORE", "description": "Misc cleanup" }
],
"dinoCommits.titleFormat": "{tag} {title}",
"dinoCommits.showModuleField": false
Title format
The template controls what your final commit title looks like. Anything inside [...] disappears when the value is empty, so you never end up with weird leftovers like feat(): my title.
| Preset | Template | Example |
|---|---|---|
| Odoo | {tag} [{module}: ]{title} |
[FIX] website_sale: stop checkout crash on empty cart |
| Conventional | {tag}[({module})]: {title} |
feat(api): add reply-to header for thread tracking |
| Custom | up to you | up to you |
Tips
- Stage your changes first. The dino reads them for better context.
- Keep your hint short. One line is plenty.
- Don't love the result? Tweak the hint and hit Generate again.
- Turn on Include Staged Diff In Prompt if you want sharper messages.
License
MIT. Happy hunting.