Productivity
canvas avatar

canvas

Interactive terminal UI toolkit for Claude Code. Spawn and control calendar, document, and flight booking interfaces directly within tmux panes.

Introduction

The Canvas toolkit enables Claude to provide rich, interactive terminal experiences using TUI (Terminal User Interface) components. By leveraging tmux split panes, this skill allows users to maintain a conversation in one pane while interacting with dynamic data like calendars, markdown documents, or flight search results in another. It facilitates complex workflows where visual selection is more efficient than plain text interaction, such as picking meeting times from overlapping availability or editing specific segments of a document. The system uses a robust IPC (Inter-Process Communication) protocol over Unix domain sockets to ensure seamless synchronization between the model and the interactive canvas.

  • Real-time interactive components: Calendar meeting pickers, Markdown editors, and flight booking maps.

  • Seamless tmux integration for side-by-side terminal workflows.

  • Unix domain socket-based IPC for bi-directional communication between Claude and the TUI.

  • Support for custom scenarios (e.g., display-only vs. interactive selection).

  • Built with Bun, React, and Ink for high-performance terminal rendering.

  • Ensure a tmux session is active before spawning canvases to prevent display failures.

  • Requires a terminal with robust mouse support for interactive elements like selection and navigation.

  • The plugin is primarily designed for Claude Code and integrates via standard marketplace commands.

  • Input configuration follows a JSON-based schema, allowing dynamic updates to canvas states such as event scheduling or document text.

  • Handle IPC signals including 'ready', 'selected', 'cancelled', and 'error' to manage the lifecycle of the user interaction.

Repository Stats

Stars
1,479
Forks
142
Open Issues
6
Language
TypeScript
Default Branch
main
Sync Status
Idle
Last Synced
Apr 30, 2026, 04:38 PM
View on GitHub