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.
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.
Tell your agent “open this in rabbithole.” A paper, a README, notes, anything — it becomes a living document in your browser.
Select any phrase that snags you. Ask your own question, or tap a lens and keep reading.
The answer streams in as a child document — just as alive as the first. Select, ask, branch again. Recurse forever.
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.
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.
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 mcp add rabbithole -- npx -y github:shlokkhemani/rabbitholecodex mcp add rabbithole -- npx -y github:shlokkhemani/rabbithole{
"mcpServers": {
"rabbithole": {
"command": "npx",
"args": ["-y", "github:shlokkhemani/rabbithole"]
}
}
}First run takes ~20 seconds while npx fetches the repo — cached after that. Your holes live in ~/.rabbithole.
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.
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).