Skip to main content

AI coding assistant for JupyterLab

Project description

Notebook Intelligence

Notebook Intelligence (NBI) is an AI coding assistant and extensible AI framework for JupyterLab. It adds chat, inline edit, auto-complete, and an agent that can drive notebooks — backed by GitHub Copilot, an OpenAI-compatible or LiteLLM-compatible endpoint, local Ollama models, or Anthropic's Claude Code CLI.

NBI is free and open-source. Connect it to a free or paid LLM provider of your choice — GitHub Copilot, any OpenAI- or LiteLLM-compatible endpoint, Ollama (local), or Anthropic Claude (via the Claude Code CLI). Provider charges, when applicable, are paid directly to the provider.

Contents

Requirements

  • Python 3.10+
  • JupyterLab 4.x
  • Node.js — only required for Claude mode (the Claude Code CLI) and for MCP servers that launch via npx.
  • A fresh virtualenv or conda env is recommended so NBI doesn't conflict with system Python.

Quick start

pip install notebook-intelligence
jupyter lab     # restart JupyterLab if it was already running

After restart:

  1. Click the NBI icon in the left sidebar to open the chat panel.
  2. Open NBI Settings (gear icon in the chat panel, or Settings → Notebook Intelligence Settings).
  3. Sign into your provider — for GitHub Copilot, click Sign in; for an OpenAI- or LiteLLM-compatible endpoint, paste an API key; for Ollama, point at your local daemon. To use Claude, enable Claude mode (see below).
  4. Type a message in the chat panel and press Enter.

If the panel stays empty or login does nothing, see Troubleshooting.

Concepts

A short glossary you'll see referenced throughout these docs.

  • LLM Provider — the service that runs the model. NBI ships with four provider adapters: GitHub Copilot, OpenAI-compatible, LiteLLM-compatible, and Ollama. Anthropic Claude is available through Claude mode, not as a top-level provider.
  • Chat Participant — a @mention-able persona inside the chat panel (@workspace, @mcp, …). Participants route the request to a specific tool surface.
  • Default mode vs Claude modeDefault uses the configured LLM Provider for chat, inline chat, and auto-complete. Claude mode uses the Claude Code CLI for the chat panel (gaining its tools, skills, MCP servers, and custom commands) and Claude models via the Anthropic API for inline chat and auto-complete. Requires the Claude Code CLI on PATH.
  • Claude Code vs the Anthropic API — the Anthropic API (api.anthropic.com) is the HTTPS endpoint NBI calls directly for inline chat and auto-complete in Claude mode. Claude Code is Anthropic's local CLI agent that NBI shells out to for the chat panel; it talks to Anthropic itself.
  • MCPModel Context Protocol. A way for the LLM to call out to external tools (read files, hit APIs, run scripts).
  • Ruleset — markdown files in ~/.jupyter/nbi/rules/ that get injected into the system prompt to enforce conventions, coding standards, or domain rules.

Feature highlights

Claude mode

NBI provides a dedicated mode for Claude Code integration. In Claude mode, NBI uses the Claude Code CLI for the chat panel, and Claude models (via the Anthropic API) for inline chat and auto-complete suggestions. This brings Claude Code's tools, skills, MCP servers, and custom commands into JupyterLab.

Claude mode

Configure via the NBI Settings dialog (gear icon in the chat panel, or Settings → Notebook Intelligence Settings). Toggle Enable Claude mode, then:

  • Chat model — the Claude model used for the chat panel and inline chat.
  • Auto-complete model — the Claude model used for auto-complete suggestions.
  • Chat Agent setting sources — user, project, or both, mirroring Claude Code's settings.
  • Chat Agent tools — which tool sets to activate. Claude Code tools are always on. Jupyter UI tools are NBI's own (authoring notebooks, running cells, etc.).
  • API key and Base URL — point at Anthropic or a self-hosted endpoint.

