{"id":44928420,"url":"https://github.com/felipefernandes/iara","last_synced_at":"2026-03-05T22:12:12.939Z","repository":{"id":337621874,"uuid":"1153830831","full_name":"felipefernandes/iara","owner":"felipefernandes","description":"🧜‍♀️Iara is an automated, project-agnostic, and configurable code review tool designed to run in CI/CD pipelines or locally via CLI. It uses the OpenRouter API to access various LLM models (Llama 3, Gemini 2.0, etc.) for free or through paid plans.","archived":false,"fork":false,"pushed_at":"2026-02-10T15:43:59.000Z","size":88,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-10T17:00:26.012Z","etag":null,"topics":["ai-agents","codereviewer","github-actions","gitlab-ci","openrouter","opensource","python","unity"],"latest_commit_sha":null,"homepage":"","language":"Python","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/felipefernandes.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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-09T18:05:39.000Z","updated_at":"2026-02-10T15:44:06.000Z","dependencies_parsed_at":"2026-02-10T17:00:32.026Z","dependency_job_id":null,"html_url":"https://github.com/felipefernandes/iara","commit_stats":null,"previous_names":["felipefernandes/iara"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/felipefernandes/iara","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipefernandes%2Fiara","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipefernandes%2Fiara/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipefernandes%2Fiara/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipefernandes%2Fiara/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/felipefernandes","download_url":"https://codeload.github.com/felipefernandes/iara/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipefernandes%2Fiara/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29569856,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T04:18:28.490Z","status":"ssl_error","status_checked_at":"2026-02-18T04:13:49.018Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["ai-agents","codereviewer","github-actions","gitlab-ci","openrouter","opensource","python","unity"],"created_at":"2026-02-18T05:17:43.937Z","updated_at":"2026-03-05T22:12:12.930Z","avatar_url":"https://github.com/felipefernandes.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Iara - AI Code Reviewer 🧜‍♀️\n\n![Iara - AI Code Review Agent](.assets/iara-github-banner.png)\n\n🇧🇷 [Leia em Português](README.pt-br.md)\n\nIara is an automated, project-agnostic, configurable code review tool designed to run in CI/CD pipelines or locally via CLI. It connects directly to the LLM provider of your choice — OpenRouter (free models), OpenAI, Google Gemini, or Anthropic Claude.\n\n---\n\n[![🧜‍♀️ Iara Code Review](https://github.com/felipefernandes/iara/actions/workflows/iara-review.yml/badge.svg)](https://github.com/felipefernandes/iara/actions/workflows/iara-review.yml) [![🧪 Tests](https://github.com/felipefernandes/iara/actions/workflows/tests.yml/badge.svg)](https://github.com/felipefernandes/iara/actions/workflows/tests.yml) [![codecov](https://codecov.io/gh/felipefernandes/iara/branch/main/graph/badge.svg)](https://codecov.io/gh/felipefernandes/iara) [![PyPI - Version](https://img.shields.io/pypi/v/iara-reviewer)](https://pypi.org/project/iara-reviewer/) [![GitHub Marketplace](https://img.shields.io/badge/Marketplace-Iara%20Code%20Reviewer-blue?logo=github)](https://github.com/marketplace/actions/iara-code-reviewer) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n---\n\n## 🚀 Features\n\n- **Agnostic**: Configure your project context (Tech Stack, Rules) via JSON.\n- **Multi-Provider**: Connect directly to OpenRouter, OpenAI, Google Gemini, or Anthropic Claude.\n- **Smart Fallback**: Automatically tries free models if the preferred one fails (OpenRouter only).\n- **Rules-Based (Static)**: Identifies dangerous patterns instantly without spending tokens (e.g., `GetComponent` in loops in Unity).\n- **LLM-Based (Intelligent)**: Uses AI to understand logic, security, and context, going beyond syntax.\n- **GitHub + GitLab**: Native integration with both platforms, with automatic comments on PRs/MRs.\n- **Multi-Language Reviews**: Configure the output language — reviews can be written in English, Portuguese, Spanish, French, and more.\n\n## 🧠 Capabilities\n\nIara combines different types of analysis for a complete review:\n\n| Type                 | What does it do?                      | Does Iara cover it? | How?                                      |\n| :------------------- | :------------------------------------ | :------------------ | :---------------------------------------- |\n| **Static Analysis**  | Finds bugs by reading code (fast).    | ✅ **Yes**          | Via Extensions (Regex) and LLM.           |\n| **Linting**          | Fixes style and formatting.           | ✅ **Yes**          | LLM can suggest _Clean Code_.             |\n| **SAST**             | Finds security flaws in code.         | ✅ **Yes**          | Primary focus on vulnerability detection. |\n| **Dynamic Analysis** | Finds bugs by running the app (slow). | ❌ No               | Focus on fast CI/CD (Code Review).        |\n\n### What does it detect?\n\n1. **Unity / Game Dev**:\n   - Use of slow APIs (`Find`, `GetComponent`) in critical loops (`Update`).\n   - Excessive memory allocation (Garbage Collection).\n   - Excess logging (`Debug.Log`) in final builds.\n\n2. **Security (General)**:\n   - Hardcoded credentials (Passwords, API Keys).\n   - Injection vulnerabilities (SQL, Command).\n   - Missing input validation.\n\n3. **Code Quality**:\n   - Complex or confusing logic.\n   - Exception handling errors.\n   - Refactoring suggestions for readability.\n\n---\n\n## 📦 Installation and Setup\n\n### 1. Install\n\n```bash\npip install iara-reviewer\n```\n\n### 2. Configure (Interactive Setup)\n\n```bash\niara init\n```\n\nThe wizard guides you through **5 steps**:\n\n1. **Language** — Choose the review output language (en, pt-br, es, fr, etc.)\n2. **Provider** — Choose your LLM provider: `openrouter` (default, free), `openai`, `gemini`, or `anthropic`\n3. **API Key** — Enter the key for the chosen provider (validated and saved to `~/.iara/config.json`)\n4. **Project** — Name, tech stack, description\n5. **Preferences** — Focus areas (Security, Performance, etc.)\n\nDone! Project config is saved at `.iara.json`.\n\n### 3. Use\n\n```bash\ngit diff main | iara\n```\n\n### Check authentication\n\n```bash\niara auth status\n```\n\n### Manual setup (without wizard)\n\nSet the provider and its key via environment variables:\n\n```bash\n# OpenRouter (default — free models available)\nexport OPENROUTER_API_KEY=\"sk-or-...\"\n\n# OpenAI\nexport IARA_PROVIDER=\"openai\"\nexport OPENAI_API_KEY=\"sk-...\"\n\n# Google Gemini\nexport IARA_PROVIDER=\"gemini\"\nexport GEMINI_API_KEY=\"AIza...\"\n\n# Anthropic Claude\nexport IARA_PROVIDER=\"anthropic\"\nexport ANTHROPIC_API_KEY=\"sk-ant-...\"\n```\n\nAPI key resolution priority: environment variable \u003e global config (`~/.iara/config.json`).\n\n### From source (Development)\n\n```bash\ngit clone https://github.com/felipefernandes/iara.git\ncd iara\npip install -e .\n```\n\n---\n\n## ⚙️ Project Configuration\n\n`iara init` automatically creates `.iara.json`. You can also create it manually:\n\n```json\n{\n  \"project\": {\n    \"name\": \"My Project\",\n    \"description\": \"Project description.\",\n    \"tech_stack\": [\"Python\"]\n  },\n  \"review\": {\n    \"focus_areas\": [\"Performance\", \"Security\"],\n    \"ignore_patterns\": [\"fixtures\", \"migrations\", \"generated\"],\n    \"max_index_file_size\": 10485760\n  },\n  \"model\": {\n    \"preferred\": \"google/gemini-2.0-flash-exp:free\",\n    \"fallback_enabled\": true,\n    \"provider\": \"openrouter\"\n  },\n  \"language\": \"en\"\n}\n```\n\n### `ignore_patterns` and `max_index_file_size`\nYou can configure the Iara Indexer's footprint to respect maximum file limits and skip specific artifacts from the RAG context memory.\n\n**`max_index_file_size`:** Sets the byte threshold for a single file to be read (e.g. `10485760` for 10MB overrides the default 1MB restriction).\n**`ignore_patterns`:** Skips specific files or directories from being read (e.g., fixture folders or auto-generated payload files, which add zero value to code reviews). \n\n**Important Notes on `ignore_patterns` behavior:**\n- 🛠️ **Merged with Defaults:** Your defined patterns are **added** to a default list (which already includes `.git`, `node_modules`, `venv`, `__pycache__`, etc.). You do not need to rewrite these.\n- ⚡ **Wildcards \u0026 Prefix Mathing:** Iara uses Python's `fnmatch`, which means patterns like `test` match exact files or folders named `test`. To act as prefixes or match extensions, use wildcards (e.g., `test*` to match `test_dir`, or `*_generated.*` to match files ending with that).\n- ⚠️ **Be Specific:** Broad patterns can inadvertently blind the Indexer. Using `*` or `*.py` as an ignore pattern will result in Iara ignoring your actual source code. It's safer to scope correctly (e.g., `tests/fixtures/*` or `logs/*.log`).\n\n### Supported providers and example models\n\n| Provider | `provider` value | Example models |\n| :--- | :--- | :--- |\n| OpenRouter (default) | `openrouter` | `google/gemini-2.0-flash-exp:free`, `meta-llama/llama-3.2-3b-instruct:free` |\n| OpenAI | `openai` | `gpt-4o`, `gpt-4.5-preview`, `o1` |\n| Google Gemini | `gemini` | `gemini-2.5-flash`, `gemini-2.5-pro` |\n| Anthropic Claude | `anthropic` | `claude-opus-4-5-20250929`, `claude-sonnet-4-5-20250929` |\n\n\u003e **Note**: Smart fallback to free models is only available for OpenRouter. When using `openai`, `gemini`, or `anthropic`, set `\"fallback_enabled\": false`.\n\nThe `language` field controls the review output language. Supported values: `en`, `pt-br`, `es`, `fr`, `de`, `ja`, `zh`, `ko`, `ru`, or any language the LLM understands.\n\nYou can also override provider, model, and language via environment variables:\n\n```bash\nexport IARA_PROVIDER=\"anthropic\"\nexport IARA_MODEL=\"claude-sonnet-4-5-20250929\"\nexport IARA_LANGUAGE=\"pt-br\"\n```\n\nA ready-to-use example is available at `iara-example.json`.\n\n---\n\n\n## 🧠 Memory (RAG) [New]\n\nIara now supports a local **Retrieval-Augmented Generation (RAG)** system to provide context-aware reviews.\n\n### 1. Install Dependencies\n```bash\npip install iara-reviewer[rag]\n# or\npip install lancedb sentence-transformers torch numpy\n```\n\n### 2. Index Your Codebase\nRun this command in your project root to create the local vector index:\n```bash\niara memory index\n```\nThis will parse your code (extracting functions, classes, and calls) and store it in `.iara/data/lancedb`.\n\n#### Smart Chunking — Supported Languages\n\nIara uses **language-aware chunking** to ensure that code blocks fed into the LLM represent complete logical units (functions, classes, methods) instead of arbitrary 100-line blocks:\n\n| Extension(s) | Strategy | What it extracts |\n| :--- | :--- | :--- |\n| `.py` | Python AST | Functions, async functions, classes |\n| `.js`, `.ts` | Regex + brace balancing | Functions, async functions, classes, arrow functions |\n| `.cs` | Regex + brace balancing | Classes, structs, interfaces, enums, methods |\n| All others | Plain-text fallback | Blocks of up to 100 lines |\n\n\u003e **Why does this matter?** Chunks that cut a function in half generate noisy context for the LLM. Smart chunking keeps logical units intact, improving review accuracy and reducing token waste.\n\n### 3. Review with Context\nJust run the review command as usual. Iara will automatically use the memory to retrieve relevant context for the changed code.\n```bash\ngit diff main | iara\n```\n\n### 4. Manage Memory\nTo clear the index:\n```bash\niara memory clear\n```\n\n---\n\n## 💬 Inline PR Comments (Optional) [New]\n\nBy default, Iara posts a single summary comment on your Pull Request. For a better developer experience, you can enable **inline comments** that are anchored directly to specific lines of code, similar to how CodeClimate, SonarCloud, or human reviewers comment.\n\n### Supported Platforms\n\n- ✅ **GitHub** — Uses [Pull Request Review Comments API](https://docs.github.com/en/rest/pulls/comments)\n- ✅ **GitLab** — Uses [Merge Request Discussions API](https://docs.gitlab.com/ee/api/discussions.html)\n\n### How to Enable\n\nAdd a `ci` section to your `.iara.json` file:\n\n```json\n{\n  \"ci\": {\n    \"platform\": \"github\",\n    \"review_mode\": \"inline\"\n  },\n  \"project\": {\n    \"name\": \"My Project\",\n    \"...\": \"...\"\n  }\n}\n```\n\n**Configuration Options:**\n\n- **`platform`**: CI platform where Iara will post comments\n  - `\"github\"` — For GitHub Actions\n  - `\"gitlab\"` — For GitLab CI\n  - `null` or omitted — No platform specified (default behavior)\n\n- **`review_mode`**: How Iara posts review feedback\n  - `\"summary\"` — Single comment with all feedback (default)\n  - `\"inline\"` — Individual comments anchored to specific lines\n\n### Required Permissions\n\n#### GitHub Actions\nYour workflow needs `pull-requests: write` permission:\n\n```yaml\npermissions:\n  contents: read\n  pull-requests: write\n```\n\n#### GitLab CI\nThe CI job token (`CI_JOB_TOKEN`) needs `api` scope, or use a personal access token with `api` permissions:\n\n```yaml\nvariables:\n  GITLAB_TOKEN: ${CI_JOB_TOKEN}  # or use a PAT\n```\n\n### Behavior Notes\n\n- **Inline mode requires `platform` to be specified** — Setting `review_mode: inline` without `platform` will fail validation\n- **Graceful fallback** — If inline comment posting fails (e.g., JSON parsing error, API failure), Iara automatically falls back to summary mode\n- **Platform compatibility** — If your platform is not GitHub or GitLab, Iara defaults to summary mode with a warning\n\n---\n\n## 🏃 How to Use\n\n### Via Pipe (Git Diff)\n\n```bash\ngit diff main | iara\n```\n\n### Via Environment Variable\n\n```bash\nexport PR_DIFF=$(git diff main)\niara\n```\n\n### Scan Mode (Static Analysis)\n\n```bash\niara --scan ./path/to/project\n```\n\n### Forcing a Provider and Model\n\n```bash\n# Anthropic Claude\nexport IARA_PROVIDER=\"anthropic\"\nexport ANTHROPIC_API_KEY=\"sk-ant-...\"\nexport IARA_MODEL=\"claude-sonnet-4-5-20250929\"\ngit diff | iara\n\n# OpenAI GPT-4o\nexport IARA_PROVIDER=\"openai\"\nexport OPENAI_API_KEY=\"sk-...\"\nexport IARA_MODEL=\"gpt-4o\"\ngit diff | iara\n\n# Google Gemini\nexport IARA_PROVIDER=\"gemini\"\nexport GEMINI_API_KEY=\"AIza...\"\nexport IARA_MODEL=\"gemini-2.5-flash\"\ngit diff | iara\n```\n\n---\n\n## 🐙 GitHub Integration\n\nIara is available on the [**GitHub Marketplace**](https://github.com/marketplace/actions/iara-code-reviewer) — you can add it to your repository with just a few clicks. No Docker required! Iara runs as a lightweight **Composite Action** directly on the runner, with automatic pip caching for fast execution.\n\nAdd Iara to your GitHub repository in **2 steps**:\n\n### 1. Configure the secret\n\nGo to **Settings \u003e Secrets and variables \u003e Actions \u003e New repository secret** and add the key for your chosen provider:\n\n| Provider | Secret name |\n| :--- | :--- |\n| OpenRouter | `OPENROUTER_API_KEY` |\n| OpenAI | `OPENAI_API_KEY` |\n| Google Gemini | `GEMINI_API_KEY` |\n| Anthropic | `ANTHROPIC_API_KEY` |\n\n### 2. Create the workflow\n\nCreate the file `.github/workflows/iara-review.yml`.\n\n**With OpenRouter (default, free models):**\n\n```yaml\nname: Iara Code Review\n\non:\n  pull_request:\n    types: [opened, synchronize]\n\npermissions:\n  pull-requests: write\n  contents: read\n\njobs:\n  review:\n    runs-on: ubuntu-latest\n    name: AI Code Review\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Run Iara Code Review\n        uses: felipefernandes/iara@main\n        with:\n          openrouter_api_key: ${{ secrets.OPENROUTER_API_KEY }}\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\n**With Anthropic Claude:**\n\n```yaml\n      - name: Run Iara Code Review\n        uses: felipefernandes/iara@main\n        with:\n          provider: anthropic\n          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}\n          model: \"claude-sonnet-4-5-20250929\"\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\n**With OpenAI:**\n\n```yaml\n      - name: Run Iara Code Review\n        uses: felipefernandes/iara@main\n        with:\n          provider: openai\n          openai_api_key: ${{ secrets.OPENAI_API_KEY }}\n          model: \"gpt-4o\"\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\n**With Google Gemini:**\n\n```yaml\n      - name: Run Iara Code Review\n        uses: felipefernandes/iara@main\n        with:\n          provider: gemini\n          gemini_api_key: ${{ secrets.GEMINI_API_KEY }}\n          model: \"gemini-2.5-flash\"\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\nIara will automatically:\n\n- Review the Pull Request diff\n- Post a comment with the review result\n\n### All available inputs\n\n```yaml\n- uses: felipefernandes/iara@main\n  with:\n    provider: \"openrouter\"                         # openrouter (default), openai, gemini, anthropic\n    openrouter_api_key: ${{ secrets.OPENROUTER_API_KEY }}  # when provider=openrouter\n    openai_api_key: ${{ secrets.OPENAI_API_KEY }}          # when provider=openai\n    gemini_api_key: ${{ secrets.GEMINI_API_KEY }}          # when provider=gemini\n    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}    # when provider=anthropic\n    model: \"google/gemini-2.0-flash-exp:free\"     # override model\n    config_path: \".iara.json\"                     # config path (default: .iara.json)\n    post_comment: \"true\"                           # post comment on PR (default: true)\n    language: \"en\"                                 # review language\n    index_codebase: \"true\"                         # enable RAG memory (default: false)\n```\n\n---\n\n## 🦊 GitLab Integration\n\n### 1. Configure variables\n\nGo to **Settings \u003e CI/CD \u003e Variables** and add:\n\n- The key for your provider (e.g., `OPENROUTER_API_KEY`, `ANTHROPIC_API_KEY`, etc.)\n- `IARA_PROVIDER`: the provider name (e.g., `anthropic`) — omit for OpenRouter default\n- `GITLAB_TOKEN`: Personal/Project Access Token with `api` scope (required for MR comments)\n\n### 2. Add to `.gitlab-ci.yml`\n\n```yaml\nstages:\n  - review\n\niara_code_review:\n  stage: review\n  image: python:3.11-slim\n  script:\n    - apt-get update \u0026\u0026 apt-get install -y --no-install-recommends git curl\n    - pip install iara-reviewer\n    - git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME\n    - export PR_DIFF=$(git diff origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME...$CI_COMMIT_SHA)\n    - REVIEW=$(iara 2\u003e/tmp/iara_stderr.txt) || true\n    - echo \"$REVIEW\"\n    - |\n      if [ -n \"$REVIEW\" ] \u0026\u0026 [ -n \"$GITLAB_TOKEN\" ]; then\n        PAYLOAD=$(python3 -c \"\n      import sys, json\n      review = '''$REVIEW'''\n      body = '## 🧜‍♀️ Iara Code Review\\n\\n' + review + '\\n\\n---\\n*Reviewed by Iara - AI Code Reviewer*'\n      print(json.dumps({'body': body}))\n      \")\n        curl -s -X POST \\\n          -H \"PRIVATE-TOKEN: $GITLAB_TOKEN\" \\\n          -H \"Content-Type: application/json\" \\\n          -d \"$PAYLOAD\" \\\n          \"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests/${CI_MERGE_REQUEST_IID}/notes\"\n      fi\n  allow_failure: true\n  rules:\n    - if: $CI_PIPELINE_SOURCE == \"merge_request_event\"\n```\n\nIara will automatically:\n\n- Review the Merge Request diff\n- Post a comment with the review result on the MR\n\nA complete template is available at `gitlab-ci.yml`.\n\n---\n\n## 🐳 Docker Image (Pre-built)\n\nIara is available as a pre-built Docker image on **GitHub Container Registry (GHCR)**, which significantly speeds up CI/CD execution by eliminating dependency installation time.\n\n**Image:** `ghcr.io/felipefernandes/iara-bot-reviewer:latest`\n\n### Why use the Docker image?\n\n- ⚡ **Faster startup**: Skip `pip install` overhead — image pulls in seconds\n- 📦 **All dependencies included**: Python 3.11, RAG dependencies, git, curl, jq\n- 🔄 **Portable**: Works across GitHub Actions, GitLab CI, Jenkins, Bitbucket Pipelines, and more\n- 🔒 **Consistent environment**: Same runtime environment on every platform\n\n### Usage in GitHub Actions\n\nThe GitHub Action (`felipefernandes/iara@main`) **already uses this Docker image** automatically. No additional configuration needed!\n\nIf you want to use the Docker image directly:\n\n```yaml\nname: Iara Code Review\n\non:\n  pull_request:\n    types: [opened, synchronize]\n\npermissions:\n  pull-requests: write\n  contents: read\n\njobs:\n  review:\n    runs-on: ubuntu-latest\n    container:\n      image: ghcr.io/felipefernandes/iara-bot-reviewer:latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Run Iara Review\n        run: |\n          export PR_DIFF=$(curl -s -H \"Authorization: token $GITHUB_TOKEN\" \\\n            -H \"Accept: application/vnd.github.v3.diff\" \\\n            \"https://api.github.com/repos/$GITHUB_REPOSITORY/pulls/${{ github.event.pull_request.number }}\")\n          iara | python3 -m iara.post_comment \\\n            --token \"$GITHUB_TOKEN\" \\\n            --repo \"$GITHUB_REPOSITORY\" \\\n            --pr \"${{ github.event.pull_request.number }}\"\n        env:\n          OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\n### Usage in GitLab CI\n\n```yaml\nstages:\n  - review\n\niara_code_review:\n  stage: review\n  image: ghcr.io/felipefernandes/iara-bot-reviewer:latest\n  script:\n    - git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME\n    - export PR_DIFF=$(git diff origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME...$CI_COMMIT_SHA)\n    - REVIEW=$(iara) || true\n    - echo \"$REVIEW\"\n    - echo \"$REVIEW\" | python3 -m iara.post_comment --token \"$GITLAB_TOKEN\" --repo \"$CI_PROJECT_PATH\" --pr \"$CI_MERGE_REQUEST_IID\"\n  only:\n    - merge_requests\n  variables:\n    OPENROUTER_API_KEY: ${OPENROUTER_API_KEY}\n    GITLAB_TOKEN: ${GITLAB_TOKEN}\n```\n\n### Usage in Jenkins, CircleCI, or Any Docker-enabled CI\n\n```bash\ndocker run --rm \\\n  -e OPENROUTER_API_KEY=\"sk-or-...\" \\\n  -e PR_DIFF=\"$(git diff main...HEAD)\" \\\n  ghcr.io/felipefernandes/iara-bot-reviewer:latest\n```\n\n### Local Testing\n\nYou can test the Docker image locally before deploying to CI:\n\n```bash\n# Pull the image\ndocker pull ghcr.io/felipefernandes/iara-bot-reviewer:latest\n\n# Run a review\ndocker run --rm \\\n  -e OPENROUTER_API_KEY=\"sk-or-...\" \\\n  -e PR_DIFF=\"$(git diff main)\" \\\n  ghcr.io/felipefernandes/iara-bot-reviewer:latest\n```\n\n---\n\n## 🔧 Any CI (Jenkins, CircleCI, etc.)\n\n```bash\npip install iara-reviewer\n\n# OpenRouter (default)\nexport OPENROUTER_API_KEY=\"sk-or-...\"\ngit diff main...HEAD | iara\n\n# Anthropic Claude\nexport IARA_PROVIDER=\"anthropic\"\nexport ANTHROPIC_API_KEY=\"sk-ant-...\"\nexport IARA_MODEL=\"claude-sonnet-4-5-20250929\"\ngit diff main...HEAD | iara\n```\n\n---\n\n## 🧪 Tests\n\n```bash\npython -m unittest discover tests\n```\n\n## 📜 License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipefernandes%2Fiara","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffelipefernandes%2Fiara","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipefernandes%2Fiara/lists"}