OpenTree DashboardSign in

$ publish_html

Share a Claude artifact without publishing it to everyone

Claude's own sharing is binary: the artifact stays inside the conversation, or it goes public. Re-publishing the same HTML here gives you the middle option — an unguessable link with a password, an expiry and a viewer you control.

The two-option problem

An artifact you made in a conversation is visible to you. Publishing it makes it visible to anyone with the link, permanently and without gates. There is no show this to one client for a week setting, which is the setting most people actually want.

What Anthropic's publishing does and does not do

None of that is a criticism — it is a share feature, not a hosting product. It just does not cover private delivery.

Publishing the artifact here instead

Copy the artifact's HTML and publish it:

curl -X POST https://read.botook.ai/v1/publish -F file=@index.html

Or, with the connector installed, ask Claude to do it and skip the copy entirely:

publish_html({
  content: "<!doctype html>…",     // the artifact
  expires_in_hours: 168,
  password: "optional"
})
CapabilityPublic artifactHere
Unguessable URLPublic link22-character random token, never indexed
PasswordNoYes
Work-email gateNoYes
ExpiryNoHours, or never
Burn after readNoYes
Your own domainNoYes
RevokeUnpublish going forwardHard delete, record and object
Reader accountNoneNone

Set the gate

set_password({ site_id: "…", password: "hunter2" })
set_email_gate({ site_id: "…", allowed_email_domain: "client.com" })
set_expiry({ site_id: "…", expires_in_hours: 168 })

Keep it forever, or not at all

expires_in_hours: "never" makes an artifact permanent — genuinely permanent, not until a plan changes. The opposite is also available: 24 hours, then deletion.

An artifact that keeps changing

Ask for a revision in the same conversation, then replace in place. The link you sent stays correct:

update_site({ site_id: "…", content: "<!doctype html>…" })

An artifact that pulls in a library

Artifacts often reference a CDN. The viewer's content policy refuses third-party scripts, so inline what the page needs before publishing — ask Claude for a self-contained document and it will produce one.

Unpublishing an artifact you already made public

Unpublish it on Anthropic's side to stop future access, then re-publish the same HTML here behind whatever gate it should have had. You cannot recall what was already copied — nobody can — but everything from here on is governed. More on making an artifact private.

Sharing with a team rather than a person

A work-email gate is usually right: anyone at the company can open it, nobody else can, and you did not have to collect a list of addresses.

Sharing with a client

Put it on your own hostname and add a passcode — custom domains and passwords.

Collecting reactions

Turn the toolbar on and the people you sent it to can react or comment in place, with no account:

set_agentation({ site_id: "…", agentation: true })

Knowing whether it was opened

curl https://read.botook.ai/sites/SITE_ID -H "Authorization: Bearer otr_live_YOUR_KEY" \
  | jq '{view_count, unique_viewers, last_viewed_at}'

Doing it in bulk

Several artifacts from one conversation? Ask Claude to publish each and report the links, or zip them and publish the archive as one site with an index.

Getting the markup out of the artifact

Publishing needs the document, and there are three ways to get it depending on where you are standing. The last one is the only one that scales:

  1. Copy it out of the artifact panel and paste it into the box at the bottom of the home page.
  2. Save it to a file and send the file: curl -X POST https://read.botook.ai/sites -F file=@artifact.html.
  3. Skip the copy entirely — connect the agent once and ask it to publish, so the markup never passes through your clipboard at all.
curl -X POST https://read.botook.ai/v1/publish -F file=@index.html

When the artifact is a tool, not a document

Plenty of artifacts are small applications: a calculator, a converter, a form that scores something. Those work here, with one boundary worth knowing. A single-file tool that runs entirely in the browser is exactly what this hosts. A tool that expects a server — an API key it calls out with, a database, a login — does not become one by being published, because there is no server side here to run it on. State that lives in the reader's own browser is fine; state that needs to be shared between readers is not.

Dropped into a chat app or an email, the link unfurls into a card built from a real screenshot of the current version of the page — so colleagues see what it is before deciding to open it. Put a password or an email gate on it and the card becomes a deliberate placeholder instead, because a preview image of a gated page would quietly undo the gate. Take the gate off later and the real screenshot is regenerated without you asking.

What this does not change

The artifact is still whatever Claude wrote. Publishing it privately is a hosting decision, not a review — read it before you send it, exactly as you would anything else.

Questions

Is the copy still in my conversation?

Yes. Publishing here does not move or remove anything.

Can I publish straight from Claude.ai?

With the connector, yes — one tool call, no copy-paste.

Does the viewer need an account?

No.

Keep reading