HTML Anything
Markdown is the draft. HTML is what humans read. Your local agent writes it. The agentic HTML editor β in the agentic era, you don't hand-edit docs anymore, so the output format should be what the reader actually wants: HTML. Local-first, zero API key, reuses the CLI session you already have logged in β 9 coding-agent CLIs auto-detected on your
PATH(Claude Code Β· Cursor Agent Β· Codex Β· Gemini CLI Β· GitHub Copilot CLI Β· OpenCode Β· Qwen Coder Β· Aider Β· IBM Bob), driven by 75 composable skill templates across 9 deliverable surfaces (magazine articles Β· keynote decks Β· rΓ©sumΓ©s Β· posters Β· Xiaohongshu cards Β· tweet cards Β· web prototypes Β· data reports Β· Hyperframes videos). One-click export to WeChat / X / Zhihu, or download.html/.png.
Showcase
The eight skills that surface at the top of the picker's Featured / ζ¨θ group β sorted by their recommended: rank in SKILL.md frontmatter (lower = higher). Each ships a real example.html you can open straight from the repo, no auth, no setup.
The full skill catalog (organized by mode) is in Skills below.
Why this exists
Anthropic's Claude Code team announced they stopped writing internal docs in Markdown β they ship HTML now. The argument is simple:
| Markdown | HTML |
|---|---|
| Good for the writer | Good for the reader |
| Layout limited to the renderer | Layout is yours |
| Looks ugly screenshotted into a tweet | Already looks like a designed image |
| Has to be re-flowed for WeChat / Zhihu / newsletter | One-click format conversion |
HTML is the final form for humans. Markdown is just an intermediate state during writing.
But "writing HTML" used to mean writing CSS, picking type scales, snapping to a grid, doing responsive β most users won't, designers won't bother, writers don't have the patience. So what we built: after you press β+Enter, your local AI agent turns any input (Markdown / CSV / Excel / JSON / SQL / raw notes) into a ship-ready single-file HTML in seconds, then one-click sends it to WeChat / X / Zhihu / anywhere. "Ship-ready" is the bar β when generation finishes, the artifact is what your audience actually sees. No "I'll touch it up later" pass.
We stand on four open-source shoulders:
nexu-io/open-designβ the agent-detection layer, the design-system model, and theSKILL.mdprotocol.next/src/lib/agents/andnext/src/lib/templates/skills/*mirror this architecture directly.mdnice/markdown-niceβ proof thatjuice-inlined CSS pastes cleanly into WeChat and Zhihu without per-platform manual fix-up.gcui-art/markdown-to-imageβ the iframe β high-DPI PNG export path.alchaincyf/huashu-md-htmlβ the anti-AI-slop discipline that maps into the hard constraints inside everySKILL.md(CJK-first font stack, 8 px baseline grid, contrast β₯ 4.5, must-use-real-data rule).
At a glance
| What you get | |
|---|---|
| Coding-agent CLIs (8) | Claude Code Β· Cursor Agent Β· OpenAI Codex Β· Gemini CLI Β· GitHub Copilot CLI Β· OpenCode Β· Qwen Coder Β· Aider β scanned on startup across PATH (including ~/.local/bin, ~/.bun/bin, /opt/homebrew/bin, ~/.npm-global/bin β directories a GUI-launched Node process normally misses), swap from the top-bar picker. |
| Zero API key | We reuse the session you already have logged in via claude login Β· cursor login Β· gemini auth. Your existing subscription does the work; marginal cost is $0. |
| 75 skill templates | prototype (web / SaaS landing / dashboard / data report) Β· deck (20 keynote skills incl. Swiss International, Guizang Editorial, XHS Pastel, Hermes Cyber, Replit, Magazine Webβ¦) Β· frame (10 Hyperframes video frames β liquid hero, NYT data chart, sticky-note flowchart, glitch title, cinema light-leak, macOS notification, logo outroβ¦) Β· social (X / Xiaohongshu / Spotify / Reddit cards) Β· office (PM spec Β· eng runbook Β· finance report Β· HR onboarding Β· invoice Β· OKRs Β· weekly update Β· meeting notes Β· kanban) Β· doc (Kami warm-parchment editorial) Β· mockup (3D device frame) Β· vfx (text-cursor effect). |
| 9 surface modes | π magazine article Β· π¬ keynote deck Β· π rΓ©sumΓ© Β· πΌοΈ poster Β· π± Xiaohongshu card Β· π¦ tweet card Β· π οΈ web prototype Β· π data report Β· ποΈ Hyperframes video. Each has multiple skills you can pick from. |
| One-click export | juice inlines CSS β WeChat paste with zero re-formatting Β· modern-screenshot renders the iframe to a 2Γ PNG β ClipboardItem β drop straight into the tweet composer Β· <mjx-container> β data-eeimg placeholder β Zhihu equations render automatically Β· standalone .html download Β· high-DPI .png download. |
| Streaming render | POST /api/convert over SSE. The agent's stdout JSON-line stream is parsed for text deltas β server-sent events β client appends β iframe srcdoc updates live. Waiting for an AI generation looks like watching it type in real time. |
| Sandboxed preview | <iframe sandbox="allow-scripts allow-same-origin">. User-emitted HTML runs in an isolated origin β Tailwind CDN / Google Fonts / inline scripts work, but cookies and localStorage are quarantined from the host. |
| Format auto-detect | The editor accepts Markdown / CSV / TSV / JSON / SQL / plain text. papaparse + xlsx parse tabular data in the browser β nothing is uploaded. |
| Deployable to | Local (pnpm -F @html-anything/next dev) Β· Vercel for the web layer (the agent always stays on your laptop). |
| License | Apache-2.0 |
Demo
Quickstart
git clone https://github.com/nexu-io/html-anything
cd html-anything
pnpm install
pnpm -F @html-anything/next dev
# β http://localhost:3000
Open the browser β the top bar auto-detects whichever coding-agent CLI you already have signed in β pick a template β paste content β β+Enter.
No API key required. We reuse the session you already have logged in (Claude / Cursor / Codex / Gemini / Copilot subscriptions all work).
Workspace
This repo is a small pnpm workspace:
next/is the complete Next app (@html-anything/next).e2e/is the browser-test package (@html-anything/e2e) and the only source of truth for Playwright cases.- root owns CI, docs, and
scripts/guard.ts; rootpackage.jsonintentionally does not proxy app or e2e commands.
Run package commands from the repo root:
pnpm exec tsx scripts/guard.ts
pnpm -F @html-anything/next dev
pnpm -F @html-anything/next typecheck
pnpm -F @html-anything/next test
pnpm -F @html-anything/next build
pnpm -F @html-anything/e2e typecheck
pnpm -F @html-anything/e2e test
Supported coding agents
On startup we scan PATH (including ~/.local/bin, ~/.bun/bin, /opt/homebrew/bin, ~/.npm-global/bin β directories normally missed by GUI-launched Node) and surface every CLI we recognize:
| Agent | Detection binary | Invocation |
|---|---|---|
| Claude Code | claude |
claude -p --output-format stream-json |
| OpenAI Codex | codex |
codex exec --json --sandbox workspace-write |
| Cursor Agent | cursor-agent |
cursor-agent --print --output-format stream-json --force --trust |
| Gemini CLI | gemini |
gemini --output-format stream-json --yolo |
| GitHub Copilot CLI | copilot |
copilot --allow-all-tools --output-format json |
| OpenCode | opencode-cli / opencode |
opencode run --format json --dangerously-skip-permissions - |
| Qwen Coder | qwen |
qwen --yolo - |
| Aider | aider |
aider --no-pretty --no-stream --yes-always --message-file - |
| IBM Bob | bob |
bob --output-format stream-json --hide-intermediary-output |
The detection strategy and per-CLI adapter shape are borrowed directly from
nexu-io/open-designandmultica-ai/multica: one privileged process spawns CLIs, JSON-line is the wire protocol, every CLI gets a thin adapter innext/src/lib/agents/argv.ts.
If you've already done claude login / cursor login / gemini auth in your terminal, HTML Anything reuses that session. No second copy of the API key required.
Skills
75 skills under next/src/lib/templates/skills/, each a folder following the Claude Code SKILL.md convention plus an extended frontmatter (mode Β· scenario Β· surface Β· preview Β· design_system).
The two axes the picker uses:
- mode β
prototype(web / SaaS landing / dashboard / data report / rΓ©sumΓ© / doc) Β·deck(20 horizontal-swipe presentations) Β·frame(10 Hyperframes motion frames) Β·social(4 social-card formats) Β·office(PM / engineering / finance / HR / operations document surfaces). - scenario β
designΒ·marketingΒ·engineeringΒ·productΒ·financeΒ·hrΒ·saleΒ·personal. Used to group skills in the picker.
Web prototypes & marketing pages (prototype mode)
| Skill | Best for | Output |
|---|---|---|
prototype-web |
Generic web prototype (default) | Single-page HTML, 1440Γ900 desktop |
saas-landing |
SaaS landing page | Hero / features / pricing / CTA |
waitlist-page |
Waitlist / early-access page | Minimal form + social proof |
pricing-page |
Pricing page | Multi-tier comparison tables |
dashboard |
Admin / analytics console | Sidebar + dense data layout |
docs-page |
Technical documentation | 3-column docs layout |
blog-post |
Long-form blog post | Editorial layout |
mobile-app |
iOS / Android prototype | iPhone 15 Pro chrome |
mobile-onboarding |
App onboarding flow | Splash Β· value Β· sign-in trio |
gamified-app |
Gamified app | Quest Β· XP Β· level trio |
dating-web |
Dating / matchmaking dashboard | Left rail Β· KPIs Β· 30-day chart |
magazine-poster |
Single-page magazine poster | 1080Γ1920 |
poster-hero |
Marketing poster | Single-page display poster |
web-proto-editorial |
Editorial-style web | Serif display + grid |
web-proto-brutalist |
Brutalist web | Hard edges, black & white, anti-grid |
web-proto-soft |
Soft / warm web | Soft shadows, rounded, warm palette |
article-magazine |
Long-form magazine article | A4 / long-page |
digital-eguide |
Digital e-guide | Cover + lesson spread |
resume-modern |
Minimal rΓ©sumΓ© | A4 210Γ297mm |
email-marketing |
Brand product-launch email | Center single-column, table fallback |
wireframe-sketch |
Hand-drawn wireframe | Early-pass ideation |
Decks (deck mode, 20 skills)
| Skill | Best for |
|---|---|
deck-swiss-international |
Swiss International deck |
deck-guizang-editorial |
Editorial-ink deck (from op7418/guizang-ppt-skill) |
deck-open-slide-canvas |
1920Γ1080 agent-native canvas (from 1weiho/open-slide) |
deck-magazine-web |
Magazine-style web deck |
deck-hermes-cyber |
Hermes Cyber neon-luxe |
deck-replit |
Replit-style product walkthrough |
deck-xhs-pastel |
Xiaohongshu pastel deck |
deck-xhs-white |
Xiaohongshu pure-white deck |
deck-xhs-post |
Xiaohongshu single-post deck |
deck-tech-sharing |
Tech-sharing deck |
deck-product-launch |
Product-launch event deck |
deck-pitch |
Investor pitch |
deck-blueprint |
Blueprint / roadmap |
deck-presenter-mode |
Speaker-notes-aware |
deck-course-module |
Course module deck |
deck-dir-key-nav |
Directional key-nav deep browse |
deck-graphify-dark |
Dark, data-graphic-heavy deck |
deck-obsidian-claude |
Obsidian / Claude-flavored notes |
deck-safety-alert |
Incident / safety briefing |
deck-simple |
Minimal horizontal-swipe deck |
Hyperframes video frames & VFX & device mockups (frame / vfx / mockup, 12 skills)
| Skill | Best for |
|---|---|
frame-liquid-bg-hero |
Liquid background hero |
frame-data-chart-nyt |
NYT-style data chart |
frame-flowchart-sticky |
Sticky-note flowchart |
frame-glitch-title |
Glitch title card |
frame-light-leak-cinema |
Cinema light-leak |
frame-macos-notification |
macOS notification toast |
frame-logo-outro |
Brand logo outro |
motion-frames |
Generic motion-design frame |
video-hyperframes |
Hyperframes frame-script schema |
sprite-animation |
Pixel / 8-bit animation |
vfx-text-cursor |
Text-cursor VFX |
mockup-device-3d |
3D device-frame mockup |
Frame scripts conform to the
heygen-com/hyperframesspec and hand off straight toremotion-dev/remotionto render.mp4.
Social share cards (social mode)
| Skill | Best for |
|---|---|
social-x-post-card |
X / Twitter quote card (1600Γ900) |
social-spotify-card |
Spotify-Wrapped style card |
social-reddit-card |
Reddit thread card |
social-carousel |
3-card 1080Γ1080 carousel |
card-xiaohongshu |
Xiaohongshu image-with-text card |
card-twitter |
Twitter pull-quote card |
social-media-dashboard |
Social-ops dashboard |
social-media-matrix |
Multi-platform content matrix |
Office & operations (office / doc mode)
| Skill | Scenario | Best for |
|---|---|---|
doc-kami-parchment |
personal | Warm-parchment editorial doc (from tw93/kami) |
pm-spec |
product | PM spec doc + decision log |
team-okrs |
product | OKR scoresheet |
meeting-notes |
operation | Meeting decision log |
weekly-update |
operation | Team weekly cadence |
kanban-board |
operation | Board snapshot |
eng-runbook |
engineering | Incident runbook |
finance-report |
finance | Exec finance summary |
invoice |
finance | Single-page invoice |
hr-onboarding |
hr | Role onboarding plan |
data-report |
finance / product | CSV/Excel β visual data report |
live-dashboard |
operation | Live data dashboard |
flowai-team-dashboard |
operation | Team workflow dashboard |
ppt-keynote |
personal | Generic Keynote-style deck |
Adding a skill takes one folder. Copy a similar skill, edit its SKILL.md frontmatter, restart pnpm -F @html-anything/next dev, the picker shows it. See CONTRIBUTING.md for the bar a skill PR has to clear before we merge.
Six load-bearing ideas
1 Β· We don't ship an agent. Yours is good enough.
On boot the browser calls /api/agents. The server scans PATH β including the dirs a GUI-launched Node usually misses (~/.local/bin, ~/.bun/bin, /opt/homebrew/bin, ~/.npm-global/bin) β and surfaces whichever CLIs it finds. Each CLI has one adapter (argv + stdin protocol + stream parser) in next/src/lib/agents/argv.ts. The whole detection model is borrowed directly from nexu-io/open-design and multica-ai/multica: one privileged process spawns CLIs, JSON-line is the wire protocol.
2 Β· Skills are folders, not plugins.
Following Claude Code's SKILL.md convention β SKILL.md + assets/ + references/ + example.html. Drop a folder into next/src/lib/templates/skills/, restart pnpm -F @html-anything/next dev, the picker shows it. deck-guizang-editorial is vendored directly from op7418/guizang-ppt-skill with original LICENSE and authorship preserved.
3 Β· Hard constraints stop the model from freestyling.
Every template hardcodes:
- CJK-first font stack β
Noto Sans/Serif SC/ source-han for Chinese,Inter/Manropefor Latin. - 8 px baseline grid β every spacing, line-height, font-size is a multiple of 8.
- Rounded corners Β· soft shadow Β· no pure black / pure white β visual de-slop-ification.
- Color contrast β₯ 4.5, every interactive element has a real
:focusstate. - Must use the user's real data, no lorem ipsum.
The discipline is lifted from alchaincyf/huashu-design's Junior-Designer mode + anti-AI-slop checklist. Constraints belong in the prompt β every SKILL.md writes them in.
4 Β· Streaming render = watch the AI draw.
POST /api/convert is SSE. The agent's stdout is line-delimited JSON; the server pulls out the text deltas and re-emits them as SSE events; the client appends to the iframe's srcdoc. The whole experience is the same as watching the agent type in a terminal, except the artifact is HTML, not Markdown. Interrupt at any time β you're not paying for a whole generation you don't want.
5 Β· One-click export = zero second-pass formatting.
- WeChat MP β
juiceinlines CSS +data-toolmarkers β paste into the editor, styles survive end to end. - X / Weibo / Xiaohongshu β
modern-screenshotrenders the iframe to a 2Γ PNG βClipboardItemβ drop straight into the composer. - Zhihu β same as above, plus
<mjx-container>is replaced withdata-eeimgLaTeX-image placeholders (Zhihu won't render KaTeX live β math has to be an image). - Download
.html/ download.pngβ self-contained single file, shareable anywhere.
Mechanically inspired by mdnice/markdown-nice and gcui-art/markdown-to-image.
6 Β· Sandboxed iframe = secure + isolated.
User-emitted HTML always renders inside <iframe sandbox="allow-scripts allow-same-origin">. Third-party scripts (Tailwind CDN, Google Fonts, custom animations) still execute, but cookies and localStorage stay in the iframe's own origin β the host page is never poisoned. Opening devtools only shows the iframe's DOM, so the debugging experience matches a standalone HTML file.
Architecture
ββββββββββββββββββββββββ Browser (Next.js 16) βββββββββββββββββββββββ
β Editor / upload Β· top-bar agent picker Β· template picker Β· iframe β
βββββββββββββββ¬βββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββ
β β+Enter β
βΌ βΌ
βββββββββββββββββββββββ ββββββββββββββββββββββββ
β GET /api/agents β β POST /api/convert β
β scan PATH, list β β SSE β spawn CLI β
β installed CLIs β β pipe stdin / stdout β
βββββββββββββββββββββββ ββββββββββββ¬ββββββββββββ
β spawn + stdin pipe
βΌ
ββββββββββββββββββββββββββββββββββββββ
β Your local coding-agent CLI β
β claude / codex / cursor-agent / β
β gemini / copilot / opencode / β
β qwen / aider β
β β reuses your existing session β
ββββββββββββββββββββββββββββββββββββββ
β
βΌ
stdout JSON-line βββΊ SSE event
β
βΌ
iframe srcdoc append (live)
β
β+C copy β ClipboardItem
β+S download β .html / .png
| Layer | Stack |
|---|---|
| Frontend | Next.js 16 App Router + Turbopack Β· React 19 Β· Tailwind v4 Β· zustand state |
| Server routes | GET /api/agents (detection) Β· POST /api/convert (SSE streaming spawn) |
| Agent transport | child_process.spawn Β· one stdin/stdout adapter per CLI (next/src/lib/agents/argv.ts) |
| Browser-side processing | juice (CSS inlining) Β· modern-screenshot (PNG export) Β· xlsx / papaparse (spreadsheet parsing) Β· marked + highlight.js (Markdown-compatible input) Β· dompurify (XSS defense) |
| Preview sandbox | iframe[sandbox="allow-scripts allow-same-origin"] + srcdoc |
| Export targets | .html standalone Β· .png high-DPI Β· ClipboardItem (text/html + image/png) Β· WeChat-compatible inlined CSS |
| Deploy | Local pnpm -F @html-anything/next dev Β· Vercel one-click for the web layer (agent stays local) |
Export targets
| Platform | Implementation | Paste behavior |
|---|---|---|
| WeChat MP | juice inlines CSS + data-tool markers |
Paste into editor, zero re-formatting |
| Zhihu | Same as WeChat + <mjx-container> β data-eeimg LaTeX image placeholder |
Equations render after upload |
| X / Weibo / Xiaohongshu | modern-screenshot β 2Γ PNG β ClipboardItem |
Drop straight into the composer |
Download .html |
Single-file, inlined assets | Open anywhere with a browser |
Download .png |
High-DPI screenshot | Share anywhere |
Roadmap
- Multi-template compare preview β generate four candidates of the same brief, pick the best one
- Hyperframes β mp4 β one-click hand-off of frame scripts to Remotion for real video output
- Shared design systems β interop with
nexu-io/open-designDESIGN.mdassets - Template marketplace β community-contributed prompts & examples
- **Browser extensio
No comments yet
Be the first to share your take.