Code governance & audit evidence
Write your engineering and security standards in plain language. PRGuard enforces them on every pull request and push, keeps a person in the decision, and leaves a record an assessor can check.
171 of 180 changes audited before they merged
Evidence that every change to Halcyon Payments’s code was governed: what was checked, what was excepted and by whom, and what was merged without a check.
Q3 2026, the last complete quarter. Whether a control is met is the assessor’s call.
Q3 2026
| Merged | Repository | Change | Written by | Merged by | Outcome |
|---|---|---|---|---|---|
| 24 Aug 2026, 15:10 | merchant-sdk | #683 Retry failed refunds | GitHub Copilot AI agent | Marcus Hale approved by 2 reviewers | Merged while failing1 error left open |
| 2 Sep 2026, 18:41 | risk-engine | Direct push a1f3c9e · 1 commit | Rohan Mehta Human | Rohan Mehta pushed straight to main | Merged while failing2 errors left open |
| 14 Sep 2026, 14:15 | risk-engine | #1335 Hotfix score cache | Daniel Okoye AI-assisted | Grace Chen approved by 1 reviewer | Bypassed[skip prguard] in the title |
| 15 Aug 2026, 05:53 | merchant-sdk | #668 Bump axios to 1.7.4 | Dependabot Bot or automation | Rohan Mehta approved by 2 reviewers | Not auditedout of credits |
A finding your team has decided to live with for a time: who asked, why, what limits the risk meanwhile, who approved it and until when. The approver is never the person who asked.
| Finding | Status | Asked by | Approved by | Until |
|---|---|---|---|---|
| A04 Cryptographic failuresmerchant-sdk · #624 · a test key in the test harness | Waiting for approval | Daniel Okoye29 Sep 2026 | Nobody yet | 31 Dec 2026asked for |
| A07 Authentication failuresmerchant-sdk · #679 · session id in a redirect | In force | Daniel Okoye20 Aug 2026 | Olivia Bennett20 Aug 2026 | 30 Nov 2026 |
| A01 Broken access controlrisk-engine · #1261 · score lookup by id | In force | Daniel Okoye7 Aug 2026 | Marcus Hale7 Aug 2026 | 31 Dec 2026 |
| A09 Logging failuresrisk-engine · #1198 · declines not logged | Endedfinding reopened | Grace Chen2 Jul 2026 | Olivia Bennett3 Jul 2026 | 30 Sep 2026 |
When an exception ends, its finding reopens by itself, so nothing is excused for longer than was agreed.
Classified from what a change shows: its author, its branch and its commit trailers. Every AI change still names the person who approved and merged it.
Covered means a rule is mapped to the article and audits ran with it. Whether the article is met is the assessor’s call.
| Article | Status | Why |
|---|---|---|
| Article 9Risk management system | Covered | standards/risk-model.md38 audits ran with it |
| Article 11Technical documentation | Covered | standards/engineering.md64 audits ran with it |
| Article 14Human oversight | Gap | No rule file is mappedA starter template is offered |
| Article 17Quality management system | Covered | standards/engineering.md64 audits ran with it |
One ZIP file per quarter with everything PRGuard recorded: every change that reached a main branch, the rules behind each control, sampled audits, the exceptions and AI registers, the policies and the journal. Your source code is never in it.
Q3 2026Ready
Every repository in scope · Marcus Hale · 6 Oct 2026 · 467 KB
83e970c9…eea3a30eQ2 2026Ready
Every repository in scope · Olivia Bennett · 3 Jul 2026 · 412 KB
5b17d2a4…90c3e18fOn their own machine, with no PRGuard account and only Python 3: every file is listed with its SHA-256 under one root hash, and the checker inside the pack confirms it.
$ python3 verify.py halcyon-q3-2026.zip --expect 83e970c9… VERIFIED files 100, each matching its hash signed by key prg-2c123dee76632438
Every change made in Assurance, and who made it. Entries can never be edited or deleted.
| Change | Event | When |
|---|---|---|
Worked out pull request #1380 on risk-engine: audited and passed by PRGuard | gate.resolved | 20 Oct 2026, 05:50 |
Worked out pull request #1377 on risk-engine: passed after a fix by PRGuard | gate.resolved | 19 Oct 2026, 16:57 |
Generated an evidence pack for Q3 2026 by Marcus Hale | pack.generated | 6 Oct 2026, 10:30 |
Signed off Q3 2026 by Olivia Bennett | attestation.signed | 5 Oct 2026, 16:02 |
An exception to a finding in risk-engine ran out on 30 Sep 2026, and the finding was reopened by PRGuard | waiver.expired | 1 Oct 2026, 04:30 |
Asked for an exception to a finding in merchant-sdk by Daniel Okoye | waiver.requested | 29 Sep 2026, 11:20 |
Switched on the policy “Ignore skip markers” by Olivia Bennett | policy.changed | 15 Sep 2026, 08:05 |
A skip marker in a pull request title or a commit message is ignored in every repository, so nobody can take a change past the audit by naming it.
An audit that scores below this fails its check, even when everything it found was a warning.
An error-level finding can be marked won’t fix only when an approved exception covers it.
Why a governance layer
A reviewer offers an opinion. A governance layer enforces your standards, keeps a person in the decision, and leaves evidence behind.
Plain-language rules, organisation-wide or per repository. Every finding names the rule it broke.
PRGuard drafts the fix; a developer approves it. Nothing merges on PRGuard’s word alone.
Every finding, fix and approval in append-only records, hashed on export, ready for your assessor. See the compliance view →
Every audited change is screened for hidden prompt-injection instructions before the AI reads it. How the screen works →
Pull request, direct push or an agent’s commit: the same standards apply. A required check holds the pull request; a direct push is audited once it lands, and Assurance keeps every change to your default branch on the record.
j.tan/hotfix-cache wants to merge 2 commits into main
Recorded for this pull request
Governance
Maintain complete control over your codebase without slowing down development. PRGuard automatically reviews, drafts fixes on request, and logs every action — keeping your team moving fast and your auditors happy.
Every approved fix is re-audited — and every step is logged.
A developer or an AI agent submits code. PRGuard runs its deterministic pre-scan, then checks the change against your custom plain-language rules.
If a standard is broken, you get more than an error. Ask PRGuard to fix it and, where the solution is clear, it drafts a patch to approve. Where judgement is needed, you get the rule, the reason, and a ready-to-paste prompt for your own AI assistant.
A human on your team reviews and approves the fix. Findings can also be assigned — to a teammate or to PRGuard’s AI — and tracked from open to fixed, or closed as won’t-fix. You always retain final control; PRGuard never merges on its own.
Cost control
Before any AI call, PRGuard estimates what the audit will cost. Over the limit you set for one audit, or over your remaining credits, and the audit is refused with nothing charged — PRGuard’s check on the change says why and by how much. A change PRGuard has already audited in that repository, with the same code and the same rules, gets the earlier result again at no charge.
Owners and admins set the limit; the dashboard shows what every audit cost.
Audited
Already audited, same code and rules? Reused, no charge
Refused
No AI call · Nothing charged · The reason on the check
See it run
Stop relying on memory and manual reviews. Unite engineering, security, and product around a single set of rules — enforced at the gate, on every PR and push.
Scenario: A developer opens a PR to add Stripe payments — and PRGuard checks it against the team’s standards, line by line. Each role’s rules run in turn below — or click any role to jump to what it catches.
This pull request introduces five error-level violations across security, compliance, architecture, and reliability — including unverified webhook input, card data written to logs, and a missing idempotency guard — plus two warnings on customer notification and test coverage. It should not merge until the error-level findings are resolved.
Overview
The diff adds a Stripe webhook handler in billing/webhooks.py, wiring payment events directly into the API view layer. The code processes events without verifying the signature, logs the full card number, leaks an exception message to the caller, writes to the database outside the service layer, and has no duplicate-event guard — with customer-notification and test-coverage gaps on top.
Key findings
Errors billing/webhooks.py: unverified Stripe signature, full PAN written to logs, a raw exception leaked in the 400 response, a direct DB write bypassing the service layer, and no idempotency guard — risking double charges.
Warnings billing/webhooks.py: no customer payment-confirmation email, and zero test coverage on the new payment path.
Recommendations
Stripe-Signature header with stripe.Webhook.construct_event(...) before processing.
PaymentService.record_charge(event) — no direct ORM calls from the view.
ProcessedEvent.objects.get_or_create(stripe_id=event.id).
notify_customer_payment(charge).
Direct database write bypasses the service layer. All mutations must go through PaymentService.
Stripe payload processed without verifying the Stripe-Signature header. Any caller can trigger payment events.
Full card number (PAN) written to logs in plain text. PCI-DSS v4.0 requires the PAN to be unreadable anywhere it is stored — including application logs.
Exception message returned verbatim in the HTTP 400 body — leaks internal stack details to potential attackers.
No duplicate event check. Stripe retries on timeout — without idempotency this will double-charge customers.
Charge recorded but no receipt email dispatched. Per spec, every successful payment must trigger a confirmation.
0% test coverage on this file. Team standard requires tests for all payment code paths before merge.
Language-agnostic
You shouldn’t need a different tool for every language in your codebase. PRGuard reviews the change itself — the diff, judged against your written standards, not a language-specific grammar. One rule written in plain language covers your modern Python services, your legacy PHP monolith, and everything in between.
Ten public demo repositories with real PRGuard findings — the same rules work in any language.
Context Studio
Write your team’s rules in plain language. No special syntax, no complicated configuration files.
Start from our industry-standard templates or write your own.
Context Studio
Manage the context files that define how your AI agents think and behave.
Architect
Security
Compliance
AppSec
SRE
Product
QA
SysAdmin
OWASP Top 10 Security Review
You MUST review every pull request for the following OWASP Top 10 risks:
Injection
Flag SQL, NoSQL, OS, or LDAP injection. Require parameterised queries.
Broken Authentication
Reject hardcoded credentials, weak session management, or missing MFA enforcement.
Sensitive Data Exposure
Ensure secrets, tokens, and PII are never committed. Require encryption at rest and in transit.
Broken Access Control
Verify authorisation checks on every endpoint. No direct object references without ownership validation.
Cross-Site Scripting (XSS)
Require output encoding. Flag innerHTML or dangerouslySetInnerHTML without sanitisation.
Insecure Deserialisation
Flag pickle.loads, yaml.load, or unserialize on untrusted input.
You NEVER approve a PR that introduces any of these risks without a documented mitigation plan.
Deep-Context Retrieval
PRGuard doesn’t make generic guesses. When a rule points at a file with @ref:, PRGuard fetches it from the PR’s target branch — so a pull request can never author the context it’s judged against — and condenses it to a compact skeleton: its public API, types, and key patterns, not the whole file.
The audit reasons against your actual interfaces, and the fixes it proposes call them correctly — for a fraction of the tokens the whole file would have cost.
finance/discounts.md
Discounts over 20% must go through the approval workflow — @ref:billing/discount_policy.py
# condensed to its public surfaceclass DiscountPolicy: APPROVAL_THRESHOLD = Decimal("0.20") def requires_approval(pct: Decimal) -> bool def approve(discount: Discount, approver: User)
Evidence
When an AI blocks a code change, the first question is “says who?” Most AI review answers with “trust us”. PRGuard answers with the record: the full conversation behind every audit, and a rule-by-rule account of what was enforced.
Illustrative excerpt
Stop arguing with a robot. Every step the AI took is on the record, in order, in plain language — each with its outcome stated, and the model’s own reasoning wherever it produced any. The one exception is the prompt-injection screen: it reports its verdict but not its reasoning, because publishing how it decides would be a guide to evading it.
Illustrative excerpt
Proof the standards you wrote are the standards being enforced. Which of your rules were in force — at the exact version that ran, one click away — which were set aside and why, and what PRGuard’s deterministic checks flagged. Every violation the AI claims is cross-checked against the findings actually raised, so you always know which statements are record and which are the model’s word.
Your code is never kept.
PRGuard never keeps your source code. The record holds only names, sizes and fingerprints, and links back to GitHub for the content — where your own repository permissions decide who may read it.
The AI’s reasoning is shown for what it is: the model’s own narration, labelled as such — never presented as proof of how an answer was reached.
Explore the evidence record →Assurance
Every change PRGuard governs leaves evidence behind. Assurance turns it into the pack your auditor asks for — mapped to the controls they test, complete for the period, and verifiable without trusting us.
Coverage ledger
Every merge to main or a release branch accounted for: governed, excepted, or disclosed as bypassed. A gap is listed with its reason, not hidden.
Exceptions register
Who approved what, why, and until when. The approver is never the person who asked, and when an exception ends the finding reopens.
AI change register
Which changes an AI tool wrote or helped write, which model reviewed them, and which person approved and merged each. Origin is classified from observable signals, such as a commit trailer or a bot’s login.
Evidence Pack
One ZIP for the period, with a hashed manifest. Your auditor checks it offline with prguard verify, or with the verifier inside the pack. Your code is never in it.
What the regulation asks.
The EU AI Act doesn’t regulate your code review. It regulates the systems you build with it — and your auditor will ask how AI-written code got into them. The Cyber Resilience Act asks the same question of your change process. This is the answer, kept for you as you ship.
Assurance produces evidence for the controls an assessor tests. Whether a control is met is the assessor’s judgement: no software makes you compliant.
Roles
Whether you're shipping code, securing it, or accountable for it — PRGuard fits your workflow.
Engineers
Get fast, automated feedback on every change — PR or push. Catch architectural drift the moment it's introduced, and spend less time waiting on review.
Read more →
Architects
Define your ideal coding patterns in plain language. PRGuard automatically enforces your architecture across every repository, keeping the foundation strong.
Read more →
Security & AppSec
Enable OWASP standards and hardcoded-secret checks and they run on every PR and push — every finding leaving an attributable record for your security and compliance assessors to evaluate.
Read more →
SRE & QA
Enforce idempotency, error-handling, and test-coverage standards automatically. Stop unreliable code from reaching production and causing late-night incidents.
Read more →
Product & Compliance
Turn complex regulatory requirements into automated rules. Ensure every new feature respects your core product flows and legal constraints without slowing down the team.
Read more →
CTOs, VPs & Executives
Track your organisation’s average governance score and audit trends from one overview — and see exactly where your AI spend is going, credit by credit.
Read more →
AI-Assisted Remediation
Not every finding can be auto-fixed — and PRGuard never pretends otherwise.
But when the solution is clear, PRGuard drafts the exact code patch for your team to approve.
PRGuard pinpoints the exact file and line of code breaking your rules.
Webhook signature not verified
billing/webhooks.py · line 14 · Security
Ask PRGuard to fix it and it drafts the patch. On a pull request the fix lands on that PR’s own branch; on a direct push it opens a fix PR of its own. A human always has the final say before anything merges — and admins can make that mandatory across the whole org.
fix: verify webhook signature before processing
Pushed · j.doe/add-stripe-webhook · prguard-dev-app[bot]
PRGuard automatically re-audits the fix branch to confirm the finding is resolved, so you can merge with confidence.
PRGuard / audit — passing
0 errors · 0 warnings · All findings resolved
@csrf_exemptdef stripe_webhook(request): # Stripe POSTs a signed event on every billing change payload = request.body # no signature check — anyone can POST a forged event event = json.loads(payload) # Hand the event to the right service if event["type"] == "invoice.paid": handle_payment(event["data"]["object"]) return HttpResponse(status=200)
@csrf_exemptdef stripe_webhook(request): # Stripe POSTs a signed event on every billing change payload = request.body sig = request.headers.get("Stripe-Signature") # construct_event() verifies the signature, raising on a bad one try: event = stripe.Webhook.construct_event( payload, sig, settings.STRIPE_WEBHOOK_SECRET ) except stripe.error.SignatureVerificationError: return HttpResponse(status=400) # Hand the event to the right service if event["type"] == "invoice.paid": handle_payment(event["data"]["object"]) return HttpResponse(status=200)
Batch remediation
Don’t overwhelm your team with notifications. Select several findings in a file and PRGuard bundles them into a single, clean pull request. It first applies any patch the audit already verified, with no model call, then fixes the rest together in one pass, falling back to fixing each in sequence if that doesn’t hold the file’s score. Either way the batch is re-audited before the PR opens, to confirm the score did not regress.
Findings · billing/webhooks.py
3 selected
fix: resolve 3 governance findings
Open · prguard/batch-fixes · prguard-dev-app[bot]
Automatic escalation
Your primary model gets three attempts to land a patch that holds the file’s score. If it can’t, PRGuard makes one rescue pass with an escalation model you nominate — even one from a different provider — then reports back instead of forcing anything. Security fixes are the exception: they are never dropped just to protect a score.
Checks · fix-webhook-signature
Attempts 1–3 · primary model
Score gate not met
Rescue pass · escalation model your pick
Clean patch · all findings resolved
One rescue pass only — then PRGuard reports back instead of forcing anything.
Structured findings
Every finding is a structured record — file, line, severity, the rule it broke, and a ai_prompt ready to paste into Copilot, Cursor or Claude Code. Assign it to a teammate and it travels with the assignment, tracked from open to fixed. It’s the same bundle PRGuard’s auto-fix runs on.
{
"schema": "prguard.remediation/v1",
"verdict": "FAIL",
"findings": [
{
"file": "billing/webhooks.py",
"line": 14,
"severity": "ERROR",
"rule": "signature-verification",
"suggestion": "Verify the Stripe-Signature before processing",
"ai_prompt": "Edit billing/webhooks.py line 14: verify the
Stripe-Signature header with
stripe.Webhook.construct_event() before processing",
"fix_kind": "prompt_only"
}
]
}
Safety & Control
AI-assisted fixes are a tool and not a takeover. The AI is screened for manipulation, a person triggers every change, and nothing lands without your say-so — these guardrails are baked in, not optional settings.
Before the AI reviews a single line, a gatekeeper pass screens every change for prompt-injection attempts — so malicious instructions hidden in a diff can’t hijack the audit. How the screen works →
PRGuard doesn’t run wild fixing things on its own. A developer assigns each finding to the AI by hand — it only acts when a human on your team explicitly asks it to.
Auto-fix is enabled on every repository out of the box. An owner or admin can switch it off per repo at any time — your cost control. While it’s on, any developer can hand a finding to the AI, since they’re the one reviewing the result.
Fixes land as a reviewable pull request by default — you read the diff and merge on your terms. Org admins can make PR-only delivery a hard rule, so “a human approves every fix” is policy, not preference.
If a patch can’t apply cleanly — the file moved, a conflict exists, or the diff is ambiguous — PRGuard skips that finding and reports it for human review. No force-push, no guesswork.
Every finding, decision, and fix is permanently recorded and attributable. No software makes you compliant by itself — but this is the audit trail you hand your assessor to show your standards were enforced.
VS Code extension
The same audit that reviews your pull requests, run on your changes before you commit. Findings land at the exact line, verified fixes apply in one click, and anything else goes to your AI assistant with the full explanation.
One key from your account settings, stored securely by VS Code. Pick your organisation once per workspace.
The rules PRGuard reviews against, kept current in a folder you choose — ready for you and your coding assistant to read.
Stage your changes and run the check. Same gatekeeper, same standards, same static scan — billed like a PR audit, and never posted to GitHub. Findings tick themselves off as your fixes land.
Insights
Stop digging through commit logs or interrupting your developers. Ask “What changed in the payments module this month?” and get a plain-language answer — with citations that link to the exact audit records.
What changed in the payments module in the last 30 days?
Three pull requests touched payments/ in the query window. The retry handler was rewritten and passed its audit [1]; a webhook change shipped with one warning about missing idempotency checks, fixed two days later by an auto-fix PR [2]; a refund-flow change is still carrying an open error-severity finding [3].
Sources: [1] PR #142 · [2] PR #147 · [3] PR #151 — each links to its full audit record.
Who has been changing our auth code this quarter?
Nine audited changes touched apps/auth/ this quarter — seven of them by priya-r and tomn [1]. Two are worth a look: the session-expiry rewrite passed its audit with no findings [2], and PR #163 loosened the password-reset token check — flagged as a warning and fixed the same day by an auto-fix PR [3].
Sources: [1] 9 audits · [2] PR #158 · [3] PR #163 — each links to its full audit record.
Anything still open that should block Friday’s release?
Two findings are still open in the release window. The error-severity one: reports/export.py builds SQL by string concatenation — flagged six days ago, auto-fix PR raised but not yet merged [1]. The warning: the invite endpoint has no rate limit, and the finding is unassigned [2]. Every other finding in the window is fixed and re-audited [3].
Sources: [1] PR #171 · [2] PR #168 · [3] 14 audits — each links to its full audit record.
Every audited change records the files it touched and who shipped it — so “who has been changing our auth code?” is a question, not an afternoon of git archaeology.
Every finding carries its fix status, so answers cleanly separate “already fixed” from “still open” — exactly what a product or engineering manager needs to call a release.
Every claim traces back to an audit record. If the history doesn't cover something, the answer says so instead of guessing.
Included with the Pro, Pro Team and Enterprise plans — and included in the $10 trial, so you can try it before choosing a plan.
Answers cover what PRGuard has audited on your connected repositories, from the day you install it — your history builds as it runs.
Compare
PRGuard is designed to sit alongside your existing tools, not replace them. It enforces your team’s unique business logic, security rules, and house style — all written in plain language.
Here’s the honest comparison with the tools you may already run.
| Capability | PRGuard Deterministic pre-scan + your written standards, enforced | SonarQube Rule catalog & quality gates | Semgrep Code patterns authored in YAML | CodeRabbit AI feedback on each PR |
|---|---|---|---|---|
| Enforces standards you write in plain language | ✓ | — | — | ✓ |
| Judges the diff semantically, in any language | ✓ | — | — | ✓ |
| Verdict that can block a merge | ✓ | ✓ | ✓ | ✓ |
| Drafts fixes your team reviews & approves | ✓ | partial | partial | partial |
| Coverage & duplication metrics | — | ✓ | — | — |
| Screens the diff for prompt injection first | ✓ | — | — | — |
| Audit trail of every decision, with the AI’s reasoning | ✓ | — | — | — |
| Accounts for every merge to main or a release branch, including the ones that bypassed the gate | ✓ | — | — | — |
| Exceptions with a named approver and an expiry | ✓ | partial | partial | — |
| Register of AI-authored changes and the model that reviewed them | ✓ | — | — | — |
| Evidence mapped to the controls of the Cyber Resilience Act and the EU AI Act | ✓ | partial | partial | — |
| Evidence pack an auditor can verify offline | ✓ | — | — | — |
Compiled from each vendor’s public documentation, last reviewed September 2026. These tools ship continuously, so capabilities may have changed since — if anything here is out of date, tell us and we’ll fix it.
vs SonarQube
SonarQube is the spell-checker.
PRGuard is the editor.
Rules you write in plain language, not rules you pick from a catalog. Sonar’s analysis is deterministic where an LLM isn’t — a real trade-off, and why its coverage and duplication metrics are worth keeping. What a catalog can’t do is judge whether a change fits the way your team decided to build things.
Better together
Sonar keeps the deterministic floor; PRGuard enforces the standards only your team could write.
vs Semgrep
Semgrep is grep with a grammar.
PRGuard is a reviewer with your rulebook.
Patterns require configuration. PRGuard just requires a sentence. Semgrep is fast and precise where a rule genuinely is a pattern, and it drafts fixes of its own now. But each pattern is authored per language — one PRGuard sentence covers your whole stack, including the standards no pattern can express.
Better together
Patterns for the checks that truly are patterns; sentences for the standards that aren’t.
vs CodeRabbit
CodeRabbit gives you a review.
PRGuard gives you the record.
Both can block a merge. Only PRGuard screens the diff for injection first and keeps the model’s own reasoning on the record. CodeRabbit clones your repository to build its index; PRGuard never does — it reads the diff, and only the files your rules point at, from the branch you’re merging into. It also bills per developer seat where PRGuard bills usage, so adding reviewers costs nothing.
Better together
Let the assistant polish the code; PRGuard proves the standard was enforced.
vs Vanta & Drata
Vanta proves the lock exists.
PRGuard proves it was locked on every change.
Compliance platforms read your GitHub settings and record that branch protection is on. PRGuard records what happened to each change against your written standards: audited, excepted, or disclosed as bypassed.
Better together
Keep the compliance platform as the system of record for the audit, and hand it PRGuard’s evidence pack.
For open source
A security checkpoint for inbound contributions.
AI-generated PRs can look plausible while carrying hidden prompt injection. PRGuard screens every diff for manipulation, then audits it against your contribution standards — comment-only or full merge gating, chosen per repository.
See how it works →For compliance
Turn every code review into audit-ready evidence.
Every finding, fix, and approval lands in an append-only record — the trail you hand to a security or compliance review.
Read more →Pricing
No hidden fees, no surprise API bills — just the price you signed up for. See the output before you pay.
Prices in US dollars, billed by Stripe. Built in North Wales by Unifi Software Development Ltd, a UK-registered company. Prefer a 15-minute walkthrough first? Email us →
Credits
Spending stops at your allowance unless you top up
Model
Choose your AI model to control the cost per audit
Dashboard
Every token, credit and AI action, logged
2,000 AI credits included
Platform access
2,250 AI credits / month
Platform access
6,000 AI credits / month
Platform access
11,250 AI credits / month
Platform access
Custom deployment and migration support for large-scale engineering orgs.
Tell us a bit about your organisation and we’ll be in touch within one business day.
FAQ
Everything you need to know before connecting your first repo.
Audits run in the background the moment a pull request or push lands — nothing in your workflow waits on PRGuard. Most reviews post back within a few minutes; small diffs are usually quicker, and very large changes, deep-context audits, or slower models take longer. In comment-only mode a running audit never holds anything up; in Full review mode the PR simply shows a pending status until the verdict arrives. Higher plan tiers run on priority processing queues.
No — not by PRGuard. We don’t build or train models of our own, and we never use your code or governance rules to train anything.
Your data stays scoped to your organisation. Diffs fetched from GitHub are processed in memory for the audit and never written to our database. Files you upload from the VS Code extension are held only until that check finishes, then deleted.
The audit runs through the major AI providers’ commercial APIs, whose current terms exclude data submitted this way from training their models, and we choose those channels deliberately for that reason. Those providers are third parties under their own terms, which are outside our control, so our privacy policy spells out exactly what is sent and to whom.
As a rule of thumb from our live runs, a typical pull-request audit charges on the order of 15–40 credits — small diffs at the low end; large changes, deeper context, or a premium model above it. A developer typically opens a handful of PRs a week, and the plans are cut to that shape: Starter comfortably covers a small team of up to 5, Pro a team of around 15, and Pro Team around 30 — matching each plan’s seat limit. If you audit pushes as well, budget more.
You don’t have to guess, though: the dashboard shows the exact credit cost of every audit from your first trial run, so a week of real usage tells you your own average.
[skip prguard] (or [skip ci]) to your PR title or commit message and PRGuard will bypass the audit entirely for that event.
prguard/… branch. You can opt in — via a confirmation step — to have a fix committed straight to your default branch instead, but that’s a deliberate choice you make each time; the default is always something you review first.prguard pull <org-slug>).
Built and operated by Unifi Software Development Ltd, a software company registered in England & Wales, number 11054002. Security-first by design — every change is screened for prompt injection, your data stays scoped to your organisation, and every decision is captured in a complete audit trail.
Trusted by engineering teams