playground — Claude Code skill: what it does, how to install
Builds interactive HTML playgrounds with controls, a live preview, and a generated prompt. Use it when a topic is easier to explore visually than through plain text.
/plugin install playground@claude-plugins-officialWhat playground does
This skill builds a single HTML file where a user changes settings through controls, sees the result immediately, and copies a generated prompt back into Claude. It opens the file in a browser after creation.
It selects a template from templates/ for design work, data exploration, concept mapping, document critique, diff review, or codebase mapping. CSS and JavaScript are embedded in the HTML, so the playground has no external dependencies.
One state object holds the configurable values. Controls update that state, while the preview and prompt refresh on every change. It includes defaults and named presets. Install it when the input is visual, structural, or difficult to describe in plain text; it is unnecessary for a small one-off edit.
What it helps with
- build a visual editor in one HTML file
- preview interface changes after each setting change
- generate a natural-language prompt from chosen options
- construct SQL, API, pipeline, or regex settings visually
- review a diff with line-by-line comments
Example prompts for the agent
- Create a playground for configuring a card with spacing, color, and typography.
- Build a data explorer for constructing an SQL query.
- Make an interactive map of components and data flow in this codebase.
How to install playground
1Plugin marketplace
/plugin install playground@claude-plugins-officialThis installs the whole playground plugin with all its skills
2Skills CLI (Vercel)
npx skills add anthropics/claude-plugins-official --skill playground -a claude-code3Manually: put the files in place
~/.claude/skills/playground/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/playground/
Manually: put the files in place
.agents/skills/playground/SKILL.mdFor all projects use ~/.agents/skills/
Manually: put the files in place
.cursor/skills/playground/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install anthropics/claude-plugins-official playground2Manually: put the files in place
.github/skills/playground/SKILL.mdPlatform CLI
gemini skills install https://github.com/anthropics/claude-plugins-official --path plugins/playground/skills/playgroundManually: put the files in place
.devin/skills/playground/SKILL.mdThe legacy .windsurf/skills/ path still works
Claude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set37
The whole set →Similar
Questions about playground
How do I install playground in Claude Code?
Run /plugin install playground@claude-plugins-official in Claude Code. You can also use npx skills add anthropics/claude-plugins-official --skill playground -a claude-code.
What does playground do?
It creates a self-contained HTML playground with controls, a live preview, and a button to copy a prompt. The prompt describes selected settings as an actionable instruction.
Does playground need external dependencies?
No. Its CSS and JavaScript are embedded in one HTML file, and the preview updates whenever a control changes.
Source text
SKILL.md · Apache-2.0
---
name: playground
description: Creates interactive HTML playgrounds — self-contained single-file explorers that let users configure something visually through controls, see a live preview, and copy out a prompt. Use when the user asks to make a playground, explorer, or interactive tool for a topic.
---
# Playground Builder
A playground is a self-contained HTML file with interactive controls on one side, a live preview on the other, and a prompt output at the bottom with a copy button. The user adjusts controls, explores visually, then copies the generated prompt back into Claude.
## When to use this skill
When the user asks for an interactive playground, explorer, or visual tool for a topic — especially when the input space is large, visual, or structural and hard to express as plain text.
## How to use this skill
1. **Identify the playground type** from the user's request
2. **Load the matching template** from `templates/`:
- `templates/design-playground.md` — Visual design decisions (components, layouts, spacing, color, typography)
- `templates/data-explorer.md` — Data and query building (SQL, APIs, pipelines, regex)
- `templates/concept-map.md` — Learning and exploration (concept maps, knowledge gaps, scope mapping)
- `templates/document-critique.md` — Document review (suggestions with approve/reject/comment workflow)
- `templates/diff-review.md` — Code review (git diffs, commits, PRs with line-by-line commenting)
- `templates/code-map.md` — Codebase architecture (component relationships, data flow, layer diagrams)
3. **Follow the template** to build the playground. If the topic doesn't fit any template cleanly, use the one closest and adapt.
4. **Open in browser.** After writing the HTML file, run `open <filename>.html` to launch it in the user's default browser.
## Core requirements (every playground)
- **Single HTML file.** Inline all CSS and JS. No external dependencies.
- **Live preview.** Updates instantly on every control change. No "Apply" button.
- **Prompt output.** Natural language, not a value dump. Only mentions non-default choices. Includes enough context to act on without seeing the playground. Updates live.
- **Copy button.** Clipboard copy with brief "Copied!" feedback.
- **Sensible defaults + presets.** Looks good on first load. Include 3-5 named presets that snap all controls to a cohesive combination.
- **Dark theme.** System font for UI, monospace for code/values. Minimal chrome.
## State management pattern
Keep a single state object. Every control writes to it, every render reads from it.
```javascript
const state = { /* all configurable values */ };
function updateAll() {
renderPreview(); // update the visual
updatePrompt(); // rebuild the prompt text
}
// Every control calls updateAll() on change
```
## Prompt output pattern
```javascript
function updatePrompt() {
const parts = [];
// Only mention non-default values
if (state.borderRadius !== DEFAULTS.borderRadius) {
parts.push(`border-radius of ${state.borderRadius}px`);
}
// Use qualitative language alongside numbers
if (state.shadowBlur > 16) parts.push('a pronounced shadow');
else if (state.shadowBlur > 0) parts.push('a subtle shadow');
prompt.textContent = `Update the card to use ${parts.join(', ')}.`;
}
```
## Common mistakes to avoid
- Prompt output is just a value dump → write it as a natural instruction
- Too many controls at once → group by concern, hide advanced in a collapsible section
- Preview doesn't update instantly → every control change must trigger immediate re-render
- No defaults or presets → starts empty or broken on load
- External dependencies → if CDN is down, playground is dead
- Prompt lacks context → include enough that it's actionable without the playground
© Anthropic · Apache-2.0 · anthropics/claude-plugins-official