Skip to content

v0.4.4

Latest

Choose a tag to compare

@github-actions github-actions released this 17 Oct 23:38
· 149 commits to main since this release
7c38c5e

Highlights

Windows is a real target now — as an unsigned beta, and that word is doing work. The
session-host phase landed, so the whole core experience works there: agent sessions and their
hooks, managed Claude and Codex accounts, native SSH (port and agent forwarding, ProxyCommand,
Pageant, ssh.exe), live links and co-attach, the phone relay, dev tools, run configurations, the
tray with background mode, and the session reaper and memory panel. What it does not have is a
code-signing certificate, so Windows SmartScreen will warn on the installer, and the build cannot
update itself: it checks for new versions and shows a card that links to the download, and you run
the new installer over the old one. Your projects and settings are kept, and on 0.4.1+ your running
sessions survive the update. Signing is the next phase.

A simulator is a node now. iOS simulator and Android emulator screens live on the canvas:
click to tap, drag or scroll to swipe, type straight into the device, Home and Lock buttons, and a
device picker that boots one. It is a real stream rather than a screenshot — nothing is encoded
while the screen sits still, about 19–30 fps while it moves, first frame in roughly 0.4 s. A run
node gets a phone button that opens its device inline under the run controls, so a Flutter or React
Native run and the screen it produces are one node; you can pop that screen out into a node of its
own and dock it back. The overflow menu mirrors DeviceHub's own: appearance, text size, location,
status-bar overrides, shake, Face ID, Open URL, push notifications, installs, screenshots — and
what cannot be driven from outside is listed greyed out with the reason instead of quietly
missing. iOS needs macOS and Xcode (the node draws the device through a small Swift helper it
compiles on first use, about three seconds, once per Xcode build); Android virtual devices work on
every desktop OS, Windows included, over the emulator's own interface. Desktop only — a browser or
relay tab says so rather than showing an empty frame.

You can pause a whole project, including the sessions you cannot see. The project menu pauses
every agent in a project, a group frame pauses the ones inside it, and a selection of two or more
pauses just those; the tab carries a count while they are down, and Resume all brings them back.
The sessions that are not on screen are the point — a project you are not looking at has no
terminal mounted, and those are exactly the ones holding a few hundred megabytes each. Nothing is
interrupted: a session mid-turn, or sitting on a question, is marked and pauses the moment its turn
ends cleanly, and Cancel pending pauses drops those marks. A pause exits the agent CLI only; the
session, your shell and your scrollback stay, and resuming continues the conversation where it
stopped. It also tells you the truth about every session it touched — paused, pausing when the turn
ends, unreachable, not eligible, skipped and why — so a batch against a disconnected host never
reports a silent zero. Right after an app restart only a session last seen idle is paused and the
rest are skipped rather than guessed at, because at that moment an idle CLI and one mid-turn look
identical. SSH projects included.

The Cursor Agent CLI is a builtin agent. cursor-agent now sits beside Claude, Codex, Gemini,
Copilot, opencode, Grok and Antigravity in the new-session menus, and it arrived with nearly the
whole harness rather than a bare launch command: the RUNNING and NEEDS YOU badges, the unread dot
and the completion notification, session names synced both ways with the node title, resume after
an app restart or a reboot, the context meter, the ⌘M transcript view, context links to other
agents, subagent cards, canvas control so it can open and arrange nodes itself, permission modes,
model switching and --after dependencies. /loop, /schedule, /cron and Branch stay
Claude-only. Every leg was measured against a real cursor-agent build, and docs/cursor-agent.md
says which facts came from a run and which from reading its bundle.

Updates stop nagging, and Restart finally says something. This is the part macOS users will
notice. Clicking Restart to update used to look like nothing had happened while macOS staged
the update underneath; now the button shows Preparing… and Restarting… and the canvas is saved
before the app quits. Automatic checks download quietly — no progress card and no "You're up to
date" flash unless you asked — a staged update is no longer re-downloaded every six hours, and a
failed background check no longer puts up an error card. When a release carries notes, the card
shows the first few lines. Errors that do reach you are plain sentences instead of net::ERR_*.

