Skip to content
Back to skills

Html Planning

ASecurity

Plan something by interviewing the user through an HTML page, not the terminal. Trigger 'plan it in html'.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 29, 2026
ai-agentsgo

Works with

  • terminal
  • cli

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 29, 2026

npx -y skills add Pawel-Kica/claude-code-100 --skill html-planning --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Html Planning?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Html Planning
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/pawel-kica-html-planning/badge)](https://www.skillsdirectory.com/skills/pawel-kica-html-planning)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: html-planning
description: "Plan something by interviewing the user through an HTML page, not the terminal. Trigger 'plan it in html'."
---

Run `/grilling` and follow all of it. Already grilling → just keep going. This only changes where the questions land.

## The one override

The whole frontier ships as one HTML page instead of one question at a time in the terminal. The page is the workspace and the input surface, the terminal carries one line per round. Don't invent questions to fill a page. The frontier decides how many there are.

## The file

`~/.claude/html-planning/<topic-slug>.html`, one file per topic, same path for the whole plan.

File already exists → read it first. Its `DECIDED` and `HISTORY` consts are the source of truth: rebuild the tree from them and resume. Never re-ask what `HISTORY` already answers.

## A round

1. Copy [`template.html`](template.html) to the file. Fill `TOPIC`, `DECIDED`, `HISTORY`, `Q`. Leave the machinery below them untouched.
2. Round 1 only: `open -a "Google Chrome" "file://<path>"`. The plan page is the only thing you ever open. Nothing else gets a tab.
3. Later rounds: rewrite the file, print one line ("round 3, 6 questions, refresh"). The tab is already open.
4. The user hits Copy Answers and pastes the markdown back. Move that round into `HISTORY`, promote what is settled into `DECIDED`, recompute the frontier, regenerate.

## Writing the questions

- Exactly one `rec: true` per question. That is grilling's `➡️` on the page.
- Wireframe cards (`cards: true`) when the options differ in shape and words cannot carry it. Otherwise plain text options.
- Every question takes free text on top of its options, so options are a starting point, not a cage.
- Sections group a long round.

## Artifacts

Some questions need a look, a feel, a motion, a layout. Build the thing and put it *inside* the plan page, as part of the question.

- Never open an artifact in its own tab, window or preview. The user asked for a plan, not a demo. A stray tab is an interruption.
- Keep it beside the plan as `~/.claude/html-planning/<topic-slug>-<what>.html` and embed it: `n:` renders raw HTML, so `<iframe src="<topic-slug>-<what>.html" style="width:100%;height:380px;border:1px solid var(--line);border-radius:10px">` drops a live, playable artifact straight into the question.
- Interactive goes in as an iframe. A static comparison can go in as `<img>`.
- `/throwaway-prototype` builds one fast, with two overrides. Save it beside the plan as above, and skip its "open in Chrome once" step. It gets embedded, not opened.
- One artifact per question. Variants belong to a switcher inside the artifact, not to four separate files.
- Screenshot it with `playwright-cli` (own `-s=` session, run from a `/tmp` dir) before it ships in the page. That check happens in the headless browser, never in the user's Chrome.

### The shape that works

- The switcher's letters are the question's option letters. A in the frame is A in the options, so an answer is one letter either way.
- Build it from the real thing's CSS at the real thing's size. A mock in the plan page's palette is a mock of the plan page.
- Temporal decision, looping artifact. A countdown that actually runs out and plays the move settles what a still frame argues about.
- Caption every variant with what it costs, not what it is. "Quiet, easy to miss" is an answer. "A small ring" is a label.
- Keep it small. Click through every variant in the headless browser, read `document.body.scrollHeight` on each, size the iframe to the tallest. No scrollbar inside the frame, and no 700px hole in the page either.

## The end

Frontier empty → regenerate once more: questions out, the plan itself in, free-form per `/html` with the same palette and fonts. Then stop editing the file, and say so in the terminal.
Called from a spec flow → the user approves the plan page before any spec gets written.

Files in this skill

  • SKILL.md3.8 KB
  • template.html15.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…