Now in free public beta
Every tool you run. One infinite space.
Terminals, Git, AI agents and docs — pinned to a canvas that never forgets where you left them. Tomorrow starts where today stopped.
Native macOS · Apple silicon & Intel · free during public beta
func drop(_ thread: Thread, on window: CanvasWindow) {
− guard let target = hitTest(thread.tip) else { return }
+ guard let target = hitTest(thread.tip) ?? nearest(thread) else { return }
+ let cable = Cable(from: thread.source, to: target, kind: .data)
+ layer.attach(cable, animated: true)
}
// flow particles travel source → destination
− cable.state = .idle
+ cable.state = link.isLive ? .flowing : .resting
+ emitter.rate = link.isLive ? 14 : 0
read src/canvas/CableLayer.swift
read src/canvas/Thread.swift
planning the attach path…
edit drop(_:on:) — 2 files changed
test CableLayerTests · 12 passed
✓ diff ready — cable flowing →
This is your project.
Not twelve tabs. Not four desktops. A map you pan and zoom like territory.
Real terminals, pinned in place.
A live PTY with scrollback that survives the night. It's still here tomorrow.
Git you can actually see.
Graph beside diff. Stage straight from the change. No modal in your way.
Agents work on the canvas.
Claude, Gemini, Copilot, Codex — assigned from your planner, watched in the open.
Alone, they're windows.
Together, they're an environment shaped exactly like the problem.
Cables make work visible.
Light flows from source to destination. You see progress without reading a log.
Seventeen surfaces.
Zero clutter.
Every surface is a focused native window — summoned when you need it, gone when you don't, always remembering its place on the canvas.
~/dev/nullspace ❯ swift build Building for debugging… ✓ Build complete (4.2s) ❯ git status -sb ## feat/cables…origin M src/canvas/CableLayer.swift ❯
Core surfaces · 01 A real PTY running a login shell — ANSI colour, alt-screen TUIs, scrollback that survives the night.
The core is just
the start.
Install free, sandboxed plugins from inside the app to add new powers — isolate agents in their own git worktrees, juggle Claude logins, drive the planner from an agent, or type by voice. All on-device, all free.
Give every AI agent its own copy of the working tree, so parallel agents never collide.
- One toggle runs each new agent on its own branch and checkout — even across a multi-repo folder.
- A scoped diff per agent, then merge or discard the whole worktree in one action.
Keep several Claude Code logins side by side and switch the active one in a single click.
- The usage gauge splits into a row per account, each with its own limit bars and reset clock.
- Get a phone push the moment a paused account's limit frees up again.
Let Claude Code read and drive the planner of the space it's working in — and keep you in control.
- The agent ticks a live to-do list as it works, with focus files travelling with each task.
- It can move a task to Review with a hand-off note — but never to Done. That call is yours.
Talk instead of type — your words land at the cursor, transcribed entirely on your Mac.
- Speech-to-text runs 100% on-device with Parakeet or Whisper — no audio ever leaves the machine.
- Smart insert drops the transcript into whichever agent, task or editor has focus.
Assign a planner task to any agent by a thread — the work flows back as a live diff.
Explore all four pluginsFollow along as
Null Space ships.
Build updates, new tool windows and beta notes go out on X first. Follow the project and its founder to catch them the moment they drop.
Return to the problem,
not the setup.
Free during public beta · macOS 14+ · Apple silicon & Intel