v0.9.0 · private beta · pure Rust · macOS first

Every agent
needs a ship.

Novalis is an AI-native terminal: a GPU-drawn cockpit where agents read, build, and run with you at the helm. Powered by LLMs, directed by humans.

No account. No sign-up. It works before you tell us your name.

An agent proposes; the gate disposes. Click the rail, the tabs, the theme dots.

Novalis — starship-engine⌘⇧L · agent
tabs and the rail are clickable
cargo test -p engine test result: ok. 84 passed; 0 failed; 1 flaky on CI ✓ 1.9s
agent why is thrust_curve flaky on CI but never locally? read tests/thrust_curve.rs · grep seed · 2 files Found it: the test seeds its RNG from wall-clock time. Proposal: tests/thrust_curve.rs:12 − let seed = now_ms(); + let seed = 0x5EED; Run Edit Copy approval: prompt · nothing runs without you
approved · patch applied · 84 passed ✓
⎇ v2 · starship-engineAI · Agent · ead503f 07-17
one binary · zero webviewegui on wgpu · Metal / DX12 / Vulkanidle = zero repaintsevery build stamped, every night

The cockpit

When a background agent
finishes, the ship calls you.

Workspaces are decks. You fly one at a time, and the rail keeps score of the rest. A background workspace that actually finishes something rings like an incoming call. Answer it with a click, or with ⌘⇧U.

The rail is yours: clicks never reorder it. Only real events move it, and a command has to have actually run to count (the shell integration knows). There is a kill switch if you want total silence.

▶ Watch it ring, up in the window

The ship's manifest

A real terminal first.
Then the future bolted on.

Underneath the agents sits a serious terminal: full VTE emulation on a battle-tested grid, a warm PTY pool, 10k scrollback, and the fit and finish of something drawn, not rendered.

Blocks that remember

Shell integration marks every prompt, command, and output. Commands become addressable blocks: copy one, bookmark it, re-run it, jump between them with Alt+↑/↓. Never grep your own scrollback again.

Drawn on the GPU

A single pure-Rust binary painting straight to Metal. Repaint-driven, never polled. A busy build streams smoothly and an idle terminal costs zero frames.

An agent with a gate

⌘⇧L starts a real agent: read, edit, grep, run. Every tool call passes your approval policy (auto, prompt, or deny), and every edit is checkpointed for rollback. The human owns the gate.

Crews, not just copilots

Observe any agent team on your machine, spawn teammates into native panes, or orchestrate a whole crew yourself: task board, mailboxes, transcripts, all in the terminal.

Speaks every protocol

Kitty graphics and keyboard, OSC 52 clipboard, focus reporting, desktop notifications from TUIs, SSH sessions with a remote file tree. The modern terminal canon, implemented.

Yours to shape

Token-driven themes with one calm accent, a theme generated from any image, every shortcut rebindable, plugins with a marketplace. One TOML file under it all.

Not a mockup

The real thing, photographed.

The whole app, one unedited frame: the workspace rail with unread badges, the tab strip, the notification bell, the build stamp in the status bar. In the pane, Novalis runs npm run build on this very website, with the site's own git history above it.

A full Novalis window: workspace rail with unread badges, a tab, and a pane showing the site's git log followed by the Astro build with a green route tree, eleven pages built.
The whole ship, photographed while it builds novalis.run · 2026-07-17.

Agent crews

One agent is a copilot.
Novalis carries a crew.

Teams of agents show up as a living part of the terminal: a team tree in the sidebar, a task board, a transcript per teammate. Every teammate works in a real pane you can scroll, search, and interrupt.

  • Observe. Any agent team on your machine lights up automatically.
  • Spawn. Teammates land in native splits, tabs, or workspaces.
  • Orchestrate. Run the whole crew natively: an LLM lead, or you as the lead.
Agent teams in the docs →

The cockpit protocol

A terminal other
agents can fly.

Novalis is itself an MCP server: 38 tools over one socket. Your agent opens tabs, splits panes, reads scrollback, waits for output, even spawns other agent panes. It rides the same intent pipeline your keystrokes use. Nothing simulated, everything visible.

open_tabsplit_paneread_panelist_blockswait_for_outputwait_for_idlecreate_workspacespawn_agent_pane+30 more
▶ Watch the flight recorder

“The window is the API.”

The MCP surface rides the same intent pipeline as your keystrokes: an agent splitting a pane runs exactly the code your ⌘D does. Everything an agent does is visible, in real panes, in real blocks, behind the same approval gate.

The craft

The engine has a name.

