Skip to main content

jupyterlab_ai_code_assistants_extension

GitHub Actions npm version PyPI version Total PyPI downloads JupyterLab 4 Brought To You By KOLOMOLO Donate PayPal

A full launcher and manager for every AI code assistant in JupyterLab - Claude Code, Codex, Kimi, Gemini and DeepSeek. Start, resume, fork, switch, and clean up CLI sessions from a side panel per assistant - one click lands you in the right terminal with the assistant already running, no duplicate tabs, no UUID hunting. One install replaces the separate jupyterlab_claude_code_extension, jupyterlab_codex_extension and jupyterlab_kimi_code_extension packages and migrates their settings and favourites automatically.

Claude Code Sessions panel

Why this extension

One principle: the vendors know best how to build the agent harness; we know best how to make it work in JupyterLab.

Chat-panel extensions re-implement the agent loop and trail the real tool. This one runs the genuine, unmodified CLIs in JupyterLab terminals - skills, subagents, MCP, hooks, plan mode, every release the day it lands. The extension owns the JupyterLab side:

  • Launching - new, resumed, or forked sessions, with or without permission prompts, no wrapper shell, correctly sized before the assistant draws its first frame
  • Finding - every project in one panel per assistant: favourites, search, live activity
  • Reusing - clicking a session focuses its existing terminal, never a duplicate
  • Managing - parallel conversations: switch, fork with a name, delete - no --resume pickers, no raw UUIDs

