Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add fmschulz/omics-skills --skill notebooksgit clone --depth 1 https://github.com/fmschulz/omics-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/fmschulz/omics-skills/notebooks)<a href="https://agentmods.dev/skills/fmschulz/omics-skills/notebooks"><img src="https://agentmods.dev/badge/skills/fmschulz/omics-skills/notebooks/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/fmschulz/omics-skills/notebooks"><img src="https://agentmods.dev/badge/skills/fmschulz/omics-skills/notebooks.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 16 findings, up to medium
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- medium MCP Rug Pull · line 40 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 54 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 78 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 79 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 87 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 89 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 90 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 92 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 93 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 128 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 180 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 181 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 183 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 202 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 203 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
- medium MCP Rug Pull · line 204 uvx/uv tool run commands without ==version create a rug-pull risk.Fix: Pin the version: uvx package-name==1.2.3
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00029 | $0.03626 |
| Opus 5.5 | $0.00012 | $0.01450 |
| Sonnet 5.5 | $0.00006 | $0.00725 |
| Haiku 4.5 | $0.00003 | $0.00363 |
Grade A, and why
notebooks scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 23d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 232 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Notebooks
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.
Instructions
-
Pick the format.
- New notebook: write a marimo
.pynotebook. Use the canonical cell layout (one concept per cell, final expression renders, noifguards around outputs, notry/exceptfor control flow). - Existing
.ipynbto extend or polish: keep it as Jupyter unless the user asks to convert. - Conversion: see "Convert between marimo and Jupyter" below.
- New notebook: write a marimo
-
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
.pynotebook:- Markdown cells use one plain triple-quoted string:
mo.md(r"""...""")ormo.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. - Do not leave empty generated cells, whitespace-only cells, or
@app.cell def _(): returnplaceholders. Remove them before final verification. - Do not accept a marimo "fix" prompt blindly. If one is accepted during interactive editing, inspect the diff immediately and remove unintended PEP 723/header/cell churn.
- Markdown cells use one plain triple-quoted string:
-
Set up the kernel and dependencies.
- Marimo. Pin dependencies in the PEP 723 script header at the top of the
.pyfile:
Run with# /// script # requires-python = ">=3.12" # dependencies = [ # "marimo", # "polars", # "duckdb", # "matplotlib", # # ... add every import used in the notebook # ] # ///uvx marimo run --sandbox <notebook.py>or edit interactively withuvx marimo edit --sandbox <notebook.py>. The sandbox reads the header and resolves the notebook environment. - Jupyter. Register a named ipykernel for the project's pixi env before the first execution and pin the kernel in the notebook metadata. The kernel name is mandatory: the generic
python3kernel leaks the system interpreter.
Then inpixi run python -m ipykernel install --user --name <project> --display-name "<project> (pixi)"<notebook>.ipynbconfirm:
Add every import used in the notebook to"kernelspec": {"name": "<project>", "display_name": "<project> (pixi)"}pixi.tomlso the kernel can resolve it from a clean install.
- Marimo. Pin dependencies in the PEP 723 script header at the top of the
What ships with it
23 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- fixtures/simple_jupyter.ipynb 390 B
- fixtures/simple_marimo.py 212 B runs code
- references/data_loading_duckdb.md 2.4 KB
- references/DEPLOYMENT.md 1.2 KB
- references/EXPORTS.md 2.2 KB
- references/latex.md 1.7 KB
- references/notebook_structure.md 2.8 KB
- references/pixi_jupyter.md 3.4 KB
- references/plot_style.md 2.6 KB
- references/PYTEST.md 5.2 KB
- references/SQL.md 1.6 KB
- references/STATE.md 2.5 KB
- references/TOP-LEVEL-IMPORTS.md 1.6 KB
- references/UI.md 3.6 KB
- references/verification.md 1.8 KB
- references/widgets.md 7.7 KB
- scripts/convert_notebook.py 1.3 KB runs code
- scripts/execute_notebook.py 2.1 KB runs code
- scripts/lint_notebook_structure.py 2.9 KB runs code
- templates/duckdb_bootstrap.sql 447 B
- templates/jupyter_kiss_template.py 4.7 KB runs code
- templates/marimo_notebook_template.py 2.0 KB runs code
- templates/pixi.toml 543 B
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 23d ago Changed · -1 lines · -5 tokens per session 5e9cd8269c32
- 1mo ago First seen · 233 lines · 34 tokens per session scan A b33601307463
notebooks is a skill published in the GitHub repository fmschulz/omics-skills (11 stars, last pushed 23d ago), licensed MIT. It adds 29 tokens to every session and 3,626 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
imaging-data-commons
Queries and downloads public cancer imaging data from NCI Imaging Data Commons. Supports IDC collection discovery, DICOM access, radiology (CT, MR, PET) and pathology AI datasets, metadata SQL, visualization, licensing, and citations. Uses public metadata and download routes without authentication; optional BigQuery…
genomic-intelligence
Predicts regulatory features, gene structure, and expression directly from DNA sequence using Genomic Intelligence's hosted transformer DNA language models — no local GPU or model weights. Six tasks over a REST API and a hosted MCP server (keyless public demo): promoter regions, splice donor/acceptor sites, enhancer…
lab-hardware-cad
Designs custom laboratory hardware as parametric build123d models and exports fabrication artifacts as STEP, STL, and DXF files - microfluidic chips and molds, optomechanical mounts and breadboard adapters, cuvette and microplate holders, tube racks, animal-behavior rigs, and 3D-printed instrument fixtures. Use when a…
onekgpd
Queries the 1000 Genomes Project dataset (3,202 whole-genome-sequenced individuals, GRCh38) at the level of individual participants. Use when a question is about individuals or variants in the 1000 Genomes Project cohort: which individuals carry variants matching specific criteria in a gene or region, which…
relsa-severity-assessment
Supports multivariate severity assessment and exploratory endpoint-time score forecasting for laboratory animal studies using the RELSA (RELative Severity Assessment) score and ARIMA-based foRcast forecasting. Use when combining welfare readouts — body weight or weight loss, body temperature, clinical or nesting…
scientific-slides
Builds slide decks and presentations for research talks. Used for making PowerPoint slides, conference presentations, seminar talks, research presentations, thesis defense slides, or any scientific talk. Provides slide structure, design templates, timing guidance, and visual validation. Works with PowerPoint and LaTeX…