Skip to content

Policy file (.vulnetix/agent.yaml)

Every key of .vulnetix/agent.yaml, the defaults when a key or the whole file is missing, and how a malformed file is reported.

Updated 02 Nov 2026Checked against cli@4c8c3b7

.vulnetix/agent.yaml in the repository root sets what the hooks block, warn on, and leave alone. It is optional; without it the defaults below apply. It is read on every hook call, so a change takes effect on the next tool call.

The defaults, written out

This file is equivalent to having no file:

agent:
  enabled: true
  safeHarbourStrategy: safest
  maxMajorBump: 0
  cooldownDays: 0
  dependencyGuard:
    block: [malware, kev-critical]
    warn: [severity-high, below-target, eol, cooldown, malware-unresolved]
  changeGuard:
    block: [secret]
    warn: [severity-high, kev-critical]

Keys

All keys sit under agent:.

Key Type Default Meaning
enabled bool true false turns every hook off without uninstalling it. Each call returns nothing.
safeHarbourStrategy safest, stable, latest, rolling safest The target the dependency guard compares against. Case-insensitive; an unknown value falls back to safest. See the Safe Harbour target.
maxMajorBump int 0 How many major versions a recommended target may move. 0 never recommends a new major. A negative value reads as 0.
cooldownDays int 0 (off) A version published fewer than this many days ago raises cooldown. A negative value reads as 0.
dependencyGuard.block list of signals [malware, kev-critical] Signals that deny the tool call
dependencyGuard.warn list of signals [severity-high, below-target, eol, cooldown, malware-unresolved] Signals reported into the agent’s context
changeGuard.block list of signals [secret] Signals that deny a git commit or git push
changeGuard.warn list of signals [severity-high, kev-critical] Reported, not blocked. Only secret is evaluated by the change guard today.

Signals: malware, kev-critical, malware-unresolved, severity-high, below-target, eol, unpinned, cooldown, secret. What each means is on Dependency guard.

A signal in neither list is silent. If a signal is in both, block wins.

The signal for a credential is secret, singular. A list naming secrets matches nothing.

Malformed files

A file that cannot be read or parsed is reported on stderr, where the person sees it and the agent does not mistake it for a verdict. The message begins vulnetix agent: parsing .vulnetix/agent.yaml:, gives the YAML error, and ends using defaults. The hook then runs on the defaults. A missing file is not reported.

Examples

Warn on malware instead of blocking, and also flag versions younger than a week:

agent:
  cooldownDays: 7
  dependencyGuard:
    block: [kev-critical]
    warn: [malware, malware-unresolved, severity-high, below-target, eol, cooldown]

Allow the guard to recommend one major version up, and use the release closest to what you run:

agent:
  safeHarbourStrategy: stable
  maxMajorBump: 1

Report credentials in commits without blocking:

agent:
  changeGuard:
    warn: [secret]
Edit this pageSources: cli/internal/agent/policy.go, cli/internal/fix/plan.go, cli/cmd/agent.go
esc
↑ ↓ move↵ openSearches in your browser. A key like autonomy.max or a code like threshold_required jumps straight to it.