jupyter-ai
AGENTS.md4.4k starsChanged 9 days agoBSD-3-ClauseView on GitHub
Guidance for AI agents working in jupyter-ai and its subpackages. As of v3, Jupyter AI is a set of subpackages, each living in its own repo under the jupyter-ai-contrib org. This repo holds the two metapackages that distribute a working set of them, under python/: - jupyter-ai-core (python/jupyter-ai-core/): JupyterLab with the extensions that terminal coding agents need (jupyter-server-mcp, jupyterlab-commands-toolkit, jupyter-live-content), and default settings. - jupyter-ai (python/jupyter-ai/): the agent chat. It depends on jupyter-ai-core and adds the chat subpackages. Both are…
- Installs packages
Trending
Less talk lately.about the whole repository
Who's talking about jupyterlab/jupyter-ai
- jupyterlab/jupyterlab“Extension Compatibility with JupyterLab 4.0”GitHub · May 24, 2023 · 10 reactions
- @tech-trending.bsky.social“GitHub - jupyterlab/jupyter-ai: A generative AI extension for JupyterLab …”Bluesky · Jun 1, 2025 · 4 likes
- @matsuu.bsky.social“Jupyter …”Bluesky · Jun 1, 2025 · 3 likes
- jupyterlab/jupyter-chat“Notebook aware chat”GitHub · Dec 19, 2024 · 3 reactions
- A Hacker News story“A generative AI extension for JupyterLab”Hacker News · Sep 3, 2023 · 3 points
The biggest 5 of 56 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 56
Talked about on GitHub, Bluesky, Hacker News and Stack Overflow (56 times).
On GitHub · 47
- May 24, 2023Extension Compatibility with JupyterLab 4.0 — jupyterlab/jupyterlab10 reactions · 30 comments
- Dec 19, 2024Notebook aware chat — jupyterlab/jupyter-chat3 reactions
- Mar 3, 2026Integrate with jupyter AI tooling — jupyterlab/plugin-playground2 reactions · 2 comments
- Jun 17, 2025Run chat commands on message submission — jupyterlab/jupyter-chat2 reactions · 4 comments
- Aug 22, 2023JupyterLab 4 support — jupyterlab/jupyterlab-telemetry2 reactions · 1 comment
42 more on GitHub
- Aug 13, 2026Make `jupyter-collaboration` optional — jupyterlab/jupyter-chat1 reaction · 17 comments
- Apr 29, 2026Restore send with selection — jupyterlab/jupyter-chat1 reaction · 3 comments
- Apr 21, 2026Placeholder in empty side panel — jupyterlab/jupyter-chat1 reaction
- Feb 26, 2026Add Conda Forge feedstock link to README — jupyter-ai-contrib/jupyter-server-mcp1 reaction
- Oct 13, 2025Build tool call UI component — jupyter-ai-contrib/jupyter-ai-jupyternaut1 reaction · 2 comments
- Jun 10, 2025Code highlight in message — jupyterlab/jupyter-chat1 reaction · 2 comments
- Dec 17, 2024Revamped Jupyter AI — deshaw/jupyter-ai1 reaction · 2 comments
- Aug 13, 2024Badging for sidebar panel icons, for notifications or alerts — jupyterlab/jupyterlab1 reaction · 1 comment
- Jan 12, 2024Fix broken link to CoC enforcement — jupyter/governance1 reaction · 4 comments
- Oct 26, 2026Update chat input toolbar — jupyter-ai-contrib/jupyter-ai-persona-manager0 reactions · 1 comment
- Oct 21, 2026Rethinking jupyter.org/ai page — jupyter/jupyter.github.io0 reactions · 1 comment
- Oct 14, 2026Use a Jupyterlab reactive toolbar as chat input toolbar — jupyterlab/jupyter-chat0 reactions · 3 comments
- Oct 12, 2026feat: 为 contributor 增加贡献过程讲解、事实卡与面试准备 — Hisn00w/ASu-skills0 reactions
- Sep 15, 2026Revert "Jupyterlab 4.6.3 (with Jupyter AI)" — fasrc/ood-jupyter0 reactions
- Sep 10, 2026Emit an awareness event when a client join or leave a room — jupyter-ai-contrib/jupyter-server-documents0 reactions · 1 comment
- Sep 10, 2026Publish awareness events with RTC — jupyterlab/jupyter-chat0 reactions · 2 comments
- Sep 9, 2026build(deps): update jupyter-ai requirement from >=3.0.0 to >=3.2.0 — jo-hoe/ai-juypter0 reactions
- Sep 6, 2026chore(deps): Bump the all-dependencies group across 1 directory with 7 updates — kulla/analytics-mfnf0 reactions
- Aug 19, 2026build(deps): update jupyter-ai requirement from >=3.0.0 to >=3.1.3 — jo-hoe/ai-juypter0 reactions · 1 comment
- Aug 5, 2026build(deps): update jupyter-ai requirement from >=3.0.0 to >=3.1.2 — jo-hoe/ai-juypter0 reactions · 1 comment
- Aug 2, 2026chore(deps): Bump the all-dependencies group across 1 directory with 6 updates — kulla/analytics-mfnf0 reactions · 1 comment
- Jul 29, 2026build(deps): update jupyter-ai requirement from >=3.0.0 to >=3.1.1 — jo-hoe/ai-juypter0 reactions · 1 comment
- Jul 26, 2026Fix missing import — jupyter-ai-contrib/jupyter-ai-acp-client0 reactions
- Jul 12, 2026chore(deps): Bump jupyter-ai from 3.0.0 to 3.0.1 in the all-dependencies group across 1 directory — kulla/analytics-mfnf0 reactions
- Jul 10, 2026Add tags in settings schema — jupyterlab/jupyterlab0 reactions · 7 comments
- Jul 1, 2026build(deps): update jupyter-ai requirement from >=3.0.0 to >=3.0.1 — jo-hoe/ai-juypter0 reactions · 1 comment
- Jun 17, 2026build(deps): update jupyter-ai-magics requirement from >=2.0 to >=2.31.7 — jo-hoe/ai-juypter0 reactions
- Jun 14, 2026enhancement: be able to call personas from cell magic — jupyter-ai-contrib/jupyter-ai-magic-commands0 reactions
- Jun 6, 2026[Add] Jupyter AI (jupyterlab/jupyter-ai) — PyTorchKR/landscape0 reactions
- Jun 5, 2026Use jupyter-mcp-manager — jupyter-ai-contrib/jupyter-ai-persona-manager0 reactions · 5 comments
- Mar 25, 2026Release with branch protection rules & no GitHub token fail — jupyter-server/jupyter_releaser0 reactions · 2 comments
- Mar 18, 2026Empower large language model (LLM) agents to write NaaVRE compatible code — NaaVRE/NaaVRE0 reactions · 4 comments
- Feb 26, 2026Add Conda Forge feedstock link to README — jupyter-ai-contrib/jupyter-ai-litellm0 reactions
- Dec 2, 2025Bump jupyter-ai from 2.31.6 to 2.31.7 — kbase/cdm-jupyterhub0 reactions
- Apr 3, 2025Send secrets to the kernel — jupyterlab-contrib/jupyter-secrets-manager0 reactions · 1 comment
- Feb 3, 2025Why don't you make Jupyter-Assistant as an extension of Jupyterlab? — guyq1997/Jupyter-Assistant0 reactions · 1 comment
- Aug 12, 2024Overwrite default prompts — FZJ-JSC/jupyter-ai-blablador0 reactions · 1 comment
- Jul 26, 2024Collating list traits fails when only one is given - regression in traitlets 5.13.0 — ipython/traitlets0 reactions · 2 comments
- Mar 12, 2024Empty "Section Navigation" in user docs — jupyter-server/jupyter-scheduler0 reactions · 3 comments
- Feb 18, 2024Together.ai provider added — MahdiDavari/jupyter-ai0 reactions
- Dec 18, 2023Explore integration with jupyter-ai — h2oai/sql-sidekick0 reactions
- Sep 4, 2023vs Jupyter-AI — chapyter/chapyter0 reactions · 1 comment
On Bluesky · 6
- Jun 1, 2025GitHub - jupyterlab/jupyter-ai: A generative AI extension for JupyterLab https://github.com/jupyterlab/jupyter-ai — @tech-trending.bsky.social4 likes and reposts
- Jun 1, 2025Jupyter Notebookと生成AIの組み合わせ、あると思います。チャット用のサイドウィンドウを表示したり、%%aiでNotebookの中から生成AIに問い合わせできたり。各種AI利用の他、Ollamaなどにも対応してるのでローカルLLMも利用可。 — @matsuu.bsky.social3 likes and reposts
- Feb 1, 2026Ah like Jupyter AI? github.com/jupyterlab/j... Basically allows you to use "%%ai do something" in cells. — @rreverser.com1 likes and repost · 1 reply
- Apr 16, 2025ChatGPT's data analyst mode is great but it's annoying when the environment resets and it has to start over. Also, what if I want to save… — @siriusli.bsky.social1 likes and repost
- Jan 1, 2025Try JupyterAI. Run any LMM from a local Jupyter nitebook. jupyterlab/jupyter-ai: A generative AI extension for JupyterLab… — @biomattrs.bsky.social1 likes and repost
1 more on Bluesky
- Aug 6, 2023📦 jupyterlab / jupyter-ai ⭐ 972 (+77) 🗒 Python A generative AI extension for JupyterLab — @github-trending.bsky.social1 likes and repost
On Hacker News · 2
- Sep 3, 2023A generative AI extension for JupyterLab3 points · 4 comments
- Apr 21, 2023Generative AI Extension for JupyterLab3 points
On Stack Overflow · 1
- Aug 30, 2024Can I use github-copilot strait on jupyter-lab/notebook?2 votes
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,439 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
The file
We split this AGENTS.md into the rules it gives an agent
6 rules. About 0 are common, 1 is distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 24
Add a dependency to the package that needs it: jupyter-ai-core for what a terminal agent uses, jupyter-ai for the chat.
- Very specific: line 30
Do not edit the versions by hand.
- Very specific: line 46
When you add or change functionality in a subpackage under jupyter-ai-contrib/, put its contributor/developer documentation in that …
- Very specific: line 87
When you add a new subpackage dependency that should contribute docs, add it to submodules/manifest.json and run …
- Distinctive: line 137
Write the summary for users first, developers second.
- Very specific: line 161
Be precise about what's actually new vs. moved: Don't call something "upstreamed" if it never existed before.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AGENTS.md
Guidance for AI agents working in jupyter-ai and its subpackages.
What Jupyter AI is
As of v3, Jupyter AI is a set of subpackages, each living in its own repo under
the jupyter-ai-contrib org. This repo
holds the two metapackages that distribute a working set of them, under
python/:
jupyter-ai-core(python/jupyter-ai-core/): JupyterLab with the extensions that terminal coding agents need (jupyter-server-mcp,jupyterlab-commands-toolkit,jupyter-live-content), and default settings.jupyter-ai(python/jupyter-ai/): the agent chat. It depends onjupyter-ai-coreand adds the chat subpackages.
Both are mostly empty; the composition is recorded in their pyproject.toml
files, in submodules/manifest.json (a "pypi_name": "org/repo" map), and in
the Contributor Guide.
Packages and versions
- Add a dependency to the package that needs it:
jupyter-ai-corefor what a terminal agent uses,jupyter-aifor the chat. A dependency ofjupyter-ai-corereachesjupyter-aiusers too. - Both packages share one version and are released together: Jupyter Releaser
builds every package listed in
python_packagesin the rootpyproject.toml.jupyter-aipinsjupyter-ai-coreto that exact version. - Do not edit the versions by hand.
scripts/bump_version.py <spec>sets the version of both packages and the pin; Jupyter Releaser runs it during a release.python scripts/bump_version.py --checkverifies that they agree, and runs in CI.
Documentation lives with the code
Documentation is split by audience:
- User docs live solely in this repo, under
docs/source/users/. - Contributor and developer docs live in each subpackage's own repo. The main Jupyter AI docs site aggregates them into versioned subpages, so everything is readable in one place.
If you are working in a subpackage repo
When you add or change functionality in a subpackage under jupyter-ai-contrib/,
put its contributor/developer documentation in that subpackage's own repo,
not here. Create either or both of:
docs/source/contributors/index.md # → surfaces under Contributors on the main site
docs/source/developers/index.md # → surfaces under Developers on the main site- The
index.mdH1 becomes the subpage title — use the repo name by convention (e.g.# jupyter-ai-tools). - The two sections are independent; define one, both, or neither.
- You may ship a full subtree (nested pages + images); your
index.md's{toctree}structures it. - These pages flow up to https://jupyter-ai.readthedocs.io automatically once a
maintainer bumps the doc submodule pins (see below). You do not edit the
jupyter-airepo to publish subpackage docs.
This is a gradual rollout — most subpackages do not have these docs yet, so adding them is a genuine improvement, not a requirement to match existing repos.
If you are working in this (jupyter-ai) repo
The submodule-docs aggregation infrastructure lives here:
submodules/manifest.json— registry of doc submodules.submodules/<repo>/— git submodules, sparse-checked-out todocs/only.scripts/update-doc-submodules.sh— re-pins each submodule to the latest tag matching its version range inpython/*/pyproject.toml(PEP 440 viapackaging). Run by the Update submodule documentation workflow (workflow_dispatch), which opens a PR with the new pins.scripts/rtd-post-checkout.sh— Read the Docspost_checkouthook that sparse-initialises the submodules.docs/source/_ext/subpackage_docs.py— Sphinx extension that copies each submodule'sdocs/source/{contributors,developers}/into git-ignored staging dirs and injects them into the aggregation toctrees. Missing docs are silently skipped; the build stays green.docs/tests/— integration tests (realsphinx-buildagainst synthesized fixtures). The Docs build system CI workflow runs them on any change to the docs build system. Run them locally withpytest docs/tests.
When you add a new subpackage dependency that should contribute docs, add it to
submodules/manifest.json and run scripts/update-doc-submodules.sh.
Writing release notes
Each release has a page under docs/source/releases/<version>.md. The title,
date, and per-subpackage changelog are auto-generated (wrapped in
AUTO-GENERATED markers — don't edit those). Your job as a contributor is the
summary in the SUMMARY markers: a human-readable overview that a reader
sees before the raw changelog. Edit only between the SUMMARY markers; a re-run of
the release-notes workflow regenerates everything else and preserves your
summary.
The changelog covers every repo in submodules/manifest.json plus
EXTRA_CHANGELOG_REPOS in scripts/generate_release_notes.py. The manifest is
the doc-submodule registry, so a dependency whose docs we don't aggregate
(jupyterlab_chat, whose developer docs live on its own site) goes in
EXTRA_CHANGELOG_REPOS instead — its PRs then reach the release notes without
pulling its docs into this site. A dependency whose changelog is missing from a
generated page is registered in neither.
Generating the page (Step 0 workflow)
The page is produced by the "Step 0: Prep release documentation" workflow
(.github/workflows/prep-release-docs.yml), a manual workflow_dispatch. Run it
with the GitHub CLI:
gh workflow run "Step 0: Prep release documentation" \
--ref main \
-f version=v3.1.0 \
-f target-branch=mainversion— the release being prepped (e.g.v3.1.0).target-branch— the branch the release is cut from; patch releases of an older minor use that minor's maintenance branch (e.g.3.0.x) instead ofmain.
The workflow generates the page from the version floors in
python/*/pyproject.toml, commits it to a release-docs/<version> branch, and
opens a draft PR against the target branch. It is safe to re-run: it reuses
the same branch and open PR, merges the target branch in to pick up the latest
floors and docs, regenerates the auto sections, and preserves your hand-edited
summary. Watch a run with:
gh run watch "$(gh run list --workflow 'Step 0: Prep release documentation' \
-L1 --json databaseId --jq '.[0].databaseId')" --exit-statusWrite the summary for users first, developers second. Use these sections, in order (drop any that don't apply):
## Highlights— the handful of changes users will care about most.## Major bugs fixed— notable fixes, in plain "what was broken, now works" terms.## API changes— for extension developers: what they can now build, and the methods they'd implement.- Optional
:::{note}admonitions for caveats or forward-looking context. - The auto-generated per-subpackage changelog follows as the full changelog.
Style, learned from real edits
Lead with what a change does, not how it's built. Implementation details (transport, internal wiring) are noise in a summary.
Before: "Persona session state now flows over a Yjs awareness channel instead of REST, and message routing is driven by per-message metadata rather than
@-mentions. The old active-persona REST endpoints are removed."After: "The APIs powering the new in-chat controls are all built into the Persona API, so any persona can advertise its models, settings, and session usage and reuse the built-in chat UI — no custom REST API required."
Be precise about what's actually new vs. moved. Don't call something
"upstreamed" if it never existed before; reserve that for APIs genuinely moved
out of a specific package. (E.g. the report_*/update_* methods are new this
release; only cancel_response() was moved out of the ACP client into the base
Persona API.)
In ## API changes, list the methods a developer implements — real method
name, empty-argument-shape signature, one sentence each. Skip methods that are
only called for you (plumbing/implementation details).
Before: "
BasePersonagainsget_*accessors,report_*publishers, andapply_model_spec/apply_settings_specappliers."After:
report_model_configuration(model)— advertise the current model and its options, populating the model picker.report_usage(usage)— publish context-window, token, and cost usage for the live gauge.update_model(model_id)— switch the persona to the selected model.(Dropped
get_*readers andapply_*_spec— those are read by/called for the persona, not implemented by it.)
Drop parentheticals in Highlights. They read as hedging; fold the detail into the sentence or cut it.
Before: "works with JupyterLab 4.6+ (Jupyter YDoc v4)" · "switch its model, mode, and options (reasoning effort, permissions, and more)"
After: "works with JupyterLab 4.6+" · "switch the active agent's model, permission mode, effort, and other settings"
Use user-facing product language. Name things as a user sees them, not as the code does.
Before: "A new control row lets you pick which persona replies"
After: "A new input toolbar lets you pick which persona replies"
Admonitions use colon-fences, not backtick-fences, so Sphinx renders a note while plain-Markdown previews (GitHub, etc.) show prose instead of a code block:
:::{note}
The permission-requests API remains the only API specific to ACP agents.
:::Building and testing docs locally
pip install ./python/jupyter-ai-core "./python/jupyter-ai[docs]"
sphinx-build -b html docs/source docs/_build/html
pytest docs/tests # aggregation integration testsSee the Contributor Guide for the full development setup, the devrepo workflow, and design principles.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

