[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81269":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":42,"readmeContent":43,"aiSummary":44,"trendingCount":15,"starSnapshotCount":15,"syncStatus":16,"lastSyncTime":45,"discoverSource":46},81269,"jupyter-studio","deepelementlab\u002Fjupyter-studio","deepelementlab","The AI-native JupyterLab — open-source Cursor for notebooks. Cmd+K inline edit, multi-step agent with cell-level tools (read\u002Fedit\u002Frun), chat with @cell\u002F@file context, ghost-text completion, one-click traceback fix. BYO model: Anthropic, OpenAI, Gemini, Ollama, vLLM. Local-first, privacy-first, fully open source.","",null,"TypeScript",51,8,1,0,2,44.06,"Apache License 2.0",false,"main",true,[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"agentic-ai","ai","ai-agents","ai-coding","anthropic","coding-assistant","copilot","cursor","data-science","developer-tools","inline-completion","jupyter","jupyter-notebook","jupyterlab","llm","machine-learning","notebook","ollama","openai","2026-06-12 04:01:32","\u003Cdiv align=\"center\">\n\n\u003C!-- \u003Cimg src=\"docs\u002Fassets\u002Fjupyter-studio-logo.png\" width=\"120\" alt=\"Jupyter Studio logo\" \u002F> -->\n\u003Cimg width=\"200\" height=\"180\" alt=\"jupyter-studio-x\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fc0510b68-ad71-4859-935a-729018c0641e\" \u002F>\n\n# Jupyter Studio\n\n### The AI-Native JupyterLab.\n### Open-source **Cursor for Notebooks** — agent inside every cell.\n\n[![Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fdeepelementlab\u002Fjupyter-studio?style=for-the-badge&color=ffb86c&logo=github)](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Fstargazers)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Apache--2.0-blue?style=for-the-badge)](LICENSE)\n[![Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fdeepelementlab\u002Fjupyter-studio?style=for-the-badge&color=success)](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Freleases)\n[![Discussions](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdiscussions\u002Fdeepelementlab\u002Fjupyter-studio?style=for-the-badge&logo=github&label=discussions&color=6366f1)](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Fdiscussions)\n[![DeepElementLab](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDeepElementLab-organization-111827?style=for-the-badge&logo=github)](https:\u002F\u002Fgithub.com\u002Fdeepelementlab)\n\n\u003C!---**[English](README.md)** · **[简体中文](README.zh-CN.md)** · **[Docs](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Ftree\u002Fmain\u002Fdocs)** · **[Discussions](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Fdiscussions)** · **[Roadmap](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Fprojects)**-->\n\n\u003Cbr\u002F>\n\n\u003Cimg src=\"docs\u002Fassets\u002Fhero-demo.gif\" width=\"820\" alt=\"Jupyter Studio Demo\" \u002F>\n\n\u003Csub>\u003Ci>Press \u003Ckbd>Cmd\u003C\u002Fkbd>+\u003Ckbd>K\u003C\u002Fkbd> in any cell. Chat with your whole notebook. Let the agent fix the traceback for you.\u003C\u002Fi>\u003C\u002Fsub>\n\n\u003C\u002Fdiv>\n\n---\n\n## ✨ Why Jupyter Studio?\n\nNotebooks are how the world does data science, ML research, and quantitative work — but the AI tooling lives somewhere else. You either jump out to ChatGPT and copy-paste, or you leave Jupyter for an IDE and lose your kernels, plots, and state.\n\n\u003Cimg width=\"1200\" height=\"1200\" alt=\"banner\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fe926c327-283d-4a3d-9e5a-c2f4815655e7\" \u002F>\n\n\n**Jupyter Studio brings the Cursor-class AI editing experience *into JupyterLab itself*** — same notebook, same kernel, same plots, now with an agent that can read your cells, run them, see the output, and edit them back.\n\n\n\u003Cimg width=\"2606\" height=\"1571\" alt=\"Screenshot - 2026-05-13 17 06 53\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fcecf2d72-d916-4e53-989b-ff0074dc50f3\" \u002F>\n\n\u003Cimg width=\"2606\" height=\"1572\" alt=\"Screenshot - 2026-05-13 17 13 31\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F7e0cf0f0-bd14-478a-97f6-0d05dd56c352\" \u002F>\n\n- 🧠 **A real agent, not a chatbot** — multi-step plan → execute → verify loop, with cell-level tools (`read_cell`, `edit_cell`, `insert_cell`, `run_cell`, `read_output`).\n- ⌨️ **Cmd+K inline edit** — select code, describe the change, accept the diff. Works inside any cell.\n- 💬 **Chat that knows your notebook** — `@cell`, `@file`, slash commands, full notebook context, streaming responses.\n- 👻 **Ghost Text completion** — Copilot-style inline completion native to JupyterLab.\n- 🛠 **Auto-fix tracebacks** — one click on the 🐛 button after an error, the agent diagnoses and patches the cell.\n- 🔌 **Bring your own model** — Anthropic, OpenAI, Google, Azure, Ollama, vLLM, any OpenAI-compatible endpoint.\n- 🔒 **Local-first & privacy-first** — your code never leaves your machine unless *you* point the agent at a remote model. No telemetry by default.\n- 🖥 **Desktop or browser** — ships as a JupyterLab extension *and* a native cross-platform desktop app.\n\n> If you've ever wished JupyterLab had **Cursor \u002F Continue \u002F GitHub Copilot Chat** built in — this is that, free and open source.\n\n---\n\n## 🆚 How does it compare?\n\n|                                  | **Jupyter Studio** | JupyterAI | GitHub Copilot in Jupyter | Cursor | VS Code + Jupyter Ext |\n| -------------------------------- | :----------------: | :-------: | :-----------------------: | :----: | :-------------------: |\n| Native JupyterLab UI             |         ✅         |    ✅     |             ✅            |   ❌   |          ⚠️          |\n| Cmd+K inline edit                |         ✅         |    ❌     |             ⚠️           |   ✅   |          ❌          |\n| Ghost-text completion            |         ✅         |    ❌     |             ✅            |   ✅   |          ✅          |\n| **Multi-step agent**             |         ✅         |    ⚠️    |             ❌            |   ✅   |          ❌          |\n| **Cell-aware tools** (read\u002Fedit\u002Frun cell) | ✅      |    ❌     |             ❌            |   ❌   |          ❌          |\n| Auto-fix traceback               |         ✅         |    ❌     |             ❌            |   ⚠️  |          ❌          |\n| Permission gating for risky ops  |         ✅         |    ❌     |             ❌            |   ⚠️  |          ❌          |\n| Bring-your-own-model             |         ✅         |    ✅     |             ❌            |   ⚠️  |          ⚠️         |\n| Local model support (Ollama\u002FvLLM)|         ✅         |    ✅     |             ❌            |   ❌   |          ⚠️         |\n| Self-hosted \u002F fully open-source  |         ✅         |    ✅     |             ❌            |   ❌   |          ⚠️         |\n| Free                             |         ✅         |    ✅     |             💲            |   💲  |          ✅         |\n\n> Legend: ✅ first-class · ⚠️ partial \u002F via plugin · ❌ not supported · 💲 paid\n\n---\n\n## ⚡ Quick start\n\n### Option A — One-line installer (recommended)\n\n```bash\n# macOS \u002F Linux\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Fmain\u002Finstall.sh | bash\n\n# Windows (PowerShell)\niwr -useb https:\u002F\u002Fraw.githubusercontent.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Fmain\u002Finstall.ps1 | iex\n```\n\nThis streams the repo’s [`install.sh`](install.sh) \u002F [`install.ps1`](install.ps1) from the `main` branch (adjust the URL if your default branch differs). It creates a venv, installs the server extension, builds the JupyterLab assets, and (optionally) sets up the Open Jupyter desktop shell. The installer is idempotent — run it again any time.\n\n### Option B — Use an existing JupyterLab\n\n```bash\npip install jupyter-studio-ai\njupyter lab\n```\n\nThat's it. Open any notebook and:\n\n- Press \u003Ckbd>Cmd\u003C\u002Fkbd>\u002F\u003Ckbd>Ctrl\u003C\u002Fkbd> + \u003Ckbd>K\u003C\u002Fkbd> in any cell → inline edit\n- Click the ✨ icon in the right sidebar → chat\n- Start typing → ghost-text suggestions\n- After an error → click 🐛 *Fix with AI*\n\n### Option C — Native desktop app\n\nDownload a one-click installer for your OS from the [Releases page](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Freleases\u002Flatest):\n\n| Windows 10\u002F11 | macOS 12+ | Linux |\n| :---: | :---: | :---: |\n| [`.exe`](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Freleases\u002Flatest) | [`.dmg` (arm64 \u002F x64)](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Freleases\u002Flatest) | [`.deb` \u002F `.rpm` \u002F `.AppImage`](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Freleases\u002Flatest) |\n\n---\n\n## 📸 What you can do\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>1. Cmd+K in a cell — \"make this vectorized\"\u003C\u002Fb>\u003C\u002Fsummary>\n\n\u003Cimg src=\"docs\u002Fassets\u002Fdemo-cmdk.gif\" width=\"700\" alt=\"Cmd+K demo\" \u002F>\n\nSelect code, hit `Cmd+K`, describe the change in natural language. Accept the diff with `Enter`, reject with `Esc`.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>2. Agent fixes a traceback in 3 cells\u003C\u002Fb>\u003C\u002Fsummary>\n\n\u003Cimg src=\"docs\u002Fassets\u002Fdemo-autofix.gif\" width=\"700\" alt=\"Auto fix demo\" \u002F>\n\nThe agent reads the error, looks at adjacent cells for context, edits the buggy cell, re-runs it, and reports back.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>3. \"Refactor the data loader across cells 3-7\"\u003C\u002Fb>\u003C\u002Fsummary>\n\n\u003Cimg src=\"docs\u002Fassets\u002Fdemo-refactor.gif\" width=\"700\" alt=\"Refactor demo\" \u002F>\n\nMulti-cell, multi-step refactors. The agent plans, edits each cell, runs them in order, and tells you what changed.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>4. Chat with full notebook context using @cell and @file\u003C\u002Fb>\u003C\u002Fsummary>\n\n\u003Cimg src=\"docs\u002Fassets\u002Fdemo-chat.gif\" width=\"700\" alt=\"Chat demo\" \u002F>\n\n`@cell:3` references a specific cell. `@file:data\u002Ftrain.csv` attaches a file. Slash commands like `\u002Fexplain`, `\u002Ftest`, `\u002Fplot` are first-class.\n\u003C\u002Fdetails>\n\n---\n\n## 🏗 Architecture\n\n```mermaid\nflowchart LR\n    subgraph Browser[\"JupyterLab UI (browser or Open Jupyter desktop)\"]\n        A1[ai-coder-extension\u003Cbr\u002F>Cmd+K · Chat · GhostText]\n        A2[ai-coder\u003Cbr\u002F>WS client + reverse RPC]\n    end\n\n    subgraph Server[\"jupyter-server (Python)\"]\n        B1[Tornado handlers\u003Cbr\u002F>WS · REST]\n        B2[AgentBridge]\n        B3[clawcode Agent runtime]\n        B4[Jupyter cell tools\u003Cbr\u002F>read · edit · insert · run]\n    end\n\n    subgraph Models[\"Pluggable model providers\"]\n        M1[Anthropic]\n        M2[OpenAI]\n        M3[Google]\n        M4[Ollama \u002F vLLM\u003Cbr\u002F>local]\n    end\n\n    A1 \u003C-->|WebSocket| B1\n    A2 \u003C-->|reverse RPC| B1\n    B1 --> B2 --> B3\n    B3 --> B4\n    B4 -.->|sharedModel.transact| A2\n    B3 --> M1 & M2 & M3 & M4\n```\n\nThree packages, one repo:\n\n| Package | What it is |\n| --- | --- |\n| [`clawcode\u002F`](clawcode\u002F) | The reusable agent runtime: tool calls, multi-step planning, streaming events. Pure Python. |\n| [`jupyter_studio_ai\u002F`](jupyter_studio_ai\u002F) | The `jupyter_server` extension: WS\u002FREST endpoints, agent bridge, cell tools. |\n| [`open-jupyter\u002F`](open-jupyter\u002F) | The JupyterLab Desktop fork with the `@jupyterlab\u002Fai-coder` and `@jupyterlab\u002Fai-coder-extension` packages preinstalled. |\n\nA deeper dive lives in [`JUPYTERLAB_AI_INTEGRATION.md`](JUPYTERLAB_AI_INTEGRATION.md).\n\n---\n\n## 🔌 Bring Your Own Model\n\nJupyter Studio AI Coder reads **credentials, provider endpoints, default model slots, and the active coder (`agents.coder`)** from **[ClawCode](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Ftree\u002Fmain\u002Fclawcode)** configuration: a JSON file conventionally named `.clawcode.json`.\n\n### Where Jupyter looks for `.clawcode.json`\n\nThe [`jupyter_studio_ai` extension](jupyter_studio_ai\u002Fjupyter_studio_ai\u002Fextension.py) resolves the config in this **first-hit-wins** order:\n\n1. **`$CLAWCODE_CONFIG`** — absolute path to your JSON file, if set.\n2. **`\u003CJupyter notebook root>\u002F.clawcode.json`** — `jupyter_server`'s `--notebook-dir` \u002F root (the directory you browse in Jupyter).\n3. **`\u003Cnotebook root>\u002Fclawcode\u002F.clawcode.json`**\n4. **Next to an editable [`clawcode`](clawcode\u002F) install** (e.g. monorepo `clawcode\u002F.clawcode.json` when developing this repo).\n5. **`~\u002F.config\u002Fclawcode\u002F.clawcode.json`**\n6. **`~\u002F.clawcode.json`**\n\nRestart `jupyter lab` after editing the file (or reload the kernel\u002Fserver) so the extension reloads settings.\n\n### Minimal example (API keys & default model)\n\nCopy and adapt from **[`clawcode\u002F.clawcode_template.json`](clawcode\u002F.clawcode_template.json)** — it lists every provider slot and field. Typical shape:\n\n```json\n{\n  \"providers\": {\n    \"openai\": {\n      \"api_key\": \"sk-your-key\",\n      \"base_url\": null,\n      \"disabled\": false,\n      \"timeout\": 120,\n      \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n    },\n    \"openai_deepseek\": {\n      \"api_key\": \"your-deepseek-key\",\n      \"base_url\": \"https:\u002F\u002Fapi.deepseek.com\",\n      \"disabled\": false,\n      \"timeout\": 120,\n      \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n    }\n  },\n  \"agents\": {\n    \"coder\": {\n      \"model\": \"gpt-4o\",\n      \"provider_key\": \"openai\",\n      \"max_tokens\": 8192,\n      \"reasoning_effort\": \"medium\",\n      \"temperature\": null\n    }\n  }\n}\n```\n\n- **`providers.\u003Cslot>`**: one logical gateway (`api_key`, optional `base_url` for OpenAI-compatible APIs, `models` picker list). Set **`disabled`** to omit a slot from the UI.\n- **`agents.coder`**: defines the notebook chat \u002F agent default; **`provider_key`** must match a key under **`providers`**.\n- The JupyterLab sidebar can **switch models at runtime**; persisting there updates the **coder** entry in `.clawcode.json` when you opt in.\n\n### Env vars & secrets\n\nPrefer putting keys in `.clawcode.json` locally (never commit secrets). Some ClawCode provider paths also honor standard env vars (e.g. `OPENAI_API_KEY` when using the built-in OpenAI slot); see **`clawcode`** config docs inside that package for **`CLAWCODE_*`** conventions.\n\n### Desktop shell (Open Jupyter)\n\nWhen the desktop app starts Jupyter from a given working directory, **that directory is the notebook root** for lookup **(steps 2–3 above)** unless you point **`CLAWCODE_CONFIG`** at a fixed file globally.\n\n\n---\n\n## 🛠 Developer quickstart\n\n### Typically, only three steps are needed.\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio.git\ncd jupyter-studio\n\n# Bootstrap everything (venv + python deps + lab build + desktop shell)\n.\u002Finstall.sh             # macOS \u002F Linux\n.\u002Finstall.ps1            # Windows PowerShell\n\n# Activate the environment, then start Jupyter Studio.\n.\\.venv\\Scripts\\Activate.ps1\njupyter lab --dev-mode --notebook-dir=\"C:\\test\\jupyter-studio\"\n\n```\n\n**Or step-by-step:** if you skip the scripts above, create and activate a virtual environment at the repo root first (default `.venv`, same as `install.ps1`), then run the `pip` \u002F `jlpm` commands below.\n\nmacOS \u002F Linux:\n\n```bash\npython3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\n```\n\nWindows (PowerShell; if execution policy blocks scripts, run `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned` once):\n\n```powershell\npython -m venv .venv\n.\\.venv\\Scripts\\Activate.ps1\n```\n\nCommon Windows pitfalls ( stale `jupyter.exe` paths, Yarn `EISDIR`, why `activate.bat` seems ineffective in PowerShell ) are documented in **[Windows & venv troubleshooting](#windows-venv-troubleshooting)** under *Developer quickstart*.\n\nWith the environment activated:\n\n```bash\npip install -e .\u002Fclawcode\npip install -e .\u002Fjupyter_studio_ai\ncd open-jupyter\u002Fjupyterlab-main && jlpm install && jlpm run build:dev\njupyter lab --dev-mode\n```\n\nSee [`dev.md`](open-jupyter\u002Fdev.md) for the full developer workflow and [`JUPYTERLAB_AI_INTEGRATION.md`](JUPYTERLAB_AI_INTEGRATION.md) for the integration internals.\n\n\u003Ca id=\"windows-venv-troubleshooting\">\u003C\u002Fa>\n\n### Windows & venv troubleshooting (install.ps1 \u002F dev builds)\n\n**Where `Activate.ps1` comes from.** The installer runs `python -m venv`, which creates `.venv\\Scripts\\Activate.ps1` (and `activate.bat`, etc.). Those files are part of the standard library’s venv machinery — not handwritten by `install.ps1`.\n\n**PowerShell vs `activate.bat`.** In PowerShell, running `activate.bat` normally starts a short-lived `cmd` child process. When that process exits, **your current PowerShell session is unchanged**, so it looks like “activation did nothing.” Prefer:\n\n```powershell\n.\\.venv\\Scripts\\Activate.ps1\n```\n\nIf scripts are blocked, run once: `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned`. Alternatively open **Command Prompt** and run `.venv\\Scripts\\activate.bat`, or call tools without activating: `.\\.venv\\Scripts\\python.exe -m pip …`.\n\n**Manual “activation” without scripts (PowerShell).** For the current terminal only, you can mirror what `Activate.ps1` does (`PATH` + `VIRTUAL_ENV`; the prompt will not show `(.venv)`):\n\n```powershell\n$venv = (Resolve-Path .\\.venv).Path\n$env:VIRTUAL_ENV = $venv\nRemove-Item Env:PYTHONHOME -ErrorAction SilentlyContinue\n$env:PATH = \"$venv\\Scripts;$env:PATH\"\n```\n\nRun these from the repository root; if your virtualenv is not `.venv` (see [`install.ps1`](install.ps1) `-VenvPath`), point `$venv` at that folder instead.\n\n**`jupyter` \u002F `jupyter.exe` still points at another drive (e.g. `D:\\…` after cloning to `C:\\…`).** On Windows, Pip’s console entry points record the **absolute path to `python.exe` at install time**. Copying a `.venv` folder from another path, or reusing scripts after moving the repo, leaves stale launchers. Symptoms: `Fatal error in launcher: Unable to create process using '\"D:\\…\\python.exe\"' …`. Fixes:\n\n- Prefer: **delete `.venv`**, then re-run [`install.ps1`](install.ps1) (or reinstall with `pip`) **only on the final checkout path** — do not copy `.venv` between disks or machines.\n- Quick workaround: **`python -m jupyter lab`** (uses the interpreter in the active env and bypasses the broken `jupyter.exe`).\n- Or regenerate launchers: `python -m pip install --force-reinstall jupyter-core jupyterlab` inside the active venv.\n\n**Editable JupyterLab install fails during `yarn install` (e.g. `EISDIR` \u002F symlink under `node_modules\\@jupyterlab\\buildutils`).** The monorepo linker needs directory links; on Windows this often breaks if `open-jupyter\u002Fjupyterlab-main\u002Fnode_modules` is **partially stale** or symlink creation is restricted. Try: delete `jupyterlab-main\u002Fnode_modules`, turn on **Settings → Privacy & security → For developers → Developer Mode**, then rerun `install.ps1` or `pip install -e open-jupyter\u002Fjupyterlab-main[dev]`. Lines like `YN0002` peer-dependency hints from Yarn are usually **noise** and not the root failure.\n\n\n\u003Cimg width=\"2333\" height=\"1496\" alt=\"Screenshot - 2026-05-14 13 05 23\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F5c6e03ac-361b-46ba-97a7-54d00a8d0fee\" \u002F>\n\n---\n\n## 🗺 Roadmap\n\n- [x] Cmd+K inline edit\n- [x] Chat sidebar with `@cell` \u002F `@file` context\n- [x] Ghost-text completion\n- [x] Multi-step agent with cell tools\n- [x] Auto-fix tracebacks\n- [x] Cross-platform desktop installer\n- [ ] **Notebook-level diff & checkpoint** (Q2)\n- [ ] **Variable inspector tool for the agent** (Q2)\n- [ ] **Collaborative agent in RTC notebooks** (Q3)\n- [ ] **Custom skill packs** (Q3)\n- [ ] **VS Code parity for `.py` files inside Lab** (Q4)\n\nTrack everything live on the [public roadmap →](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Fprojects)\n\n---\n\n## 🤝 Contributing\n\nWe love contributors. There are **[good-first-issues here](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Flabels\u002Fgood%20first%20issue)** — most can be done in under 100 lines of code.\n\n- 🐛 [Report a bug](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Fissues\u002Fnew?template=bug.yml)\n- 💡 [Request a feature](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Fissues\u002Fnew?template=feature.yml)\n- 📖 [Improve the docs](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Ftree\u002Fmain\u002Fdocs)\n- 💬 [GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Fdiscussions) — ask questions and share ideas\n\nRead [`CONTRIBUTING.md`](CONTRIBUTING.md) before you open a PR. Be kind, ship code, have fun.\n\n---\n\n## 💖 Sponsors & Used by\n\n> *Logos appear here once your sponsors \u002F users opt in.*\n\nIf your team relies on Jupyter Studio in production, we'd love to feature you. Open a PR adding your logo to [`docs\u002Fusers.md`](docs\u002Fusers.md), or [sponsor DeepElementLab on GitHub](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fdeepelementlab).\n\n---\n\n## ⭐ Star History\n\n\u003Ca href=\"https:\u002F\u002Fstar-history.com\u002F#deepelementlab\u002Fjupyter-studio&Date\">\n  \u003Cimg src=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=deepelementlab\u002Fjupyter-studio&type=Date\" alt=\"Star History Chart\" width=\"640\" \u002F>\n\u003C\u002Fa>\n\nIf Jupyter Studio saves you time, **[give it a star ⭐](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio)** — it genuinely helps more people discover the project.\n\n---\n\n## 📄 License & citation\n\nReleased under the **Apache 2.0 License**. See [`LICENSE`](LICENSE).\n\nIf you use Jupyter Studio in academic work, please cite:\n\n```bibtex\n@software{jupyter_studio_2026,\n  title  = {Jupyter Studio: An AI-native JupyterLab},\n  author = {The Jupyter Studio Authors},\n  year   = {2026},\n  url    = {https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio}\n}\n```\n\n---\n\n\u003Cdiv align=\"center\">\n\n**Built by notebook nerds, for notebook nerds.**\n\n\u003C!--[Repository](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio) · [Docs tree](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Ftree\u002Fmain\u002Fdocs) · [Discussions](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Fdiscussions) · [Releases](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio\u002Freleases) · [Organization](https:\u002F\u002Fgithub.com\u002Fdeepelementlab)-->\n\n[Repository](https:\u002F\u002Fgithub.com\u002Fdeepelementlab\u002Fjupyter-studio) · [Organization](https:\u002F\u002Fgithub.com\u002Fdeepelementlab)\n\n\u003C\u002Fdiv>\n","Jupyter Studio 是一个面向AI的JupyterLab扩展，旨在为笔记本提供原生的智能编辑体验。它支持Cmd+K快捷键进行内联编辑、多步骤代理操作（包括读取、编辑和运行单元格）、基于@cell\u002F@file上下文的聊天功能、代码自动补全以及一键修复回溯错误等核心功能。用户可以自带模型，如Anthropic、OpenAI、Gemini等，并且该工具强调本地优先与隐私保护，完全开源。Jupyter Studio特别适用于数据科学、机器学习研究及定量分析领域，让研究人员能在不离开Jupyter环境的情况下享受强大的AI辅助开发体验。","2026-06-11 04:04:07","CREATED_QUERY"]