Claude Code实践:HTML输出格式的卓越效果

05-09 05:00

阅读原文→
Anthropic公司Claude Code团队的Thariq Shihipar主张,在向Claude等大语言模型请求输出时,应优先选择HTML而非Markdown格式。HTML允许模型直接生成包含SVG图表、交互式组件和页面内导航等丰富元素的文档,显著提升信息呈现的交互性与清晰度。作者以GPT-5.5生成一个Linux安全漏洞的交互式HTML解释页面为例,展示了该方法的实际效果。这促使长期习惯使用Markdown的作者重新评估输出格式,并计划在提示工程中更多尝试富HTML输出

原文内容

Claude Code实践:HTML输出格式的卓越效果

Simon Willison’s Weblog

Subscribe

Sponsored by: WorkOS — Make your app Enterprise Ready with SSO, SCIM, RBAC, and more.

8th May 2026 - Link Blog

Using Claude Code: The Unreasonable Effectiveness of HTML. Thought-provoking piece by Thariq Shihipar (on the Claude Code team at Anthropic) advocating for HTML over Markdown as an output format to request from Claude.

The article is crammed with interesting examples (collected on this site) and prompt suggestions like this one:

Help me review this PR by creating an HTML artifact that describes it. I'm not very familiar with the streaming/backpressure logic so focus on that. Render the actual diff with inline margin annotations, color-code findings by severity and whatever else might be needed to convey the concept well.

I've been defaulting to asking for most things in Markdown since the GPT-4 days, when the 8,192 token limit meant that Markdown's token-efficiency over HTML was extremely worthwhile.

Thariq's piece here has caused me to reconsider that, especially for output. Asking Claude for an explanation in HTML means it can drop in SVG diagrams, interactive widgets, in-page navigation and all sorts of other neat ways of making the information more pleasant to navigate.

I wrote about Useful patterns for building HTML tools last December, but that was focused very much on interactive utilities like the ones on my tools.simonwillison.net site. I'm excited to start experimenting more with rich HTML explanations in response to ad-hoc prompts.

Trying this out on copy.fail

copy.fail describes a recently discovered Linux security exploit, including a proof of concept distributed as obfuscated Python.

I tried having GPT-5.5 create an HTML explanation of the exploit like this:

curl https://copy.fail/exp | llm -m gpt-5.5 -s 'Explain this code in detail. Reformat it, expand out any confusing bits and go deep into what it does and how it works. Output HTML, neatly styled and using capabilities of HTML and CSS and JavaScript to make the explanation rich and interactive and as clear as possible'

Here's the resulting HTML page. It's pretty good, though I should have emphasized explaining the exploit over the Python harness around it.

Screenshot of a dark-themed technical document titled "What this Python script does". Body text: "This is a compact, deliberately obfuscated Linux-specific local privilege-escalation proof-of-concept. Its apparent goal is to tamper with the in-memory image/page cache of /usr/bin/su, then execute su to obtain elevated privileges." A yellow-bordered callout reads: "Safety note: This explanation is for code understanding, reverse engineering, and defensive analysis. Do not run this on systems you do not own or administer. On a vulnerable kernel, code like this can alter the behavior of a privileged executable." Left column heading "High-level summary": "The script opens /usr/bin/su read-only, decompresses an embedded binary payload, and then processes that payload in 4-byte chunks. For each chunk, it performs a carefully arranged sequence involving Linux's kernel crypto socket interface, AF_ALG, pipes, and splice(). The important point is that this is not ordinary file writing. It never calls write() on /usr/bin/su. Instead, it appears to rely on a kernel bug/primitive involving spliced file pages and the crypto API to get controlled bytes placed into the page-cache representation of a privileged executable." Numbered steps follow: "1. Open target executable — /usr/bin/su is opened read-only. 2. Decode hidden payload — A zlib-compressed hex blob is decompressed into bytes. 3. Patch in 4-byte chunks — The helper function is called repeatedly with offsets 0, 4, 8, ...". Right column heading "Why it looks strange" contains a table with Pattern and Purpose columns: "import os as g — Short aliasing to make the script compact and harder to read. socket\(38, 5, 0\) — Uses raw numeric Linux constants instead of readable names. Compressed hex blob — Hides binary payload bytes and keeps the script small. splice() — Moves file-backed pages through pipes without normal user-space copying. try: recv\(...\) except: 0 — Triggers the kernel operation and ignores expected errors."

Posted 8th May 2026 at 9 pm

