A short-term memory for the part you scrolled past.
Attention is not binary
We often talk about reading as if attention is binary: either you read the page, or you did not. But that is not how people actually read online.
We slow down, scan, jump forward, return, and sometimes move through several paragraphs before realizing that one of them contained the context we needed. A fast scroll is not always a mistake. It is often a decision made before we know what was there.
Most AI reading tools ask a different question. They stop the reading flow and summarize the entire page. But “What is this article about?” is not the same question as “What did I just miss?”
So I created Skim Recap. It identifies the passage between two scroll positions and brings back only that missing context, beside the cursor, without opening another tab or moving the page.
Keep reading. Flick. Recap.
The user does not select text or formulate a prompt. Skim Recap starts tracking when scroll speed reaches approximately 1,800 pixels per second. After scrolling settles for 180 milliseconds, it measures the distance.
| Trigger layer | Behavior | User control |
|---|---|---|
| Velocity | 1,800 px/s | Fixed |
| Settle window | 180 ms | Fixed |
| Flick distance | 1,200 px default | 400–3,000 px |
I kept speed and timing fixed so the interface exposes only one meaningful question: how much skipped distance is enough to interrupt me?
One model, shared across reading
The first preload downloads the Gemma 4 E4B model once. Chrome caches it locally, LiteRT-LM loads it onto the GPU, and every regular webpage tab shares the same model instance during that browser session.
| Action | What remains available |
|---|---|
| Close popup | Model remains available |
| Close one tab | Other tabs continue sharing it |
| Open a new tab | Uses the shared model |
| Restart Chrome | Cached model reloads onto the GPU |
Return context without breaking place
When a flick qualifies, the extension extracts only the text positioned inside the skipped range. The recap panel appears near the cursor and streams the result into the same surface.
Focus mode treats the recap as a continuation of the article. Smart mode exposes more of the model and summarization stages. Both layouts use the same locally generated result, so switching views never regenerates it.
From scroll event to local inference
A TypeScript content script observes velocity and extracts the skipped text. A Manifest V3 service worker routes the request to one Chrome offscreen document, where Gemma 4 runs locally through LiteRT-LM and WebGPU.
The full runtime breakdown — model identifier, source location, and where the same identifier appears in the compiled bundle — is on the stack page.