Drawa Star
01

Sessions and agents

Each session is a card on the canvas and a live agent process behind it. Run as many as your machine holds.

Parallel sessions

N

Every card is its own agent process. Type any time: messages queue while the agent or its sub-agents work, and show as sending until they're read.

Four agents, one canvas

Claude Code, OpenCode, Codex or Antigravity, picked per card from New session ▾. At launch Drawa lists the agents it finds and warns about untested versions. Compare them.

Model, effort and mode

Each card picks its model and permission mode: Ask first, Plan only, Allow edits, Auto or Allow everything. New cards start with the last model and effort you picked.

Auto: Claude Code

Approvals in the card

An edit waiting on you shows its diff inside the card, above Deny, Always allow and Allow. Questions the agent asks get answered there too, by picking or typing.

Not Antigravity

Sub-agents in the open

Every sub-agent gets a window that fills in as it works, and you can message it directly. Workflow calls show there too.

Claude CodeOpenCodeCodex: one row

The message box

/ opens skills and slash commands, @ references a file or canvas item, ! runs a shell command, and ↑ ↓ walk your earlier messages. Paste a picture to send it.

Take back a message

A queued message the agent hasn't read yet can still be edited or deleted from its bubble.

Claude Code

History and resume

Shift H

Resume any past session from History. Copy a session's ID with its agent's resume command. The layout survives a reload, which re-attaches to sessions still running.

Limits at a glance

Under each message box: tools loaded, MCP servers, context used, and rings for the 5-hour and weekly usage windows, with their reset time on hover.

Claude CodeCodex on a ChatGPT plan

Notifications

Looking at another tab? The tab title counts what's waiting, and, if you allow them, a system notification says when a turn finished or an agent needs an approval or an answer.

Idle sessions sleep

A session idle for 30 minutes closes its process, and its next message resumes it. DRAWA_MAX_LIVE caps how many run at once.

02

The work, as a map

What an agent did is drawn next to its card, in four colors that each mean one thing. Everything else on the canvas stays neutral.

  1. ReadFiles it opened. Dotted, since nothing changed.
  2. EditFiles it changed, with their counts.
  3. WriteFiles it created.
  4. RunCommands, with their output.

Files window

Every file a session touched, grouped by folder, changed files first, wired to its card and colored by what happened. Hide the reads when you only care about changes.

Commands window

The commands a session runs collect beside its card with their output. Drag a command row out to pin it on the canvas.

File viewer

Open any project file in a window: code highlighted, Markdown rendered with Mermaid diagrams, pictures shown. Relative links in Markdown open the file they point to.

Find anything

Ctrl K

Jump to a window, a file, a code symbol or a session (with its status), or run any action by name.

History and files

Shift H

The project's file tree and its past sessions, in one panel. A file's inspector shows its changes from every session and the file itself.

03

Review

An agent's edit isn't a line in a transcript. Each one is numbered inside its file, with line numbers and real context, next to the edits every other session made to it. Review it like a pull request, before it is one.

