jupyter-aiterminal
AI Terminal for JupyterLab. Mixed AI and Command cells in a notebook-like workspace, saved as .agentnb files.
What it does
- AI cells send natural language to the Claude Agent SDK on the Jupyter server (Read / Write / Edit / Bash / Glob / Grep). Markdown in the reply is rendered.
- Command cells run non-interactive bash with a persistent cwd and streaming output.
- New workspaces appear in the file browser as
Untitled.agentnb. Content autosaves. Closing the tab closes the document; a full Jupyter refresh only restores tabs that were still open.
It does not include a classic SSH terminal or interactive TUI (vim / ssh / full-screen apps).
Security warning
This extension gives the AI agent and every Command cell the ability to run arbitrary commands as the Jupyter server user. Treat access to it as equivalent to a shell on that machine.
- The agent runs with
permission_mode: bypassPermissionsand holdsRead,Write,Edit,Bash,Glob, andGrep. There is no per-command confirmation prompt. - Command cells execute arbitrary bash in a long-lived shell, as the user running Jupyter.
policy.pyblocksapt/yum/dnfandcurl | shstyle installs. That is a guardrail against careless damage, not a sandbox — it does not constrain what the agent can do.- Any user who can authenticate to the Jupyter server can reach this extension.
Recommended precautions:
- Never expose a Jupyter server running this extension to an untrusted network, and do not share an instance with people you would not give a shell.
- Run it inside a container or VM you are willing to lose.
- Keep Jupyter's own authentication enabled.
Requirements
- Python 3.10+
- JupyterLab 4.5 (4.x
<5) claude-agent-sdk- A
claudeCLI on the Jupyter serverPATH - An Anthropic-compatible API (official Anthropic or a local relay)
Install
pip
pip install jupyter-aiterminal
Restart JupyterLab after install.
git
pip install "git+https://github.com/wangyusheng1985/jupyter-plugin-aiterminal.git"
from a local clone
git clone https://github.com/wangyusheng1985/jupyter-plugin-aiterminal.git
cd jupyter-plugin-aiterminal
pip install .
Uninstall:
pip uninstall jupyter-aiterminal
Configure
Open Settings → AI Terminal and set:
| Setting | Meaning |
|---|---|
| Base URL | Anthropic-compatible API root, e.g. https://api.anthropic.com or a relay |
| Model | Model id passed to the Agent SDK |
| API Token | API key / token |
All three are required. Empty values produce a config error that points back to Settings. Changing them takes effect the next time you open AI Terminal (a new WebSocket).
The token is stored in JupyterLab user settings on the server (~/.jupyter/lab/user-settings/jupyter-aiterminal/) and is visible in the Settings UI. Do not commit that file. The Agent WebSocket does not send the token to the browser.
Use
- Open the Launcher → Other → AI Terminal.
- A
.agentnbfile is created in the current file-browser directory. - Type in a cell. Double-click the prompt (or use the toolbar) to switch AI / Command.
- Run with Shift+Enter (run and advance) or the toolbar Run button.
- Select text in a cell to show a copy icon at the pointer; click it to copy.
Cmd/Ctrl+C/V/X/Awork as usual. In command mode,dddeletes the cell.
Command cells share one bash session per tab, so cd persists. AI cells use the server-side Agent SDK, not that bash session.
Develop
jlpm install
jlpm test
jlpm typecheck
jlpm eslint
pytest
python -m build
License
BSD-3-Clause
Release files for jupyter-aiterminal 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jupyter_aiterminal-0.3.2.tar.gz | 203.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jupyter_aiterminal-0.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 243.6 kB
Release files / jupyter_aiterminal-0.3.2.tar.gz
| Download URL | jupyter_aiterminal-0.3.2.tar.gz |
|---|---|
| Size | 203.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ec5d9689deb4056af35d1c67eb10af6966b462cd9ec308d22255968d51806ad5
|
|
BLAKE2b-256 checksum How to use checksums |
67643a7af6555e021d41dc751196ec7f008f98e6c8d7e78eea3b053826c1c72c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / jupyter_aiterminal-0.3.2-py3-none-any.whl
| Download URL | jupyter_aiterminal-0.3.2-py3-none-any.whl |
|---|---|
| Size | 40.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d5757668afc9d29af994fec94b6e04b2db5da64eac46f401066dd8168a08abd7
|
|
BLAKE2b-256 checksum How to use checksums |
b0850c4909f3a2e191664fa4eee5398a5bb3bf0c03ee8b0d36403288056972ef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency log