Skip to main content

AI-powered code review tool with local Git, remote MR/PR analysis, and CI integration (GitLab, GitHub or Forgejo)

Project description

AI Code Review

AI-powered code review tool with 3 powerful use cases:

  • ๐Ÿค– CI Integration - Automated reviews in your CI/CD pipeline (GitLab or GitHub)
  • ๐Ÿ” Local Reviews - Review your local changes before committing
  • ๐ŸŒ Remote Reviews - Analyze existing MRs/PRs from the terminal

๐Ÿ“‘ Table of Contents

๐Ÿš€ Primary Use Case: CI/CD Integration

This is the primary and recommended way to use the AI Code Review tool.

GitLab CI

Add to .gitlab-ci.yml:

ai-review:
  stage: code-review
  image: registry.gitlab.com/redhat/edge/ci-cd/ai-code-review:latest
  variables:
    AI_API_KEY: $GEMINI_API_KEY  # Set in CI/CD variables
  script:
    - ai-code-review --post
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
  allow_failure: true

GitHub Actions

Add to .github/workflows/ai-review.yml:

name: AI Code Review
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  ai-review:
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request'
    continue-on-error: true
    permissions:
      contents: read
      pull-requests: write
    container:
      image: registry.gitlab.com/redhat/edge/ci-cd/ai-code-review:latest
    steps:
      - name: Run AI Review
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          AI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
        run: ai-code-review --pr-number ${{ github.event.pull_request.number }} --post

Forgejo Actions

Add to .forgejo/workflows/ai-review.yml:

name: AI Code Review
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  ai-review:
    runs-on: codeberg-tiny  # adjust for non-codeberg instances
    continue-on-error: true
    permissions:
      contents: read
      pull-requests: write
    container:
      image: registry.gitlab.com/redhat/edge/ci-cd/ai-code-review:latest
    steps:
      - name: Run AI Review
        env:
          AI_API_KEY: ${{ secrets.GEMINI_API_KEY }}  # set in Forgejo Actions secrets
        run: ai-code-review --pr-number ${{ github.event.pull_request.number }} --post

โš™๏ธ Secondary Use Cases

Local Usage (Container)

This is the recommended way to use the tool locally, as it doesn't require any installation on your system.

# Review local changes
podman run -it --rm -v .:/app -w /app \
       registry.gitlab.com/redhat/edge/ci-cd/ai-code-review:latest \
       ai-code-review --local

# Review a remote MR
podman run -it --rm -e GITLAB_TOKEN=$GITLAB_TOKEN -e AI_API_KEY=$AI_API_KEY \
       registry.gitlab.com/redhat/edge/ci-cd/ai-code-review:latest \
       ai-code-review group/project 123

Note: You can use docker instead of podman and the command should work the same.

Local Usage (CLI Tool)

This is a good option if you have Python installed and want to use the tool as a CLI command.

Note on package vs. command name: The package is registered on PyPI as ai-code-review-cli, but for ease of use, the command to execute remains ai-code-review.

pipx is a more mature and well-known tool for the same purpose. It handles the package vs. command name difference automatically.

# Install pipx
pip install pipx
pipx ensurepath

# Install the package
pipx install ai-code-review-cli

# Run the command
ai-code-review --local

Remote Reviews

You can also analyze existing MRs/PRs from your terminal.

# GitLab MR
ai-code-review group/project 123

# GitHub PR
ai-code-review --platform-provider github owner/repo 456

# Save to file
ai-code-review group/project 123 -o review.md

# Post the review to the MR/PR
ai-code-review group/project 123 --post

๐Ÿ”ง Configuration

Required Setup

1. Platform Token (Not needed for local reviews)

# For GitLab remote reviews
export GITLAB_TOKEN=glpat_xxxxxxxxxxxxxxxxxxxx

# For GitHub remote reviews
export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx

# For Forgejo remote reviews
export FORGEJO_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# Local reviews don't need platform tokens! ๐ŸŽ‰

2. AI API Key

