Retrying a non-idempotent POST without an idempotency key breaks your retry wrapper's single responsibility. A builder would also tame this client config.
Think of the response body like a garden hose left running — close it with defer right after you're done, or it just keeps flowing after you've walked away.
ReviewForge reviews GitHub pull requests with OpenAI, Anthropic, or Gemini, posting line-level comments tagged critical, warning, or suggestion, then closes with a verdict and a confidence score. Run it as a GitHub Action on every PR, or from your terminal with the standalone CLI. Add a persona — Bob, Robert, Maya, Eli, or your own — for reviews with real personality, in any language you choose.
Default review rules keep the AI focused on what actually matters in a PR — not variable names.
OpenAI, Anthropic, or Gemini — pick the provider, model, and temperature per repo, or per call.
Comments post directly on the diff line, tagged critical, warning, or suggestion — not buried in one long summary.
concise (default) flags only bugs, security, performance, and breaking changes. Switch to thorough, or none to hand the AI full judgment.
Every review closes with approve, request changes, or comment — plus a confidence score, so you know how much to trust it.
Built-in personas change the tone, not what gets flagged. Bring your own with --custom-persona.
| Persona | Name | Style |
|---|---|---|
bob | Bob Lil Swagger | Friendly, encouraging. Celebrates good code, suggests improvements warmly, teaches while reviewing. |
robert | Robert Dover Clow | Nerdy tech expert. Names every pattern spotted, references CS concepts and SOLID principles. |
maya | Maya Simplifica | Everyday analogies teacher. Explains concepts using cooking, building, gardening and other real-world parallels. |
eli | Eli Passo | Clear and patient mentor. Simple explanations, avoids jargon, celebrates good decisions, suggests learning paths. |
| (empty) | Default | Standard expert code reviewer. Professional, thorough, no personality overlay. |
Pulls the PR diff via the GitHub API. Incremental mode reviews only the changes made since the last bot review, so long-lived PRs don't get re-reviewed from scratch.
Attaches project context files — README.md and package.json by default, or any files you set — plus your review rules preset, so the model reviews with real project knowledge.
Sends it to OpenAI, Anthropic, or Gemini at your chosen model and temperature, optionally filtered through a persona and target language.
Line comments land with severity, and a verdict posts with a confidence score. Add --save-report for a JSON learning report.
Default concise rules skip naming and style nits, surfacing only bugs, security issues, and breaking changes on every PR.
reviewforge review --provider openai --model gpt-4 --pr 42 --dry-run
A shared reusable workflow lets every repo in the org call the same ReviewForge job with its own provider, persona, and language.
uses: your-org/.github/.github/workflows/reviewforge.yml@main
Set --language to write comments in Brazilian Portuguese, Spanish, Japanese, or any of 14 supported locales.
reviewforge review --language pt-br --persona eli
--save-report writes a JSON file of techniques spotted, what went well, and areas to improve — per PR, not just review noise.
reviewforge review --save-report review-report.json
Install the CLI
go install github.com/AxeForging/reviewforge@latest
Or drop it into a workflow — .github/workflows/code-review.yml
- uses: AxeForging/reviewforge@main
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
AI_PROVIDER: openai
AI_MODEL: gpt-4
AI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
Try a dry run — reviewforge review --provider openai --model gpt-4 --api-key $OPENAI_API_KEY --github-token $GITHUB_TOKEN --repo owner/repo --pr 42 --dry-run
Solid retry logic — nice work. Just add
defer resp.Body.Close()so we're not leaking connections on the error path. Small fix, you've got this.