Skip to content
VULQN VULQN
Get Started

.vulqn.json Reference

Add a .vulqn.json file to the root of a repository when the default review behavior needs to be more specific for that repo.

VULQN reads the config from the PR head commit. That means a PR can introduce or update .vulqn.json, and the new config applies to that same PR.

All fields are optional except version.

{
"version": 1
}

If the file is missing, invalid JSON, missing version, or uses an unsupported future version, VULQN falls back to defaults.

Full example

{
"version": 1,
"ignore": {
"pathPrefixes": ["docs/", "scripts/"],
"extensions": [".generated.ts"],
"filenames": ["schema.graphql"]
},
"focus": {
"paths": ["src/", "packages/"]
},
"rules": [
{
"paths": ["src/auth/"],
"instructions": "Flag hardcoded credentials, missing authorization checks, and token expiry bugs."
}
],
"scoring": {
"criticalPenalty": 30,
"mediumPenalty": 8,
"praiseBonus": 5,
"praiseCap": 15
},
"confidence": {
"failOnCritical": true,
"failBelowScore": 75,
"minFindingConfidence": "medium"
},
"trigger": {
"skipDrafts": true,
"targetBranches": ["main"],
"skipAuthors": ["dependabot[bot]", "renovate[bot]"]
},
"output": {
"updatePrDescription": true
}
}

Defaults

AreaDefault
ignoreNo custom ignores beyond VULQN’s global ignored files.
focusReview all reviewable files.
rulesNo custom instructions.
scoring.criticalPenalty25
scoring.mediumPenalty8
scoring.praiseBonus5
scoring.praiseCap15
confidence.failOnCriticaltrue
confidence.failBelowScore80
confidence.minFindingConfidence"medium"
trigger.skipDraftsfalse
trigger.targetBranches[] meaning all branches allowed by repository settings.
trigger.skipAuthors[]
output.updatePrDescriptiontrue

ignore

Use ignore to exclude files that are not worth reviewing in this repository.

{
"ignore": {
"pathPrefixes": ["generated/", "fixtures/"],
"extensions": [".generated.ts", ".pb.go"],
"filenames": ["schema.graphql"]
}
}
FieldTypeBehavior
pathPrefixesstring[]Skips files whose path starts with one of these prefixes.
extensionsstring[]Skips files whose path ends with one of these strings.
filenamesstring[]Skips files whose basename matches exactly.

ignore adds to VULQN’s global ignored files. It cannot force VULQN to review files that are globally ignored, such as common lock files, binaries, build outputs, image assets, fonts, archives, and .vulqn.json itself.

focus

Use focus when only specific areas of a repository should be reviewed.

{
"focus": {
"paths": ["src/", "packages/api/"]
}
}
FieldTypeBehavior
pathsstring[]Reviews only files whose path starts with one of these prefixes.

If focus.paths would exclude every changed file in a PR, VULQN ignores the focus setting for that review. This avoids accidentally creating a config that suppresses all review coverage.

rules

Use rules to give VULQN path-specific review instructions.

{
"rules": [
{
"paths": ["backend/payments/"],
"instructions": "Check idempotency, decimal handling, refund paths, and Stripe webhook verification."
},
{
"paths": ["src/auth/"],
"instructions": "Flag missing authorization checks and unsafe token handling."
}
]
}
FieldTypeBehavior
pathsstring[]The path prefixes where the rule applies.
instructionsstringExtra review guidance for matching files.

Multiple rules can match the same file. VULQN applies all matching instructions.

Limits:

  • Each rule’s instructions are capped at 2,000 characters.
  • All rule instructions together are capped at 10,000 characters.
  • Empty paths or blank instructions are ignored.

Write rules like code review guidance, not prompt engineering. Good rules are concrete, scoped, and tied to repository conventions.

scoring

Use scoring to change how VULQN calculates the confidence score.

{
"scoring": {
"criticalPenalty": 25,
"mediumPenalty": 8,
"praiseBonus": 5,
"praiseCap": 15
}
}

Formula:

100 - (critical * criticalPenalty) - (medium * mediumPenalty) + min(praise * praiseBonus, praiseCap)

The final score is clamped between 0 and 100.

FieldTypeDefault
criticalPenaltynon-negative number25
mediumPenaltynon-negative number8
praiseBonusnon-negative number5
praiseCapnon-negative number15

Invalid numeric values are ignored and the default for that field is used.

confidence

Use confidence to control the build status gate and the minimum finding confidence shown on the PR.

{
"confidence": {
"failOnCritical": true,
"failBelowScore": 80,
"minFindingConfidence": "medium"
}
}
FieldTypeDefaultBehavior
failOnCriticalbooleantrueAny critical finding fails the build status.
failBelowScorenumber from 0 to 10080Fails the build status when confidence is strictly below this score.
minFindingConfidence"medium" or "high""medium"Drops findings below the selected confidence level.

Set minFindingConfidence to "high" only if your team prefers fewer, stronger findings over broader coverage.

trigger

Use trigger to skip PRs that should not be reviewed.

{
"trigger": {
"skipDrafts": true,
"targetBranches": ["main", "develop"],
"skipAuthors": ["dependabot[bot]", "renovate[bot]"]
}
}
FieldTypeDefaultBehavior
skipDraftsbooleanfalseSkips draft PRs.
targetBranchesstring[][]Reviews only PRs targeting one of these branches. Empty means no config-level branch restriction.
skipAuthorsstring[][]Skips PRs from matching author names or author IDs.

output

Use output to control the PR description review block.

{
"output": {
"updatePrDescription": true
}
}
FieldTypeDefaultBehavior
updatePrDescriptionbooleantrueAdds or updates the VULQN review block in the PR description.

The schema also accepts postSummary for forward compatibility, but current review output is centered on inline comments, the PR description block, build status, and dashboard history.

Common patterns

Review only application code

{
"version": 1,
"focus": {
"paths": ["src/", "apps/", "packages/"]
}
}

Skip generated files

{
"version": 1,
"ignore": {
"pathPrefixes": ["generated/"],
"extensions": [".generated.ts", ".pb.go"]
}
}

Make build status less strict

{
"version": 1,
"confidence": {
"failOnCritical": true,
"failBelowScore": 70
}
}

Require high-confidence findings only

{
"version": 1,
"confidence": {
"minFindingConfidence": "high"
}
}