events.go2 edits · 2 sessions
Fix reconnect +2 −1 Retry backoff +1 −0 Show in file
for _, c := range cards {
if c.Closed { continue }
// re-attach from its last line
@@ −41,3 +41,4 @@ #1 Fix reconnect
lv, ok := live.(c.ID); if !ok { continue }
lv, ok := live.(c.ID)
if !ok { lv = live.Start(c.ID) }
lv.Replay(w, c.From)
@@ −52,2 +53,3 @@ #2 Retry backoff
for try := 0; try < 5; try++ {
time.Sleep(backoff(try))
}

Get · 4 references

  1. internal/live/registry.go22
  2. internal/server/events.go41
  3. internal/server/cardops.go87
  4. internal/live/live_test.go130
  • Every session, one file. Click a file for each change made to it, numbered and labeled with the session that made it. Line numbers open the file at that line.
  • More context on demand. Long unchanged stretches fold into a row you click. In Git and GitHub diffs, a hunk's header shows ten more lines at a time, as a pull request review does.
  • Jump from a name. Click a name in an agent's edit for its definition. In a Git or GitHub diff, get every place it's used, each opening at its line in a small peek window.
  • Pin a hunk. Select part of a diff and pin it to the canvas. It stays a diff, with its + and −, ready to @-mention in a message.
  • Approve from the card. An edit waiting on you shows its diff inside the card: deny, allow once, or always.
  • Discard a file. Modified and deleted files in the Git window get a discard button: a change goes back to what's staged, a staged one to the last commit.

Plans you can mark up.

In plan mode, Claude's plan opens as a document on the canvas. Comment on any block, or draw on it, then approve it or send your notes back. The revision lands in the same window, with what changed marked word by word.

Planv2 · 1 added · 1 edited

Keep the stream across reloads

  1. Store each card's last event id.
  2. On reload, poll every card re-attach from that id.You What about cards that never went live?
  3. Start cards that aren't live yet, then replay.
  4. Add a test that reloads mid-stream.
Notes for Claude… Send notes Approve
04

Editing and code

Fix the line yourself without leaving the canvas, and move through code by name.

Edit files in place

Ctrl S

The pencil on a file window, a double-click on its text, or Edit in the file inspector turns it into an editor. Saving only writes while the file on disk still matches what you opened, and keeps its line endings and encoding.

41 func (s *Server) events(w http.ResponseWriter) {
42   lv, ok := live.Get(c.ID)
NORMALevents.go:w

Vim motions

Turn on vim in Settings for the editor and scratchpads: :w, :q, gd and gD to where a name is declared, CtrlO back. Yanks flash and go to your clipboard. All editor keys.

Code symbols

With universal-ctags installed, CtrlK finds functions, classes and the like by name, and opens the file at that line, marked.

needs universal-ctags

Definitions and references

Click a name in an agent's edit to go to its definition. In a Git or GitHub diff, click one for every place it's used, each opening at its line in a peek window.

05

Canvas and whiteboard

An infinite canvas around your sessions, for the notes, sketches and pictures you'd otherwise keep somewhere else. Anything on it can go into a message.

Sticky notes

T

Double-click empty space and type. Empty notes vanish on their own.

Markdown scratchpad

S

Markdown windows rendered like a reply: headings, lists, code with copy and pin, Mermaid diagrams and GitHub callouts. Double-click to edit the source.

Mermaid diagrams

Any Mermaid block becomes a diagram you can open in full view, zoom, pan and download.

Excalidraw sketches

A sketch shows its preview on the canvas; double-click opens the full Excalidraw editor.

Pictures

9

Paste, drop or insert pictures. Crop them to a ratio, draw on them, zoom and pan in full view, and download them again.

Pinned snippets

Select text anywhere (a reply, a plan, a file, a diff, command output) and pin it, or drag a code block out. Code keeps its language and lines; a diff keeps its + and −.

Draw mode

D

Pen, text, rectangles, diamonds, ellipses and lines, an eraser and undo. Arrows connect any two items, drawings included.

Reference anything

@-mention a note, diagram, picture or snippet in a message, or drop it on a card. It's sent as what it is.

Agents use the canvas

Built-in tools let an agent read, create, edit and link canvas items, like a diagram of the flow it traced. Changes go through the usual approval.

Not Antigravity

Window controls

Collapse M, full view ShiftF, rename F2, pin to the sidebar ShiftP, stick to the screen ShiftS. Resize from any corner, copy a window's text from its tab.

Pan, zoom, fit

Select and Hand modes, Space to pan, pinch or Ctrl + scroll to zoom, Shift1 to fit everything. The zoom is saved with the canvas.

Minimal interface

Set ui to minimal and a window's tab shows only on hover or focus. A card waiting on you keeps its tab.

06

Groups

A group is a named frame around windows: a session, the files it touched, a note, a diagram. Drag the frame's tab and everything inside comes along. Fold it away when you're done.

Reconnect fix3 windows
Fix reconnectopus
  • Readlive.go
  • Editevents.go+2 −1
  • Rungo test ./...
events.go+2 −1
- if !ok { continue }+ lv = live.Start(c.ID)
Note

Check the phone layout once this lands.

Release 0.92 windows
Release notescodex
  • WriteCHANGELOG.md
  • Rungit tag v0.9.0
GitHub#153

Checks passed, ready to merge

  1. CtrlG

    Group the selection. Groups inside it merge into one. With nothing selected, you get an empty frame to drop windows into.

  2. Drop in to join, drag out to leave. A window dropped into a frame keeps its spot and the frame grows to fit. Dragged out, it leaves at once, with a notice that puts it back.

  3. Never on top of each other. Frames wrap their windows as they grow, and make room instead of overlapping another group.

  4. Drawings and pictures belong too. Ink, arrows and pictures inside a frame move with it, and a session's files, commands and plan windows open inside the group its card is in.

  5. ][

    Layers. Bring a window forward or send it back, past the next one it overlaps; with Shift, all the way. Inside a group, they reorder its windows.

  6. CtrlZ

    Nothing is lost. Deleting a group can be undone with its frame intact, and a frame stays when its last window leaves. CtrlShiftG ungroups.

07

Git and GitHub

Stage, commit, push and open a pull request beside the sessions that wrote the code, then send what review finds straight back to one.

Git window

G

Status, staging, history, commit and push. Open any recent commit's diff. A refresh button lights up when there are changes held back while you read a diff.

git 2.36+

Messages written for you

An agent drafts the commit message or pull request description. Write with ▾ picks which one.

Repos in subfolders

Open a folder of cloned repos and the Git window finds each one, up to four folders deep: a foldable group each, with its own commit box and pull request strip.

Worktrees

Each repo's header lists its worktrees, with a search box past five. Pick one to switch to it; remove a linked one from the same list.

Discard a file

Modified and deleted files get a discard button, after a confirm: a change goes back to what's staged, a staged one to the last commit.

GitHub window

Shift G

Pull requests, issues, Actions runs and checks through gh, for whichever repo you pick. Review a pull request's diff and merge it.

needs gh

Send to a session

Send a pull request, its failing checks or its reviews to a session in one click, as a reference the agent reads when your message goes.

Open any GitHub repo

drawa https://github.com/owner/repo clones it into a cache and opens it. Untrusted repos don't get to run their hooks, settings or MCP servers.

08

Anywhere you work

One binary on your machine, reachable from your phone, in your colors, driven from the keyboard.

On your phone

drawa --net prints a network link with a one-time token and a QR code. Phones start in Hand mode, so a drag pans.

Your colors

Light and dark, with Rosé Pine, Catppuccin, Tokyo Night, Gruvbox, Nord, Kanagawa, Everforest, Solarized and GitHub schemes. Try one on this page:

Settings that follow you

~/.drawa/config.json holds the theme, schemes, interface, code symbols and Vim, for every project and browser. See the settings.

Keyboard first

?

Single keys for the common moves, following Excalidraw's. ? lists them all with a filter. Every shortcut.

Stays on your machine

Served on 127.0.0.1, with Host and Origin checked and file access confined to the folder you opened. It drives your own CLIs, logins, skills and MCP servers.

Updates in place

Drawa tells you when a release is out, downloads and verifies it, and restarts into it when you say so. Or run drawa --update.

Try it on your own project.

One line installs the release binary to ~/.local/bin/drawa. Then cd into a project and run drawa.

curl -fsSL https://raw.githubusercontent.com/HimalayanNomads/drawa/main/install.sh | sh