GitHub App for automated code review using Rigour Bot is a GitHub App that automatically analyzes your pull requests using the Rigour High-Fidelity Analysis Engine. Unlike basic linters, Rigour performs deep AST analysis, architectural drift detection, and security pattern matching to ensure your code meets the highest engineering standards.
Unlike other bots that require full read access or clone your entire repository, Rigour Bot uses a Sparse Sync strategy:
- Surgical Fetching: Only files involved in the pull request are fetched.
- Volatile Storage: Files are written to a temporary, non-persistent memory workspace.
- Zero Drift Persistence: Your entire codebase is never cloned or stored on our servers.
- High-Fidelity Context: Provides the engine just enough context to perform deep AST and Security checks without the security risk of full access.
- π‘οΈ Security Drift - Detects hardcoded secrets, SQL injection risks
- π Pattern Drift - Catches console.logs, TODOs, deprecated APIs
- ποΈ Architecture Drift - Layer violations, circular dependencies
- Go to GitHub Marketplace - Rigour Bot
- Click "Install it for free"
- Select repositories to enable
- Done! Rigour will analyze your PRs automatically. No
rigour.tomlorrigour.ymlrequired β the bot uses high-fidelity defaults out of the box.
While Rigour Bot works without configuration, you can customize its behavior using a rigour.yml or rigour.toml file in your repository root. This is useful for:
- Overriding complexity thresholds
- Specifying custom protected paths
- Customizing AST gate rules
See the Configuration Reference for all available options.
-
Go to GitHub Settings β Developer settings β GitHub Apps β New GitHub App
-
Fill in the details:
Field Value App name Rigour Bot (or custom name) Homepage URL https://rigour.run Webhook URL https://your-server.com/webhooksWebhook secret Generate with openssl rand -hex 32 -
Set Permissions:
- Repository permissions:
- Checks: Read & write
- Contents: Read
- Pull requests: Read & write
- Metadata: Read
- Subscribe to events:
- Pull request
- Check run
- Repository permissions:
-
Generate and download a private key (.pem file)
-
Note your App ID from the app settings page
- Click deploy button
- Add environment variables (see below)
- Add your private key as
GITHUB_PRIVATE_KEY(full content, not path)
docker build -t rigour-bot .
docker run -p 3000:3000 \
-e GITHUB_APP_ID=123456 \
-e GITHUB_PRIVATE_KEY="$(cat private-key.pem)" \
-e GITHUB_WEBHOOK_SECRET=your-secret \
rigour-bot# Install dependencies
npm install
# Build
npm run build
# Run
npm startUse the deployment script to create/update a dedicated Azure Resource Group + Container App.
# Required secrets
export GITHUB_APP_ID=123456
export GITHUB_PRIVATE_KEY="$(cat private-key.pem)"
export GITHUB_WEBHOOK_SECRET=your-secret
# Required: globally unique Azure Container Registry name
export ACR_NAME=rigourbotacr12345
# Deploy
./scripts/deploy-azure.sh --app rigour-bot --rg rigour-rg --location eastusAfter deploy, set your GitHub App webhook URL to:
https://<container-app-fqdn>/webhooks
| Variable | Required | Description |
|---|---|---|
GITHUB_APP_ID |
β | Your GitHub App's ID |
GITHUB_PRIVATE_KEY_PATH |
β * | Path to .pem file |
GITHUB_PRIVATE_KEY |
β * | Full private key content (alternative to path) |
GITHUB_WEBHOOK_SECRET |
β | Webhook secret from app settings |
RIGOUR_API_URL |
β | Rigour MCP API (default: https://mcp.rigour.run/api) |
RIGOUR_EXEC_MODE |
β | Analysis mode: cli_first (default), cli_only, mcp_only |
RIGOUR_DEEP_ENABLED |
β | Enable deep analysis pipeline (true/false, default false) |
RIGOUR_DEEP_MODE |
β | Deep tier: off (default), deep, pro |
RIGOUR_PROVIDER |
β | Deep provider for BYOK mode (e.g. anthropic, openai, groq) |
RIGOUR_API_KEY |
β | Optional BYOK provider key for deep execution |
RIGOUR_API_BASE_URL |
β | Optional custom API base for provider proxy/self-host |
RIGOUR_MODEL_NAME |
β | Optional provider model override |
RIGOUR_TIMEOUT_MS |
β | Analysis timeout in ms (default: 90000) |
RIGOUR_MAX_CONCURRENCY |
β | Max concurrent analyses per instance (default: 2) |
RIGOUR_FALLBACK_TO_MCP |
β | On CLI error, fallback to MCP (true by default) |
RIGOUR_SECURITY_AUDIT_ENABLED |
β | Enables optional security-audit enrichment hooks |
RIGOUR_DEEP_ALLOWED_REPOS |
β | Comma-separated allowlist for deep mode repos (org/repo) |
RIGOUR_DEEP_ALLOWED_ORGS |
β | Comma-separated allowlist for deep mode orgs |
RIGOUR_MAX_CHANGED_LOC_FOR_DEEP |
β | Disable deep if PR churn exceeds threshold (default: 3000) |
PORT |
β | Server port (default: 3000) |
NODE_ENV |
β | development or production |
WEBHOOK_PROXY_URL |
β | Smee URL for local development |
*Use either GITHUB_PRIVATE_KEY_PATH or GITHUB_PRIVATE_KEY, not both.
- Default model is managed key for standard operation.
- BYOK is optional via
RIGOUR_API_KEY+RIGOUR_PROVIDER. - Runtime logs redact configured secrets and provider tokens.
- Health/readiness expose runtime capability status (
cli_ready,mcp_ready) at/healthand/ready.
- Public repository - Your bot code must be public
- Logo - 200x200px PNG or JPG (no transparency)
- README - Clear description with screenshots
- Terms of Service - Link to your ToS
- Privacy Policy - Link to your privacy policy
- Support contact - Email or URL
- Go to your GitHub App settings
- Click "List in Marketplace" in the sidebar
- Fill in the listing details:
- Primary category: Code review
- Secondary category: Security
- Supported languages: All
- Add pricing plans:
- Free: Up to 3 private repos
- Pro ($9/mo): Unlimited repos + priority analysis
- Enterprise: Custom
- Submit for review (takes 1-3 business days)
- Add screenshots showing check runs and review comments
- Include a demo GIF of the bot in action
- List all detected drift types
- Mention integration with Rigour MCP
- Create a new channel at https://smee.io
- Add the URL to your
.env:WEBHOOK_PROXY_URL=https://smee.io/your-channel-id
- Use the Smee URL as your GitHub App's webhook URL
- Run
npm run dev
# Run tests
npm test
# Lint
npm run lintrigour-bot/
βββ src/
β βββ index.ts # Express server + graceful shutdown
β βββ config.ts # Environment configuration
β βββ handlers/
β β βββ webhooks.ts # GitHub webhook routing
β β βββ pull-request.ts # PR analysis orchestration
β βββ services/
β β βββ github.ts # GitHub API (Checks, Reviews)
β β βββ rigour.ts # Rigour MCP + local analysis
β βββ utils/
β βββ smee.ts # Smee proxy for dev
βββ Dockerfile
βββ package.json
| Type | Severity | Description |
|---|---|---|
security-hardcoded-secret |
π΄ Error | Hardcoded passwords, API keys, tokens |
security-sql-injection |
π΄ Error | String concatenation in SQL queries |
pattern-console-log |
π‘ Warning | Console statements in production code |
stale-react-lifecycle |
π‘ Warning | Deprecated React lifecycle methods |
pattern-todo-comment |
π΅ Info | TODO/FIXME/HACK comments |
If Rigour Bot is installed on your repository but you don't see any activity on your PRs:
- Check Railway Logs: Ensure your bot service is running and not crashing.
- Verify Environment Variables: Make sure
GITHUB_APP_ID,GITHUB_PRIVATE_KEY, andGITHUB_WEBHOOK_SECRETare correctly set. - Webhook Visibility: If self-hosting, ensure your server is reachable from GitHub. Check the "Advanced" tab in your GitHub App settings for webhook delivery logs.
- Permissions: Go to your GitHub App settings and ensure "Read & Write" access is granted for Checks and Pull Requests.
You might see logs indicating a config file wasn't found. This is normal behavior. Rigour Bot will automatically fall back to its internal default quality gates if no configuration file is present.
| Endpoint | Description |
|---|---|
GET /health |
Health check (returns version) |
GET /ready |
Readiness probe for k8s |
POST /webhooks |
GitHub webhook receiver |
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing) - Make your changes
- Run tests (
npm test) - Submit a pull request
MIT Β© Rigour Labs
Website β’ Docs β’ MCP Server