htmlspec
Purpose
Produce an engineering implementation plan as one self-contained, text-only HTML page —
specs/<plan-name>.html — that you can open directly in a browser. Unlike a markdown spec,
the plan is authored directly in HTML using the template below, and a dedicated
Freeform zone lets you author any HTML you want (interactive toggles, animated SVG flows,
comparison matrices, decision trees, etc.) to make the plan clearer and richer than prose
could. No images are generated — all visual enrichment comes from inline HTML, CSS, SVG,
and JS authored directly into the page.
Phases, in order:
- Plan phase — analyze, explore, design (same thinking as a normal spec).
- HTML authoring phase — write the plan into the HTML Plan Template.
- Freeform phase — enrich the page with custom HTML per the Freeform Instruction Set.
Variables
USER_PROMPT: $1
ALL_ARGUMENTS: $ARGUMENTS
PLAN_OUTPUT_DIRECTORY: specs/
PLAN_SLUG: kebab-case name derived from the plan topic (e.g. in-memory-ttl-lru-cache)
HTML_OUTPUT: specs/htmlspec-<PLAN_SLUG>.html — the filename MUST always begin with the htmlspec- prefix
Instructions
Plan phase
- IMPORTANT: If no
USER_PROMPT is provided, stop and ask the user to provide it.
- Carefully analyze the USER_PROMPT. Determine task type (chore|feature|refactor|fix|enhancement) and complexity (simple|medium|complex).
- Think deeply (ultrathink) about the best implementation approach.
- Explore the codebase to understand existing patterns and architecture.
- Decide which sections from the HTML Plan Template apply (include the conditional sections only when task type/complexity warrants them, exactly like a normal spec).
- Generate a descriptive kebab-case PLAN_SLUG from the topic.
HTML authoring phase
- Author the plan directly in HTML using the HTML Plan Template below — do not write a markdown file. The output is a single
specs/htmlspec-<PLAN_SLUG>.html.
- Keep the page self-contained: all CSS inline in
<style>, any JS inline in <script>, no external network/CDN dependencies unless genuinely required (and if so, note it in Notes).
- Fill every applicable section with real, detailed content — the plan must be implementable by another developer. Use semantic HTML:
<ul>/<ol> for lists, <table> for comparisons, <pre><code> for code/commands.
- Preserve the dark visual theme defined by the template's CSS tokens so the page reads as one body of work.
- Do not include any
<figure>/<img> elements — this skill is text-only.
Freeform Instruction Set
The HTML Plan Template includes a Freeform zone (<section class="freeform">). Here — and
anywhere else a visual would help more than prose — you have full creative latitude to author
any HTML you want. This is the most valuable part of the page: with no image generation,
freeform is where the plan earns its richness, so lean into it heavily.
- Communicate concrete implementation work. Freeform is not decoration — it is where another developer learns exactly what to build. Encode the things prose makes muddy: file paths to touch, function signatures with full type info, data shapes (request/response/DB rows), the precise sequence of operations, decision points with the chosen branch, edge cases and what happens at each, error/timeout/retry behavior, ordering and concurrency constraints, before/after diffs, migration steps, and any invariants the implementation must preserve. Always prefer specific over abstract — names, types, numbers, paths.
- Use a wide variety of HTML tags to convey meaning. Different ideas deserve different shapes. Reach for:
<details>/<summary> for expandable deep-dives, alternative-considered-and-rejected, and FAQ-style "why not X".
<table> for comparison matrices (option A vs B vs C), API contracts (field · type · required · description), decision matrices (criterion × option), and before/after columns.
<dl>/<dt>/<dd> for definitions, glossaries, and field-by-field schema docs.
- Inline SVG for architecture diagrams, data flow, state machines, sequence diagrams, dependency graphs, decision trees, timelines, ER diagrams, and topology maps. SVG is your image substitute — use it liberally.
<pre><code> blocks (with a language hint) for code snippets, shell sessions, JSON/YAML payloads, SQL, and diffs. Use <samp> for expected output and <kbd> for keystrokes/commands.
<aside> (styled as a callout) for warnings, "gotchas", and side notes that would interrupt the main flow.
<mark> to highlight the critical word/line a reader must not miss.
- Nested
<ol> for ordered, branching procedures; nested <ul> for grouped checklists.
<figure> wrapping inline SVG with a <figcaption> so the diagram has a citable label.
- Animated SVG / CSS transitions and tabbed views only where they genuinely make the plan faster to absorb.
- Self-contained only. Inline all CSS and JS. Do not pull external scripts/styles/fonts over the network unless truly necessary; if you must, declare it under Notes.
- Stay on-theme. Reuse the template's CSS custom properties (
--bg, --cyan, --amber, --red, --line, etc.) so freeform content matches the rest of the page. SVG strokes/fills should use the same palette.
- Don't break the core plan. The standard sections must remain present and complete; freeform is additive enrichment, not a replacement.
- Earn its place. No decorative filler — every freeform element should make the spec clearer or faster to act on. If an SVG diagram or table would not change what the developer types next, don't include it.
Workflow
Phase 1 — Plan
- THINK HARD: parse the USER_PROMPT; settle task type, complexity, and the architecture.
- Explore the codebase for patterns and relevant files.
- Decide the section set and the PLAN_SLUG.
Phase 2 — Author the HTML
- Create
specs/ if missing. Write specs/htmlspec-<PLAN_SLUG>.html from the HTML Plan Template, filling every applicable section with detailed content. Emit no <figure>/<img> elements — this skill is text-only.
Phase 3 — Freeform enrichment
- Author the Freeform section and any in-section enrichments per the Freeform Instruction Set above — inline SVG/CSS/JS, self-contained, on-theme, additive.
Phase 4 — Finish
- Validate the HTML is well-formed (see Validation).
- Follow the Report Format.
HTML Plan Template
Author the page from this skeleton. Keep the <head>/<style> block intact (it defines the
shared theme); fill the {{…}} slots; drop the conditional sections that don't apply.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Plan: {{TASK_NAME}}</title>
<style>
:root{
--bg:#0A0E1A; --panel:#111726; --ink:#F5F5F0; --muted:#9AA4B2;
--cyan:#22D3EE; --amber:#F59E0B; --red:#EF4444; --line:#1E2A3C;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);
font:16px/1.65 -apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif}
.wrap{max-width:980px;margin:0 auto;padding:48px 24px 96px}
header.hero{text-align:center;margin-bottom:36px}
header.hero h1{font-size:2.2rem;margin:0 0 10px;letter-spacing:-.02em}
.meta{color:var(--muted);font-size:.9rem}
.badge{display:inline-block;background:var(--cyan);color:#001018;border-radius:999px;
padding:2px 11px;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em}
section{background:var(--panel);border:1px solid var(--line);border-radius:14px;
padding:24px 28px;margin:20px 0}
section>h2{margin:0 0 14px;color:var(--cyan);font-size:1.3rem;
border-bottom:1px solid var(--line);padding-bottom:10px}
ul,ol{padding-left:22px}
li{margin:4px 0}
table{width:100%;border-collapse:collapse;margin:12px 0}
th,td{border:1px solid var(--line);padding:8px 12px;text-align:left;vertical-align:top}
th{background:#0d1422;color:var(--cyan)}
pre{background:#0d1422;border:1px solid var(--line);border-radius:8px;padding:14px;overflow:auto}
code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.86em}
:not(pre)>code{background:#0d1422;border:1px solid var(--line);border-radius:6px;
padding:2px 6px;color:var(--amber)}
.freeform{border-style:dashed;border-color:var(--cyan)}
.freeform>h2::after{content:" · author anything that helps";color:var(--muted);
font-size:.7rem;font-weight:400;text-transform:none}
a{color:var(--cyan)}
</style>
</head>
<body>
<div class="wrap">
<header class="hero">
<h1>Plan: {{TASK_NAME}}</h1>
<p class="meta"><span class="badge">{{TASK_TYPE}}</span> · {{COMPLEXITY}}</p>
</header>
<section>
<h2>Task Description</h2>
{{TASK_DESCRIPTION_HTML}}
</section>
<section>
<h2>Objective</h2>
{{OBJECTIVE_HTML}}
</section>
<!-- include if task_type is feature OR complexity is medium/complex -->
<section>
<h2>Problem Statement</h2>
{{PROBLEM_STATEMENT_HTML}}
</section>
<section>
<h2>Solution Approach</h2>
{{SOLUTION_APPROACH_HTML}}
</section>
<!-- /conditional -->
<section>
<h2>Relevant Files</h2>
{{RELEVANT_FILES_HTML}} <!-- include an h3 'New Files' list if needed -->
</section>
<!-- include if complexity is medium/complex -->
<section>
<h2>Implementation Phases</h2>
{{PHASES_HTML}} <!-- Phase 1: Foundation / Phase 2: Core / Phase 3: Integration & Polish -->
</section>
<!-- /conditional -->
<section>
<h2>Step by Step Tasks</h2>
{{STEPS_HTML}} <!-- ordered list; foundational first; last step validates the work -->
</section>
<!-- include if task_type is feature OR complexity is medium/complex -->
<section>
<h2>Testing Strategy</h2>
{{TESTING_HTML}}
</section>
<!-- /conditional -->
<section>
<h2>Acceptance Criteria</h2>
{{ACCEPTANCE_HTML}} <!-- specific, measurable -->
</section>
<section>
<h2>Validation Commands</h2>
<pre><code>{{VALIDATION_COMMANDS}}</code></pre>
</section>
<!-- FREEFORM ZONE: author ANY self-contained, on-theme HTML/CSS/SVG/JS that aids the plan -->
<section class="freeform">
<h2>Freeform</h2>
{{FREEFORM_HTML}}
</section>
<section>
<h2>Notes</h2>
{{NOTES_HTML}} <!-- dependencies (uv add ...), external assets used by freeform, caveats -->
</section>
</div>
</body>
</html>
Report Format
✅ HTML Implementation Plan Created (text-only)
File: specs/htmlspec-<PLAN_SLUG>.html (open in a browser)
Topic: <brief description of what the plan covers>
Freeform: <one line on what custom HTML you added, if any>
Key Components:
- <main component 1>
- <main component 2>
- <main component 3>
Open with: open specs/htmlspec-<PLAN_SLUG>.html
Validation
# file exists and is non-trivial HTML
test -s specs/htmlspec-<PLAN_SLUG>.html && head -1 specs/htmlspec-<PLAN_SLUG>.html | grep -qi '<!DOCTYPE html>' && echo "HTML ok"
# text-only: no <img> tags should be present
! grep -q '<img ' specs/htmlspec-<PLAN_SLUG>.html && echo "text-only ok"
1---2name: htmlspec3description: Creates a text-only engineering implementation plan as a single self-contained HTML page saved to specs/<name>.html — the plan authored directly in styled HTML plus a freeform HTML zone where the agent can author any custom HTML/CSS/SVG/JS (inline SVG diagrams, interactive toggles, comparison matrices, decision trees) that aids comprehension. No images are generated; visual richness comes from inline HTML/SVG only. Use when the user says "htmlspec", wants a text-only HTML implementation plan, a browser-openable spec, or a richly-formatted HTML engineering plan without per-section image generation.4---56# htmlspec78## Purpose910Produce an engineering implementation plan as **one self-contained, text-only HTML page** —11`specs/<plan-name>.html` — that you can open directly in a browser. Unlike a markdown spec,12the plan is authored **directly in HTML** using the template below, and a dedicated13**Freeform** zone lets you author any HTML you want (interactive toggles, animated SVG flows,14comparison matrices, decision trees, etc.) to make the plan clearer and richer than prose15could. **No images are generated** — all visual enrichment comes from inline HTML, CSS, SVG,16and JS authored directly into the page.1718Phases, in order:19201. **Plan phase** — analyze, explore, design (same thinking as a normal spec).212. **HTML authoring phase** — write the plan into the **HTML Plan Template**.223. **Freeform phase** — enrich the page with custom HTML per the **Freeform Instruction Set**.2324## Variables2526USER_PROMPT: $127ALL_ARGUMENTS: $ARGUMENTS28PLAN_OUTPUT_DIRECTORY: `specs/`29PLAN_SLUG: kebab-case name derived from the plan topic (e.g. `in-memory-ttl-lru-cache`)30HTML_OUTPUT: `specs/htmlspec-<PLAN_SLUG>.html` — **the filename MUST always begin with the `htmlspec-` prefix**3132## Instructions3334### Plan phase3536- IMPORTANT: If no `USER_PROMPT` is provided, stop and ask the user to provide it.37- Carefully analyze the USER_PROMPT. Determine task type (chore|feature|refactor|fix|enhancement) and complexity (simple|medium|complex).38- Think deeply (ultrathink) about the best implementation approach.39- Explore the codebase to understand existing patterns and architecture.40- Decide which sections from the HTML Plan Template apply (include the conditional sections only when task type/complexity warrants them, exactly like a normal spec).41- Generate a descriptive kebab-case PLAN_SLUG from the topic.4243### HTML authoring phase4445- Author the plan **directly in HTML** using the **HTML Plan Template** below — do not write a markdown file. The output is a single `specs/htmlspec-<PLAN_SLUG>.html`.46- Keep the page **self-contained**: all CSS inline in `<style>`, any JS inline in `<script>`, no external network/CDN dependencies unless genuinely required (and if so, note it in Notes).47- Fill every applicable section with real, detailed content — the plan must be implementable by another developer. Use semantic HTML: `<ul>`/`<ol>` for lists, `<table>` for comparisons, `<pre><code>` for code/commands.48- Preserve the dark visual theme defined by the template's CSS tokens so the page reads as one body of work.49- **Do not include any `<figure>`/`<img>` elements** — this skill is text-only.5051### Freeform Instruction Set5253The HTML Plan Template includes a **Freeform** zone (`<section class="freeform">`). Here — and54anywhere else a visual would help more than prose — you have **full creative latitude to author55any HTML you want**. This is the most valuable part of the page: with no image generation,56freeform is where the plan earns its richness, so **lean into it heavily**.5758- **Communicate concrete implementation work.** Freeform is not decoration — it is where another developer learns *exactly* what to build. Encode the things prose makes muddy: file paths to touch, function signatures with full type info, data shapes (request/response/DB rows), the precise sequence of operations, decision points with the chosen branch, edge cases and what happens at each, error/timeout/retry behavior, ordering and concurrency constraints, before/after diffs, migration steps, and any invariants the implementation must preserve. Always prefer specific over abstract — names, types, numbers, paths.59- **Use a wide variety of HTML tags to convey meaning.** Different ideas deserve different shapes. Reach for:60 - `<details>`/`<summary>` for expandable deep-dives, alternative-considered-and-rejected, and FAQ-style "why not X".61 - `<table>` for comparison matrices (option A vs B vs C), API contracts (field · type · required · description), decision matrices (criterion × option), and before/after columns.62 - `<dl>`/`<dt>`/`<dd>` for definitions, glossaries, and field-by-field schema docs.63 - Inline **SVG** for architecture diagrams, data flow, state machines, sequence diagrams, dependency graphs, decision trees, timelines, ER diagrams, and topology maps. SVG is your image substitute — use it liberally.64 - `<pre><code>` blocks (with a language hint) for code snippets, shell sessions, JSON/YAML payloads, SQL, and diffs. Use `<samp>` for expected output and `<kbd>` for keystrokes/commands.65 - `<aside>` (styled as a callout) for warnings, "gotchas", and side notes that would interrupt the main flow.66 - `<mark>` to highlight the critical word/line a reader must not miss.67 - Nested `<ol>` for ordered, branching procedures; nested `<ul>` for grouped checklists.68 - `<figure>` wrapping inline SVG with a `<figcaption>` so the diagram has a citable label.69 - Animated SVG / CSS transitions and tabbed views only where they genuinely make the plan faster to absorb.70- **Self-contained only.** Inline all CSS and JS. Do not pull external scripts/styles/fonts over the network unless truly necessary; if you must, declare it under Notes.71- **Stay on-theme.** Reuse the template's CSS custom properties (`--bg`, `--cyan`, `--amber`, `--red`, `--line`, etc.) so freeform content matches the rest of the page. SVG strokes/fills should use the same palette.72- **Don't break the core plan.** The standard sections must remain present and complete; freeform is additive enrichment, not a replacement.73- **Earn its place.** No decorative filler — every freeform element should make the spec clearer or faster to act on. If an SVG diagram or table would not change what the developer types next, don't include it.7475## Workflow7677### Phase 1 — Plan781. THINK HARD: parse the USER_PROMPT; settle task type, complexity, and the architecture.792. Explore the codebase for patterns and relevant files.803. Decide the section set and the PLAN_SLUG.8182### Phase 2 — Author the HTML834. Create `specs/` if missing. Write `specs/htmlspec-<PLAN_SLUG>.html` from the **HTML Plan Template**, filling every applicable section with detailed content. Emit no `<figure>`/`<img>` elements — this skill is text-only.8485### Phase 3 — Freeform enrichment865. Author the **Freeform** section and any in-section enrichments per the **Freeform Instruction Set** above — inline SVG/CSS/JS, self-contained, on-theme, additive.8788### Phase 4 — Finish896. Validate the HTML is well-formed (see Validation).907. Follow the **Report Format**.9192## HTML Plan Template9394Author the page from this skeleton. Keep the `<head>`/`<style>` block intact (it defines the95shared theme); fill the `{{…}}` slots; drop the conditional sections that don't apply.9697```html98<!DOCTYPE html>99<html lang="en">100<head>101<meta charset="UTF-8">102<meta name="viewport" content="width=device-width, initial-scale=1.0">103<title>Plan: {{TASK_NAME}}</title>104<style>105 :root{106 --bg:#0A0E1A; --panel:#111726; --ink:#F5F5F0; --muted:#9AA4B2;107 --cyan:#22D3EE; --amber:#F59E0B; --red:#EF4444; --line:#1E2A3C;108 }109 *{box-sizing:border-box}110 body{margin:0;background:var(--bg);color:var(--ink);111 font:16px/1.65 -apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif}112 .wrap{max-width:980px;margin:0 auto;padding:48px 24px 96px}113 header.hero{text-align:center;margin-bottom:36px}114 header.hero h1{font-size:2.2rem;margin:0 0 10px;letter-spacing:-.02em}115 .meta{color:var(--muted);font-size:.9rem}116 .badge{display:inline-block;background:var(--cyan);color:#001018;border-radius:999px;117 padding:2px 11px;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em}118 section{background:var(--panel);border:1px solid var(--line);border-radius:14px;119 padding:24px 28px;margin:20px 0}120 section>h2{margin:0 0 14px;color:var(--cyan);font-size:1.3rem;121 border-bottom:1px solid var(--line);padding-bottom:10px}122 ul,ol{padding-left:22px}123 li{margin:4px 0}124 table{width:100%;border-collapse:collapse;margin:12px 0}125 th,td{border:1px solid var(--line);padding:8px 12px;text-align:left;vertical-align:top}126 th{background:#0d1422;color:var(--cyan)}127 pre{background:#0d1422;border:1px solid var(--line);border-radius:8px;padding:14px;overflow:auto}128 code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.86em}129 :not(pre)>code{background:#0d1422;border:1px solid var(--line);border-radius:6px;130 padding:2px 6px;color:var(--amber)}131 .freeform{border-style:dashed;border-color:var(--cyan)}132 .freeform>h2::after{content:" · author anything that helps";color:var(--muted);133 font-size:.7rem;font-weight:400;text-transform:none}134 a{color:var(--cyan)}135</style>136</head>137<body>138<div class="wrap">139140 <header class="hero">141 <h1>Plan: {{TASK_NAME}}</h1>142 <p class="meta"><span class="badge">{{TASK_TYPE}}</span> · {{COMPLEXITY}}</p>143 </header>144145 <section>146 <h2>Task Description</h2>147 {{TASK_DESCRIPTION_HTML}}148 </section>149150 <section>151 <h2>Objective</h2>152 {{OBJECTIVE_HTML}}153 </section>154155 <!-- include if task_type is feature OR complexity is medium/complex -->156 <section>157 <h2>Problem Statement</h2>158 {{PROBLEM_STATEMENT_HTML}}159 </section>160161 <section>162 <h2>Solution Approach</h2>163 {{SOLUTION_APPROACH_HTML}}164 </section>165 <!-- /conditional -->166167 <section>168 <h2>Relevant Files</h2>169 {{RELEVANT_FILES_HTML}} <!-- include an h3 'New Files' list if needed -->170 </section>171172 <!-- include if complexity is medium/complex -->173 <section>174 <h2>Implementation Phases</h2>175 {{PHASES_HTML}} <!-- Phase 1: Foundation / Phase 2: Core / Phase 3: Integration & Polish -->176 </section>177 <!-- /conditional -->178179 <section>180 <h2>Step by Step Tasks</h2>181 {{STEPS_HTML}} <!-- ordered list; foundational first; last step validates the work -->182 </section>183184 <!-- include if task_type is feature OR complexity is medium/complex -->185 <section>186 <h2>Testing Strategy</h2>187 {{TESTING_HTML}}188 </section>189 <!-- /conditional -->190191 <section>192 <h2>Acceptance Criteria</h2>193 {{ACCEPTANCE_HTML}} <!-- specific, measurable -->194 </section>195196 <section>197 <h2>Validation Commands</h2>198 <pre><code>{{VALIDATION_COMMANDS}}</code></pre>199 </section>200201 <!-- FREEFORM ZONE: author ANY self-contained, on-theme HTML/CSS/SVG/JS that aids the plan -->202 <section class="freeform">203 <h2>Freeform</h2>204 {{FREEFORM_HTML}}205 </section>206207 <section>208 <h2>Notes</h2>209 {{NOTES_HTML}} <!-- dependencies (uv add ...), external assets used by freeform, caveats -->210 </section>211212</div>213</body>214</html>215```216217## Report Format218219```markdown220✅ HTML Implementation Plan Created (text-only)221222File: specs/htmlspec-<PLAN_SLUG>.html (open in a browser)223Topic: <brief description of what the plan covers>224Freeform: <one line on what custom HTML you added, if any>225226Key Components:227- <main component 1>228- <main component 2>229- <main component 3>230231Open with: open specs/htmlspec-<PLAN_SLUG>.html232```233234## Validation235236```bash237# file exists and is non-trivial HTML238test -s specs/htmlspec-<PLAN_SLUG>.html && head -1 specs/htmlspec-<PLAN_SLUG>.html | grep -qi '<!DOCTYPE html>' && echo "HTML ok"239# text-only: no <img> tags should be present240! grep -q '<img ' specs/htmlspec-<PLAN_SLUG>.html && echo "text-only ok"241```