Jupyter To Marimo
ericmjl/llamabot
Convert a Jupyter notebook (.ipynb) to a marimo notebook (.py).
Author, execute, and deliver reproducible analysis notebooks in marimo (default) or Jupyter, with all cells run end-to-end and figures embedded.
$ npx skills add majiayu000/claude-skill-registry --skill notebooks -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install majiayu000/claude-skill-registry notebooks --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/majiayu000/claude-skill-registry.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/bash/notebooks .claude/skills/notebooks && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "notebooks" agent skill from https://github.com/majiayu000/claude-skill-registry/tree/main/skills/bash/notebooks into .claude/skills/notebooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "notebooks", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/majiayu000/claude-skill-registry/tree/main/skills/bash/notebooksType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add majiayu000/claude-skill-registry --skill notebooks -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install majiayu000/claude-skill-registry notebooks --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/claude-skill-registry.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/bash/notebooks .agents/skills/notebooks && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "notebooks" agent skill from https://github.com/majiayu000/claude-skill-registry/tree/main/skills/bash/notebooks into .agents/skills/notebooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "notebooks", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add majiayu000/claude-skill-registry --skill notebooks -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install majiayu000/claude-skill-registry notebooks --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/claude-skill-registry.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/bash/notebooks .cursor/skills/notebooks && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "notebooks" agent skill from https://github.com/majiayu000/claude-skill-registry/tree/main/skills/bash/notebooks into .cursor/skills/notebooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "notebooks", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/majiayu000/claude-skill-registry.git --path skills/bash/notebooks--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add majiayu000/claude-skill-registry --skill notebooks -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install majiayu000/claude-skill-registry notebooks --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/claude-skill-registry.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/bash/notebooks .gemini/skills/notebooks && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "notebooks" agent skill from https://github.com/majiayu000/claude-skill-registry/tree/main/skills/bash/notebooks into .gemini/skills/notebooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "notebooks", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install majiayu000/claude-skill-registry notebooksInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add majiayu000/claude-skill-registry --skill notebooks -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/majiayu000/claude-skill-registry.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/bash/notebooks .github/skills/notebooks && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "notebooks" agent skill from https://github.com/majiayu000/claude-skill-registry/tree/main/skills/bash/notebooks into .github/skills/notebooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "notebooks", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add majiayu000/claude-skill-registry --skill notebooks -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install majiayu000/claude-skill-registry notebooks --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/claude-skill-registry.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/bash/notebooks .opencode/skills/notebooks && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "notebooks" agent skill from https://github.com/majiayu000/claude-skill-registry/tree/main/skills/bash/notebooks into .opencode/skills/notebooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "notebooks", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
notebooksAuthor, execute, and deliver reproducible analysis notebooks in marimo (default) or Jupyter, with all cells run end-to-end and figures embedded.
Notebooks is an agent skill from majiayu000/claude-skill-registry. Author, execute, and deliver reproducible analysis notebooks in marimo (default) or Jupyter, with all cells run end-to-end and figures embedded. Also converts between marimo and Jupyter on request.
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `metadata.json`).
It sits in Data & Analytics, covering Jupyter notebooks. It works with Jupyter, marimo and Bash. The repository describes itself as: Searchable Claude Code skills catalog with source-linked guides and generated registry artifacts. The licence is MIT.
9 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 2d14a69. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
uvxuvpythonjupyterFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use uvx and uv, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Notebooks loads about 2.9k tokens when it runs. Until then it costs about 52 tokens; SKILL.md has 1,278 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from majiayu000/claude-skill-registry at commit 2d14a69, republished under its MIT licence (© majiayu000). 1,278 words, ~2,916 tokens.
.claude/skills/notebooks/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.A single skill for authoring, validating, and delivering reproducible analysis notebooks. Marimo is the default format; Jupyter is supported for existing .ipynb files and when a downstream tool requires JSON. Conversion between the two formats is part of this skill.
A notebook is not "done" until it has been executed end-to-end on a fresh kernel and every figure is embedded in the delivered file.
Pick the format.
.py notebook. Use the canonical cell layout (one concept per cell, final expression renders, no if guards around outputs, no try/except for control flow)..ipynb to extend or polish: keep it as Jupyter unless the user asks to convert.Outline before coding. Write the notebook plan (purpose, data sources, analysis steps, expected outputs/plots) as the first markdown cell, then implement against that plan.
Keep marimo cells clean. These are hard rules for every .py notebook:
mo.md(r"""...""") or mo.md(f"""...""") only when interpolation is required. Put the prose directly inside the string; never paste quoted string fragments such as " ... " lines inside the markdown body.@app.cell def _(): return placeholders. Remove them before final verification.Set up the kernel and dependencies.
.py file:# /// script
# requires-python = ">=3.12"
# dependencies = [
# "marimo",
# "polars",
# "duckdb",
# "matplotlib",
# # ... add every import used in the notebook
# ]
# ///uv run marimo run <notebook.py> (uv reads the header and resolves the env automatically) or with marimo edit --sandbox <notebook.py> for interactive work.python3 kernel leaks the system interpreter:pixi run python -m ipykernel install --user --name <project> --display-name "<project> (pixi)"<notebook>.ipynb confirm:"kernelspec": {"name": "<project>", "display_name": "<project> (pixi)"}pixi.toml (or the project's requirements.txt / environment.yml) so the kernel can resolve it from a clean install.Load data with project-relative paths. Prefer DuckDB for TSV/Parquet (duckdb.read_csv, duckdb.read_parquet). Avoid absolute paths and ~. Avoid hidden state from the runtime working directory.
Run checks and all cells to generate plots. Execute the notebook headlessly on a fresh kernel before delivery:
uvx marimo check <notebook.py> before export and fix every reported issue or warning, including empty-cells and markdown formatting. Then run uv run marimo export ipynb <notebook.py> -o <notebook.executed.ipynb> or uv run marimo run <notebook.py> for a non-interactive smoke run; for a deterministic HTML artifact, uv run marimo export html <notebook.py> -o <notebook.html>. Run uvx marimo check <notebook.py> again after the final edit/export cycle.python scripts/execute_notebook.py <notebook.ipynb> (writes <notebook>.executed.ipynb) or pixi run jupyter nbconvert --to notebook --execute --inplace <notebook.ipynb>.Evaluate the plots, then refine. This step is required, not optional. After the run-all execution:
Deliver pre-executed notebooks. The artifact handed back to the user must:
.ipynb (or in the marimo HTML export).pixi install + jupyter nbconvert --to notebook --execute (Jupyter) must reproduce the same notebook end-to-end.Convert between marimo and Jupyter when the user asks for it:
.ipynb → marimo .py: uvx marimo convert <notebook.ipynb> -o <notebook.py>, then uvx marimo check <notebook.py>, then clean up Jupyter artifacts (display() calls, %magics, indented final expressions, ipywidget usage). See references/widgets.md and references/latex.md for ipywidget→marimo and MathJax→KaTeX mappings..py → .ipynb: uvx marimo export ipynb <notebook.py> -o <notebook.ipynb>.| Task | Action |
|---|---|
| Author marimo notebook | Edit .py, run uv run marimo edit --sandbox <notebook.py> |
| Author Jupyter notebook | Register pixi kernel, set notebook kernelspec, edit .ipynb |
| Lint marimo notebook | uvx marimo check <notebook.py> |
| Execute marimo headlessly | uv run marimo export ipynb <notebook.py> -o <executed.ipynb> |
| Execute Jupyter headlessly | python scripts/execute_notebook.py <notebook.ipynb> |
Convert .ipynb → marimo | uvx marimo convert <notebook.ipynb> -o <notebook.py> |
Convert marimo → .ipynb | uv run marimo export ipynb <notebook.py> -o <notebook.ipynb> |
| Marimo references | references/MARIMO.md, references/UI.md, references/SQL.md, references/STATE.md, references/EXPORTS.md, references/PYTEST.md, references/TOP-LEVEL-IMPORTS.md, references/DEPLOYMENT.md |
| Conversion references | references/widgets.md, references/latex.md |
| Pixi + Jupyter | references/pixi_jupyter.md |
| Plot style | references/plot_style.md |
| Templates | templates/marimo_notebook_template.py, templates/jupyter_kiss_template.py |
| Headless executor | scripts/execute_notebook.py |
uv available on PATH, or marimo installed in the environment.pixi available and a pixi.toml (or equivalent env spec) for the project..py for marimo, .ipynb for Jupyter) with narrative markdown cells, code cells, and embedded figures.<notebook>.executed.ipynb or an .html export) where every cell has been run on a fresh kernel..ipynb).kernelspec set to a named pixi kernel.pixi.toml).marimo export ipynb or Jupyter nbconvert --execute exits zero.uvx marimo check <notebook.py> is run by default and reports no issues or warnings; do not treat exit code zero as enough if the output says "Found issues."mo.md(...), trailing empty cells, or return-only placeholder cells remain.# /// script
# requires-python = ">=3.12"
# dependencies = ["marimo", "polars", "duckdb", "matplotlib"]
# ///
import marimo
app = marimo.App(width="medium")
@app.cell
def _():
import marimo as mo
import polars as pl
import duckdb
import matplotlib.pyplot as plt
return mo, pl, duckdb, plt
@app.cell(hide_code=True)
def _(mo):
mo.md(r"""
# Analysis notebook
This notebook loads project data, validates it, and renders the requested figures.
""")
return
@app.cell
def _(duckdb):
df = duckdb.read_parquet("data/measurements.parquet").pl()
df.head()
return (df,)
@app.cell
def _(df, plt):
fig, ax = plt.subplots(figsize=(5, 3.2))
ax.scatter(df["x"], df["y"], s=10)
ax.set_xlabel("x (units)"); ax.set_ylabel("y (units)")
fig
returnThen:
uvx marimo check notebook.py
uv run marimo export ipynb notebook.py -o notebook.executed.ipynb
uvx marimo check notebook.py# One-time kernel registration in the project root:
pixi run python -m ipykernel install --user --name myproject --display-name "myproject (pixi)"
# After authoring, run end-to-end on a fresh kernel:
python skills/notebooks/scripts/execute_notebook.py notebooks/analysis.ipynb \
--kernel myproject \
--out notebooks/analysis.executed.ipynb.ipynb to marimouvx marimo convert notebooks/legacy.ipynb -o notebooks/legacy.py
uvx marimo check notebooks/legacy.py
uv run marimo export ipynb notebooks/legacy.py -o notebooks/legacy.executed.ipynbIssue: Jupyter notebook executes locally but fails on a teammate's machine.
Solution: The kernel was unpinned (python3) or used a packaged interpreter outside the project's pixi env. Re-register a named kernel and pin it in the notebook kernelspec.
Issue: Marimo cell does not render a figure.
Solution: The figure must be the final expression of the cell. Indented expressions inside if blocks or expressions buried before other statements will not render.
Issue: Figures look correct interactively but the executed file shows empty plots.
Solution: Code is mutating shared state across cells (e.g. plt.gcf() reuse). Build a fresh fig, ax = plt.subplots(...) per cell and return / display fig as the final expression.
Issue: Converted notebook fails marimo check.
Solution: Remove leftover display(...) calls, drop %magic lines that have no marimo equivalent, and rewrite ipywidget usage using mo.ui.* per references/widgets.md.
© majiayu000, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/bash/notebooks of majiayu000/claude-skill-registry.
Open the folder on GitHubat commit 2d14a69
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in majiayu000/claude-skill-registry, which our catalogue first saw on October 8, 2026.
Notebooks next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Notebooks this skillmajiayu000/claude-skill-registry | 666 | 1 repos | ~2.9k | Automated safety check: Pass | MIT | |
| Jupyter To Marimoericmjl/llamabot | 182 | 2 repos | ~475 | Automated safety check: Pass | None | |
| Marimobrycewang-stanford/Auto-Empirical-Research-Skills | 4.5k | — | ~2.8k | Automated safety check: Pass | Custom licence | |
| Jupyter Notebookmicrosoft/ai-agents-for-beginners | 77k | 8 repos | ~1k | Automated safety check: Pass | Apache-2.0 | |
| Wasm Compatibilityericmjl/llamabot | 182 | 2 repos | ~1.6k | Automated safety check: Pass | None | |
| Marimo Paircosanlab/nltools | 131 | 1 repos | ~3k | Automated safety check: Pass | MIT |
ericmjl/llamabot
Convert a Jupyter notebook (.ipynb) to a marimo notebook (.py).
brycewang-stanford/Auto-Empirical-Research-Skills
Reactive Python notebook system. An agent skill from brycewang-stanford/Auto-Empirical-Research-Skills.
microsoft/ai-agents-for-beginners
A skill your agent uses when the user asks to create, scaffold, or edit Jupyter notebooks (.ipynb) for experiments, explorations, or tutorials; prefer the bundled templates and run the helper script…
ericmjl/llamabot
Check if a marimo notebook is compatible with WebAssembly (WASM) and report any issues.
cosanlab/nltools
Work inside a running marimo notebook's kernel — execute code, create cells, and build a notebook as an artifact.
cosanlab/nltools
Write a marimo notebook in a Python file in the right format.
majiayu000/claude-skill-registry
Multi-source deep research using firecrawl and exa MCPs. An agent skill from majiayu000/claude-skill-registry.
majiayu000/claude-skill-registry
Neural search via Exa MCP for web, code, and company research.
majiayu000/claude-skill-registry
Unified media generation via fal.ai MCP — image, video, and audio.
majiayu000/claude-skill-registry
Interact with Zotero reference management libraries using the pyzotero Python client.
majiayu000/claude-skill-registry
Search scientific papers and retrieve structured experimental data extracted from full-text studies via the BGPT MCP server.
majiayu000/claude-skill-registry
Perform pairwise sequence alignment using Biopython Bio.Align.PairwiseAligner.
Categories
Author, execute, and deliver reproducible analysis notebooks in marimo (default) or Jupyter, with all cells run end-to-end and figures embedded. Notebooks is an agent skill from majiayu000/claude-skill-registry. Author, execute, and deliver reproducible analysis notebooks in marimo (default) or Jupyter, with all cells run end-to-end and figures embedded.
Notebooks fits situations like: tasks that involve Jupyter notebooks.
Run `npx skills add majiayu000/claude-skill-registry --skill notebooks -a claude-code`. Or copy the skill folder (skills/bash/notebooks in majiayu000/claude-skill-registry) into .claude/skills/notebooks in your project. Claude Code loads it when a task matches its description.
Run `npx skills add majiayu000/claude-skill-registry --skill notebooks -a codex`. Or copy the skill folder (skills/bash/notebooks in majiayu000/claude-skill-registry) into .agents/skills/notebooks in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add majiayu000/claude-skill-registry --skill notebooks -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/notebooks, .gemini/skills/notebooks, .github/skills/notebooks and .opencode/skills/notebooks in your project.
Going by SKILL.md and its folder, Notebooks needs the command-line tools its instructions call (uvx, uv, python and jupyter). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use uvx and uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Notebooks is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Notebooks: Jupyter To Marimo (ericmjl/llamabot, 182 stars), Marimo (brycewang-stanford/Auto-Empirical-Research-Skills, 4.5k stars), Jupyter Notebook (microsoft/ai-agents-for-beginners, 77k stars) and Wasm Compatibility (ericmjl/llamabot, 182 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
majiayu000 (a GitHub user) maintains it in majiayu000/claude-skill-registry, which has 666 GitHub stars. The repository holds 1,273 skills in this directory. The repository was last updated on October 7, 2026.
Source: majiayu000/claude-skill-registry on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.