dashboardGuide
online

capabilities.guide

Gitvora capabilities

Product reference — GitHub integration, AI routing, Model Lab, streaming, merge controls, multi-commit reviews, and every dashboard page.

You are viewing the in-app guide. Share the public docs with teammates who are not logged in.

Overview

Gitvora is AI code governance for GitHub pull requests. When a PR opens or someone runs a bot command, Gitvora fetches the cumulative diff (all commits vs base), routes it through Ollama or OpenRouter, scores risk, and posts findings back to GitHub.

  1. Webhook, bot command, or dashboard triggers a review job
  2. PR refreshed from GitHub — latest HEAD, files, and commits
  3. AI routed local vs cloud; findings parsed and validated against the diff
  4. Formatted PR comment + optional GitHub Check Run (open PRs only)
  5. Dashboard shows live progress, findings (open/fixed), timestamps, audit trail

GitHub & bot

Install the GitHub App on your org or account. PR comments use @gitvora-bot.

CommandType
@gitvora-bot reviewstandard
@gitvora-bot review securitysecurity
@gitvora-bot review deepdeep
@gitvora-bot explainexplain
@gitvora-bot riskrisk
@gitvora-bot testtest
@gitvora-bot override <token>admin merge override (open PRs)
@gitvora-bot helpcommand list

When commands work

PR statusBot / dashboard reviewCheck run
OpenYesYes (merge gate)
MergedYes — comment onlySkipped
Closed (not merged)NoNo

On-demand reviews always use the full PR diff at current HEAD — not a single commit. New pushes on an open PR are included when you re-run a review.

Review types

TypeFocusRouting (hybrid)
standardBugs, style, performanceLocal on small PRs
securityInjection, secrets, auth gapsCloud
deepArchitecture, cross-file impactCloud
explainPlain-English summaryLocal
riskScore breakdownLocal
testMissing tests, edge casesLocal

Enable/disable each type and assign models in Infrastructure. Trigger from GitHub comments or the PR detail page.

Bot comment format

  • Summary table — verdict, risk, lines, files, commits, HEAD SHA, model, runtime, tokens
  • Findings as markdown headings (severity · type · file:line)
  • Collapsible review metadata block
  • Note when hallucinated findings were dropped (wrong file/line)

Context-aware reviews (roadmap)

Today Gitvora reviews are diff-first: the model sees patches, commits, and repo name. It infers framework from file extensions — not from package.json, path rules, or related files.

Gap vs CodeRabbit-style context

Competitors detect stack (Next.js, Prisma, Vitest), pull linked issues, fetch callers/tests, run linters, and apply per-path instructions. Full gap analysis and phased plan: docs/CONTEXT_AWARE_REVIEWS.md.

PhaseDeliverable
0 (quick)PR title/body, branches, prior findings in prompt
1Project context profile — package.json, frameworks, test runner
2Path-based review rules + optional gitvora.yaml
3Related files (callers, tests) for deep reviews
4Linters, verification agents, team learnings

AI & routing

Reviews run in a background worker (BullMQ). The webhook returns immediately; inference is async so proxy timeouts do not block reviews.

Inference modes

ModeBehavior
localAll reviews use Ollama — fails clearly if offline (no silent cloud fallback)
cloudAll reviews use the configured cloud model (Groq or OpenRouter)
hybridHeuristics pick tier per PR (recommended)

Auto routing — decision order

When a review action's tier is Auto, conditions are evaluated top to bottom; first match wins:

#ConditionRoute
1Per-action tier override = local or cloudForce that tier
2inference_mode = cloudCloud
3inference_mode = localLocal (Ollama)
4Review type security or deepCloud
5Diff > escalation threshold (default 400 lines)Cloud
6Sensitive file path (auth, payment, .env, secret, token…)Cloud
7Everything elseLocal (Ollama)

Groq free-tier models

Full catalog with RPM / RPD / TPM / TPD lives in Infrastructure → model-catalog (DB-backed, refreshed on seed).

