Directory → SKILL
SKILLoptionalHermes Optional Skills

Jupyter Notebook

Iterative Python via live Jupyter kernel (hamelnb)

jupyternotebookrepldata-scienceexplorationiterativeOptionalHermes skill
Last registry verification2026-08-18v1.0.0Hermes Agent
Plain meaning

What does it add to Hermes?

Iterative Python via live Jupyter kernel (hamelnb)

Jupyter Notebook is a skill related to extending the agent. It adds a capability or workflow to Hermes. The publisher description explains the intent, while granted permissions determine what it can actually do.

This plain-language explanation is based on the publisher description. The original text remains visible for verification.

Use it when

Use it when your goal in extending the agent is clear and you can limit it to the data and actions it actually needs.

Skip it when

Do not add it merely to experiment when Hermes already has a simpler path, or when you cannot review its source and permissions.

Who is it for?

Best for users who want a repeatable way of working inside Hermes.

Safe first test

Start with non-sensitive data and a small task whose result can be verified and reversed.

Original publisher description

Iterative Python via live Jupyter kernel (hamelnb)

✓
Data source

This entry was indexed from Hermes Optional Skills. Our explanation interprets the type and domain without inventing a capability not present upstream.

!
Security review

The source is official or editorially reviewed, but you still need to review permissions and version compatibility.

Safe setup path

Inspect, install, then test.

  1. 01
    Open the source

    Match the publisher, license, and description to your need. Check the real update history.

  2. 02
    Review permissions and secrets

    Never paste a secret value into this site. Use environment-variable names and grant the smallest scope.

  3. 03
    Copy setup only after review

    The controls below copy text. They do not execute commands on your device.

  4. 04
    Test with a non-sensitive task

    Inspect the visible tools, then exclude write or delete tools you do not need.

Install command

Review the command, then copy it.

hermes skills install jupyter-notebook

Hermes Belarabi does not execute this command. Installation happens on your device and remains subject to Hermes scanning and your review.

The full skill definition

Exactly what Hermes loads when this skill runs.

Reproduced from the official documentation. Read it before enabling the skill: this text becomes the agent's instructions.

Iterative Python via live Jupyter kernel (hamelnb).

Skill metadata

A lookup table. Do not read it all; find the row that applies to you.

SourceOptional — install with hermes skills install official/data-science/jupyter-notebook
Pathoptional-skills/data-science/jupyter-notebook
Version1.0.0
AuthorHermes Agent
LicenseMIT
Platformslinux, macos, windows
Tagsjupyter, notebook, repl, data-science, exploration, iterative

Reference: full SKILL.md

Explains the idea itself. Read it slowly; the later sections build on it.

Gives you a stateful Python REPL via a live Jupyter kernel. Variables persist across executions. Use this instead of execute_code when you need to build up state incrementally, explore APIs, inspect DataFrames, or iterate on complex code.

When to Use This vs Other Tools

Explains the idea itself. Read it slowly; the later sections build on it.

ToolUse When
This skillIterative exploration, state across steps, data science, ML, "let me try this and check"
execute_codeOne-shot scripts needing hermes tool access (web_search, file ops). Stateless.
terminalShell commands, builds, installs, git, process management

Rule of thumb: If you'd want a Jupyter notebook for the task, use this skill.

Prerequisites

Explains the idea itself. Read it slowly; the later sections build on it.

  1. uv must be installed (check: which uv)
  2. JupyterLab must be installed: uv tool install jupyterlab
  3. A Jupyter server must be running (see Setup below)

Setup

Ordered, practical steps. Run one and confirm it worked before moving on.

The hamelnb script location:

Text1 line
SCRIPT="$HOME/.agent-skills/hamelnb/skills/jupyter-live-kernel/scripts/jupyter_live_kernel.py"

If not cloned yet:

Text1 line
git clone https://github.com/hamelsmu/hamelnb.git ~/.agent-skills/hamelnb

Starting JupyterLab

Check if a server is already running:

Text1 line
uv run "$SCRIPT" servers

If no servers found, start one:

Text3 lines
jupyter-lab --no-browser --port=8888 --notebook-dir=$HOME/notebooks \
  --IdentityProvider.token='' --ServerApp.password='' > /tmp/jupyter.log 2>&1 &
