# Herald Herald is a Gitea bot that performs automated AI-powered code reviews on pull requests using [OpenRouter](https://openrouter.ai/). ## Features - Listens for Gitea webhook events and triggers code reviews on pull request comments - Streams reviews back to Gitea as PR comments - Concurrent review processing with configurable parallelism - Graceful shutdown — in-progress reviews finish before the process exits - Error tracking via Sentry - Tiny memory footprint (~4MB) thanks to Rust ## Installation **Requirements:** Rust toolchain ([rustup.rs](https://rustup.rs)) ```sh cargo build --release ./target/release/herald ``` Herald reads its configuration from environment variables (a `.env` file is supported): | Variable | Description | |---|---| | `HTTP_PORT` | Port to listen on | | `BOT_NAME` | The bot's Gitea username (used to detect mentions) | | `WEBHOOK_SIG_HEADER_SECRET` | Gitea webhook secret for signature verification | | `OPEN_ROUTER_API_KEY` | OpenRouter API key | | `OPEN_ROUTER_MODEL` | Model to use (e.g. `deepseek/deepseek-v4-flash`) | | `OPEN_ROUTER_TIMEOUT` | OpenRouter request timeout in seconds | | `BOT_MAX_CONCURRENT` | Maximum number of concurrent reviews | | `GITEA_URL` | Base URL of your Gitea instance | | `GITEA_TOKEN` | Gitea API token | | `GITEA_TIMEOUT` | Gitea API request timeout in seconds | | `SENTRY_DSN` | *(optional)* Sentry DSN for error tracking | | `RUST_LOG` | *(optional)* Log level, defaults to `info` | ## Development The easiest way to get started is with the provided [Dev Container](https://containers.dev/) (VS Code or Zed with the dev container extension). Open the project and reopen it in the container — the Rust toolchain is pre-installed. **Without Dev Container**, you just need a Rust toolchain: ```sh rustup toolchain install stable cargo run ``` Copy `.env.example` to `.env` and fill in your values before running.