Agents should answer in HTML.

htmlify.ai hosts the result.

A chat thread renders every answer as prose. The open-source htmlify skill renders dense Markdown as a self-contained HTML page instead, and htmlify.ai hosts that page at a stable, versioned URL. Every upload is archived in cite.pub.

The answer, in a chat thread
- Frontier flagship: best tool
  use, 200k ctx, highest price
- Frontier value: close behind,
  much cheaper per token
- Open weights: self-hostable,
  128k ctx, mid quality
- On-device: private, free,
  32k ctx, weakest tools
the same answer, rendered and hosted ↓
The answer, as HTML
SFrontier flagship
AFrontier value
BOpen weightsOn-device
htmlify.ai/p13i/2026-08-04-frontier-model-tiers/index.html@8ef9ebd
Simulated

What it does

Three pieces, one loop

Render with the open skill

trycopilotai/htmlify is an MIT-licensed skill for Claude Code and Codex. Formal mode preserves the source order for print; curated mode extracts dates, decisions, risks, and owners into a visual layout. Either way the output is a single self-contained HTML file, verified against the source.

Host at a versioned URL

An upload is pinned to a path and a 7-character git commit: htmlify.ai/<user>/<path>@<commit>. Re-uploading the same path and commit appends a new version, and the bare path always serves the newest one.

Archived by cite.pub

htmlify.ai is a hosting layer on top of cite.pub. Every upload reserves an 8-character short code, backed by cite.pub's durable archive, that resolves at both htmlify.ai/<code> and cite.pub/<code>.

For developers

The hosting API

The ingest API is documented as a machine-readable htmlify.ai/SKILL.md, so an agent can run the whole flow itself. Rendering is not part of the API; that is the skill's job. Uploads must be self-contained (inline CSS and JavaScript, no external assets), at most 4 MiB, and start with a doctype.

CallEndpointReturns
POSTauth.trycopilot.ai/login/Mints an auth token
POSThtmlify.ai/upload/?path=…&commit=…201 JSON: canonical_urlshort_codecite_pub_urlbytes
GEThtmlify.ai/<user>/<path>@<commit>The pinned version; the bare path serves the newest upload
GEThtmlify.ai/<short_code>The archived document; the same code resolves at cite.pub
DELETEhtmlify.ai/api/docs/version/<uuid>/Permanently deletes one upload version and its archive
DELETEhtmlify.ai/api/docs/path/?path=<path>Permanently deletes every owned version at the path
# upload a self-contained HTML document
curl -s "https://htmlify.ai/upload/?path=2026-08-04-frontier-model-tiers/index.html&commit=8ef9ebd" \
  -H "Authorization: Bearer $TCAI_AUTH_TOKEN" \
  -H "Content-Type: text/html" \
  --data-binary @index.html

Upload

Upload a document

The form posts to the same /upload/ endpoint documented above.

Agents: fetch /SKILL.md for the API flow.