Repository navigation
v0.4.5
Highlights
Antigravity is a full agent. Google's agy CLI could already be launched; it now carries
nearly the whole harness — context links to other agent nodes, canvas control so it can open and
arrange nodes itself, its own model catalogue read from agy models with switching, permission
modes, the context meter, the ⌘M transcript view, cross-agent handoff and Open recent. Every leg
was measured against real agy 1.2.7 / 1.3.5 sessions and their transcripts, and the context meter
takes the window from the session's own settings rather than guessing one. /loop, /schedule,
/cron and Branch stay Claude-only.
A whiteboard is a node. New view ▸ New whiteboard (also the sidebar +, the Dock and ⌘K) puts
an Excalidraw board on the canvas: double-click to draw in a live editor over the node, a picture of
the board at rest, Present and Copy as image in the header. The drawing lives in a side file beside
the project (.nodeterm/whiteboards/). The save path is the part worth knowing: a board open in two
places refuses the stale write and offers Keep mine instead of silently replacing the other
copy, finishing waits for a save that actually succeeded rather than throwing the last strokes away,
quitting flushes what the 1.5 s autosave had not written yet, and a hosted Viewer or Commenter opens
the board read-only. Not yet run by hand on Windows, Linux, or in a browser tab.
macOS Aerial video wallpapers. Settings → Appearance → Desktop wallpaper gains an Aerials group:
one Shuffle tile per Apple category plus a tile per clip you have downloaded, playing behind the
canvas and the board with Liquid Glass on top. It reads macOS's own aerial files — nothing is
bundled, downloaded or streamed — and the video pauses whenever the window is unfocused or hidden,
because Apple's clips are 4K at 240 fps and cost about 70% of a core while they move. Off by
default; Reduce Motion shows a still frame.
A live link can be read back. A viewer could not scroll at all, and that was structural: tmux
paints the visible screen, and Claude's fullscreen TUI leaves no tmux history to scroll. The viewer
page can now ask for the shared agent's conversation — but only the part written after the link
was created, with the cutoff enforced on the host, not the page. Prompts, assistant text, tool names
with a short argument and plan or question bodies travel; tool results and thinking never do. One
read per viewer at a time, and a revoke made elsewhere now reaches a full link within a minute
instead of five.
An agent can rebuild an exact layout. Canvas control gains resize, place, arrange --gap
and geometry in list, so eight sessions in two tight columns on a vertical monitor is a CLI call
that survives every session being replaced, instead of a drag. Sizes are clamped to each node kind's
own minimum and the reply says when it clamped; a group frame is refused, because a frame sizes
itself to what it holds.
A security audit round — five changes, and one of them had teeth. The relay handshake accepted
low-order X25519 keys, where the shared key is a public constant: a client with no secret completed
the handshake, both people saw the same short code, and a swapped host key in an offer, join code or
QR could read and inject every byte. Those keys are refused everywhere one can enter now. Separately,
a scoped Team Access guest could reach terminals outside its projects because tmux resolves a bare
target by prefix on a miss — every node id that becomes a tmux target is an exact =name target now,
and a node a guest introduces stays pending until its own spawn. The Server Edition's sign-in lockout
could be walked past by holding request bodies back; the loopback hook server refuses browser
requests before it looks at the bearer; the native SSH transport pins the host key type it recorded,
so a MITM holding only one key type is refused rather than quietly trusted; and a live-link Control
lock now lifts itself on a backoff, with the unlock sealed to a per-connection key so a password
cannot be read back out of recorded relay traffic.
Fixes you will meet. Windows terminals run on node-pty's bundled ConPTY, so fullscreen TUIs
scroll properly. Removing a Claude account moves its running sessions to the system account instead
of leaving them logged out mid-session. Local dictation runs on Metal in the packaged macOS app and
ships an AVX2 build of whisper.cpp on Linux x64. Liquid Glass stays readable at every slider
position, and the Dock's add menu stays inside short windows. A relay or team-tab terminal never
starts on the wrong machine, and an agent opened from an SSH project's history or a transfer runs on
the host. Sticky notes, browsers, editors, simulators and the rest get their own default node sizes,
a folder project's canvas can live in app data instead of inside the repo, a session's unread dot
clears when its card opens on the global board, and the Settings debug log panel — which had never
rendered at all — is mounted.
New
- antigravity — full agent parity (context links, canvas control, models, permissions, usage, chat, handoff, recent) · #1215 by @FabricioCasali
- settings — per-kind default node sizes · #1280 by @eneskirca
- settings — per-kind default node sizes · #1261 by @brandonrbridges
- whiteboard node (Excalidraw) — sketch on the canvas · #1283 by @eneskirca
- whiteboard node (Excalidraw) — sketch on the canvas · #1265 by @brandonrbridges
- projects — keep a folder project's canvas in app data (#1145) · #1281 by @eneskirca
- projects — keep a folder project's canvas in app data (#1145) · #1268 by @brandonrbridges
- appearance — macOS Aerial video wallpapers · #1278 by @iceclatterWT
- live-links — viewers read back the agent's conversation since the link was shared · #1294 by @eneskirca
Improved
- Canvas control: arrange --gap, resize, place, and geometry in list (#1288) · #1290 by @eneskirca
- macos — stop idle GPU work, free GPU memory under pressure, and show the GPU process's real footprint (carries #1264) · #1292 by @eneskirca
- macos — stop idle GPU work, free GPU memory under pressure, and show the GPU process's real footprint · #1264 by @brandonrbridges
- Endpoint hardening: browser guard on the hook server, 0700 ~/.nodeterm on SSH hosts, pinned host key type in the native transport · #1296 by @eneskirca
Fixed
- windows — run terminals on node-pty's bundled ConPTY so fullscreen TUIs scroll · #1260 by @eneskirca
- accounts — move running Claude sessions to the system account before removing an account · #1263 by @eneskirca
- speech — ship an AVX2 build of whisper.cpp on Linux x64 and use more threads · #1270 by @eneskirca
- settings — mount the debug log panel, which never rendered · #1255 by @eneskirca
- ssh — agents opened from an SSH project's history or a transfer run on the host · #1266 by @brandonrbridges
- ci — unblock main's quality job (smart-whisper patch step, cursor-usage clock) · #1282 by @eneskirca
- relay and team-tab terminals never start on the wrong core · #1287 by @eneskirca
- dock — keep the add menu inside short windows · #1286 by @builtbyd3v
- glass — readable Liquid Glass at every slider position, clearer Clear · #1285 by @builtbyd3v
- kanban — clear a session's unread dot when its card opens on the global board · #1274 by @RoARanger
- speech — run local dictation on Metal in the packaged macOS app · #1284 by @builtbyd3v
- speech — start smart-whisper's model params from whisper.cpp's defaults · #1279 by @builtbyd3v
- whiteboard — keep the live editor's events out of the canvas node · #1289 by @eneskirca
- share — reopen warning no longer points at a team tab or unshare that cannot give the project back · #1293 by @eneskirca
- server — harden Server Edition sign-in (security audit S1–S8) · #1297 by @eneskirca
- relay — refuse low-order keys, SAS v2, canonical base64; pin SSH host keys from the pairing QR · #1298 by @eneskirca
- live-links — timed lock, sealed unlock, invisible-free names, 1-minute full-link poll · #1299 by @eneskirca
- relay — close what a connected relay peer can reach (audit F1–F4, presence, context) · #1300 by @eneskirca
Internal changes (4) — tests, refactors, chores, dependency bumps
- release — fix the two reasons verify-feed goes red on a healthy release · #1251 by @eneskirca
- one definition for helpers copied across the tree (#1252 follow-up) · #1253 by @eneskirca
- correct three statements about the offline relay session · #1291 by @eneskirca
- fix three timing races that fail CI under load · #1271 by @FabricioCasali
New contributors
- @brandonrbridges made their first contribution in #1266
- @RoARanger made their first contribution in #1274
Full Changelog: v0.4.4...v0.4.5