Answer me with HTML

Changelog

What changed in each version, newest first. These are the notes of the GitHub Releases.

0.5.11 (2026-11-05)

# GitHub Release →

Send a page to a chat app: am export

Discord, Telegram, Slack and WeChat show an .html file as source. am export turns a rendered page into files they show (#350, #354):

am export page.html --pdf page.pdf     # A4, the page's own print rules
am export page.html --png out/         # out/page-1.png, out/page-2.png ...
  • --png renders at 1200 CSS px wide and 2x, hides the toolbar, the reply and remark controls and the new-version notice, and cuts the page into slices no taller than 1800 CSS px. A cut falls in a gap between panels.
  • Exporting into the same folder again removes the <page-name>-<n>.png slices it did not write this time, so a shorter page leaves no old slices behind. Other files stay. A slice that is the input page, or that cannot be removed, is left in place and reported (#362, #363).
  • It needs Chrome, Chromium or Edge (AM_CHROME sets the path) and Node.js 22 or later.

Sort and filter a table

Write {table sort} right after a Markdown table, and the reader clicks a header to sort it. {table filter} adds a text filter over every cell; {table sort filter} gives both (#357, #365).

  • Columns of numbers, 1,200, $900, 12% or ISO dates sort by value, including integers larger than 2^53. Other columns sort as text.
  • The controls work from the keyboard, are hidden in print and in PDF/PNG export, and do not appear without JavaScript. A table without the attribute stays static.
  • A <script> in an html or svg block cannot run under the page's Content-Security-Policy. am render now warns about it, with the draft line.

Video narration from your own audio files

am video draft.md --audio-map lines.json takes the narration from audio files you already have, with no speech server: the JSON maps each narration line to a file, {"First the client sends SYN.": "audio/01.mp3"} (#356, #366).

  • Relative paths start at the map file's folder. A narration line without a key, or a missing file, stops the render and names it.
  • 16-bit PCM WAV works as is; other WAV encodings and other formats need ffmpeg. Clips get the same silence trimming and speech cache as --voice local, and the cache notices a changed file.
  • --audio-map cannot be combined with an explicit --voice. A command-line TTS source (#356) is still to come.

Fewer crossings in flow diagrams, and a warning for the rest

  • flow and er diagrams no longer draw a crossing that swapping two neighbouring nodes removes. Before, two edges that left one node kept the order of the draft and could cross (#369).
  • When a flow edge still runs through another node or another edge's label, am render warns with the draft line and a way out: the other direction when it draws the diagram clean (```flow TB), otherwise a split into an overview and a detail diagram. The page is still written (#378).
  • The check follows the curve the page draws, not the layout points, so it matches what the reader sees (#382, #384).

Other changes

  • Claude Code plugin: the plugin no longer ships with a node_modules folder, so it is no longer turned off in a Claude Code desktop SSH session ("has a symbolic link, node_modules/.bin/esbuild"). Run claude plugin update answer-me-with-html@answer-me-with-html (#361, #368).
  • am serve: a page opened over http keeps its answers, comments and remarks on the server, so a phone that discards a background tab no longer loses them (#322, #343).
  • Themes: every installed theme appears in the page's theme picker, not only the default one (#348, #353).
  • flow: a literal \n in a node or edge label breaks the line, as agents used to Mermaid write it (#347, #352).
  • File names: page and draft files are named with ASCII letters and digits only, at most 24 characters, so a ctrl-click in Windows Terminal or a wrapping TUI opens the whole path. A title with no ASCII gives page-<time>.html, so a draft can name its file with file: tcp-handshake in the front matter (#344, #351, #379, #383).
  • Korean: Korean pages break lines between words, not between syllables. A status badge with a long note wraps beside its icon instead of widening the table (#355).
  • Skill: commands use ${CLAUDE_SKILL_DIR} again, and other hosts are told to replace it with the skill's directory, which fixes Cannot find module '/scripts/am.mjs' in opencode (#326, #327).
  • Dependencies: dagre 3.1.3 and marked 18.1.2 (#376, #377).
  • Docs: INSTALL.md says there is no npm package and that -a '*' reports agents without global skills as failed, which is expected (#345). The reference says an automatic panel ID can name another panel after a new render, so give panels letters before am patch --panel B (#346). SKILL.md says the ask count and word limits are advice; the CLI checks only 2 to 6 options (#358, #360).

Full list: #327, #343, #345, #346, #351, #352, #353, #354, #355, #359, #360, #363, #365, #366, #367, #368.

0.5.10 (2026-10-26)

# GitHub Release →

Write a component as a ::: block

A component written the way VitePress and Docusaurus write an admonition now renders exactly like the fenced block, instead of the error 0.5.9 reported (#341):

:::callout ok Done
It works.
:::

is the same as

```callout ok Done
It works.
```
  • Only a component name counts: :::note, a bare :::, and ::: inside a code block stay text.
  • The block ends at a line of at least as many colons as its opener, so a block that opens with :::: can hold a ::: line.
  • An opener with no closing line is the same error as an unclosed ``` block.
  • The docs still teach the ``` form; ::: is accepted so a draft written from habit renders the first time.

Full list: #341.

0.5.9 (2026-10-26)

# GitHub Release →

A component written as a ::: block is an error

A draft that writes a component the way VitePress, Docusaurus or Pandoc write an admonition, :::callout … :::, used to render the lines as plain text with no warning. Now am lint and am render report it with the right syntax, together with any other errors in the draft, and no page is written (#336):

✗ L2 [fence] write a component as a fenced code block, not :::callout
  Correct example:
    ```callout warn Caution
    Close the valve before you remove the pump.
    ```
  • Only a known component name counts: :::note, a bare :::, and ::: inside a code block stay text.
  • SKILL.md now says above the component table that a component is a fenced code block.

Other changes

  • Website: a changelog page with the notes of every release, newest first, in English and Chinese: answer-me-with-html.com/changelog/. The notes now live in the repo as changelog/<version>.md (#337).
  • Contributing: a bug fix, docs, a typo, a test or a catalog theme can go straight to a PR. A new feature, new syntax, a new page interaction or a change to intended behaviour still needs an accepted issue first (#338).

Full list: #336, #337, #338.

0.5.8 (2026-10-26)

# GitHub Release →

An outline rail on doc pages

A doc page with 3 or more panels no longer gives its table of contents a column of its own, or a block above the body on a phone. The contents become a rail beside the body: one short tick per section (#332).

  • Hover a tick to see its title. Dwell on the rail, or click or tap it, to open the full list. The section you are reading is marked as you scroll.
  • outline: left or outline: right in the frontmatter picks the side; the default is right. On a right-to-left page the sides mirror.
  • Arrow keys move through the list and Esc closes it. Without JavaScript the list still opens and the links still jump. Print hides the rail.
  • On a 390px phone, a 24-section page now starts its body right under the title, instead of at y=889px.
  • Doc pages are narrower (916px instead of 1120px) and centred, so the title and the body line up.

Pages on your phone over Tailscale

am serve --tailscale listens only on this machine's Tailscale address, so the link: lines open from a phone or another device on your tailnet, with no SSH and no change to your Tailscale settings. Links survive a restart; to revoke them all, stop the server, delete ~/.answer-me-with-html/serve-secret and start it again (#323).

Other changes

  • Remarks: the remark popover works from the keyboard: 1–4 pick a tag, Ctrl/⌘ + Enter saves, and a popover closed without saving keeps its draft. In remark mode, Tab reaches every block and Enter or Space opens its popover (#321).
  • Writing check: a quotation ("…", “…”, 「…」, 『…』, «…», „…“) is someone else's words, so the check skips it, as it already skips strikethrough. A page that quotes a requirement verbatim no longer fails style: strict (#331).
  • Skill: automatic pages are for replies to the user. A subagent's report back to its parent agent returns text and evidence instead of a page, unless the task asked for a page (#324).
  • Skill: when a page has asks and the host can ask questions (Claude Code's AskUserQuestion), the agent writes the reply with the page link first, then asks, so the user can open the page before answering (#317).

Full list: #317, #321, #323, #324, #331, #332.

0.5.7 (2026-10-21)

# GitHub Release →

Fix a draft in place

When a draft has errors, am render now lists every one of them at once, in line order, instead of stopping at the first (#314):

✗ L6 [flow] flow: unclosed shape bracket, missing )
✗ L9 Cannot parse the draft: table has no delimiter row: put |---|---| on the line under the header row
✗ L14 [flow] flow: unclosed shape bracket, missing )
✗ 3 errors in the draft; no page was written
  draft: ~/.answer-me-with-html/drafts/My-page-20261021-104551.md
  • A draft sent on stdin (am render -) that fails, or renders with warnings, is saved under drafts/ in the data directory, and its path is printed. Every L<line> matches that file.
  • The agent changes only the flagged lines in that file and runs am render <path>, instead of writing the whole draft again. Once it renders with no warnings, the saved draft is deleted.
  • am clean removes old drafts the same way as old pages.
  • Frontmatter errors and an unclosed fence still stop at once, because nothing after them can be read.

Other changes

  • Tables: a table with no |---| row under its header, or with a different number of cells in that row, is an error with a corrected example, instead of rows of text full of pipes (#313).
  • Layout: a fractional cols, span or rows (such as cols: 2.5) is an error, instead of invalid CSS that took the whole sheet down to one column (#315).
  • Diagrams: a long flow edge routed around the outside of the layout is no longer cut off at the edge of the drawing (#312).

Full list: #312, #313, #314, #315.

0.5.6 (2026-10-20)

# GitHub Release →

Text size

Pages can now be read at a larger or smaller size (#302):

am config set scale 1.2    # 0.8 to 1.5, in steps of 0.05; 1 is the default
  • Every text size on the page grows or shrinks with the setting. Diagrams and charts grow as a whole, so their text still fits its boxes. The toolbar keeps its size.
  • A− / A+ in the page toolbar change the size on the page itself. The browser remembers the choice for the next pages; under am serve it lasts for the tab.
  • On a phone the toolbar scrolls sideways, so Theme and Mode can be reached again.
  • Catalog themes follow the setting. Run am theme update to get the new versions.

Built in four steps: #306, #307, #309, #310.

Other changes

  • Questions: the suggested option in an ask block no longer starts selected, so a reader who skips a question does not look as if they answered it. The reply says (not answered; suggested: X) (#289).
  • New catalog theme: Anthropic Clay, a muted reading theme with light and dark modes: am theme add anthropic-clay (#297).
  • When the data directory cannot be written (a sandbox that allows writes only in the workspace), pages go to a private folder in the system temporary folder, with a notice (#295).
  • flow rejects Mermaid-style node IDs such as A[Start] with a clear error, instead of drawing extra nodes (#296).
  • Duplicate panel IDs are an error (#278). Panels past the 26th get P27, P28 …, which a draft can also write, and the duplicate check sees them (#304).
  • A draft saved as UTF-8 with BOM keeps its # Title (#290).
  • kv cols=2.5 is an error instead of a grid that silently drops to one column (#303).
  • Sequence-diagram notes and the donut total are drawn at the size they were measured for (#306).

Full list: #278, #289, #290, #293, #295, #296, #297, #303, #304, #306, #307, #309, #310.

0.5.5 (2026-10-16)

# GitHub Release →

Charts

Write the numbers in a chart block and the page draws the chart (#264, #251):

```chart bar unit=ms
       | p50 | p95
* Redis     | 12  | 40
Memcached   | 9   | 31
Postgres    | 28  | 95
```
  • chart bar and chart bar horizontal, chart line, and chart pie (a donut, up to 6 slices).
  • A first line names the series and adds a legend. * highlights a row: the other bars and slices turn gray, and a line marks the row with a dashed guide. unit= adds a unit to the axis and the values.
  • Each chart has a collapsed data table under it. Charts follow the theme and dark mode, mirror on right-to-left pages, and appear row by row in a video.
  • A theme can set its own series colors with --series-1 … --series-6. See "Charts" in docs/reference.md.

Other changes

  • Clear all remarks: a button beside Remark removes every remark on the page after a second click. Panel comments and answers stay (#275).
  • am serve --secret-file <path> keeps the same secret across restarts, so page links still work after am serve starts again (#274).
  • -o that names a folder now gives one clear error instead of a stack trace, and a name without .html gets a notice (#271).
  • When the agent may write only inside the workspace, the skill renders the page there (#272).
  • In DeepSeek Harness the skill links pages by path, so the link opens (#265).
  • A copy button no longer stays on "Copied ✓" after a second click (#263).
  • Two new catalog themes: Mint Signal and Cool Cyberpunk (#252).

Full list: #252, #263, #265, #266, #270, #271, #272, #274, #275, #276, #277, #281, #282, #283, #284, #285.

0.5.4 (2026-10-15)

# GitHub Release →

Make a theme with your agent

Open answer-me-with-html.com/themes, click "Make your own theme", and paste the prompt to your agent:

Make me a theme for Answer me with HTML that looks like: <describe the look>.
Follow https://answer-me-with-html.com/themes/make.md
  • The agent starts from the closest catalog theme. It saves the new theme to your themes folder, checks it with am theme check, and shows you light and dark specimen pages. You can use the theme right away.
  • When you are happy with it, the agent gives you a prefilled "Submit a theme" issue. A bot checks the theme on the issue. A maintainer reviews every theme before it goes into the catalog.
  • You can also edit a theme by hand in the theme editor, or open a pull request. See CONTRIBUTING.md.
  • /llms.txt points agents at the guide and the docs.

am serve reloads pages

A page that you open through an am serve link reloads by itself when its file changes: am patch, a new render to the same file, or an editor save. If you have answered, commented or marked anything, it does not reload, so your input stays (#204).

Security

  • Every page and video carries a Content-Security-Policy that allows only its own scripts, by hash. Nothing loads from another site (#244).
  • Code quoting (src=) and images check the real file behind a symlink. A secret folder or a password inside a URL is refused. An image must be the type its extension claims (#243).

Other changes

  • When Node.js is missing, the install guide shows the exact command for your system and asks once before it runs it. It also explains errors from an old Node.js (#246, #247).
  • The skill's writing section now starts from one rule: every sentence gives the reader one fact they need (#248).
  • New versions are checked once a day instead of once a week (#253).
  • When am serve prints a link, an agent that has an in-app browser opens the page there (#231).

Full list: #204, #231, #243, #244, #246, #247, #248, #250, #253, #254, #257, #258, #260.

0.5.3 (2026-10-14)

# GitHub Release →

Theme catalog

Themes now have a home: answer-me-with-html.com/themes. Each theme has its own page with a live preview in light and dark.

am theme add comic --use
  • am theme add <name> downloads a theme from the catalog, checks its size, sha256, colors and contents, and saves it. --use also makes it your default theme.
  • am theme list, am theme update and am theme remove. update never overwrites a theme file you edited.
  • Only catalog names are accepted, never a URL. A theme may not load anything from the network, so pages keep working offline.
  • The first three themes: comic, manga and pop. Their headings use the Bangers font, which the page carries inside itself.
  • On an older version, the theme page shows a one-line manual install.

Themes can restyle diagrams

New optional diagram tokens let a theme change nodes, edges, sequence actors, notes, highlights and shadows: fill, stroke, line width, corner radius and hard shadows. Every token defaults to the current look, so built-in themes are unchanged. See "Diagram tokens" in the reference.

Replies

  • The Reply sheet shows your reply laid out instead of raw Markdown, and a bar at the bottom of the page counts your answers and copies the reply in one click (#225).
  • close_after_reply: the page closes its tab after you copy the reply (#220).
  • A copy that fails now says so instead of "Copied" (#227).

Fixes

  • DeepSeek Harness: an index.js entry for dsh-plugin-hub 1.6.6 and older (#226).

Full list: #220, #224, #225, #226, #227, #229, #232, #236, #237.

0.5.2 (2026-10-12)

# GitHub Release →

Highlights

  • DeepSeek Harness plugin (#199, #200). Install with dsh plugin --profile <profile> add github:QingYunA/answer-me-with-html, using the profile you run in (web is the shipped one). The package declares a dsh.bundle patch that mounts its own skills/ directory as a skill provider, so nothing is copied into ~/.dsh/skills.
    • DSH's plugin page shows the logo and an English and Chinese title and description.
    • When the agent has DSH's present tool, it hands over the page path, so you open the page from a card in the sidebar.
    • Thanks @wjvalue for the DSH work in #193.
  • The update command for DSH installs (#198). The update hint and the new-version popover give the exact dsh plugin --profile <profile> up <package> command for an install inside a DSH profile.
  • A refined logo (#195).

Fixes

  • Remark mode: a mark on a horizontal timeline item now has the same key at every window width. Before, a mark made in a wide panel was missing in a narrow one and left out of the Reply (#197).
  • CI now runs every browser test file in the video job (#192).

Docs

  • The READMEs and the website list DeepSeek Harness among the install options (#202). INSTALL.md has a DSH section.
  • The website footer links the Discord server (#201).

Update

  • Plugin: claude plugin update answer-me-with-html@answer-me-with-html
  • Skill: npx skills update answer-me-with-html -y
  • DeepSeek Harness: dsh plugin --profile <profile> up answer-me-with-html

Full changelog: https://github.com/QingYunA/answer-me-with-html/compare/v0.5.1...v0.5.2

0.5.1 (2026-10-12)

# GitHub Release →

Highlights

  • Math in prose (#178). $…$ is inline math, and $$ on its own line before and after the TeX makes a block. Temml typesets it into MathML when the page is made, so the page loads no script, no CDN and no fonts from the network. Bad TeX shows in red with an L<line> [math] warning. A Remark or a Reply quotes a formula as the TeX the draft wrote (#185), and the website playground typesets math too (#182).
  • Remark mode (#136). A Remark button joins the toolbar. Click a heading, paragraph, list item, quote, code block or table, tag it as a suggestion, keep, question or concern, and add a note. The Reply button carries the marks back to the agent in a ## Remarks section, together with the answers and the panel comments.
  • Share pages with other devices (#168). am serve --lan listens on your LAN IPv4 address, and --public-url prints links under a reverse proxy or tunnel origin. Both are opt-in, and am serve stays loopback-only by default.
  • New-version notice on the page (#188, #190). When the weekly check finds a newer version, each page you make has a "New version" button in the toolbar. It opens the update command for your install, with a copy button, and up to three highlights of the new version in the page language. The page itself makes no network request, and am serve removes the button from pages it sends to other devices. You'll see it from the release after this one.
  • The colophon line moved to the top of the page (#186), above the title, where readers see it.
  • Right-to-left videos (#173). Hebrew and other right-to-left video pages lay out right to left, while the player controls stay left to right. The title block and the scene headers read their labels from the language file (#174).

Fixes

  • A page with STE, code or math warnings no longer opens by itself, and am render --replace <page> replaces the earlier attempt once the new page is written, so one answer leaves one page (#166).
  • Test fixes for the planner timing guard and the print layout check (#170, #164), and for the math Reply check after the colophon moved (#189).

Docs

  • The README links the Discord server and the QQ group (#181).

Update

  • Plugin: claude plugin update answer-me-with-html@answer-me-with-html
  • Skill: npx skills update answer-me-with-html -y

Full changelog: https://github.com/QingYunA/answer-me-with-html/compare/v0.5.0...v0.5.1

0.5.0 (2026-10-09)

# GitHub Release →

Highlights

  • er component for entity relationship diagrams (#140). Write entities with their fields (name [type] [PK|FK|UK]) and relationships such as User 1--* Order: places. FK -> Entity draws the relationship it implies, and each end shows its cardinality (one, zero or many).
  • Change markers in er (#157). + , - and ~ now work on entities, fields and relationships, as they do in flow and tree. One diagram shows what a schema change adds, removes and changes, with the Before / Changes / After switch.
  • Right-to-left pages (#133). Hebrew, Arabic, Persian, Urdu and Yiddish drafts render right to left. Diagrams mirror (flow, sequence, timeline, tree, limits), Hebrew gets its own labels, and code, paths and numbers stay left to right.
  • am serve (#146). Open pages from a remote or headless machine over an SSH tunnel. am serve listens on 127.0.0.1, and render, patch and video print a private link for each page.
  • Video player: chapters, speed and export without ffmpeg (#143). A chapter strip jumps between scenes, a speed button goes from 0.5x to 2x, and --mp4 writes a WebM made by the page itself when ffmpeg is not installed.
  • Star link in the page footer (#160). The footer now ends with ★ Star on GitHub. It is plain text with no badge image, so pages stay offline-safe.
  • Website at https://answer-me-with-html.com (#128). The old github.io address redirects there.

Fixes

  • The data directory is private to you (#156). ~/.answer-me-with-html/ is now created with mode 0700, and existing installs are tightened. Before, other users on a shared host could read your pages from disk.
  • Video narration uses a voice for the language of each line, picked from the voices installed on the machine (#142). A line with no matching voice keeps its captions instead of being read by a voice for another language.
  • The video duration estimate counts words in Cyrillic, Arabic, Greek, Hebrew and Thai (#138).
  • Flow group names move clear of edges, edge labels and nodes (#148).
  • Table words stay whole in narrow sheet panels and in print (#149).
  • A horizontal timeline turns vertical on a phone (#135) and in any panel narrower than 560 px (#153).

Docs

  • A PR now needs an issue that a maintainer accepted first (#144).
  • The website benchmark matches the README numbers (#139).
  • The Chinese README has The New 100 badge (#154).

Update

  • Plugin: claude plugin update answer-me-with-html@answer-me-with-html
  • Skill: npx skills update answer-me-with-html -y

Full changelog: https://github.com/QingYunA/answer-me-with-html/compare/v0.4.15...v0.5.0

0.4.15 (2026-10-08)

# GitHub Release →

Highlights

  • Change markers in flow and tree (#125). Start a line with + , - or ~ to show what a plan adds, removes or changes. The page draws one diagram in a Changes view, with a Before / Changes / After switch and a count row. Pages without markers are byte-identical.
  • Project website (#126): https://qingyuna.github.io/answer-me-with-html/ (Chinese at /zh/). Its playground runs the real renderer in your browser.
  • A lighter SKILL.md (#127). The settings and video instructions moved to references/, and the agent reads them only when you change settings or ask for a video. SKILL.md drops from 19.5 KB to 16.2 KB, so each first page in a session costs less to load. Page answers are unchanged.

Fixes

  • The diagram expand button sits on its own row and no longer covers the drawing (#124).
  • The MP4 export test gives Chrome more time to start, so CI stops failing on slow runners (#132).

Docs

  • The README token claim now comes from a fixed corpus: hand-written HTML averages 4,893 tokens and the Markdown draft 612, about 1/8. The README also explains why the bill drops less than the tokens (#127).
  • A comparison with Archify and dsh-genui: docs/compare.md (#127).
  • Jump links at the top of the README; details moved to the reference (#130, #131).

Update

  • Plugin: claude plugin update answer-me-with-html@answer-me-with-html
  • Skill: npx skills update answer-me-with-html -y

Full changelog: https://github.com/QingYunA/answer-me-with-html/compare/v0.4.14...v0.4.15

0.4.14 (2026-10-07)

# GitHub Release →

Highlights

  • Diff code blocks (#120). A ```diff fence now draws a unified diff: red and green lines, old and new line numbers from the @@ headers, and a +N −N stat in the header. file=, title= or the +++ b/path line names the file, and hl= uses new-side numbers. A hunk whose counts don't match its @@ header gets a [diff-counts] warning.
  • Diagram text wraps by script (#112). Korean breaks at its spaces instead of inside a word. Thai, Lao, Khmer and Myanmar, which write no space between words, wrap by dictionary word, so a long label no longer pushes a node wider than its budget. Chinese, Japanese and English diagrams are unchanged. Thanks @SU-AN-coder.

Fixes

  • The writing check counts words in Lao, Khmer and Myanmar sentences with the same word segmenter as Thai. Lao sentences used to miss the length warning, and Khmer and Myanmar sentences got false ones (#117). Thanks @SU-AN-coder.
  • am lint now follows the draft language, as am render and am video do. A Thai draft gets the same warnings from both, and a French draft no longer gets the English rules (#119). Thanks @SU-AN-coder.

Update

  • Plugin: claude plugin update answer-me-with-html@answer-me-with-html
  • Skill: npx skills update answer-me-with-html -y

Full changelog: https://github.com/QingYunA/answer-me-with-html/compare/v0.4.13...v0.4.14

0.4.13 (2026-10-07)

# GitHub Release →

Highlights

  • Answer on the page (#100). An ask block puts a decision in the panel it changes, with the agent's suggestion selected. Every panel gets a comment button and every page a Reply button, which copies one message with the reader's answers and comments to paste back to the agent. Answers survive a reload.
  • Code blocks that quote real files (#99). ```ts src=server/routes.ts lines=18-30 hl=22 reads the lines from the file, so the model types no code. Blocks get line numbers, highlighted lines and a Copy button. Key files (.env, *.pem, .ssh/ …) and files that hold a token are never quoted, and the render lists every file it embedded.
  • Local images as captioned figures (#95). An image alone on its line, ![what it shows](/path/to/file.png), becomes a figure with the alt text as caption, embedded in the page so it still opens offline. A missing, non-image or oversize (> 5 MB) file stops the render at its line. Paths with spaces work (#106).
  • Diagram viewer (#57, #109). Each flow and sequence diagram has an expand button that opens it in a lightbox with zoom and pan. Its labels follow the page language. Thanks @Cham1229.
  • Placeholders stay visible (#110). ssh user@<host> or kill <pid> used to lose the words, and a <script> or <style> in prose swallowed the rest of the page. Raw HTML in a draft is now filtered: unknown and page-breaking tags show as text, deliberate markup (<kbd>, <br>, <details> …) stays, and kept tags lose event handlers and javascript: links. The render lists every tag it changed. Thanks @SU-AN-coder, who found it in #108.

Fixes

  • A page served inside another document (claude.ai Artifacts) gets its theme, mode and language back (#104). Thanks @enzo-wego.
  • A status word in a table cell may be followed by inline code, bold or a link and still becomes a badge (#101).
  • Image-like text is checked only where Markdown is read, so ![a](b) in a tree label, a raw html block or diagram text no longer fails the render (#107).

Notes

  • Every page now has a Reply button in the toolbar and a comment icon in each panel title bar, and its footer links to this repository (#94). Pages made with earlier versions keep their old look until you render them again.
  • A draft that relied on a non-text-level tag inside a sentence, an unknown tag or an event handler now gets text and an [html] warning instead.
  • The README has a section on making the skill less proactive (#93) and a plain-text vs page comparison image (#94).

Update

  • Plugin: claude plugin update answer-me-with-html@answer-me-with-html
  • Skill: npx skills update answer-me-with-html -y

Full changelog: https://github.com/QingYunA/answer-me-with-html/compare/v0.4.12...v0.4.13

0.4.12 (2026-10-06)

# GitHub Release →

Highlights

  • Traditional Chinese (#89). A draft with lang: zh-TW, zh-Hant, zh-HK or zh-MO gets Traditional page buttons, theme names and video player labels, and Traditional fonts in front of the Simplified ones, so systems whose default Chinese font is Simplified still draw Traditional glyphs. A draft that does not say is recognized by characters written in only one form; text made of shared characters stays Simplified.
  • One place decides the language (#88). lang: zh-tw used to give <html lang="en"> with Chinese labels, and lang: fr gave Chinese labels too. A tag is now written as declared (zh-tw and zh_TW become zh-TW), a bare zh still gives zh-CN, and a language without its own labels gets English labels with its own lang. A language is now one file in src/languages/.
  • More languages detected (#90). Korean, Russian, Arabic, Hebrew, Thai and Greek drafts get their own lang instead of zh-CN. Latin-script text is still English, so declare lang: fr (or es, pt and so on) for those.
  • am patch keeps the language of the page (#90), so patching a panel with plain text no longer flips a Traditional Chinese page to Simplified.
  • The writing check follows the language (#90). A language other than Chinese, English and Japanese gets only the length rules: sentences in words (characters for CJK text), paragraphs in sentences. The English passive-voice rule and the word lists no longer run on it.
  • Narration follows the language (#90). A declared language applies to every line; otherwise each line is read in the language of its own text. Traditional Chinese lines use the Chinese voice.
  • The README now recommends always-on mode (#83).

Notes

  • The CSS inside every page changed: font rules use :lang() ranges, and there are Traditional Chinese rules. Pages made with earlier versions keep their old CSS until you render them again. ja-JP pages now get the Japanese fonts too (the old rule matched only ja).
  • The system-voice cache (macOS say, espeak-ng) is rebuilt once, because the language is now part of its key. ElevenLabs and a local server keep their cache keys, so nothing already paid for is synthesized again.
  • Arabic script also writes Persian and Urdu, and Cyrillic also Ukrainian: without lang: those drafts are tagged ar and ru.
  • Traditional Chinese glyphs are checked in Chrome and WebKit on macOS (zh-TW and zh-Hant draw the same glyphs, and a named Simplified font does not override the language). Firefox and Windows are not checked yet.
  • Not in this release, tracked separately: wrapping Korean and Thai text in diagrams (#85), picking narration voices by locale (#86), right-to-left layout (#87).

Update

  • Plugin: claude plugin update answer-me-with-html@answer-me-with-html
  • Skill: npx skills update answer-me-with-html -y

Full changelog: https://github.com/QingYunA/answer-me-with-html/compare/v0.4.11...v0.4.12

0.4.11 (2026-10-06)

# GitHub Release →

Highlights

  • One plugin instead of two (#81). The separate answer-me-with-html-always plugin is removed. Always-on mode is now one rule that you paste into ~/.claude/CLAUDE.md or AGENTS.md; delete the rule to turn it off. The skill still recognizes the [answer-me-with-html always-on] marker, so the behavior is the same. The README has the rule, and the Install section now points to it.
  • Fewer flaky Chrome tests (#80). The Chrome tests fail less often, and say why when they do.

Notes

  • If you installed answer-me-with-html-always: your copy keeps adding the reminder until you remove it. Run /plugin uninstall answer-me-with-html-always@answer-me-with-html, then paste the rule from the README ("Always-on mode") if you still want it.
  • The always setting is gone from am config. An old config.json that still has it is ignored, so nothing breaks.
  • Pages and videos are unchanged: a snapshot of 432 render, video and patch combinations shows no difference from 0.4.10.

Update

  • Plugin: claude plugin update answer-me-with-html@answer-me-with-html
  • Skill: npx skills update answer-me-with-html -y

Full changelog: https://github.com/QingYunA/answer-me-with-html/compare/v0.4.10...v0.4.11

0.4.10 (2026-10-06)

# GitHub Release →

Highlights

  • The skill triggers more often (#77). The description now asks the agent to use it whenever a page would help more than plain text, even if text would also work. It names the shapes that did not trigger before: state machines, diagnoses, review findings, trade-offs and decisions, and any answer with a table or a ranked list. In a local test of 19 prompts the skill loaded in about 73% of runs, up from 54%; small talk and "plain text only" still do not trigger. It will now also trigger on some short answers.
  • Themes. A theme file in <AM_HOME>/themes/<name>.json is picked like a built-in theme, and am theme check reports missing variables, invalid colors and low contrast (#68). A new paper theme has serif prose for reading (#71). The new default theme: auto picks paper for the doc template or a draft with no component block, and blueprint otherwise. A theme set in config still wins. The toolbar uses drop-down lists for theme and mode. Built-in themes are now defined in one place each (#67).
  • Chinese writing check (#20, thanks @mzopedia): a short word list for typos (登陆 → 登录), vague quantities (尽快, 若干), 以上 / 以下 / 以内 after a number, and one-meaning-one-word choices (单击 → 点击). Warnings only; Japanese is skipped.
  • Easier to install. INSTALL.md is a guide written for AI agents: it installs the plugin in Claude Code and the skill in other agents, keeps an existing install, asks nothing, and ends with one report. The one-prompt install in the README now points to it, and the install smoke test runs its commands (#72).
  • Links that open. The reply ends with a file:// Markdown link, so GUI hosts such as Codex and Antigravity show a clickable link (#76). The page is rendered before the reply, so the turn ends with text (#75).

Notes

  • Pages made with earlier versions keep their look until you render them again.
  • The default theme can change: a doc-template page, or a draft with no component block (flow, sequence, callout and so on) or raw html / svg, now gets paper. A Markdown table alone is not a component block. Set am config set theme blueprint to keep the old look.
  • The slash command for settings depends on how you installed: /answer-me-with-html:config for the plugin, /answer-me-with-html config for the skill (#70).

Update

  • Plugin: claude plugin update answer-me-with-html@answer-me-with-html
  • Skill: npx skills update answer-me-with-html -y

Full changelog: https://github.com/QingYunA/answer-me-with-html/compare/v0.4.9...v0.4.10

0.4.9 (2026-10-05)

# GitHub Release →

Highlights

  • Photo-wall layout for sheet pages (#56, spec #50). Panels now arrange themselves in the browser like a justified photo wall: every row fills the page width and its panels end at the same line. A wide table or diagram gets the width it needs instead of scrolling sideways, and a short panel can stack beside a tall diagram. Panel order never changes. span and rows are now hints. Narrow screens keep one column, printing falls back to the plain grid, and with JavaScript off the page keeps its current layout. Layout takes about 10–60 ms.
  • Callout syntax check (#55): a callout body that starts with type: info (or warning, error, note) now fails with the correct syntax instead of printing "type: info" as text.
  • Accessible names in the page language (#58, fixes #47): diagrams and the table of contents are named in the draft's language instead of always Chinese.
  • ElevenLabs (#48): updated defaults, ELEVENLABS_MODEL_ID, and a setup guide.

Notes

  • Pages made with earlier versions keep their old layout until you render them again. am patch re-renders a page with the new script.
  • New pages carry about 6 KB more script, and panels with an explicit span get a data-span attribute.

Update

  • Plugin: claude plugin update answer-me-with-html@answer-me-with-html
  • Skill: npx skills update answer-me-with-html -y

Full changelog: https://github.com/QingYunA/answer-me-with-html/compare/v0.4.8...v0.4.9

0.4.8 (2026-10-05)

# GitHub Release →

Highlights

  • English throughout the repository (#46, spec #39). CLI output, errors, help, notices, writing-check messages, the skill instructions, slash commands, comments and test names are now English. Pages and the video player still switch between Chinese, English and Japanese by the draft's language, and the agent still replies in your language. A language-check test keeps it that way.
  • --voice local (#37, thanks @chnln): narrate videos with a self-hosted OpenAI-compatible /v1/audio/speech server such as Qwen3-TTS via mlx-audio. Runaway or truncated clips are regenerated automatically. AM_TTS_API_KEY is supported, and am patch keeps a video's voice.
  • Wider tables and diagrams on sheet pages (#38): tables with 4+ columns and wide diagrams get more width automatically and scroll on phones.

Also

  • Issue forms and a pull request template (#34).
  • CONTRIBUTING.md, npm run snapshot and npm run release for maintainers (#33).
  • More tests for am clean (#30).

Note

CLI text the agent reads is now English (for example STE 2 warnings, ! Cleanup hint). Update the skill and the CLI together, as the update commands below do.

Update

  • Plugin: claude plugin update answer-me-with-html@answer-me-with-html
  • Skill: npx skills update answer-me-with-html -y

Full changelog: https://github.com/QingYunA/answer-me-with-html/compare/v0.4.7...v0.4.8

0.4.7 (2026-10-04)

# GitHub Release →

Fixes

  • Table headers in right- and center-aligned columns now follow the column alignment (#31, fixes #28).
  • am clean skips symlinked roots, so it never deletes files outside the data directory (#27).
  • SVG diagrams stay readable when the theme context is lost (#21).
  • am patch keeps the page's STE style instead of falling back to the config (#16, #22).
  • The SKILL.md description fits the 1024-character limit (#26).

Internal

  • New page envelope module (src/page.js), one output path for render / video / patch, one place for override checks and the voice list (#24). Generated HTML is unchanged.
  • Patch round-trip invariant tests (#24).

The am video summary line now also prints the theme.

Update

  • Plugin: claude plugin update answer-me-with-html@answer-me-with-html
  • Skill: npx skills update answer-me-with-html -y

Full changelog: https://github.com/QingYunA/answer-me-with-html/compare/300b530...v0.4.7