caudex
Run your Jupyter notebooks on Kaggle's free GPUs, from your terminal.
Write a notebook on your laptop, send it to Kaggle, watch it run, get your files back. No browser tabs, no dropdown menus, no refreshing a page to see if it finished.
It uses your own Kaggle account and your own free weekly quota. Your notebooks, credentials and outputs go straight to Kaggle from your machine — never through anyone else's servers — and every file stays on your machine.
Install
pip install caudex
To update later:
pip install --upgrade caudex
You need Python 3.11 or newer and a free Kaggle account.
caudex --version tells you what you have. On Windows, close any running
caudex first — an open shell or editor panel holds caudex.exe and the
upgrade fails on a file lock rather than a permissions problem.
Works on Windows, Linux, and macOS on Apple Silicon (M1 and later).
Intel Macs are not supported — pip will say it cannot find a matching
distribution rather than installing something that does not run.
Step 1 — connect your Kaggle account
You do this once.
caudex auth --setup
It will ask for your Kaggle username and an API key. To get the key:
- Go to kaggle.com, click your profile picture → Settings
- Scroll to API → click Create New Token
- A file called
kaggle.jsondownloads — open it in any text editor - Copy the two values into the prompt
Check it worked:
caudex whoami
Step 2 — make a notebook project
caudex init train.ipynb
This creates a folder with a starter notebook inside it, and tells you where it is. Open that notebook in Jupyter, VS Code, or whatever you normally use, and write your code.
One thing to know: anything you want to keep must be saved to /kaggle/working/.
model.save("/kaggle/working/model.keras")
df.to_csv("/kaggle/working/scores.csv", index=False)
That folder is the only thing that comes back to you. Everything else on the Kaggle machine disappears when the run ends.
Step 3 — run it
caudex execute --gpu
That one command does the whole job: uploads your notebook, starts it on Kaggle, streams the output to your screen as it happens, waits for it to finish, and downloads your files.
Leave off --gpu and it runs on a CPU instead — which doesn't use any of your GPU
hours, so it's the cheap way to check your code works before spending quota on it.
When it finishes you'll see where your files went, and a summary of how long each cell took.
The easier way: open the shell
Typing caudex on its own opens an interactive session:
██████╗ █████╗ ██╗ ██╗██████╗ ███████╗██╗ ██╗
██╔════╝██╔══██╗██║ ██║██╔══██╗██╔════╝╚██╗██╔╝
██║ ███████║██║ ██║██║ ██║█████╗ ╚███╔╝
██║ ██╔══██║██║ ██║██║ ██║██╔══╝ ██╔██╗
╚██████╗██║ ██║╚██████╔╝██████╔╝███████╗██╔╝ ██╗
╚═════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝
0.9.12
your-username · GPU 12h left
no project — try: init train.ipynb
/ commands ^C cancel ^D exit
Inside it you can drop the caudex prefix and the folder name — it remembers which
project you're working on:
> use ./my-experiment
> execute --gpu
> logs
Press / to see every command in a menu; arrow keys to pick one, Enter to accept it,
Enter again to run. Ctrl-C cancels whatever is running without closing the session.
Ctrl-D or exit leaves.
It remembers your history between sessions, and Tab completes commands, options and file paths.
Watching a long run
caudex ui
A live dashboard: your notebooks on the left, the current run's status and log tail on
the right, your remaining quota along the bottom. j/k to move, Enter to follow a
notebook's log, q to leave.
If you'd rather just tail the log:
caudex logs --follow
Things you'll want sooner or later
| I want to… | Type this |
|---|---|
| See how much GPU time I have left | caudex quota |
| List my notebooks on Kaggle | caudex notebooks |
| Check on a run I stopped watching | caudex status |
| See hardware, timing and quota for a run | caudex status --detail |
| See which notebooks are running right now | caudex notebooks --status |
| Re-check a long log without re-reading it | caudex logs --cursor, then --since N |
| Read the log of a run that failed | caudex logs |
| Download the results again | caudex pull |
| Download just the metrics, not the checkpoints | caudex pull --only "metrics*.json" |
| Download everything except the weights | caudex pull --exclude "*.pt" |
| Check whether an uploaded dataset is ready | caudex dataset status owner/name |
| Switch a project between CPU and GPU | caudex runtime use gpu |
| Find where my files are being saved | caudex paths show |
Run a .py script directly — no conversion |
caudex init train.py, then caudex execute |
Turn a .py script into a notebook (optional) |
caudex convert script.py |
| Use a Kaggle dataset in my notebook | caudex dataset attach owner/name |
Add --help to anything for the full list of options.
caudex pull works on any run, including one that crashed — whatever the
notebook wrote before it stopped comes back, which is usually the log you need.
And caudex dataset upload --update --message "epoch-2 weights" records why
this version exists, right on Kaggle.
Where your files go
Run caudex paths show and it will tell you exactly. By default:
- Your notebook projects live wherever you made them
- Results come back to a folder per notebook, under your user directory
- Your Kaggle token sits in
~/.kaggle/kaggle.json— the same file the officialkagglecommand uses, so the two work side by side
You can change where results land:
caudex paths set output_dir ~/kaggle-results
If something goes wrong
"Kaggle auth failed" — your token has expired or been revoked. Make a new one at
kaggle.com → Settings → API → Create New Token, then run caudex auth --setup again.
The run stops and says it timed out — that means caudex gave up watching, not that
your notebook died. It is probably still running on Kaggle and still using your quota.
Check it with caudex status, or use caudex execute --on-timeout cancel next time if
you'd rather it stopped the run too.
Your notebook produced no files — anything you want back has to be written to
/kaggle/working/. Files written anywhere else are thrown away when the run ends.
You ran out of GPU hours — Kaggle gives you a fixed number per week and resets them
on a fixed day; caudex quota shows both. CPU runs don't touch that budget, so you can
keep working while you wait.
Exit codes, for scripts
0 worked · 1 failed · 2 you typed something wrong · 124 gave up waiting
124 is deliberately not 1: a run that outlives your patience is not a run that broke.
Licence
Business Source License 1.1, from 0.6.0 onward. Free to use for real work; not to resell as a hosted service, and not to strip the licence check out of. It converts automatically to Apache-2.0 on 2030-08-20.
Versions 0.2.0–0.5.2 were released under Apache-2.0 and remain so permanently.
The full text ships in every release as LICENSE. For alternative licensing, contact
mdsohanurislamshuvo@gmail.com.
What talks to the network
| reaches | |
|---|---|
| notebooks, datasets, runs, outputs | kaggle.com only, with your credentials |
caudex auth --licence / --licence-key |
heliontechltd.com, when you run them |
| a gated command, at most once a day | heliontechltd.com — the licence check |
| free commands, and gated ones already checked today | nothing of ours |
Your Kaggle credentials are never sent to us and no file passes through our servers.
What needs a licence
From 0.7.0, the commands that send work to Kaggle need one. Getting it is free:
caudex auth --licence
Free without one — enough to see whether caudex is for you:
caudex quota |
how much GPU time you have left |
caudex notebooks |
your notebooks on Kaggle |
caudex whoami |
which account you are on |
caudex auth, caudex paths |
sign in, and find your own files |
caudex (the shell), and --help on anything |
look around |
Needs a licence — push, execute, pull, logs, status, watch, run,
ui, dataset, init, convert, runtime.
The check reads a file on your machine and is silent when it passes. It asks our server at most once a day, and if we are unreachable caudex keeps working for another two weeks rather than blaming your key for our outage.
From 0.8.0 that file holds a licence we sign. Its plan, expiry, id and the key it belongs to are covered by an Ed25519 signature, checked against a public key built into caudex — locally, no network. Editing the file no longer works.
Two honest caveats. A signature proves what your licence says, not that it is still live, which is what the daily check is for. And the public key sits in a binary you own, so this is not tamper-proofing — anyone who can patch that binary can bypass any check it makes. What changed is that forging a licence went from editing JSON in Notepad to patching a compiled extension.
Licences from 0.6.0 and 0.7.0 keep working and upgrade themselves the next time you run a command online.
Release files for caudex 0.10.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 10.6 MB
Release files / caudex-0.10.0-cp313-cp313-win_amd64.whl
| Download URL | caudex-0.10.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 951.7 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9fa121108ddb7e3580f027e1544fd125381764d01176119c7db6d7bc03d16f05
|
|
BLAKE2b-256 checksum How to use checksums |
f8961763c05afd512c95ee234c15fb3ac59309567b9fd609e927c9d16b0eef56
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logRelease files / caudex-0.10.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | caudex-0.10.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f2f617ebda9c02925041b1fff7d5f0ab70e54a92be6ce2e7256659f28796ceb2
|
|
BLAKE2b-256 checksum How to use checksums |
f80f2676359ea980eaace90c5258e27521096431a00dcc2de47a91c7d6ec20d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logRelease files / caudex-0.10.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | caudex-0.10.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
85a3f346fba73c5618e825786cbff16c07f14904e7ad5ab204d00189e9c929b3
|
|
BLAKE2b-256 checksum How to use checksums |
e88809cf35eee0c8f786a0af75751b57513bbf0b1a7dc787acac837275f85e4a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logRelease files / caudex-0.10.0-cp312-cp312-win_amd64.whl
| Download URL | caudex-0.10.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 951.1 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
599d795f34f9dbc35e36ef187d8e0a255e9d3762d4da9a20239b96093c4ce6dd
|
|
BLAKE2b-256 checksum How to use checksums |
e03e285651895210fa3aa9741d2243428cb3148e41ce3fbe25b4c3c220b596da
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logRelease files / caudex-0.10.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | caudex-0.10.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
b5af19151238af43e25f666a41f0f98fa6c7228131343402868cb6237fadaee2
|
|
BLAKE2b-256 checksum How to use checksums |
7f4f6308f64e0b009d7d0efe2c0aed6c7a8950860f3ef88e0bc8ae9fcac4afa5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logRelease files / caudex-0.10.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | caudex-0.10.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e5a31ccfa85efd134316a78df5e9f004162b0cf52eca41620b6ea9ceed0fab1b
|
|
BLAKE2b-256 checksum How to use checksums |
7b7d89cd23c077bda9a230d771942089528e75706d1fd68b75ba928f8cd46ef5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logRelease files / caudex-0.10.0-cp311-cp311-win_amd64.whl
| Download URL | caudex-0.10.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 999.0 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
5bfcf492624fb839f5ab06c6fd2e316e9576a3a1cce64c46e381aae69ea873c1
|
|
BLAKE2b-256 checksum How to use checksums |
2fef2293296dc587825b1641d1d41deb4cb50dc7e5cb7fe42111599f12a0966d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logRelease files / caudex-0.10.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | caudex-0.10.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
9f88d73b234b40b40b3be4be12b9e22ca0f1e1e9f357df17028a90c6aebf59d4
|
|
BLAKE2b-256 checksum How to use checksums |
451fad991bec330a98643ca7cb8c1da6aa2ce67f0e21d1cb88394773d2a17a23
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logRelease files / caudex-0.10.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | caudex-0.10.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ca1ebc49c9de210f334a6e2c6be409607751c60db9e60200236bd4d77ede036c
|
|
BLAKE2b-256 checksum How to use checksums |
688def7294313f23c2dbcd91bcb25519c7b40902e67bdb809ac396b17a44051b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency log