Skip to content
CLI Tools
Skill

/canvas

**The primary skill for terminal TUI components.** Covers spawning, controlling, and interacting with terminal canvases. Use when displaying calendars, documents, or flight bookings.

BOOST
From plugin
claude-canvas
1.5k4 skills1 command
Install
$ npx -y skills add dvdsgl/claude-canvas --skill canvas --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/canvas

Context preview

The summary Claude sees to decide when to auto-load this skill.

**The primary skill for terminal TUI components.** Covers spawning, controlling, and interacting with terminal canvases. Use when displaying calendars, documents, or flight bookings.

SKILL.md

canvas.SKILL.md
name: canvas
description: |
  **The primary skill for terminal TUI components.** Covers spawning, controlling, and interacting with terminal canvases.
  Use when displaying calendars, documents, or flight bookings.

Canvas TUI Toolkit

**Start here when using terminal canvases.** This skill covers the overall workflow, canvas types, and IPC communication.

Example Prompts

Try asking Claude things like:

**Calendar:**

  • "Schedule a meeting with the team next week"
  • "Find a time when Alice and Bob are both free"

**Document:**

  • "Draft an email to the sales team about the new feature"
  • "Help me edit this document — let me select what to change"

**Flight:**

  • "Find flights from SFO to Denver next Friday"
  • "Book me a window seat on the morning flight"

Overview

Canvas provides interactive terminal displays (TUIs) that Claude can spawn and control. Each canvas type supports multiple scenarios for different interaction modes.

Available Canvas Types

| Canvas | Purpose | Scenarios | |--------|---------|-----------| | `calendar` | Display calendars, pick meeting times | `display`, `meeting-picker` | | `document` | View/edit markdown documents | `display`, `edit`, `email-preview` | | `flight` | Flight comparison and seat selection | `booking` |

Quick Start

cd ${CLAUDE_PLUGIN_ROOT}

# Run canvas in current terminal
bun run src/cli.ts show calendar

# Spawn canvas in new tmux split
bun run src/cli.ts spawn calendar --scenario meeting-picker --config '{...}'

Spawning Canvases

**Always use `spawn` for interactive scenarios** - this opens the canvas in a tmux split pane while keeping the conversation terminal available.

bun run src/cli.ts spawn [kind] --scenario [name] --config '[json]'

**Parameters:**

  • `kind`: Canvas type (calendar, document, flight)
  • `--scenario`: Interaction mode (e.g., display, meeting-picker, edit)
  • `--config`: JSON configuration for the canvas
  • `--id`: Optional canvas instance ID for IPC

IPC Communication

Interactive canvases communicate via Unix domain sockets.

**Canvas → Controller:**

{ type: "ready", scenario }        // Canvas is ready
{ type: "selected", data }         // User made a selection
{ type: "cancelled", reason? }     // User cancelled
{ type: "error", message }         // Error occurred

**Controller → Canvas:**

{ type: "update", config }  // Update canvas configuration
{ type: "close" }           // Request canvas to close
{ type: "ping" }            // Health check

High-Level API

For programmatic use, import the API module:

import { pickMeetingTime, editDocument, bookFlight } from "${CLAUDE_PLUGIN_ROOT}/src/api";

// Spawn meeting picker and wait for selection
const result = await pickMeetingTime({
  calendars: [...],
  slotGranularity: 30,
});

if (result.success && result.data) {
  console.log(`Selected: ${result.data.startTime}`);
}

Requirements

  • **tmux**: Canvas spawning requires a tmux session
  • **Terminal with mouse support**: For click-based interactions
  • **Bun**: Runtime for executing canvas commands

Skills Reference

| Skill | Purpose | |-------|---------| | `calendar` | Calendar display and meeting picker details | | `document` | Document rendering and text selection | | `flight` | Flight comparison and seat map details |

Read more
Ships withclaude-canvas

A TUI toolkit that gives Claude Code its own display. Spawn interactive terminal interfaces for emails, calendars, flight bookings, and more. Note: This is a proof of concept and is unsupported.

Get the whole plugin
Stats
1,515
Stars
138
Forks
Quiet
Maintenance
TypeScript
Language
MIT
License
9mo ago
Last commit
9mo ago
Created
11d ago
Added

Repo: dvdsgl/claude-canvas

Other skills on claude-canvas.