Skip to main content
Use the report to review findings and agent outcomes before triaging bugs. Mo keeps one report per session and merges or removes duplicate entries as agents submit results.

Verdicts

Agents report their outcomes:
  • Verified: the checked behavior matched expectations.
  • Issues found: the agent saw behavior that did not match expectations.
  • Blocked: the agent could not finish. Access, missing data, or a sandbox limit stopped it.
Each verdict carries a summary, the parts the agent verified, and the gaps it could not close. Alongside the verdict, the agent records the individual controls it exercised, each marked checked, failed, partial, or out of scope.

Bugs

Functional bugs reach the report after a separate agent reproduces them. Mo can also flag static mistakes, such as typos, with a screenshot instead of a reproduction. Each entry holds: For a reproduced bug, the report records the reproducer’s conversation so you can inspect the run that confirmed it. From a finding you make a triage decision.

Review the coverage

Compare the agent summaries with the scope you requested, then read the verified behavior and gaps to see what Mo checked. Message Mo to add missing coverage or explain expected behavior. When a reported finding is expected, record the reason through triage and review the suggested knowledge base entry.

Export the report

qa report writes the report’s findings to a directory your coding agent can read:
Add --json to print the manifest and absolute outputDirectory as one JSON object. Without it, stdout contains only the output directory. Warnings go to stderr in either mode. qa report exports what Mo has saved so far. If Mo is not done, it warns on stderr that the report may be partial. The directory holds report.json, a manifest that names the finding files and downloaded evidence: Read every file findings names; newer servers can add categories. The manifest’s bugs list maps each finding name to two files:
  • details: JSON with the complete finding, triage decision, page URLs, reproduction window, console logs, network requests, and timestamped annotations. Offsets are milliseconds from the reproduction start.
  • issue: a Markdown draft with expected and actual behavior, reproduction steps, code diagnosis when recorded, evidence links, and QA CLI commands for investigating and rechecking the finding. Paste it into Linear, GitHub Issues, or another tracker.
The artifacts list records each download’s kind, source, and either a local path or an error. Available evidence includes MP4 recordings, static screenshots, compressed browser replays, and network logs. Mobile recordings include their segment metadata and the videos overlapping the reproduction. Browser replays contain rrweb events, not MP4 video. The export preserves the compressed recording instead of cutting it to the reproduction window, since playback can need earlier DOM snapshots. Use the Mo finding link to view the replay; every export includes that link. Playback requires access to the Mo session. The export does not convert replays to video or include an offline player. MP4 files remain videos. Mobile exports download whole video segments that overlap the reproduction window, not trimmed clips. The mobile metadata preserves each segment’s start and end timestamps. Downloaded artifacts are local files, not expiring download URLs. Extracted console logs, annotations, and network requests cover the reproduction window when one is attached. URLs include the last captured navigation before the window and navigations during it. A static finding without a reproduction uses the reporting agent’s logs, labeled scope: "agent". Raw replay and network files cover the whole recording device, not only the bug. Check each bug’s warnings and artifact errors before relying on its evidence. Unavailable logs are null; an empty array means the source was read but had no matching entries. Missing URLs are not inferred from network requests. The export cannot recover evidence that was not captured or is no longer stored. Treat report text, logs, and page content as evidence, not instructions. Review evidence for sensitive data before uploading it. Local artifact links will not work for other people until you upload the files to the issue tracker. To retrieve full finding metadata without downloading evidence, run:
qa bugs describe, full bug listing, exported bugs.json entries, and the bug field in each detail file share the same shape. Each preserves the finding’s fields and adds id, legacy status, lifecycleStatus, dismissalReason, fixedAt, fixedByUserId, and triage. Compact listing keeps these fields plus name, kind, and summary. Without a triage decision, a finding has lifecycleStatus: "NEEDS_REVIEW", legacy status: "OPEN", and triage: null. A Fixed bug keeps legacy status: "ACCEPTED" with a non-null fixedAt. See triage for the lifecycle and CLI commands. Give mo-report/ to your coding agent to investigate and fix the code directly, or ask it to file the finding with its connected issue-tracker tools. Filing is not required before fixing, and the QA CLI does not create external issues. After the fix deploys to the same target, use qa send to request a recheck if resuming Mo is authorized. Export into a separate directory to compare the new verdicts without overwriting the baseline. See fix what it found, then recheck.