This release includes 1 security fix for security teams reviewing exposed deployments.
Topics
ReleasePort's take
Light signalv0.60.1 introduces Multi‑project rail for side‑by‑side workspaces and adds OTP cooldowns to mitigate abuse.
Why it matters: Multi‑project rail enables developers to host several workspaces in one Nimbalyst window with instant switching; the new OTP cooldown closes an identified abuse vector, so adopt the feature now and monitor cooldown behavior.
Summary
AI summaryMulti-project rail adds side‑by‑side workspaces and OTP cooldowns close an abuse vector.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
Multi-project rail lets single Nimbalyst window host several workspaces side-by-side with instant switching. Multi-project rail lets single Nimbalyst window host several workspaces side-by-side with instant switching. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
PromptForUserInput MCP tool collects several inputs via structured-prompt widget with five field types. PromptForUserInput MCP tool collects several inputs via structured-prompt widget with five field types. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Slash skill namespacing introduced consistently with commands (e.g., /excalidraw:excalidraw). Slash skill namespacing introduced consistently with commands (e.g., /excalidraw:excalidraw). Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
list_recent_sessions MCP tool accepts searchField: 'title' | 'content' | 'both' for title-only searches. list_recent_sessions MCP tool accepts searchField: 'title' | 'content' | 'both' for title-only searches. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Voice agent gains "Commit with AI" via propose_commit tool, allowing voice approval/rejection. Voice agent gains "Commit with AI" via propose_commit tool, allowing voice approval/rejection. Source: granite4.1:30b@2026-05-23-audit Confidence: high |
— |
| Feature | Medium |
Show Tool Calls in Chat toggle hides tool-call rows entirely in AI chat when enabled. Show Tool Calls in Chat toggle hides tool-call rows entirely in AI chat when enabled. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Rename AI sessions and set Preferred Agent Language for session names in both Claude Code and other providers. Rename AI sessions and set Preferred Agent Language for session names in both Claude Code and other providers. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Voice agent can run Commit with AI via new propose_commit voice tool and approve/reject by voice. Voice agent can run Commit with AI via new propose_commit voice tool and approve/reject by voice. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Codex parity updates: inline red/green edit cards for file_change, unified slash-command picker, namespaced plugin skills. Codex parity updates: inline red/green edit cards for file_change, unified slash-command picker, namespaced plugin skills. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
MCP servers now run on Electron's bundled Node, enabling MCP features without system-wide Node.js. MCP servers now run on Electron's bundled Node, enabling MCP features without system-wide Node.js. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Tracker `tracker_update` can change the primary type (e.g., task to bug) without losing comments or attachments. Tracker `tracker_update` can change the primary type (e.g., task to bug) without losing comments or attachments. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Markdown anchor links now scroll to in-document headings when clicked. Markdown anchor links now scroll to in-document headings when clicked. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
PDF export metadata writes document title and generates an outline from headings for exported PDFs. PDF export metadata writes document title and generates an outline from headings for exported PDFs. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Peek file diffs from git log commit detail panel with Up/Down navigation and Esc to close. Peek file diffs from git log commit detail panel with Up/Down navigation and Esc to close. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Low |
AI sessions can be renamed and Preferred Agent Language setting steers generated session names. AI sessions can be renamed and Preferred Agent Language setting steers generated session names. Source: granite4.1:30b@2026-05-23-audit Confidence: high |
— |
| Feature | Low |
Show Tool Calls in Chat toggle can hide tool‑call rows entirely while still showing interactive prompts. Show Tool Calls in Chat toggle can hide tool‑call rows entirely while still showing interactive prompts. Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
| Feature | Low |
Codex file_change tool calls render as inline red/green edit cards in the transcript, matching Claude's Edit tool. Codex file_change tool calls render as inline red/green edit cards in the transcript, matching Claude's Edit tool. Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
| Feature | Low |
Unified slash‑command autocomplete and picker work across Claude Code and Codex agents. Unified slash‑command autocomplete and picker work across Claude Code and Codex agents. Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
| Feature | Low |
MCP servers configured with command "node" now use Electron's bundled Node runtime. MCP servers configured with command "node" now use Electron's bundled Node runtime. Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
| Performance | Medium |
Session list refresh is faster; no longer scans full edit history on every refresh, shares concurrent queries. Session list refresh is faster; no longer scans full edit history on every refresh, shares concurrent queries. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Multi-file drag-and-drop moves/copies every selected item with a single summary error dialog if some fail. Multi-file drag-and-drop moves/copies every selected item with a single summary error dialog if some fail. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Frontmatter detection now works on Windows CRLF files checked out with core.autocrlf=true. Frontmatter detection now works on Windows CRLF files checked out with core.autocrlf=true. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Honor .gitignore in nested git repos to prevent OOM during main process directory walking. Honor .gitignore in nested git repos to prevent OOM during main process directory walking. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Custom Claude Code binary path setting now reads correctly instead of always falling back to bundled SDK binary. Custom Claude Code binary path setting now reads correctly instead of always falling back to bundled SDK binary. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Open workspaces are restored after "Restart and Install" auto‑update relaunch. Open workspaces are restored after "Restart and Install" auto‑update relaunch. Source: granite4.1:30b@2026-05-23-audit Confidence: high |
— |
| Bugfix | Medium |
Auto-update error spam suppressed on hourly polls; transient network errors no longer pop toast messages. Auto-update error spam suppressed on hourly polls; transient network errors no longer pop toast messages. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Open workspaces restored after Open workspaces restored after Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Environment Variables setting now user-scoped, reads/writes global ~/.claude/settings.json. Environment Variables setting now user-scoped, reads/writes global ~/.claude/settings.json. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Tray icon now appears on Linux AppImage and Windows builds; previously only macOS showed it. Tray icon now appears on Linux AppImage and Windows builds; previously only macOS showed it. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Claude Chat connection to Claude Opus 4.7 no longer fails due to deprecated temperature setting. Claude Chat connection to Claude Opus 4.7 no longer fails due to deprecated temperature setting. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Ctrl+= zoom now functions on Windows and Linux without Shift; numpad +/– and Shift+= also work. Ctrl+= zoom now functions on Windows and Linux without Shift; numpad +/– and Shift+= also work. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Git status for files in nested repos no longer reports as untracked indefinitely. Git status for files in nested repos no longer reports as untracked indefinitely. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Delete file errors surface to UI with OS-level reason instead of silent logging. Delete file errors surface to UI with OS-level reason instead of silent logging. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Delete file failures display an error dialog with the OS‑level reason rather than logging silently. Delete file failures display an error dialog with the OS‑level reason rather than logging silently. Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
| Bugfix | Low |
Auto‑update hourly polls suppress transient network error toasts; manual checks still show errors. Auto‑update hourly polls suppress transient network error toasts; manual checks still show errors. Source: granite4.1:30b@2026-05-23-audit Confidence: high |
— |
Full changelog
May 13 Release
This release covers everything since v0.59.2: a new multi-project rail, a richer structured-prompt tool for AI agents, Codex parity work, and a long list of fixes across the editor, AI pipeline, and platform support.
New Features
- Multi-project rail. A new Discord-style vertical rail lets a single Nimbalyst window host several workspaces side-by-side, with instant switching. Inactive projects stay warm: AI sessions keep streaming, file watchers keep firing, transcripts keep updating, and tabs/panel layouts are preserved per project.
Cmd/Ctrl+1..9activates the Nth project;Cmd/Ctrl+Shift+Wcloses the active one. Right-click a rail icon for "Open in new window", "Reveal in Finder/Explorer", and "Close project". Enable it under Settings > Advanced > General > "Multi-project Mode". - Show Tool Calls in Chat toggle. A new Agent Features setting (default on) lets you hide tool-call rows in the AI chat entirely, not just collapse them. Interactive prompts (permission requests, plan-mode exits, commit proposals, AskUserQuestion) still appear so you can always respond.
- PromptForUserInput MCP tool. Agents can now collect several inputs at once through a single structured-prompt widget with five field types: multi-select, single-select, reorder, edit-text, and confirm. Voice mode honors a
voiceFriendlyhint and defers to the screen for long drafts or large reorders. - Rename AI sessions, plus Preferred Agent Language. Sessions can now be renamed (right-click an existing session). A new "Preferred Agent Language" setting on the Agent Features panel steers AI-generated session names toward your chosen language for both Claude Code and other providers.
- Voice mode improvements.
- Voice agent can now run "Commit with AI" via a new
propose_commitvoice tool. The same Requesting Commit Proposal widget appears in the transcript and you can approve or reject by voice. - Voice agent can create a coding session on demand; the new session becomes the active linked session automatically.
- "Generate Project Summary" now launches a new agent session in your configured agent (Claude Code, Codex, etc.) instead of requiring an Anthropic API key.
- Voice Mode settings surface microphone permission status with a deep link to System Settings on macOS.
- Voice agent can now run "Commit with AI" via a new
- Codex parity.
- Codex
file_changetool calls now render as inline red/green edit cards in the transcript, matching how Claude'sEdittool already renders. - Codex slash command autocomplete and a unified slash-command picker across Claude Code and Codex.
- Skills and commands written for one agent run in the other; workflow discovery is unified across providers.
- Codex reasoning items map into transcript thinking blocks.
- Codex
- Slash skill namespacing. Plugin skills are now namespaced consistently with commands (e.g.
/excalidraw:excalidraw,/planning:design,/feedback:bug-report) so the inserted command matches what the agent SDK routes. - MCP servers run on Electron's bundled Node. MCP servers configured with
command: "node"now use Electron's bundled Node runtime, so MCP features work out of the box on fresh installs without a system-wide Node.js install. - List recent sessions by title only. The
list_recent_sessionsMCP tool now acceptssearchField: 'title' | 'content' | 'both'so agents can find a session by name even when the search term appears throughout conversations. - Tracker
tracker_updatecan change the primary type. Ataskthat turns out to be abugcan now be reclassified without losing comments, attachments, or session links. - Markdown anchor links scroll to in-document headings. Clicking
[Section](#section)in a Lexical document now scrolls to the matching heading. (#248) - PDF export metadata. Markdown-to-PDF export now writes the document title and generates an outline from headings, so exported files are bookmarked and the title shows in PDF readers.
- Peek file diffs from the git log commit detail. Click a file in a selected commit's detail panel to pin its unified diff in the peek popover; Up/Down steps through files; Esc closes.
Improvements
- Slow startup is visible. A new always-on
[StartupSlow] {phase} took {ms}mslog line is emitted whenever startup phases (PGLite init, project file sync, session index sync, etc.) cross 2 seconds, so beach-ball reports surface a concrete phase. - Lexical 0.44 upgrade. Editor packages are upgraded to Lexical 0.44.0 across the runtime.
- Lexical extension API. Extensions can now ship Lexical editor extensions (custom nodes, transformers, commands, and React UI surfaces) through a new manifest field.
- Codex SDK upgrade. Bundled
@openai/codex-sdkupgraded to 0.128.0; Claude packaged binary resolution hardened so agent sessions stay on bundled or explicit custom binaries. - Session list refresh is faster. The session list no longer scans the full edit history on every refresh, and concurrent refreshes share one query.
Fixed
- Tray icon on Linux and Windows. The system tray entry now appears on Linux AppImage and Windows builds; previously only macOS showed the tray. (#39)
- Multi-file drag-and-drop. Dragging a multi-selection of files in the file tree now moves or copies every selected item, with a single summary error dialog if some fail. Previously only the first file was moved. (#31)
- Claude Chat connection to Claude Opus 4.7. Test Connection (and real chat sends) no longer fail with
temperature is deprecated for this modelon the defaultclaude-opus-4-7model. (#199) - Frontmatter detection on Windows CRLF files. Files checked out with
core.autocrlf=trueare now correctly detected as Tracker items, automations, and other frontmatter-typed documents. (#68) - Ctrl+= zoom on Windows and Linux. Pressing
Ctrl+=(without Shift) now zooms in; numpad+/-andShift+=also work. (#205) - Honor
.gitignorein nested git repos. Workspaces containing nested git repos no longer OOM the main process by walking into ignored directories of the nested repo. (#207) - Git status for files in nested repos. Files committed inside a nested git repo no longer report as untracked indefinitely. (#122)
- Custom Claude Code binary path. The Claude Code path setting in AI Models is now read correctly instead of always falling back to the bundled SDK binary. (#162)
- Auto-update error spam suppressed on hourly polls. Transient network errors (
net::ERR_NAME_NOT_RESOLVED, timeouts, refused connections) during the hourly auto-update check no longer pop a toast; manual "Check for Updates" still surfaces errors and download errors still surface mid-download. (#56) - Restore open workspaces after auto-update relaunch. "Restart and Install" no longer leaves the app with zero workspaces open. (#232)
- Environment Variables setting restored to user scope. The panel reads/writes the global
~/.claude/settings.json, so it no longer appears under the Project tab where it implied workspace-scoped state. (#185) - Delete file errors surface to the UI. When a file delete fails (e.g. non-writable trash folder on Linux), the file tree now opens an error dialog with the OS-level reason instead of silently logging. (#195)
- Commit proposal widget improvements.
- Failures now render an actual error state with the reason; previously every failure (hook rejection, no staged changes, IPC throws) was collapsed into "cancelled". (#202)
- The commit proposal widget reliably appears in the transcript instead of waiting for the user to cancel. (#265)
- Deleted files are now staged alongside additions and modifications in commit proposals.
- Files in the commit proposal are sorted alphabetically within each directory, with subdirectories grouped. (#233)
- Open tabs are no longer lost when switching tasks/sessions/files. A race where the saved tab list was overwritten with an empty list before workspace state had hydrated is fixed. (#169)
- Cross-window session pollution stopped. Streaming sessions in one window no longer produce
Rejecting session ... belongs to /A, not /Bwarnings in sibling windows. - Stream-closed errors during long Claude Code turns reduced. The SDK stdin now stays open across late tool permission requests on multi-result turns (e.g. compaction). (#160)
- Default Claude OAuth subscription traffic. Fresh installs now classify Pro and Max OAuth traffic correctly so it is not silently deprioritized by Anthropic's backend. (#174)
- Show platform-correct keyboard shortcuts. Windows and Linux now show Ctrl+... shortcuts instead of macOS glyphs across menus and the Keyboard Shortcuts dialog. (#149)
- Paste-as-Text is reliable and discoverable.
Cmd/Ctrl+Shift+Vdetection is normalized in the AI input and the shortcut is listed in the Keyboard Shortcuts dialog. - Voice mic stays open after each turn. The 15-second listen window now starts when audio playback drains in your speakers (not when the server finishes streaming); function-call-only turns also wake the mic; a short readiness cue plays when the mic wakes with no audible reply.
tracker_createno longer auto-links the calling AI session. Agents must passlinkSession: true(or calltracker_link_sessionafterward), so sessions don't accumulate unrelated tracker items.- Pasting images on Windows. Pasting an image into a markdown document on Windows no longer fails with a
nim-asset403 due to mixed path separators. - Markdown round-trip fidelity.
- Triple-nested emphasis (e.g.
~~strike *italic **bold** text* inside~~) is preserved on export. - Bold spans containing inline code stay intact through approve-all diff round-trips.
- Sub-bullet diffs with auto-linked URLs no longer duplicate or orphan rows.
- Triple-nested emphasis (e.g.
- Inline diff readability. Near-complete paragraph rewrites fall back to a block-level diff instead of interleaving red/green word fragments; identical opening or closing sentences are peeled off the diff.
- Editor refreshes on AI edits even when the pre-edit event outruns the disk write. Tabs no longer freeze on the pre-edit content while disk has the new bytes.
- Restoring from history on a gitignored file. The editor no longer shows stale content until you reopen the tab.
- Agent-mode conflict dialogs. The dialog caps at viewport height with an internal scroll so header and Close/Resolve buttons stay reachable on short viewports; the dialog also widens to fit conflict file lists.
- Read-only Codex bash commands no longer attribute as edits. A read-only
sed -norcaton a file with uncommitted modifications no longer produces a phantom "edited" row. - Lazy HEIC decoder. Standard PNG/JPEG image attachments no longer pay the HEIC wasm startup cost; HEIC is only decoded when actually needed.
- Tracker items from automation files appear on the board. Files using
automationStatusfrontmatter now show as Tracker rows. (#67) - Legacy plan and decision tracker docs appear on the board. Files saved with the older top-level
planStatus/decisionStatusfrontmatter are restored to the Tracker view. - Tracker "+ Launch Session" uses the workspace's default provider. Codex-only installs no longer hit "Provider claude-code is not enabled for this workspace". (#176)
- Built-in editor file types in extension AI tools. Filesystem-only tools (e.g. automations) no longer fail with "No custom editor registered..." when invoked against a built-in editor's file (e.g. a
.mdfile owned by Lexical). (#217) - Sub-session renames live-update. Renaming a sub-session via right-click updates its title immediately; workstream parent rows also gain inline rename support. (#211)
- Stable left-pane child counts. Adding a child session (e.g. from
/launch-new-session) reveals the new child in the workstream tree without a manual disclosure toggle. - Codex sessions show child output in meta-agent results.
get_session_resultnow extractslastResponse,recentMessages,userPrompts, andoriginalPromptfor Codex sessions, not just Claude. - iOS transcript renders late-turn Codex tool calls. Cross-turn Codex item id reuse no longer drops tool calls; Codex and ACP/Copilot CLI providers now route through their own parsers on mobile.
- Shared mockup viewer rendering. Standalone shared mockup pages bundle the right styles and no longer crash; mockup diff review is re-enabled for
.mockup.htmleditors. - Walkthrough callouts. Wide callouts no longer overflow the viewport edge or point past their target.
- Claude session imports with workspace paths containing spaces or special characters. The import path now matches Claude Code's path encoder, so sessions resolve to the right on-disk directory. (#170)
Security Fixes
- Session‑scoped OTP cooldowns close an abuse vector where users changed phone/email mid‑flow to reset OTP cooldowns
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Track Nimbalyst open source Obsidian, Codex app, and Linear for coding agents
Get notified when new releases ship.
Sign up freeAbout Nimbalyst open source Obsidian, Codex app, and Linear for coding agents
All releases →Related context
Related tools
Beta — feedback welcome: [email protected]