v0.20.0
The plugin system reaches its 1.0 contract, per-terminal hibernation is removed for good, and project switching becomes near-instant — the largest release since the project opened up, spanning 179 PRs. Most of the surface-level work is a deep terminal-rendering and project-switch reliability pass; underneath it, the plugin and MCP automation surfaces both grow substantially.
Features
Plugin system (1.0 contract)
- Release-ready authoring toolchain:
@daintreehq/plugin-sdkandplugin-testingpackages, aplugin-vitepreset, anddaintree-plugin devhot-reload (#10485, #10494) - Manifest contract frozen for 1.0 —
experimental_views/experimental_mcpServerspromoted to stableviews/mcpServers(#10478, #10495) - Installed plugins run out-of-process in a utility worker with OS-level crash isolation (#10550)
- Fully Promise-returning host API with capability-gated
host.process.spawn,host.fs, andhost.git(#10540, #10543) - Just-in-time consent for high-risk capabilities (shell, fs/git writes, agent input), revoked when a plugin updates (#10551, #10555)
- Plugin-contributed agents are fully launchable and drive the working/waiting/completed state UI (#10574, #10601)
- Plugins can decorate worktree file rows and set live panel-title badges (#10568, #10599)
- Native UI prompts mid-command via
host.showQuickPick/showInputBox/showConfirm(#10549) - Plugin MCP servers get a detail subtab (status, last error, stderr, restart) and auto-restart on secret rotation (#10595, #10628)
- Plugin-provided MCP tools route through consent → audit → rate-limit, re-prompting when a tool's danger tier escalates (#10486, #10535)
MCP server
- Forge write operations over MCP — PR create/merge/comment/edit, issue create/close/label, and PR-review approve/request-changes (#10657, #10658, #10659)
- Terminal/agent exit metadata (exit code, signal, timestamps) so a clean finish is distinguishable from a failure (#10642)
- Parsed pass/fail check results on
terminal.getStatusfrom tsc, ESLint, Vitest, and Jest (#10691) browser.captureScreenshotreturns real image bytes, plus console reads and dev-preview/portal control (#10689, #10692)- Worktree resource lifecycle and a host-pressure resource-profile snapshot over MCP (#10690)
- Per-terminal and fleet arm/disarm, plus
terminal.restart, over MCP tier allowlists (#10687, #10696, #10712)
Agents & presets
- Agent presets carry an optional display title (e.g. "Claude [Z.ai]"), surfaced across the agent button, dropdown, tray, and scope banner (#10740)
- The preset dropdown splits each row — click to launch with that preset, the left gutter sets the worktree default without launching (#10726)
- About Daintree shows the running build architecture (Apple Silicon, Intel, or Rosetta) (#10503)
Performance
Project switching
- Cold switches reveal a themed skeleton in ~150ms instead of freezing on the outgoing project for seconds (#10751, #10760)
- A busy overlay covers slow switches while warm switches stay flash-free, with feedback flipped on before the heavy snapshot/IPC (#10737)
- RAM-scaled warm view cache and workspace-host pool eliminate the evict/respawn churn that froze the main loop when rotating projects (#10760)
- The efficiency profile freezes cached views instead of destroying them, ending cold-start storms on rapid switching (#10748)
- Background projects pause git-status polling, fetches, and PR checks while hidden (#10746)
Terminal & memory
- Faster priority terminal restore via parallel rehydrate, with the on-screen terminal repainting first (#10533, #10534)
- Project hibernation now evicts the cached renderer (~100-500MB) instead of just killing PTYs, while keeping terminals alive (#10796)
- Batched host-log writes and a coalesced worktree-update bus remove multi-second keystroke lag under multi-agent load (#10770)
Bug Fixes
Terminal & rendering
- Removed per-terminal hibernation — backgrounded terminals stay live instead of suspending and resyncing on reveal. This eliminates the recurring agent-TUI corruption (zebra striping, double-spacing, dropped output) across OpenCode, Codex, Gemini, and Claude (#10811)
- Alt-screen TUIs (OpenCode, vim, Gemini CLI) no longer garble on click or reveal — previously only a manual window resize fixed it (#10805)
- Fixed a 60fps WebGL atlas-resync loop that pinned a CPU core and sheared glyphs after a refocus; bumps
@xterm/*to 6.1.0-beta.287 (#10798) - Eliminated DOM-renderer zebra banding for alt-buffer TUIs on HiDPI displays (#10771)
- Hidden streaming agents no longer steal WebGL contexts and drop visible terminals to the slower DOM renderer (#10673)
- Agent terminals no longer return garbled after a project switch-back (#10508, #10637)
- Windows: an invalid ConPTY pid 0 no longer starts process detection or spams warnings (#10791)
Agents
- A crashed agent CLI reports as "exited" instead of getting stuck on "waiting" (#10821)
- Agents no longer stick on "waiting" during long heavy-streaming output (#10666)
- OpenCode resumes its latest session on restart instead of showing a failed-restore banner (#10824, #10825)
- Typing into a backpressure-paused terminal wakes it (#10717)
- Pressing Enter at Claude's workspace-trust prompt no longer spawns a duplicate agent (#10631)
Project views & crash recovery
- The crash-recovery dialog no longer reappears after being resolved on switch-back (#10810)
- A project view that loads the wrong internal page rolls back instead of getting stuck (#10804)
- Fixed the forge status toolbar rendering twice, and a persistent red error line on it, during rapid switching (#10808, #10762)
- Workspace-host OOM crash-loops are detected and surfaced instead of looping silently in "Reconnecting…" (#10733)
Git & forge
git rebase/merge/cherry-pick/revert --continueworks again after the simple-git 3.36 upgrade (#10789)- Background git-fetch auth failures retry with backoff instead of suspending fetches for the whole repo (#10675)
- Commit search matches commit-hash prefixes, not just message text (#10817)
- Self-assigning an issue during worktree creation reflects immediately in the open-issues dropdown (#10537, #10678)
- Stuck mid-rebase/merge worktrees get an inline abort/continue recovery row (#10716)
Security & privacy
- The external MCP API-key
fullToolSurfaceopt-in no longer bypasses the curated allowlist (#10710) - Plugin log output is secret-scrubbed before it reaches the log buffer and console mirror (#10781)
- V8 heap snapshots in the logs dir are auto-pruned, clearing previously unbounded backlogs (#10732)
UI & onboarding
- Creating a custom preset no longer hijacks the agent default, and recipe launches now honor the selected preset (#10730, #10725)
- Custom preset colors no longer wrap the agent icon in a near-white tile on dark themes (#10724)
- Toned down two passive notifications and persisted onboarding dismissals across restarts (#10553, #10554)
- Restored drag-to-grid, drag-to-worktree, and reorder on docked panel chips (#10799)
- Diff-viewer and commit-body wrapping fixes in the dropdowns (#10629, #10719)