v3.1.0#
Published on July 23, 2026.
Jupyter AI 3.1 brings the in-chat controls of a modern agentic editor to collaborative chats, and moves the persona system onto a live awareness channel.
Highlights#
JupyterLab 4.6+ support. Jupyter AI now works with JupyterLab 4.6+.
In-chat session controls. A new input toolbar lets you pick which persona replies, and switch the active agent’s model, permission mode, effort, and other settings without leaving the chat.
Live usage and cost. The chat input shows how full the active persona’s context window is, with a hover breakdown of token usage and estimated cost.
Reliable persona routing. The persona you select in the picker is always the one that responds. Personas no longer go quiet after a refresh or when a second person joins, and
@-mentioning on every message is no longer needed.Server-side notebook execution. Cells can now run on the server via a REST API with outputs streaming to every connected client.
New Kilo persona available over ACP.
Major bugs fixed#
Fixed data loss resulting from rare race conditions after opening a file while another user was connecting to it.
Fixed various notebook kernel and outputs issues.
jupyter_server_documents>=0.3.0no longer ships custom kernel and outputs logic by default.Fixed compatibility with Voila dashboards.
API changes#
The APIs powering the new in-chat controls are all built into the Persona API in jupyter-ai-persona-manager, so any persona can advertise its models, settings, and session usage and reuse the built-in chat UI — no custom REST API required.
BasePersona gains new methods for this. A persona calls these report_* methods to publish its session state so the controls appear:
report_model_configuration(model)— advertise the current model, its options, and its model settings, populating the model picker.report_settings_configuration(settings)— advertise general (non-model) settings such as mode or effort level.report_usage(usage)— publish context-window, token, and cost usage for the live gauge and breakdown.report_slash_commands(commands)— advertise the slash commands the persona supports.
And a configurable persona overrides these to react when a user changes something in that UI:
update_model(model_id)— switch the persona to the selected model.update_model_settings(settings)— apply changed model settings (e.g. context size).update_settings(settings)— apply changed general settings (e.g. mode, effort level).
The stop button is now part of the Persona API too: a persona overrides cancel_response() to interrupt its in-progress reply when the user stops it. This was previously ACP-specific and has been moved into the base API, so it works for any persona.
Note
The permission-requests API remains the only API specific to ACP agents in jupyter-ai-acp-client. This will be standardized in a future release and made available to other AI personas as well.
We have also added comprehensive Persona API documentation! See the persona-manager Python API reference.
Jupyternaut support#
Jupyternaut is supported on a best-effort basis. We have made a best effort to migrate it to Jupyter AI 3.1, but there may still be rough edges — hence the 0.1.0b0 version, which signals that more work is needed.
Jupyter AI 3.2 will generalize this: it will make it easy to build custom AI personas on the LangChain + LiteLLM stack, which should reduce the need for Jupyternaut as a distinct persona.
Warning
Jupyternaut’s documentation is currently out of date and may not reflect its behavior in 3.1. See jupyter-ai#1618 for details and progress.
Full changelog#
jupyter-server-documents#
Upgraded from v0.2.5 → v0.3.1. (See full changelog)
Enhancements made#
Bugs fixed#
Maintenance and upkeep improvements#
jupyter-ai-persona-manager#
Upgraded from v0.0.11 → v0.1.2. (See full changelog)
Enhancements made#
Make control menu subheaders sticky #100 (@andrii-i, @dlqqq)
Rename control menu components, adopt React Testing Library #99 (@andrii-i, @dlqqq)
Title control dropdowns, fix menu keyboard navigation #93 (@andrii-i, @dlqqq)
Document usage fallback semantics and scope the cost estimate label to USD #75 (@andrii-i, @dlqqq)
Show a loading placeholder while the persona list resolves #74 (@andrii-i, @dlqqq)
Let extensions contribute controls to the persona controls toolbar #70 (@dlqqq, @andrii-i)
Move the chat input toolbar from acp-client; support percent-only context usage #68 (@andrii-i, @dlqqq)
Add optional BasePersona.cancel_response() to interrupt a reply #66 (@dlqqq, @andrii-i)
Define Persona and PersonaManager awareness-channel API #64 (@dlqqq)
Update routing to be metadata-based, not mention-based #59 (@dlqqq)
Route messages to a selectable active persona #54 (@andrii-i, @dlqqq)
Bugs fixed#
Fix event loop handling and Python 3.14 compat #46 (@dhirschfeld, @dlqqq)
Maintenance and upkeep improvements#
Documentation improvements#
jupyter-ai-acp-client#
Upgraded from v0.1.5 → v0.2.0. (See full changelog)
Enhancements made#
Drop the input controls moved to persona-manager #140 (@andrii-i, @dlqqq)
Cancel responses via persona-manager instead of a custom ACP stop route #139 (@dlqqq, @andrii-i)
Implement the persona-manager awareness API in the ACP adapter #138 (@dlqqq, @andrii-i)
Stamp persona/model/settings into message metadata; drop the active-persona REST #135 (@dlqqq, @andrii-i)
Show context, token, and cost usage for the active persona in the chat input #133 (@andrii-i, @dlqqq)
Add session controls and a persona selector to the chat input #129 (@andrii-i, @dlqqq)
Add Kilo ACP persona #127 (@dominikbayerl, @andrii-i)
Bugs fixed#
Maintenance and upkeep improvements#
jupyter-ai-tools#
Upgraded from v0.5.2 → v0.6.1. (See full changelog)
Merged PRs#
jupyter-ai-jupyternaut#
Upgraded from v0.0.11 → v0.1.0b0. (See full changelog)
Note
This is an optional package, installed only with the corresponding jupyter-ai extra.
Enhancements made#
Bugs fixed#
Maintenance and upkeep improvements#
Other merged PRs#
Unchanged subpackages#
The following subpackages did not advance their version floor in this release:
jupyter-ai-chat-commands(v0.0.4)jupyter-ai-litellm(v0.0.2)jupyter-ai-magic-commands(v0.0.3)jupyter-ai-router(v0.0.5)jupyter-server-mcp(v0.2.1)jupyterlab-commands-toolkit(v0.1.6)jupyterlab-notebook-awareness(v0.2.0)