Output Formats

-f/--format selects the format; -o/--output writes to a file and infers the format from its extension. --json is shorthand for -f json.

FormatValueNotes
Texttext (default)Human-readable, with the full remediation.
JSONjsonFindings with metadata, snippet, and remediation.
Markdownmarkdown / mdOne section per finding.
SARIF 2.1.0sarifRule catalog + fixes[]; GitHub code scanning.
GitLab SASTgitlab-sastgl-sast-report.json for artifacts:reports:sast.
JUnitjunitOne failing test case per finding.
CSVcsvFlat table (RFC 4180).
XMLxmlGeneric findings document.
YAMLyaml / ymlFindings with block-scalar snippet/remediation.
HTMLhtmlSelf-contained styled report.
CycloneDX 1.5cyclonedxSBOM vulnerabilities[]; Dependency-Track, Snyk.

Every finding carries its control-framework references (CWE, OWASP AppSec, OWASP LLM, OWASP ASVS, MITRE ATT&CK, MITRE ATLAS, CIS Controls, NIST 800-53, PCI-DSS, SOC 2), the offending workflow block, and a dynamic secure-fix write-up derived from that block: the vulnerable code, why it is dangerous, and a corrected workflow.

Confidence

Every finding also carries a confidence of high, medium, or low. It is derived from the same reachability, gate, and write signals the scanner already computes, so it needs no per-rule tuning:

  • high when the job is directly fork-reachable, ungated, and can write to the repo or run an autonomous shell. The whole exposure is provable from the file.
  • medium when the worst case depends on repository state a static read cannot see (a fork pull request’s provider-secret scope), or when the only path in is a narrower OR-gate bypass rather than a plainly ungated trigger.
  • low is reserved for the weakest reachability still worth reporting.

Confidence measures how much of the finding a static read can prove, not how severe the outcome is; severity and confidence are independent. The machine formats also expose a banded numeric (0.9 / 0.7 / 0.4) for consumers that prefer a scalar, but the ordinal is the source of truth. It surfaces in the text report, json, sarif (result properties), gitlab-sast (native confidence), csv, xml, yaml, markdown, and html.

Dynamic remediation

Rather than a static string, each finding’s remediation is generated from the matched workflow block. It shows the vulnerable snippet, explains why the composition is dangerous, and prints a corrected workflow that keeps the agent useful while closing the fork-reachable write path (an author gate, a read-only scope, or a maintainer-reviewed pull request instead of a direct push).