ModelTPDTPMBest for
llama-3.1-8b-instant500K6KDefault routine reviews (recommended)
qwen/qwen3-32b500K6K60 RPM — burst throughput
openai/gpt-oss-120b200K8KDeep PRs only — not default (slower, lower TPD)
openai/gpt-oss-20b200K8KMid-tier quality
qwen/qwen3.6-27b200K8KMedium PRs
llama-3.3-70b-versatile100K6KSecurity / deep

Cloud provider routing

Model nameProviderAPI key
llama-3.1-8b-instantGroqGROQ_API_KEY
openai/gpt-oss-120bGroq (catalog)GROQ_API_KEY
qwen/qwen3-32bGroq (catalog)GROQ_API_KEY
anthropic/claude-3.5-sonnetOpenRouterOPENROUTER_API_KEY

Quality safeguards

  • Findings validated against the diff — bogus line numbers dropped
  • Temperature 0.1 for consistent JSON output
  • Webhook dedup: same PR + type + HEAD SHA skips duplicate auto-review
  • Pending duplicate review jobs cancelled when a newer one is queued
  • Groq 429 rate limits retried up to 3× with Retry-After header

Model overrides

All models are configurable in Infrastructure. Nothing is hardcoded at runtime — use dropdowns or type any slug.

SettingWhereEffect
ollama_model_defaultDefault models sectionGlobal local (Ollama) default
openrouter_modelDefault models sectionGlobal cloud primary (quality)
cloud_model_fastDefault models sectionGlobal cloud fast model for small routine PRs
cloud_fast_thresholdSystem configLines at or below which cloud may use fast model
cloud_fast_routingSystem configToggle smart primary/fast cloud routing
model_local_{type}Review actions tablePer-action local model override
model_cloud_{type}Review actions tablePer-action cloud primary override
model_cloud_fast_{type}Review actions tablePer-action cloud fast override
model_tier_{type}Review actions tableauto / local / cloud per review type

Smart cloud routing (primary + fast)

Set Cloud primary (e.g. llama-3.3-70b-versatile) and Cloud fast (e.g. llama-3.1-8b-instant). On the cloud tier, routine PRs ≤ cloud_fast_threshold lines use the fast model; security/deep and large diffs always use primary. Toggle with Cloud fast routing in system config.

Ollama local (self-hosted)

ModelComputeVRAMUse case
qwen2.5-coder:3bCPU / hybrid~2.5GBDefault local (recommended)
qwen2.5-coder:7b-instruct-q4_k_mGPU / hybrid~4.5GBBest local quality
qwen2.5-coder:1.5bCPU~1.2GBTiny PRs only

Switching to Claude

Set the cloud model to anthropic/claude-3.5-sonnet and add OPENROUTER_API_KEY. The slash in the name routes to OpenRouter automatically.

Chunked reviews

Large PRs are split into multiple inference calls so each stays within model context and completes before proxy timeouts.

SettingDefaultPurpose
chunk_threshold300Changed lines above which chunking starts
chunk_max_lines250Max changed lines per chunk (files batched together)
chunk_max_chars15000Max diff chars per chunk (Groq free tier ~6K token cap)
REVIEW_WORKER_CONCURRENCY1Max parallel review jobs (env var on API)

Multiple small files are batched into one chunk until the line/char budget is reached (avoids one API call per file). Large hunks split by class/function boundaries. Findings merge into one GitHub comment.

Groq free tier

Use llama-3.1-8b-instant for routine PRs (fast, ~500K TPD). Use llama-3.3-70b-versatile for security/deep only (~100K TPD). Each request must stay under ~6K tokens on free tier — keep chunk_max_chars at 15000 or lower.

Ollama streaming

Long Ollama runs behind Cloudflare can hit 524 timeout when the origin sends no bytes until generation finishes. Gitvora avoids this with streaming.

