Jupyter Notebook
目次
動いている Jupyter カーネルで Python を少しずつ試します(hamelnb)。
skill の情報
| 提供元 | 追加インストール — hermes skills install official/data-science/jupyter-notebook で導入します |
| パス | optional-skills/data-science/jupyter-notebook |
| バージョン | 1.0.0 |
| 作者 | Hermes Agent |
| ライセンス | MIT |
| 対応プラットフォーム | linux, macos, windows |
| タグ | jupyter, notebook, repl, data-science, exploration, iterative |
参考: SKILL.md 全文
Jupyter Notebook (hamelnb live kernel)
動いている Jupyter カーネルを通じて、状態が残る Python の REPL を使えるようにします。変数は 実行をまたいで残ります。状態を少しずつ積み上げたいとき、API を触って試したいとき、DataFrame を 覗きたいとき、込み入ったコードを何度も直したいときは、execute_code ではなくこちらを使います。
他のツールとの使い分け
| ツール | こんなとき |
|---|---|
| この skill | 少しずつ試す作業、手順をまたいで状態を残したいとき、データサイエンス、機械学習、「ちょっと試して確かめたい」 |
execute_code |
hermes のツール(web_search、ファイル操作)を使う、一度きりのスクリプト。状態は残りません。 |
terminal |
シェルのコマンド、ビルド、インストール、git、プロセスの管理 |
目安: その作業に Jupyter ノートブックが欲しくなるなら、この skill を使ってください。
前提条件
- uv が入っていること(確認:
which uv) - JupyterLab が入っていること:
uv tool install jupyterlab - Jupyter サーバーが動いていること(下の「セットアップ」を参照)
セットアップ
hamelnb のスクリプトの場所:
SCRIPT="$HOME/.agent-skills/hamelnb/skills/jupyter-live-kernel/scripts/jupyter_live_kernel.py"まだクローンしていない場合:
git clone https://github.com/hamelsmu/hamelnb.git ~/.agent-skills/hamelnbJupyterLab を起動する
すでにサーバーが動いていないか確かめます:
uv run "$SCRIPT" servers見つからなければ、起動します:
jupyter-lab --no-browser --port=8888 --notebook-dir=$HOME/notebooks \
--IdentityProvider.token='' --ServerApp.password='' > /tmp/jupyter.log 2>&1 &
sleep 3補足: ローカルのエージェントから触れるように、トークンとパスワードを無効にしています。 サーバーは画面を持たずに動きます。
REPL 用のノートブックを作る
REPL だけあればよく、既存のノートブックがない場合は、最小限のノートブックファイルを作ります:
mkdir -p ~/notebooks空のコードセルを 1 つだけ持つ最小の .ipynb を JSON で書き、Jupyter の REST API 経由で カーネルのセッションを開始します:
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"}}'基本の流れ
どのコマンドも構造化された JSON を返します。トークンを節約するため、必ず --compact を 付けてください。
1. サーバーとノートブックを探す
uv run "$SCRIPT" servers --compact
uv run "$SCRIPT" notebooks --compact2. コードを実行する(主に使う操作)
uv run "$SCRIPT" execute --path <notebook.ipynb> --code '<python code>' --compactexecute をまたいで状態は残ります。変数も import もオブジェクトも、すべて生き続けます。
複数行のコードは $'...' の引用で書けます:
uv run "$SCRIPT" execute --path scratch.ipynb --code $'import os\nfiles = os.listdir(".")\nprint(f"Found {len(files)} files")' --compact3. 生きている変数を覗く
uv run "$SCRIPT" variables --path <notebook.ipynb> list --compact
uv run "$SCRIPT" variables --path <notebook.ipynb> preview --name <varname> --compact4. ノートブックのセルを編集する
# 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> --compact5. 検証(再起動して全実行)
ユーザーがまっさらな状態での検証を求めたときや、ノートブックが上から下まで通ることを 確かめたいときだけ使ってください:
uv run "$SCRIPT" restart-run-all --path <notebook.ipynb> --save-outputs --compact実際に使って分かったこと
- サーバー起動後の最初の実行はタイムアウトすることがあります — カーネルの準備に少し
かかります。タイムアウトしたら、もう一度実行するだけで大丈夫です。
- カーネルの Python は JupyterLab の Python です — パッケージはその環境に入っている
必要があります。追加のパッケージが要るなら、先に JupyterLab のツール環境へ入れてください。
- --compact を付けるとトークンがかなり減ります — 必ず付けてください。付けないと JSON の
出力がとても長くなります。
- 純粋に REPL として使うなら、scratch.ipynb を作って、セルの編集は気にせず
executeを
繰り返すだけにします。
- 引数の順番が効きます —
--pathのようなサブコマンドのフラグは、その下のサブコマンドの
前に置きます。たとえば variables --path nb.ipynb list であって、 variables list --path nb.ipynb ではありません。
- セッションがまだ無い場合は、REST API から開始する必要があります(「セットアップ」を
参照)。生きたカーネルのセッションがないと、このツールは実行できません。
- エラーは JSON で返ります。トレースバック付きなので、
enameとevalueを読んで何が
起きたか把握してください。
- websocket がときどきタイムアウトします — 一部の操作は、特にカーネルの再起動直後に、
1 回目でタイムアウトすることがあります。問題として上げる前に一度やり直してください。
- そのホストで websocket が毎回タイムアウトするなら、zmq の通信に切り替えます:
uv run "$SCRIPT" execute --transport zmq ...。症状は、execute のたびに 「Websocket execution may already have reached the kernel, so auto fallback was skipped」が返ることです。カーネル自体はきちんと動いています(REST では execution_state=idle が返り、execution_count も増えます)。壊れているのは websocket の 返信経路だけです。zmq の通信は jupyter_client を直接使うので、この問題を回避できます。
- REST だけで使うサーバーを新しく立てるときは、
--ServerApp.disable_check_xsrf=Trueを
足してください。付けないと POST /api/sessions が "'_xsrf' argument missing from POST" を返し、カーネルのセッションを作れません。
タイムアウトの既定値
このスクリプトは 1 回の実行につき 30 秒を既定のタイムアウトにしています。長くかかる処理には --timeout 120 を渡してください。最初のセットアップや重い計算では、60 秒以上のゆとりのある 値にします。