From canvas
Spawns, controls, and communicates with interactive terminal TUIs for calendars, document editing, and flight bookings via tmux and IPC.
How this skill is triggered — by the user, by Claude, or both
Slash command
/canvas:canvasThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Start here when using terminal canvases.** This skill covers the overall workflow, canvas types, and IPC communication.
Start here when using terminal canvases. This skill covers the overall workflow, canvas types, and IPC communication.
Try asking Claude things like:
Calendar:
Document:
Flight:
Canvas provides interactive terminal displays (TUIs) that Claude can spawn and control. Each canvas type supports multiple scenarios for different interaction modes.
| 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 |
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 '{...}'
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 IPCInteractive 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
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}`);
}
| Skill | Purpose |
|---|---|
calendar | Calendar display and meeting picker details |
document | Document rendering and text selection |
flight | Flight comparison and seat map details |
npx claudepluginhub agisota/claude-canvas --plugin canvas3plugins reuse this skill
First indexed Jul 17, 2026
Provides design patterns for terminal user interfaces: layout paradigms, keyboard navigation, visual systems, and TUI anti-pattern validation. Works with Ratatui, Ink, Textual, Bubbletea, or any TUI framework.
Guides collaborative design exploration before implementation: explores context, asks clarifying questions, proposes approaches, and writes a design doc for user approval.
Creates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.