If the Claude Code CLI is on PATH, NBI launches it automatically. To override the location, set the NBI_CLAUDE_CLI_PATH environment variable before starting JupyterLab.

Claude settings

Resuming a previous Claude session

When Claude mode is on, the chat sidebar shows a history icon next to the gear. Click it to list the Claude Code sessions recorded for the current working directory (the same transcripts the Claude Code CLI stores under ~/.claude/projects/). Selecting a session reconnects via resume, so the next message you send continues that transcript with full prior context.

Agent mode

In Agent mode, the built-in AI agent creates, edits, and executes notebooks for you interactively. It can detect issues in cells and fix them.

Agent mode

Code generation with inline chat

Use the sparkle icon on the cell toolbar or the keyboard shortcut to show the inline chat popover.

Ctrl+G / Cmd+G opens the popover. Ctrl+Enter / Cmd+Enter accepts the suggestion. Esc closes it. The accept shortcut overrides JupyterLab's default run cell binding only while the popover is open — outside the popover, Ctrl+Enter / Cmd+Enter still runs the active cell.

Generate code

Auto-complete

Auto-complete suggestions are shown as you type. Tab accepts. NBI provides auto-complete in code cells and Python file editors.

Auto-complete

Chat interface

Chat interface

Configuration

Configure your provider, model, and API key from NBI Settings — the gear icon in the chat panel, the /settings chat command, or the JupyterLab command palette. For background, see the provider blog post.

Settings dialog

Configuration files

NBI saves configuration at ~/.jupyter/nbi/config.json. It also supports an environment-wide base configuration at <env-prefix>/share/jupyter/nbi/config.json — organizations can ship default configuration there, and user changes save as overrides on top.

These config files store provider, model, and MCP configuration. API keys for custom LLM providers are also stored here in plaintext — never commit ~/.jupyter/nbi/config.json to git, share it, or sync it across users. If a key leaks, rotate it at the provider immediately.

Manual edits to config.json require a JupyterLab restart to take effect. Edits via the Settings dialog are picked up live.

Remembering GitHub Copilot login

NBI can remember your GitHub Copilot login so you don't have to sign in again after a JupyterLab or system restart.

[!CAUTION] If you enable this, NBI encrypts the token and stores it in ~/.jupyter/nbi/user-data.json. Never share this file. The encryption uses a default password unless you set NBI_GH_ACCESS_TOKEN_PASSWORD to a custom value — on shared or multi-tenant systems, set a custom password before enabling this option.

NBI_GH_ACCESS_TOKEN_PASSWORD=my_custom_password

To enable, check Remember my GitHub Copilot access token in the Settings dialog.

Remember access token

If the stored token fails to authenticate (expired, revoked, password mismatch), NBI prompts you to sign in again.

Built-in tools

These tools are available in Agent mode and to MCP-enabled chats.

Tool What it does
Notebook Edit (nbi-notebook-edit) Edit notebooks via the JupyterLab notebook editor.
Notebook Execute (nbi-notebook-execute) Run notebooks in the JupyterLab UI.
Python File Edit (nbi-python-file-edit) Edit Python files via the JupyterLab file editor.
File Edit (nbi-file-edit) Edit files in the Jupyter root directory.
File Read (nbi-file-read) Read files in the Jupyter root directory.
Command Execute (nbi-command-execute) Execute shell commands using the embedded terminal in Agent UI or JupyterLab terminal.

In multi-tenant deployments, nbi-command-execute and nbi-file-edit are effectively arbitrary code execution as the user. See docs/admin-guide.md for guidance on disabling them.

Model Context Protocol (MCP) support

NBI integrates with MCP servers. It supports both stdio and Streamable HTTP transports. MCP server tools are supported; resources and prompts are not yet supported.

Add MCP servers by editing ~/.jupyter/nbi/mcp.json. An environment-wide base file at <env-prefix>/share/jupyter/nbi/mcp.json is also supported.

