Approve three hunks of a diff and reject the fourth — with arrow keys, not a wall of + and -.
A Claude Code plugin
Claude stops describing.
Claude starts showing.
claude-canvas opens a real interactive pane beside your conversation — pick a file, approve a diff hunk, fill in a form — and your answer comes back as an exact value, not prose Claude has to guess at.
Watch it work
One pane. Three very different asks.
A diff to review, a screenshot to read, a calendar to check — claude-canvas opens the same pane for all of it.
Pick a meeting time, a file to refactor, a seat on a flight — from a real list, not a numbered chat menu.
Ships as a prebuilt plugin. No build step, no dependencies — just /plugin install and somewhere a pane can open: a running tmux session, or Windows Terminal.
Nine canvases
Not a numbered menu. A real interface.
Choose one or more options from a list.
Fill in structured fields and submit them together.
Read tabular data, with a fixed header and scrolling body.
Look at a PNG in the pane: full resolution on kitty, iTerm2 and Sixel terminals, quadrant block cells everywhere else.
Review a unified diff hunk by hunk, approving or rejecting each.
Several of the above in one pane, at a glance.
Display events, or pick a meeting time from several calendars.
View or edit markdown, with text selection.
Compare flights and pick a seat (a demo of the machinery).
How it works
Three steps. No new habits.
- 01
Install the plugin
/plugin marketplace add sgomez-dev/claude-canvas /plugin install canvas@claude-canvas
- 02
Be somewhere a pane can open
tmux
A canvas opens as a split beside your shell, so it needs a terminal that can make one: an active tmux session — installed is not enough, it has to be running — or Windows Terminal, which needs no extra step.
- 03
Ask Claude something whose answer is a choice
- "Show me the failing tests in a table."
- "Which of these files should I refactor? Let me pick."
- "Find a time next week when Alice and Bob are both free."
Answers
What is it, and what does it need?
What is claude-canvas?
A plugin for Claude Code, Anthropic’s terminal coding agent. When the answer to a question is a choice rather than a sentence — which file, which hunks of a diff, which meeting slot, which values in a form — it opens an interactive terminal pane beside the conversation. You operate it with the arrow keys, and your selection returns to Claude as structured data over a local socket instead of prose it has to interpret.
Does it need tmux?
For a split pane beside the conversation, yes: an active tmux session, or Windows Terminal instead. Having tmux installed is not enough, because the plugin looks for the $TMUX environment variable, which only exists inside a session. Without either host, spawning is refused with a message naming both rather than failing silently.
Does it work on macOS?
Yes. The default macOS Terminal renders 24-bit colour, so the block-character image tiers work at full fidelity there. The pane itself still needs a running tmux session. macOS, Linux and Windows are all supported.
Which terminals show images at full resolution?
kitty and Ghostty through the kitty graphics protocol, iTerm2 through its inline images protocol, and WezTerm, foot, Windows Terminal and xterm through Sixel. Everywhere else, including the default macOS Terminal, images render as quadrant block characters: four pixels per character cell, which measured 61% less error than half blocks on a 3384×2160 screenshot at 76×24 cells.
How do you install it?
Two commands inside Claude Code: /plugin marketplace add sgomez-dev/claude-canvas, then /plugin install canvas@claude-canvas. It ships as a prebuilt bundle, so there is no build step and no dependency install.
Is it free and open source?
Yes. MIT licensed, with the source on GitHub at sgomez-dev/claude-canvas.
Who made it?
Santiago Gómez de la Torre Romero. It is a fork of David Siegel’s dvdsgl/claude-canvas, substantially extended.
Which terminals render images how?
| Tier | Terminals | Result |
|---|---|---|
| kitty protocol | kitty, Ghostty | Full resolution; the terminal decodes the PNG |
| iTerm2 inline images | iTerm2 | Full resolution |
| Sixel | WezTerm, foot, Windows Terminal, xterm | Full resolution, 256 colours |
| quadrant blocks | the default everywhere else, including the macOS Terminal | 2×2 pixels per character cell |
| half blocks | a font without the quadrant glyphs | 1×2 pixels per cell |
Sources
- Source and issue tracker — https://github.com/sgomez-dev/claude-canvas ↗
- Claude Code documentation — https://docs.claude.com/en/docs/claude-code/overview ↗
- Claude Code plugins — https://docs.claude.com/en/docs/claude-code/plugins ↗
- tmux — https://github.com/tmux/tmux/wiki ↗
- kitty graphics protocol — https://sw.kovidgoyal.net/kitty/graphics-protocol/ ↗
- Upstream project this forks — https://github.com/dvdsgl/claude-canvas ↗
Stop typing pick a number. Start pointing at the answer.
Two commands, one plugin, no build step.
/plugin marketplace add sgomez-dev/claude-canvas /plugin install canvas@claude-canvas
MIT licensed · one command to remove