Skip to content
canvas-edit logo

Canvas Edit - Live Annotation Toolbar

canvas-edit

Live Annotation Feedback Toolbar that overlays design review findings directly on web pages. Displays numbered badges on elements with issues, severity indicators, filtering, and screenshot capture. Integrates with design-review for real-time issue display. Triggers on "show annotations", "displa...

SKILL.md

Full skill instructions

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

SKILL_DIR=".claude/​skills/​canvas-edit/​scripts"

Inject Annotations onto Page

# Inject toolbar with issues from JSON file
uv run $SKILL_DIR/​canvas_edit.py inject http://localhost:3000 --issues issues.json

# Inject with issues from stdin
echo '[{"id": 1, "selector": "h1", "severity": "major", "title": "Contrast issue"}]' | \
  uv run $SKILL_DIR/​canvas_edit.py inject http://localhost:3000 --issues -

# Auto-screenshot on load
uv run $SKILL_DIR/​canvas_edit.py inject http://localhost:3000 --issues issues.json --screenshot

Typical Workflow: Design Review + Annotations

# 1. Run design review to find issues
uv run .claude/​skills/​design-review/​scripts/​design_review.py review http://localhost:3000 \
  --output-json issues.json

# 2. Inject annotations onto the page
uv run $SKILL_DIR/​canvas_edit.py inject http://localhost:3000 --issues issues.json

# 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:

[
  {
    "id": 1,
    "selector": ".hero-title",
    "severity": "major",
    "title": "Contrast ratio insufficient",
    "description": "Text contrast 3.2:1 fails WCAG AA (4.5:1 required)",
    "pillar": "Quality Craft",
    "checkId": "color-contrast",
    "recommendation": "Use darker text (#1a1a1a) or lighter background"
  },
  {
    "id": 2,
    "selector": "button.submit",
    "severity": "minor",
    "title": "Touch target too small",
    "description": "Button is 36x28px, minimum is 44x44px",
    "pillar": "Quality Craft",
    "checkId": "touch-target-size"
  }
]

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

// In another skill's JavaScript
const bus = window.__canvasBus;

// Listen for annotation clicks
bus.subscribe('annotation.clicked', (payload) => {
  console.log(`Issue ${payload.issueId} clicked: ${payload.selector}`);
});

// Add an issue programmatically
window.__annotationLayer.addIssue({
  id: 99,
  selector: '.problematic-element',
  severity: 'major',
  title: 'New issue found'
});

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

More Design skills

brandkit logo
Design

brandkit

Premium brand-kit image generation for high-end identity systems, logo concepts, and visual-world presentations.

92.7K 345.8K
View

Premium website design-to-code skill that generates visual references first, then builds faithful frontend implementations.

92.7K 341.7K
View

Premium frontend image direction for landing pages and marketing sites, generating one distinct horizontal image per section.

92.7K 337.8K
View

Premium mobile app screen concepts and flows with clean hierarchy, strong imagery, and distinctive art direction.

92.7K 331.8K
View

Emil Kowalski's philosophy on UI polish, component design, and the invisible details that make software feel good.

43.5K 323.4K
View

Frontend design and iteration for production-grade interfaces, from concept to ship.

76.8K 313.3K
View

Reverse-engineer design tokens from public websites into starter token files for your project.

232 129.9K
View
Animate logo
Design

Animate

Builds an animation from scratch by making the decisions in the order that determines whether it feels right.

43.5K 117.9K
View

Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.

179.7K 114.2K
View

Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.

179.7K 100.1K
View

Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.

179.7K 89.5K
View

Design AI tools

Maze Guru logo
Images

Maze Guru

Chat-to-edit AI studio for product photos, portraits, branding, and video.

Freemium
View
R
Design

RoomGPT

Generate your dream room in seconds.

Paid
View

Redesign your interior in seconds using AI

Paid
View
Reroom logo
Design

Reroom

Transform rooms with AI-generated designs.

Freemium
View
Jife logo
Design

Jife

Transform Your Space with AI-Powered Japanese Interior Designs by Jife

Paid
View
Visily logo
Design

Visily

AI-powered wireframes for non-designers.

Free
View

Revolutionize Property Viewing with AI-Generated Floor Plans and Virtual Tours

Paid
View
Archsynth logo
Design

Archsynth

Transform sketches into stunning architectural renders with AI.

Paid
View