Skip to main content

browser

Turn what a person wants off a website into a browse.json job, read what came back in results.csv, and sharpen the fields that came back thin.

Quellinformationen

Repository
autonomous-ai/openharness
Letzte Quellaktivität
20. September 2026 um 09:46
Erkannte Sprache von SKILL.md
Englisch
Sterne
822
Forks
67

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
browser
description
Turn what a person wants off a website into a browse.json job, read what came back in results.csv, and sharpen the fields that came back thin.
# Craft: reading a website into a spreadsheet The person points at a page. You write the job. A real Chrome walks the site and Jev answers, per page, in one call. Every value in the spreadsheet is a piece of text that was really on the page, because Jev only ever picks from what the reader found. It cannot write a value, so it cannot invent one. ## The shape of a site Almost every site worth reading has two page kinds, and the job assumes them: ``` a LIST page → links to each thing, and a link to the next list page a THING page → the details of one thing ``` A search page is a list page, so "search this site for X" is the same job: put the words in `"search"` and the harness types them into the site's own search box, then reads the results. `start` does not have to be the list. Give it the site and Jev walks there: each step is one call asking whether this page is already the one, and if not which link goes towards it, up to five pages. Where a person gave you the exact page, use it and skip the walking. Point `start` at the list where you have it. If you point it at one thing's page, that one row is collected and the run ends. If the things have no page of their own (everything is on the list), say so to the person: this harness collects one row per page, so a list-only site gives one row for the whole list. ## Letting Jev write the fields Put the person's sentence in `want`, leave `fields` out, and two Jev calls decide it: one asks what the page lists and which links are the things, the other asks of every piece of text on one of them "is that a fact about this one, worth a column?" and "what kind of value is it?". About a second, and the names come off the page's own labels. Do that first. Read what it proposed, then add or reword. What it cannot propose is a judgement: "is this remote?", "how urgent is this". Those are yours to write, and they are where the tool earns its keep, because no page prints them. ## Writing the fields A field is what to look for, in the words a person would use. | What you want | Write | |---|---| | a value printed on the page | `{ "id": "rent", "name": "Rent", "ask": "the monthly rent" }` | | a judgement about the thing | `{ "ask": "Does it allow pets?", "type": "yesno" }` | | a place on your own scale | `{ "ask": "what condition it is in", "type": "score", "levels": ["needs work", "liveable", "newly done"] }` | - **Say it as it appears.** "the pay or salary range" beats "compensation" if the page says Salary. - **One value per field.** If the page prints "Acme · Leeds · £45,000" the reader offers that line and each of its parts, so `company`, `place` and `salary` can each take their own part. A line splits on ` · `, ` | `, a dash or a bullet, a label keeps its value (`UPC: a22124811bfa8350`), and any number inside a line is offered alone. - **Ask for a number when you want to sort by one.** A page that says "In stock (19 available)" offers both the sentence and `19`: ask for "how many copies are available" and you get the number; ask for "the availability line" and you get the sentence. If the page never prints the number on its own and Jev returns the sentence, that is right and honest. Derive the number with a script afterwards and tell the person you did. - **A value that is not on the thing's page cannot be collected.** Rating stars drawn as pictures, a price loaded after a click, a number inside an image: none of those are text. Check with the reader (see AGENTS.md, "Look before you write the job") before promising a column. - **`yesno` is judgement, not text.** Use it for "is it remote?", not for "what is the salary?". `check.mjs` warns when a `pick` field reads like a question. ## Reading what came back `results.csv`: one row per thing, every field with a confidence column. Then: 1. **Any column mostly empty?** The verdict marks it `thin`. Either the words are wrong, or the value is not on those pages. Open one page with the reader and look. 2. **Any column with low confidence?** Jev was choosing between two pieces of text. Read three of those rows: usually two parts of one line, and a sharper ask fixes it. 3. **Too few rows?** Look at the pane's link panel. If the real things scored under 0.5, `item` is too vague: "a job posting" works, "an entry" does not. If it ran out, raise `maxItems`. 4. **Rows that are not things?** A menu page scored over 0.5. Make `item` more specific, and say what it is not: `"item": "a flat for rent, not a neighbourhood guide"`. Only then report. Count from the file with a script, never by eye. ## What it costs and how long it takes One call per page. A list page with 120 links is about 122 questions in that one call; a thing's page is one question per field. Measured on 2026-09-20 with live Jev through OpenRouter: 24 things off a 36-item board took 33 s and $0.0023, and every one of the 144 cells matched the site's own data. The time is page loads, not Jev: expect about a second and a half a page. ## The dial that is real Accuracy does not fall away as `maxItems` goes up; the tool is not fighting a budget, and the hundredth thing is read as carefully as the first. It is still a page load each, so ask for what the person needs. The honest limit is the **page**. A site that prints its values as text reads perfectly. A site that draws them, hides them behind a click, or loads them after a scroll gives blanks, and the blanks show up as a thin column rather than as a wrong answer. That is the tool telling the truth: it would rather leave a cell empty than write something the page never said. ## When a site says no A site that runs bot protection answers with a wall: "Just a moment…", "Sorry, something went wrong", a captcha, a 403, or a robot-policy page. The harness names it, stops, and puts it in `run.walled`. Trying another address on the same site is the same wall. Do not work around it. **Do not guess which sites will block.** Measured on 2026-09-20: Hacker News, arXiv, gov.uk, data.gov.uk, GitHub, We Work Remotely and shop.bbc.com all read. Amazon, Wikipedia, Rightmove and three specialist fencing retailers all blocked. Small does not mean open, and big does not mean shut: it is whether the site runs a challenge. Point the job at the page and let the pane tell you in ten seconds, rather than promising a person it will work. When it walls, say so plainly and offer a different source: a public dataset, an official API, a government or reference site, or the maker's own pages. Do not re-run it hoping. ## Never - Never go around a login wall, a block, a rate limit or a robots rule. Never ask for a password. - Never present the offline stand-in's rows as Jev's judgement. - Never retype a value from the page into the chat as if it were collected: run the job.
Auf GitHub ansehen