Vibeleaderboard
Index / tool
Visit github.com
Category
Developer Tools
Rank
No. 1538Tools index

Previous survey · No. 1494 ·

Pricing
Open Source
Type
TOOL
Use case
Coding
Interfaces
CLI · Editor Extension
GitHub
14 stars
Latest release
v0.2.5
Date

About

Tithon is a host-side daemon that keeps a Jupyter kernel and its output alive independently of any connected client, so closing an editor, losing SSH, or restarting the daemon doesn't kill a running session. It ships a CLI plus a VSCode extension that opens a percent-format .py file as a live notebook, journaling output to SQLite and storing images as files so AI agents can read them directly instead of parsing base64.

What it does

Tithon moves ownership of an interactive Python session off your editor and onto the machine that runs it. A background service starts the Jupyter kernel as a detached process, records every message that kernel publishes in an append-only log, and keeps a folded view of the current display so a reconnecting client catches up from the last event it saw. Plots are written to disk as ordinary image files. You drive it from a terminal command or from a VS Code extension that treats a plain Python script with cell markers as a notebook.

Why it's ranked here

It fixes a specific, common failure with a design that holds up. Losing a long GPU run's output to a dropped SSH connection is a real cost, and the fix here is structural: the kernel is not a child of the service, so even killing the service leaves it running and reattachable. The tests pin down the hard parts, such as a slow client being cut off instead of growing memory, and late output still landing in the saved result. Against that: it is self-declared alpha, has one listed author, and runs on Unix only.

What's good

The storage choices are sound. Plot images live as real files deduplicated by content hash, so a chart redrawn every training step commits once, and an agent can open the picture instead of decoding base64. Progress bars and sliders come back at their current value rather than their starting one. Outputs never touch the script itself, so diffs stay clean, and an optional project folder of cell outputs can be committed so collaborators see results. The service listens only on a local socket readable by its owner, with no network port.

Tradeoffs

Native Windows is unsupported; the docs send Windows users to WSL. The extension and the service must share a host, so pairing an editor on a laptop with a remote box means forwarding the socket yourself. The project calls itself alpha and warns of rough edges. Pylance users see a brief tab flicker on same-file go-to-definition, a documented upstream issue whose workaround is switching to the ty language server. Kernels live forever unless you opt in to an idle timeout.

How to use it well

Best fit: someone running long training or data jobs on a remote Linux machine through VS Code Remote-SSH or a Tunnel, who wants to close the laptop and return to live output. Install the Python package on the host and the extension in the editor; the extension can start the service itself. Set an idle timeout if you leave many sessions open, since abandoned kernels otherwise keep their memory. It does not replace the JupyterLab browser interface, and it does not manage Python environments for you.

Technical notes+

src/tithon/cli.py defines the daemon, run, attach, status, restart, interrupt, kill and shutdown subcommands and speaks JSON ops over websockets on a unix socket via unix_connect; src/tithon/__main__.py enables python -m tithon for extension hosts without the script on PATH. docs/SPEC.md describes the kernel spawned through jupyter_client under setsid with a persisted connection file, a per-session SQLite WAL journal (executions, messages, artifacts tables), folding that applies carriage-return semantics and collapses update_display_data by a session-scoped display_id, a liveness watchdog (TITHON_KERNEL_WATCHDOG_POLL, default 5 s), and process-group termination only after group ownership is proven. test/test_backpressure.py asserts a subscriber queue capped at 5 stays bounded across 1000 broadcasts and that a stalled sender is dropped after SEND_TIMEOUT; test/test_barrier.py covers the shell-reply router and the idle-status completion barrier (IDLE_BARRIER_TIMEOUT >= 5). pyproject.toml declares Development Status 3 - Alpha, a hatchling build, and dependencies jupyter_client, ipykernel and websockets; extension/package.json registers the tithon-py notebook type and a tithon-widget renderer. docs/known_issue.md documents the Pylance mitigation for a phantom duplicate-extension tab (ADR-062).

Observed

License
MIT
Language
Python daemon and CLI; TypeScript VS Code extension
Python requirement
Python 3.11 or newer
Packaging
PyPI package (pip install tithon) plus a VS Code Marketplace extension
Interfaces
CLI and VS Code notebook extension; no MCP server or network API
Platform
Unix-like hosts, developed and tested on Linux; native Windows unsupported (WSL recommended)
Transport
Owner-only (0600) unix domain socket, no TCP listener
Tests
pytest suite in a test directory, including backpressure and completion-barrier tests
Maturity
Declares Development Status 3 - Alpha

Read from README.md, pyproject.toml, docs/SPEC.md, docs/known_issue.md, src/tithon/cli.py, src/tithon/__main__.py, extension/package.json, extension/README.md, LICENSE, CHANGELOG.md, test/test_backpressure.py, test/test_barrier.py.

What it can do

  • Open a percent-format .py file as a live notebook in VSCode

    percent-format .py file → Live notebook view

  • Journal notebook output to a database

    Kernel output → SQLite records

  • Store notebook images as files instead of embedding base64

    Image output from kernel → Image files

Tags

jupytervscode-extensionpythonremote-developmentsshkernelnotebookdaemon

Tech Stack

Python

Comments (0)

No comments yet

Editorially curated, with community endorsements as a secondary signal. Corrections welcome.