sleep 3

Note: Token/password disabled for local agent access. The server runs headless.

Creating a Notebook for REPL Use

If you just need a REPL (no existing notebook), create a minimal notebook file:

Text1 line
mkdir -p ~/notebooks

Write a minimal .ipynb JSON file with one empty code cell, then start a kernel session via the Jupyter REST API:

Text3 lines
curl -s -X POST http://127.0.0.1:8888/api/sessions \
  -H "Content-Type: application/json" \
  -d '{"path":"scratch.ipynb","type":"notebook","name":"scratch.ipynb","kernel":{"name":"python3"}}'

Core Workflow

Explains the idea itself. Read it slowly; the later sections build on it.

All commands return structured JSON. Always use --compact to save tokens.

1. Discover servers and notebooks

Text2 lines
uv run "$SCRIPT" servers --compact
uv run "$SCRIPT" notebooks --compact

2. Execute code (primary operation)

Text1 line
uv run "$SCRIPT" execute --path <notebook.ipynb> --code '<python code>' --compact

State persists across execute calls. Variables, imports, objects all survive.

Multi-line code works with $'...' quoting:

Text1 line
uv run "$SCRIPT" execute --path scratch.ipynb --code $'import os\nfiles = os.listdir(".")\nprint(f"Found {len(files)} files")' --compact

3. Inspect live variables

Text2 lines
uv run "$SCRIPT" variables --path <notebook.ipynb> list --compact
uv run "$SCRIPT" variables --path <notebook.ipynb> preview --name <varname> --compact

4. Edit notebook cells

Text13 lines
# View current cells
uv run "$SCRIPT" contents --path <notebook.ipynb> --compact

# Insert a new cell
uv run "$SCRIPT" edit --path <notebook.ipynb> insert \
  --at-index <N> --cell-type code --source '<code>' --compact

# Replace cell source (use cell-id from contents output)
uv run "$SCRIPT" edit --path <notebook.ipynb> replace-source \
  --cell-id <id> --source '<new code>' --compact

# Delete a cell
uv run "$SCRIPT" edit --path <notebook.ipynb> delete --cell-id <id> --compact

5. Verification (restart + run all)

Only use when the user asks for a clean verification or you need to confirm the notebook runs top-to-bottom:

Text1 line
uv run "$SCRIPT" restart-run-all --path <notebook.ipynb> --save-outputs --compact

Practical Tips from Experience

Explains the idea itself. Read it slowly; the later sections build on it.

  1. First execution after server start may timeout — the kernel needs a moment to initialize. If you get a timeout, just retry.
  1. The kernel Python is JupyterLab's Python — packages must be installed in that environment. If you need additional packages, install them into the JupyterLab tool environment first.
  1. --compact flag saves significant tokens — always use it. JSON output can be very verbose without it.
  1. For pure REPL use, create a scratch.ipynb and don't bother with cell editing. Just use execute repeatedly.
  1. Argument order matters — subcommand flags like --path go BEFORE the sub-subcommand. E.g.: variables --path nb.ipynb list not variables list --path nb.ipynb.
  1. If a session doesn't exist yet, you need to start one via the REST API (see Setup section). The tool can't execute without a live kernel session.
  1. Errors are returned as JSON with traceback — read the ename and evalue fields to understand what went wrong.
  1. Occasional websocket timeouts — some operations may timeout on first try, especially after a kernel restart. Retry once before escalating.
  1. If websocket consistently times out on this host, force zmq transport: uv run "$SCRIPT" execute --transport zmq .... Symptom: every execute returns "Websocket execution may already have reached the kernel, so auto fallback was skipped". The kernel actually ran fine (REST shows execution_state=idle and execution_count increments) — only the websocket reply channel is broken. zmq transport uses jupyter_client directly and sidesteps the issue.
  1. When starting a fresh server for REST-only use, add --ServerApp.disable_check_xsrf=True — otherwise POST /api/sessions returns "'_xsrf' argument missing from POST" and kernel session creation fails.

Timeout Defaults

Explains the idea itself. Read it slowly; the later sections build on it.

The script has a 30-second default timeout per execution. For long-running operations, pass --timeout 120. Use generous timeouts (60+) for initial setup or heavy computation.