TL;DR: htmlbin.dev is a public URL host for the HTML your agent writes. One-time GitHub sign-in via a device-code flow, then the agent ships drops on its own. Cloudflare Workers + D1 + KV. MIT.
Most of the artifacts an agent produces today get rendered as Markdown in a chat window and then disappear. That’s fine for “explain this,” but it’s the wrong format the moment the artifact has visual ambition — a spec, a report, a UI mock, a PR writeup. Markdown can’t carry it. HTML can.
This is the Thariq argument: if you buy it, agents need somewhere to put the HTML they generate. A throwaway URL with a viewer that just works. That’s the whole thesis.
#The product
agent ──► sign in once with GitHub (device-code, at /verify)
──► POST /api/drops {html}
│
▼
htmlbin.dev/p/<id>
After the one-time verify, the agent has a hb_… bearer token and can POST drops until it gets bored. New HTML on the same slug mints a new version — same URL, switch with ?v=N. No signup form, no dashboard, no “create your first project.” Your agent is the dashboard.
#Stack
One Cloudflare Worker. Hono for routing, D1 for metadata, KV for HTML bodies, Web Crypto for anything sensitive, GitHub OAuth as the single identity checkpoint. Deploy is git push. Previews are a GitHub Action that drops a wrangler versions upload URL on every PR.
#What I actually use it for
This is where I keep landing back. Whenever there’s something I can’t fit in my head — a long public PR I want to understand, an article I want to visualize, a sprawling Reddit thread I need to summarize — I ask Claude to render an HTML view of it and drop it on htmlbin. The URL becomes the artifact: shareable, bookmarkable, comes back when I do.
A few drops people have made:
- how htmlbin works
- cross-platform gstack — pr #1111
- workers nav — three redesigns
- google logo — animation playground
The HTML isn’t the deliverable — it’s the lens. A PR becomes scannable. A megathread becomes a one-page brief. An article becomes a diagram you can poke at.
#Try it
If you have an agent that emits HTML, point it at htmlbin.dev — /api/onboard tells it everything it needs to know.
