Skip to main content
Workbench project overview showing scan summary and severity counts

Project overview with scan summary

Workbench findings list with severity filters and search

Findings list with filtering options

Output Formats

The --format flag controls the output format. Five formats are available, and they can be combined (e.g. --format jsonl,html):

Console (default)

Human-readable terminal output with color-coded severity levels. Findings are printed as they are discovered, with a summary table at the end of the scan. This is the default when no --format flag is specified. Severity colors:
  • Critical: Red
  • High: Orange/Yellow
  • Medium: Yellow
  • Low: Blue
  • Info: Gray

JSONL

One JSON object per line, machine-readable. Each line is a self-contained JSON document representing a single finding or event. This format is well suited for piping to jq, ingesting into SIEMs, or processing with custom scripts. Example usage with jq:
For CI/CD pipelines, --ci-output-format is a shorthand that forces clean JSONL with no banners or color codes, drop-in safe for parsing in build scripts:
See CI/CD Integration for full pipeline examples.

HTML

Interactive HTML report using an embedded ag-grid table. The report is a self-contained HTML file with sorting, filtering, and search capabilities. The -o/--output flag is required when using HTML format. HTML format is supported for:
  • Scan results (findings)
  • Discovery phase output (discovered URLs and endpoints)
  • Spidering phase output (crawled pages)

SQLite

Dumps the run’s standalone database to <output>.sqlite (via SQLite VACUUM INTO), producing a single self-contained file you can reopen later with vigolium finding/traffic (see Reading a Standalone Export). Aliases: sqlite3, db.
  • Requires -S/--stateless and -o/--output. Stateless runs use a per-run temporary database, so “this scan’s SQLite” is well-defined; a persisted run writes into the shared project DB, where it would be ambiguous (use vigolium export for that).
  • Combines with other formats: --format sqlite,html -o scan writes both scan.sqlite and scan.html.
  • Under --split-by-host, each per-host file is named <base>-<host>.sqlite.

Filesystem (fs)

Writes a flat, browsable filesystem tree instead of a single file — so you (or a coding agent) can investigate a scan with plain ls/grep/jq, no database required. Two sibling directories are written off the -o base (defaulting to vigolium in the current directory when -o is omitted), so -o run yields run-traffic/ and run-findings/:
  • Per-host ids are zero-padded and assigned in sent_at order, so re-exports are reproducible.
  • Each <id>.req starts with an @target <scheme>://<authority> line followed by the raw request verbatim — strip line 1 and it replays directly.
  • index.json is the entry point: one jq over it maps every id to its url/status and to the file holding the bytes. On a traffic row, the finding field carries the top severity of any finding touching that request; each finding .md links straight to the .req/.resp.* that proves it.
  • Available on vigolium export, vigolium db export (honoring its filters), and scan/scan-url/scan-request/run — with or without -S/--stateless.
  • Honors --omit-response (drops the .resp.* files). --split-by-host is a no-op, since fs already splits by host.
The ingestion server can produce this same tree live with vigolium server --mirror-fs <dir> — see Running the Server.

Severity Scale

Findings are classified using five severity levels:

Confidence Scale

Each finding includes a confidence level indicating the reliability of the detection:

Finding Structure

Each finding contains the following fields:

Saving Output

Using the -o/—output Flag

Write output directly to a file:

Piping JSONL

JSONL output can be piped to other tools for processing:

Discovery and Spidering Output

The discovery and spidering phases produce their own output alongside scan findings.

Discovery Output

Discovery output includes URLs and endpoints found through wordlist-based content discovery, Wayback Machine data, and JavaScript analysis. Each discovered URL is reported with its HTTP status code and response metadata.

Spidering Output

Spidering output includes pages found by the browser-based crawler, along with forms, links, and dynamic content discovered during crawling.
Both phases support all three output formats (console, JSONL, HTML).

OAST Interactions

Out-of-band Application Security Testing (OAST) findings come from DNS and HTTP callback interactions. When a scanner payload triggers an out-of-band request to the OAST server, the interaction is correlated back to the original test case. OAST findings appear in output with:
  • The original request that triggered the out-of-band interaction
  • The type of interaction (DNS lookup, HTTP request)
  • Timing information (when the callback was received)
  • Correlation data linking the interaction to the specific payload
OAST interactions may arrive after the initial scan phase completes, as some out-of-band triggers have delayed execution. Vigolium waits for a configurable period after scanning to collect late-arriving callbacks. If outbound DNS or HTTP is blocked by a firewall, OAST-based detections will not work. The scanner will still produce findings through other detection methods, OAST simply adds an additional layer of out-of-band detection.

Querying Results from Database

All scan data is stored in the database (SQLite by default). You can query stored results using CLI commands without re-running scans.

Listing Findings

--confidence keeps only findings whose confidence matches one of the comma-separated levels (certain, firm, tentative) and renders a colorized CONFIDENCE column, complementing --min-severity.

Listing Traffic

Results are scoped to the active project. Use --project-name/--project-uuid to target a specific project, or set a default for your shell with eval $(vigolium project use <uuid>). See the Projects & Multi-Tenancy reference for details on multi-tenancy and project scoping.

Reading a Standalone Export

finding and traffic can read a file directly instead of your project database, which is handy for inspecting a --format jsonl export or a foreign .sqlite file from another machine. Pass -S/--stateless together with --db <file>:
-S/--stateless turns project scoping off, so every row in the file is shown regardless of the project_uuid it carries. Nothing is written to your project database (a JSONL source is loaded into a throwaway in-memory SQLite). The source type is auto-detected by extension, falling back to a header sniff (.jsonl/.ndjson vs the SQLite format 3 magic / .sqlite/.sqlite3/.db).

Rendering a Finding or Record as Markdown

--markdown prints the selected findings/records as Markdown — evidence plus request/response in fenced http blocks — to stdout. Pipe it to a file or a viewer like glow, and pair it with --id, a fuzzy search term, or -n 1 to focus a single item:
Under -S/--stateless, add --compact to window the response around the finding’s match (matched_at / extracted_results) — or cap a record’s body to a preview — so a long page doesn’t flood the console. Without --compact, bodies render in full.