dotharness/dotcraft/visualize
Claude Code and agent skill by dotharness/dotcraft
- community
Checking that the SKILL.md file is still in the repository.
Create visualizations and interactive tools directly in conversation. Use to show how something works; explore 'what happens when', 'what changes', or 'help me understand'; compare or inspect; create simulations, maps, charts, graphs, and mockups. Use standard tools for static scientific figures.
Install
npx vskill@latest install dotharness/dotcraft/visualizeSKILL.md
Visualize
- A request for a new standalone file, website, app page, component, or other project change is not an in-conversation visualization request, even when the deliverable contains charts or interactive content. Build those in the open project.
- A request to preview, explain, or explore a proposed interface in the conversation is an in-conversation visualization request.
- Create a visual only when the user needs to see or explore it in the conversation and it materially improves the explanation. Do not create a visual merely because the request involves data, charts, or an interactive page.
- Use a normal Markdown table when the user asks for a table; return it directly and do not create a visualization file.
- Use Mermaid when labeled nodes and edges fully explain a static structure; return a normal fenced Mermaid block and no visualization file. Use HTML for dynamics, spatial motion, adjustable inputs, and other visuals.
- When the system context has a
# Generative UIsection, use thegenerative-uiskill instead for calculators, forms, quizzes, choices, comparisons, and cards. Keep visualizations for dynamics, simulations, maps, custom graphics, and games. - Create an HTML visualization only when the system context has an
# Visualizationssection with a visualization directory. Otherwise, use Mermaid, a Markdown table, an ASCII diagram, or concise prose, and never emit a content reference. - Work silently unless blocked or the user explicitly asks for progress. Never send commentary or progress updates while reading this skill or writing or updating the file; the final response must be your first user-facing message.
- In user-facing prose, describe only what the visual helps the user see or decide. Keep it concise and do not repeat information already clear from the visual. Never announce this skill, a visualization surface, widgets, HTML, SVG, scripts, local files, inline data, or implementation details.
Read the complete skill
Read this file in full before authoring. Reread truncated ranges in smaller calls. Copy into every compaction summary: Reload the full visualize skill before creating or updating a visualization.
HTML output contract
File
- For each new visualization, choose a concise ASCII lowercase-hyphenated title and write
<title>.htmlwithWriteFile, using an absolute path directly inside the visualization directory from the system context. Never write visualization fragments anywhere else. - To update an existing visualization, rewrite its file in place with
WriteFileorEditFile. Every reply that shows that path then displays the latest version. - Read the file back with
ReadFileafter every write.
Fragment
- Write only an HTML fragment: no
<!doctype>,<html>,<head>, or<body>. - Write literal markup: use
<div class="card">Hi</div>plus a real newline, never<div class=\"card\">Hi</div>\n. Never embed the fragment in an inline Python, JavaScript, or shell string. Read it back; rewrite literal\"or\n. - Keep CSS and JavaScript in the fragment only when base classes are insufficient. Load static resources only from the CDN allowlist. Never use
fetch, XHR, WebSocket, or other API calls. - Give the fragment root a unique ID and select it with
document.getElementById(...). Never derive the root fromdocument.currentScript; scripts may sit outside the root. - Keep visualizations under 1 MB. Aggregate, bin, downsample, reduce precision, or drop unused fields from large inline datasets.
- Check that JavaScript has no undefined identifiers, every queried element exists, and the primary interaction updates the visual. The host reports the first uncaught error or unhandled rejection to the user with an action that asks you to fix the file.
Content and response
- Keep the fragment focused on the visualization. Do not include explanatory paragraphs, formulas, instructions, or narrative callouts. Include only necessary labels, legends, values, and accessible text alternatives.
- Use the normal response flow. Put any necessary concise explanation outside the fragment, and add this visualization content reference on its own line where the visual should appear, using the absolute file path:
- The JSON object may also include a
titleof at most 200 characters when the visual needs a more descriptive accessible name:visualize{"path":"<absolute-path>/<title>.html","title":"Monthly sales by region"}. It may also include"mode":"wide"as described next. Use no other keys. - Add
"mode":"wide"for a full-screen desktop app mockup, including its application shell. For other visuals, add it only when several compact chart panels must stay side by side for direct comparison and would be unreadable at the normal width. Never widen a single plot, map, grid, diagram, or timeline merely because it is dense. Keep contained mockups, dialogs, and mobile screens at normal width, and stack separate self-contained views vertically. A wide view breaks out of the text column up to 1,024px when the conversation has room:visualize{"path":"<absolute-path>/<title>.html","mode":"wide"} - Whenever you create or update a visualization, include its content reference only in that same turn's final response (never in commentary or progress updates), even when editing an existing file or reusing a path shown in an earlier turn.
- Emit only the content reference for the fragment. Never announce it as an artifact, website, output, attachment, link, or download, and never add a Markdown link to it. Do not append a Markdown table or repeat the visual's data; add at most one short conclusion when the user needs an explanation.
External resources
- The CSP allows only
cdnjs.cloudflare.com,esm.sh,cdn.jsdelivr.net,unpkg.com,fonts.googleapis.com,fonts.gstatic.com, andfonts.bunny.net. Other origins are blocked and fail silently. Network requests such asfetchare blocked even for these origins, so load data as script or module imports or inline it.
Runtime styles
Color
- In each color pair, the base token is a surface and its
-foregroundtoken is the content on that surface.--mutedis a surface fill; use--muted-foregroundfor secondary text. - Make every fill, stroke, text, border, shadow, chart, and canvas color theme-aware. Never hardcode light or dark palettes such as white panels, off-white backgrounds, black text, slate strokes, or Tailwind color literals.
- Keep text readable against its actual background. Muted or secondary colors must retain clear contrast; never use
.text-mutedinside.cardor another filled container unless its background preserves that contrast. - Available theme variables are
--background,--foreground,--card,--card-foreground,--popover,--popover-foreground,--primary,--primary-foreground,--secondary,--secondary-foreground,--muted,--muted-foreground,--accent,--accent-foreground,--destructive,--border,--input,--ring,--viz-series-1through--viz-series-6, and the named hues--blue,--orange,--green,--red,--purple, and--yellow. UsecurrentColorinside SVG. --popoverand--popover-foregroundare the tooltip pair: an inverted surface that stands apart from the visualization. Use them only for transient annotations such as a chart tooltip.- Named hues follow the host theme. Use them for status or category identity in marks, swatches, and soft tinted fills, never for text or controls.
- The document follows the host appearance, so
light-dark(<light>, <dark>)resolves to the active theme. - Never add decorative borders, outlines, or strokes to progress tracks, meters, bars, stacked segments, or other filled quantitative marks. Use a subtle neutral or translucent track and distinguish marks with fill, contrast, spacing, or opacity.
- Use
--viz-series-1for one measure or active state. Use--viz-series-2through--viz-series-6only for important persistent category, series, or status identity; never give every peer a different color by default. - For categorical tiles or nodes, prefer a soft low-opacity series fill with a neutral or transparent border; never color every outline.
- Keep mappings stable and pair color with labels, shapes, or line styles.
- Secondary series colors are theme-derived; never assume hues or use them decoratively.
- When color encodes a category or series, apply it consistently to the corresponding visual marks, not just the legend, and keep large-area fills subtle.
- Use series colors only for chart lines, marks, and legend swatches. Keep values, axis text, and direct labels in
--foregroundor--muted-foreground. - Keep chart grids and inactive structure thin and neutral. Use 1-2px neutral structural paths; never thicken, dash, or double-stroke the whole structure.
- Use
.btn-primaryfor high-emphasis actions; its neutral fill is supplied by the utility. Buttons witharia-pressed="true",.active, ordata-state="active"already use the selected style;.nav-pills .nav-link.activeand a selected.viz-tilekeep selection neutral. Reserve--accentand--accent-foregroundfor subtle interactive surfaces and soft highlights.
Typography
- Scale type with
--font-size-base, which follows the host's conversation text size. Use normal text by default and.text-smallonly for secondary annotations; at the default scale these are 14px and 12px. Never make supporting text smaller than 11px. h1,h2, andh3are styled by the host. Use one concise visible heading (h2orh3) for a self-contained chart or graph, with short panel headings only when needed. Do not restate the prompt or add a redundant title to other visualizations.- Use only weights
400and500in your own styles. Never set custom font sizes or line heights. - Use
.tabular-numson changing or aligned numbers. Avoid it for editorial or decorative numerals.
Composition
Choose the smallest composition that fits.
- Prefer interaction detail over permanent panels, toolbars, repeated legends, or long stacks. Add only requested controls, use one mechanism per state, and never invent search, filter, or reset controls.
- Keep filters, selections, and other presentation-only interactions local. For drill-down actions that ask for further investigation or explanation of selected data, call
await window.openai.sendFollowUpMessage({ prompt, title, context }), where the optionaltitleis a concise confirmation-dialog heading of up to 250 characters. The user confirms before the message is sent. Include the selected values and requested investigation in the prompt, and label the action clearly. Pass the optionalcontext(JSON, under 32 KiB) only when the follow-up needs structured visualization data beyond the prompt; it is appended to the user's message as visible JSON. - Show only metrics that explain the requested behavior. Put live values in control headers or on the visual before cards. Treat maxima as ceilings, not targets. Never invent qualitative scores, status cards, or secondary fact grids to fill space.
Remembering interaction state
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingsrc/DotCraft.Core/Skills/BuiltIn/visualize/SKILL.md
Popularity
- 7-day trend score
- 5
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/dotharness/dotcraft/visualize)