TractorBeam is a browser extension for highlighting and taking notes on PDFs, with AI highlighting alongside you.

I've long been a fan of reading support systems, like the ones embedded into AI2's Semantic Reader — I love the in-place augmentation of document content with things like previews of citations, or highlights that help me skim a document. TractorBeam aims to provide that kind of reading assistance, but defined entirely by how you choose to read: you specify what gets highlighted through descriptions and indicative examples, and TractorBeam uses AI to suggest highlights that match your specifications as you read.

TractorBeam doesn't assume that AI is going to do well at this on a first pass: we built it explicitly for iteration, such that the AI assistance can evolve alongside your mental model as you read. It's intended to be malleable: shapeable to whatever you need, with the option to use it only for the things that it does well, or to turn off AI assistance entirely.

In early testing, people used TractorBeam's AI highlights to help them skim, to structure their reading to their preferences, and even to refine their understanding of what was going on in documents.

I wrote about the conceptual basis for TractorBeam for the CHI-STAR workshop at CHI'26 (paper), and we will be presenting the system itself at UIST 2026 (paper|poster). We also have a more complete version of the paper that is now under review.

Why highlights?

In the era of LLMs, it's reasonable to ask why you'd want a system that highlights documents, rather than allowing you to chat with them, or with an agent that reads them on your behalf.

Two primary reasons. First, it's still hard to validate what an LLM tells you. It might be right, especially for more agreed-upon knowledge, but it could also fail for a variety of reasons. It could be too credulous about claims in a scientific document, or just miss things that you care about. Citations are a partial solution for this problem, but they risk making you trust too much; if you have to verify in-document the source of each citation, why not just read the document in the first place?

Second, making sense of large document collections involves iteratively building theories as you read, find evidence, and are surprised. It's uncertain, and relies on you maintaining some degree of ambiguity as you read. LLMs aren't great at preserving that ambiguity—their responses will usually contain a frame for you to think with, and once you're presented with a frame, it can be really hard to shake it off and develop something of your own.

TractorBeam's highlights address both of these concerns—it's easy to figure out if suggested annotations are correct, with the added bonus that you always see related content from the annotation's context. This also preserves discovery as you read papers: you still see all of the paper content, and can find things even if they're not highlighted.

How does it work?

At its core, TractorBeam is an annotation system: highlight some text, maybe write some notes, refer back to highlights later. Where we differ, though, is that TractorBeam requires that you categorize each of your highlights, though the category can be as vague as you'd like. Categories (which we call "highlighters" in the extension) have an associated color, name, description, and list of examples which you've highlighted, and any of these are editable at any point. You can use the descriptions to take notes of what kinds of things you're highlighting, things that you'd like to exclude, or just leave it entirely blank. Highlighters live inside a "project" in the right sidebar.

The sidebar in which you can manage your highlighters: their color, title, description and instances.

When you trigger AI highlighting from the panel in the bottom right, we split the PDF into approximately paragraph-sized chunks, and send them to a language model in parallel, with a prompt built from your highlighters: their names, descriptions, and instances. Once the language model identifies candidate examples in those categories, we place them directly on the document.

Example annotations in TractorBeam. User annotations show up as underlines; solid for positive examples and dashed for negative. Machine highlights show up as squiggly to indicate their inherent uncertainty.

Machine highlights are treated differently from user highlights: they are always treated as provisional or suggested, and we visualize them as such: your annotations are solid underlines, and the machine highlights are squiggles, to indicate their inherent uncertainty. You can provide feedback on machine highlights to further refine the behavior of your model, either as a good example to emulate, or as an example that shows what not to do.

TractorBeam was designed to facilitate iteration: it should be easy to start reading with or without machine annotation, highlight some examples, change descriptions, and offer feedback, and over time develop a machine highlighting system that helps you read the way that you want to.

Using TractorBeam

TractorBeam is available right now in the Chrome Web Store (works with Chrome and Edge). Once installed, open a PDF in your browser, and click the extension icon to launch TractorBeam. TractorBeam is intended to be used as local-first software: data is stored only in your browser's persistent storage, and the only time anything leaves your device is when you call out to an external LM provider.

TractorBeam is currently set up so that you bring your own API key, and it supports any OpenAI- or Anthropic-compatible endpoint. To configure the AI annotation, hit the gear icon in the AI control panel, drop your API key in there, and optionally change the base URL to point it at an alternate model provider. This also means that if you're running local models, e.g. through Ollama or llama.cpp, AI processing can also happen entirely locally.

This setup is not the easiest, so we're also working on entirely in-browser models. In our early tests, these models aren't quite where we'd like them to be yet, but we hope to make some progress soon!

If you'd like a walkthrough of the major features of TractorBeam, see this video.

Roadmap

Currently, TractorBeam is single-user only, despite presenting what looks like a conventional collaborative annotation app. I'm currently working on facilitating collaborative annotations across users with configurable backends. In particular, I'm really excited about integrating with ATProto and some of the cool sensemaking tools there, like Margin and Semble. Once we have backup and sync working, syncing user annotations to Zotero is the next step.

I'm also thinking actively about how people can manage highlighters long term: if you change your mind about what a highlighter should represent, how can we make the transformation easy, especially if you've already annotated a bunch of examples?

If you try TractorBeam or otherwise have thoughts, please drop me a line! I'm on bsky, or send me an email!