Clean Clipper Add to Chrome (free)

Who it is for

Stop pasting the same menu into your model

On a 109-page corpus Clean Clipper left 102 duplicated navigation lines where three other extraction engines left 282, 478 and 491 – and no leftover HTML tags at all. What reaches the model is the article plus a frontmatter header naming the source URL and the publication date.

What a pasted page really costs

Copy a documentation page out of the browser and into a chat and you send the model the cookie notice, the sidebar, the version picker, the “on this page” rail, four columns of footer links and a “read next” strip. Every one of those lines is tokens you pay for, and every one competes for attention with the two paragraphs you wanted read.

The second cost is subtler – repeated navigation looks like structure. A model asked to summarise the page will list menu items as topics, and asked where a claim came from it will point at a link label. Stray div and table markup left behind by a careless converter adds one more layer the model has to parse around before it reaches a sentence.

The second paste is where it starts to cost. A conversation gets long, the history is trimmed, and you paste the page again – except the page has changed since the morning, so the model is now reasoning over slightly different text and nothing in the thread records that it happened. An agent that fetches the same URL on every run has the same problem, plus rate limits and a login it cannot pass. A file on disk is the same input every time, and it is still readable when the site is not.

What the model receives instead

Everything the model gets – and nothing elsedocs.python.org/3/library/asyncio-task.html
---
title: "Coroutines and Tasks"
source: "https://docs.python.org/3/library/asyncio-task.html"
extraction: "dom"
---

## Awaitables

We say that an object is an *awaitable* object if it can be used in an
`await` expression. There are three main types: coroutines, Tasks and Futures.

```python
async def main():
    await asyncio.sleep(1)
    print("hello")
```

Setting it up for prompts

Two different setups, sharing most of their settings – one for pasting into a chat, one for filling a folder an agent reads. Both take about five minutes.

  1. Right-click the icon, open Options, and set what the icon click does to “copy to clipboard”. That is the shortest path there is – click, switch to the chat, paste.
  2. Set images to skip. A single CDN image URL can be two hundred characters of resizing parameters, and none of it means anything to a text model.
  3. In the frontmatter section keep source and date on, and switch author and extraction off. Two header lines are enough for the model to attribute a claim; the rest is header you are paying to send.
  4. Clip the page with Alt+Shift+M and paste. If the extension answers “no article”, do not paste it anyway. That answer means the page was mostly link labels, which is exactly the input that makes a model list menu items as topics.
  5. For an agent instead of a chat, set the destination to a folder your agent already reads, such as context/ in the project, and the filename template to {domain}-{title}.
  6. Clip the six or eight pages the task actually depends on into that folder. The agent then reads local files: no fetching, no rate limits, no login it cannot get through, and the same text on every run.
  7. Add a per-site rule for the sites you clip most, reddit.com into its own subfolder with images skipped, so the folder stays sorted without you thinking about it.

Settings that cut the context bill

Every one of these removes something the model is charged for reading. The frontmatter row is the one people get wrong – attribution is worth two lines, not five.

SettingValueWhy this value here
Icon clickCopy to clipboardClick, switch, paste: no file, no window, no dialogue
ImagesSkipImage URLs are long, meaningless to a text model, and often longer than the paragraph beside them
Frontmatter`source` and `date` on, `author` and `extraction` offEnough to attribute a claim, nothing spent on fields the model will not use
Destination (agent)Folder `context/` in the projectLocal files mean no fetch, no rate limit and identical input on every run
Filename template`{domain}-{title}`An agent grepping the folder can tell two “Overview” pages apart
SelectionClip the selection, not the pageWhen one section answers the question, the other nine are pure cost
Per-site rule`reddit.com` → subfolder, images skippedThreads and reference material are worth keeping in separate piles
What a feed page returns instead of three hundred linksthe clip window on a category listing
No article on this page.

More than a quarter of the extracted text sat inside link labels, which is
what a feed, a storefront or a search result looks like. Nothing was written
to the clipboard.

  Blocks examined      41
  Chosen block         <section class="cards">
  Link share           0.71
  Real text            740 characters

Three ways it is used

One page, one question

You are reading a specification and want the model to check your reading of one section. You select the section, press Alt+Shift+M, and paste. What arrives is the section, a source line and a date line: no cookie notice, no version picker, no “on this page” rail, no eight columns of footer.

The difference shows in the answer rather than the bill. Asked to summarise a pasted page, a model given the navigation lists menu entries among the topics, because a phrase repeated in every section genuinely looks like structure. Removing it removes the mistake at the source.

A folder an agent reads instead of fetching

A coding agent needs the API reference for an SDK. You clip eight pages into context/, each named from its domain and title. The agent reads local files: nothing is fetched, nothing is rate-limited, and the pages behind your logged-in session are as readable as the public ones.

