Skip to main content
myrqen session finish builds one canonical report object and renders it four ways. All four land in the project you scanned, and none of them require an account.

The four formats

HTML

A self-contained page: filter by severity and verification, expand a finding for evidence and remediation, copy the fix prompt. No external scripts, stylesheets, or fonts — it opens with the network off.

JSON

The canonical ScanReport, validated against schemas/report.schema.json. This is the machine-readable source of truth.

Markdown

For a pull request, an issue, or a wiki.

SARIF

For code-scanning tooling that consumes SARIF.
Verify the HTML is genuinely offline:

What the canonical report contains

ScanReport in packages/contracts/src/domain.ts, schema version 1.0.0:
limitations is not an afterthought. The product’s stated position is that silence from a scanner is not a clean bill of health, so a report that found nothing still says what it covered and what it could not reach.

Token usage is reported with provenance

tokenUsage.source is mandatory and is one of: An exact count is never fabricated. Where the platform aggregates this, exact and estimated counts are kept in separate columns and never averaged together.

The fix prompt

Prints a remediation prompt a coding agent can act on, and records that a fix was suggested. The HTML report has the same thing behind Copy prompt to fix. See Fix and retest.

Synced reports and projections

A synced report can be opened in the dashboard and shared. What a given viewer receives is decided server-side by a projection policy — never by client-side hiding. ProjectionPolicy is deliberately a typed, testable structure rather than a programmable policy language:
Hidden content is absent from the payload, not hidden in it. That holds for the page, the JSON, and every export format — the export routes resolve the same projection the page does, so no format is a bypass.

Report expiry

A synced report has a retention window from its plan (21 days on free). When it expires the worker deletes the body and its stored object, share links stop working, and the report page explains the expiry. Requests return REPORT_EXPIRED (HTTP 410). Your local files are untouched. That is the point of local-first.

Encryption at rest

In the hosted service, report bodies are encrypted with REPORT_ENCRYPTION_KEY before they reach object storage, so the store never holds plaintext. REPORT_ENCRYPTION_KEY_PREVIOUS accepts retired keys for reads only, which is what makes key rotation possible — move the old key there when rotating, or every stored report stops opening.

Share a report

One URL that renders differently per recipient.

Report export API

GET /api/v1/reports/{id}/export/{format} and the share equivalent.