Answer me with HTML

更新日志

每个版本改了什么,新版本在前。这些是 GitHub Release 的说明。

0.5.11 (2026-11-05)

# GitHub Release →

把页面发到聊天工具:am export

Discord、Telegram、Slack 和微信会把 .html 文件显示成源码。am export 把渲染好的页面转成它们能直接显示的文件(#350、#354):

am export page.html --pdf page.pdf     # A4,按页面自己的打印样式
am export page.html --png out/         # out/page-1.png、out/page-2.png ……
  • --png 按 1200 CSS px 宽、2 倍分辨率渲染,隐藏工具栏、回复和标注控件以及新版本提示,把页面切成每张不超过 1800 CSS px 高的图。切口落在面板之间的空隙里。
  • 再次导出到同一个目录时,会删掉这次没有重新写入的 <页面名>-<n>.png 切片,所以页面变短后不会留下旧图。其他文件不动。如果某个切片就是输入的页面,或者删不掉,就保留原样并给出提示(#362、#363)。
  • 需要 Chrome、Chromium 或 Edge(用 AM_CHROME 指定路径),以及 Node.js 22 或更高版本。

表格排序和筛选

在 Markdown 表格后面紧接着写 {table sort},读者点表头就能排序。{table filter} 加一个对所有单元格的文字筛选框;{table sort filter} 两个都要(#357、#365)。

  • 数字、1,200、$900、12% 或 ISO 日期组成的列按数值排序,超过 2^53 的整数也准确。其他列按文字排序。
  • 控件可以用键盘操作,打印和 PDF/PNG 导出时隐藏,没有 JavaScript 时不出现。没写这个属性的表格保持静态。
  • html 或 svg 块里的 <script> 在页面的 Content-Security-Policy 下无法运行,am render 现在会给出警告,并指出草稿里的行号。

用现成的音频文件做视频旁白

am video draft.md --audio-map lines.json 直接用你已有的音频文件做旁白,不需要语音服务:JSON 里把每行旁白对应到一个文件,例如 {"First the client sends SYN.": "audio/01.mp3"}(#356、#366)。

  • 相对路径从映射文件所在的目录算起。某行旁白没有对应的键、或者文件不存在时,渲染会停下并指出是哪一行。
  • 16-bit PCM WAV 可以直接用,其他 WAV 编码和其他格式需要 ffmpeg。音频和 --voice local 一样会裁掉首尾静音、使用语音缓存,文件改动后缓存会重新读取。
  • --audio-map 不能和显式的 --voice 同时使用。命令行 TTS(#356)还没做。

flow 图交叉更少,剩下的会给出提示

  • flow 和 er 图里,交换两个相邻节点就能消除的交叉不会再画出来。以前从同一个节点出发的两条连线按草稿顺序排列,可能互相交叉(#369)。
  • flow 的连线仍然穿过别的节点或别的连线标签时,am render 会带上草稿行号给出提示和解决办法:换个方向能画干净时建议换方向(```flow TB),否则建议拆成总览图和细节图。页面照常生成(#378)。
  • 检查按页面实际画出的曲线进行,而不是按布局给出的折点,所以和读者看到的一致(#382、#384)。

其他改动

  • Claude Code 插件: 插件里不再带 node_modules 目录,所以在 Claude Code 桌面版的 SSH 会话里不会再被关掉("has a symbolic link, node_modules/.bin/esbuild")。执行 claude plugin update answer-me-with-html@answer-me-with-html 即可(#361、#368)。
  • am serve: 通过 http 打开的页面,回答、评论和标注保存在服务端,手机回收后台标签页后也不会丢(#322、#343)。
  • 主题: 页面的主题切换器里会列出所有已安装的主题,不只是默认主题(#348、#353)。
  • flow: 节点或连线标签里的 \n 会换行,按 Mermaid 习惯写的草稿可以直接用(#347、#352)。
  • 文件名: 页面和草稿文件名只用 ASCII 字母和数字,最长 24 个字符,在 Windows Terminal 里 ctrl+点击、或者在会自动折行的 TUI 里点击,都能打开完整路径。没有 ASCII 字符的标题生成 page-<时间>.html,这时可以在草稿 frontmatter 里写 file: tcp-handshake 指定文件名(#344、#351、#379、#383)。
  • 韩文: 韩文页面在词与词之间换行,不再把一个词从音节中间拆开。带长备注的状态标记会在图标旁边换行,不再把表格撑宽(#355)。
  • Skill: 命令里重新使用 ${CLAUDE_SKILL_DIR},并告诉其他宿主把它换成 skill 所在的目录,修复了 opencode 里的 Cannot find module '/scripts/am.mjs'(#326、#327)。
  • 依赖: dagre 3.1.3、marked 18.1.2(#376、#377)。
  • 文档: INSTALL.md 说明没有 npm 包,并说明用 -a '*' 时不支持全局 skill 的 agent 会显示安装失败,这是正常的(#345)。参考文档说明重新渲染后自动编号的面板字母可能指向另一个面板,所以用 am patch --panel B 之前先给面板写上字母(#346)。SKILL.md 说明提问数量和字数限制只是建议,CLI 只检查每个提问 2 到 6 个选项(#358、#360)。

0.5.10 (2026-10-26)

# GitHub Release →

组件也可以写成 ::: 块

按 VitePress、Docusaurus 提示框的写法写的组件,现在和 ``` 代码块写法渲染结果完全相同,不再像 0.5.9 那样报错(#341):

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

等同于

```callout ok Done
It works.
```
  • 只有组件名才算::::note、单独的 :::,以及代码块里的 ::: 照旧是文字。
  • 块在冒号数不少于开头的那一行结束,所以用 :::: 开头的块里可以写 ::: 行。
  • 有开头没有结尾,和 ``` 没闭合报同一个错。
  • 文档仍然教 ``` 写法;接受 ::: 是为了让按习惯写的草稿一次就能渲染成功。

0.5.9 (2026-10-26)

# GitHub Release →

把组件写成 ::: 块会报错

草稿如果按 VitePress、Docusaurus 或 Pandoc 提示框的写法写组件,比如 :::callout … :::,以前会被当成普通文字输出,也没有任何提示。现在 am lint 和 am render 会报错并给出正确写法,和草稿里的其他错误一起列出,不生成页面(#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.
    ```
  • 只有已知的组件名才报错::::note、单独的 :::,以及代码块里的 ::: 照旧是文字。
  • SKILL.md 在组件表上方写明:组件要写成代码块。

其他改动

  • 网站: 新增更新日志页面,收录每个版本的说明,从新到旧,中英文都有:answer-me-with-html.com/zh/changelog/。发版说明现在保存在仓库的 changelog/<版本>.md 里(#337)。
  • 参与贡献: 修 bug、改文档、错别字、测试和只加主题的 PR 可以直接提交。新功能、新语法、新的页面交互,以及修 bug 以外的行为改动,仍然要先有被接受的 issue(#338)。

0.5.8 (2026-10-26)

# GitHub Release →

doc 页面的目录导轨

3 个及以上面板的 doc 页面,目录不再单独占一列,手机上也不再排在正文前面。目录变成正文旁的一条导轨:每个章节一道短刻度(#332)。

  • 悬停刻度可以看到章节标题。在导轨上停留,或者点击、轻点它,会展开完整目录。滚动时会标出正在阅读的章节。
  • 在 frontmatter 里写 outline: left 或 outline: right 选择导轨放在哪一侧,默认是 right。从右到左的页面左右镜像。
  • 方向键在目录里移动,Esc 关闭。没有 JavaScript 时目录照样能展开、链接照样能跳转。打印时隐藏导轨。
  • 在 390px 宽的手机上,24 个章节的页面现在紧接着标题就是正文,原来要到 y=889px 才开始。
  • doc 页面变窄(916px,原来是 1120px)并且居中,标题和正文对齐。

通过 Tailscale 在手机上看页面

am serve --tailscale 只监听这台机器的 Tailscale 地址,所以 tailnet 里的手机或其他设备可以直接打开 link: 那一行的链接,不需要 SSH,也不改动 Tailscale 设置。链接在重启后仍然有效;要让所有链接失效,先停掉服务,删除 ~/.answer-me-with-html/serve-secret,再重新启动(#323)。

其他改动

  • 标注: 标注弹窗可以全程用键盘操作:1–4 选标签,Ctrl/⌘ + Enter 保存,没保存就关掉的弹窗会保留草稿。标注模式下,Tab 能走到每个块,Enter 或 Space 打开它的弹窗(#321)。
  • 写作检查: 引号里的文字("…"、“…”、「…」、『…』、«…»、„…“)是别人的原话,检查会跳过,和删除线一样。原样引用需求的页面不会再因为 style: strict 而无法生成(#331)。
  • Skill: 自动生成页面只用于给用户的回复。子代理交回给父代理的报告返回文字和证据,不做页面,除非任务明确要求页面(#324)。
  • Skill: 页面里有提问、并且宿主可以提问(Claude Code 的 AskUserQuestion)时,agent 先写带页面链接的回复,再提问,用户可以先打开页面再作答(#317)。

0.5.7 (2026-10-21)

# GitHub Release →

在原文件里修草稿

草稿有错误时,am render 现在按行号一次列出全部错误,不再遇到第一处就停(#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
  • 从 stdin 传入的草稿(am render -)渲染失败或有警告时,会保存到数据目录的 drafts/ 里,并打印路径。报错里的每个 L<行号> 都对应这个文件。
  • agent 只改这个文件里报错的行,再运行 am render <路径>,不用把整份草稿重写一遍。渲染成功且没有警告后,保存的草稿会被删除。
  • am clean 会像清理旧页面一样清理旧草稿。
  • frontmatter 错误和未闭合的代码块仍然立即停下,因为后面的内容已经无法读取。

其他改动

  • 表格:表头下面缺少 |---| 分隔行,或分隔行的列数和表头不一致,会报错并给出改正后的示例,不再输出成一行行带竖线的文字(#313)。
  • 布局:cols、span、rows 写成小数(如 cols: 2.5)会报错,不再写出无效的 CSS 让整个面板网格变成一列(#315)。
  • 图表:flow 图里绕到外侧的长连线,不再在图的边缘被裁掉(#312)。

完整列表: #312、#313、#314、#315。

0.5.6 (2026-10-20)

# GitHub Release →

文字大小

页面文字现在可以放大或缩小(#302):

am config set scale 1.2    # 0.8 到 1.5,步长 0.05;默认是 1
  • 页面上所有文字都会跟着这个设置放大或缩小。图表整体缩放,所以图里的文字仍然放得进框里。工具栏保持原来的大小。
  • 页面工具栏的 A− / A+ 可以直接在页面上调整。浏览器会记住你的选择,之后打开的页面也用这个大小;用 am serve 打开时,只在当前标签页有效。
  • 手机上的工具栏可以左右滑动,主题和模式选择又能点到了。
  • 主题市场里的主题也会跟随这个设置。运行 am theme update 获取新版本。

分四步完成:#306、#307、#309、#310。

其他改动

  • 问题:ask 代码块里的建议选项不再默认选中,没作答的读者不会看起来像是已经回答了。回复里写的是 (not answered; suggested: X)(#289)。
  • 新主题:陶土书院(Anthropic Clay),一款色调柔和的阅读主题,支持浅色和深色:am theme add anthropic-clay(#297)。
  • 数据目录不能写入时(宿主沙箱只允许写工作区),页面会存到系统临时目录里的私有文件夹,并给出提示(#295)。
  • flow 遇到 Mermaid 风格的节点 ID(如 A[Start])会给出明确的错误,不再画出多余的节点(#296)。
  • 面板 ID 重复会报错(#278)。第 26 个之后的面板编号为 P27、P28……,草稿里也可以手写,重复检查同样能发现(#304)。
  • 以带 BOM 的 UTF-8 保存的草稿,# 标题 不再丢失(#290)。
  • kv cols=2.5 会报错,不再悄悄变成单列(#303)。
  • 时序图的注释和环形图中间的总数,按测量时的字号绘制(#306)。

完整列表: #278、#289、#290、#293、#295、#296、#297、#303、#304、#306、#307、#309、#310。

0.5.5 (2026-10-16)

# GitHub Release →

图表

把数字写进 chart 代码块,页面就会画出图表(#264、#251):

```chart bar unit=ms
       | p50 | p95
* Redis     | 12  | 40
Memcached   | 9   | 31
Postgres    | 28  | 95
```
  • 支持 chart bar 和 chart bar horizontal(柱状图)、chart line(折线图)、chart pie(环形饼图,最多 6 块)。
  • 第一行写系列名,图上会出现图例。行首写 * 会高亮这一行:其他柱子和扇区变灰,折线图用一条虚线标出这一行。unit= 给坐标轴和数值加上单位。
  • 每张图下面有一个可以展开的数据表。图表跟随主题和深浅色,在从右往左书写的页面上镜像显示,在视频里逐行出现。
  • 主题可以用 --series-1 到 --series-6 设置自己的系列颜色,见 docs/reference.zh-CN.md 的"图表"一节。

其他改动

  • 清除所有标注:标注按钮旁边多了一个按钮,再点一次确认后,删除页面上的所有标注。面板评论和选项回答不受影响(#275)。
  • am serve --secret-file <path> 在重启之间沿用同一个密钥,am serve 重新启动后页面链接依然有效(#274)。
  • -o 指向一个文件夹时,现在给出一条明确的错误,不再输出调用栈;文件名没有 .html 时会提示(#271)。
  • agent 只能在工作区里写文件时,skill 会把页面渲染到工作区里(#272)。
  • 在 DeepSeek Harness 里,skill 用路径链接页面,点击就能打开(#265)。
  • 复制按钮连点两次后,不会再一直显示"已复制 ✓"(#263)。
  • 主题库新增两个主题:Mint Signal 和 Cool Cyberpunk(#252)。

完整列表: #252、#263、#265、#266、#270、#271、#272、#274、#275、#276、#277、#281、#282、#283、#284、#285。

0.5.4 (2026-10-15)

# GitHub Release →

让 agent 帮你做主题

打开 answer-me-with-html.com/zh/themes,点"做一个自己的主题",把提示词发给你的 agent:

帮我给 Answer me with HTML 做一个主题,风格是:<描述你想要的样子>。按 https://answer-me-with-html.com/themes/make.md 的步骤做。
  • agent 从主题库里最接近的主题改起,把新主题存进你的主题文件夹,用 am theme check 检查,再给你看浅色和深色样张。新主题马上就能用。
  • 你满意之后,agent 给你一个预填好的"Submit a theme" issue。issue 上有机器人检查主题。每个主题进主题库前都由维护者审核。
  • 也可以在主题编辑器里手动改,或者提交 PR,见 CONTRIBUTING.md。
  • /llms.txt 把 agent 指向这份说明和文档。

am serve 自动刷新页面

通过 am serve 链接打开的页面,文件变化时会自动刷新:am patch、重新渲染到同一个文件、或者编辑器保存都算。如果你已经回答、评论或标记过内容,页面不会刷新,你的输入会保留(#204)。

安全

  • 每个页面和视频都带上内容安全策略(CSP),只允许运行自带的、按哈希固定的脚本,不从其他网站加载任何东西(#244)。
  • 引用代码(src=)和图片会检查符号链接背后的真实文件。路径经过敏感目录、或者文件里有 URL 中的密码,都会拒绝。图片的实际类型必须和扩展名一致(#243)。

其他改动

  • 没有 Node.js 时,安装说明会先给出适合你系统的确切命令,问你一次再运行;Node.js 版本太旧时会解释报错(#246、#247)。
  • skill 的写作部分改成从一条原则出发:每句话只给读者一个需要知道的事实(#248)。
  • 新版本检查从每周一次改为每天一次(#253)。
  • am serve 输出链接时,有应用内浏览器的 agent 会直接在里面打开页面(#231)。

完整列表: #204、#231、#243、#244、#246、#247、#248、#250、#253、#254、#257、#258、#260。

0.5.3 (2026-10-14)

# GitHub Release →

主题库

主题有了自己的地方:answer-me-with-html.com/zh/themes。每个主题都有单独的页面,可以实时预览亮色和暗色。

am theme add comic --use
  • am theme add <名字> 从主题库下载主题,核对大小、sha256、配色和内容后保存。加 --use 会同时设成默认主题。
  • 另有 am theme list、am theme update 和 am theme remove。update 不会覆盖你改过的主题文件。
  • 只接受主题库里的名字,不接受网址。主题不能从网上加载任何东西,所以页面离线也能正常打开。
  • 首批三个主题:comic(漫画)、manga(日漫)、pop(波普)。标题用 Bangers 字体,字体内嵌在页面里。
  • 旧版本在主题页上可以看到一行手动安装命令。

主题可以改图表了

新增一组可选的图表变量,主题可以改节点、连线、时序图的参与者、注释框、高亮和阴影:底色、线色、线宽、圆角和硬阴影。每个变量的默认值都是现在的样子,内置主题的外观不变。详见参考文档的"图表变量"一节。

回复

  • 回复面板直接显示排好版的回复,不再是 Markdown 原文。页面底部多了一栏,统计你的作答,一键复制回复(#225)。
  • close_after_reply:复制回复后自动关闭页面标签(#220)。
  • 复制失败时会如实提示,不再显示"已复制"(#227)。

修复

  • DeepSeek Harness:为 dsh-plugin-hub 1.6.6 及更早版本提供 index.js 入口(#226)。

完整列表: #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