Throwaway Runtimes, Conda Without the Restart
Agents spin up ephemeral runtimes that close when they finish, conda kernels pick up new packages without a restart, and the whole app gets a warm cream theme.
- Agents
- Environments
- Notebook editing
- Desktop

Highlights
- Ephemeral notebooks let agents grab a runtime on demand and throw it away when done
- Conda kernels hot-sync new dependencies without a restart
- Whole-app Cream theme
2.2 is about runtimes you don't have to manage and restarts you don't have to take.
Ephemeral notebooks for agents
Watching agents treat notebooks like their own throwaway sandboxes, nteract introduced ephemeral notebooks. An agent can spin one up on demand, run against it, and it all gets cleaned up when the agent disconnects. If they need to save it, it gets upgraded. No loose Untitled229.ipynb. The notebook lives only in memory, with no file on disk and no leftover state to sweep up. An agent or automated job can grab a runtime, get some work done. It's more like a regular REPL than a document you have to think about saving. Which, well, if you want to keep something you can always save_notebook and it's no longer ephemeral. Just a quick little upgrade.
Conda kernels hot-sync new dependencies
Inline dependency hot-sync now works for conda environments, not just uv. Add a package to a running conda kernel and the environment syncs in place, no restart, no lost variables. Environment resolution itself went offline-first this release, so a flaky network at launch time is far less likely to block you.
A whole-app Cream theme
In service to our super-secret data explorer we've added a new warm color theme that covers the entire app. New CodeMirror themes and swapped Prism for Lezer so all our static highlighting uses the same CodeMirror setup. Find it in settings to try out the dark and light modes.
The less ceremony there is in getting to experimentation, the more you can experiment.
Full technical changelog
All 89 changes in 2.2
Features
- enable conda hot-sync for inline dependencies (#1661) (runtimed)(0627c33)
- return per-cell outputs from run_all_cells (#1662) (runt-mcp)(e1eb16c)
- content-aware multi-cell renderer with dev preview (#1665) (mcp-app)(7221be4)
- add 'kernel' alias for 'runtime' in create_notebook (#1670) (runt-mcp)(99d8797)
- ephemeral notebooks for MCP agents (#1669) (runtimed)(7ab1efb)
- blob store GC for orphaned blobs (#1672) (runtimed)(8391471)
- add nteract Codex and Claude plugin configs (#1666) (plugins)(521d0fc)
- dynamic pool size configuration via settings doc (#1694) (runtimed)(b7732f5)
- offline-first environment resolution (#1699) (kernel-env)(15d0394)
- pool warming with network failure detection (#1703) (runtimed)(c214d48)
- persist conda/pixi lock files for offline re-creation (#1705) (kernel-env)(908f3c5)
- add @nteract/sift as packages/sift in monorepo (#1709) (sift)(703f7f6)
- standalone renderer plugin test app (#1718) (renderer-test)(d89d2f7)
- add parquet support to SiftTable url prop (#1720) (sift)(62cc46d)
- add theme picker with Classic and Cream themes (#1725) (sift)(0cba8b3)
- parquet renderer plugin, WASM blob server, color theme settings (#1730) (sift)(1436329)
- whole-app cream theme with CodeMirror support (#1739)(140fabe)
- warm accent colors for cream theme (#1740) (theme)(813c488)
- own CodeMirror themes, replace Prism with Lezer static highlighting (#1742) (editor)(4b44adb)
- parquet summaries for LLM + nteract-predicate/sift-wasm crate split (#1759) (mcp)(8188bcb)
- nteract/dx — data-experience library for Python kernels (#1762) (dx)(5c2e5fd)
- use project's real conda env for conda:env_yml notebooks (#1766) (conda)(cc0706f)
- save ipynb with blob refs instead of base64 (spec 2) (#1769) (runtimed)(2350ff3)
- blob GC correctness (spec 1) (#1770) (runtimed)(e8b4953)
- expose reconnect tool on the standalone MCP proxy (#1776) (mcpb)(00492df)
- consolidate tool surface — up, down, status, logs (#1777) (supervisor)(5724c04)
- register ipython_display_formatter handler for DataFrames (#1780) (dx)(22001e7)
- register formatters for narwhals DataFrame wrappers (#1782) (dx)(df439c7)
- add GetDaemonInfo request as replacement for daemon.json (#1803) (protocol)(f35c3c0)
- query_daemon_info helper prefers socket (#1804) (runtimed-client)(9b8d988)
- cap Presence frames at 1 MiB in recv_typed_frame (#1806) (protocol)(ab5c0bd)
- richer per-column stats + Dataset handler in text/llm+plain (#1809) (dx)(a43b2a8)
- DaemonConnection — long-lived daemon session (Phases 1–3) (#1823) (runtimed-client)(10c3434)
Bug Fixes
- show daemon error message in pool error banner (#1658) (frontend)(e04085a)
- ephemeral notebook review cleanups (#1671) (runtimed)(3359216)
- auto-reset circuit breaker after cooldown (#1674) (runt-mcp-proxy)(321adb8)
- re-resolve child binary on every restart (#1677) (runt-mcp-proxy)(a812587)
- coerce string booleans in MCP tool params (claude-code#32524) (#1678) (runt-mcp)(edb5d31)
- respect SKIP_MATURIN during file-change handling (#1679) (mcp-supervisor)(1ed4371)
- coerce string arrays in MCP tool params (claude-code#32524) (#1680) (runt-mcp)(b562604)
- auto-create directories on save + block ephemeral UUID saves (#1683) (runtimed)(c79d0e0)
- defensive sweep for orphaned executions on kernel restart (#1690) (runtimed)(bab5fd1)
- graceful fallback for launch_app in headless environments (#1693) (runt-mcp)(53d2ffe)
- parse UV checksum as hash+filename format (#1695) (kernel-launch)(f644f8b)
- graceful kernel shutdown with signal escalation (#1696) (runtimed)(8bdffb5)
- clean up ZeroMQ sockets when kernel dies (#1697) (runtimed)(ee2c48f)
- clone state objects in AFM model proxy to prevent readonly errors (#1698) (widgets)(92e6ed3)
- add child process monitoring for transparent restarts (#1701) (runt-mcp-proxy)(48d24db)
- honor pool_size settings from settings.json (#1702) (runtimed)(967c7b1)
- socket-aware daemon stop with signal escalation (#1704) (runt)(3005326)
- runtime agent process groups for clean orphan reaping (#1717) (runtimed)(49f6df1)
- check child transport state before skipping restart (#1722) (mcp-proxy)(1bd20da)
- eliminate triple compilation of shared crates (#1724) (build)(01b584e)
- update Tailwind arbitrary value CSS vars to --sift-* names (#1726) (sift)(7ffa849)
- stop watching .git files in build scripts (#1727) (build)(258bc82)
- env cleanup on room eviction and GC improvements (#1723) (runtimed)(b526496)
- wait for Automerge doc sync before mutating in integration tests (#1729) (test)(2213e65)
- stop promote_inline_deps_to_project from removing project deps (#1733) (runtimed)(66c12e8)
- set current_runtime_agent_id in LaunchKernel request path (#1735) (runtimed)(ab12f14)
- skip stale Python rebuilds in warm builds (#1737) (xtask)(99c9cdd)
- gate shell_escape with #[cfg(unix)] to fix Windows warning (#1738) (build)(dd3986a)
- match output area width to CodeMirror editor (#1741) (cell)(248655f)
- replace shared watch
<bool>with per-agent oneshot channel (#1743) (runtimed)(3154e2d) - propagate colorTheme to iframe document element (#1745) (iframe)(6586cd5)
- default create_notebook working_dir to CWD for project detection (#1750) (mcp)(bb958d2)
- prevent GC from deleting pool envs mid-warmup (#1752) (runtimed)(87f0043)
- restore Classic Light syntax colors (#1753) (editor)(fdf31a8)
- cell adder Tailwind classes + cream-aware iframe CSS vars (#1755) (theme)(acf6664)
- use webkit-prefixed Fullscreen API for WKWebView compatibility (#1756) (sift)(f371577)
- enable Fullscreen API for output iframes (#1758) (iframe)(efe8cc7)
- handle LargeUtf8 string columns (pandas parquet default) (#1763) (predicate)(b84a9e1)
- increase virtualization overscan to prevent blank rows on fast scroll (#1764) (sift)(51a3d16)
- emit Ready after additive pool delta install (#1765) (env-progress)(bcc89a1)
- dx-dist artifact path — uv workspace writes to repo-root dist/ (#1775) (ci)(be10507)
- health-probe vite and reinstall on lockfile drift (#1778) (supervisor)(9188026)
- render parquet via sift when pandas also emits HTML (#1779) (mime-priority)(53557d3)
- fail the release when a PyPI publish step errors (#1781) (ci)(b34af2f)
- pin ruff to 0.15.10 and reformat dx integration tests (#1802) (ci)(c2c5642)
- reconnect on sync-socket framing errors (#1805) (runtime-agent)(4537498)
- author text/llm+plain wins over synth (#1808) (output-resolver)(51eddfe)
- check env sync drift after kernel restart (#1810) (runtimed)(71ae91c)
- serve cached tools optimistically and bake in build channel (#1827) (mcpb-runt)(4fc2940)
Performance
- trim tool descriptions to reduce context cost (#1688) (runt-mcp)(0d7061f)
Documentation
- document daemon isolation setup and add supervisor failsafe (#1700)(8370da0)
- update agent-facing docs to the up/down/status supervisor surface (#1784)(c95b64d)
- extend _format_install module docstring to cover ipython_display path (#1785) (dx)(354c217)
- refresh stale RoomKernel/kernel_manager.rs references (#1791)(4a83eea)
- add test_dx_integration.py setup + run instructions (#1792) (testing)(2cfb081)
- rewrite README for PyPI display (#1821) (dx)(58cff24)