The canvas and the board got a wide pass. The ⌘M chat view puts the keyboard straight in its
composer and gives every code block a Copy button. Kanban cards carry the session's own agent
actions, and a held launch now shows on the board with a ▶ to start it. You can choose per project
which agent actions skip the confirm dialog. There are commands for the zone thirds and quarters;
⌘+middle-drag pans past a locked canvas and the lock has its own command; the tab strip and
sessions sidebar auto-scroll while you drag something across them. Sticky notes and group frames
can take a solid backing, the model & context meter can be hidden, rendered Markdown gets a font
family, a size and visible table gridlines — and a running Flutter app can switch between checkouts
without rebuilding. nodeterm://open links from other apps exist behind a flag that is off by
default.

Memory and power got stricter. Minimize nodeterm or send it to the tray and, after two minutes,
its terminals release their GPU contexts and parked emulators — then come back warm when you
return. A window merely covered by another app stays warm; that distinction cost a bug on macOS
and is now explicit. On Windows, session-host scrollback is capped at 10,000 lines, which was the
single biggest memory win there. Keep-awake, which holds off idle sleep while a local agent works,
now lets go below 5% battery and re-holds when you plug in, and on a Mac a critical thermal state
releases it too — latched until things cool down so it cannot flap. An unreadable battery level
changes nothing, so a broken reader can never switch the feature off silently.

