Skip to main content

Execute code on a remote JupyterHub kernel from any terminal — zero dependencies.

Project description

jupyterhub-exec

Execute code on a remote JupyterHub kernel from any terminal — zero external dependencies.

pip install jupyterhub-exec

Why

JupyterHub provides GPU compute. Your agent terminal does not. jh-exec bridges the two using the Jupyter kernel protocol over a raw WebSocket — no browser, no notebook UI, no library dependencies beyond the Python standard library.

┌─────────────────────────┐        WebSocket         ┌──────────────────────────┐
│   Agent Terminal (CPU)  │ ───────────────────────► │  JupyterHub Kernel (GPU) │
│   Claude Code / CLI     │ ◄─────────────────────── │  PyTorch / CUDA          │
└─────────────────────────┘        stdout stream      └──────────────────────────┘

Usage

# Execute a script on the remote GPU kernel
jh-exec run train.py

# Execute inline code
jh-exec exec "import torch; print(torch.cuda.is_available())"

# List running kernels
jh-exec kernels

# Start a new kernel
jh-exec new-kernel

Configuration

Set via environment variables or a .env file in the working or home directory:

JH_HOST=192.168.1.100
JH_PORT=8000
JH_USER=agent-01
JH_TOKEN=your_token_here
JH_TIMEOUT=600

Or pass directly:

jh-exec --host 192.168.1.100 --user agent-01 --token your_token run script.py

Python API

from jh_exec import execute, list_kernels, new_kernel

# Execute code, stream output to stdout
execute("import torch; print(torch.cuda.get_device_name(0))")

# List running kernels
kernels = list_kernels()

# Start a new kernel, get its ID
kid = new_kernel()

Dedicated GPU per agent

In jupyterhub_config.py:

def assign_gpu(spawner):
    gpu_map = {
        "agent-01": "0",
        "agent-02": "1",
        "agent-03": "2",
    }
    spawner.environment["CUDA_VISIBLE_DEVICES"] = gpu_map.get(spawner.user.name, "")

c.Spawner.pre_spawn_hook = assign_gpu

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jupyterhub_exec-0.1.0.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jupyterhub_exec-0.1.0-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

Details for the file jupyterhub_exec-0.1.0.tar.gz.

File metadata

  • Download URL: jupyterhub_exec-0.1.0.tar.gz
  • Upload date:
  • Size: 7.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.2

File hashes

Hashes for jupyterhub_exec-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b41569a6ea1d499af61f1b9609bc230dd7b2d84d8db28e62d077b931a7c944c8
MD5 fbdb007675fdeab5ef93be11e44f26b4
BLAKE2b-256 36a370786f4bfc17301875ac48e32cdf2963a37fe8b51961debfdaad1cc1570d

See more details on using hashes here.

File details

Details for the file jupyterhub_exec-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for jupyterhub_exec-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 de97dae038828a40bc51a29b6e97833680046830b498e436235efac3feae7d4a
MD5 f7257d8d170ad1e521c99618a1751c75
BLAKE2b-256 c61d8143a75b5104dd0895280d323f20d4f94a4db1febc0f9f3836c436db43a0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page