AI PR Reviews with codebase-aware DeepAgents + ESLint, Ruff, golangci-lint and more. Install the GitHub App, open a PR, and BugViper clones the repo, builds a blast radius and call graph on the fly in an E2B sandbox, then posts a full review β inline comments, issue tracking, and a summary β with no friction.
| π€ AI DeepAgents | Codebase-aware agents that understand cross-file function interactions, not just isolated snippets |
| π«‘ Normal Mode | Single generalist agent β fast, efficient reviews for everyday PRs |
| π¬ Deep Mode | Three specialized sub-agents (correctness, security, performance) run in parallel for thorough analysis |
| ποΈ E2B Sandboxes | Secure isolated sandboxes to clone and review code β no access to your environment |
| π Blast Radius + Call Graph | Builds call graph on the fly so agents see the real impact of every change |
| π§ Third Party Static Analysis | ESLint, Ruff, golangci-lint β fast lint-only mode with support for Python, JS/TS, Go, and more |
| β Verifier Pass | Validates every finding against the actual diff β negates false positives and marks issues as: nitpick (low confidence), valid (high confidence), or outside_diff (not in the PR) |
| π Dedup | Deduplicates findings across batches and agents β same issue reported twice gets merged once |
| π§ Any LLM Model | Use any model β open source or closed source β via OpenRouter, Gemini, or MiniMax |
| π¬ Inline Comments | Posts high-confidence issues directly on the relevant lines in the PR |
| π Analytics Dashboard | Tracks bugs caught, resolved, merge times, and PRs reviewed per day |
| π Resolve Detection | Tracks whether previously reported issues were fixed in subsequent PRs β automatically marks issues as fixed when the same issue no longer appears |
| π Per-Repo Analytics | Stacked bar charts per repo for reviews per day, PRs reviewed, avg merge time, and addressed rate |
| π Issue Lifecycle | Full issue tracking β open, resolved, fixed β with per-issue GitHub comment linkage |
| βοΈ Cloud Run + Cloud Tasks | Production-ready deploy on GCP with async task dispatch |
| π§ Global Knowledgebase | Agents learn from review feedback across all repos β common issues and patterns get smarter over time |
| π Repo Knowledgebase | Per-repo memory so agents remember past issues and don't re-report the same things |
| π οΈ More Static Analysis | Adding more third-party tools: Hadolint, ShellCheck, Terraform (HCL), and more |
Comment
@bugviper full reviewon any PR and get a complete AI-powered code review β inline comments, issue tracking, and a summary posted back to GitHub.
Full.Review.mp4
- Trigger β User comments
@bugviper full reviewon a GitHub PR - Clone + Blast Radius β BugViper clones the repo at the PR head SHA into an E2B sandbox and generates a full call graph via tree-sitter to understand which files call which functions
- Scoring + Batching β Every changed file is scored for its blast radius (how many downstream callers it affects). Files are then grouped into small batches using Louvain community detection so that tightly-connected files are reviewed together
- Agent Review β In Normal mode, batches of 4 run sequentially through a single generalist agent. In Deep mode, batches of 2 run through 3 specialized sub-agents in parallel (Bug, Security, Performance), each in their own isolated E2B container
- Verifier Pass β Every finding from the agents is validated against the actual diff by a verifier agent. It removes false positives and classifies each issue as
valid,nitpick(low confidence), oroutside_diff - Dedup + Normalize β Duplicate findings across batches and agents are merged into a single entry
- Post to GitHub β High-confidence
validissues are posted as inline comments on the relevant lines; the full summary is posted as a PR review body
Real-world example: A large PR with 58 files was reviewed by splitting it into batches based on connected blast-radius components. In Deep mode, 3 agents (Bug, Security, Performance) ran in parallel across 2 batches at a time inside isolated E2B containers, with the verifier removing false positives before any comments were posted.
Comment
@bugviper run linton any PR for a fast static-analysis review using ESLint, Ruff, golangci-lint, and more β results posted back to GitHub in seconds.
- Trigger β User comments
@bugviper linton a GitHub PR - Queue β The request is dispatched to the review service via Cloud Tasks (or direct HTTP in local dev with
DEBUG=true) - Lint Execution β The configured linters (ESLint, Ruff, golangci-lint) run against the changed files in an isolated E2B sandbox
- Parse + Filter β Lint results are parsed and filtered to only issues that fall within the actual PR diff
- Post to GitHub β Findings are posted as inline comments on the relevant lines, with a summary comment on the PR
Note: Run Lint is designed for speed β no call graph, no AI agents, no batching. It's the fastest way to catch style violations, unused imports, and standard lint errors before merging.
Track your team's code review activity across all repos β bugs caught, resolved, merge times, and PRs reviewed per day.
The analytics dashboard aggregates data from all repos into a single view:
- Stat Cards β At a glance: total repos, PRs reviewed, reviews run, bugs caught, addressed rate, PRs per week, and average merge time
- Total Reviews per Day β Stacked bar chart with each repo as a colored segment, so you can see which repo generated the most review activity on any given day
- PRs Reviewed per Day β Stacked bar chart showing how many unique PRs were reviewed per day, broken down by repo
- Repository Comparison β Side-by-side bar charts comparing average merge time and addressed rate across all your repos
- Per-Repo Detail β Click into any repo to see its full analytics: daily bug trends, issue lifecycle, and individual PR history with full review run details
Every chart is interactive β hover for breakdowns and click to drill down.
Browse all your repos, inspect individual PR reviews, and track what issues the agents found β right from the dashboard.
Repo.mp4
- Repos list β The Repositories page shows every repo you've connected, with stats per repo: open issues, review count, fix rate percentage, and language badge
- Repo detail sheet β Click any repo to open a side panel with:
- Stats bar β total issues raised, resolved, PR count, fix rate, addressed rate, avg merge time, PRs per week, total reviews
- PR list β every reviewed PR with merge status, review count, open issues, and last review timestamp
- PR drill-down β Click a PR to expand its runs. Each run shows review type, duration, issue count, and a "View Details" button
- Run detail view β Opens a full breakdown of a single review run:
- Walkthrough β which files were modified
- Issues β each issue shows: severity (color-coded), category badge, issue type, confidence score, file location, description, impact, suggestion, and code snippet
- Positive findings β what the agent liked about your code
- Resolve tracking β if an issue was fixed in a later run, it shows as "Resolved" with a checkmark
Configure which linters run on your PRs β enable or disable tools, set config files, and manage supported file extensions.
Tools.mp4
| Tool | Languages | Config file |
|---|---|---|
| Ruff | Python (.py, .ipynb) |
pyproject.toml, ruff.toml, .ruff.toml |
| ESLint | JS/TS (.js, .ts, .jsx, .tsx, and more) |
eslint.config.js, .eslintrc, .eslintrc.json |
| golangci-lint | Go (.go, .go.mod) |
.golangci.yml, .golangci.yaml, .golangci.toml |
From the Dashboard β Tools page:
- Toggle each tool on or off β disabled tools are skipped during lint and full review
- Select config file β choose between auto-detected config files or a specific path
- View extensions β see which file extensions each tool covers
- Save β changes take effect on the next review immediately
More tools coming soon: Hadolint (Dockerfile), ShellCheck, Terraform (HCL).
- Review any PR β Bot posts a structured review (inline comments + summary) on every pull request
- Two review modes β
lint(fast, static analysis via ESLint, Ruff, golangci-lint, and more) andfull_review(deep AI analysis in an E2B sandbox) - Tracks progress β dashboards show bugs caught, resolved, merge times, and PRs reviewed per day across all repos
- GitHub App + OAuth β App for webhook events, Firebase GitHub OAuth for the dashboard
flowchart TD
USER["π€ User comments @bugviper<br/>on a GitHub PR"]
GH["GitHub<br/>Webhook Event"]
API["API Service (FastAPI)<br/>Port 8000"]
DECIDE{"DEBUG?"}
CT["Cloud Tasks<br/>codeReview Queue"]
DIRECT["Direct HTTP"]
RS["Review Service (Cloud Run)<br/>Port 8100"]
SANDBOX["E2B Sandbox<br/>Secure isolated environment"]
CLONE["Clone Repo<br/>at PR head SHA"]
CALLGRAPH["Call Graph<br/>via tree-sitter"]
SCORE["Score Files<br/>by blast radius"]
BATCH["Batch Files<br/>Louvain community detection"]
AGENTS{"Review Mode?"}
NORMAL["Normal Mode<br/>4 batches Β· 1 generalist agent"]
DEEP["Deep Mode<br/>2 batches Β· 3 agents (Bug Β· Security Β· Performance)<br/>running in parallel"]
LINT["Lint<br/>ESLint Β· Ruff Β· golangci-lint"]
VERIFIER["Verifier Pass<br/>Validates findings vs diff<br/>β valid Β· nitpick Β· outside_diff"]
DEDUP["Dedup + Normalize<br/>Merges duplicates across batches"]
GITHUB["GitHub PR<br/>Inline comments + review body"]
FIRESTORE["Firestore<br/>Users Β· PRs Β· Reviews Β· Analytics"]
DASHBOARD["Frontend (Next.js)<br/>Port 3000"]
USER --> GH
GH --> API
API --> DECIDE
DECIDE -->|"DEBUG=false"| CT
DECIDE -->|"DEBUG=true"| DIRECT
CT --> RS
DIRECT --> RS
RS --> SANDBOX
SANDBOX --> CLONE
CLONE --> CALLGRAPH
CALLGRAPH --> SCORE
SCORE --> BATCH
BATCH --> AGENTS
AGENTS -->|normal| NORMAL
AGENTS -->|deep| DEEP
NORMAL --> LINT
DEEP --> LINT
LINT --> VERIFIER
VERIFIER --> DEDUP
DEDUP --> GITHUB
DEDUP --> FIRESTORE
FIRESTORE --> DASHBOARD
Backend: Python 3.13 Β· FastAPI Β· firebase-admin Β· google-cloud-tasks Β· langchain Β· openai Β· e2b
Frontend: Next.js 16 (App Router) Β· React 19 Β· TypeScript Β· Tailwind CSS v4 Β· Recharts Β· Firebase Auth (GitHub OAuth) Β· shadcn/ui
AI: DeepAgent with 3 specialized sub-agents (correctness, security, performance) running in E2B sandboxes; verifier pass validates findings; Louvain community detection for batch sizing
Deploy: Docker Β· Cloud Build Β· Cloud Run Β· Cloud Tasks
BugViper/
βββ apps/frontend/ Next.js dashboard
β βββ app/(protected)/ Auth-gated pages (dashboard, repos, tools)
β βββ components/ Sidebar, Header, UI primitives
β βββ lib/ API client, Firebase auth, utils
βββ src/
β βββ api/ FastAPI backend
β β βββ routers/ webhook, repos, analytics, auth, tools
β β βββ services/ Cloud Tasks, review orchestration
β βββ ai_code_review/ Review worker service
β β βββ pipeline.py Main review pipeline (normal mode)
β β βββ deep_pipeline.py Deep mode (3 sub-agents)
β β βββ agent.py Agent factory
β β βββ sandbox.py E2B sandbox lifecycle
β β βββ batch.py Louvain community batching
β β βββ prompts.py All system/user prompts
β β βββ normalize.py Finding validation
β β βββ tracking.py Firebase state updates
β βββ common/ Shared across all services
β β βββ firebase_service.py Firestore operations
β β βββ github_client.py GitHub API wrapper
βββ infra/
β βββ docker/ Dockerfiles (api, review, frontend)
β βββ cloudbuild/ Cloud Build + Cloud Run deploy configs
βββ scripts/
β βββ seed_demo_data.py Demo analytics data generator
β βββ migrate_analytics.py Schema migration
βββ tests/ pytest unit tests
βββ start.sh Local dev launcher
# Clone and install
git clone https://github.com/MabudAlam/BugViper.git
cd BugViper
uv sync
cd apps/frontend && npm install && cd ../..
cp .env.example .env
# Configure .env with your keys (see SETUP.md)
# Then launch everything:
./start.shThis starts:
- API on port 8000 (FastAPI β webhooks + REST)
- Review Service on port 8100 (AI review pipeline)
- Frontend on port 3000 (Next.js dashboard)
- Ngrok tunnel (for local webhook testing)
| Endpoint | Description |
|---|---|
POST /api/v1/webhook |
GitHub webhook receiver (PR events, comments) |
GET /api/v1/repos/overview |
List repos with aggregated stats |
GET /api/v1/repos/{owner}/{repo}/analytics |
Per-repo analytics with daily breakdown |
GET /api/v1/repos/{owner}/{repo}/prs |
List PRs for a repo |
GET /api/v1/repos/{owner}/{repo}/prs/{pr}/reviews |
List review runs for a PR |
GET /api/v1/repos/{owner}/{repo}/prs/{pr}/reviews/{run} |
Full review run detail with issues |
PUT /api/v1/tools/config |
Save linter tool configuration |
POST /api/v1/auth/login |
Authenticate with GitHub OAuth token |
GET /api/v1/dashboard/analytics |
Aggregated dashboard analytics |