KS
Killer-Skills

canvas-edit — what is canvas-edit what is canvas-edit, how to use canvas-edit annotation toolbar, canvas-edit vs browser devtools, canvas-edit alternative, canvas-edit install guide, canvas-edit setup for AI agents, real-time web design review tool, live annotation toolbar for developers

v1.0.0
GitHub

About this Skill

Perfect for Frontend Agents needing real-time web page annotation and debugging capabilities. canvas-edit is an AI Agent skill that provides a live annotation toolbar for web design reviews. It overlays numbered badges with color-coded severity borders on problematic page elements and enables detailed issue inspection via hover popovers.

Features

Displays live numbered badges on elements as issues are found
Applies color-coded severity borders (red/orange/blue) to badges
Provides hover popovers with detailed issue information
Enables one-click screenshot capture for documentation

# Core Topics

edrouhardmicrosoft edrouhardmicrosoft
[0]
[0]
Updated: 3/6/2026

Quality Score

Top 5%
45
Excellent
Based on code quality & docs
Installation
SYS Universal Install (Auto-Detect)
Cursor IDE Windsurf IDE VS Code IDE
> npx killer-skills add edrouhardmicrosoft/agent-canvas-skills/canvas-edit

Agent Capability Analysis

The canvas-edit MCP Server by edrouhardmicrosoft is an open-source Categories.community integration for Claude and other AI agents, enabling seamless task automation and capability expansion. Optimized for what is canvas-edit, how to use canvas-edit annotation toolbar, canvas-edit vs browser devtools.

Ideal Agent Persona

Perfect for Frontend Agents needing real-time web page annotation and debugging capabilities.

Core Value

Empowers agents to overlay design review findings directly on web pages using live annotations, severity indicators, and issue popovers, streamlining the debugging process with numbered badges, hover popovers, and one-click screenshot capture via HTTP protocol.

Capabilities Granted for canvas-edit MCP Server

Debugging web page elements with live annotations
Generating issue reports with severity-colored borders
Capturing one-click screenshots for issue documentation

! Prerequisites & Limits

  • Requires web page access for overlay functionality
  • Limited to web-based applications
Project
SKILL.md
8.2 KB
.cursorrules
1.2 KB
package.json
240 B
Ready
UTF-8

# Tags

[No tags]
SKILL.md
Readonly

Canvas Edit - Live Annotation Toolbar

Floating toolbar that overlays design review findings directly on web pages in real-time. Displays numbered badges on problematic elements with severity-colored borders, hover popovers for issue details, and one-click screenshot capture.

Key features:

  • Live annotations - Numbered badges appear on elements as issues are found
  • Severity indicators - Color-coded badges (red/orange/blue) with counts
  • Issue popovers - Click badges to see full issue details and recommendations
  • Screenshot capture - Capture annotated page (toolbar hidden, annotations visible)
  • Shadow DOM - Toolbar is invisible to agent-eyes screenshots
  • Filtering - Filter by severity or pillar category

Breaking Changes from v1

This is a complete redesign. Canvas-edit is now a viewing tool, not an editing tool.

Old FunctionalityNew Behavior
Text editing via textareaREMOVED
Style sliders (fontSize, etc.)REMOVED
"Save All to Code" buttonREPLACED with screenshot capture
contentEditable toggleREMOVED
edit commandREPLACED with inject command

For live editing, use agent-canvas --with-edit instead.

Prerequisites

  • Python 3.10+
  • uv package manager
  • Playwright browsers: playwright install chromium

Commands

bash
1SKILL_DIR=".claude/skills/canvas-edit/scripts"

Inject Annotations onto Page

bash
1# Inject toolbar with issues from JSON file 2uv run $SKILL_DIR/canvas_edit.py inject http://localhost:3000 --issues issues.json 3 4# Inject with issues from stdin 5echo '[{"id": 1, "selector": "h1", "severity": "major", "title": "Contrast issue"}]' | \ 6 uv run $SKILL_DIR/canvas_edit.py inject http://localhost:3000 --issues - 7 8# Auto-screenshot on load 9uv run $SKILL_DIR/canvas_edit.py inject http://localhost:3000 --issues issues.json --screenshot

Typical Workflow: Design Review + Annotations

bash
1# 1. Run design review to find issues 2uv run .claude/skills/design-review/scripts/design_review.py review http://localhost:3000 \ 3 --output-json issues.json 4 5# 2. Inject annotations onto the page 6uv run $SKILL_DIR/canvas_edit.py inject http://localhost:3000 --issues issues.json 7 8# 3. User interacts with annotations, takes screenshots, closes browser

Toolbar Controls

The floating toolbar (top-right by default) provides:

Status Display

  • Issue count ("5 Issues" or "All looks good!")
  • Severity badges: 🔴 blocking, 🟡 major, 🔵 minor

Actions

  • 👁 Visibility: Show/hide all annotations
  • ⚙ Filter: Filter by severity or pillar category
  • 📸 Screenshot: Capture page with annotations (toolbar hidden)
  • ↕/↔ Orientation: Toggle vertical/horizontal toolbar
  • ✕ Dismiss: Remove toolbar and all annotations

Dragging

  • Grab the ☰ handle to drag toolbar anywhere on screen
  • Position persists during session

Annotation Badges

Each issue appears as a numbered badge on its target element:

  • Position: Top-right of target element (auto-adjusts at screen edges)
  • Color: Border matches severity (red/orange/blue)
  • Click: Opens popover with full issue details
  • Hover: Highlights the target element

Badge Popover Contents

