An infinite canvas for learning. Open a document, ask at any point, and follow each answer into a new document.
Open the web app · Explore the offline architecture tour
Rabbithole has two hosts and one canvas:
- The static web app uses your chosen model endpoint or the coding-agent subscription already signed in on your machine.
- The MCP server lets Claude Code, Codex, and other MCP clients answer while the canvas, storage, and local transport stay on your machine.
No account, telemetry, or hosted document store. Web documents live in your browser. MCP documents live under ~/.rabbithole/ unless RABBITHOLE_DIR overrides it.
Visit rabbithole.ing, then paste a question or URL, drop Markdown or PDF, or import a Rabbithole file.
The web app supports OpenRouter, local and custom OpenAI-compatible endpoints, and the optional subscription bridge:
npx @shlokkhemani/rabbithole bridgeThe bridge prints a private pairing link and connects the page to an installed, signed-in Claude Code or Codex CLI. It binds only to loopback.
Requires Node 18+ and a browser.
Claude Code:
claude mcp add rabbithole -- npx -y github:shlokkhemani/rabbitholeCodex:
codex mcp add rabbithole -- npx -y github:shlokkhemani/rabbitholeThen start a fresh agent session and say:
Open this document in Rabbithole.
The tool call stays pending while the agent listens for canvas asks. If a client enforces a short MCP tool timeout, raise that client's timeout; saved asks survive disconnects and resume.
git clone https://github.com/shlokkhemani/rabbithole.git
cd rabbithole
npm install
npm run build
npm testUseful references:
- Product and architecture tour
- Generated module map
- Generated command map
- Testing model
- Compatibility contract
- Design system
- Historical proposals
The canvas and frozen snapshots remain self-contained HTML. Package tarballs include the browser bundles built during packaging, so registry installs need no consumer-side build.
MIT. See LICENSE.