Recent articles

This is a link post by Simon Willison, posted on 8th May 2026.

html 96 security 602 markdown 32 ai 2009 prompt-engineering 190 generative-ai 1780 llms 1746 llm 597 claude-code 112

Monthly briefing

Sponsor me for $10/month and get a curated email digest of the month's most important LLM developments.

Pay me to send you less!

Sponsor & subscribe

原文图片

链接抓取:https://workos.com/?utm_source=simon-willison&utm_medium=newsletter&utm_campaign=q12026

The all-in-one solution

Enterprise SSO

(and a whole lot more)

WorkOS is a set of building blocks for quickly adding enterprise features to your app. You’ll be shipping quickly with a market-proven solution for your customers.

Add Single Sign-On to your app

SAML Lock

Auth for all SSO providers

Support any SAML or OIDC identity provider with a single integration

SAML Lock

Complete User Management

Manage users and organizations, set policies, and support all auth types

SAML Lock

Social authentication

Sign in to your app with Microsoft, Google, and more

SAML Lock

AuthKit

Flexible authentication UI powered by WorkOS and Radix

SAML Lock

Magic Auth

Passwordless auth with a six-digit code sent via email

SAML Lock

Multi-Factor Auth

Developer-first design

A unified platform with modern APIs

WorkOS provides a single, elegant interface that abstracts dozens of enterprise integrations.

Read the docs

Get your API key

RESTful APIs, JSON responses, and normalized objects

Dashboard seamlessly integrates WorkOS into your application

Realtime updates from directory services with webhook events

Modern SDKs for Node.js, Ruby, Python, .NET, Go and more

Multiple environments to map to your application development process

Supports 20+ enterprise services with a single integration point

Node.jsRubyPythonGoPHPJava.NETcURL

// Get a user’s access token and
// profile data from an Identity Provider

import WorkOS from '@workos-inc/node';

const workos = new WorkOS('sk_example_123456789');

const profile = await workos.sso.getProfileAndToken({
  code: '01E2RJ4C05B52KKZ8FSRDAP23J',
  clientID: 'client_123456789',
});

# Get a user’s access token and
# profile data from an Identity Provider

require 'workos'

WorkOS.key = 'sk_example_123456789'