LayerBehavior
Production PR reviewsOllama always uses server-side stream: true — chunks keep the proxy alive
Model Lab — live tokensSSE pushes tokens to the browser as they generate
Model Lab — fallbackIf SSE fails, server-side stream still runs; full text returned when done
Cloud fallbackRemoved — local tier fails clearly if Ollama is down; configure cloud mode or hybrid instead
Groq rate limitsHTTP 429 retried up to 3× with Retry-After; job fails if still limited

Infra tip — Cloudflare + Ollama

Point OLLAMA_HOST / dashboard Ollama URL at a DNS-only (grey-cloud) subdomain, e.g. ollama-internal.yourdomain.com.

Do not proxy Ollama through orange-cloud ai.* hosts unless you accept 100s proxy limits.

Model Lab

Model Lab is a chat-style sandbox for testing inference without opening a PR. Power user role required.

ControlOptions
Review typestandard · security · deep · explain · risk · test
TierAuto (hybrid router) · Local (force Ollama) · Cloud (force Groq or OpenRouter by model name)
ModelDropdown of Ollama / Groq / OpenRouter models, or type any slug
Stream tokensLive SSE in UI; auto-fallback to server stream if SSE blocked
  • Auto — same routing logic as production reviews
  • Local — pick any pulled Ollama model; compare 3b vs 7b quality
  • Cloud — Groq models have no slash; OpenRouter models use provider/model format
  • Stream off — single blocking response (still streams Ollama server-side when tier is Local)

Disabling a repository

Power users can toggle a repo off on the Repositories page. This pauses automatic reviews without uninstalling the GitHub App.

While disabledBehavior
WebhooksStill received — PRs sync to dashboard
Auto-review on open / pushSkipped — no job queued
Welcome commentSkipped
BacklogNothing stored — missed reviews are not queued

Admins can Remove a repo to fully deactivate it in Gitvora (reviews, bot commands, scans). Use Restore to re-enable after adding it back on GitHub.

Admin removal

Admins can deactivate resources from Gitvora. GitHub App install is unchanged until you also update GitHub settings. The dashboard shows next steps after each action.

ActionWhereEffect
Remove repoRepositories → RemoveremovedAt set — no reviews, triggers, or bot commands
Disconnect orgRepos (group) or Access → InstallationsAll repos deactivated; grants cleared
Reconnect orgSame as DisconnectLink again + sync repos from GitHub
Sync reposRepos or Access → Sync reposPull GitHub App repo selection
Purge installationAccess → Show inactive → PurgeDelete disconnected record + repos
Revoke userAccess or Team → RevokeBlocked; sessions ended; grants cleared
Restore repoRepositories → RestoreRe-enable when org is connected

Slack & notifications

Use Channels only — each Slack webhook has scope (global, org, repo, or pattern) and event checkboxes. Routing rules are for AI model routing, not Slack.

EventWhen
Review triggeredJob queued (webhook, bot, dashboard)
Review completedVerdict ready — PASS / WARN / BLOCK
Review failedWorker error after retries

Channel Test sends immediately; live review events use the notify queue. If Test works but reviews do not alert, check Observability → notifications log. See docs: Slack Workflows (escalation, digests) and GitHub CI vs Gitvora checks.

Review time estimates

Gitvora shows estimated review duration from model + diff size + recent audit history. Estimates refine as more reviews complete.

WhereWhat you see
PR detail → Run buttonsest. per review type for this PR’s line count
Infrastructure → review actionsest. per type for ~100 lines
Model Lab sidebarest. for current prompt size and review type
Bot ack commentest. when you run @gitvora-bot review
Completed PR commentactual time vs estimate in Runtime row

Heuristic baselines: 3b on CPU, 7b on GPU, Groq/OpenRouter vary by model. Large PRs are chunked — estimates account for chunk count.

Prompt templates

Active prompts live in the database (PromptVersion). Package defaults are in packages/prompts/src/templates.ts.

ActionWhere
Edit promptDashboard → Prompts — creates new active version
Sync from packagePrompts → Sync all from package (or per-type reset)
Deploy overwritePROMPT_SYNC_ON_SEED=true pnpm db:seed
Status badgesin sync with package vs customized per review type

