TermCanvas spreads all your terminals across an infinite spatial canvas — no more tabs, no more split panes. Drag them around, zoom in to focus, zoom out to see the big picture, and annotate with freehand drawings.
It organizes everything in a Project → Worktree → Terminal hierarchy that mirrors how you actually use git. Add a project, and TermCanvas auto-detects its worktrees. Create a new worktree from the terminal, and it appears on the canvas instantly.
Download — grab the latest build from GitHub Releases.
Warning
macOS note for unsigned builds If macOS says TermCanvas is damaged or blocks launch because the app is unsigned, clear the quarantine attribute and try again:
xattr -cr /Applications/TermCanvas.appIf you installed the app somewhere else, replace the path with the actual app location.
Build from source:
git clone https://github.com/blueberrycongee/termcanvas.git
cd termcanvas
npm install
npm run devInstall CLI tools — after launching the app, go to Settings → General → Command line interface and click Register. This adds termcanvas and hydra to your PATH.
Infinite canvas — pan, zoom, and arrange terminals freely. Three-layer hierarchy: projects contain worktrees, worktrees contain terminals. New worktrees appear automatically as you create them.
Double-click a terminal title bar to zoom-to-fit. Drag to reorder. Box-select multiple terminals. Annotate with pen, text, rectangles, and arrows. Save your entire layout to a .termcanvas file.
First-class support for Claude Code, Codex, Kimi, Gemini, and OpenCode.
- Composer — a unified input bar that sends prompts to the focused agent, with image paste support
- Live status & completion glow — see at a glance whether an agent is working, waiting, or done
- Session resume — close and reopen an agent terminal without losing context
- Inline diff cards — review an agent's changes without leaving the canvas
Shell, lazygit, and tmux terminals live alongside AI agents on the same canvas. Star important terminals and cycle through them with ⌘ J / K. Four size presets, customizable titles, per-agent CLI override.
Token usage and cost dashboard — total spend, per-project and per-model breakdown. Hourly token heatmap, 24-hour cost sparkline, cache hit/miss stats. Quota monitor for 5-hour and 7-day rate limits. Sign in to sync usage across devices.
6 downloadable monospace fonts · dark/light theme · customizable keyboard shortcuts · minimum contrast ratio for accessibility · English and Chinese (auto-detected) · auto-update with in-app changelog.
Both CLIs are bundled with the app. Register them from Settings to use in any terminal.
Full command reference
Usage: termcanvas <project|terminal|diff|state> <command> [args]
Project commands:
project add <path> Add a project to the canvas
project list List all projects
project remove <id> Remove a project
project rescan <id> Rescan worktrees for a project
Terminal commands:
terminal create --worktree <path> --type <type> Create a terminal
[--prompt <text>] [--parent-terminal <id>] [--auto-approve]
terminal list [--worktree <path>] List terminals
terminal status <id> Get terminal status
terminal input <id> <text> Send text input to a terminal
terminal output <id> [--lines N] Read terminal output (default 50 lines)
terminal destroy <id> Destroy a terminal
Other commands:
diff <worktree-path> [--summary] View git diff for a worktree
state Dump full canvas state as JSON
Flags:
--json Output in JSON format
termcanvas project add ~/my-repo
termcanvas terminal create --worktree ~/my-repo --type claude
termcanvas terminal status <id>
termcanvas diff ~/my-repo --summaryHydra lets you break a big task into smaller pieces and hand each piece to an AI agent running in its own git worktree. Every agent gets its own terminal on the canvas, so you can watch them all work in parallel.
The easiest way to use Hydra is to ask your AI agent directly. After running hydra init in your project, just tell your agent:
"Use Hydra to split this refactor into subtasks and run them in parallel."
The agent already knows how to call hydra spawn, monitor progress, and merge results — you don't need to memorize any CLI flags.
hydra init # teach Claude Code / Codex how to use Hydra in this projectManual usage
hydra spawn --task "fix the login bug" --type claude --repo .
hydra list
hydra cleanup <agent-id>hydra spawn creates a worktree + branch, opens a terminal on the canvas, and sends the task. Pass --auto-approve to inherit the parent agent's permission level. For read-only tasks (review, analysis), pass --worktree <path> to reuse an existing worktree.
All shortcuts are customizable in Settings → Shortcuts. On Windows/Linux, replace ⌘ with Ctrl.
| Shortcut | Action |
|---|---|
| ⌘ O | Add project |
| ⌘ B | Toggle sidebar |
| ⌘ / | Toggle right panel (usage) |
| ⌘ T | New terminal |
| ⌘ D | Close focused terminal |
| ⌘ ; | Rename terminal title |
| ⌘ ] | Next terminal |
| ⌘ [ | Previous terminal |
| ⌘ E | Unfocus / refocus last terminal |
| ⌘ F | Star / unstar focused terminal |
| ⌘ J | Next starred terminal |
| ⌘ K | Previous starred terminal |
| ⌘ S | Save workspace |
| ⌘ ⇧ S | Save workspace as |
| ⌘ 1–4 | Terminal size: default / wide / tall / large |
| Desktop | Electron |
| Frontend | React · TypeScript |
| Terminal | xterm.js (WebGL) · node-pty |
| State | Zustand |
| Styling | Tailwind CSS · Geist |
| Drawing | perfect-freehand |
| Auth & sync | Supabase |
| Build | Vite · esbuild |
Acknowledgements — lazygit is integrated as a built-in terminal type for visual git management on the canvas.
Contributing — fork, branch, and open a PR. Licensed under MIT.
