{"id":51043669,"url":"https://github.com/axeforging/reviewforge","last_synced_at":"2026-06-22T12:02:07.611Z","repository":{"id":341451459,"uuid":"1161072141","full_name":"AxeForging/reviewforge","owner":"AxeForging","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-01T21:25:36.000Z","size":3339,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-01T21:54:31.192Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AxeForging.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-18T17:46:23.000Z","updated_at":"2026-03-01T21:25:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/AxeForging/reviewforge","commit_stats":null,"previous_names":["axeforging/reviewforge"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/AxeForging/reviewforge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Freviewforge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Freviewforge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Freviewforge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Freviewforge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AxeForging","download_url":"https://codeload.github.com/AxeForging/reviewforge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Freviewforge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34647750,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-22T12:02:05.963Z","updated_at":"2026-06-22T12:02:07.602Z","avatar_url":"https://github.com/AxeForging.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"doc/banner.png\" alt=\"ReviewForge\" width=\"400\"\u003e\n\u003c/div\u003e\n\n# ReviewForge\n\nAI-powered code reviewer with personality — GitHub Action \u0026 CLI.\n\nReviewForge reviews GitHub pull requests using AI (OpenAI, Anthropic, or Gemini), posting line-level comments with severity levels and review verdicts. It supports reviewer personas that add personality to reviews, multilingual output, and learning reports for developer growth.\n\n## Features\n\n- **Multi-provider AI**: OpenAI, Anthropic, and Gemini support\n- **Line-level comments**: Precise feedback on specific code lines with severity (critical/warning/suggestion)\n- **Review verdicts**: Approve, request changes, or comment with confidence scores\n- **Incremental reviews**: Only review new changes since the last bot review (default: on)\n- **Reviewer personas**: Built-in personalities (Bob, Robert, Maya, Eli) or custom personas\n- **Multilingual reviews**: Write review comments in any language via `--language`\n- **Learning reports**: Save JSON reports with techniques spotted, what went well, and areas to improve\n- **File filtering**: Exclude files by glob patterns\n- **Context files**: Include project files (README, package.json) for better AI context\n- **Dry-run mode**: Test locally without posting to GitHub\n- **High-performance Composite Action**: Fast execution, downloads pre-built binaries\n- **Standalone CLI**: Run reviews from your terminal\n\n## Quick Start (GitHub Action)\n\n```yaml\nname: Code Review\n\non:\n  pull_request:\n    types: [opened, synchronize]\n\npermissions:\n  contents: read\n  pull-requests: write\n\njobs:\n  review:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      # Main for latest version or specify version tag based on our releases\n      - uses: AxeForging/reviewforge@main\n        with:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          AI_PROVIDER: openai\n          AI_MODEL: gpt-4\n          AI_API_KEY: ${{ secrets.OPENAI_API_KEY }}\n```\n\n### Reusable Workflow\n\nFor teams that want a shared, consistent setup across multiple repos:\n\n```yaml\n# .github/workflows/reviewforge.yml (in a shared workflow repo)\nname: ReviewForge\n\non:\n  workflow_call:\n    inputs:\n      ai_provider:\n        type: string\n        default: 'openai'\n      ai_model:\n        type: string\n        default: 'gpt-4'\n      persona:\n        type: string\n        default: ''\n      language:\n        type: string\n        default: ''\n      max_comments:\n        type: string\n        default: '25'\n      exclude_patterns:\n        type: string\n        default: '**/*.lock,**/*.json,**/*.md'\n      show_token_usage:\n        type: boolean\n        default: false\n    secrets:\n      ai_api_key:\n        required: true\n      github_token:\n        required: true\n\npermissions:\n  contents: read\n  pull-requests: write\n\njobs:\n  review:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      # Main for latest version or specify version tag based on our releases\n      - uses: AxeForging/reviewforge@main\n        with:\n          GITHUB_TOKEN: ${{ secrets.github_token }}\n          AI_PROVIDER: ${{ inputs.ai_provider }}\n          AI_MODEL: ${{ inputs.ai_model }}\n          AI_API_KEY: ${{ secrets.ai_api_key }}\n          PERSONA: ${{ inputs.persona }}\n          LANGUAGE: ${{ inputs.language }}\n          MAX_COMMENTS: ${{ inputs.max_comments }}\n          EXCLUDE_PATTERNS: ${{ inputs.exclude_patterns }}\n          SHOW_TOKEN_USAGE: ${{ inputs.show_token_usage }}\n```\n\nThen in each repo, just call it:\n\n```yaml\n# .github/workflows/code-review.yml\nname: Code Review\non:\n  pull_request:\n    types: [opened, synchronize]\n\njobs:\n  review:\n    uses: your-org/.github/.github/workflows/reviewforge.yml@main\n    with:\n      ai_provider: gemini\n      ai_model: gemini-2.5-flash\n      persona: eli\n      language: pt-br\n      show_token_usage: true\n    secrets:\n      ai_api_key: ${{ secrets.GEMINI_API_KEY }}\n      github_token: ${{ secrets.GITHUB_TOKEN }}\n```\n\n## Quick Start (CLI)\n\n```bash\n# Install\ngo install github.com/AxeForging/reviewforge@latest\n\n# Review a PR (dry-run)\nreviewforge review \\\n  --provider openai \\\n  --model gpt-4 \\\n  --api-key $OPENAI_API_KEY \\\n  --github-token $GITHUB_TOKEN \\\n  --repo owner/repo \\\n  --pr 42 \\\n  --dry-run\n\n# With a persona + language + learning report\nreviewforge review \\\n  --provider gemini \\\n  --model gemini-2.5-flash \\\n  --api-key $GEMINI_API_KEY \\\n  --github-token $GITHUB_TOKEN \\\n  --repo owner/repo \\\n  --pr 42 \\\n  --persona eli \\\n  --language pt-br \\\n  --save-report review-report.json\n```\n\n## Personas\n\nReviewForge includes built-in reviewer personas that modify the review style:\n\n| Persona | Name | Style |\n|---------|------|-------|\n| `bob` | Bob Lil Swagger | Friendly, encouraging. Celebrates good code, suggests improvements warmly, teaches while reviewing. |\n| `robert` | Robert Dover Clow | Nerdy tech expert. Names every pattern spotted, references CS concepts and SOLID principles. |\n| `maya` | Maya Simplifica | Everyday analogies teacher. Explains concepts using cooking, building, gardening and other real-world parallels. |\n| `eli` | Eli Passo | Clear and patient mentor. Simple explanations, avoids jargon, celebrates good decisions, suggests learning paths. |\n| _(empty)_ | Default | Standard expert code reviewer. Professional, thorough, no personality overlay. |\n\n### Custom Personas\n\n```bash\n# Inline JSON\nreviewforge review --custom-persona '{\"name\":\"strict\",\"prompt\":\"Be extremely strict...\"}' ...\n\n# From file\nreviewforge review --custom-persona-file ./my-persona.json ...\n```\n\n### GitHub Action with Persona\n\n```yaml\n# Main for latest version or specify version tag based on our releases\n- uses: AxeForging/reviewforge@main\n  with:\n    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n    AI_PROVIDER: anthropic\n    AI_MODEL: claude-sonnet-4-20250514\n    AI_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}\n    PERSONA: maya\n    LANGUAGE: pt-br\n```\n\n## Language Support\n\nUse locale codes or language names for `--language` / `LANGUAGE`:\n\n| Code | Language |\n|------|----------|\n| `en-us` | English (US) |\n| `en-gb` | English (UK) |\n| `pt-br` | Brazilian Portuguese |\n| `pt-pt` | European Portuguese |\n| `es` | Spanish |\n| `es-mx` | Mexican Spanish |\n| `fr` | French |\n| `fr-ca` | Canadian French |\n| `de` | German |\n| `it` | Italian |\n| `ja` | Japanese |\n| `ko` | Korean |\n| `zh-cn` | Simplified Chinese |\n| `zh-tw` | Traditional Chinese |\n\nYou can also use full language names directly: `--language \"Brazilian Portuguese\"`.\n\n## Learning Reports\n\nUse `--save-report \u003cpath\u003e` to save a JSON report with learning insights:\n\n```bash\nreviewforge review \\\n  --provider gemini \\\n  --model gemini-2.5-flash \\\n  --api-key $GEMINI_API_KEY \\\n  --github-token $GITHUB_TOKEN \\\n  --repo owner/repo \\\n  --pr 42 \\\n  --persona eli \\\n  --save-report report.json\n```\n\nThe report includes:\n\n```json\n{\n  \"repo\": \"owner/repo\",\n  \"pr_number\": 42,\n  \"pr_title\": \"Add retry logic\",\n  \"provider\": \"gemini\",\n  \"model\": \"gemini-2.5-flash\",\n  \"persona\": \"eli\",\n  \"review\": {\n    \"summary\": \"...\",\n    \"comments\": [...],\n    \"suggestedAction\": \"comment\",\n    \"confidence\": 88,\n    \"learning\": {\n      \"techniques_spotted\": [\"Error wrapping\", \"Retry with backoff\", \"Builder pattern\"],\n      \"what_went_well\": [\"Clean separation of concerns\", \"Good error messages\"],\n      \"areas_to_improve\": [\"Add context.Context for cancellation\", \"Consider exponential backoff\"],\n      \"key_takeaways\": [\"Always close response bodies with defer\", \"Retry only idempotent operations\"]\n    }\n  },\n  \"files_reviewed\": [\"helpers/http.go\"]\n}\n```\n\nGreat for tracking developer growth, onboarding, and team learning.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eToken Usage Tracking\u003c/b\u003e\u003c/summary\u003e\n\nReviewForge can optionally display the exact token usage breakdown (prompt tokens, completion tokens, and total tokens) from the AI provider in the review summary. \n\nTo enable this, pass the `--show-token-usage` CLI flag or set `SHOW_TOKEN_USAGE: true` in your GitHub Action configuration. This feature is disabled by default to save space in PR summaries.\n\u003c/details\u003e\n\n## Review Rules\n\nReviewForge ships with default review rules (`concise`) that focus the AI on what matters:\n\n**Default rules (always active):**\n- Only comment on bugs, security vulnerabilities, performance issues, and breaking changes\n- Ignore variable naming, code style, minor optimizations, and linting issues\n- Prepend a warning emoji for critical issues only\n- If unsure, don't comment\n\n### Built-in Presets\n\n| Preset | Focus |\n|--------|-------|\n| `concise` | **(default)** Only bugs, security, performance, and breaking changes. Ignores style, naming, minor optimizations. |\n| `thorough` | Bugs, security, performance, error handling, resource leaks, concurrency, API design. Ignores pure style. |\n| `none` | Disables all review rules. The AI uses its own judgment with no constraints. |\n\n```yaml\n# GitHub Action — switch to thorough preset\n# Main for latest version or specify version tag based on our releases\n- uses: AxeForging/reviewforge@main\n  with:\n    REVIEW_RULES: thorough\n    # ...\n\n# GitHub Action — disable rules entirely\n# Main for latest version or specify version tag based on our releases\n- uses: AxeForging/reviewforge@main\n  with:\n    REVIEW_RULES: none\n    # ...\n```\n\n```bash\n# CLI — switch preset\nreviewforge review --review-rules thorough ...\n\n# CLI — disable rules\nreviewforge review --review-rules none ...\n```\n\n### Custom Rules\n\nOverride the default rules with your own (inline text or from a file):\n\n```yaml\n# GitHub Action — inline custom rules\n# Main for latest version or specify version tag based on our releases\n- uses: AxeForging/reviewforge@main\n  with:\n    CUSTOM_RULES: |\n      ONLY comment on security vulnerabilities and breaking changes.\n      DO NOT comment on style, naming, or minor issues.\n      Prepend \"⚠️\" for critical issues only.\n    # ...\n```\n\n```bash\n# CLI — custom rules from file\nreviewforge review --custom-rules-file ./my-rules.txt ...\n\n# CLI — inline custom rules\nreviewforge review --custom-rules \"Only comment on bugs and security issues\" ...\n```\n\nPriority: `--custom-rules-file` \u003e `--custom-rules` \u003e `--review-rules` preset \u003e default (`concise`).\nUse `--review-rules none` to disable all rules. Custom rules can be combined with personas and language.\n\n## Configuration\n\n### GitHub Action Inputs\n\n| Input | Required | Default | Description |\n|-------|----------|---------|-------------|\n| `GITHUB_TOKEN` | Yes | - | GitHub token for API access |\n| `AI_PROVIDER` | Yes | `gemini` | AI provider: `openai`, `anthropic`, `gemini` |\n| `AI_MODEL` | Yes | `gemini-2.5-flash` | Model name |\n| `AI_API_KEY` | Yes | - | API key for the provider |\n| `AI_TEMPERATURE` | No | `0` | Temperature (0-1) |\n| `APPROVE_REVIEWS` | No | `true` | Allow approve/request changes verdicts |\n| `MAX_COMMENTS` | No | `5` | Max line comments (0 = unlimited) |\n| `INCREMENTAL` | No | `false` | Only review new changes |\n| `EXCLUDE_PATTERNS` | No | `**/*.lock,**/*.json,**/*.md` | Glob patterns to exclude |\n| `CONTEXT_FILES` | No | `package.json,README.md` | Files for AI context |\n| `PROJECT_CONTEXT` | No | - | Additional project context string |\n| `PERSONA` | No | - | Built-in persona: `bob`, `robert`, `maya`, `eli` |\n| `CUSTOM_PERSONA` | No | - | Custom persona JSON |\n| `CUSTOM_PERSONA_FILE` | No | - | Path to persona JSON file |\n| `LANGUAGE` | No | - | Review language (e.g. `pt-br`, `es`, `French`) |\n| `STRICT_CHANGES` | No | `false` | Only request changes for syntax errors or degradation |\n| `REVIEW_RULES` | No | `concise` | Comment rules preset: `concise`, `thorough`, `none` |\n| `CUSTOM_RULES` | No | - | Custom review rules text (what to comment on / ignore) |\n| `CUSTOM_RULES_FILE` | No | - | Path to a file with custom review rules |\n| `SHOW_TOKEN_USAGE` | No | `false` | Append AI token usage metrics to the review summary |\n\n### CLI Flags\n\nAll inputs are available as CLI flags with `--kebab-case` naming. Run `reviewforge review --help` for the full list.\n\nAdditional CLI-only flags:\n- `--save-report \u003cpath\u003e` — Save JSON learning report to file\n- `--dry-run` — Print review JSON without posting to GitHub\n\n## Commands\n\n```bash\nreviewforge review [flags]    # Review a PR\nreviewforge personas          # List available personas\nreviewforge version           # Show version info\nreviewforge --help            # Show help\n```\n\n## Development\n\n```bash\n# Build\nmake build-local\n\n# Test\nmake test\n\n# Cross-platform build\nmake build\n\n# Install locally\nmake install\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxeforging%2Freviewforge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faxeforging%2Freviewforge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxeforging%2Freviewforge/lists"}