Agents answer in walls of text. We measured the one-page HTML instead.
We pinned answer-me-with-html 0.5.2, rendered five drafts keyless, and measured Markdown bytes in versus HTML bytes out. The page is 24x to 74x larger than the draft, and that is the point.
By David Discua
Measured in the lab
Bars on a log scale.
- 5 fixtures render · 1 golden matches
- upstream npm test passes (v0.5.2)
- gitleaks 8.30.1 · 0 leaks
- keyless · 0 API keys
From reports/golden.json · run on October 13, 2026. answer-me-with-html 0.5.2 (4da5ae8); 5 fixtures (1 local golden + 4 upstream examples); input = draft Markdown bytes, HTML = normalized am render bytes
Draft → one page
01/01A draft goes in, answer me with HTML does its thing, and one page comes out.
Ask an agent a hard question and you usually get a wall of Markdown: headings, bullets, a code fence, more bullets. QingYunA/answer-me-with-html is a skill that turns that draft into a single HTML page with real layout, diagrams and tables, so we pinned it at 0.5.2, rendered five drafts with no API keys, and measured Markdown bytes in against HTML bytes out (reports/golden.json, run on October 13, 2026). The page comes out 23.7x to 112.9x larger than the draft, and the catch is that most of those bytes are a fixed envelope of styles and diagram runtime, so the ratio says nothing about the quality of the answer.
The catch
A one-page answer still needs a renderer you trust. The HTML is generated code, and generated code drifts: a dependency bump, a theme change or a timestamp in the colophon can quietly change what your users open. So the lab pins answer-me-with-html@0.5.2 to commit 4da5ae8, renders the fixture with an isolated AM_HOME, normalizes the one timestamp the renderer embeds, and diffs the result byte-for-byte against fixtures/golden/tcp-handshake.html. In this run it matched, and bun run test finished 4 pass / 0 fail.
The second catch is the numbers themselves. HTML bytes are not a quality score. The page is bigger than the draft because it carries styles, diagram chrome and fonts so it opens anywhere as one file. Treat the ratios below as a cost you are choosing. They make no claim about compression in either direction.
What we ran (keyless)
bun install && bun run report
scripts/report.ts runs the golden and unit tests, then renders every local fixture plus every non-video example that ships inside the upstream package. It runs the pinned upstream npm test (with AM_E2E unset, so browser and TTS end-to-end slices skip), runs gitleaks, and strips any *_KEY, *_TOKEN or *_SECRET variable from the environment of every child process before it starts. It writes reports/golden.json and a human-readable reports/golden.md.
Headline numbers from reports/golden.json (run on October 13, 2026):
| Fixture | Source | Input bytes (Markdown) | HTML bytes | Ratio |
|---|---|---|---|---|
| ste100 | upstream example | 4,971 | 117,978 | 23.7x |
| tcp | upstream example | 1,869 | 109,642 | 58.7x |
| architecture | upstream example | 1,445 | 106,471 | 73.7x |
| tcp.en | upstream example | 1,314 | 105,724 | 80.5x |
| tcp-handshake | local golden | 897 | 101,248 | 112.9x |
5 fixtures rendered (1 local golden + 4 upstream examples). The local golden matched byte-for-byte after timestamp normalization. The fixture byte counts were identical across three separate runs on the same pin; only generated_at and the durations moved.
Input grows from 897 bytes to 4,971 bytes, a 5.5x spread, while the HTML only moves from about 101 KB to about 118 KB. Roughly 100 KB of every page is a fixed envelope (layout, styles, diagram runtime), and the draft itself is a thin layer on top. If a one-page answer is the right artifact for a short brief, it is almost free to make it a longer one.
The gate checks that go with the numbers, all from the same report:
bun run test: 4 pass / 0 fail (golden render + upstream pin tests)- upstream
npm testat the pinned SHA: pass, 181 s on this machine - gitleaks 8.30.1: 0 leaks found
- keyless: 0 API keys used; 2 key-like env vars were stripped from child processes
The upstream step needs network (a shallow fetch of the pinned commit plus npm ci), and its export tests launch a local Chrome whenever one is found. On a heavily loaded machine that suite stalled once and failed once before passing. The report script now kills the step after UPSTREAM_TIMEOUT_MS and records the outcome instead of hanging, and REPORT_SKIP_UPSTREAM=1 skips it entirely when you only want the byte numbers.
How it is wired
The flow is short: Draft → answer-me-with-html → One page. The agent still writes Markdown with the usual fences (a flow block becomes a diagram, a table stays a table). The skill owns the presentation layer and emits one self-contained HTML file. The control point in our lab is the pinned am render binary under node_modules, isolated with AM_HOME so runs never touch a shared home directory.
We chose a TCP three-way handshake as the local fixture because it is small enough that the golden is reviewable in a pull request, and structured enough that a diagram, prose and a flags table all have to survive the render for the diff to pass.
Minilab (open source)
Upstream: QingYunA/answer-me-with-html (MIT · JavaScript · 3,274 stars on October 13, 2026).
Run bun run report and compare your reports/golden.md against the table above.
Run it yourself
SkilledDragonCorp/minilab-answer-me-with-html
Clone, install and run the report with no API keys. The numbers above are what that run writes.
bun install && bun run reportSkilledDragon is not affiliated with answer-me-with-html or QingYunA. Numbers are from our own lab run; re-run the report before relying on them. Marks belong to their owners.
All labs