chat is a straight line.
your curiosity isn’t.

Rabbithole is an infinite canvas for learning. Open any document, select what makes you curious, ask — and the answer opens as a new document beside it. Powered by the agent you already use.

select anything, ask anything.

every document becomes a canvas

No new app to learn, no new AI to subscribe to. Rabbithole is a canvas your own agent draws on — free, open source, entirely on your machine.

01

open

Tell your agent “open this in rabbithole.” A paper, a README, notes, anything — it becomes a living document in your browser.

02

ask

Select any phrase that snags you. Ask your own question, or tap a lens and keep reading.

Explain · ELI5 · Example · Go Deeper
03

descend

The answer streams in as a child document — just as alive as the first. Select, ask, branch again. Recurse forever.

your curiosity becomes a map

Zoom out and your whole line of thought is laid out — every branch attached to the exact words that sparked it. Holes save themselves; come back tomorrow and pick up the thread right where you left it.

install in 60 seconds

You need Node 18+, a browser, and an agent — Claude Code, Codex, or any MCP client. No account, no API keys, nothing leaves your machine.

the lazy way — recommended

Don’t run commands. Paste this to your agent and let it do the work:

Set up Rabbithole for me from https://github.com/shlokkhemani/rabbithole — the README has exact steps written for you, an agent. When it's installed, ask me for a document to open.
Claude Codeone line, done
claude mcp add rabbithole -- npx -y github:shlokkhemani/rabbithole
Codexone line, done
codex mcp add rabbithole -- npx -y github:shlokkhemani/rabbithole
any MCP clientadd to its MCP config
{
  "mcpServers": {
    "rabbithole": {
      "command": "npx",
      "args": ["-y", "github:shlokkhemani/rabbithole"]
    }
  }
}
then, in a new session, just say
open this document in rabbithole

First run takes ~20 seconds while npx fetches the repo — cached after that. Your holes live in ~/.rabbithole.

are you an agent?

If a human sent you here to set up Rabbithole: welcome — this part is written for you. It’s also served plain at /llms.txt.

setup — follow exactly
1. Check the runtime: node --version   (needs >= 18)

2. Register the MCP server — pick the client you are running inside:

   Claude Code   claude mcp add rabbithole -- npx -y github:shlokkhemani/rabbithole
   Codex         codex mcp add rabbithole -- npx -y github:shlokkhemani/rabbithole
   anything else add to the client's MCP config:
                 { "command": "npx", "args": ["-y", "github:shlokkhemani/rabbithole"] }

   No clone, no build — npx fetches the repo and runs bin/mcp-server.js
   over stdio. The first run takes ~20s; it's cached after that.

3. Reconnect, then verify these three tools exist:
   open_rabbithole · answer_branch · list_rabbitholes

4. Tell your human to say: "open <document> in rabbithole"
   You call open_rabbithole with { title, content } — it opens their browser
   and BLOCKS until they select text and ask. That's a long-poll, not a hang.
   Answer with answer_branch: stream 1-3 sentence chunks with partial: true,
   finish with a titled final call, loop until status = 'session_closed'.

Headless? RABBITHOLE_NO_BROWSER=1 skips auto-opening the browser.
Storage lives in ~/.rabbithole (override: RABBITHOLE_DIR).