Every long-form article I read has words I half-know. The kind where I understand the sentence but miss the layer underneath — and if I just knew what that term actually meant, the next three paragraphs would open up. Opening a new tab to check fixes the gap but kills the thread. So I skip it, finish the article, and feel like I read the surface.
I built rabbitholes to close that loop. Highlight any text on any page and a shadow-DOM tooltip renders an explanation from Claude Haiku 4.5 next to your cursor. The tooltip doesn't touch the host page's styles or layout. Read the explanation, then click any word in it to go deeper — or drag across a phrase to define that instead.
The part I use most: every answer ends with two suggested rabbit-hole topics. Not generic "you might also like" links — the two most interesting threads that branch from whatever you just read, one click away.
There's also a globe icon that re-answers the query enriched with live Brave Search results, with source chips you can click. Useful when the LLM context isn't enough and you want to verify something current.
The rabbit-hole counter is what made this feel like a real thing. It tracks how many hops deep you've gone in a session. If you start on a word in a biology paper and end up at Aristotle's metaphysics, you have a trail. Hit the philosophy endpoint and you get a shareable link showing the path.
Zero telemetry. No intermediary server. Requests go directly from your browser to api.anthropic.com and api.search.brave.com. Your Anthropic API key lives in chrome.storage.sync — encrypted, never routed through anything I control.
// The whole request path, simplified:
const response = await fetch('https://api.anthropic.com/v1/messages', {
headers: { 'x-api-key': await getStoredKey() },
body: JSON.stringify({ model: 'claude-haiku-4-5', messages: [{ role: 'user', content: prompt }] })
});
// No proxy. No logging. Response renders into a shadow-root attached to document.body.
Manifest V3. Works on any page Chrome can run content scripts on.
Top comments (0)