It also stays still. A fetched page can change between two runs of the same task, and nothing in the transcript will say that it did. A clipped file changes only when you clip it again, and the old file is still there to diff against.

A page the model cannot reach at all

The document is on an internal wiki behind single sign-on, or in a subscription you pay for. A model asked to fetch that URL gets a login screen; a model given a search tool gets the version served to a bot. The extension reads the page your browser has already rendered for your session, so the text you can see is the text you can paste.

Nothing about it leaves your machine on the way. Nothing about the page is uploaded anywhere. The clip goes to your clipboard, and the “send to chat” button copies and opens a tab rather than transmitting anything itself.

Against the other ways to feed a page in

These are the five routes people actually use to get a web page in front of a model. Each column below is what you get and what it costs – this extension included.

How it is done nowWhat you getWhat it costs
Paste the URLOne line in the promptMany models cannot fetch; those that can may be served the version built for bots
Copy and paste the pageEverything, including the furnitureComparable output carried 282 to 491 duplicated menu lines against 102 here
Screenshot into a multimodal modelThe page as it lookedImage tokens, no source line, no date, and nothing you can grep afterwards
Save the page as HTMLA faithful copy on diskMarkup dominates the file; the article is a minority of what you send
Reader mode, then copyCleaner text, sometimesTriggers on some pages and not others, and carries no source or date header
Clean ClipperArticle text with a two-line headerOne page at a time; it does not summarise, chunk or embed anything

When the answer comes back wrong

The model summarised the navigation, not the article

That is what a feed page does to a prompt. Check what the clip window said – if it reported “no article”, more than about a quarter of the extracted characters were sitting inside link labels, which is the signature of a category page, a search result or a storefront. Find the article page itself and clip that one. The answer will change more than any amount of prompt wording.

The clip is much shorter than the page looked

Two common causes. Either the page loads its body as you scroll, and only the rendered part existed at the moment you clipped – scroll to the end first, then clip. Or a section is inside a collapsed accordion or an unopened tab, which is not in the DOM until you open it. What the browser has not rendered, no extension can read.

There is no date for the model to cite

The page declared none. The field is left empty rather than filled with today’s date, because a confident wrong date is worse in a model’s context than a missing one. It will be quoted back to you as fact. Some corpora carry dates far less often than others – on the Turkish and Czech top-fifty lists a publication date is genuinely rare, and that is a property of those sites rather than of the extraction.

Images default to being kept as links, which is right for reading and wrong for a prompt. Set images to “skip”, globally or as a per-site rule, and the Markdown contains no image references at all – not a placeholder, not an empty bracket, nothing.

What it does not do

It does not talk to any AI service. The clip is sent nowhere – it goes to your clipboard or your disk, and the “send to chat” button only copies and opens a tab. It does not summarise, chunk or embed the text. That is your model’s job, not a clipper’s. It clips one page at a time, the page you are on, with no crawler. And it cannot capture what the page never rendered.

Add to Chrome (free)Free in full. No account, no sign-up, no limits.

Questions

Why not just give the model the URL?
Many models cannot reach the page at all, and those that can often get the version served to a bot rather than the one you are reading. Clipping captures exactly what was on your screen, including pages behind a login you were already using.
Does the extension send anything to an AI service?
Only if you press the button that does, and even then it copies to the clipboard and opens a chat tab. The extension itself uploads nothing about the page.
How much context does this actually save?
The measurable part is duplicated navigation: 102 repeated menu lines across 109 pages, where the engines compared left 282, 478 and 491. On a page whose menu repeats in every section, that is most of the noise.
Can I drop images to save tokens?
Yes. Set images to “skip” and the Markdown contains no image links at all.
Does it work on pages behind a login?
Yes. It reads the page your browser already rendered, so an internal wiki or an article you subscribe to clips like any other page.
Does it work with a local model?
Yes, and nothing about it assumes otherwise. The clip is never uploaded, so it goes to your clipboard or a folder on disk and it is entirely your business what reads it after that.
Does it chunk, embed or summarise the text?
No. It converts the page and stops. Chunking and embedding belong to whatever pipeline you are building, and a clipper that summarised would be deciding for you which parts of the source the model never sees.
Will the same page give me the same text tomorrow?
Only if the page is the same. That is the argument for keeping the file – a clip is fixed once it is written, so a task rerun a month later reads the same input, and the earlier capture is still on disk to compare against.
Do code samples survive well enough for a model to read?
Yes, and with their language tag: on a nine-page technical corpus the tag survived in 73 of 156 fences, against 20 and 0 for the engines compared. The tag comes from the class the site’s own highlighter left, so it is never a guess.
Can I clip several tabs into one prompt at once?
No. There is no batch mode and no crawler. It clips the page you are on. For several pages, clip them one at a time into a folder and point the model or the agent at the folder.