# Host AI-generated reports on a private URL · Stacktree

Source: https://stacktr.ee/host-ai-reports

[Skip to content](#main) [Stacktree](/)[Developers](/developers)[Agents](/agents)[Docs](/docs)[Use cases](/use-cases)[Pricing](/pricing)[Blog](/blog)[Dashboard](https://app.stacktr.ee)[Sign in →](https://app.stacktr.ee)      By [ Steve Smith ](/about) · Founder, Stacktree  ·  Last updated September 20, 2026          use case

#  Host AI-generated reports on a private URL.

   When your agent writes a perf report, a research summary, or a status doc, Stacktree is the URL it puts the file behind — private by default, replaceable in place, and openable by your team without anyone needing a Stacktree account.

  [ Get started free ](https://app.stacktr.ee/?join=1&from=seo_host_ai_reports)   install npx stacktree-install
Copy
     No card · 3 pages free · about a minute

    Paste HTMLDrop a fileno account · 24 h linkHTML to publishAdd a passwordPublish private link
Paste a report's HTML and get a private link. No account, nothing to install.

##  Where should AI-generated reports live?

On a private static-HTML host with replace-in-place semantics. Stacktree exists for exactly this case: the agent calls `publish_html`, gets back an unguessable URL you can gate by password or email domain, and calls `update_site` when the report regenerates. Inbox attachments go stale, GitHub commits are heavy, and Notion mangles HTML formatting — Stacktree avoids all three failure modes.

## The kinds of report that fit

  - Performance reports. Daily/weekly perf rollups generated by an agent that reads metrics + writes HTML.
 - Research summaries. Deep-research output condensed to a one-page HTML brief.
 - Status docs. Project standups, sprint summaries, on-call handoffs.
 - Code-review writeups. Per-PR analysis the agent produces alongside or instead of comments.
 - Audit reports. Compliance checks, security scans, infra diffs.

## The agent loop

```
`# Day 1
agent: publish_html(file: "perf-2026-05-14.html")
       → https://stacktr.ee/p/RwJjpE3kA…
       set_email_gate(slug, domain: "yourco.com")
       set_expiry(slug, "30d")

# Days 2..30 — same URL, fresh content each morning
agent: update_site(slug, file: "perf-2026-05-15.html")
agent: update_site(slug, file: "perf-2026-05-16.html")
...`
```

 The viewer's bookmark always shows yesterday's run. No version inboxes, no "see latest" links to chase.

## Privacy posture

  - Unguessable URL. The link is the credential. No one finds reports by enumerating URLs.
 - Email-domain gate. Only verified @yourco.com viewers open the report.
 - End-to-end encryption (optional). AES-GCM in the browser; Stacktree only stores ciphertext.
 - X-Robots-Tag noai. Reports are excluded from AI training corpora by default.

## What this replaces

  - Email attachments (immediately stale; impossible to track who saw what).
 - "Reports" channels in Slack (formatting dies, scrolling kills context).
 - Pushing reports to GitHub (one commit per run; reviewers don't know which is current).
 - Hosting on an internal Vercel/Render project (heavy granularity for a one-shot artifact).

FAQ

## Frequent questions

     Where should AI-generated reports live? +  On a private static-HTML host with replace-in-place semantics. Stacktree fits that bill: agents publish via MCP, get a private URL back, and call `update_site` when the report is regenerated. Inbox attachments go stale; GitHub commits are heavy; Notion pages mangle the formatting.   Why HTML and not PDF? +  HTML renders interactively (charts, sortable tables, expandable sections), the agent doesn't need a headless Chrome to produce it, and the file is human-editable if you ever need to tweak it. PDFs make sense for archived deliverables; HTML makes sense for living reports.   How does the agent know to publish? +  The agent calls `publish_html` via the Stacktree MCP server. You install it once with `npx stacktree-install` (covers Claude Code, Cursor, Codex, OpenCode, Amp) and the agent treats it as any other tool.   What if the report contains sensitive numbers? +  Three controls. (1) Unguessable URL — the link itself is the credential. (2) Optional password gate. (3) Optional email-domain gate (only @yourco.com viewers can open). For maximum confidentiality, end-to-end encryption keeps the server from seeing plaintext.   Can the report be replaced when the agent re-runs? +  Yes. `update_site` swaps the content under the same URL. Stakeholders bookmark once; the latest version is always behind that bookmark.   What about embedding charts? +  Stacktree serves the HTML file as-is, so any embedded chart library (Plotly, Chart.js, D3, Vega) works without extra setup.
Keep reading

## Related guides

   -  [ Have your agent publish its own run report as a link End every agent run with a link, not a wall of terminal text: the agent renders an HTML run report, calls publish_html. ](/workflows/agent-publishes-its-own-report)
-  [ See how it was read Time on page, scroll depth, and reactions on a report you send. ](/page-engagement)
-  [ Share Jupyter notebooks For analysis-shaped reports. ](/share-jupyter-notebook-html)
-  [ Internal tool hosting For one-off utility HTML. ](/internal-tool-hosting)
-  [ Agent-loop hosting Why update_site is the loop primitive. ](/agent-loop-hosting)
-  [ Publish from Claude Code The most common publishing agent. ](/claude-code)

References

## Sources and further reading

   -  [ Model Context Protocol — spec ↗ The protocol the agent uses to call publish_html. ](https://modelcontextprotocol.io/specification/2025-11-25)
-  [ Cloudflare R2 — atomic puts ↗ The storage layer that makes update_site atomic. ](https://developers.cloudflare.com/r2/api/workers/workers-api-usage/)
-  [ X-Robots-Tag (Google) ↗ The header that excludes reports from AI training corpora. ](https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag)

##  Give your agent a place to put its reports.

 One MCP install. The next report has a private URL the moment it lands.

 [ Sign up free → ](https://app.stacktr.ee/?join=1&from=cta_host_ai_reports)   install npx stacktree-install
Copy
       Private hosting for the HTML your agents make.

[](https://betalist.com/startups/stacktree?utm_campaign=badge-stacktree&utm_medium=badge&utm_source=badge-featured)[Featured on](https://devhunt.org/tool/stacktree)[](https://buildlist.io)[Get started free](https://app.stacktr.ee/?join=1)

## Product

- [Page video](/page-video)
- [Ask this page](/ask-this-page)
- [Client spaces](/client-spaces)
- [Templates](/templates)
- [Example deliverables](/examples)
- [Custom domains](/custom-domains)
- [Client feedback](/client-feedback-loop)
- [One-time links](/one-time-view-links)
- [See how pages get read](/page-engagement)
- [Made with Stacktree](/made-with)
- [Security](/security)
- [Watch the demo](/demo)

## Agents

- [All integrations](/agents)
- [Claude Code](/claude-code)
- [OpenAI Codex](/codex)
- [Cursor](/cursor)
- [Claude.ai connector](/claude-ai-connector)
- [Claude Cowork](/what-is-claude-cowork)
- [Meta Muse](/muse)
- [MCP server](/mcp-publish-html)
- [Deploy from Claude Code](/deploy-html-from-claude-code)
- [Skills](/skills)
- [Slack app](/slack)
- [n8n node](/n8n)
- [Agent payments (x402)](/x402)

## Alternatives

- [All comparisons](/alternatives)
- [Head-to-head comparisons](/compare)
- [Tiiny Host](/tiiny-host-alternative)
- [GitHub Pages (private)](/github-pages-private-alternative)
- [Vercel](/vercel-alternative-for-agents)
- [ngrok](/ngrok-alternative-for-html)
- [Display.dev](/display-dev-alternative)
- [Static.app](/static-app-alternative)
- [OpenAI Codex Sites](/openai-codex-sites-alternative)
- [here.now](/here-now-alternative)
- [Shippage](/shippage-ai-alternative)
- [Best private hosting](/best-private-html-hosting)

## Use cases

- [All use cases](/use-cases)
- [Share with clients](/share-with-clients)
- [Send a file to a client](/share-html-file-with-client)
- [Share Claude artifacts](/share-claude-artifacts)
- [Share Jupyter notebooks](/share-jupyter-notebook-html)
- [Host Storybook privately](/host-storybook-privately)
- [Architecture diagrams](/share-architecture-diagrams)
- [AI-generated reports](/host-ai-reports)
- [Internal HTML tools](/internal-tool-hosting)
- [Private HTML hosting](/private-html-hosting)
- [Vibe-coded page hosting](/vibe-coding-hosting)
- [Leave a website builder](/website-builder-migration)

## Learn

- [Blog](/blog)
- [Glossary](/glossary)
- [FAQ](/faq)
- [Where AI output should live](/where-ai-output-lives)
- [Agent-loop hosting](/agent-loop-hosting)
- [Why agents need a publish primitive](/blog/why-agents-need-a-publish-primitive)
- [MCP servers explained](/blog/mcp-servers-explained-for-developers)
- [What changed in the 2026-07 MCP spec](/blog/mcp-2026-spec-changes)
- [Sites in Codex explained](/blog/sites-in-codex-explained)
- [Private-by-default hosting](/blog/private-by-default-html-hosting)
- [An agent paid us $1 (x402)](/blog/agent-paid-to-provision-itself)
- [When a loop hits a paywall](/blog/loop-engineering-paywall)
- [Pricing](/pricing)
- [Self-host (new)](/self-host)
- [Changelog](/changelog)
- [Docs](https://stacktr.ee/docs)
- [About](/about)
© 2026 Stacktree · stacktr.ee

[Privacy](/privacy)[Terms](/terms)[Security](/security)[Dashboard](https://app.stacktr.ee)[npm](https://www.npmjs.com/package/stacktree-mcp)[Sitemap](/sitemap.xml)[llms.txt](/llms.txt)[API spec](/openapi.json)

---
Full markdown summary of the Stacktree marketing surface: https://stacktr.ee/llms-full.txt