┌─────────────────────────────────────┐
│ #3  Contrast issue         [major] │
├─────────────────────────────────────┤
│ Color contrast ratio 3.2:1 fails   │
│ WCAG AA requirement of 4.5:1       │
│                                     │
│ Pillar: Quality Craft               │
│ Check: color-contrast               │
├─────────────────────────────────────┤
│ Recommendation:                     │
│ Change text color to #1a1a1a or    │
│ background to #ffffff              │
└─────────────────────────────────────┘

Issue JSON Format

Issues can come from design-review output or be manually constructed:

json
1[ 2 { 3 "id": 1, 4 "selector": ".hero-title", 5 "severity": "major", 6 "title": "Contrast ratio insufficient", 7 "description": "Text contrast 3.2:1 fails WCAG AA (4.5:1 required)", 8 "pillar": "Quality Craft", 9 "checkId": "color-contrast", 10 "recommendation": "Use darker text (#1a1a1a) or lighter background" 11 }, 12 { 13 "id": 2, 14 "selector": "button.submit", 15 "severity": "minor", 16 "title": "Touch target too small", 17 "description": "Button is 36x28px, minimum is 44x44px", 18 "pillar": "Quality Craft", 19 "checkId": "touch-target-size" 20 } 21]

Required Fields

FieldTypeDescription
idnumberUnique identifier
selectorstringCSS selector for target element
severitystring"blocking", "major", or "minor"
titlestringShort issue title

Optional Fields

FieldTypeDescription
descriptionstringDetailed explanation
pillarstringDesign pillar category
checkIdstringIdentifier for the check that found this
recommendationstringSuggested fix

Event API (Canvas Bus)

Canvas-edit integrates with other skills via the canvas bus event system.

Events Emitted

EventPayloadWhen
annotation.clicked{issueId, selector, severity}User clicks a badge
screenshot.requested{directory, filename, issueCount}Screenshot button clicked
screenshot.captured{path, issueCount}Screenshot saved (Python-side)
annotations.cleared{}Dismiss button clicked
filter.changed{severity, pillars}Filter settings changed

Events Subscribed

EventAction
review.startedShow "Scanning..." state
review.issue_foundAdd badge for new issue
review.completedShow final count or success message
capture_mode.changedHide/show toolbar for agent-eyes

Integration Example

javascript
1// In another skill's JavaScript 2const bus = window.__canvasBus; 3 4// Listen for annotation clicks 5bus.subscribe('annotation.clicked', (payload) => { 6 console.log(`Issue ${payload.issueId} clicked: ${payload.selector}`); 7}); 8 9// Add an issue programmatically 10window.__annotationLayer.addIssue({ 11 id: 99, 12 selector: '.problematic-element', 13 severity: 'major', 14 title: 'New issue found' 15});

Screenshot Output

Screenshots are saved to .canvas/screenshots/ with timestamp filenames:

.canvas/screenshots/
├── 2026-01-23T15-30-45_5-issues.png
└── 2026-01-23T15-45-12_0-issues.png

Filename format: YYYY-MM-DDTHH-MM-SS_N-issues.png

Screenshots capture:

  • Full page content
  • All visible annotation badges
  • Element highlights (if active)
  • NOT the toolbar (hidden during capture)

Toolbar States

StateDisplayTrigger
Issues Found"N Issues" + severity badgesDefault when issues > 0
All Clear"✓ All looks good!" (randomized)Zero issues after review completes
Scanning"⟳ Analyzing..." with spinnerDuring review.started

Success messages rotate randomly:

  • "All looks good!"
  • "Ship it!"
  • "Pixel perfect"
  • "Zero issues found"
  • "Looking sharp!"

Keyboard Navigation

KeyAction
TabNavigate toolbar controls
1-9Jump to badge by number
Arrow keysNavigate between visible badges
Enter/SpaceActivate focused button/badge
EscapeClose open popover

Shadow DOM Isolation

The toolbar is rendered inside a closed Shadow DOM:

  • Invisible to document.querySelector()
  • Excluded from agent-eyes DOM snapshots
  • Hidden from screenshots (annotations remain visible)
  • Page styles cannot affect toolbar appearance

Notes

  • Toolbar auto-repositions to stay on screen when dragged or resized
  • Badges reposition when window resizes or scrolls
  • Multiple badges on the same element stack with offset
  • Orphaned badges (element removed) are automatically cleaned up
  • Filter state persists during session but resets on page reload

Related Skills

Looking for an alternative to canvas-edit or building a Categories.community AI Agent? Explore these related open-source MCP Servers.

View All

widget-generator

Logo of f
f

widget-generator is an open-source AI agent skill for creating widget plugins that are injected into prompt feeds on prompts.chat. It supports two rendering modes: standard prompt widgets using default PromptCard styling and custom render widgets built as full React components.

149.6k
0
Design

chat-sdk

Logo of lobehub
lobehub

chat-sdk is a unified TypeScript SDK for building chat bots across multiple platforms, providing a single interface for deploying bot logic.

73.0k
0
Communication

zustand

Logo of lobehub
lobehub

The ultimate space for work and life — to find, build, and collaborate with agent teammates that grow with you. We are taking agent harness to the next level — enabling multi-agent collaboration, effortless agent team design, and introducing agents as the unit of work interaction.

72.8k
0
Communication

data-fetching

Logo of lobehub
lobehub

The ultimate space for work and life — to find, build, and collaborate with agent teammates that grow with you. We are taking agent harness to the next level — enabling multi-agent collaboration, effortless agent team design, and introducing agents as the unit of work interaction.

72.8k
0
Communication