Skip to main content
A probe is a single, self-contained attack template — one YAML file per probe, grouped under src/agent_guardian/probes/asi01/asi10/. The schema is enforced by the Probe pydantic model in src/agent_guardian/models/probe.py.

When to use this page

  • You’re authoring a new probe and need the field reference.
  • You’re vendoring AgentGuardian into a tool and writing your own probe loader.
  • You opened a probe YAML in src/agent_guardian/probes/ and want to know what every field means.

The schema

The model is declared extra="forbid" — unknown keys raise ProbeValidationError at load time. The loader walks src/agent_guardian/probes/asi**/*.yaml and *.yml recursively.

Field reference

Identity

Mapping (the OWASP / MITRE / CSA triple)

The triple-framework gate in _coerce_probe runs before pydantic validation — missing or empty values raise ProbeValidationError with an explicit message rather than a generic pydantic error.

Risk + targeting

Attack content

Where each field gets read

Loading + validation

Every loader raises ProbeValidationError on the first failing probe. The error message includes the source file and the failing field path.

Authoring a new probe

Per CONTRIBUTING.md, the steps:
  1. Pick the ASI category (asi01/asi10/).
  2. Pick a <2-letter> agent code that matches the specialist (e.g. GH for goal-hijack, TA for tool-abuse, MP for memory poisoning). Listed in list-agents.
  3. Pick the next free 3-digit suffix in the same asi/agent series.
  4. Write the YAML.
  5. Add a fixture row to the corpus tests so a regression on the loader catches missing fields.
  6. Bump PROBE_CORPUS_VERSION in probes/loader.py:34 + the sibling _meta/version.yaml stamp.
The triple-framework gate makes step 4 the contentious one — you must declare the OWASP ASI 2026 category, at least one MITRE ATLAS technique, and a CSA Agentic Risk category. If your probe doesn’t fit any of those, the answer is usually that it’s not the right probe to ship in the OSS corpus yet.

Anti-patterns

Don’t ship a probe with severity: critical without a reproducible PoV. Every critical-severity finding triggers the high-severity band cap (clamps the headline to 79). A noisy critical probe ruins the trend graph for every consumer.
Don’t declare mitre_atlas: [] to skip the triple-framework gate. The loader rejects empty lists explicitly — that’s the gate doing its job, not a bug.
Don’t put PII or real customer prompts in seeds. The corpus is public. Seeds should be synthetic adversary turns.

Next step

CLI reference

Use agent-guardian list-probes --asi ASI01 to inspect the loaded corpus.

Report schema

How the loaded probe ends up serialised into scan.json + findings.sarif.

Severity levels

The four-tier severity enum + AIVSS weights.

Research foundation

The references: keys resolve here.