[!NOTE] MCP requires an LLM model with tool-calling capability. All GitHub Copilot models in NBI support this. For other providers, choose a tool-calling-capable model.

[!CAUTION] Most MCP servers run on the same machine as JupyterLab and can make irreversible changes or access private data. Only install MCP servers from trusted sources.

MCP config example

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/mbektas/mcp-test"
      ]
    }
  }
}

For stdio servers you can pass extra environment variables under env:

"mcpServers": {
    "servername": {
        "command": "",
        "args": [],
        "env": {
            "ENV_VAR_NAME": "ENV_VAR_VALUE"
        }
    }
}

For Streamable HTTP servers you can also specify request headers:

"mcpServers": {
    "remoteservername": {
        "url": "http://127.0.0.1:8080/mcp",
        "headers": {
            "Authorization": "Bearer mysecrettoken"
        }
    }
}

To temporarily disable a configured server without removing it, set "disabled": true:

"mcpServers": {
    "servername2": {
        "command": "",
        "args": [],
        "disabled": true
    }
}

Rulesets

NBI's ruleset system lets you define guidelines and best practices that get injected into AI prompts automatically — for consistent coding standards, project conventions, or domain knowledge. Rules are markdown files in ~/.jupyter/nbi/rules/ and can scope by file pattern, kernel, directory, or chat mode.

A two-line example:

---
priority: 10
---

- Always use type hints in Python functions.
- Add docstrings to all public functions.

For full details (frontmatter reference, mode-specific rules, auto-reload), see docs/rulesets.md.

Claude Skills

When Claude mode is enabled, the Settings panel exposes a Skills tab for managing the skills that Claude can invoke. Skills are stored under ~/.claude/skills/ (user) or <project>/.claude/skills/ (project). You can create and edit skills inline, duplicate, rename, delete (with undo), or import from a public GitHub repo.

For organization-wide deployments, NBI can install and keep a curated set of skills in sync from a YAML manifest pointed at by NBI_SKILLS_MANIFEST. Managed skills are read-only in the UI and refreshed on a schedule.

For full details, see docs/skills.md.

Chat feedback

Enable thumbs-up/down feedback on AI responses by setting:

c.NotebookIntelligence.enable_chat_feedback = True

…or via CLI:

jupyter lab --NotebookIntelligence.enable_chat_feedback=true

The feedback fires an in-process telemetry event. Nothing leaves the process by default — see the admin guide for how to wire it into your observability stack.

Chat feedback

Documentation

Further reading

Roadmap

NBI 4.x is stable. New features land in minor releases (4.5, 4.6, …); breaking changes are reserved for the next major (5.x) and will be announced in the changelog.

License

Licensed under GPL-3.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

notebook_intelligence-4.6.0.tar.gz (8.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

notebook_intelligence-4.6.0-py3-none-any.whl (16.4 MB view details)

Uploaded Python 3

File details

Details for the file notebook_intelligence-4.6.0.tar.gz.

File metadata

  • Download URL: notebook_intelligence-4.6.0.tar.gz
  • Upload date:
  • Size: 8.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.7

File hashes

Hashes for notebook_intelligence-4.6.0.tar.gz
Algorithm Hash digest
SHA256 0625c39bde9f71e4a09751dd897c0b3643c048b84d7607b6ba96a2a98d39ab53
MD5 67bc1ad735eb725c5940c14265d28c63
BLAKE2b-256 12b0afc0295e074bb3d46dad87694bc78bf3d9751e3bf6f7f755e4a2bb6472e5

See more details on using hashes here.

File details

Details for the file notebook_intelligence-4.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for notebook_intelligence-4.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 22466fe295e1c36fca2c4f4932f71f48532df44c45b2cfe154834d1312a84c82
MD5 f9ddf4b746adc0de83deb7f70d474491
BLAKE2b-256 a89d467986335bf6565b010d3e75b6be855ff29662c3877292e93cb06734e63a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page