WorkOS::SSO.profile_and_token(
  client_id: 'client_123456789',

import workos
from workos import client

workos.api_key = 'sk_example_123456789'
workos.client_id = 'client_123456789'

client.sso.get_profile_and_token('01E2RJ4C05B52KKZ8FSRDAP23J')

import "github.com/workos/workos-go/pkg/sso"

sso.SetAPIKey("sk_example_123456789")

sso.GetProfileAndToken(
  context.Background(),
  sso.GetProfileAndTokenOptions{
    Code: "01E2RJ4C05B52KKZ8FSRDAP23J",
  }

$this->sso = new WorkOS\SSO();

$profile = $this->sso->getProfileAndToken("01E2RJ4C05B52KKZ8FSRDAP23J");

import com.workos.WorkOS;

WorkOS workos = new WorkOS("sk_example_123456");

ProfileAndToken profileAndToken = workos.sso.getProfileAndToken("01E2RJ4C05B52KKZ8FSRDAP23J", "client_123456789");

Profile profile = profileAndToken.profile;

WorkOS.SetApiKey("sk_example_123456");

var ssoService = new SSOService();
var options = new GetProfileAndTokenOptions
{
    ClientId = "client_123456789",
    Code = "01E2RJ4C05B52KKZ8FSRDAP23J",
};

var profile = await ssoService.GetProfileAndToken(options);

curl --request POST \
  --url "https://api.workos.com/sso/token? \
  client_id=client_123456789& \
  client_secret=sk_example_123456789& \
  grant_type=authorization_code& \
  code=01E2RJ4C05B52KKZ8FSRDAP23J"

HTTP 200

Response {...}
  "access_token": "01DMEK0J53CVMC32CK5SE0KZ8Q",
  "profile": {
    "id": "prof_01DMC79VCBZ0NY2099737PSVF1",
    "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5",
    "connection_type": "okta",
    "email": "alan@foo-corp.com",
    "first_name": "Alan",
    "last_name": "Turing",
    "idp_id": "00u1a0ufowBJlzPlk357",
    "object": "profile",
    "raw_attributes": {...}

WorkOS

Okta Logo

Azure Logo

Google Logo

SAML

OneLogin Logo

ADFS Logo

SAML Logo

BambooHR Logo

JumpCloud Logo

PingIdentity Logo

OpenID Logo

DUO Logo

 Logo

Directory Sync

SCIM and HRIS integrations? No sweat.

Quickly enable full user lifecycle management by syncing your app with dozens of enterprise employee directory systems.

Add Directory Sync to your app

SCIM Provisioning

SCIM provisioning

with Okta, Entra ID, ADFS, and more

HRIS Integration

HRIS integration

with Bamboo, Rippling, and others

Frictionless set up

The IT admin’s admin

Free your support team from the ongoing headache of configuring SSO for enterprise customers. The Admin Portal is a hosted interface for IT admins to directly set up WorkOS.

Try a live demo

Watch the launch video

Admin Portal Screenshot

Effortlessly connect any identity provider or directory

Customize the look and feel to match your brand

Host on your custom domain (CNAME)

A polished experience for IT administrators

Step-by-step setup guides with detailed screenshots

Seamlessly integrates into your existing application

Why WorkOS?

Expand your market

In the past, building for the enterprise was complex, time-consuming, and distracting from core features. Deals would slip away, perhaps forever, due to requirements from IT admins.

With WorkOS, you can immediately begin selling to enterprise customers and expand your market footprint.

Watch: Crossing the
Enterprise ChasmWhat happens if you don’t become Enterprise Ready?

Powered by WorkOS

“I think we could have done even more business if we had partnered with WorkOS earlier, it's been incredibly well received.”

Guillermo Rauch

Founder & CEO

Read more

“The WorkOS team was right there with us every step of the way. Their support ensured those final migrations were just as smooth as the rest.”

Andreas Djokic

Enterprise GTM

Read more

“Cursor now completely runs on WorkOS. Login times are much faster, the signup page looks much better, and we’re not subject to Auth0's customer-hostile and opaque pricing anymore. Plus, we’re excited to add SSO for our business tier soon.”

Arvid Lunnemark

Founder

Read more

“SSO is a crucial part of our Enterprise Pro plan, and with WorkOS we could roll it out in less than a week. Docs are comprehensive, the Admin Portal has made customer onboarding a breeze, and the level of support we received directly in Slack has been phenomenal.”

Dmitry Shevelenko

Chief Business Officer

Read more

“Integrating was straightforward, pleasant, and fun. The team answered my questions quickly, and went above and beyond to help when I ran into issues.”

Bryant Chou

Co-Founder & CTO

Read more

“When I asked the team, how was the experience with WorkOS? They were just like, this is incredible.”

Sam Lambert

CEO

Read more

“WorkOS simplified the complexity of implementing single sign-on (SSO) with multiple identity providers.”

Daniel Marashlian

Read more

“With our in-house solution we had to spend 2-4 hours provisioning each SSO connection. I wanted to find a solution that would allow us to focus on building core-products.”

Jarel Fryer

Engineering Manager

Read more

“We did consider open source, but WorkOS provided a far superior developer experience.”

Jeanne Thai

Product Manager

Read more

“With Audit Logs, we were able to launch the storage, querying, and export capabilities we needed into production in just a matter of days.”

Pete Hamilton

Read more

“We viewed WorkOS’ connections-based pricing as a more viable option aligned with our projected growth. The Admin Portal has also been a critical feature allowing us to save engineering time and provide a more polished enterprise experience.”

Umar Azhar

Co-founder & CTO

Read more

“WorkOS’ SCIM API has been a game-changer, enabling us to meet the user lifecycle management needs of our largest enterprise customers.”

Dana Lawson

SVP, Engineering

Read more

“The decision to use WorkOS was straightforward. We saw good feedback from existing customers and reviewing the documentation made us confident that our needs would be addressed.”

Chris Lu

Co-founder

Read more

“WorkOS was super easy to self serve and get up and running. It provided us super easy-to-implement must-have functionality out of the box.”

Brennan Spellacy

Co-Founder & CEO

Read more

“What sold WorkOS was the Admin Portal. Our UI gives customers a link; they go to the Admin Portal, complete onboarding steps at their leisure, and never have to talk to us, making the onboarding process a breeze.”

Chris Pickett

Staff Engineer

Read more

“SCIM is a game-changer for our customers, saving them a lot of time and reducin

链接抓取:https://thariqs.github.io/html-effectiveness/

01

Exploration & Planning

3 demos

When you're not sure what you want yet. Ask the agent to fan out across several directions and lay them next to each other so you can point at one — instead of reading three sequential walls of text and trying to hold them all in your head. And once you've picked, turn the pick into a plan the implementer can actually read.

Three code approaches Side-by-side comparison of three ways to solve the same problem, with trade-offs called out inline. 01-exploration-code-approaches.html→ Visual design directions A handful of layout and palette options rendered live so you can react to them, not imagine them. 02-exploration-visual-designs.html→ Implementation plan Milestones on a timeline, a data-flow diagram, inline mockups, the risky code, and a risk table — the plan you hand off. 16-implementation-plan.html→

02

Code Review & Understanding

Diffs and call-graphs are spatial information; markdown flattens them. Let the agent render the change as an annotated diff, draw the module as boxes and arrows, or write the PR description your reviewers actually want — so the shape of the code is visible at a glance.

Annotated pull request A diff rendered with margin notes, severity tags and jump links — easier to scan than scrolling a terminal. 03-code-review-pr.html→ PR writeup for reviewers The author's side: motivation, before/after, a file-by-file tour with the why , and where to focus the review. 17-pr-writeup.html→ Module map An unfamiliar package drawn as boxes and arrows, with the hot path highlighted and entry points listed. 04-code-understanding.html→

03

Design

2 demos

HTML is the medium your design system ships in, so it's the natural format for talking about it. Tokens become swatches, components become contact sheets, and the artifact can be fed straight back into the next prompt.

Living design system Colors, type scale and spacing tokens pulled from a repo and rendered as swatches you can copy from. 05-design-system.html→ Component variants Every size, state and intent of one component laid out on a single sheet for review. 06-component-variants.html→

04

Prototyping

Motion and interaction can't be described, only felt. A throwaway page with the real easing curve or the real click-through tells you in five seconds what a paragraph of prose never could.

Animation sandbox The transition in isolation with sliders for duration and easing, so you can tune it before wiring it in. 07-prototype-animation.html→ Clickable flow Four screens linked together — enough fidelity to feel whether the interaction is right. 08-prototype-interaction.html→

05

Illustrations & Diagrams

Inline SVG gives the agent a real pen. Ask for the figures for a post or a flowchart of a process and get vector art you can tweak by hand or paste straight into the final document.

SVG figure sheet The diagrams for a blog post, drawn inline so they can be tweaked and copied out one by one. 10-svg-illustrations.html→ Annotated flowchart A deploy pipeline drawn as a real flowchart — click any step to see what runs, timings, and failure paths. 13-flowchart-diagram.html→

06

Decks

1 demo

A handful of <section> tags and twenty lines of JS is a slide deck. Point the agent at a Slack thread or a design doc and get something you can arrow-key through in a meeting — no Keynote, no export step.

Arrow-key slide deck A short presentation as one HTML file. Left and right to navigate, no build step. 09-slide-deck.html→

07

Research & Learning

An explainer with collapsible sections, tabbed code samples and a glossary in the margin reads very differently from the same words dumped linearly. The agent can build the scaffolding that makes a new topic navigable.

How a feature works "Explain rate limiting in this repo" — TL;DR box, collapsible request-path steps, tabbed config snippets, and an FAQ. 14-research-feature-explainer.html→ Concept explainer Consistent hashing taught with a live ring you can add/remove nodes from, a comparison table, and a hover-linked glossary. 15-research-concept-explainer.html→

08

Reports

Recurring documents — status updates, post-mortems — benefit most from a bit of structure and color. A small chart and a colored timeline turn something people skim into something they actually read.

Weekly status What shipped, what slipped, and a small chart — formatted for a quick skim on Monday morning. 11-status-report.html→ Incident timeline A post-mortem with a minute-by-minute timeline, log excerpts and the follow-up checklist. 12-incident-report.html→

09

Custom Editing Interfaces

Sometimes it's hard to describe what you want in a text box. Ask for a throwaway editor for the exact thing you're working on — and always end with an export button that turns whatever you did in the UI back into something you can paste into the agent or commit. You stay in the loop; the loop gets tighter.

Ticket triage board Drag thirty tickets across Now / Next / Later / Cut, then copy the final ordering out as markdown. 18-editor-triage-board.html→ Feature flag editor Toggles grouped by area, dependency warnings when a prerequisite is off, and a "copy diff" button for just the changed keys. 19-editor-feature-flags.html→ Prompt tuner Editable template on the left with variable slots highlighted; three sample inputs on the right re-render live as you type. 20-editor-prompt-tuner.html→