# Get key from: https://makersuite.google.com/app/apikey
export AI_API_KEY=your_gemini_api_key_here

Configuration Methods (Priority Order)

The tool supports 4 configuration methods with the following priority:

  1. ๐Ÿ”ด CLI Arguments (highest priority) - --ai-provider anthropic --ai-model claude-sonnet-4-5
  2. ๐ŸŸก Environment Variables - export AI_PROVIDER=anthropic
  3. ๐ŸŸข Configuration File - .ai_review/config.yml
  4. โšช Field Defaults (lowest priority) - Built-in defaults

Configuration File

Create a YAML configuration file for persistent settings:

# Create from template
cp .ai_review/config.yml.example .ai_review/config.yml

# Edit your project settings
nano .ai_review/config.yml

Key benefits:

  • โœ… Project-specific settings - Different configs per repository
  • โœ… Team sharing - Commit to git for consistent team settings
  • โœ… Reduced typing - Set common options once
  • โœ… Layered override - CLI arguments still override everything

File locations:

  • Auto-detected: .ai_review/config.yml (loaded automatically if exists)
  • Custom path: --config-file path/to/custom.yml
  • Disable loading: --no-config-file flag

Environment Variables

For sensitive data and CI/CD environments:

# Copy template
cp env.example .env

# Edit and set your tokens
GITLAB_TOKEN=glpat_xxxxxxxxxxxxxxxxxxxx
AI_API_KEY=your_gemini_api_key_here

Common Options

# Different AI providers
ai-code-review project/123 --ai-provider anthropic  # Claude
ai-code-review project/123 --ai-provider ollama     # Local Ollama

# Custom server URLs
ai-code-review project/123 --gitlab-url https://gitlab.company.com

# Output options
ai-code-review project/123 -o review.md          # Save to file
ai-code-review project/123 2>logs.txt            # Logs to stderr

For all configuration options, troubleshooting, and advanced usage โ†’ see User Guide

Team/Organization Context

For teams working on multiple projects, you can specify a shared team context that applies organization-wide:

# Remote team context (recommended - stored in central repo)
export TEAM_CONTEXT_FILE=https://gitlab.com/org/standards/-/raw/main/review.md
ai-code-review --local

# Or use CLI option
ai-code-review project/123 --team-context-file https://company.com/standards/review.md --post

# Local team context file
ai-code-review --team-context-file ../team-standards.md --local

Use cases:

  • Organization-wide coding standards
  • Security requirements and compliance rules
  • Team conventions shared across projects
  • Industry-specific guidelines (HIPAA, GDPR, etc.)

Priority order: Team context โ†’ Project context โ†’ Commit history

This allows maintaining org standards while individual projects add specific guidelines.

See User Guide - Team Context for complete documentation.

Intelligent Review Context (Two-Phase Synthesis)

The tool uses a two-phase approach to incorporate previous reviews and avoid repeating mistakes:

Phase 1 - Synthesis (automatic):

  • Fetches ALL comments and reviews (including resolved ones)
  • Uses a fast model (e.g., gemini-3-flash-preview) to synthesize key insights
  • Identifies author corrections to previous AI reviews
  • Generates concise summary (<500 words)

Phase 2 - Main Review:

  • Uses synthesis as context to avoid repeating mistakes
  • Focuses on code changes with awareness of discussions

Benefits:

  • โœ… Prevents repeating invalidated suggestions
  • โœ… Reduces token usage (synthesis is much shorter than raw comments)
  • โœ… Lower costs (fast model for preprocessing)
  • โœ… Better quality (focused insights vs raw data)

Configuration:

# Enable/disable (default: enabled)
enable_review_context: true
enable_review_synthesis: true

# Custom synthesis model (optional)
synthesis_model: "gemini-3-flash-preview"  # Default for Gemini
# synthesis_model: "claude-haiku-4-5"  # For Anthropic
# synthesis_model: "gpt-4o-mini"  # For OpenAI

Skips automatically when:

  • No comments/reviews exist (first review)
  • Feature is disabled

