Git Roast
Git Roast is a meme-forward VS Code extension and CLI companion that roasts staged changes before a commit goes through.
It reads the staged Git diff, sends it to a roast engine, opens a big blocking Webview, and lets you either go back to fix the code or force the commit with full emotional accountability.
Preview


Features
- SCM title command and status bar action:
Git Roast: Commit with Roast
- staged diff collection through the official VS Code Git extension API
- local demo roast engine for private/offline testing
- OpenAI Responses API and OpenAI-compatible Chat Completions support
- Claude/Anthropic Messages API support
- Gemini
generateContent API support
- Ollama
/api/generate support
- settings Webview tab for provider, model, base URL, persona, custom persona, tone, strict mode, and commit integration
- OpenAI, Claude, and Gemini key storage through VS Code SecretStorage
- Webview roast screen with persona-specific styling
- action buttons for fixing code or forcing the commit
- strict mode commit blocking when a review returns
reject
- unit tests for configuration, settings UI, diff collection, review flow, strict decisions, and Webview HTML
Git Roast intentionally does not monkey-patch VS Code's native Git commit button. The production-safe path is to add first-class SCM actions and use the official Git extension API for diff collection and commits. A native-button replacement would rely on unstable/proposed APIs or internal behavior.
The original terminal-plugin plan is also covered by the CLI companion:
git-roast hook reads git diff --cached and prints a terminal roast.
git-roast hook --strict exits with code 1 when the review rejects the commit.
git-roast install-hook --strict installs a local .git/hooks/pre-commit hook that runs Git Roast before every commit.
Install
From the VS Code Marketplace:
code --install-extension hanjo92.git-roast-reviewer
For a local VSIX build:
npm install
npm run package
Then install the generated .vsix from VS Code:
code --install-extension git-roast-reviewer-0.0.13.vsix
If code is not available in your shell, install it from VS Code with Shell Command: Install 'code' command in PATH.
Usage
- Open a Git repository in VS Code.
- Stage at least one file.
- Enter a commit message in Source Control.
- Run Git Roast: Commit with Roast from the Source Control title action, status bar, or Command Palette.
- Read the roast.
- Choose:
- 눈물을 머금고 코드 수정하기 to cancel the commit.
- 경고를 무시하고 굳이 커밋 강행하기 to commit anyway.
Terminal Hook
The CLI companion is designed for the initial terminal-plugin workflow.
Package-based hook path after npm distribution is published:
npm install --save-dev git-roast-reviewer
npx git-roast install-hook --strict
The generated hook runs npx --no-install git-roast hook --strict, so each repository that uses the hook must have git-roast available as a local dependency. This keeps team hooks reproducible and avoids relying on a global binary.
For local source development, build the CLI first:
npm run prepare:cli
Run a one-off roast against staged changes from source:
node dist/cli.js hook
Install a pre-commit hook from source:
node dist/cli.js install-hook --strict
Git Roast refuses to overwrite an existing non-Git-Roast pre-commit hook unless you pass --force.
The generated hook runs:
npx --no-install git-roast hook --strict
CLI environment variables:
GIT_ROAST_PROVIDER=demo
GIT_ROAST_PERSONA=gordon
GIT_ROAST_CUSTOM_PERSONA_NAME="Principal Pain Reviewer"
GIT_ROAST_CUSTOM_PERSONA_INSTRUCTIONS="Dry, concise architecture critique. Never be cruel."
GIT_ROAST_TONE=spicy
GIT_ROAST_STRICT=true
GIT_ROAST_OPENAI_API_KEY=...
GIT_ROAST_OPENAI_MODEL=gpt-4o-mini
GIT_ROAST_OPENAI_BASE_URL=
GIT_ROAST_ANTHROPIC_API_KEY=...
GIT_ROAST_ANTHROPIC_MODEL=claude-sonnet-4-5
GIT_ROAST_GEMINI_API_KEY=...
GIT_ROAST_GEMINI_MODEL=gemini-3.5-flash
GIT_ROAST_OLLAMA_URL=http://localhost:11434
GIT_ROAST_OLLAMA_MODEL=llama3.1
GIT_ROAST_REQUEST_TIMEOUT_MS=30000
Settings
Open Git Roast: Open Settings from the Command Palette to configure Git Roast in a dedicated settings tab. OpenAI, Claude, and Gemini keys entered there are stored in VS Code SecretStorage, not written to settings.json.
{
"gitRoast.provider": "demo",
"gitRoast.persona": "gordon",
"gitRoast.customPersonaName": "",
"gitRoast.customPersonaInstructions": "",
"gitRoast.tone": "spicy",
"gitRoast.commitIntegration": "scmButton",
"gitRoast.strict": false,
"gitRoast.allowWorkspaceProviderOverrides": false,
"gitRoast.openaiBaseUrl": "",
"gitRoast.maxDiffCharacters": 12000,
"gitRoast.requestTimeoutMs": 30000
}
Available personas:
gordon: fiery chef-style reviewer focused on messy, undercooked code
tsundere: reluctant-but-helpful reviewer with a small compliment and concrete hint
meme: short internet-style roast with a practical point under the joke
custom: user-defined reviewer using customPersonaName and customPersonaInstructions
Custom persona example:
{
"gitRoast.persona": "custom",
"gitRoast.customPersonaName": "Principal Pain Reviewer",
"gitRoast.customPersonaInstructions": "Dry, concise architecture critique. Focus on boundaries, naming, and test gaps. Never be cruel."
}
Available providers:
demo: no network call, useful for development and screenshots
openai: calls https://api.openai.com/v1/responses
anthropic: calls Claude through https://api.anthropic.com/v1/messages
gemini: calls Gemini through https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent
ollama: calls {gitRoast.ollamaUrl}/api/generate
Available tones:
Commit integration:
scmButton: show Git Roast in Source Control actions and the status bar
commandOnly: keep Git Roast available only from the Command Palette
OpenAI example:
{
"gitRoast.provider": "openai",
"gitRoast.openaiModel": "gpt-4o-mini",
"gitRoast.openaiBaseUrl": ""
}
Set gitRoast.openaiBaseUrl when you need an OpenAI-compatible gateway or proxy. Leave it blank for the official OpenAI endpoint; if the value already ends in /responses, Git Roast uses it as-is.
Claude example:
{
"gitRoast.provider": "anthropic",
"gitRoast.anthropicModel": "claude-sonnet-4-5"
}
Gemini example:
{
"gitRoast.provider": "gemini",
"gitRoast.geminiModel": "gemini-3.5-flash"
}
Set API keys from Git Roast: Open Settings. VS Code extension keys are stored in SecretStorage; plain-text API key settings are not used.
By default, the VS Code extension reads provider, model, OpenAI base URL, Ollama URL, diff limit, and timeout settings from User settings only, so a workspace cannot silently redirect staged diffs to another provider. To intentionally let a trusted workspace override those values, enable gitRoast.allowWorkspaceProviderOverrides in User settings first. API keys still stay in SecretStorage.
Trusted workspace override example:
{
"gitRoast.provider": "openai",
"gitRoast.openaiModel": "gpt-4o-mini",
"gitRoast.openaiBaseUrl": "https://proxy.example/openai"
}
Ollama example:
{
"gitRoast.provider": "ollama",
"gitRoast.ollamaUrl": "http://localhost:11434",
"gitRoast.ollamaModel": "llama3.1"
}
Privacy Note
When gitRoast.provider is openai, anthropic, gemini, or ollama, staged diff content is sent to that configured service. Use demo for local-only behavior, and avoid sending private code to a remote provider unless your project policy allows it.
For the CLI, secrets are read from environment variables. For the VS Code extension, keys entered in Git Roast: Open Settings are stored with VS Code SecretStorage.
Development
npm install
npm test
npm run compile
npm run check
Package:
npm run package
Roadmap
- deeper native SCM commit interception research
- richer typing animation and Webview motion
- VS Code integration tests for SCM action visibility
- provider destination approval for workspace overrides
- dependency audit gates in CI
- pre-commit hook companion for teams that need hard enforcement outside VS Code