Real-time collaborative notebook that thinks with you
TypeScript
54
650 commits
updated Feb 6, 2026
The notebook that thinks with you.
Try it out on: app.runt.run. It's stable for experimentation and real usage, actively developed.
In the Loop is an agentic notebook where AI, code, and prose work together in real-time. Never lose your outputs when tabs close. Collaborate with AI that sees your data, not just your code. Built on event-sourced architecture for persistent, collaborative computation.
As a long-time Jupyter contributor, I've always wanted to solve a core architectural limitation: computation and documentation are artificially coupled.
At Netflix, I watched people hold their laptops open walking to the parking lot, hoping their Spark jobs would finish before they lost their browser session. Your analysis is running on powerful clusters, but the results only "exist" in your specific browser tab.
The core problem: You can't open the same notebook in multiple tabs. Multiple people can't collaborate on the same server without conflicts. Your work is trapped in a single browser session.
Why this happens: Jupyter's architecture wasn't designed for concurrent access. The notebook exists as a file on disk, but the live state (outputs, execution results) only lives in your browser. Close that tab, and you lose the connection to work happening elsewhere.
In the Loop's approach: Persistent outputs that survive browser crashes, tab closures, and device switches. Real-time collaboration without conflicts. AI that sees your actual results. Full Jupyter compatibility through .ipynb import/export. Your computation lives independently of any browser session.
You need the following installed:
This repo was tested to run on Mac (Apple Silicon), Ubuntu 24 Linux (64-bit ARM), and Window 11 (64-bit ARM).
pnpm install # Install dependencies
# Copy environment configuration files
cp .env.example .env
cp .dev.vars.example .dev.vars
# Start integrated development server (frontend + backend proxy)
pnpm dev # http://localhost:5173
# Start backend sync server (separate terminal)
pnpm dev:sync # Backend API and sync functionality
# Start iframe outputs server (separate terminal)
pnpm dev:iframe # http://localhost:8000
The example files contain working defaults for local development:
.env.example → .env - Frontend environment variables (Vite).dev.vars.example → .dev.vars - Backend environment variables (Worker)Option A: In-Browser Python Runtime
This one launches automatically when you run a code cell. However, you can also launch it manualy.
Option B: External Runtime Agent
import numpy as np
np.random.random(5)
In the Python runtime, use micropip to install additional packages:
import micropip
await micropip.install("package-name")
For example:
import micropip
await micropip.install("cowsay")
import cowsay
cowsay.cow("I'm in the loop!")
Note: Core packages (numpy, pandas, matplotlib) are pre-loaded. You can see the installed packages with micropip.list()
gpt-oss:20b
ollama run gpt-oss:20b
.env file with:
VITE_AI_PROVIDER="ollama"
pnpm dev:sync running, restart itLearn more about what works today.
You can help make it better by contributing. We welcome code contributions and ideas! See the documentation links below for more information.
In the Loop can be run using Docker Compose for a complete production-like setup:
# Build all services
docker compose build
# Start all services
docker compose up
This starts three services:
See Docker Guide for detailed instructions on building and running individual services.
Developing - Developing in this repo
Contributing - Contribute to this project
Deployment Guide - Production deployment instructions
Docker Guide - Docker build and run instructions
Roadmap - Development priorities and future plans
AI Development Context - An AGENTS.md file for contributors and AI agents.
BSD 3-Clause
TypeScript
94.4%
Python
1.9%
Shell
1.5%
CSS
1.3%
Real-time collaborative notebook that thinks with you
TypeScript
54
650 commits
updated Feb 6, 2026
The notebook that thinks with you.
Try it out on: app.runt.run. It's stable for experimentation and real usage, actively developed.
In the Loop is an agentic notebook where AI, code, and prose work together in real-time. Never lose your outputs when tabs close. Collaborate with AI that sees your data, not just your code. Built on event-sourced architecture for persistent, collaborative computation.
As a long-time Jupyter contributor, I've always wanted to solve a core architectural limitation: computation and documentation are artificially coupled.
At Netflix, I watched people hold their laptops open walking to the parking lot, hoping their Spark jobs would finish before they lost their browser session. Your analysis is running on powerful clusters, but the results only "exist" in your specific browser tab.
The core problem: You can't open the same notebook in multiple tabs. Multiple people can't collaborate on the same server without conflicts. Your work is trapped in a single browser session.
Why this happens: Jupyter's architecture wasn't designed for concurrent access. The notebook exists as a file on disk, but the live state (outputs, execution results) only lives in your browser. Close that tab, and you lose the connection to work happening elsewhere.
In the Loop's approach: Persistent outputs that survive browser crashes, tab closures, and device switches. Real-time collaboration without conflicts. AI that sees your actual results. Full Jupyter compatibility through .ipynb import/export. Your computation lives independently of any browser session.
You need the following installed:
This repo was tested to run on Mac (Apple Silicon), Ubuntu 24 Linux (64-bit ARM), and Window 11 (64-bit ARM).
pnpm install # Install dependencies
# Copy environment configuration files
cp .env.example .env
cp .dev.vars.example .dev.vars
# Start integrated development server (frontend + backend proxy)
pnpm dev # http://localhost:5173
# Start backend sync server (separate terminal)
pnpm dev:sync # Backend API and sync functionality
# Start iframe outputs server (separate terminal)
pnpm dev:iframe # http://localhost:8000
The example files contain working defaults for local development:
.env.example → .env - Frontend environment variables (Vite).dev.vars.example → .dev.vars - Backend environment variables (Worker)Option A: In-Browser Python Runtime
This one launches automatically when you run a code cell. However, you can also launch it manualy.
Option B: External Runtime Agent
import numpy as np
np.random.random(5)
In the Python runtime, use micropip to install additional packages:
import micropip
await micropip.install("package-name")
For example:
import micropip
await micropip.install("cowsay")
import cowsay
cowsay.cow("I'm in the loop!")
Note: Core packages (numpy, pandas, matplotlib) are pre-loaded. You can see the installed packages with micropip.list()
gpt-oss:20b
ollama run gpt-oss:20b
.env file with:
VITE_AI_PROVIDER="ollama"
pnpm dev:sync running, restart itLearn more about what works today.
You can help make it better by contributing. We welcome code contributions and ideas! See the documentation links below for more information.
In the Loop can be run using Docker Compose for a complete production-like setup:
# Build all services
docker compose build
# Start all services
docker compose up
This starts three services:
See Docker Guide for detailed instructions on building and running individual services.
Developing - Developing in this repo
Contributing - Contribute to this project
Deployment Guide - Production deployment instructions
Docker Guide - Docker build and run instructions
Roadmap - Development priorities and future plans
AI Development Context - An AGENTS.md file for contributors and AI agents.
BSD 3-Clause
TypeScript
94.4%
Python
1.9%
Shell
1.5%
CSS
1.3%