Playground
ClineOfficialPublished by Cline
- Skill
- Content generator
- Software development
- Apache-2.0
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Playground is a tool for creating single-file HTML explorers that allow users to visually configure parameters, view live updates, and generate actionable natural-language prompts. By utilizing predefined templates for design, data, architecture, and review tasks, it helps bridge the gap between complex configuration spaces and AI-ready instructions. Each playground is designed to be self-contained with no external dependencies, ensuring reliability and ease of use.
What it does
- Creates interactive HTML files with live visual previews
- Provides configurable controls for complex input spaces
- Generates natural-language prompts based on user selections
- Includes copy-to-clipboard functionality for generated prompts
- Supports multiple templates for design, data, and code review
- Implements a reactive state management pattern for instant updates
When to use it
- When you need a visual tool to explore complex configuration options
- When you want to generate precise, context-aware prompts for an AI agent
- When you need to build interactive explorers for data, design, or architecture
- When you require a portable, single-file interface for collaborative review
Advantages
- Self-contained design avoids external dependency issues
- Immediate visual feedback loop improves configuration accuracy
- Natural language prompt generation reduces manual drafting effort
- Presets and sensible defaults ensure a usable starting point
Usage examples
- “Create a design playground for a card component.”
- An HTML file is generated with controls for border-radius, shadow, and padding, allowing you to visually tune the card and copy the resulting prompt for an AI to implement the design.
- “Build a data explorer for my SQL query parameters.”
- An interactive tool is created that lets you toggle filters and join types, outputting a clean SQL query string based on your selections.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/cline/playground/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip playground.zip -d .agents/skills
Documentation by Cline
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 their agent.
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
Identify the playground type from the user's request
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)
Follow the template to build the playground. If the topic doesn't fit any template cleanly, use the one closest and adapt.
Open in browser when available. After writing the HTML file, launch it in the user's default browser if the environment supports that; otherwise provide the file path.
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.
const state = { /* all configurable values */ };
function updateAll() {
renderPreview(); // update the visual
updatePrompt(); // rebuild the prompt text
}
// Every control calls updateAll() on changePrompt output pattern
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
Files
- ATTRIBUTION.mdAdded by AutoGineer826 B
- LICENSELicence file added by AutoGineer10.5 KiB
- SKILL.md3.8 KiB
- templates/code-map.md6.1 KiB
- templates/concept-map.md3.6 KiB
- templates/data-explorer.md2.8 KiB
- templates/design-playground.md2.7 KiB
- templates/diff-review.md5.6 KiB
- templates/document-critique.md5.0 KiB
templates/diff-review.md
Diff Review Template
Use this template when the playground is about reviewing code diffs: git commits, pull requests, code changes with interactive line-by-line commenting for feedback.
Layout
+-------------------+----------------------------------+
| | |
| Commit Header: | Diff Content |
| • Hash | (files with hunks) |
| • Message | with line numbers |
| • Author/Date | and +/- indicators |
| | |
+-------------------+----------------------------------+
| Prompt Output Panel (fixed bottom-right) |
| [ Copy All ] |
| Shows all comments formatted for prompt |
+------------------------------------------------------+Diff review playgrounds display git diffs with syntax highlighting. Users click lines to add comments, which become part of the generated prompt for code review feedback.
Control types for diff review
| Feature | Control | Behavior |
|---|---|---|
| Line commenting | Click any diff line | Opens textarea below the line |
| Comment indicator | Badge on commented lines | Shows which lines have feedback |
| Save/Cancel | Buttons in comment box | Persist or discard comment |
| Copy prompt | Button in prompt panel | Copies all comments to clipboard |
Diff rendering
Parse diff data into structured format for rendering:
const diffData = [
{
file: "path/to/file.py",
hunks: [
{
header: "@@ -41,13 +41,13 @@ function context",
lines: [
{ type: "context", oldNum: 41, newNum: 41, content: "unchanged line" },
{ type: "deletion", oldNum: 42, newNum: null, content: "removed line" },
{ type: "addition", oldNum: null, newNum: 42, content: "added line" },
]
}
]
}
];Line type styling
| Type | Background | Text Color | Prefix |
|---|---|---|---|
context | transparent | default | (space) |
addition | green tint (#dafbe1 light / rgba(46,160,67,0.15) dark) | green (#1a7f37 light / #7ee787 dark) | + |
deletion | red tint (#ffebe9 light / rgba(248,81,73,0.15) dark) | red (#cf222e light / #f85149 dark) | - |
hunk-header | blue tint (#ddf4ff light) | blue (#0969da light) | @@ |
Comment system
Each diff line gets a unique identifier for comment tracking:
const comments = {}; // { lineId: commentText }
function selectLine(lineId, lineEl) {
// Deselect previous
document.querySelectorAll('.diff-line.selected').forEach(el =>
el.classList.remove('selected'));
document.querySelectorAll('.comment-box.active').forEach(el =>
el.classList.remove('active'));
// Select new
lineEl.classList.add('selected');
document.getElementById(`comment-box-${lineId}`).classList.add('active');
}
function saveComment(lineId) {
const textarea = document.getElementById(`textarea-${lineId}`);
const comment = textarea.value.trim();
if (comment) {
comments[lineId] = comment;
} else {
delete comments[lineId];
}
renderDiff(); // Re-render to show comment indicator
updatePromptOutput();
}Prompt output format
Generate a structured code review format:
function updatePromptOutput() {
const commentKeys = Object.keys(comments);
if (commentKeys.length === 0) {
promptContent.innerHTML = '<span class="no-comments">Click on any line to add a comment...</span>';
return;
}
let output = 'Code Review Comments:\n\n';
commentKeys.forEach(lineId => {
const lineEl = document.querySelector(`[data-line-id="${lineId}"]`);
const file = lineEl.dataset.file;
const lineNum = lineEl.dataset.lineNum;
const content = lineEl.dataset.content;
output += `📍 ${file}:${lineNum}\n`;
output += ` Code: ${content.trim()}\n`;
output += ` Comment: ${comments[lineId]}\n\n`;
});
promptContent.textContent = output;
}Data attributes for line elements
Store metadata on each line element for prompt generation:
<div class="diff-line addition"
data-line-id="0-1-5"
data-file="src/utils/handler.py"
data-line-num="45"
data-content="subagent_id = tracker.register()">Pre-populating with real data
To create a diff viewer for a specific commit:
Run
git show <commit> --format="%H%n%s%n%an%n%ad" -pParse the output into the
diffDatastructureInclude commit metadata in the header section
Theme support
Support both light and dark modes:
/* Light mode */
body { background: #f6f8fa; color: #1f2328; }
.file-card { background: #ffffff; border: 1px solid #d0d7de; }
.diff-line.addition { background: #dafbe1; }
.diff-line.deletion { background: #ffebe9; }
/* Dark mode */
body { background: #0d1117; color: #c9d1d9; }
.file-card { background: #161b22; border: 1px solid #30363d; }
.diff-line.addition { background: rgba(46, 160, 67, 0.15); }
.diff-line.deletion { background: rgba(248, 81, 73, 0.15); }Interactive features
Hover hint: Show "Click to comment" tooltip on line hover
Comment indicator: Badge (💬) on lines with saved comments
Toast notification: "Copied to clipboard!" feedback on copy
Edit existing: Allow editing previously saved comments
Example topics
Git commit review (single commit diff with line comments)
Pull request review (multiple commits, file-level and line-level comments)
Code diff comparison (before/after refactoring)
Merge conflict resolution (showing both versions with annotations)
Code audit (security review with findings per line)
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Cline
- Publisher
- Cline (Official)
- Source
- cline/skills · skills/playground · commit 2637846
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Cline.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download playground.zip