New

  • windows — Session-host agent operations (terminate owner, detached write, typed chat input, mode read) [1/13] · #1190 by @eneskirca
  • windows — Session-host observability (reaper, session-memory panel, dev-server ports) [2/13] · #1191 by @eneskirca
  • windows — Live links and co-attach on session-host terminals (watch join, visible keyframe, pane cwd) [3/13] · #1192 by @eneskirca
  • windows — Phone relay parity for relay-only (Windows) hosts [4/13] · #1193 by @eneskirca
  • windows — Agent launch dialect wiring (prepareAgentLaunch / sessionHostExecuteLaunch) [5/13] · #1194 by @eneskirca
  • windows — Quick wins: shell recognition, transcript dir encoding, dropped-path quoting, co-attach mouse [6/13] · #1195 by @eneskirca
  • windows — Windows agent hooks and canvas/context shims for PowerShell-based agents [7/13] · #1196 by @eneskirca
  • windows — Managed accounts on Windows (Codex login and identity, symlinks, Claude link paths) [8/13] · #1197 by @eneskirca
  • windows — Native SSH transport parity (port forward, agent forward, ProxyCommand, Pageant, ssh.exe, download names) [9/13] · #1198 by @eneskirca
  • windows — Dev tools on Windows (run configs, setup scripts, worktree paths, publish fallback, commit agent) [10/13] · #1199 by @eneskirca
  • windows — Desktop polish (title bar, clipboard files, mic consent, reveal label, trackpad routing, wallpaper) [11/13] · #1200 by @eneskirca
  • windows — Windows tray, background mode and notification identity [12/13] · #1201 by @eneskirca
  • windows — Passive update notice for the unsigned Windows beta [13/13] · #1202 by @eneskirca
  • windows — desktop parity with macOS (umbrella for the 13 stacked PRs) · #1189 by @eneskirca
  • windows — P1 - Session-host scrollback and attach-seed cap (biggest Windows-only RAM win) [1/5] · #1205 by @eneskirca
  • windows — P2 - Windows session-host overhead: visibility in the memory panel, cheaper PowerShell probes, Eco on Windows [2/5] · #1206 by @eneskirca
  • windows — P3 - Hidden/tray window releases memory, plus the WebGL budget and app-wide pressure signal [3/5] · #1207 by @eneskirca
  • windows — P4 - Updater and UpdateCard UX (macOS-visible now, platform-neutral) [4/5] · #1208 by @eneskirca
  • windows — P5 - Windows update path: reach stranded 0.4.x, fix the feed, staged-host-aware Prepare, installer silent-mode safety; signing is phase B [5/5] · #1209 by @eneskirca
  • keep-awake — let the machine sleep on low battery or critical heat · #1203 by @eneskirca
  • chat — Copy button on every code block in the ⌘M chat view · #1217 by @probertson
  • chat — focus the composer when the ⌘M chat view opens · #1163 by @probertson
  • settings — Markdown font family and size · #1164 by @probertson
  • auto-scroll the tab strip and sessions sidebar while dragging · #1188 by @ezwep
  • canvas — quick ways past the canvas lock (#1130) · #1167 by @probertson
  • run — switch a running Flutter app between checkouts without rebuilding · #1174 by @Senzaiken
  • kanban — show a held launch on the board and start it with ▶ · #1183 by @gor3a
  • links — nodeterm://open links from other apps, behind a feature flag (off by default) · #1212 by @Senzaiken
  • kanban — agent session actions on cards and the card modal · #1185 by @gor3a
  • canvas — choose per project which agent actions skip the confirm dialog · #1181 by @priitkustala
  • keybindings — commands for the zone thirds and quarters · #1219 by @eneskirca
  • appearance — option to hide the model & context meter · #1222 by @eneskirca
  • appearance — solid backing for sticky notes and group frames · #1231 by @eneskirca
  • node — Simulator node: live iOS and Android screens on the canvas, inline in run nodes · #1177 by @Senzaiken
  • pause — pause a whole project, group or selection — including sessions not on screen · #1184 by @gor3a
  • agents — Cursor Agent CLI as a builtin agent · #1128 by @builtbyd3v

Improved

  • Mobile parity: push eventId (Google Play license source already on main) · #1213 by @eneskirca
  • Codex hook trust: sandbox HOME in tests, repair trust at launch, decoded TOML keys · #1139 by @FabricioCasali

Fixed

  • terminal — size an emoji followed by VS16 as two cells, like the writer does · #1182 by @priitkustala
  • windows — hook process cost, inherited session markers, pane-read budget and Codex trust key · #1180 by @priitkustala
  • style sticky-note tables and honour board --project (#1179) · #1220 by @eneskirca
  • pty — spawn the local tmux client from a stable dir, not the node's cwd · #1221 by @eneskirca
  • pty — let only one DA answer per query reach a shared tmux client · #1223 by @eneskirca
  • launch — claim held launches in the core so two viewers never type one twice · #1224 by @eneskirca
  • integrations — never grandfather a fresh install on a later boot · #1226 by @eneskirca
  • usage — back off after a Codex usage 429 and keep the last good numbers · #1227 by @eneskirca
  • agents — no NEEDS YOU for a codex PermissionRequest under its auto-reviewer · #1228 by @eneskirca
  • canvas — type link notes only into an idle agent at an empty prompt (#1144) · #1229 by @eneskirca
  • browser — settled scroll readout, +N scroll, unknown flags refused, full-page screenshot as one viewport · #1230 by @eneskirca
  • canvas — keep cursor-less new nodes inside the visible canvas · #1233 by @eneskirca
  • usage — tell a Grok 401 that starting a Grok session refreshes credentials · #1234 by @eneskirca
  • terminal — Shift+Cmd click opens a file link after a click elsewhere · #1235 by @eneskirca
  • opencode — load the status plugin on OpenCode 2.x without breaking 1.x · #1239 by @eneskirca
  • windows — derive the Windows pane-probe budget from the probe worker's deadlines · #1225 by @eneskirca
  • codex — identify shared-daemon hooks by their payload thread · #1232 by @eneskirca
  • ssh — route an SSH project's nodes by the project, never spawn them locally · #1238 by @eneskirca
  • hooks — only the pane's foreground claude speaks for a node (#1112, #1153) · #1236 by @eneskirca
  • settings — stop the Team seats section crashing on render · #1243 by @eneskirca
  • terminal — keep xterm viewport scroll in sync across CSI 3 J redraws and renderer swaps · #1242 by @FabricioCasali
  • ssh — fall back to a loopback TCP hook tunnel when the unix socket is unusable · #1246 by @desdelinux
  • chat — Chat view fixes — select and copy message text, keep the view across project switches · #1247 by @danny-acv2
Internal changes (8) — tests, refactors, chores, dependency bumps
  • pty — stop the #914 session-host test timing out on Windows CI [6/6] · #1210 by @eneskirca
  • pin the clock past the strict node-identity cutoff · #1214 by @eneskirca
  • markdown — visible gridlines on rendered tables · #1166 by @probertson
  • readme — make the downloads badge live · #1165 by @eneskirca
  • deps — bump source-map-js from 1.2.1 to 1.2.2 · #1147 by @dependabot[bot]
  • deps-dev — Bump the dev-dependencies group across 1 directory with 5 updates · #1204 by @dependabot[bot]
  • release — describe what v0.4.4 actually ships · #1241 by @eneskirca
  • release — the three features that landed after the v0.4.4 notes were written · #1244 by @eneskirca

New contributors

Full Changelog: v0.4.3...v0.4.4