Releases
Latest release: v0.3.4 · 2026-08-30. These links always point at the newest build.
macOS
- Apple Silicon .dmg (160 MB) — M-series Macs.
- Intel .dmg (166 MB) — Intel Macs.
-
Homebrew:
brew tap nodeterm/tap && brew install --cask nodeterm
Linux (x64)
- AppImage (175 MB) —
portable, auto-updates.
chmod +xand run. - .deb (134 MB) — Debian/Ubuntu. Updates are manual: this page always serves the newest build.
Windows (x64) beta
Early support: the installer is unsigned (SmartScreen will ask — "More info → Run anyway"), updates are manual, and session continuity across restarts is still landing. Please report what breaks.
- Installer .exe (137 MB) — per-user NSIS setup.
- Portable .zip (191 MB) — unzip and run, no install.
Version history
v0.3.4 2026-08-30
Changes since v0.3.3
- fix(main): handle child-stdin EPIPE as the async error event it is
- fix(editor): adapt Monaco worker imports to the 0.56 exports map
- chore(deps): bump the production-minor-patch group across 1 directory with 3 updates
- feat(canvas-control): a help verb, answered by the shim itself
- feat(canvas-control): --model on the open verbs, per-role model in spawn-team
- feat(trigger): shared schema + strict validation + machine-local arm store (#493 phase 1)
- feat(md-ux): one-shot force-ON migration for openMarkdownPreview
- fix(kanban): filter disabled agents in New session menu
- feat(md-ux): default openMarkdownPreview to ON (follow-up to #496)
- chore(deps-dev): bump the dev-dependencies group across 1 directory with 3 updates
- feat(canvas): per-burst wheel-zoom cap + zoom speed setting
- docs: fix dictation shortcut in alt text and remove duplicated feature bullet
node-terminal_0.3.4_amd64.deb (134 MB) · nodeterm-0.3.4-arm64.dmg (160 MB) · nodeterm-0.3.4.AppImage (175 MB) · nodeterm-0.3.4.dmg (166 MB) · nodeterm-Setup-0.3.4.exe (137 MB)
v0.3.3 2026-08-28
Changes since v0.3.2
- feat(md-ux): open Markdown in preview (opt-in) + one-shot Explorer pin hint
- fix(messaging): one-round-trip SSH pane probe + honest targetPaneUnreadable refusal
- fix(terminal): flag a warm-reattached session whose cwd was deleted, with an explicit restart
- fix(hooks): self-heal stale hook endpoints for canvas-control and context-link (#445)
- fix(messaging): deliver the envelope via paste-buffer -p — tmux >= 3.7 mangles a JS-composed frame
- fix(canvas): resolve node creation against the live active project, not a render closure (#443)
- feat(projects): say what closing a project parks, offer to end its sessions (#442)
- fix(ssh): resolve remote tmux beyond the exec channel's PATH, degrade readably when absent
- ci(release): ship Windows as an unsigned beta on every version tag (#454)
- fix(canvas): keep browser/web node pages alive across project switches
- test: fresh mkdtemp userDataDir in the two fakes that still used a /tmp literal
- feat(server): managed Claude accounts on the Server Edition
- feat(tmux): opt-in lead-pane width for Claude Code agent teams (#119)
- fix(accounts): stop the shared tmux server leaking a managed account into other sessions
- fix(ssh): honor IdentityAgent SSH_AUTH_SOCK despite the app-private agent (#427)
- feat(settings): UI scale for high-DPI displays (#299)
- feat: add uninstall script for a clean trial/removal (#347)
- feat(usage): Switch account action in the usage popover (issue #420)
- fix(relay): honest pty.kill errors + a real pty.destroy so the phone can end a session
- fix(terminal): cut propagation on suppressed middle clicks — preventDefault had nothing to cancel
- fix(kanban): make OSC 8 + URL links clickable in the card modal
- feat: configure terminal word separators
- feat(terminal): open OSC 8 hyperlinks with Cmd/Ctrl+click
- fix(renderer): survive a method-less localStorage global
- feat(window): reflect the active session in the native window title (opt-in)
- ci: retrigger (windows remote-atomic-write real-shell timeout flake)
- chore(repo): pin the Node version for contributors with .nvmrc
- fix(hooks): perm-wait branch is claude-only at build time, not env-gated
- feat(agents): codex subagent visualization via native SubagentStart/Stop hooks
- feat(canvas): snap nodes into layout zones — v1 of #394 (keyboard + menu)
- fix(canvas): keep subagent cards across a parent unmount (project switch)
- feat(keybindings): node.maximize command — Cmd+Shift+Enter maximize/restore
- refactor(canvas): move the maximize toggle into the right-hand header group
- feat(canvas): maximize a node to fill the viewport (resize + reflow)
- fix(hooks): one token resolver for every sh client, so a pinned endpoint stops stranding a node
- feat(kanban): resizable + maximizable card modal that remembers its size (#389) (#392)
- fix(log): survive a revoked stdout/stderr instead of crashing the main process
- fix(projects): let an explicit "Open folder…" recover an unavailable project
- feat(settings): opt-in toggle for the resume card (default off)
- fix(relay): surface the phone's approval prompt again — no device could ever be pinned (#372)
- docs(hooks): scope the #195 claim to a defense-in-depth follow-up
- fix(packaging): hand-pack the macOS .icns — wrong-sized frames painted rainbow noise in the app launcher
- debug(glyphgrid): make an atlas reset reproducible on demand
- fix(glyphgrid): snap cell origins to whole device pixels
- fix(keybindings): off-mac Ctrl+W reaches the shell while a terminal has focus (#383)
- fix(breadcrumbs): close the review findings — one framing implementation, honest Dock arrows, wiring pins
- fix(terminal): registry chords xterm would consume now bubble to the dispatcher
- feat(keybindings): migrate the focus-mode chord to the registry (view.focusMode)
- test(macos): make the entitlement guard an allowlist, not a snapshot
- fix(macos): drop allow-dyld-environment-variables from production entitlements
- test: pin the directional-focus guards by mutation
- feat(keybindings): directional node focus with Cmd+Arrow
- fix: address final review findings — commitActiveToStore, armForColdOpen, target permission mode, testable reopen planner, ShortcutsSection filter
- feat: wire Cmd+Shift+T to reopen the last closed project/node batch
- feat: register app.reopenLastClosed (Cmd+Shift+T)
- feat: add node snapshot/recreate for reopen-last-closed
- docs(agents): teach the codex-sandbox transport error in both agent-facing bodies
- feat(hooks): hook server listens on a unix domain socket beside loopback TCP
- fix(shims): under a sandboxed Codex, name the sandbox instead of "nodeterm unreachable"
- feat: add in-memory reopen-history stack
- …and 240 more commits
node-terminal_0.3.3_amd64.deb (133 MB) · nodeterm-0.3.3-arm64.dmg (158 MB) · nodeterm-0.3.3.AppImage (173 MB) · nodeterm-0.3.3.dmg (163 MB) · nodeterm-Setup-0.3.3.exe (133 MB)
v0.3.2 2026-08-17
Changes since v0.3.0
- ci(release): caffeinate npm ci and the tmux build on the mac runner
- feat(canvas): tidy-canvas action to grid-pack all top-level nodes
- fix(pairing): make the revoke copy true, and say when the phone loses Pro
- fix(license): time out a reply whose BODY never arrives
- fix(license): tell the user what the RELEASE did, and nothing false about the license
- docs(CLAUDE): reconcile with current code — ~30 stale claims from the line-by-line audit
- fix(pairing): revoke a legacy device's row too, and stop claiming it cannot exist
- fix(pairing): removing a device now revokes its Pro, and admits when it cannot
- docs(CLAUDE): keep the canvas-control skill text in sync with behaviour, same PR
- feat(pairing): remember the phone's relay device id so a removal can name it
- docs(agents): the send verb's help says a busy target is QUEUED, not refused
- feat(settings): show the license key, the device count and a release action
- fix(license): a 2xx we could not read is an error, never "0 devices"
- test(license): pin the release merge — counts move, key and source do not
- feat(license): token-authorized detail + release-others across the bridge
- fix(notch): the panel ranks sessions, it does not race them
- docs(css): the polish header carries the terminal-ancestor animation rule
- fix(logs): renderer field traces keep their own [tag] — triage by chip, not by grep
- fix(inbox): retain newest per-node done + unresolved ask past the 50-event cap (P2-7)
- feat(ui): polish pass — enter animations for every shared shell + quiet scrollbars
- feat(settings): live debug log panel — a redacted in-memory ring behind a toggle
- feat(canvas): user-facing "Spawn a team…" — a conductor node, not new model plumbing
- fix(hooks): the fallback walks past dead sibling tunnels to a live local endpoint
- fix(usage): keep the phone's usage mirror fresh on a backgrounded desktop
- fix(push): a paired phone no longer silences every SSH-only one, and ts says ms
- fix(sticky): harden the verb against the review's confirmed findings
- fix(hooks): move the hook payload off curl's argv (temp file, not --data-urlencode "payload=$payload")
- feat(canvas): sticky verb — agents write into notes, notes render markdown
- fix(notch): the capsule grows left-only — no more covering menu-bar status items
- fix(usage): one threshold function + the percent-mode setting reaches every context surface
- fix(terminal): truecolor end-to-end — COLORTERM + tmux RGB terminal-features
- test: kill the parallel-execution flake at its mechanism, not its symptom
- fix(window): leave fullscreen before hide-on-close — no more stranded black Space
- feat(browser): load local file:// pages instead of googling them
- feat(usage): switch the project's default Claude account from the usage pill
- fix(sidebar): move keyboard focus into a session's terminal on go-to-node
- feat(speech): dictation is optional — an explicit None state, nothing downloads unasked
- fix(agent-hooks): gate before sourcing, drain stdin on bail, swallow sourced stdout
- feat(sidebar): replace the Project/Status pill with text tabs
- fix(menu): restore Reload (⌘R) and Enter Full Screen to the View menu
- feat(sidebar): add an Unread status section, ordered attention → unread → running → idle → unknown
- test(agents): derive the builtin list from BUILTIN_AGENT_IDS (copilot broke #245's hardcoded list)
- test(messaging): the fake agent is cat, not an interactive bash — fixes #241
- fix(terminal): rebuild the renderer when the browser restores a WebGL context
- fix(agents): disable 'Restart agent and shell' on relay sessions with a reason (#223)
- fix(review): worktree root guard, snap-grid bugs, dup Terminal, copilot icon, misc
- fix(agents): custom agents can be the default — and a disabled claude stays un-defaulted
- feat(agents): per-agent launch command override — run claude through your own wrapper
- fix(sidebar): keep 'done' its own status, not attention (#230, user decision)
- fix(models): gate PID termination on agent identity + add SIGTERM grace (#226)
- fix(messaging): wire the sender-facing expiry channel, and drop the unwired forget()
- revert(terminal): restore char-size-quantize (undo 8ea89aaf)
- fix(security): deliver gateway/custom env off-argv via tmux update-environment
- test(messaging): a phone-spawned session is a valid message target, end to end
- fix(security): close the env-oracle IPC pair and quote env expansion by construction
- docs(messaging): record the residual risks in the code, not only in the design
- feat(messaging): deliver-on-idle — a bounded queue with a TTL, and never a silent drop
- feat(terminal): a bounded input buffer during wake — nothing splices into the resume line
- fix(agents): thread pane ownership through the kanban modal + pin the fresh-gate
- fix(agents): prove pane ownership at runtime — a project's grant cannot reach a pane it did not spawn
- …and 195 more commits
node-terminal_0.3.2_amd64.deb (115 MB) · nodeterm-0.3.2-arm64.dmg (141 MB) · nodeterm-0.3.2.AppImage (148 MB) · nodeterm-0.3.2.dmg (146 MB)
v0.3.0 2026-08-12
Changes since v0.2.47
- feat(tmux): build the bundled tmux with utf8proc (correct emoji widths)
- feat(tmux): bundle a static tmux in the macOS app as the last-resort fallback
node-terminal_0.3.0_amd64.deb (116 MB) · nodeterm-0.3.0-arm64.dmg (141 MB) · nodeterm-0.3.0.AppImage (148 MB) · nodeterm-0.3.0.dmg (146 MB)
v0.2.47 2026-08-12
Changes since v0.2.46
- fix(core): the panel reads phys_footprint on macOS, not ps's rss
- fix(terminal): age the working park snapshot; correct the relay claim (#126)
- docs(session-memory): §10 — record the second-device measurements (items 5 partial, 6 re-verified)
- fix(terminal): snapshot agent state at park time; review fixes (#126)
- test(core): darwin-gated behavioural guard — the default reader may never reap on bytes
- fix(terminal): gate the offscreen release on live work too (#126)
- fix(terminal): never park-kill a working agent on a plain shell (#126)
node-terminal_0.2.47_amd64.deb (116 MB) · nodeterm-0.2.47-arm64.dmg (140 MB) · nodeterm-0.2.47.AppImage (148 MB) · nodeterm-0.2.47.dmg (145 MB)
v0.2.46 2026-08-12
Changes since v0.2.45
- fix(core): the reaper must not cull on a byte watermark on macOS either
- docs: parseVmStat verified on a real Mac; sharpen why darwin stays silent
- fix(core): a failed vm_stat is no signal, not a fall back to os.freemem()
- fix(core): read macOS memory from vm_stat — os.freemem() reads ~0 there
- fix(pairing): record hostDeviceId on entitled relay mints too
- fix(ui): restore the usage pill — the shell is SHARED, not the resource pill's
- fix(ui): the resource pill is an icon at rest, and sits left of usage
- docs: renumber the checklist, widen two claims, and file the sidebar gap
- test(core): the service's remote fixtures carry a socket fence
- fix(ui): the panel says whose memory it is, and the confirm says the node goes too
- test(canvas): pin the fit-view chrome opt-in and the panel's socket fan-out
- fix(kill): the both-sockets fan-out is the panel's, not everyone's
- fix(core): the SSH sweep must tell a broken tmux from an idle host
- docs: say what the kill actually covers, and correct three overstatements
- test(ssh): pin that killSessions runs every socket, every id, best-effort
- fix(core): a kill by NAME must try every socket that name could be on
- docs: session memory pill + panel
- fix(ui): the panel's kill must reach the machine it is showing
- fix(ui): dismiss the session-memory panel on an outside click
- feat(ui): session memory panel with travel and kill
- test(ui): pin that the pill never runs the full sweep; one obstacle rect
- feat(ui): system-resource pill beside the usage pill
- feat(renderer): session-memory store, polled locally and on demand over SSH
- feat(renderer): resolve session rows to titles, projects and orphans
- feat(bridge): real sessionMemory namespace for the Server Edition
- test(server): pin the SSH refusal end to end, and the index load it needs
- fix(core): pin the coalescing key, and refuse SSH scopes on the server too
- fix(core): an SSH project is a remote scope while DISCONNECTED too
- feat(core): session-memory RPC, booted by both shells
- test(core): do not assert /proc/meminfo exists on the test host
- fix(core): check marker ORDER in the remote session-memory parse
- feat(core): SSH leg for session memory, one sh round trip
- fix(core): anchor the no-server discriminator to tmux's own connect message
- fix(core): read VmRSS, route ps through the seam, fail when no socket answered
- feat(core): assemble the local session-memory report
- feat(core): process-table reader and per-pane tree rollup
node-terminal_0.2.46_amd64.deb (116 MB) · nodeterm-0.2.46-arm64.dmg (140 MB) · nodeterm-0.2.46.AppImage (148 MB) · nodeterm-0.2.46.dmg (145 MB)
v0.2.45 2026-08-11
Changes since v0.2.44
- fix(pty): patch node-pty's darwin fd leak locally (microsoft/node-pty#950)
node-terminal_0.2.45_amd64.deb (116 MB) · nodeterm-0.2.45-arm64.dmg (140 MB) · nodeterm-0.2.45.AppImage (148 MB) · nodeterm-0.2.45.dmg (145 MB)
v0.2.44 2026-08-11
Changes since v0.2.43
- fix(pty): run the device pre-flight before the shadow swap-out, and pin its tests
- feat(pairing): relay the phone's priorDeviceToken into the relay-device mint
- docs(pty): record why the fail-fast needs no retry backoff
- fix(pty): refuse spawns at the device ceiling before node-pty leaks another
- fix(pty): review fixes — real sweep allowance, safer fix handler, honest dismissal
- fix(push): a Live Activity can no longer be left stuck on "Working"
- feat(pty): warn before kern.tty.ptmx_max, and offer to raise it
- fix(renderer): never defer a viewer release for a node that cannot hibernate yet
- fix(renderer): final wave — one watched predicate, remote at plan time, hibernate before release
- fix(relay): pty.attach says whether it had to CREATE the session
- fix(remote,pty): pin kill→dropStream adjacency; correct the %output-drop comments
- fix(renderer): a SessionStart disproves the hibernated flag
- fix(renderer): hibernation review round 1 — the second dismiss path, stale verdicts, self-heal
- test(pty): pin the shared client's attach log and the relay-path premise
- feat(renderer): opt-in agent hibernation — exit idle offscreen CLIs, resume on view
- feat(pty): ptyShadowClients kill switch + swap logging
- refactor(renderer): hibernate registry beside the restart one
- fix(renderer): refuse a non-positive hibernation idle window
- feat(renderer): hibernation policy + eco settings + status flags
- feat(pty): background writes into released sessions, no painter respawn
- refactor(renderer): split agent restart into exit + resume phases (behavior pinned)
- fix(pty): subtract a shadow from tmux's client COUNT, never force detached
- fix(pty): keep shadowed sessions cullable, and refuse what a shadow cannot reach
- feat(pty): control-mode shadows for released sessions
- fix(core): silence the host memory leg on darwin (freemem lies there)
- fix(pty): refuse multi-line control-mode commands
- fix(webgl): queue the pressure lever's releases through the drain
- feat(pty): control-mode client over pipes — zero pty devices
- fix(pty): only close a control-mode block on its own ts+num
- feat: memory-pressure responder chain (webgl + parks + early reaper sweep)
- feat(pty): tmux control-mode protocol codec
- docs: tmux control-mode shadow-clients plan
- fix(workspace): tmp hygiene parity — cleanup-on-failure + stale-tmp sweep
- feat(core): two-signal memory-pressure monitor
- docs(renderer): record collapsed-node and respawn semantics of offscreen dispose
- fix(renderer): ask the SESSION whether a node's core is remote, not the node
- fix(stores): unique per-call tmp names for atomic writers (#107)
- fix(renderer): make the offscreen visibility observer outlive the dispose it reverses
- feat(pty): idle-reap the client PTYs of sessions nobody is attached to
- feat(renderer): dispose offscreen terminals in place after 10 min; reattach on approach
- fix(pairing): serialize agent.json and authorized_keys mutations (#106)
- fix(pty): name the machine pty-device limit in the spawn failure
- feat(renderer): offscreen-dispose policy + offscreenTerminalMinutes setting
- fix(pairing): warn beside the QR when a dev build makes it LAN-only
- fix(renderer): identify the restore echo by URL, not by a flag against a moving target
- fix(renderer): never discard an audible page; keep a reveal from dirtying the workspace
- refactor(renderer): one shared hidden-discard hook, with its own coverage
- feat(renderer): browser Memory Saver — discard hidden webviews, restore from URL
node-terminal_0.2.44_amd64.deb (116 MB) · nodeterm-0.2.44-arm64.dmg (140 MB) · nodeterm-0.2.44.AppImage (148 MB) · nodeterm-0.2.44.dmg (145 MB)
v0.2.43 2026-08-10
Changes since v0.2.42
- fix(glyphgrid): do not revive a context another handler has already disposed
- fix(glyphgrid): notice when the atlas page dies with the GPU
- fix(glyphgrid): re-arm the drift rebuild on every fresh cell epoch
- fix(glyphgrid): read the context back after a reconcile that may have disposed it
- fix(glyphgrid): clamp the shared camera, so a stored zoom of 0 cannot blank the board
- fix(canvas-control): answer an agent from ITS project's canvas, not the active one
- fix(speech): free whisper before quit — an in-flight transcribe was aborting the app
- fix(workspace-store): cache the raw project.json bytes for self-write detection
- fix(canvas): never mark edits clean that raced an in-flight save
- fix(canvas): make in-place project reload actually reload
- feat(workspace): tell the user when a corrupt index was backed up
- fix(canvas): never commit one project's canvas under another project's id
- fix(main): auto-reload the window after a renderer crash
- fix(main): cap remote subagent-tail reads at 1MB per tick, byte-safe via base64
- fix(renderer): evict parks after the flush, not mid-switch
- feat(claude): mint a node's session id instead of only learning it
- feat(renderer): LRU count cap (12) on parked terminals
- fix(core): cap subagent-tail reads at 1MB per tick, matching context-tail
node-terminal_0.2.43_amd64.deb (116 MB) · nodeterm-0.2.43-arm64.dmg (140 MB) · nodeterm-0.2.43.AppImage (148 MB) · nodeterm-0.2.43.dmg (145 MB)
v0.2.42 2026-08-10
Changes since v0.2.41
- fix(workspace): serialize saves, unique tmp files, and empty-write guards
- fix(pairing): report 'dev' relay status — an unpackaged build is not 'off'
- feat(phone): advertise relay identity for late adoption; surface pairing relay result
- feat(phone): default phoneAccessEnabled on
- fix(pairing): LAN-only pairings say so — QR hint, toggle-flip regeneration
- feat(terminal): no copy pill for an agent that reports its own copies
- refactor(terminal): float the copy pill over the terminal, not in the header
- debug(glyphgrid): actually call the cell readout
- debug(glyphgrid): make the cell readout answer instead of throwing
- debug(glyphgrid): expose the cells a grid is actually drawn with
- fix(glyphgrid): rebuild the atlas when its cell disagrees with a terminal's
- docs(agents): correct four false claims, and retire the gemini "resume replay" story
- fix(agents): read the brand-logo map through Object.hasOwn, and correct two stale comments
- fix(agents): pin the claude-transcript gates, and stop the tooltip promising a search that is off
- chore(fixtures): reduce the captured codex and gemini transcripts to what the tests read
- fix(gemini): stop the default permission mode auto-approving gemini's edits
- feat(push): read SSH-possession push grants off the connected hosts
- fix(hooks): let a session self-heal onto the live SSH endpoint file
- fix(terminal): count the copied body, not the newline stripped from it
- docs(gemini): the gemini integration, its hook set, and the codex approval mapping
- feat(agents): gemini and opencode pulse their brand mark while working
- fix(agents): make codex's "ask each time" actually ask
- feat(agents): start gemini and codex sessions in the chosen permission mode
- fix(agents): make the session-name sweep's read gate core's own default
- docs(ssh): record that the resync does not repair across an app restart
- fix(agents): a rescue done that moved no badge fires no completion alert either
- perf(ssh): skip the host session listing when nothing is working, and ask decideFromPane directly
- fix(ssh): the reconnect resync reads a 64 KB transcript tail, not 5 MB
- feat(gemini): adopt gemini's own session title, and split reading a title from renaming one
- feat(canvas): "Zoom to 100%" in the command palette
- docs(ssh): design + plan for reconnect agent-state resync
- fix(kanban): flip the "+ New session" menu up when it would fall off-screen (#100)
- fix(ssh): fire the tunnel-verified hook after the entry is written, so the resync has a remote $HOME
- fix(ssh): resync nodes the host is running, not only the ones still attached
- fix(agents): stop the codex/gemini meter and find bar reading claude's transcript
- fix(glyphgrid): stop mip-blurring text at a zoom that is barely under 1
- feat(ssh): ask the host which nodeterm tmux sessions it runs
- feat(kanban): copy receipt + selection hint in the card modal terminal
- feat(agents): fill the context meter for codex and gemini from their own transcripts
- fix(glyphgrid): the font-weight setting reaches the shared renderer
- feat(terminal): copy receipt + one-time selection hint on the canvas node
- fix(terminal): suppress the Copied pill when the clipboard toast fired first
- feat(terminal): useCopyFeedback hook (drag + OSC 52 signals)
- feat(terminal): pure copy-feedback decision module
- fix(ssh): a throwing tunnel-verified hook can no longer fail the connect
- feat(ssh): resync working agents when a reconnect re-verifies the hook tunnel
- fix(ssh): one node's failure is undecided for that node, not a project-wide abort
- docs(gemini): correct the comments the restart-target change made stale
- feat(ssh): resync a project's working agents against the host
- feat(mirror): expose the currently-working nodes for the reconnect resync
- feat(gemini): allow the in-place restart-and-resume for gemini nodes
- fix(ssh): an untrackable tool_use must not read as a finished turn
- feat(ssh): pure decision for whether a remote node is still working
- refactor(agents): move isShellCommand into shared so main can ask the same question
- fix(gemini): a node waiting for permission no longer shows RUNNING
- feat(grok): the RUNNING indicator is the brand mark breathing, not a critter
- fix(grok): ship the official mark, inlined so it follows the theme
- fix(lib): write the NUL separators as escapes, not raw bytes
- feat(server): make Context Link work in the Server Edition (#93)
- docs(grok): record the awaitingInput question main's codex fix raises
- …and 26 more commits
node-terminal_0.2.42_amd64.deb (116 MB) · nodeterm-0.2.42-arm64.dmg (140 MB) · nodeterm-0.2.42.AppImage (148 MB) · nodeterm-0.2.42.dmg (145 MB)
Older versions and full details live on GitHub Releases .