The Markdown emitter is the human-facing surface — designed to paste into a PR description, an issue, or a release-notes blurb. Source:Documentation Index
Fetch the complete documentation index at: https://docs.agentguardian.io/llms.txt
Use this file to discover all available pages before exploring further.
reports/markdown.py.
When to use this page
- You want to drop the scan summary into a PR comment without
attaching a
.json. - You want a release-notes blurb every release branch produces automatically.
- You’re filing an issue against the agent author and need a reproducible attack transcript that renders inline in GitHub / GitLab.
Generate one
The layout
The same Markdown shape across every scan. Four blocks, in order:<details> blocks are deliberate: GitHub trims them by default,
so a PR comment stays compact until a reviewer opens the finding.
Header
A single line with the four numbers you’d cite when summarising the scan in chat:| Token | Source | Notes |
|---|---|---|
AIVSS | scan.aivss | Don’t quote when mode_authoritative=false. |
Band | scan.band | The human label. |
Tier | scan.tier | Detected or forced (T1–T4). |
Coverage | scan.coverage_grade | A–F. A = every ASI category covered. |
scoring_valid=false the score is rendered as
AIVSS NOT EVALUATED and the band is not_evaluated — a stub-LLM
run never quotes a numeric score.
Per-ASI summary table
One row per ASI category. The score column reads offscan.asi_scores; the findings column counts entries in findings[]
grouped by asi. The table is sorted ASI01 → ASI10 so the
hand-readable shape matches the OWASP ASI 2026 spec order.
Per-ASI sections
One## ASI0N — <human name> section per category that has at least
one finding. Inside each section, findings are sorted by severity
descending (critical → low) then by confidence descending.
Top findings
Up to five findings, sorted by severity then confidence (same order theScan.findings list uses). Each finding renders inside a
<details> block with the per-finding facets — see Evidence
timeline for the field list.
Redaction
The Markdown emitter routes every finding through the sharedredact_finding helper — same scrubbing the JSON / SARIF emitters
apply. The **Trigger:** … line is the redacted trigger_prompt;
API keys, JWTs, bearer tokens, and password assignments are masked.
When not to reach for Markdown
- CI gates. Use
--output jsonand gate onscan.aivssor--output sarifand gate on the SARIF results. The Markdown emitter does not carry signatures. - Programmatic consumers. They want sorted-key JSON, not a human-readable surface.
- Audit trail. Use the bundle (
--bundle ./out/) — Markdown is not part of the signed envelope.
Anti-patterns
Next step
JSON export
The signed canonical artifact every other emitter is derived
from.
SARIF export
For GitHub Code Scanning / Sonar / static-analysis pipelines.
Reports overview
The five-emitter table + when to reach for each.
Upload SARIF to GitHub
PR-comment annotations via Code Scanning.