Skip to Content
GuidesReports

Reports

Every autopilot task produces a styled HTML report — task summary, per-worker output, review badges, cost, and duration — stored with a permalink and shareable by URL. This page covers the five-step pipeline that produces a report, the report’s anatomy, and how to retrieve, embed, or share one.

Try it now: View a live sample report ↗ 

The pipeline

Every autopilot run flows through the same five steps. The report is the audit trail of what happened at each one.

#StepWhat happens
01TemplateA registered template (customer_support, cfo, security_audit, …) decomposes the task into roles and assigns each role a worker.
02SafetyEvery LLM call routes through the gateway’s governance chain — PII scan, prompt-injection detection, budget enforcement, model allowlist.
03WorkersEach role runs in a sandboxed managed runner (or directly against the gateway, for non-tool tasks).
04ReviewAn LLM review council scores each worker’s output and votes approve or request_changes. Quorum logic determines the workflow status.
05ReportA styled HTML document is rendered from the worker outputs + review votes and persisted to MongoDB. The permalink is returned.

Steps 02-04 are documented in the linked guides. The rest of this page is about step 05 — the report itself.

Anatomy of a report

Every report has the same five sections, regardless of which template produced it. The schema is generated by _save_html_report in services/backend/src/services/autopilot/runner.py.

SectionFields
Headertitle, template, total_cost (USD), duration (seconds), created_at (UTC)
TaskFirst 500 chars of the original task description
Pull requestsLinks to PRs created during execution (present only if the template opened PRs)
Worker cardsOne card per worker role: status dot (success / failure), review badge, per-worker cost, markdown-rendered output
Footertask_id and a deep link back to the dashboard

Review badges

Two badges can appear next to each worker:

  • Approved (teal) — every reviewer on the council voted approve.
  • Request changes (amber) — at least one reviewer voted request_changes.

Reviews are automated — they come from the LLM review council defined by the template’s reviewer (see template.reviewer.review() in services/backend/src/services/autopilot/orchestrator.py). They are not human-in-the-loop approvals; HITL gates live in the gateway governance chain and are not reflected in report badges.

Retrieving a report

Short URL

https://api.curate-me.ai/reports/{report_id}

302-redirects to the canonical path below. Use this form when sharing.

Canonical API

curl https://api.curate-me.ai/api/v1/autopilot/reports/report_abc123

Returns text/html. The endpoint is intentionally unauthenticated — reports are shareable by URL possession, which is what makes the “send a link to your team” flow work without provisioning seats. If you need to gate read access, either keep the URL private or front the endpoint with your own auth proxy. Public share tokens are on the roadmap.

The report_id is always report_{task_id} — if you have the task ID from the autopilot API, you can compute the report URL without an extra lookup.

Dashboard

The dashboard renders the report in a sandboxed iframe at:

https://dashboard.curate-me.ai/teams-tab?view=report&id={report_id}

This is the form linked from the report footer’s “View in Dashboard” link.

Sharing and embedding

Three patterns, in order of friction:

1. Paste the short URL into Slack or Teams. Autopilot already does this automatically when you configure a notification channel — see Slack Integration.

2. Embed in your own app with an iframe:

<iframe src="https://api.curate-me.ai/reports/report_abc123" sandbox="allow-same-origin" style="width: 100%; height: 800px; border: 0;"> </iframe>

The dashboard uses this exact pattern. The allow-same-origin sandbox keeps the report styled while preventing it from running scripts in your context.

3. Server-side fetch and render — pull the HTML, transform if needed, serve from your own origin:

curl -s https://api.curate-me.ai/reports/report_abc123 > report.html

Which templates produce reports

Every autopilot template emits a report. The list is generated at startup from services/backend/src/services/autopilot/registry.py and auto-loaded SKILL.md templates. Current set:

EngineeringOperationsResearch
dev_teamcfoautoresearch
code_reviewcustomer_supportnews_digest
pr_writerrecruiterdata_analyst
repo_managerlegal_reviewsales_research
perf_auditcompliance_reportseo_research
security_auditvendor_ddproduct_research
doc_drifthype_agentweb_agent

There is no per-template opt-out — if a task ran, a report exists.

Storage and retention

StoreCollection / TTLPurpose
MongoDBautopilot_reports, indexed on report_idPermanent audit trail
MongoDBautopilot_results, indexed on task_idStructured task data
(none)Reports have no automatic TTL — they persist for the life of the org

Report size is logged as size_bytes on the document. Reports are written once at task completion via _save_html_report — they are not regenerated if the template changes later.

Next steps