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
- Roughly four times less duplicated navigation than the average of the engines compared: 102 repeated lines against 282, 478 and 491.
- Zero leftover HTML tags across 512 measured pages: nothing for the model to parse around.
- Frontmatter states the source URL and the publication date, so a claim can be attributed rather than guessed at.
- One keyboard shortcut copies the page as Markdown, ready to paste into any chat.
- Images can be dropped entirely, which removes long image URLs from the context.
- A page with no article is reported as such. A feed or a search result does not become three hundred links in your prompt.
- Fewer stub lines: the share of lines under twenty-five characters came out at 0.220, against 0.278, 0.262 and 0.263 for the engines compared. Short lines are mostly link labels wearing the shape of sentences.
- Reference links become
[^1]footnotes gathered at the end, so a numbered citation in the body still resolves to a source instead of trailing off into a dead anchor.
---
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.
- 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.
- 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.
- In the frontmatter section keep
sourceanddateon, and switchauthorandextractionoff. Two header lines are enough for the model to attribute a claim; the rest is header you are paying to send. - Clip the page with
Alt+Shift+Mand 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. - 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}. - 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.
- Add a per-site rule for the sites you clip most,
reddit.cominto 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.
| Setting | Value | Why this value here |
|---|---|---|
| Icon click | Copy to clipboard | Click, switch, paste: no file, no window, no dialogue |
| Images | Skip | Image URLs are long, meaningless to a text model, and often longer than the paragraph beside them |
| Frontmatter | `source` and `date` on, `author` and `extraction` off | Enough to attribute a claim, nothing spent on fields the model will not use |
| Destination (agent) | Folder `context/` in the project | Local 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 |
| Selection | Clip the selection, not the page | When one section answers the question, the other nine are pure cost |
| Per-site rule | `reddit.com` → subfolder, images skipped | Threads and reference material are worth keeping in separate piles |
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 now | What you get | What it costs |
|---|---|---|
| Paste the URL | One line in the prompt | Many models cannot fetch; those that can may be served the version built for bots |
| Copy and paste the page | Everything, including the furniture | Comparable output carried 282 to 491 duplicated menu lines against 102 here |
| Screenshot into a multimodal model | The page as it looked | Image tokens, no source line, no date, and nothing you can grep afterwards |
| Save the page as HTML | A faithful copy on disk | Markup dominates the file; the article is a minority of what you send |
| Reader mode, then copy | Cleaner text, sometimes | Triggers on some pages and not others, and carries no source or date header |
| Clean Clipper | Article text with a two-line header | One 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.
The image links are still eating context
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.