Features

  • One install, every assistant - Claude Code, Codex, Kimi, Gemini and DeepSeek from a single package, each with its own right-side panel wearing its official mark
  • Provider registry - assistant-specific behaviour lives in one module per assistant behind capability flags; no core file names an assistant, and adding one touches no core file
  • Joint settings page - one settings section covering all assistants, with a per-assistant toggle (all on by default); toggling takes effect live, no JupyterLab reload, and a change reaches the other JupyterLab windows of the same browser
  • Three-section side panel - Favorites, Recent, and All projects, each scrolling independently
  • One-click resume - click a row to jump back into that session in a terminal; an open terminal for the project is reused instead of duplicated. Exception: a Kimi or DeepSeek conversation started with + runs under an id that never reaches its process command line, so a click on that row while its terminal stays open opens a second terminal. Codex mints the id for a conversation started with + and for a fork through its own app-server before the terminal opens, so a click on a Codex row reuses the open terminal instead of opening a second one
  • File browser follows the opened session - opening a session moves the JupyterLab file browser to that session's project folder (a setting, on by default); a right-click on a panel header toggles this and moves the panels between the left and right sidebars
  • Launcher tiles - every enabled assistant has a tile in an "AI Assistants" section of the JupyterLab Launcher (after Other, under the extension's own robot-head icon); a click opens the assistant in the file browser's current folder, resuming the folder's conversation when one exists and starting a new one otherwise, through the companion jupyterlab_basic_terminal_extension (installed automatically). Disable an assistant and its tile goes; disable them all and the section goes with them
  • Your terminal's claude -c follows the panel (Claude) - switching to a conversation makes plain claude -c in that project resume that same conversation, including one that has been compacted, which Claude Code otherwise refuses to continue. Launching repairs a compacted conversation the same way, but only switching moves what claude -c picks
  • Conversation switcher - a right-click "Switch and Manage Sessions" submenu lists a project's other conversations by name and short id with last-activity time; "Manage Sessions..." opens a searchable popup over the full list with multi-select delete and per-row open and copy-id buttons
  • Branch session - fork the current conversation into a new named session via the right-click menu; each assistant forks its own way (Claude's native --fork-session, Codex's app-server thread/fork, server-side copies for Kimi, Gemini and DeepSeek) behind the same menu item
  • Rename session - name a conversation from the right-click menu, and the name is written where the assistant itself reads it back: Claude gets the record its own /rename writes, Kimi a custom title, Gemini the chat's summary, DeepSeek its title event. The panel shows the name the assistant actually kept. Codex's name is set through Codex's own app-server, so its CLI lists the same name the panel shows
  • Launch modes under each assistant's own name - Claude's skip-permissions, Codex's approval bypass, Kimi's --yolo, Gemini's YOLO; unsafe variants carry a shield glyph in the launch menus
  • Coloured terminal tabs - each session's colour tints its terminal tab via the companion jupyterlab_colourful_tab_extension (installed automatically). Claude's own /color supplies its default, Kimi derives a stable colour from the conversation id; Codex, Gemini and DeepSeek have no colour of their own until you set one, and a branched session inherits its parent's colour, which it keeps even if the parent's colour later changes or is reset. Tinting needs the companion release that reports the colours you pick and lets another extension own a tab - against an older one this extension tints no tabs at all and says so once, and the companion's own right-click colours keep working as they always did
  • Your newest colour choice wins - set a colour on a terminal tab and the extension remembers it for that conversation, so the tab shows it again when you reopen the conversation. In Claude Code, /color is the second way to choose, and whichever you used last wins: a colour picked on the tab after /color stays, and running /color after a pick takes over again, including /color with the same colour or a /color reset. Reset Tab Colour (n) in the session's right-click menu hands back every colour you set by hand on that project's conversations, and appears once there is one to hand back. Clearing the colour on the tab itself releases it too, for the conversation that terminal is running; Reset Tab Colour is the way back for a conversation with no tab open. A Kimi or DeepSeek conversation that has never been resumed cannot be tracked yet, so a colour set on its tab is not kept
  • Favorites - star projects you keep coming back to via the right-click menu; favourites from the standalone extensions are migrated on first run
  • Remove and clean up - drop a project's history or a project's extra parallel sessions from the right-click menu, confirmation dialog first; removed files honour JupyterLab's "move files to trash" setting
  • Activity at a glance - each row shows its last activity in an aligned column; rows active within the last minute light up, rows idle for over a week dim, and rows with parallel conversations show a branch icon with the count
  • Remote control indicator and background agents (Claude) - a green dot marks sessions actively under remote control, and a conversation held by a running background agent shows a bg chip; clicking stops the agent and resumes the same conversation in your terminal, so it becomes an ordinary interactive session
  • Search - fuzzy filter per panel, toggled by the funnel button
  • Presentation modes - label rows by session name or by path relative to the JupyterLab root
  • Conflict-safe upgrade - if a retired standalone extension is still installed, its panel wins and this extension stands down for that assistant instead of showing a duplicate
  • DeepSeek in the terminal - the DeepSeek Harness ships no terminal chat of its own, so its panel runs the community TUI bundle (@deepseek-harness-tui/dsh-tui, mounted as the tui profile with dsh plugin --profile tui add @deepseek-harness-tui/dsh-tui). Without that profile, a launch is refused before a terminal opens, naming the bundle and the mount command - dsh tui itself would instead die in a stack trace that prints that command with a literal <package> where the package name goes, and never the bundle's name. The panel lists the projects under ~/.dsh/sessions (or $DSH_HOME), and a click resumes that row's conversation with dsh tui --resume <id> in a terminal; a launch with no conversation named starts a new one, whose id the TUI mints itself. Branching and deleting work from the panel as for every other assistant
  • Auto-disabled when absent - an assistant whose CLI is not on PATH does not show a panel
  • Open Callback - when an assistant's login sends your browser to an http://127.0.0.1:... link that fails to load, because the login is waiting on the machine running JupyterLab, run Open Callback from the command palette and paste the link; the Jupyter server requests it for you, and the popup says whether the login accepted it, then closes by itself 3 seconds later. Only http links to that machine's own loopback are accepted

Requirements

  • JupyterLab >= 4.6.0
  • Python >= 3.10
  • At least one assistant CLI on PATH: claude, codex, kimi, gemini, or dsh (the DeepSeek Harness)
  • For DeepSeek: the community TUI bundle mounted as the tui profile, dsh plugin --profile tui add @deepseek-harness-tui/dsh-tui - a DeepSeek launch without it is refused with these words before any terminal opens

Install

Developers must install via the project Makefile (which orchestrates clean, build, and pip install of the resulting wheel):

make install

The companion packages are version floors, so make install here pulls their published releases and replaces a locally built jupyterlab_colourful_tab_extension or jupyterlab_basic_terminal_extension. When verifying a change that spans this extension and a companion, install the companion last.

End-users can install the published package from PyPI:

pip install jupyterlab_ai_code_assistants_extension

Migrating from the standalone extensions

This package supersedes jupyterlab_claude_code_extension, jupyterlab_codex_extension and jupyterlab_kimi_code_extension. On first run it carries their settings and favourites over automatically, and it never replaces a setting you have already saved in this extension; uninstall the standalones once you are ready:

pip uninstall jupyterlab_claude_code_extension jupyterlab_codex_extension jupyterlab_kimi_code_extension

Tab colours stored by versions of THIS extension before 1.0.0 are carried over and keep tinting their tabs, but Reset Tab Colour will not offer them: the store from that version cannot tell a colour you set from one a branch inherited, and offering the wrong one would strip a branch of the colour it was forked with. Set the colour on that tab once more and it becomes yours to reset.

While a standalone extension is still installed, its panel is shown and this extension's panel for that assistant stays out of the way.

Uninstall

pip uninstall jupyterlab_ai_code_assistants_extension

Metadata

Release files for jupyterlab-ai-code-assistants-extension 1.2.83

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jupyterlab-ai-code-assistants-extension 1.2.83
File Size Uploaded
jupyterlab_ai_code_assistants_extension-1.2.83.tar.gz 770.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jupyterlab-ai-code-assistants-extension 1.2.83
File Interpreter ABI Platform
jupyterlab_ai_code_assistants_extension-1.2.83-py3-none-any.whl Python 3 none any Details

Total release size: 1.1 MB

Release files / jupyterlab_ai_code_assistants_extension-1.2.83.tar.gz

Download URL jupyterlab_ai_code_assistants_extension-1.2.83.tar.gz
Size 770.5 kB
Tags Source
SHA-256 checksum
How to use checksums
a1a444293cfc54cf5aee4af48a0a151eab929624cfe1387881a0f17ccabff468
BLAKE2b-256 checksum
How to use checksums
f20de4b49e54bc0ab994179f315fddd50d2842ac02602984586b05d3f96fc2f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / jupyterlab_ai_code_assistants_extension-1.2.83-py3-none-any.whl

Download URL jupyterlab_ai_code_assistants_extension-1.2.83-py3-none-any.whl
Size 313.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3bd2a99ee9871af0f654d7b6cf526abb5eacdf740851c210707be64b49750e2a
BLAKE2b-256 checksum
How to use checksums
b5bb42fc4e8cbdce04e9e1b9a417e6a36d88b56ec298acd7dc7b898eba4e2dab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page