Why reporting hurts
The pain is rarely the prose. It is reassembly. By the time you sit down to write, the evidence is scattered: command output in terminal scrollback, screenshots in a downloads folder, a CVSS score you calculated in your head, notes in a doc that does not match the order you actually tested in. Half of report time is archaeology — digging up what you already did and proving it happened. Automating reporting is mostly about never letting that evidence scatter in the first place.
Step 1: Capture evidence at the moment it is produced
The cheapest evidence to collect is the evidence you grab as it appears. When you run scans inside a workspace, the results are stored as structured findings rather than ephemeral terminal text. In Zypheron Desktop the Auto-Doc panel collects this as you go — command logs, screenshots, findings, credentials, exploits, IOCs, lateral movement, recon, and notes — so the raw material for the report is assembling itself while you are still testing.
The lesson holds even if you never open the desktop: capture structured output during the engagement, not from memory afterward. A scan that writes a JSON finding is worth ten that scrolled past in a terminal.
Step 2: Write for the reader, not the tool
One engagement has three audiences, and one document cannot serve all of them. Automate the split instead of fighting it:
- Technical report — raw output, CVE references, per-finding evidence and remediation. For the people fixing it.
- Executive report — a short summary with business impact and recommended actions. For the people funding the fix.
- Compliance report — findings mapped to control frameworks. For the people auditing it.
The trick is generating all three from one body of findings. You write evidence once; the templates re-cut it for each reader.
Step 3: Export to the format the recipient actually wants
A report stuck in the wrong format is friction. Zypheron generates four:
- PDF — the signed, polished client deliverable.
- HTML — host it, link it, or drop it in an email with the styling intact.
- Markdown — straight into a repo, wiki, or ticket.
- JSON — machine-readable, for piping findings into a SIEM, dashboard, or tracker.
# Generate a PDF from your most recent scan
zypheron report --last --format pdf
# Pick a specific session and emit HTML
zypheron report <session-id> --format html
# List what is available to report on
zypheron report --list
Reports save to ~/.zypheron/reports/ with sanitized, timestamped filenames, so re-running a report is deterministic and you can find last week's without guessing.
Step 4: Draft with AI, ship with a human
The narrative sections — the summary, the impact paragraphs, the remediation guidance — are where AI earns its place. AI Report Assist drafts those from your collated evidence so you edit instead of starting blank. The deliberate design is operator-in-the-loop: the assistant proposes, you review and approve, and the export reflects your sign-off. For anything client-facing, that checkpoint is exactly what keeps an automated report trustworthy.
CLI or desktop — same evidence, two doors
The free CLI is the fast path: scan, then zypheron report, all without leaving the terminal. The desktop adds the visual Auto-Doc panel, the template builder, and the Compliance Dashboard mapping. Because the CLI and desktop share findings once paired, you can scan from the terminal and assemble the polished report on the desktop — the same evidence, whichever door you walk through.
What "automated" should and should not mean
Automated reporting does not mean nobody reads the report before it ships. It means you never retype a command, never hunt for a screenshot, and never reformat the same finding three times for three audiences. The machine does the assembly and the first draft; you do the judgment. That is the division of labor that gives you back the back half of your engagement.
Start with the free CLI to feel the scan-to-report loop, then add the desktop when you want templates and compliance mapping on top. Either way, the goal is the same: spend your time testing, not formatting.