Production reviews always use the active DB prompt, not the file directly.

Finding follow-up

After a review, developers may push fixes. Gitvora tracks whether prior findings were acted on when a re-review runs (auto on push if Re-review on push is enabled, or manual trigger).

StatusMeaning
OPENCurrent finding from the latest review
ADDRESSEDPrior finding — likely fixed (not re-flagged, or line left diff)
SUPERSEDEDSame issue flagged again — replaced by a new OPEN row

What you see

SurfaceDetails
PR list2 open · 1 fixed · Opened / Updated / Reviewed timestamps
PR detail → FindingsOpen / Fixed / All filter; status badge; reported/fixed times
Latest review cardN new finding(s) · M prior fixed
Activity logPR_PUSHED (sha change), PR_REVIEWED (duration, model, addressed count)
Observability → AuditDetails column with model, findings, duration

“Fixed” is a heuristic from diff + re-review — not GitHub thread resolution. Existing findings default to OPEN until the next re-review reconciles them.

Merge gate

Without GitHub Team branch protection, a failed Gitvora Review check still signals blockers on free orgs. Optionally submits REQUEST_CHANGES on GitHub.

SettingDefaultEffect
Merge gateonPublish check run on each open-PR review
Block on BLOCKonCheck fails
Block severitiesCRITICAL, HIGHFail if finding at threshold
Request changes on failonGitHub review requests changes

Admins issue a one-time override token from the PR detail page; developer posts @gitvora-bot override <token> (open PRs only).

Dashboard pages

PageRolePurpose
OverviewDeveloper+Stats; recent PRs with risk, findings, reviewed time
Pull requestsDeveloper+List — open/fixed findings, Opened/Updated/Reviewed, repo filter
PR detailDeveloper+Findings filter, activity log (exact time + trigger info), files/commits, trigger reviews
RepositoriesDeveloper+Sync, enable/disable, scan, Add on GitHub, org admin actions
Risk & reportsDeveloper+Risk scores tab + Author activity (trends, by @author, review log)
InfrastructureDeveloper+Primary/fast cloud models, inference mode, merge gate, chunking
Model LabPower user+Tier, model, stream — interactive AI test
ObservabilityDeveloper+Webhooks, audit (details + timestamps), AI health, live stream
PromptsPower user+Versioned prompts; sync from packages/prompts templates
Routing rulesPower user+AI model routing (local vs cloud) — not Slack
ChannelsPower user+Slack, email, webhook destinations
GuideDeveloper+This page — product capabilities reference
Access controlAdminApprove users/installs, sidebar-by-role
TeamAdminInvites and roles
AccountDeveloper+Profile and password

Legacy redirects: /dashboard/ai → Infrastructure, /dashboard/audit → Observability.

Roles

RoleAccess
DEVELOPERPRs, repos, infrastructure, observability, guide
POWER_USER+ prompts, routing, channels, model lab
ADMIN+ access control, team, per-role sidebar config

GitHub App installers can be auto-approved and granted dashboard access so org admins see repos without manual contributor setup.

Repository docs

Full technical reference in the monorepo docs/ folder (same content as this guide, plus setup/deploy detail):

  • SYSTEM.mdMaster guide — how everything works (current + planned)
  • CAPABILITIES.mdProduct guide (markdown source)
  • CONTEXT_AWARE_REVIEWS.mdContext gap & roadmap vs competitors
  • SETUP.mdInstall and first run
  • ARCHITECTURE.mdData flow and deployment
  • GITHUB_APP.mdPermissions and webhooks
  • BOT_COMMANDS.mdBot reference
  • ACCESS_CONTROL.mdApprovals and blocking
  • ENV.mdEnvironment variables
  • OBSERVABILITY.mdHealth checks and logs

Where this guide lives

URLAudience
/Landing — marketing highlights + install CTA
/docsPublic — shareable, no login required
/dashboard/docsIn-app — operators configuring Gitvora
Guide — Gitvora Dashboard