agentsclimarketplace

Planpage

Skill YosefHayim/planpage/skills/planpage

Render a skill's plan, review gate, quiz, poll, or report as a beautiful, self-contained INTERACTIVE HTML page via the open-source planpage package (Preact → static HTML + local post-back so the user can Approve / Adjust / flip decisions in the browser and the choice comes back to the agent). Use whenever a skill needs an approval gate, decision review, preference poll, teach/coach surface, storyboard/image grid, or shareable before/after report — author with planpage instead of hand-rolling HTML.From its SKILL.md

Install
npx -y skills add YosefHayim/planpage --skill planpage

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 5 commands, including `npx planpage render plan-brief --sample --open` and 4 more.

SKILL.md

4.7 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it

planpage — interactive HTML plans for agents

Thin consumer of planpage on npm (npm i planpage or zero-install npx planpage). Components, render engine, gallery, and post-back live there as SSOT. Do not hand-roll HTML — author with the package.

When to use

NeedTemplate / approach
Multi-step plan + risks + Approve/Adjustplan-brief
Diff / deslop / migration reportbefore-after
Code-style picks + canonical examplecode-style-plan
Preference interview / grillquestion-poll
Graded teach/coach quizquiz
Flip-card learn deckflashcards
Scored audit findingsaudit-report
Browse every component livelibrary or npx planpage library --open
Custom pageCompose components + render() / renderHighlighted()

Quick start (CLI)

# sample page in the browser
npx planpage render plan-brief --sample --open

# plan gate: render + serve + one decision back
npx planpage render plan-brief --data plan.json --serve --decision decision.json

# preference poll
npx planpage render question-poll --data questions.json --serve --decision decision.json

# browse components
npx planpage library --open

# wire this package into local agents (Claude / Cursor / Codex / …)
npx planpage init

Quick start (library)

import { render, renderHighlighted, PlanBrief, serve } from "planpage";

const html = await renderHighlighted(
  <PlanBrief title="…" summary={/* … */} steps={/* … */} risks={/* … */} />,
);
// write html → $TMPDIR/plan-<ts>.html, then:
// await serve({ htmlPath, outPath: "decision.json", timeoutSec: 600 })
// or: npx planpage serve <html> decision.json --timeout 600

Prefer renderHighlighted() (or CLI render) for VS Code syntax colour (Shiki, baked into the HTML). Bare render() is sync and monochrome-safe.

Decision contract

The page posts one JSON object; serve writes it verbatim:

{
  "approved": true,
  "flips": ["rule.function-form"],
  "revisit": ["rule.error-shape"],
  "notes": "keep classes only in the DB layer"
}
FieldMeaning
approvedApprove (true) vs Adjust (false)
flipsdata-ids of PickBlocks the user flipped — re-open these
revisitdata-ids marked revisit without a firm decision
notesfree text from the notes box

Interactive pieces carry a stable data-id (or id / dataId). Name them meaningfully (rule.error-shape, move.orders-dir) so a bare id tells you what to re-open.

Never hang. serve has an idle timeout; Copy decision is the clipboard/file:// fallback for headless / no-port callers.

Plan-gate workflow (default)

  1. Shape plan JSON for plan-brief (title · summary · steps · options · risks · code).
  2. npx planpage render plan-brief --data plan.json --serve --decision decision.json
  3. Read decision.json → if approved:false, re-open picks in flips / revisit and fold in notes.

Question-poll workflow

  1. Shape { title, layout?, questions: [{ id, text, group?, diagram?, options: [{ id, label, description?, code?, recommended? }] }] }
  2. npx planpage render question-poll --data questions.json --serve --decision decision.json
  3. Each answer includes questionId, picked, questionText, chosenText.

Layouts: stack · grid-2 · grid-3 · grid-4 · grid-5. Optional Mermaid diagram per question.

Rules

  • Package owns HTML; skill owns content. Plug content into planpage — don't re-derive the shell. New widgets go into the package (+ gallery entry).
  • Self-contained. No repo assets at render time; Tailwind + Mermaid from CDN; Shiki colour baked in by renderHighlighted.
  • Always render at the gate when this skill is available — never dump a long plan as plain terminal text for approval.
  • Installing the package does not install skills. Ship this skill (or run npx planpage init) so agents know to call the kit.

More detail

What ships with it: 1 file

3.3 KB alongside SKILL.md

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.