canvas
Create a live React canvas beside chat for standalone analytical artifacts that benefit from visual layout: quantitative/security/ architecture analyses…
Skill by kensaurus
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/kensaurus-canvas
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, frontend, data, security
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Node.js package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/canvas
What's inside
- Skill name
canvas- Description
- Create a live React canvas beside chat for standalone analytical artifacts that benefit from visual layout: quantitative/security/ architecture analyses, data-heavy timelines/charts/tables, interactive explorations, or repeatable tools. Do not use for simple prose or code changes.
- License
- MIT
- Instructions
- 129 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
- Instructions call the network
Files (12)
- SKILL.md
- canvas-tokens.d.ts · sdk/
- chart-primitives.d.ts · sdk/
- dag-layout.d.ts · sdk/
- diff-view.d.ts · sdk/
- form-primitives.d.ts · sdk/
- hooks.d.ts · sdk/
- index.d.ts · sdk/
- theme.d.ts · sdk/
- todo-list.d.ts · sdk/
- ui-primitives.d.ts · sdk/
- ui-primitives.test.d.ts · sdk/
SKILL.md (first lines)
A canvas is a single `.canvas.tsx` file the IDE compiles so the user can open it beside the chat. Follow the workflow below in order.
## Workflow
### 1. Decide whether to use a canvas
The trigger is **user intent**, not response shape. Ask: would the user benefit from viewing this output as its **own standalone artifact**, separate from the chat? If the output is a means to an end (a drafted message, a code fix, a dashboard in another tool), skip the canvas.
**Use a canvas when the agent produces new standalone analytical output:**
- Quantitative analyses and metrics breakdowns (e.g. "send 500 requests and tell me how many fail")
- Billing or account investigations that surface structured findings from database queries
- Security audits or architecture reviews with categorized findings
- Cross-system data analyses and overlap reports
- Structured data from MCP tools (Databricks, Datadog, etc.) where the data IS the deliverable
- Financial analyses, margin decompositions, usage trend reports
- Tables with more than a handful of rows that the user asked to see
**Do NOT use a canvas when:**
- The user asks for work in a **specific tool** — "create a Datadog dashboard" means give them a Datadog dashboard, not a canvas
- The user has a **specific deliverable** — "draft a support response", "fix this code", "make this PR"
- The user is **working within an existing artifact** — improving an HTML dashboard, editing an existing file
- The user is doing **targeted debugging** or active development, even if structured findings emerge along the way
- Short factual answers, one-off file edits, or quick clarifying questions
- MCP tools are queried as an **intermediate step** for a different deliverable (e.g. querying Stripe to draft a support reply)
### 2. Write the canvas
**Location.** Canvases live at `~/.cursor/projects/<workspace>/canvases/<name>.canvas.tsx`. The IDE only detects canvases written directly inside that exact directory — subfolders, alternate extensions, and other locations are not picked up. For a new canvas, always use the write file tool to create the `.canvas.tsx` file at that exact path; do not stop after telling the user the path or showing code in chat. Treat that managed `canvases/` directory as pre-provisioned by Cursor itself: write the canvas file directly there and do **not** spend turns creating the directory with `mkdir` or checking whether it exists before writing. Listing its contents for other purposes (e.g. checking for existing canvases) is fine. If you can't determine the workspace directory from absolute paths already in your environment (terminals, transcripts, recently-viewed files), list `~/.cursor/projects/` rather than guessing. Use a descriptive kebab-case filename ending in `.canvas.tsx`; preserve acronym capitalization and lowercase the rest.
**File rules:**
- Exactly one `.canvas.tsx` file per canvas. Never create helper files, style files, or supporting modules.
- Import **only** from `cursor/canvas`. No relative imports, no npm packages, no Node built-ins.
- Default-export the top-level component.
- Embed all data inline. **No `fetch()`, no network calls.**
**Component discovery:** prefer built-in `cursor/canvas` components over hand-rolled markup. The full public surface (components, hooks, prop types, tokens) is declared in `~/.cursor/skills-cursor/canvas/sdk/index.d.ts` and its sibling `.d.ts` files — read them when you need exact exports, prop shapes, or hook signatures rather than guessing. Referencing an export that does not exist is the most common runtime error.
Apply the design guidance below as you write, and complete its pre-delivery self-check before returning the canvas.
## Design guidance
Be creative. The SDK gives you expressive building blocks — use them in whatever combination best serves the content. But avoid slop: no gradients, no emojis, no box-shadows, no rainbow coloring. Cursor canvases are flat, minimal, and purposeful.
### Visual hierarchy
Not everything deserves equal treatment. Primary content gets more space, larger headings, and accent color. Supporting content stays compact. Squint test: blur your eyes — can you tell what matters?
**Color.** All colors from `useHostTheme()` tokens — read its JSDoc in the SDK declarations for the return shape and usage pattern. No hardcoded hex. Use accent color deliberately, not on everything.
### Slop patterns — forbidden
These specific patterns produce low-quality output. If 2+ are present, redesign.
- **Gradients** — no `linear-gradient`, `radial-gradient`, `background-clip: text`.
- **Emojis** — no emoji as icons, status indicators, bullets, or section markers.
- **Box shadows** — no `box-shadow`. Flat surfaces only.
- **Wall of identical cards** — every section wrapped in the same card style with no variation. Mix open sections with cards.
- **Rainbow coloring** — a different color on every element. Most elements are neutral; color is used sparingly with purpose.
- **Giant text** — font sizes above H1 (24px), or bold text stuffed in CardHeader.
- **Decorative borders** — colored borders on every element. Borders are structural (subtle stroke tokens), not decorative.
- **Borrowed defaults** — italic accent words in headings, "01/02/03" numbered section labels, monospace for non-code labels, pill-shaped buttons or chips. Stock patterns, not choices.
### Pre-delivery self-check
Before returning canvas code, verify:
1. Does the layout have visual hierarchy? One thing should stand out.
2. Is there variety in the composition? Not just a single column of uniform blocks.
3. Slop check: scan for the forbidden patterns above.
## Introducing the canvas
When you create a canvas, add a short note in your chat response telling the user you created a canvas they can open beside the chat:
- **First canvas** — if no other `.canvas.tsx` files exist in the workspace's `canvases/` directory, include one sentence explaining what a canvas is.
- **Unsolicited canvas** — if the user didn't ask for a canvas, include one sentence explaining why you chose it over plain text.
Both can apply at once; one or two sentences total is enough. Skip the intro for subsequent canvases.
## Troubleshooting
If a canvas appears blank or missing, the most common cause is that it was not written under `~/.cursor/projects/<workspace>/canvases/` exactly — re-save it to that path. Do not debug this by trying to create the managed directory manually; focus on correcting the file path instead. Users can click the canvas file path in the response to open it, just like any other file path in Cursor. When present, the canvas server writes a `<name>.canvas.status.json` sidecar after each build with `status`, `diagnostics`, or `error` fields you can read; the file is best-effort and may not exist, so don't block on it.
## Good example
```tsx
import { Divider, Grid, H1, H2, Stack, Stat, Table, Text } from 'cursor/canvas';
export default function ServiceOverview() {
return (
<Stack gap={20}>
<H1>Service Overview</H1>
<Grid columns={3} gap={16}>
<Stat value="6" label="Total Services" />
<Stat value="5" label="Healthy" tone="success" />
<Stat value="1" label="Degraded" tone="warning" />
</Grid>
<Divider />
<H2>Service Status</H2>
<Table
headers={["Service", "Status", "Uptime", "Latency"]}
rows={[
["api-gateway", "Operational", "99.99%", "12ms"],
["auth-service", "Degraded", "99.2%", "340ms"],
["billing", "Operational", "99.8%", "45ms"],
]}
rowTone={[undefined, "warning", undefined]}
/>
<Divider />
<H2>Recent Changes</H2>
<Text>Auth service latency increased after the 14:30 deploy.</Text>
<Text tone="secondary" size="small">Last checked: Apr 7, 2026 14:52 UTC</Text>
</Stack>
);
}
```
Stats in a Grid, Table directly under H2, text sections without cards.
## Bad example — do not imitateFrom kensaurus/skills, MIT.
More from kensaurus/skills
- 0.633score
create-skill
kensaurus
Guide users through creating effective Agent Skills for Cursor.
SkillAFreshness: A★ 9Claude Code +9 - 0.633score
audit-agent-speed
kensaurus
Measure and fix a slow coding-agent setup: status line, hooks, instruction bloat, effort, worktree pile-up, antivirus and indexer scans.
SkillAFreshness: A★ 9Claude Code +9 - 0.629score
audit-backend-architecture
kensaurus
Read-only backend-architecture audit and pattern advisor, gated by stack.
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
audit-analytics
kensaurus
Read-only audit of product-analytics events (PostHog, Amplitude, Mixpanel, GA4): taxonomy, funnels, consent-gated firing, dead or duplicate events.
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
create-rule
kensaurus
Create Cursor rules for persistent AI guidance.
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
split-to-prs
kensaurus
Split current work into small reviewable PRs.
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
audit-accessibility
kensaurus
WCAG 2.2 AA audit via playwright-cli: axe-core, keyboard, contrast, target size, focus, ARIA.
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
audit-auth-flows
kensaurus
Read-only audit of app-layer auth: route×gate matrix, session lifecycle, OAuth, provider traps (getSession vs getUser, middleware-only gates, CVE-2025-29927).
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
audit-bundle-size
kensaurus
Analyse and shrink a web app's JavaScript bundle.
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
audit-cicd
kensaurus
Audit GitHub Actions CI/CD for cost, speed, and safety.
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
audit-code-quality
kensaurus
Detect and fix repo-wide anti-patterns and consistency drift (naming, organisation, repeated smells).
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
update-cursor-settings
kensaurus
Modify Cursor/VSCode user settings in settings.json.
SkillAFreshness: A★ 9Claude Code +9
Signals
- Stars
- 9
- Forks
- 1
- Open issues
- 0
- Last commit (this folder)
- Sep 23, 2026 (1 month ago)
- Last release
- Oct 19, 2026 (10 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/kensaurus/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from kensaurus
- 0.633score
audit-agent-speed
kensaurus
Measure and fix a slow coding-agent setup: status line, hooks, instruction bloat, effort, worktree pile-up, antivirus and indexer scans.
SkillAFreshness: A★ 9Claude Code +9 - 0.633score
create-skill
kensaurus
Guide users through creating effective Agent Skills for Cursor.
SkillAFreshness: A★ 9Claude Code +9 - 0.629score
audit-backend-architecture
kensaurus
Read-only backend-architecture audit and pattern advisor, gated by stack.
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
split-to-prs
kensaurus
Split current work into small reviewable PRs.
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
create-rule
kensaurus
Create Cursor rules for persistent AI guidance.
SkillAFreshness: A★ 9Claude Code +9 - 0.628score
audit-analytics
kensaurus
Read-only audit of product-analytics events (PostHog, Amplitude, Mixpanel, GA4): taxonomy, funnels, consent-gated firing, dead or duplicate events.
SkillAFreshness: A★ 9Claude Code +9
Cite this page
canvas skill. Agent Mart. https://agentmart.dev/skills/kensaurus-canvas (last updated 2026-10-24)