in-html — Ease Your Tired Mind with a Visual Explainer Called HTML

Clickbait cover: 'Stop reading markdown — your eyes will thank you.' with Ben on stage holding a mic, and a pill that reads '/in-html + /grill-with-docs' /in-html is live in ninyawee/skills — install with npx skills ninyawee/skills/in-html
Hey — your eyes You've been reading markdown all day. Your eyes are tired in that specific gray-on-gray way. Before you close this tab: this article isn't another wall of prose. It's shaped like the thing it's about. Don't give up — you can read more if it's HTML instead of MD. That's the whole point.

What in-html actually is

It’s a Claude Code skill. One job: stop the agent from dumping markdown into chat when it could have handed you a page.

Markdown in chat

  • Linear. You read top to bottom.
  • Same gray on same gray. No shape.
  • Diagrams degrade to ASCII art.
  • Decisions buried in paragraphs.
  • Eye fatigue compounds across the day.
The default. Cheap to produce. Costs you.

HTML artifact in your browser

  • Glanceable. Eye picks the section.
  • Color, shape, position do work.
  • Real mermaid diagrams.
  • Decision tables with one row highlighted.
  • Code with file:line captions, not retyped.
One self-contained .html file in /tmp/in-html/. Pico CSS, opened in your browser.

Two modes — pick by direction of data flow

AgentClaude Codeviz HTML pagediagrams, code, tablesread-onlyYoutired eyesfeedback panelchips, sliders, drag-dropinteractivevizeye flickclick chip / fillJSON via /submit
The rule If the artifact only flows agent → you, it's Mode 1 (viz). If anything flows you → agent — one focused answer, an ordered list, a tagged config — it's Mode 2 (feedback). Both produce one .html file. Both open in your real browser.

Mode 1 — a real viz artifact

Here’s an actual artifact the agent produced when I asked it to walk me through gh-x-html’s sandbox decision before I reviewed the ADR. One file. Mermaid flowchart up top, decision table in the middle, real code excerpt at the bottom, a “risk if regressed” callout pinned next to it.

Screenshot of a Mode 1 in-html artifact rendering the gh-x-html iframe sandbox model — title, why-this callout, mermaid flowchart, and decision table
See the full artifact (the same thing as a five-screen markdown ADR would have been — but two scrolls) Full-page screenshot of the same Mode 1 artifact — flowchart, decision table, side-by-side same-origin vs opaque comparison, code excerpt, risk callout, and 'what's out of scope' details

Mode 2 — a real feedback panel

The other half. The agent needs structured data back from me in the same turn. It writes the HTML, runs a tiny bun server in the foreground, the browser opens, I click a chip or fill a form, I hit Submit, the server prints my answer as JSON to stdout, the Bash call returns, the agent keeps going — all in one turn.

Screenshot of a Mode 2 in-html feedback panel — 'Customer or User?' question, glossary block, ambiguous code excerpt, four chip choices with Customer recommended in purple, and a pre-filled recommended-answer textarea
See the full panel (with talk-more drawer and action row) Full-page screenshot of the same Mode 2 panel including recommended-answer textarea, Submit / Talk more first / Copy-as-JSON actions

Mode 2 was built for grill-with-docs

Where Mode 2 came from I built the feedback half of in-html specifically to feed grill-with-docs — the skill that stress-tests my plan against the project's existing terms and decisions one branch at a time. Plain-chat grilling broke down in two places, and Mode 2 fixes both.

1. I need a clear idea of the frontend outcome

When the agent is asking "should the empty state be a chip picker, a search box, or a single CTA?", typing words at it is a slow guess. Mode 2 lets the agent render the candidate — a real chip row, a real search input, a real button — right in the question panel. I tap the one that looks right. The frontend decision is made by looking, not by describing.

Tangible UI > written intent. The decision settles in one fixation instead of three rounds of "no, more like…".

2. Explaining a complex topic to me, fast

When the branch we're grilling is non-trivial — a routing taxonomy, a billing-vs-auth boundary, a cache-invalidation rule — the agent needs to lay out context before asking the question. Mode 2 gives it the canvas: the glossary entry, the ambiguous code excerpt, the side-by-side, the decision matrix — all on the same page as the question. Reading and answering happen in one pass.

The question and the context it needs share one fixation, not five paragraphs of scrolled prose.

The “Customer or User?” panel above is exactly this pattern — a real grill-with-docs turn that the agent rendered as an HTML page instead of typing into chat.

When markdown still fits, and when HTML wins

SurfaceBest withWhy
Inline answer in chat.mdOne paragraph. No diagram needed. Don't open a browser tab for two sentences.
Diff, log, command output.mdAlready line-shaped. No structure to extract.

How I use it every day

Plan review "Show me, don't tell me." Mermaid + decision table + the actual diff. I read it in 30 seconds instead of five minutes.
Architecture decision A flowchart for the data flow, a decision table for the options, a callout for the risk. Beats a 400-line ADR draft every time.
Grilling questions The agent serves me a panel with chips and a pre-filled recommended answer. One click, I'm done, the turn keeps going.
Glossary disambiguation "Customer or User?" The agent shows me both glossary entries side-by-side and the ambiguous code. Chip pick.
Status report A table with green / yellow / red pills, not a paragraph that says "mostly green, some yellow."
Config shaping The agent gives me the editor — sliders, ordered lists, chip pickers — instead of asking me to dictate the YAML.

Why this matters more than it sounds

The real cost of cognitive fatigue When you're cognitively tired, you stop giving a fuck. You surrender — and the consequences happen to you instead of being understood.

That's what a wall of markdown does at the end of a long day. You're still reading the words. You've stopped catching the implications. The bug you'd have spotted at 10am ships at 4pm. The misalignment you'd have called out becomes the decision. The point of in-html isn't prettier docs — it's that you keep caring long enough to notice.

Install + try it

One line:

npx skills ninyawee/skills/in-html

In any Claude Code session: /in-html. Or just describe what you want shown — the skill should pick itself up. For Mode 2 you’ll also need bun on your PATH.

If you build a Mode 2 panel for something interesting — a custom config shaper, a tag picker, a HITL annotation flow — I’d love to see what shape your JSON ended up in.

— Ben

Skill: ninyawee/skillsskills/in-html · Sibling: gh-x-html · Inspiration: Thariq Shihipar on How I AI, plannotator

© 2026 Nutchanon. All rights reserved. วงแหวนเว็บ