โšก Smart Skip Review

AI Code Review automatically skips unnecessary reviews to reduce noise and costs:

  • ๐Ÿ”„ Dependency updates (chore(deps): bump lodash 4.1.0 to 4.2.0)
  • ๐Ÿค– Bot changes (from dependabot[bot], renovate[bot])
  • ๐Ÿ“ Documentation-only changes (if enabled)
  • ๐Ÿท๏ธ Tagged PRs/MRs ([skip review], [automated])
  • ๐Ÿ“ Draft/WIP PRs/MRs (work in progress)

Result: Focus on meaningful changes, save API costs, faster CI/CD pipelines.

๐Ÿ“– Learn more: Configuration, customization, and CI integration โ†’ User Guide - Skip Review

For Developers

Development Setup

# Install using uv (recommended)
uv sync --all-extras

# Or with pip
pip install -e .

To install or learn more about uv, check here: uv

๐Ÿ”ง Common Issues

gRPC Warnings with Google Gemini (only for ai-generate-context)

When using Google Gemini provider, you may see harmless gRPC connection warnings:

WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1759934851.372144 Other threads are currently calling into gRPC, skipping fork() handlers

These warnings are harmless and don't affect functionality. To suppress them:

# Suppress warnings by redirecting stderr
ai-generate-context . 2>/dev/null

# Or use alternative provider (no warnings)
ai-generate-context . --provider ollama

๐Ÿ“– Documentation

๐Ÿค– AI Tools Disclaimer

This project was developed with the assistance of artificial intelligence tools

Tools used:

  • Cursor: Code editor with AI capabilities
  • Claude-Sonnet-4.5: Anthropic's latest language model (claude-sonnet-4-5)

Division of responsibilities:

AI (Cursor + Claude-Sonnet-4.5):

  • ๐Ÿ”ง Initial code prototyping
  • ๐Ÿ“ Generation of examples and test cases
  • ๐Ÿ› Assistance in debugging and error resolution
  • ๐Ÿ“š Documentation and comments writing
  • ๐Ÿ’ก Technical implementation suggestions

Human (Juanje Ojeda):

  • ๐ŸŽฏ Specification of objectives and requirements
  • ๐Ÿ” Critical review of code and documentation
  • ๐Ÿ’ฌ Iterative feedback and solution refinement
  • โœ… Final validation of concepts and approaches

Crotchety old human (Adam Williamson):

  • ๐Ÿ‘ด๐Ÿป Adapted GitHub client and tests for Forgejo using 100% artisanal human brainpower

Collaboration philosophy: AI tools served as a highly capable technical assistant, while all design decisions, educational objectives, and project directions were defined and validated by the human.

๐Ÿ“„ License

MIT License - see LICENSE file for details.

๐Ÿ‘ฅ Author

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ai_code_review_cli-2.3.1.tar.gz (117.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ai_code_review_cli-2.3.1-py3-none-any.whl (152.1 kB view details)

Uploaded Python 3

File details

Details for the file ai_code_review_cli-2.3.1.tar.gz.

File metadata

  • Download URL: ai_code_review_cli-2.3.1.tar.gz
  • Upload date:
  • Size: 117.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for ai_code_review_cli-2.3.1.tar.gz
Algorithm Hash digest
SHA256 8c8d15b26c25a5af9f32035b65109e3371cebee4a2f19d40826bc3a58d34e848
MD5 71c2e8631d869bde473849134e0dcf68
BLAKE2b-256 770a83b9d855ca876cc5b8ebc4ec5c9b397754c12eec12c0973d3e096bc212d8

See more details on using hashes here.

File details

Details for the file ai_code_review_cli-2.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for ai_code_review_cli-2.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8ed4fee960dfe7cf43fc49ee1196201a173118adc1f637e862bcce0f7ad86fec
MD5 70c3640f163d7f78564d02bf32d5c237
BLAKE2b-256 2a71f3031f94cf42583608751c0e1a9e4881f8e535f90ffc68ed764964bfa365

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page