Own your context window.
Your research context shouldn't be locked inside whichever AI company makes your browser or your chatbot. eve-threads is a Chrome extension that follows a research thread across your tabs. When you step away, one keystroke parks it: every tab is classified (read, skimmed, unread, people/orgs), off-topic tabs are left out, a markdown file is written on your machine, and a summary is optionally synced to your own Eve memory. Later, ask any AI connected to your memory "where was I on X?": Claude, ChatGPT, or anything that speaks MCP.
Built at Imbue's Punk Software Hack Night, Sept 24 2026. #punksoftware
- Start a thread. Either from the popup, or by asking Claude ("start a research thread on the Trump–Xi AI talks"). Claude calls a local
start_threadtool and recording starts; nothing opens for you. You read Claude's answer and click the sources you want. The ones Claude suggested are recognized and marked "suggested by Claude", so later you can ask which of its suggestions you actually read. - Run several topics at once if you like. Start another thread while one is open (from the popup, or Claude calls
start_threadagain when your conversation moves to a new question) and it's added as a second topic. The popup groups your tabs under their topics live, and parking files each tab under its closest topic: one thread per topic. - Research normally. The extension records the tab tree (which tab opened which), how long each tab was focused, scroll depth, highlights, and scrolling back to re-read. The popup shows everything it knows about each tab.
- Park with ⌘⇧E (Ctrl+Shift+E on Windows/Linux). The local sidecar:
- marks each tab read / skimmed / unread from reading signals, and spots people and labs from URL patterns;
- closes only tabs that clearly belong to a thread; off-topic and borderline tabs stay open, and mail/chat apps are never recorded;
- compares each tab's title with the thread topic using a small on-device embedding model (all-MiniLM-L6-v2, 90MB) and leaves out tabs that aren't about it, such as a hotel page or your email;
- files a tab under another thread you've parked when it clearly belongs there (a Trump–Xi story opened mid-way through AI-voting research lands in your Trump–Xi thread);
- writes
threads/<date>-<topic>.md, a plain file you can read and edit; - syncs the thread to your Eve memory if you've turned that on: one thread memory, plus a card for each source with its link. Pages you read closely are marked as things you already know.
- Pick up later. Ask your AI "where was I on the Trump–Xi talks?", or reopen the unread queue from the popup.
What this adds beyond browser history: attention (what you actually read vs. opened and abandoned), intent (tabs grouped under the question you were pursuing, with the unread queue as your next step), and a closed loop (Claude suggests sources, and learns which ones you read).
- Private: reading signals never leave your machine. Classification runs locally. Only the parked summary is synced, and only if you turn sync on. The sidecar only answers the extension and local tools, never web pages.
- Transparent: the popup shows exactly what's tracked per tab, and the markdown lists anything that was left out and why.
- Malleable: threads are plain markdown files.
- Portable: synced threads are reachable from any MCP client, not one vendor's assistant.
- Loyal: there's no account, no analytics, and nothing here is trying to keep you browsing.
Requires Chrome, Python 3.12, and uv.
cd sidecar
uv venv --python 3.12 .venv
uv pip install --python .venv/bin/python -r requirements.txt
./run.sh # starts the sidecar on localhost:8799 (first run downloads the 90MB topic model)On macOS you can skip the terminal from now on: ./sidecar/install_autostart.sh starts the sidecar at login and restarts it if it stops (--uninstall removes it).
Then in Chrome: chrome://extensions → turn on Developer mode → Load unpacked → choose the extension/ folder. Check or change the shortcut at chrome://extensions/shortcuts.
Without the sidecar the extension still works; parked threads are kept in the extension only and are sent to the sidecar once it's back.
Register the local MCP tool with Claude Code:
claude mcp add eve-threads -- /path/to/eve-threads/sidecar/.venv/bin/python /path/to/eve-threads/sidecar/claude_mcp.py(Claude Desktop: add the same command to its MCP config.) The tool opens Chrome, so it needs to run on the same machine as your browser.
cp sidecar/.env.example sidecar/.env(leaveEVE_MCP_URLempty to stay local-only)cd sidecar && .venv/bin/python -m eve_sync loginopens your browser once to sign in to Eve. The token is cached insidecar/.eve_token.json, which is gitignored.
Parked threads are then written to your "browsing" cortex, and "where was I on X?" in Claude, ChatGPT, or any MCP client with Eve connected recalls them.
- Topic filtering is title-based and deliberately loose. The cutoff was set from a small hand-labeled set (14 page titles, 2 topics): clear junk scored ≤ 0.10, the least similar on-topic pages ~0.20, so the cutoff is 0.15. Borderline pages stay in the thread rather than being hidden. A page on a neighboring topic (a news story about AI policy in an AI-bias thread) can still slip through.
- We tried an LLM-style decision model first. Laya wasn't confident enough to classify read/skimmed/unread, and its relevance score tracked "research page vs. shopping page", not the topic. Embeddings did the job; Laya was dropped.
- Chrome's built-in PDF viewer doesn't allow content scripts, so PDF tabs are judged by focus time only.
- Tabs opened from desktop apps have no opener tab, so they join the active thread by time and rely on the topic filter.
- Reading signals (focus time, scroll, highlights) are a proxy for reading, not proof of it.