I was reading about the Dreyfus affair and hit "syndicalism" — a word I'd skimmed past a dozen times. I knew the shape of it, not the substance. Opening a new tab meant losing the paragraph I was in, reorienting, reading something adjacent, and coming back with my thread broken.
rabbitholes is a Chrome extension that solves the specific version of this problem: you want the context, but you don't want to leave.
Highlight any text and a shadow-DOM tooltip renders an explanation next to your cursor — Claude Haiku 4.5, direct from your browser to api.anthropic.com, no intermediary server. Shadow DOM means the tooltip doesn't touch the host page's styles or DOM; you can close it and the page is exactly as you left it.
The part I use most: every word in the response is itself clickable. You can drag across a phrase to select it. So when the explanation of "syndicalism" mentions "anarcho-syndicalism" and you want that too, you don't open a tab — you click the word. The extension tracks depth with a hop counter. Go far enough and you get a shareable trail of what you followed.
There's also a globe icon that re-answers the query enriched with Brave Search results, with clickable source chips. That's useful when you want primary sources rather than an explanation.
The architecture choice I'd defend: storing your Anthropic key in chrome.storage.sync (encrypted, never leaves the browser) and routing directly to Anthropic's API instead of proxying through a server. It's slightly more setup friction for the user, but zero telemetry and no service dependency felt like the right trade for something that runs on every page you read.
Manifest V3 throughout.
// The shadow DOM container stays isolated from the host page
const shadow = hostElement.attachShadow({ mode: 'closed' });
const tooltip = document.createElement('div');
shadow.appendChild(tooltip);
// Host page styles never bleed in; extension styles never bleed out
github.com/robertnowell/rabbitholes
Top comments (0)