Keep the HTML your agent makes.

Local library. Same key when you revise. Preview in a sandbox on your machine.

npx htmlark
127.0.0.1:7420
q3-sales · v4

Q3 sales

$2.4MRevenue
18%QoQ
41Deals

This version is dirty and will not execute.

<h1>Q3 sales</h1>
<p>Revenue $2.4M</p>

One key. Every revision.

put updates the same artifact. Diff the source. Restore by appending. Tomorrow’s agent does not invent a second dashboard.

q3-sales
v4 head
v3 restored from v1
v2 dirty, not executed
v1 first put

Dirty HTML is stored. It does not run.

Loopback on 127.0.0.1. Pages execute inside a CSP sandbox with no network. A failed quality gate stays in the library as dirty.

/render CSP, connect-src none
dirty version → 409
/a/art_… Preview Source Versions

Any agent. One library.

Claude Code, Codex, Cursor, OpenCode. Skill, CLI, and MCP call the same put. No vendor account required. Data stays on disk.

htmlark put --key q3-sales --json
skill · cli · mcp stdio
same id

Share with htmlark publish to a.htmlark.com, or export a file. The local CLI is the source of truth.