Your agent built a dashboard. Here is where to put it.
Agents now assemble a dashboard on demand and hand you the HTML. But HTML is not a link, and a page with real numbers in it is not something you want public or permanent. Here is how to host an agent-built dashboard on a private URL that opens without an account and clears itself away when it is done.
Where do you host a dashboard an AI agent built?
On a host that turns the agent's HTML into a private link. Publish it to an unguessable URL the viewer opens with no account, set an expiry so a single-use page removes itself, and add a password or email-domain gate when it goes to a client. Stacktree does this and lets the agent publish over MCP, so the dashboard goes from generated to a shareable private link in one step, then tidies itself away.
The step the agent leaves you with
The on-demand pattern is simple: ask an agent to gather the data and render an HTML dashboard to answer the question in front of you, instead of maintaining a standing dashboard nobody opens. It works. But it stops one step short. The agent produces a block of HTML, and HTML on its own is not something you can send to a colleague or a client. Someone has to open it, often away from your terminal, which means the page needs a URL.
That is the only gap, and it is small. The page has to be hosted somewhere that hands back a link. The question is just which host, because the obvious ones are built for a different job.
Why generic hosting is the wrong shape
You could drop the HTML on GitHub Pages, Netlify, or an S3 bucket. They will serve it. But their defaults are built for publishing a public website and keeping it up: the page is public, often indexable, and permanent unless you go and delete it. An agent-built dashboard is usually the opposite of all three. It tends to carry real data the agent pulled in, it is meant for specific people, and it is single-use. So the generic host leaves you manually setting access you do not have, and manually cleaning up pages that were obsolete an hour after they were built.
The shape this use case wants is private by default, gateable per link, and disposable on a timer. That is a different host, not a different bucket.
The private, disposable fix
Full disclosure: we build Stacktree, so read this as us describing where we fit. Stacktree takes the agent's HTML and publishes it to a private link with three properties that match a throwaway dashboard specifically:
- Private by default. The URL is unguessable and the page is served with a search and AI opt-out header, so it is not indexed and not discoverable by guessing. A page with client numbers stays between you and the recipient.
- It expires. Put an expiry on the page so a single-use dashboard removes itself. Anonymous publishes already default to a 24-hour expiry, so disposable is the default, not a chore.
- Gateable per link. Add a password, or restrict to a client's email domain with magic-link verification, when the page leaves your team.
The trade is that Stacktree hosts static HTML, so the page is a snapshot, not a self-refreshing dashboard. That is the right shape here: a throwaway dashboard is a snapshot by definition. If you need a standing view that re-queries live data for many viewers, that is a real dashboard tool's job, not this.
How an agent does it in one step
Because the publish step runs over MCP, the agent can finish the job without you leaving the conversation. It calls publish_html with the rendered page and gets back a private URL, setting an expiry in the same call so the page is disposable from the start. For a client, it adds a password or an email-domain gate. If a follow-up changes the view, update_site replaces the page in place at the same URL, so a link you already sent stays correct. We package this as an agent-run-report skill so the gather, render, and publish steps run as one move, but the primitive is just the publish call.
Where to host an agent-built dashboard
| Criterion | Generic static host | Stacktree |
|---|---|---|
| Default visibility | Public. | Private, unguessable URL. |
| Indexed by search engines | Often yes. | No, opt-out header on every page. |
| Expires on its own | No, permanent until deleted. | Yes, 24h default for anonymous publishes. |
| Password or email-domain gate | Not built in. | Yes, per link. |
| Agent can publish over MCP | No, needs a deploy step. | Yes, one publish_html call. |
| Replace in place at same URL | Via redeploy. | update_site, same URL. |
| Good for a public website | Yes, that is its job. | Not the target use. |
Frequent questions
Where do I host a dashboard an AI agent built? +
How do I share an AI-generated dashboard with a client? +
Can an agent publish the dashboard itself? +
Should an agent-built dashboard expire? +
Can I just use GitHub Pages or Netlify for an agent dashboard? +
Is a hosted snapshot the same as a live dashboard? +
Related guides
- The throwaway dashboard Why agents are replacing standing dashboards, and what the pattern leaves out.
- Claude Live Artifacts Anthropic's self-refreshing dashboards, and the private-share gap at launch.
- Share with clients Put an agent-built report on a private link a client opens without an account.
- Publish HTML over MCP The publish_html and update_site calls an agent uses.
- Private HTML hosting The access model: unguessable URLs as the credential, plus gates.
Sources and further reading
- Ryan Carson on X, stop building dashboards ↗ The post behind the pattern: ask an agent to gather the data and build a temporary, throw-away HTML dashboard on demand.
- Anthropic, Use live artifacts in Claude Cowork ↗ The model-side version: dashboards an agent builds rather than ones you hand-maintain.
- Model Context Protocol ↗ The protocol the agent uses to publish the rendered HTML without leaving the conversation.
Give your agent's dashboard a private link that expires.
Stacktree publishes agent-built HTML to a private, unguessable URL the viewer opens without an account, and lets it expire on its own. Free tier, no card.
Sign up free →