What is always free
A finding discovered on your machine is never paid content. These capabilities are unconditional, on every plan:local_scan · local_report_html · local_report_json · local_report_markdown ·
local_report_sarif · copy_fix_prompt · apply_fix_locally · device_management
What syncing adds
A live report URL
Printed immediately, before the scan finishes. A phase timeline, elapsed time, and
aggregate counts — with no fake progress percentage.
Sharing
One URL that renders differently per recipient, filtered on the server.
The sync question
In an interactive terminal, once per scan:cloud.state comes back as
decision_required and the agent asks the user, then records the answer:
What crosses the boundary
Only what the sync contract names. Sent: report prose, explicitly selected evidence, redacted secret references (a label, a kind, a local HMAC fingerprint), and safe high-level scan metadata — effort, duration, agent and model, phase timings, aggregate counts. Never sent: secret values, model provider keys, the repository, raw network capture.policy.uploadFullRepository is false in every session context, and the progress
endpoint’s schema is closed so source, prose, or evidence cannot travel through it even by
accident.
Plan limits
Frompackages/entitlements/src/index.ts:
Quota windows
Quota boundaries are UTC-anchored, never derived from a locale or from daylight saving time.- The quota day runs 06:00:00 UTC to 06:00:00 UTC.
- The quota week runs Monday 06:00:00 UTC to Monday 06:00:00 UTC.
GET /api/v1/sync-quota:
blockedBy is daily, weekly, or both, and the CLI says which:
Cloud report limit reached (daily). This scan will stay local. Limit resets Friday 06:00 UTC. You can run “myrqen sync rpt_…” after that.
Sync an earlier local report
sync refuses while quota is blocked. Nothing ever syncs on its own.
How a sync unit is spent
The unit is reserved when the report shell is created and spent at finalize. That ordering is deliberate: an object-storage failure during the upload leg no longer burns one of the day’s cloud reports with no way to get it back. A retried request reuses the same reservation — keyed on the local report id — and never charges twice. If the shell cannot be created at all, the reservation is released.Retention
Expiry is measured from the sync instant. When a report expires,
apps/worker deletes the
body and its stored object, share links stop working, the report page explains the expiry,
and the API answers REPORT_EXPIRED (HTTP 410).
Your local report files are untouched.