HTML camp · 10 entries

The HTML camp: agents write pages

The HTML camp starts from one observation: a UI used to be expensive, so agents answered in text, and now a purpose-built interface costs one model turn. Its members bet that the model (or a developer) writes HTML/JS and a host renders it in a sandbox. The camp follows five paths. (1) The model writes the page and the host keeps it: Claude Artifacts, Claude Code Artifacts, Gemini dynamic view and AI Mode generative UI, and the short Imagine with Claude demo. (2) The developer writes a reviewed template and the model only calls it: MCP Apps/MCP-UI and the OpenAI Apps SDK, which converged on MCP Apps in February 2026. (3) The model writes code against a fixed catalogue: Cursor Canvas's component library, and Claude's Slides/Docs/Design/Dashboards templates from September 2026. (4) A local review loop around agent HTML: Lavish, with element-level annotations and a long poll. (5) The model writes durable apps: v0. Under all of them sit three problems. Text flattens spatial and interactive information. People increasingly use generated UI to understand things (explainers, module maps, simulations; Google's research found raters strongly preferred generated pages to text, speed aside). And a page the person can't answer through is only a broadcast, so 2026 was the year of return paths: Artifact comments sent to a watching Claude session, Lavish's poll, MCP Apps' update-model-context, ChatGPT widget state.

The entries

browser · harness · product

Claude Code Artifacts

Claude Code publishes an agent-written HTML page to a live, versioned, shareable claude.ai URL that it can keep updating, take comments on, and feed with connector data.

For fictty Cede share-and-keep entirely: add an HTML export so a fictty screen can graduate to an Artifact. Treat its comment-to-Claude watch loop as the minimum bar for fictty's watch. Copy declared capabilities: data-source commands should be declared and reviewable. Compete only on local live sources, exact frame read-back, terminal/SSH and agent neutrality.

complementevidence: strong
chat · format · protocol

MCP Apps (SEP-1865) and MCP-UI

The official MCP extension that lets a tool ship a predeclared HTML UI, which hosts render in a sandboxed iframe and talk to over MCP JSON-RPC.

For fictty No terminal renderer, so fictty can't adopt it as its surface. It should borrow the vocabulary (tool-input/result, display modes, declared CSP as a model for declaring command scope) and expose fictty itself as an MCP server. A small HTML renderer could later show a fictty UI value as an MCP App.

complementevidence: strong
browser · idea · essay

"HTML is the new markdown" (The unreasonable effectiveness of HTML)

An essay and 20-example gallery arguing agents should write self-contained HTML instead of Markdown for any non-trivial output.

For fictty It is the strongest counter-argument to terminal screens, yet its twenty examples reduce to a handful of recurring shapes, which argues for a catalogue. Rebuild the gallery as fictty recipes: what works becomes a demo, and what fails marks the terminal's real limit. Replace 'paste the result back' with read-back and watch.

inspireevidence: mixed
chat · harness · product

Claude Artifacts (claude.ai)

The chat-side original: substantial outputs open beside the conversation as runnable, shareable artifacts, now with viewer-billed AI, connectors, storage and typed templates.

For fictty The lab's own move to typed templates supports data-over-code for common shapes. Name fictty's recipes as discoverably as Slides/Docs/Dashboards, and plan for personal versus shared state once several people or agents watch a screen.

inspireevidence: strong
native · harness · product

Cursor Canvas

Cursor's agent answers with a persistent, rerunnable canvas of sections, stats, tables and charts built from a first-party component library, shareable as a live snapshot.

For fictty It is commercial evidence that 'agent fills a known catalogue' beats free-form pages for recurring shapes. Keep the query, not the result: make refresh/rerun explicit and show data age. Ship recipes as skills, and make sure stat tiles and sections are first-class.

inspireevidence: mixed
browser · harness · project

Lavish (lavish-axi) and AXI

A local CLI and browser editor where a person annotates an agent's HTML file and the agent collects that feedback with a long poll, then revises.

For fictty Lavish's loop is the nearest thing to fictty's in the browser. Make watch a long poll that returns structured, node-id-anchored feedback, with explicit ended states. Add point-at-a-node notes, delivery receipts and layout warnings reported to the agent, and follow AXI for the CLI. Interoperate (export a screen to HTML for Lavish) rather than rebuilding annotation.

inspireevidence: strong
chat · harness · product

Gemini generative UI (dynamic view, visual layout, AI Mode)

Gemini answers a prompt with a custom interactive HTML page built per question, in the Gemini app and Search AI Mode.

For fictty It is the best published evidence for the learning thesis, and its latency caveat (up to a minute) is fictty's opening. Borrow post-processing as validate-and-repair of pushed UI values. Build explainer recipes, and measure time to first useful frame, the number Google left out.

inspireevidence: mixed
browser · idea · research

Imagine with Claude

A five-day research preview in which Claude generated software on the fly on a virtual desktop, with each click producing the next piece of interface.

For fictty It is the clearest argument for fictty's split by contrast: putting the model in the per-click loop is why it stayed a demo. The agent should generate screens and a runtime should own behaviour. Use 'agent generates the next screen' as a benchmark where only changed nodes are patched.

inspireevidence: thin
chat · framework · product

ChatGPT Canvas and Apps SDK

OpenAI dropped its model-written side panel (Canvas) from current models and bet on developer-built widgets in ChatGPT via the Apps SDK, now an MCP Apps host.

For fictty The Canvas reversal is a data point: heavy surfaces should be summoned, not default, so fictty should teach agents when not to open a screen. Borrow the model-visible versus UI-only split (a compact model view in get --state) and the display-mode names.

watchevidence: mixed
browser · harness · product

v0

An app-building agent that turns a prompt or repo into a working web app with a live preview and one-click deploy, now with a GA headless API.

For fictty Mostly a reference point for what fictty is not (durable apps). Two small lessons: make watch and history typed events, and possibly offer a 'describe this screen as an app spec' graduation export. Low priority.

watchevidence: mixed

The overview

The HTML camp: agents write pages

Research as of 10 October 2026. This extends the HTML section of Why the terminal?. One dossier per entity:

dossierwhatrelationthreat (0-5)
Claude Code Artifactsagent publishes an HTML page from a session to a live claude.ai URLcomplement3
Lavish (lavish-axi) and AXIlocal browser review loop for agent HTML; long-poll feedbackinspire2
“HTML is the new markdown”the essay and twenty-example gallery behind the campinspire2
MCP Apps / MCP-UIstandard for tool-attached HTML UIs in chat hostscomplement2
Cursor Canvas (new)agent canvases from a first-party component library in the IDEinspire2
Claude Artifactsthe chat-side original, now with templates, storage, connectorsinspire2
Gemini generative UIper-prompt generated pages in Gemini and Searchinspire1
ChatGPT Canvas and Apps SDKCanvas dropped from current models; developer widgets via MCP Appswatch1
v0agent builds and deploys real appswatch1
Imagine with Claudefive-day demo of software generated per clickinspire1

Nothing on the brief turned out not to exist. Two corrections to the first pass: ChatGPT Canvas is no longer available in OpenAI’s current models (since 28 May 2026), and Cursor Canvas, which we missed, belongs here.

What is really being solved

Everyone in this cluster starts from the same observation: a UI used to be expensive, so agents answered in text; now a purpose-built interface costs one model turn. That changes what a UI is for. It no longer has to be a durable product that pays back its cost over years. It can be a throwaway made for one question, one review, one explanation, and then discarded or kept as a link.

Under that, three problems keep recurring:

  1. Text is the wrong shape for spatial and interactive things. Diffs, call graphs, options side by side, timelines, simulations. This is Thariq’s argument, Google’s research result (raters strongly preferred generated pages to text and Markdown, speed aside) and the reason every lab built a page surface.
  2. Understanding, not just output. The examples people reach for first are explainers: how a feature works, a concept explainer, a module map, a fractal you can zoom. Generated interactive UI is quietly becoming a teaching medium, and Google’s consumer work is explicitly about it. Almost nobody measures it.
  3. The way back. A page the person can’t answer through is a broadcast. The camp spent 2026 building return paths: copy-as-prompt buttons, Lavish’s long poll with element-level annotations, Artifact comments sent to Claude with the session watching, MCP Apps’ update-model-context, widget state in ChatGPT.

The paths

  • The model writes the page, the host keeps it (Claude Artifacts, Claude Code Artifacts, Gemini dynamic view, Imagine with Claude). Free-form HTML/JS, sandboxed, the full web as design ceiling. The bet: models write good-enough HTML and a browser is always near.
  • The developer writes the template, the model calls it (MCP Apps, MCP-UI, OpenAI Apps SDK). Reviewed HTML widgets attached to tools; data arrives through tool results. The bet: products and security need fixed templates; the model only decides when.
  • The model writes code against a catalogue (Cursor Canvas’s component library, Claude’s Slides/Docs/Design/Dashboards templates). A drift toward constrained output for recurring shapes. This is the HTML camp walking toward the data camp.
  • A local loop around the page (Lavish). Keep HTML, but make review precise and waiting cheap, with no account and any agent.
  • The model writes the app (v0). Durable code that ships. The far end of the ephemerality axis.

The open debate

  • Code or data? The HTML camp’s evidence is that models are good at HTML and people like the results. Its own behaviour says something else: Anthropic added typed templates, Cursor uses a component library, MCP Apps fixes templates in advance, Google pairs free-form HTML for consumers with A2UI (data) for developers, and OpenAI pulled Canvas back to inline blocks. Nobody is defending “regenerate the whole page every time” for recurring shapes.
  • Where does the data come from? In most of the camp the numbers are frozen into the page when the model writes it. Live data is arriving through hosted connectors (Artifacts, claude.ai) and tool calls (MCP Apps), always through a vendor’s proxy. Nobody binds a local command or stream to a page.
  • Can the agent see what it made? Read-back is source code, DOM snapshots, app-chosen context or database rows. Nobody offers the rendered frame as exact text. MCP Apps explicitly deferred screenshots.
  • Who owns the surface? Each lab’s page surface is tied to its own host and account. MCP Apps is the only cross-vendor piece, and it is for developer widgets, not agent pages. Lavish is the only agent-neutral page loop, and it’s local and single-maintainer.

What this means for fictty

The HTML camp owns pages to keep and share, and with comments, watching, connectors and a shared database, Claude Code Artifacts now reaches into ten-minute working screens for anyone with a browser and a claude.ai account. That’s the real competitive pressure, and it should be said plainly in the blog post. fictty should not build hosting, sharing, comments or HTML review: export to HTML and hand off to Artifacts or Lavish instead.

What the camp does not do, and fictty does:

  • data bound to local commands and streams at frame rate, never through the model or a vendor proxy;
  • exact read-back of what the person sees, as text and as state;
  • behaviour (keys, focus, selection) in a runtime, so it is consistent across every screen rather than re-implemented in every page;
  • any agent, no account, in the pane, over SSH.

The camp also hands fictty its to-do list: a watch at least as good as Artifact comments and Lavish’s poll, point-at-a-node feedback, layout warnings reported to the agent, declared and reviewable data-source scope (like MCP Apps’ CSP and Artifacts’ declared connectors), an MCP server face, and the Thariq gallery rebuilt as fictty recipes as the honest test of the terminal’s limits.