visual-plannerlisted
Install: claude install-skill minhtran3124/agent-harness
# Plan → HTML Renderer
## Purpose
Render a single `specs/<slug>/PLAN.md` into a modern, self-contained `specs/<slug>/PLAN.html`
so a reviewer can visually scan waves, tasks, and per-task scope without parsing raw XML or
markdown. Output is **local-only** — `PLAN.html` stays untracked (gitignored as a derived artifact)
next to its source in `specs/` (which is tracked).
## How it works (deterministic script, not LLM transcription)
Rendering is done by `render_plan.py`, **not** by emitting HTML token-by-token. The skill's only
job is to run the script and relay its report:
```bash
python3 .claude/skills/visual-planner/render_plan.py <path-or-slug> [output.html]
```
Run from repo root (the script also locates `specs/` relative to its own path as a fallback).
Two files own the behavior:
| File | Role |
|---|---|
| `render_plan.py` | Parser + builder + self-check. The source of truth for parsing rules. |
| `template.html` | The visual template (CSS/JS/layout) with `{{PLACEHOLDER}}` slots. Edit this to change styling — never regenerate it by hand. |
| `view_plan.py` | Serves/opens the rendered `PLAN.html` and launches Chrome. Auto-renders if missing/stale. See "Viewing the plan" below. |
This split is intentional. Asking the model to transcribe a ~340-line template verbatim each run
is both expensive (output tokens) and the *least* deterministic part of the pipeline. A script makes
the fill free and byte-for-byte reproducible. (See `CLAUDE.local.md` §8 — "if code can answer