Parallel sessions
Each card is its own live agent process. Type any time: messages queue while the agent or its sub-agents work.
- Fix reconnectworking
- Migrate settingsneeds approval
- Write release notesdone
Drawa is a canvas workspace for coding agents, starting with Claude Code and OpenCode. Run several sessions side by side, watch every file they read, edit and run appear wired to the session that touched it, and open any change in one click. It all runs on your machine.
curl -fsSL https://raw.githubusercontent.com/probablysamir/drawa/main/install.sh | sh
Why does a reload drop the stream?
A reload re-attaches from its last line, but events.go skips cards that aren't live yet.
Fixed. A reload mid-stream now starts the card's process and picks up where it left off.
func (l *Live) Snapshot(from int) []Line { l.mu.Lock()
- lv, ok := live.Get(c.ID); if !ok { continue }+ lv, ok := live.Get(c.ID)+ if !ok { lv = live.Start(c.ID) }
func TestReattach(t *testing.T) { // reload mid-stream
$ go test ./... ok drawa/internal/live 0.41s
Drag a tab to move a window
Everything else on the canvas stays neutral, so what the agent did is readable from across the room.
Sessions, files, diffs, notes and Git share one canvas. Pan, zoom, and put things where they make sense to you.
Each card is its own live agent process. Type any time: messages queue while the agent or its sub-agents work.
Click a file for its changes from every session, plus the file itself with Markdown and Mermaid preview.
@@ config.ts- const port = 8765+ const port = Number(env.DRAWA_PORT ?? 8765)
Every sub-agent gets a window of its own that fills in as it works, and you can message it directly.
Built-in tools let Claude read, create, edit and link canvas items: a diagram of the flow it traced, a note on what's left. Changes go through the usual approval.
Sticky notes, a Markdown scratchpad, Mermaid diagrams, pictures, pinned snippets and freehand ink. @-mention any of them in a message, or drop one on a card.
Browse status and history, commit and push. Open pull requests and issues through gh, and send a PR, its failing checks or its reviews straight to a session.
Resume past sessions from history. The layout survives a reload, and a reload re-attaches to sessions that are still running.
Light and dark, with Rosé Pine, Catppuccin, Tokyo Night, Gruvbox, Nord, Kanagawa, Everforest, Solarized and GitHub schemes. Try one on this page:
Drawa is one binary. It drives the claude or opencode CLI on your PATH with your login, settings, skills and MCP servers, and serves the page on 127.0.0.1.
Host and Origin on every request, and file access stays inside the folder you opened.drawa --net prints a network link with a one-time token and a QR code.$ drawa --net . - Local: http://127.0.0.1:8765 - Network: http://192.168.1.23:8765/?token=fpKZrzCN $ drawa https://github.com/owner/repo cloned into the cache, opened in your browser
Single keys for the common moves, following Excalidraw's where the tool exists. They never fire while you're typing.
Everyone who has committed to Drawa, opened an issue or pull request, or joined the discussion, most active first. Add your face here.
$ cat contributors.json counting…
Downloads the release binary for your OS to ~/.local/bin/drawa. No Go or Node needed. Update later with drawa --update.
curl -fsSL https://raw.githubusercontent.com/probablysamir/drawa/main/install.sh | sh
cd ~/my/project && drawapress N and typeNeeds Claude Code or OpenCode on your PATH. git and gh are optional. macOS or Linux; Windows isn't supported yet. Manual downloads and building from source.