A thousand terminals exist. This is the part you can't bolt on: under the app sits libnovalis, a terminal engine you could hold in one hand. The grid, the parser, the PTYs, the protocol brain. The app is a shell over a library, and the library is honest work.

0frames drawn while idle
1binary. no webview inside
10klines of scrollback, block-indexed

The seed of a browser build lives in the tree too. One day this page's demo will be the real engine, compiled to WASM, parsing real bytes.

gridalacritty-grade VTE on a battle-tested model
osc_interceptor7 · 52 · 99 · 133 read at the byte layer
kittygraphics + keyboard protocols
tty_poolwarm PTYs, instant new panes
block_trackerprompts and outputs marked as they stream
cursor · glyphsper-glyph OS font fallback, color emoji

Settings & drive

One file.
The whole ship.

The Settings window is generated from the same schema that validates the TOML, so every toggle you see is a key you can set by hand. Writes are atomic. Secrets never touch the file: provider keys live in the OS keychain.

  • Schema-driven. One source of truth for UI and file.
  • Sync, optionally. Push and pull over an open protocol, to a server you can run yourself.
  • Kill switches everywhere. Every animation and subsystem has an off.
The config reference →

Theme from image

Paint your terminal with a painting.

Feed Novalis any picture and it extracts a palette and derives a full theme: grid colors, chrome, the lot. A Romantic moonrise makes a surprisingly good terminal. This ships today.

In the hangar

Built in the open. Watch the logbook.

Session share

Hand a live session to a teammate: same grid, same blocks, read-only or co-driving. The relay layer already streams; the viewer is being finished.

The phone companion

The ringing rail should follow you out of the room. Answer a call, approve an agent's next step, and read the pane from your phone.

Self-update

Nightly builds already carry stamps and a checker. Signed automatic updates land with the 1.0 release.

Progress is public in the changelog, dated and stamped. No vaporware, no "coming soon" that never comes.

Flown by hand

Hands stay on the keys.

Every action has a chord and every chord is rebindable; a shortcut recorder lives in Settings. A few of the defaults:

⌘Dsplit right
⌘⇧Dsplit down
⌘⇧Lstart agent
⌘Lask AI
⌘Pcommand palette
⌥↑previous block
⌘⇧Bbookmark block
⌘⇧Ibroadcast input
⌘⇧Enterzoom pane
⌘⌥Tteam sidebar
⌘⇧Uanswer the call
⌘Kclear

The website has one too. Press ⌘K.

Questions

Fair questions.

Do I need an account?

No. No account, no sign-up, nothing to log into. Provider keys live in your OS keychain and state lives in a local SQLite file you can open.

Is Novalis open source?

The protocols already are: the Novalis Drive Protocol is a published spec with a reference server, and the MCP surface is documented. The licensing decision for the app itself lands with 1.0, in the open, in the changelog.

What platforms does it run on?

macOS today, Apple Silicon and Intel. The engine is built on wgpu (Metal, DX12, Vulkan); Linux and Windows builds land with the public release.

Which agents work with it?

Any CLI agent runs in it like any terminal. Beyond that: agent teams are observed and orchestrated natively, and Novalis is itself an MCP server, so any MCP-speaking agent can drive the window from outside.

Why is it fast?

One pure-Rust binary drawing straight to the GPU (Metal, DX12, Vulkan), repaint-driven rather than polled, with a warm PTY pool. An idle terminal draws zero frames; a busy one streams without dropping.

When can I get it?

It's in private beta, built nightly and flown daily by its makers. Public release lands with 1.0, Homebrew cask and signed builds included. The changelog is the honest countdown.

The name

Why “Novalis”?

The Novalis app icon: a flat starfighter on a cream squircle

The hovercraft

In The Matrix, the Novalis is one of the ships of the human fleet. A terminal is the same thing: the small, fast vessel you take into the machine world, with a crew you trust.

The blue flower mark: six petals around a terminal prompt

The poet

Novalis (1772–1801) invented the blaue Blume, the blue flower of Romanticism, a symbol of the longing that keeps you searching. Ours grows a prompt at its center.

The night

The palette comes straight from the ship's mark: hull navy, engine orange, amber sun, candle cream. Feed the theme engine any painting and it will dress the terminal to match.

cd ~„Wohin gehen wir denn? Immer nach Hause."Where are we going? Always home. (Novalis, 1800)

Boarding is limited.

Novalis is in private beta: built nightly, flown daily by its makers. Public release lands with 1.0, Homebrew cask and signed builds included.

macOS (Apple Silicon & Intel) today · Linux and Windows with the public release