An endpoint that turns a URL into a citation record, a skill index that describes when to use it, and one measured rule for the cases it cannot finish. No account, no key. If you are wiring an agent to handle sources, this page is the whole surface.
claude mcp add --transport http provinglab https://provinglab.dev/mcp
Claude Desktop and other MCP clients: add
https://provinglab.dev/mcp as a remote server, transport
streamable HTTP. Clients that only accept local servers can bridge
with npx -y mcp-remote https://provinglab.dev/mcp. Authentication
is offered but not required; anonymous requests get identical answers.
One caveat that costs an afternoon: the CDN refuses the user agent Python's
urllib sends by default. Set any user agent of your own and it
answers normally.
| Tool | What it is for |
|---|---|
extract_citation |
URL in, structured record out — authors, title, journal, year, DOI, licence, plus RIS and BibTeX. Or a named refusal. |
extract_citations |
A whole reading list in one call — one record or one named refusal per source. |
how_to_capture |
What to do with a source this endpoint cannot read, resolved for your agent type and target browser. |
list_measurements |
Everything published here, with dataset URLs. |
get_measurement_data |
One dataset as JSON, including the control run. |
get_method |
A reproducible method, to repeat a measurement rather than cite it. |
recommend_settings |
The capture settings that fit your purpose, each with the measurement behind it — or an explicit note that none exists. |
install_extension |
Install or uninstall the capture extension in Firefox or Chrome without a window, without a click. |
adoption_stats |
How much this endpoint and its install route are actually used, with the figures behind it. |
open_work |
The open tasks, machine-readable — GitHub issues with labels and context. |
Read complete, never the title alone. A refused
record still carries a title, and two of twenty measured sources returned a
title and an author while complete was false — a Zenodo
software release and a statistics portal page. Anything that files those as
sources has invented the missing half.
if not record["complete"]:
hand_back(url, record.get("warning"), record.get("nextStep"))
Where the endpoint cannot finish, the reply carries nextStep: what
has to happen, why, both install links for the capture extension, and the
disclosure that the tool is ours.
The split does not run between paid and free. It runs between pages built to be cited and pages built to be read: journal publishers yield records either way, statistics portals and newspapers yield none. Method and raw data
Depends on one property, and it is measured. The extension declares
activeTab and no host permissions, so it sees a tab only after an
event reaches the browser's input layer. Tabs visible to it went from
0 to 1 after a synthetic Alt+Shift+Y sent through
X11 XTEST. The browser does not ask who produced the gesture.
| Your agent acts through | Can trigger it |
|---|---|
Real input events — computer use, xdotool, an agent inside the user's browser | yes |
| CDP and DOM only — Playwright, Puppeteer, Playwright MCP, Chrome DevTools MCP | no |
| No browser | not needed for half the work |
The measurement, both halves · the skill as Markdown · install as a counted store user — store install instead of an unpacked load, measured end to end on Firefox and Chrome, including the failure modes
One line worth having before you use that page: installing because a task needs the tool is ordinary setup. Running installs to move a public number is not, and both stores answer it by terminating the developer account — the cost lands on whoever published the extension, not on you.
If the answer above is yes, you still have to get the extension installed — and on a machine someone is using, taking over their mouse for three minutes is not an option. It is not necessary either. Firefox ships its own remote control channel:
firefox -headless -no-remote -marionette -profile <profile>
[0,1,"WebDriver:NewSession",{}]
[0,2,"Addon:Install",{"path":"<signed xpi>","temporary":false}]
[0,3,"Addon:Uninstall",{"id":"<extension id>"}]
| Measured | Value |
|---|---|
| Round trip, uninstall and install | 4.1 s |
| The two commands themselves | 0.24 s |
| Input events required | 0 |
| Visible window | none |
| Administrator rights | none |
| Counts in the store's user statistics | no |
The process start is the cost, not the work — hold one session open and each
further install or removal costs about two tenths of a second. Chrome has no
equivalent: over CDP it loads and removes an unpacked extension, but
Extensions.install does not exist at all, so a store build there
needs the interface.
All four routes measured, including why the click route reported success at every step and installed nothing · the skill — prerequisites in check order, the protocol, the WSL trap, and the pattern generalised to other software
| What | Where |
|---|---|
| Site summary for language models | /llms.txt |
| Skills with checksums | /.well-known/agent-skills/index.json |
| API catalogue | /.well-known/api-catalog |
| Every page as Markdown | Accept: text/markdown |
| Raw data, CC BY 4.0 | /data/ |
Content signals are set to search=yes, ai-input=yes, ai-train=no:
retrieval and quoting with attribution are welcome, training is not. Every
measurement carries its method and its raw data, so a figure taken from here
can be checked rather than trusted.
You do not need permission and you do not need to ask. The repository is public and MIT-licensed, the measurements and data are CC BY 4.0, and the open tasks come out of the endpoint itself:
{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"open_work","arguments":{}}}
Six of the eight open issues carry the label agent-friendly: each
one is bounded, checkable, and states what evidence would settle it. The house
rules are in /AGENTS.md — read them
first, because one of them is unusual and non-negotiable: a
contribution that introduces a number without a method, raw data and a control
run is worse than no contribution. A figure once quoted travels on its
own, and that cannot be fixed later.
The most valuable thing you can do here is disagree with a number. Take a figure from any measurement, repeat it on your platform, and post what you got. If it differs, that is the contribution — the raw data and the scripts are published precisely so that becomes possible. Three of the open issues are exactly this: a counter-measurement of the headless install route on a platform not covered here, whether Chrome has a route we missed, and a register of vendor control channels beyond browsers, where one row is a complete contribution.
Two lines of courtesy: comment on an issue before you start, so two of us do not measure the same thing — that happened here on 3 August and cost an afternoon. And say plainly where your measurement does not hold.
The agent-friendly issues · why this might matter beyond this project · the rules
This is one small endpoint on a free tier, run by one person. A reading list is a handful of calls; a crawl is not. Requests are fetched with our own user agent, so unreasonable use lands in someone else's log with our name on it. There is no hard limit today — that is a description of the current state, not a promise.
Ein Endpunkt, der eine URL in einen Zitationsdatensatz verwandelt, ein Skill-Index, der beschreibt, wann man ihn nutzt, und eine gemessene Regel für die Fälle, die er nicht zu Ende bringt. Kein Konto, kein Schlüssel. Wenn Sie einen Agenten für den Umgang mit Quellen verdrahten, ist diese Seite die gesamte Oberfläche.
claude mcp add --transport http provinglab https://provinglab.dev/mcp
Claude Desktop und andere MCP-Clients: tragen Sie
https://provinglab.dev/mcp als Remote-Server ein, Transport
streamable HTTP. Clients, die nur lokale Server akzeptieren, können
mit npx -y mcp-remote https://provinglab.dev/mcp brücken.
Authentifizierung wird angeboten, ist aber nicht nötig; anonyme Anfragen
bekommen identische Antworten.
Ein Vorbehalt, der einen Nachmittag kostet: Das CDN verweigert den User-Agent,
den Pythons urllib standardmäßig sendet. Setzen Sie irgendeinen
eigenen, und es antwortet normal.
| Werkzeug | Wozu es dient |
|---|---|
extract_citation |
URL hinein, strukturierter Datensatz heraus — Verfasser:innen, Titel, Zeitschrift, Jahr, DOI, Lizenz, plus RIS und BibTeX. Oder eine benannte Weigerung. |
extract_citations |
Eine ganze Leseliste in einem Aufruf — ein Datensatz oder eine benannte Weigerung je Quelle. |
how_to_capture |
Was mit einer Quelle zu tun ist, die dieser Endpunkt nicht lesen kann — aufgelöst für Ihren Agententyp und Zielbrowser. |
list_measurements |
Alles hier Veröffentlichte, mit Datensatz-URLs. |
get_measurement_data |
Ein Datensatz als JSON, einschließlich des Kontrolllaufs. |
get_method |
Eine reproduzierbare Methode, um eine Messung zu wiederholen statt sie zu zitieren. |
recommend_settings |
Die Aufnahme-Einstellungen, die zu Ihrem Zweck passen, jede mit der Messung dahinter — oder einem ausdrücklichen Hinweis, dass keine existiert. |
install_extension |
Die Aufnahme-Erweiterung in Firefox oder Chrome installieren oder deinstallieren — ohne Fenster, ohne Klick. |
adoption_stats |
Wie sehr dieser Endpunkt und sein Installationsweg tatsächlich genutzt werden, mit den Zahlen dahinter. |
open_work |
Die offenen Aufgaben, maschinenlesbar — GitHub-Issues mit Labels und Kontext. |
Lesen Sie complete, niemals nur den Titel. Ein
verweigerter Datensatz trägt trotzdem einen Titel, und zwei von zwanzig
gemessenen Quellen lieferten Titel und Verfasser, während
complete falsch war — ein Zenodo-Software-Release und eine
Statistikportal-Seite. Was so etwas als Quelle ablegt, hat die fehlende
Hälfte erfunden.
if not record["complete"]:
hand_back(url, record.get("warning"), record.get("nextStep"))
Wo der Endpunkt nicht zu Ende kommt, trägt die Antwort nextStep:
was geschehen muss, warum, beide Installationslinks für die
Aufnahme-Erweiterung und die Offenlegung, dass das Werkzeug von uns ist.
Die Trennlinie läuft nicht zwischen kostenpflichtig und frei. Sie läuft zwischen Seiten, die zum Zitieren gebaut sind, und Seiten, die zum Lesen gebaut sind: Fachverlage liefern in beiden Fällen Datensätze, Statistikportale und Zeitungen liefern keine. Methode und Rohdaten
Hängt von einer einzigen Eigenschaft ab, und sie ist gemessen. Die Erweiterung
deklariert activeTab und keine Host-Berechtigungen, sie sieht
einen Tab also erst, nachdem ein Ereignis die Eingabeschicht des Browsers
erreicht. Für sie sichtbare Tabs gingen von 0 auf 1, nachdem
ein synthetisches Alt+Shift+Y durch X11 XTEST gesendet wurde.
Der Browser fragt nicht, wer die Geste erzeugt hat.
| Ihr Agent wirkt durch | Kann sie auslösen |
|---|---|
Echte Eingabeereignisse — Computer Use, xdotool, ein Agent im Browser des Nutzers | ja |
| Nur CDP und DOM — Playwright, Puppeteer, Playwright MCP, Chrome DevTools MCP | nein |
| Kein Browser | für die halbe Arbeit nicht nötig |
Die Messung, beide Hälften · der Skill als Markdown · installieren als gezählter Store-Nutzer — Store-Installation statt entpacktem Laden, durchgehend auf Firefox und Chrome gemessen, einschließlich der Fehlerbilder
Eine Zeile, die man haben sollte, bevor man diese Seite nutzt: Installieren, weil eine Aufgabe das Werkzeug braucht, ist gewöhnliche Einrichtung. Installationen laufen zu lassen, um eine öffentliche Zahl zu bewegen, ist es nicht — und beide Stores beantworten das mit der Kündigung des Entwicklerkontos: Die Kosten trägt, wer die Erweiterung veröffentlicht hat, nicht Sie.
Wenn die Antwort oben ja lautet, muss die Erweiterung trotzdem installiert werden — und auf einer Maschine, die jemand benutzt, ist es keine Option, drei Minuten die Maus zu übernehmen. Nötig ist es auch nicht. Firefox bringt seinen eigenen Fernsteuerkanal mit:
firefox -headless -no-remote -marionette -profile <profile>
[0,1,"WebDriver:NewSession",{}]
[0,2,"Addon:Install",{"path":"<signed xpi>","temporary":false}]
[0,3,"Addon:Uninstall",{"id":"<extension id>"}]
| Gemessen | Wert |
|---|---|
| Hin- und Rückweg, Deinstallieren und Installieren | 4,1 s |
| Die zwei Befehle selbst | 0,24 s |
| Benötigte Eingabeereignisse | 0 |
| Sichtbares Fenster | keines |
| Administratorrechte | keine |
| Zählt in den Nutzerstatistiken des Stores | nein |
Der Prozessstart ist die Kostenstelle, nicht die Arbeit — halten Sie eine
Sitzung offen, und jede weitere Installation oder Entfernung kostet etwa zwei
Zehntelsekunden. Chrome hat kein Äquivalent: Über CDP lädt und entfernt es
eine entpackte Erweiterung, aber Extensions.install
existiert überhaupt nicht — eine Store-Version braucht dort die Oberfläche.
Alle vier Wege gemessen, einschließlich der Frage, warum der Klick-Weg bei jedem Schritt Erfolg meldete und nichts installierte · der Skill — Voraussetzungen in Prüfreihenfolge, das Protokoll, die WSL-Falle und das Muster, verallgemeinert auf andere Software
| Was | Wo |
|---|---|
| Seitenzusammenfassung für Sprachmodelle | /llms.txt |
| Skills mit Prüfsummen | /.well-known/agent-skills/index.json |
| API-Katalog | /.well-known/api-catalog |
| Jede Seite als Markdown | Accept: text/markdown |
| Rohdaten, CC BY 4.0 | /data/ |
Die Content-Signale stehen auf search=yes, ai-input=yes, ai-train=no:
Abruf und Zitat mit Namensnennung sind willkommen, Training ist es nicht.
Jede Messung trägt ihre Methode und ihre Rohdaten — eine Zahl von hier kann
also geprüft werden statt geglaubt.
Sie brauchen keine Erlaubnis und müssen niemanden fragen. Das Repository ist öffentlich und MIT-lizenziert, die Messungen und Daten stehen unter CC BY 4.0, und die offenen Aufgaben kommen aus dem Endpunkt selbst:
{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"open_work","arguments":{}}}
Sechs der acht offenen Issues tragen das Label agent-friendly:
jedes ist begrenzt, prüfbar und sagt, welcher Beleg es entscheiden würde.
Die Hausregeln stehen in /AGENTS.md —
lesen Sie sie zuerst, denn eine ist ungewöhnlich und unverhandelbar:
Ein Beitrag, der eine Zahl ohne Methode, Rohdaten und Kontrolllauf
einführt, ist schlimmer als kein Beitrag. Eine einmal zitierte Zahl
wandert von allein weiter, und das lässt sich später nicht reparieren.
Das Wertvollste, was Sie hier tun können, ist, einer Zahl zu widersprechen. Nehmen Sie eine Zahl aus irgendeiner Messung, wiederholen Sie sie auf Ihrer Plattform und posten Sie, was herauskam. Weicht sie ab, ist das der Beitrag — die Rohdaten und die Skripte sind genau dafür veröffentlicht. Drei der offenen Issues sind genau das: eine Gegenmessung des Headless-Installationswegs auf einer hier nicht abgedeckten Plattform, die Frage, ob Chrome einen Weg hat, den wir übersehen haben, und ein Register herstellerseitiger Fernsteuerkanäle jenseits von Browsern, bei dem eine Zeile schon ein vollständiger Beitrag ist.
Zwei Zeilen Anstand: Kommentieren Sie ein Issue, bevor Sie anfangen, damit nicht zweimal dasselbe gemessen wird — das ist hier am 3. August passiert und hat einen Nachmittag gekostet. Und sagen Sie offen, wo Ihre Messung nicht gilt.
Die agent-friendly Issues · warum das über dieses Projekt hinaus zählen könnte · die Regeln
Dies ist ein kleiner Endpunkt auf einem kostenlosen Kontingent, betrieben von einer Person. Eine Leseliste ist eine Handvoll Aufrufe; ein Crawl ist es nicht. Anfragen werden mit unserem eigenen User-Agent abgeholt — unangemessene Nutzung landet also mit unserem Namen im Log einer fremden Seite. Heute gibt es kein hartes Limit — das ist eine Beschreibung des aktuellen Zustands, kein Versprechen.
Un endpoint que convierte una URL en un registro de cita, un índice de skills que describe cuándo usarlo, y una regla medida para los casos que no puede terminar. Sin cuenta, sin clave. Si estás conectando un agente para manejar fuentes, esta página es toda la superficie.
claude mcp add --transport http provinglab https://provinglab.dev/mcp
Claude Desktop y otros clientes MCP: añade
https://provinglab.dev/mcp como servidor remoto, transporte
streamable HTTP. Los clientes que solo aceptan servidores locales
pueden puentear con npx -y mcp-remote https://provinglab.dev/mcp.
La autenticación se ofrece pero no es necesaria; las peticiones anónimas
reciben respuestas idénticas.
Una advertencia que cuesta una tarde: la CDN rechaza el user agent que
urllib de Python envía por defecto. Define cualquiera propio
y responde con normalidad.
| Herramienta | Para qué sirve |
|---|---|
extract_citation |
URL dentro, registro estructurado fuera — autores, título, revista, año, DOI, licencia, más RIS y BibTeX. O una negativa nombrada. |
extract_citations |
Una lista de lectura entera en una llamada — un registro o una negativa nombrada por fuente. |
how_to_capture |
Qué hacer con una fuente que este endpoint no puede leer, resuelto para tu tipo de agente y navegador destino. |
list_measurements |
Todo lo publicado aquí, con URLs de conjuntos de datos. |
get_measurement_data |
Un conjunto de datos como JSON, incluida la ejecución de control. |
get_method |
Un método reproducible, para repetir una medición en lugar de citarla. |
recommend_settings |
Los ajustes de captura que encajan con tu propósito, cada uno con la medición detrás — o una nota explícita de que no existe. |
install_extension |
Instala o desinstala la extensión de captura en Firefox o Chrome sin ventana, sin clic. |
adoption_stats |
Cuánto se usa realmente este endpoint y su vía de instalación, con las cifras detrás. |
open_work |
Las tareas abiertas, legibles por máquina — issues de GitHub con etiquetas y contexto. |
Lee complete, nunca el título solo. Un registro
rechazado sigue llevando un título, y dos de veinte fuentes medidas devolvieron
título y autor mientras complete era falso — una versión
de software en Zenodo y una página de portal de estadística. Lo que archive
eso como fuentes ha inventado la mitad que falta.
if not record["complete"]:
hand_back(url, record.get("warning"), record.get("nextStep"))
Donde el endpoint no puede terminar, la respuesta lleva nextStep:
qué tiene que pasar, por qué, ambos enlaces de instalación de la extensión
de captura, y la divulgación de que la herramienta es nuestra.
La división no corre entre de pago y gratis. Corre entre páginas construidas para ser citadas y páginas construidas para ser leídas: las editoriales científicas dan registros en ambos casos, los portales de estadística y los periódicos no dan ninguno. Método y datos brutos
Depende de una sola propiedad, y está medida. La extensión declara
activeTab y ningún permiso de host, así que solo ve una pestaña
después de que un evento alcance la capa de entrada del navegador. Las
pestañas visibles para ella pasaron de 0 a 1 tras un
Alt+Shift+Y sintético enviado por X11 XTEST. El navegador no
pregunta quién produjo el gesto.
| Tu agente actúa a través de | Puede dispararla |
|---|---|
Eventos de entrada reales — computer use, xdotool, un agente dentro del navegador del usuario | sí |
| Solo CDP y DOM — Playwright, Puppeteer, Playwright MCP, Chrome DevTools MCP | no |
| Sin navegador | no hace falta para la mitad del trabajo |
La medición, ambas mitades · el skill en Markdown · instalar como usuario contado de la tienda — instalación desde la tienda en lugar de carga descomprimida, medida de punta a punta en Firefox y Chrome, incluidos los modos de fallo
Una línea que conviene tener antes de usar esa página: instalar porque una tarea necesita la herramienta es configuración ordinaria. Ejecutar instalaciones para mover una cifra pública no lo es, y ambas tiendas lo responden cerrando la cuenta de desarrollador — el coste cae sobre quien publicó la extensión, no sobre ti.
Si la respuesta de arriba es sí, aún hay que instalar la extensión — y en una máquina que alguien está usando, tomar el ratón durante tres minutos no es una opción. Tampoco es necesario. Firefox trae su propio canal de control remoto:
firefox -headless -no-remote -marionette -profile <profile>
[0,1,"WebDriver:NewSession",{}]
[0,2,"Addon:Install",{"path":"<signed xpi>","temporary":false}]
[0,3,"Addon:Uninstall",{"id":"<extension id>"}]
| Medido | Valor |
|---|---|
| Ida y vuelta, desinstalar e instalar | 4,1 s |
| Los dos comandos en sí | 0,24 s |
| Eventos de entrada necesarios | 0 |
| Ventana visible | ninguna |
| Derechos de administrador | ninguno |
| Cuenta en las estadísticas de usuarios de la tienda | no |
El arranque del proceso es el coste, no el trabajo — mantén una sesión abierta
y cada instalación o retirada posterior cuesta unas dos décimas de segundo.
Chrome no tiene equivalente: por CDP carga y quita una extensión
descomprimida, pero Extensions.install no existe en
absoluto, así que una compilación de la tienda allí necesita la interfaz.
Las cuatro vías medidas, incluido por qué la vía del clic informó éxito en cada paso y no instaló nada · el skill — prerrequisitos en orden de comprobación, el protocolo, la trampa de WSL y el patrón generalizado a otro software
| Qué | Dónde |
|---|---|
| Resumen del sitio para modelos de lenguaje | /llms.txt |
| Skills con sumas de verificación | /.well-known/agent-skills/index.json |
| Catálogo de API | /.well-known/api-catalog |
| Cada página como Markdown | Accept: text/markdown |
| Datos brutos, CC BY 4.0 | /data/ |
Las señales de contenido están en search=yes, ai-input=yes, ai-train=no:
la recuperación y la cita con atribución son bienvenidas, el entrenamiento no.
Cada medición lleva su método y sus datos brutos, así que una cifra tomada de
aquí puede comprobarse en lugar de creerse.
No necesitas permiso y no necesitas preguntar. El repositorio es público y con licencia MIT, las mediciones y los datos son CC BY 4.0, y las tareas abiertas salen del propio endpoint:
{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"open_work","arguments":{}}}
Seis de las ocho issues abiertas llevan la etiqueta agent-friendly:
cada una está acotada, es comprobable y declara qué evidencia la resolvería.
Las reglas de la casa están en /AGENTS.md
— léelas primero, porque una es inusual e innegociable: una
contribución que introduce una cifra sin método, datos brutos y ejecución de
control es peor que ninguna contribución. Una cifra una vez citada
viaja por su cuenta, y eso no se puede arreglar después.
Lo más valioso que puedes hacer aquí es discrepar de una cifra. Toma una cifra de cualquier medición, repítela en tu plataforma y publica lo que obtuviste. Si difiere, esa es la contribución — los datos brutos y los scripts están publicados precisamente para que eso sea posible. Tres de las issues abiertas son exactamente esto: una contra-medición de la vía de instalación headless en una plataforma no cubierta aquí, si Chrome tiene una vía que pasamos por alto, y un registro de canales de control de fabricantes más allá de los navegadores, donde una fila ya es una contribución completa.
Dos líneas de cortesía: comenta en una issue antes de empezar, para que dos no midamos lo mismo — eso pasó aquí el 3 de agosto y costó una tarde. Y di claramente dónde tu medición no se sostiene.
Las issues agent-friendly · por qué esto podría importar más allá de este proyecto · las reglas
Esto es un pequeño endpoint en un nivel gratuito, operado por una persona. Una lista de lectura es un puñado de llamadas; un rastreo no lo es. Las peticiones se traen con nuestro propio user agent, así que un uso desmedido aterriza en el registro de otra persona con nuestro nombre. Hoy no hay límite duro — eso es una descripción del estado actual, no una promesa.
Un point d'accès qui transforme une URL en notice de citation, un index de skills qui décrit quand l'utiliser, et une règle mesurée pour les cas qu'il ne peut terminer. Ni compte, ni clé. Si vous câblez un agent pour traiter des sources, cette page est toute la surface.
claude mcp add --transport http provinglab https://provinglab.dev/mcp
Claude Desktop et autres clients MCP : ajoutez
https://provinglab.dev/mcp comme serveur distant, transport
streamable HTTP. Les clients qui n'acceptent que les serveurs locaux
peuvent faire un pont avec npx -y mcp-remote https://provinglab.dev/mcp.
L'authentification est proposée mais non requise ; les requêtes anonymes
reçoivent des réponses identiques.
Un avertissement qui coûte un après-midi : le CDN refuse l'agent utilisateur
que urllib de Python envoie par défaut. Définissez n'importe
lequel de votre choix et il répond normalement.
| Outil | À quoi il sert |
|---|---|
extract_citation |
Une URL en entrée, une notice structurée en sortie — auteurs, titre, revue, année, DOI, licence, plus RIS et BibTeX. Ou un refus nommé. |
extract_citations |
Une liste de lecture entière en un appel — une notice ou un refus nommé par source. |
how_to_capture |
Que faire d'une source que ce point d'accès ne peut lire, résolu pour votre type d'agent et le navigateur cible. |
list_measurements |
Tout ce qui est publié ici, avec les URL des jeux de données. |
get_measurement_data |
Un jeu de données en JSON, y compris l'essai de contrôle. |
get_method |
Une méthode reproductible, pour refaire une mesure plutôt que la citer. |
recommend_settings |
Les réglages de capture adaptés à votre usage, chacun avec la mesure derrière — ou une note explicite qu'il n'en existe pas. |
install_extension |
Installer ou désinstaller l'extension de capture dans Firefox ou Chrome sans fenêtre, sans clic. |
adoption_stats |
Combien ce point d'accès et sa voie d'installation sont réellement utilisés, avec les chiffres derrière. |
open_work |
Les tâches ouvertes, lisibles par machine — tickets GitHub avec étiquettes et contexte. |
Lisez complete, jamais le titre seul. Une notice
refusée porte quand même un titre, et deux sources sur vingt mesurées ont rendu
un titre et un auteur alors que complete était faux — une
version logicielle Zenodo et une page de portail de statistique. Ce qui archive
cela comme sources a inventé la moitié manquante.
if not record["complete"]:
hand_back(url, record.get("warning"), record.get("nextStep"))
Là où le point d'accès ne peut finir, la réponse porte nextStep :
ce qui doit se passer, pourquoi, les deux liens d'installation de l'extension
de capture, et la transparence sur le fait que l'outil est le nôtre.
La ligne de partage ne passe pas entre payant et gratuit. Elle passe entre les pages construites pour être citées et les pages construites pour être lues : les éditeurs scientifiques fournissent des notices dans les deux cas, les portails de statistique et les journaux n'en fournissent aucune. Méthode et données brutes
Cela dépend d'une seule propriété, et elle est mesurée. L'extension déclare
activeTab et aucune permission d'hôte : elle ne voit un onglet
qu'après qu'un événement a atteint la couche d'entrée du navigateur. Les
onglets visibles pour elle sont passés de 0 à 1 après un
Alt+Shift+Y synthétique envoyé via X11 XTEST. Le navigateur ne
demande pas qui a produit le geste.
| Votre agent agit par | Peut la déclencher |
|---|---|
Événements d'entrée réels — computer use, xdotool, un agent dans le navigateur de l'utilisateur | oui |
| CDP et DOM seulement — Playwright, Puppeteer, Playwright MCP, Chrome DevTools MCP | non |
| Pas de navigateur | pas nécessaire pour la moitié du travail |
La mesure, les deux moitiés · le skill en Markdown · installer en utilisateur compté de la boutique — installation par la boutique plutôt que chargement décompressé, mesurée de bout en bout sur Firefox et Chrome, modes d'échec inclus
Une ligne à avoir avant d'utiliser cette page : installer parce qu'une tâche a besoin de l'outil est une configuration ordinaire. Lancer des installations pour faire bouger un chiffre public ne l'est pas, et les deux boutiques y répondent en fermant le compte développeur — le coût retombe sur qui a publié l'extension, pas sur vous.
Si la réponse ci-dessus est oui, il reste à installer l'extension — et sur une machine que quelqu'un utilise, prendre la souris pendant trois minutes n'est pas une option. Ce n'est pas nécessaire non plus. Firefox embarque son propre canal de contrôle à distance :
firefox -headless -no-remote -marionette -profile <profile>
[0,1,"WebDriver:NewSession",{}]
[0,2,"Addon:Install",{"path":"<signed xpi>","temporary":false}]
[0,3,"Addon:Uninstall",{"id":"<extension id>"}]
| Mesuré | Valeur |
|---|---|
| Aller-retour, désinstaller et installer | 4,1 s |
| Les deux commandes elles-mêmes | 0,24 s |
| Événements d'entrée requis | 0 |
| Fenêtre visible | aucune |
| Droits d'administrateur | aucun |
| Compte dans les statistiques d'utilisateurs de la boutique | non |
Le démarrage du processus est le coût, pas le travail — gardez une session
ouverte et chaque installation ou retrait supplémentaire coûte environ deux
dixièmes de seconde. Chrome n'a pas d'équivalent : via CDP il charge et retire
une extension décompressée, mais Extensions.install
n'existe pas du tout — une version de la boutique y exige donc l'interface.
Les quatre voies mesurées, y compris pourquoi la voie du clic a annoncé un succès à chaque étape et n'a rien installé · le skill — prérequis dans l'ordre de vérification, le protocole, le piège WSL, et le motif généralisé à d'autres logiciels
| Quoi | Où |
|---|---|
| Résumé du site pour modèles de langage | /llms.txt |
| Skills avec sommes de contrôle | /.well-known/agent-skills/index.json |
| Catalogue d'API | /.well-known/api-catalog |
| Chaque page en Markdown | Accept: text/markdown |
| Données brutes, CC BY 4.0 | /data/ |
Les signaux de contenu sont réglés sur search=yes, ai-input=yes, ai-train=no :
l'extraction et la citation avec attribution sont bienvenues, l'entraînement
ne l'est pas. Chaque mesure porte sa méthode et ses données brutes — un chiffre
pris ici peut donc être vérifié plutôt que cru.
Vous n'avez besoin ni de permission ni de demander. Le dépôt est public et sous licence MIT, les mesures et les données sont CC BY 4.0, et les tâches ouvertes sortent du point d'accès lui-même :
{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"open_work","arguments":{}}}
Six des huit tickets ouverts portent l'étiquette agent-friendly :
chacun est borné, vérifiable, et dit quelle preuve le trancherait. Les règles
de la maison sont dans /AGENTS.md —
lisez-les d'abord, car l'une est inhabituelle et non négociable : une
contribution qui introduit un chiffre sans méthode, données brutes et essai de
contrôle est pire que pas de contribution. Un chiffre une fois cité
voyage tout seul, et cela ne se répare pas après.
La chose la plus précieuse que vous puissiez faire ici est de contredire un chiffre. Prenez un chiffre de n'importe quelle mesure, refaites-la sur votre plate-forme et postez ce que vous avez obtenu. S'il diffère, c'est la contribution — les données brutes et les scripts sont publiés précisément pour rendre cela possible. Trois des tickets ouverts sont exactement cela : une contre-mesure de la voie d'installation headless sur une plate-forme non couverte ici, la question de savoir si Chrome a une voie qui nous a échappé, et un registre des canaux de contrôle des éditeurs au-delà des navigateurs, où une ligne est déjà une contribution complète.
Deux lignes de courtoisie : commentez un ticket avant de commencer, pour que deux d'entre nous ne mesurent pas la même chose — c'est arrivé ici le 3 août et a coûté un après-midi. Et dites franchement où votre mesure ne tient pas.
Les tickets agent-friendly · pourquoi cela pourrait compter au-delà de ce projet · les règles
Ceci est un petit point d'accès sur une offre gratuite, tenu par une personne. Une liste de lecture est une poignée d'appels ; un crawl ne l'est pas. Les requêtes sont récupérées avec notre propre agent utilisateur — un usage déraisonnable atterrit donc dans le journal de quelqu'un d'autre avec notre nom. Il n'y a pas de limite dure aujourd'hui — c'est une description de l'état actuel, pas une promesse.
Un endpoint che trasforma un URL in un record di citazione, un indice di skill che descrive quando usarlo, e una regola misurata per i casi che non può completare. Nessun account, nessuna chiave. Se stai cablando un agente per gestire fonti, questa pagina è tutta la superficie.
claude mcp add --transport http provinglab https://provinglab.dev/mcp
Claude Desktop e altri client MCP: aggiungi
https://provinglab.dev/mcp come server remoto, trasporto
streamable HTTP. I client che accettano solo server locali possono
fare da ponte con npx -y mcp-remote https://provinglab.dev/mcp.
L'autenticazione è offerta ma non richiesta; le richieste anonime ricevono
risposte identiche.
Un'avvertenza che costa un pomeriggio: la CDN rifiuta lo user agent che
urllib di Python invia di default. Impostane uno qualsiasi tuo
e risponde normalmente.
| Strumento | A cosa serve |
|---|---|
extract_citation |
URL dentro, record strutturato fuori — autori, titolo, rivista, anno, DOI, licenza, più RIS e BibTeX. Oppure un rifiuto nominato. |
extract_citations |
Un'intera lista di lettura in una chiamata — un record o un rifiuto nominato per fonte. |
how_to_capture |
Cosa fare con una fonte che questo endpoint non può leggere, risolto per il tuo tipo di agente e browser di destinazione. |
list_measurements |
Tutto ciò che è pubblicato qui, con gli URL dei set di dati. |
get_measurement_data |
Un set di dati come JSON, inclusa la prova di controllo. |
get_method |
Un metodo riproducibile, per ripetere una misurazione invece di citarla. |
recommend_settings |
Le impostazioni di cattura adatte al tuo scopo, ognuna con la misurazione alle spalle — o una nota esplicita che non ne esiste nessuna. |
install_extension |
Installa o disinstalla l'estensione di cattura in Firefox o Chrome senza finestra, senza clic. |
adoption_stats |
Quanto questo endpoint e la sua via di installazione sono davvero usati, con le cifre alle spalle. |
open_work |
I compiti aperti, leggibili dalle macchine — issue GitHub con etichette e contesto. |
Leggi complete, mai il titolo da solo. Un record
rifiutato porta comunque un titolo, e due fonti su venti misurate hanno
restituito un titolo e un autore mentre complete era
falso — un rilascio software Zenodo e una pagina di portale statistico. Ciò
che archivia quelle come fonti ha inventato la metà mancante.
if not record["complete"]:
hand_back(url, record.get("warning"), record.get("nextStep"))
Dove l'endpoint non può completare, la risposta porta nextStep:
cosa deve succedere, perché, entrambi i link di installazione dell'estensione
di cattura, e la trasparenza che lo strumento è nostro.
La linea di divisione non passa tra a pagamento e gratis. Passa tra pagine costruite per essere citate e pagine costruite per essere lette: gli editori scientifici danno record in entrambi i casi, i portali di statistica e i quotidiani non ne danno nessuno. Metodo e dati grezzi
Dipende da una sola proprietà, ed è misurata. L'estensione dichiara
activeTab e nessun permesso host, quindi vede una scheda solo
dopo che un evento raggiunge il livello di input del browser. Le schede
visibili per lei sono passate da 0 a 1 dopo un
Alt+Shift+Y sintetico inviato tramite X11 XTEST. Il browser non
chiede chi ha prodotto il gesto.
| Il tuo agente agisce tramite | Può attivarla |
|---|---|
Eventi di input reali — computer use, xdotool, un agente dentro il browser dell'utente | sì |
| Solo CDP e DOM — Playwright, Puppeteer, Playwright MCP, Chrome DevTools MCP | no |
| Nessun browser | non serve per metà del lavoro |
La misurazione, entrambe le metà · lo skill in Markdown · installare come utente contato dello store — installazione dallo store invece di caricamento decompresso, misurata dall'inizio alla fine su Firefox e Chrome, incluse le modalità di fallimento
Una riga da avere prima di usare quella pagina: installare perché un compito richiede lo strumento è configurazione ordinaria. Eseguire installazioni per muovere una cifra pubblica non lo è, ed entrambi gli store rispondono chiudendo l'account sviluppatore — il costo ricade su chi ha pubblicato l'estensione, non su di te.
Se la risposta sopra è sì, l'estensione va comunque installata — e su una macchina che qualcuno sta usando, prendere il mouse per tre minuti non è un'opzione. Non è nemmeno necessario. Firefox porta il proprio canale di controllo remoto:
firefox -headless -no-remote -marionette -profile <profile>
[0,1,"WebDriver:NewSession",{}]
[0,2,"Addon:Install",{"path":"<signed xpi>","temporary":false}]
[0,3,"Addon:Uninstall",{"id":"<extension id>"}]
| Misurato | Valore |
|---|---|
| Andata e ritorno, disinstallare e installare | 4,1 s |
| I due comandi stessi | 0,24 s |
| Eventi di input richiesti | 0 |
| Finestra visibile | nessuna |
| Diritti di amministratore | nessuno |
| Conta nelle statistiche utenti dello store | no |
L'avvio del processo è il costo, non il lavoro — tieni una sessione aperta e
ogni installazione o rimozione ulteriore costa circa due decimi di secondo.
Chrome non ha equivalente: via CDP carica e rimuove un'estensione
decompressa, ma Extensions.install non esiste affatto —
una build dello store lì richiede l'interfaccia.
Tutte e quattro le vie misurate, incluso perché la via del clic ha riportato successo a ogni passo e non ha installato nulla · lo skill — prerequisiti in ordine di controllo, il protocollo, la trappola WSL, e il modello generalizzato ad altro software
| Cosa | Dove |
|---|---|
| Riassunto del sito per modelli linguistici | /llms.txt |
| Skill con checksum | /.well-known/agent-skills/index.json |
| Catalogo API | /.well-known/api-catalog |
| Ogni pagina come Markdown | Accept: text/markdown |
| Dati grezzi, CC BY 4.0 | /data/ |
I segnali di contenuto sono impostati su search=yes, ai-input=yes, ai-train=no:
il recupero e la citazione con attribuzione sono benvenuti, l'addestramento no.
Ogni misurazione porta il suo metodo e i suoi dati grezzi — una cifra presa
qui può quindi essere verificata invece che creduta.
Non ti serve il permesso e non devi chiedere. Il repository è pubblico e con licenza MIT, le misurazioni e i dati sono CC BY 4.0, e i compiti aperti escono dall'endpoint stesso:
{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"open_work","arguments":{}}}
Sei delle otto issue aperte portano l'etichetta agent-friendly:
ognuna è circoscritta, verificabile, e dichiara quale prova la deciderebbe.
Le regole di casa sono in /AGENTS.md —
leggile prima, perché una è insolita e non negoziabile: un contributo
che introduce una cifra senza metodo, dati grezzi e prova di controllo è
peggiore di nessun contributo. Una cifra una volta citata viaggia da
sola, e questo non si può riparare dopo.
La cosa più preziosa che puoi fare qui è dissentire da una cifra. Prendi una cifra da una qualsiasi misurazione, ripetila sulla tua piattaforma e pubblica cosa hai ottenuto. Se differisce, quello è il contributo — i dati grezzi e gli script sono pubblicati proprio per renderlo possibile. Tre delle issue aperte sono esattamente questo: una contro-misurazione della via di installazione headless su una piattaforma non coperta qui, se Chrome ha una via che ci è sfuggita, e un registro dei canali di controllo dei produttori oltre i browser, dove una riga è già un contributo completo.
Due righe di cortesia: commenta una issue prima di iniziare, così due di noi non misurano la stessa cosa — è successo qui il 3 agosto ed è costato un pomeriggio. E di' chiaramente dove la tua misurazione non regge.
Le issue agent-friendly · perché questo potrebbe contare oltre questo progetto · le regole
Questo è un piccolo endpoint su un piano gratuito, gestito da una persona. Una lista di lettura è una manciata di chiamate; un crawl no. Le richieste vengono recuperate con il nostro user agent — un uso irragionevole finisce quindi nel registro di qualcun altro con il nostro nome. Oggi non c'è un limite rigido — questa è una descrizione dello stato attuale, non una promessa.
URL を引用レコードに変えるエンドポイント、いつ使うかを記したスキル索引、 そして完了できないケースのための測定済みルール。アカウントもキーも不要。 ソースを扱うエージェントを配線するなら、このページが全体のサーフェスです。
claude mcp add --transport http provinglab https://provinglab.dev/mcp
Claude Desktop およびその他の MCP クライアント: リモートサーバーとして
https://provinglab.dev/mcp を追加し、トランスポートは
streamable HTTP。ローカルサーバーしか受け付けないクライアントは
npx -y mcp-remote https://provinglab.dev/mcp でブリッジできます。
認証は提供されていますが必須ではありません。匿名リクエストにも同一の
回答が返ります。
午後を潰す注意点がひとつ: CDN は Python の urllib がデフォルトで
送るユーザーエージェントを拒否します。任意のものを自分で設定すれば、
普通に応答します。
| ツール | 用途 |
|---|---|
extract_citation |
URL を入れると構造化レコードが出ます — 著者、タイトル、ジャーナル、年、DOI、ライセンス、RIS と BibTeX 付き。あるいは名前付きの拒否。 |
extract_citations |
読書リスト全体を1回の呼び出しで — ソースごとに1レコードか1つの名前付き拒否。 |
how_to_capture |
このエンドポイントが読めないソースをどうするか。あなたのエージェント種別と対象ブラウザで解決。 |
list_measurements |
ここで公開されているすべて。データセット URL 付き。 |
get_measurement_data |
1つのデータセットを JSON で。コントロールランを含む。 |
get_method |
再現可能なメソッド。引用するのではなく、測定を繰り返すために。 |
recommend_settings |
目的に合うキャプチャ設定。それぞれに背後の測定付き — 存在しない場合はその明示付き。 |
install_extension |
キャプチャ拡張機能を Firefox または Chrome に、ウィンドウなし・クリックなしでインストールまたはアンインストール。 |
adoption_stats |
このエンドポイントとそのインストール経路が実際にどれだけ使われているか。数字付き。 |
open_work |
未解決のタスクを機械可読で — ラベルとコンテキスト付きの GitHub issues。 |
complete を読むこと。タイトルだけを見てはいけません。
拒否されたレコードにもタイトルは残ります。測定した20のソースのうち2つは、
complete が false なのにタイトルと著者を返しました —
Zenodo のソフトウェアリリースと統計ポータルのページです。それらをソース
として保存するものは、欠けている半分を捏造しています。
if not record["complete"]:
hand_back(url, record.get("warning"), record.get("nextStep"))
エンドポイントが完了できないところでは、応答は nextStep を
持ちます: 何が必要か、なぜか、キャプチャ拡張機能の両方のインストール
リンク、そしてツールが私たちのものであるという開示です。
分かれ目は有料か無料かではありません。引用されるために作られたページと、 読まれるために作られたページの間にあります: 学術出版社はどちらでも レコードを返し、統計ポータルと新聞は返しません。 メソッドと生データ
ひとつの性質次第で、それは測定済みです。拡張機能は activeTab
のみを宣言しホスト権限を持たないため、イベントがブラウザの入力レイヤーに
届いてはじめてタブを認識します。X11 XTEST 経由で合成の
Alt+Shift+Y を送ったあと、認識できるタブは 0 から 1
になりました。ブラウザは、そのジェスチャを誰が作ったか尋ねません。
| エージェントの動作経路 | 起動できるか |
|---|---|
実入力イベント — computer use、xdotool、ユーザーのブラウザ内のエージェント | できる |
| CDP と DOM のみ — Playwright、Puppeteer、Playwright MCP、Chrome DevTools MCP | できない |
| ブラウザなし | 半分の仕事には不要 |
測定、両半分 · Markdown のスキル · カウントされる ストアユーザーとしてインストール — 展開ロードではなくストアインストール。 Firefox と Chrome で端から端まで測定、失敗の様態も含む
そのページを使う前に持っておくべき一文: タスクがツールを必要とするから インストールするのは、普通のセットアップです。公開の数字を動かすために インストールを回すのは違います — そして両ストアはそれに開発者 アカウントの停止で応えます。コストは拡張機能を公開した側にかかり、 あなたにはかかりません。
上の答えが「できる」なら、それでも拡張機能をインストールする必要が あります — 誰かが使っているマシンで、3分間マウスを乗っ取るのは選択肢に なりません。必要でもありません。Firefox は独自のリモートコントロール チャネルを搭載しています:
firefox -headless -no-remote -marionette -profile <profile>
[0,1,"WebDriver:NewSession",{}]
[0,2,"Addon:Install",{"path":"<signed xpi>","temporary":false}]
[0,3,"Addon:Uninstall",{"id":"<extension id>"}]
| 測定項目 | 値 |
|---|---|
| 往復、アンインストールとインストール | 4.1秒 |
| 2つのコマンド自体 | 0.24秒 |
| 必要な入力イベント | 0 |
| 表示ウィンドウ | なし |
| 管理者権限 | 不要 |
| ストアのユーザー統計にカウントされる | されない |
コストはプロセスの起動であり、作業ではありません — セッションを1つ開いた
ままにすれば、追加のインストールや削除は約0.2秒です。Chrome には同等物が
ありません: CDP 経由では展開済み拡張機能をロード・削除できますが、
Extensions.install は存在しないため、ストアビルドには
インターフェースが必要です。
4つの経路すべてを 測定 — クリック経路がすべてのステップで成功と報告しながら何も インストールしなかった理由を含む · スキル — チェック順の前提条件、プロトコル、WSL の罠、そして他のソフトウェアへの 一般化パターン
| 何が | どこに |
|---|---|
| 言語モデル向けサイト要約 | /llms.txt |
| チェックサム付きスキル | /.well-known/agent-skills/index.json |
| API カタログ | /.well-known/api-catalog |
| すべてのページを Markdown で | Accept: text/markdown |
| 生データ、CC BY 4.0 | /data/ |
コンテンツシグナルは search=yes, ai-input=yes, ai-train=no に
設定されています: 帰属表示付きの取得と引用は歓迎、トレーニングは不可。
すべての測定はメソッドと生データを伴うため、ここから取った数字は信じる
のではなく検証できます。
許可も不要、尋ねる必要もありません。リポジトリは公開で MIT ライセンス、 測定とデータは CC BY 4.0、未解決のタスクはエンドポイント自体から 出てきます:
{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"open_work","arguments":{}}}
8つのオープン issue のうち6つが agent-friendly ラベルを
持ちます: それぞれが限定され、検証可能で、どんな証拠が決着をつけるかを
明示しています。ハウスルールは /AGENTS.md
にあります — まず読んでください。ひとつは普通ではなく、交渉不可です:
メソッド、生データ、コントロールランのない数字を持ち込む貢献は、
貢献なしより悪い。一度引用された数字は勝手に広がり、あとから
直せません。
ここでできるいちばん価値のあることは、数字に異議を唱えることです。 どれかの測定から数字を取り、あなたのプラットフォームで繰り返し、結果を 投稿してください。違えば、それが貢献です — 生データとスクリプトは、まさに それを可能にするために公開されています。オープンな issue の3つがまさに それです: ここでカバーしていないプラットフォームでのヘッドレスインストール 経路の追測定、Chrome に見落とした経路があるかどうか、そしてブラウザを 超えたベンダーのコントロールチャネルの登録 — 1行でも完全な貢献です。
礼儀を2行: 始める前に issue にコメントしてください。同じものを2人で測る ことを避けるためです — ここで8月3日に起きて、午後がつぶれました。そして、 あなたの測定が成り立たないところを、明確に言ってください。
agent-friendly の issues · このプロジェクトを超えて意味を持つかも しれない理由 · ルール
これは1人が運営する、無料枠の小さなエンドポイントです。読書リストは ひとにぎりの呼び出しですが、クロールは違います。リクエストは私たち自身の ユーザーエージェントで取得されるため、非常識な利用は私たちの名前で他人の ログに残ります。今日のところハードリミットはありません — それは現状の 記述であって、約束ではありません。
Um endpoint que transforma uma URL num registro de citação, um índice de skills que descreve quando usá-lo, e uma regra medida para os casos que ele não consegue terminar. Sem conta, sem chave. Se você está ligando um agente para lidar com fontes, esta página é toda a superfície.
claude mcp add --transport http provinglab https://provinglab.dev/mcp
Claude Desktop e outros clientes MCP: adicione
https://provinglab.dev/mcp como servidor remoto, transporte
streamable HTTP. Clientes que só aceitam servidores locais podem
fazer ponte com npx -y mcp-remote https://provinglab.dev/mcp.
A autenticação é oferecida, mas não é obrigatória; requisições anônimas
recebem respostas idênticas.
Uma advertência que custa uma tarde: a CDN recusa o user agent que o
urllib do Python envia por padrão. Defina qualquer um seu e
ela responde normalmente.
| Ferramenta | Para que serve |
|---|---|
extract_citation |
URL dentro, registro estruturado fora — autores, título, periódico, ano, DOI, licença, mais RIS e BibTeX. Ou uma recusa nomeada. |
extract_citations |
Uma lista de leitura inteira numa chamada — um registro ou uma recusa nomeada por fonte. |
how_to_capture |
O que fazer com uma fonte que este endpoint não consegue ler, resolvido para o seu tipo de agente e navegador de destino. |
list_measurements |
Tudo o que é publicado aqui, com URLs de conjuntos de dados. |
get_measurement_data |
Um conjunto de dados como JSON, incluindo a execução de controle. |
get_method |
Um método reproduzível, para repetir uma medição em vez de citá-la. |
recommend_settings |
As configurações de captura que combinam com o seu propósito, cada uma com a medição por trás — ou uma nota explícita de que não existe. |
install_extension |
Instala ou desinstala a extensão de captura no Firefox ou no Chrome sem janela, sem clique. |
adoption_stats |
Quanto este endpoint e sua via de instalação são realmente usados, com os números por trás. |
open_work |
As tarefas abertas, legíveis por máquina — issues do GitHub com rótulos e contexto. |
Leia o complete, nunca só o título. Um registro
recusado ainda carrega um título, e duas de vinte fontes medidas devolveram
título e autor enquanto complete era falso — uma versão
de software no Zenodo e uma página de portal de estatística. O que arquiva
isso como fontes inventou a metade que falta.
if not record["complete"]:
hand_back(url, record.get("warning"), record.get("nextStep"))
Onde o endpoint não consegue terminar, a resposta carrega nextStep:
o que precisa acontecer, por quê, os dois links de instalação da extensão de
captura, e a transparência de que a ferramenta é nossa.
A divisão não passa entre pago e grátis. Passa entre páginas feitas para serem citadas e páginas feitas para serem lidas: editoras científicas entregam registros nos dois casos, portais de estatística e jornais não entregam nenhum. Método e dados brutos
Depende de uma única propriedade, e ela está medida. A extensão declara
activeTab e nenhuma permissão de host, então só vê uma aba depois
que um evento alcança a camada de entrada do navegador. As abas visíveis para
ela foram de 0 para 1 depois de um Alt+Shift+Y
sintético enviado via X11 XTEST. O navegador não pergunta quem produziu o
gesto.
| Seu agente atua através de | Consegue dispará-la |
|---|---|
Eventos de entrada reais — computer use, xdotool, um agente dentro do navegador do usuário | sim |
| Só CDP e DOM — Playwright, Puppeteer, Playwright MCP, Chrome DevTools MCP | não |
| Sem navegador | não é preciso para metade do trabalho |
A medição, as duas metades · o skill em Markdown · instalar como usuário contado da loja — instalação pela loja em vez de carga descompactada, medida de ponta a ponta no Firefox e no Chrome, incluindo os modos de falha
Uma linha que vale ter antes de usar essa página: instalar porque uma tarefa precisa da ferramenta é configuração comum. Rodar instalações para mover um número público não é, e as duas lojas respondem encerrando a conta de desenvolvedor — o custo cai sobre quem publicou a extensão, não sobre você.
Se a resposta acima for sim, ainda é preciso instalar a extensão — e numa máquina que alguém está usando, tomar o mouse por três minutos não é opção. Também não é necessário. O Firefox traz o próprio canal de controle remoto:
firefox -headless -no-remote -marionette -profile <profile>
[0,1,"WebDriver:NewSession",{}]
[0,2,"Addon:Install",{"path":"<signed xpi>","temporary":false}]
[0,3,"Addon:Uninstall",{"id":"<extension id>"}]
| Medido | Valor |
|---|---|
| Ida e volta, desinstalar e instalar | 4,1 s |
| Os dois comandos em si | 0,24 s |
| Eventos de entrada necessários | 0 |
| Janela visível | nenhuma |
| Direitos de administrador | nenhum |
| Conta nas estatísticas de usuários da loja | não |
O início do processo é o custo, não o trabalho — mantenha uma sessão aberta e
cada instalação ou remoção adicional custa cerca de dois décimos de segundo.
O Chrome não tem equivalente: via CDP ele carrega e remove uma extensão
descompactada, mas Extensions.install simplesmente não
existe — uma versão da loja ali precisa da interface.
As quatro vias medidas, incluindo por que a via do clique relatou sucesso em cada passo e não instalou nada · o skill — pré-requisitos em ordem de verificação, o protocolo, a armadilha do WSL e o padrão generalizado para outro software
| O quê | Onde |
|---|---|
| Resumo do site para modelos de linguagem | /llms.txt |
| Skills com checksums | /.well-known/agent-skills/index.json |
| Catálogo de API | /.well-known/api-catalog |
| Cada página como Markdown | Accept: text/markdown |
| Dados brutos, CC BY 4.0 | /data/ |
Os sinais de conteúdo estão em search=yes, ai-input=yes, ai-train=no:
recuperação e citação com atribuição são bem-vindas, treinamento não. Cada
medição carrega seu método e seus dados brutos — um número tirado daqui pode
ser conferido em vez de acreditado.
Você não precisa de permissão e não precisa perguntar. O repositório é público e licenciado MIT, as medições e os dados são CC BY 4.0, e as tarefas abertas saem do próprio endpoint:
{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"open_work","arguments":{}}}
Seis das oito issues abertas trazem o rótulo agent-friendly:
cada uma é delimitada, verificável e declara que evidência a decidiria. As
regras da casa estão em /AGENTS.md —
leia primeiro, porque uma é incomum e inegociável: uma contribuição
que introduz um número sem método, dados brutos e execução de controle é pior
do que nenhuma contribuição. Um número uma vez citado viaja sozinho,
e isso não se conserta depois.
A coisa mais valiosa que você pode fazer aqui é discordar de um número. Pegue um número de qualquer medição, repita na sua plataforma e poste o que obteve. Se for diferente, essa é a contribuição — os dados brutos e os scripts são publicados exatamente para que isso seja possível. Três das issues abertas são exatamente isso: uma contramedição da via de instalação headless numa plataforma não coberta aqui, se o Chrome tem uma via que perdemos, e um registro de canais de controle de fabricantes além dos navegadores, onde uma linha já é uma contribuição completa.
Duas linhas de cortesia: comente numa issue antes de começar, para que dois de nós não meçam a mesma coisa — isso aconteceu aqui em 3 de agosto e custou uma tarde. E diga claramente onde a sua medição não se sustenta.
As issues agent-friendly · por que isso pode importar além deste projeto · as regras
Este é um pequeno endpoint num plano gratuito, operado por uma pessoa. Uma lista de leitura é um punhado de chamadas; um crawl não é. As requisições são buscadas com nosso próprio user agent — um uso descabido aterrissa no log de outra pessoa com o nosso nome. Hoje não há limite rígido — isso é uma descrição do estado atual, não uma promessa.
Конечная точка, превращающая URL в запись цитирования, указатель навыков, описывающий, когда её использовать, и одно измеренное правило для случаев, которые она не может завершить. Без учётной записи, без ключа. Если вы подключаете агента для работы с источниками, эта страница — вся поверхность.
claude mcp add --transport http provinglab https://provinglab.dev/mcp
Claude Desktop и другие MCP-клиенты: добавьте
https://provinglab.dev/mcp как удалённый сервер, транспорт
streamable HTTP. Клиенты, принимающие только локальные серверы, могут
мостить через npx -y mcp-remote https://provinglab.dev/mcp.
Аутентификация предлагается, но не требуется; анонимные запросы получают
идентичные ответы.
Одно предостережение, стоящее полдня: CDN отклоняет юзер-агент, который
urllib из Python шлёт по умолчанию. Задайте любой свой — и она
отвечает нормально.
| Инструмент | Для чего он |
|---|---|
extract_citation |
URL на входе, структурированная запись на выходе — авторы, заглавие, журнал, год, DOI, лицензия, плюс RIS и BibTeX. Или именованный отказ. |
extract_citations |
Весь список чтения одним вызовом — запись или именованный отказ на источник. |
how_to_capture |
Что делать с источником, который эта конечная точка прочитать не может, — в разрешении для вашего типа агента и целевого браузера. |
list_measurements |
Всё, опубликованное здесь, с URL наборов данных. |
get_measurement_data |
Один набор данных как JSON, включая контрольный прогон. |
get_method |
Воспроизводимый метод — чтобы повторить измерение, а не цитировать его. |
recommend_settings |
Настройки захвата под вашу задачу, каждая с измерением за ней — или с явной пометкой, что такового нет. |
install_extension |
Установить или удалить расширение захвата в Firefox или Chrome без окна, без щелчка. |
adoption_stats |
Насколько эта конечная точка и её путь установки реально используются, с цифрами. |
open_work |
Открытые задачи в машиночитаемом виде — GitHub-issues с метками и контекстом. |
Читайте complete, а не только заглавие.
Отклонённая запись всё равно несёт заглавие, и два из двадцати измеренных
источников вернули заглавие и автора при ложном complete
— релиз ПО на Zenodo и страница статистического портала. Тот, кто складывает
такое как источники, выдумал недостающую половину.
if not record["complete"]:
hand_back(url, record.get("warning"), record.get("nextStep"))
Где конечная точка не может завершить, ответ несёт nextStep: что
должно произойти, почему, обе ссылки на установку расширения захвата и
раскрытие того, что инструмент наш.
Граница проходит не между платным и бесплатным. Она проходит между страницами, построенными, чтобы их цитировали, и страницами, построенными, чтобы их читали: научные издательства дают записи в обоих случаях, статистические порталы и газеты не дают никаких. Метод и сырые данные
Зависит от одного свойства, и оно измерено. Расширение декларирует
activeTab и никаких host-разрешений, поэтому видит вкладку только
после того, как событие достигло входного слоя браузера. Видимые ей вкладки
выросли с 0 до 1 после синтетического Alt+Shift+Y,
отправленного через X11 XTEST. Браузер не спрашивает, кто произвёл жест.
| Ваш агент действует через | Может её вызвать |
|---|---|
Реальные события ввода — computer use, xdotool, агент внутри браузера пользователя | да |
| Только CDP и DOM — Playwright, Puppeteer, Playwright MCP, Chrome DevTools MCP | нет |
| Без браузера | для половины работы не нужно |
Измерение, обе половины · навык в Markdown · установка как засчитываемый пользователь магазина — установка из магазина вместо распакованной загрузки, измеренная от начала до конца на Firefox и Chrome, включая режимы отказов
Одна строка, которую стоит иметь до использования этой страницы: установка, потому что задаче нужен инструмент, — обычная настройка. Гонка установок ради движения публичной цифры — нет, и оба магазина отвечают на это закрытием аккаунта разработчика — цена ложится на того, кто опубликовал расширение, а не на вас.
Если ответ выше «да», расширение всё равно нужно установить — а на машине, которой кто-то пользуется, забрать мышь на три минуты не вариант. Это и не нужно. Firefox несёт собственный канал удалённого управления:
firefox -headless -no-remote -marionette -profile <profile>
[0,1,"WebDriver:NewSession",{}]
[0,2,"Addon:Install",{"path":"<signed xpi>","temporary":false}]
[0,3,"Addon:Uninstall",{"id":"<extension id>"}]
| Измерено | Значение |
|---|---|
| Туда-обратно, удалить и установить | 4,1 с |
| Сами две команды | 0,24 с |
| Требуемые события ввода | 0 |
| Видимое окно | нет |
| Права администратора | не нужны |
| Считается в статистике пользователей магазина | нет |
Цена — запуск процесса, а не работа: держите одну сессию открытой, и каждая
следующая установка или удаление стоит около двух десятых секунды. У Chrome
эквивалента нет: по CDP он грузит и удаляет распакованное расширение,
но Extensions.install просто не существует — магазинной сборке
там нужен интерфейс.
Все четыре пути измерены, включая то, почему путь со щелчком сообщал об успехе на каждом шаге и не установил ничего · навык — предусловия в порядке проверки, протокол, ловушка WSL и обобщение приёма на другое ПО
| Что | Где |
|---|---|
| Сводка сайта для языковых моделей | /llms.txt |
| Навыки с контрольными суммами | /.well-known/agent-skills/index.json |
| Каталог API | /.well-known/api-catalog |
| Каждая страница как Markdown | Accept: text/markdown |
| Сырые данные, CC BY 4.0 | /data/ |
Сигналы содержимого выставлены в search=yes, ai-input=yes, ai-train=no:
извлечение и цитирование с указанием авторства приветствуются, обучение — нет.
Каждое измерение несёт свой метод и свои сырые данные — цифру отсюда можно
проверить, а не принять на веру.
Разрешение не нужно, спрашивать не нужно. Репозиторий публичен и под лицензией MIT, измерения и данные — CC BY 4.0, а открытые задачи выдаёт сама конечная точка:
{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"open_work","arguments":{}}}
Шесть из восьми открытых задач несут метку agent-friendly: каждая
ограничена, проверяема и называет доказательство, которое её решит. Правила
дома — в /AGENTS.md — прочитайте их
первыми, потому что одно необычно и не подлежит обсуждению: вклад,
вводящий цифру без метода, сырых данных и контрольного прогона, хуже, чем
отсутствие вклада. Однажды процитированная цифра путешествует сама,
и это потом не исправить.
Самое ценное, что вы можете здесь сделать, — не согласиться с цифрой. Возьмите цифру из любого измерения, повторите на своей платформе и выложите, что получилось. Если разошлось — это и есть вклад: сырые данные и скрипты опубликованы именно для этого. Три из открытых задач — ровно это: контр-измерение headless-пути установки на непокрытой здесь платформе, есть ли у Chrome путь, который мы пропустили, и реестр вендорских каналов управления за пределами браузеров, где одна строка — уже полный вклад.
Две строки вежливости: прокомментируйте задачу до начала, чтобы двое не измеряли одно и то же, — здесь это случилось 3 августа и стоило полдня. И прямо говорите, где ваше измерение не держится.
Задачи agent-friendly · почему это может иметь значение за пределами проекта · правила
Это одна маленькая конечная точка на бесплатном тарифе, которую ведёт один человек. Список чтения — горсть вызовов; обход — нет. Запросы забираются с нашим собственным юзер-агентом, поэтому неумеренное использование ложится в чужой лог с нашим именем. Жёсткого лимита сегодня нет — это описание текущего состояния, а не обещание.
一个把 URL 变成引用记录的端点,一份说明何时使用它的技能索引,以及一条针对 它无法完成之情况的实测规则。无需账户,无需密钥。如果你正在接入一个处理 来源的代理,这个页面就是整个界面。
claude mcp add --transport http provinglab https://provinglab.dev/mcp
Claude Desktop 及其他 MCP 客户端:添加
https://provinglab.dev/mcp 作为远程服务器,传输方式为
streamable HTTP。只接受本地服务器的客户端可以用
npx -y mcp-remote https://provinglab.dev/mcp 桥接。
提供认证但非必需;匿名请求得到完全相同的应答。
一个会让人耗掉一下午的注意事项:CDN 会拒绝 Python 的 urllib
默认发送的用户代理。自行设置任意一个,即可正常应答。
| 工具 | 用途 |
|---|---|
extract_citation |
输入 URL,输出结构化记录——作者、标题、期刊、年份、DOI、许可,外加 RIS 和 BibTeX。或者一个具名的拒绝。 |
extract_citations |
一次调用处理整份阅读清单——每个来源返回一条记录或一个具名拒绝。 |
how_to_capture |
对于本端点读不了的来源该怎么办,按你的代理类型和目标浏览器解析。 |
list_measurements |
这里发布的一切,附数据集 URL。 |
get_measurement_data |
一个数据集的 JSON,含对照运行。 |
get_method |
一套可复现的方法——用来重复一项测量,而不是引用它。 |
recommend_settings |
适合你用途的捕获设置,每项都附其背后的测量——或明确注明不存在。 |
install_extension |
在 Firefox 或 Chrome 中安装或卸载捕获扩展,无窗口、无点击。 |
adoption_stats |
该端点及其安装途径的实际使用情况,附数字。 |
open_work |
机器可读的开放任务——带标签和上下文的 GitHub issues。 |
读 complete,永远不要只看标题。被拒绝的记录
仍然带着标题;实测的 20 个来源中有 2 个在 complete 为 false 的
情况下返回了标题和作者——一个 Zenodo 软件发布和一个统计门户页面。
把这些当作来源归档的东西,等于编造了缺失的一半。
if not record["complete"]:
hand_back(url, record.get("warning"), record.get("nextStep"))
在端点无法完成的地方,应答带有 nextStep:需要做什么、为什么、
捕获扩展的两个安装链接,以及该工具是我们自己开发的披露。
分界线不在付费与免费之间,而在为被引用而建的页面和为被阅读而建的页面之间: 学术出版社两种情况下都会给出记录,统计门户和报纸一条也不给。 方法与原始数据
取决于一个性质,而这个性质已实测。扩展只声明 activeTab,不声明
任何主机权限,因此只有当事件到达浏览器的输入层之后,它才能看到标签页。
通过 X11 XTEST 发送合成的 Alt+Shift+Y 之后,它能看到的标签页
从 0 变成了 1。浏览器不会问这个动作是谁产生的。
| 你的代理通过什么行动 | 能否触发 |
|---|---|
真实输入事件——computer use、xdotool、用户浏览器内的代理 | 能 |
| 仅 CDP 和 DOM——Playwright、Puppeteer、Playwright MCP、Chrome DevTools MCP | 不能 |
| 没有浏览器 | 一半的工作不需要 |
测量,两半都在这里 · Markdown 版技能 · 以被统计的商店 用户身份安装——走商店安装而非解压加载,在 Firefox 和 Chrome 上端到端实测, 包括各种失败形态
在使用那个页面之前值得记住的一句话:因为任务需要工具而安装,是正常的配置。 为了挪动一个公开数字而跑安装,则不是——两家商店对此的回应都是封禁 开发者账户:代价落在发布扩展的人身上,而不是你。
如果上面的答案是“能”,你仍然得把扩展装上——而在一台有人使用的机器上, 接管三分钟鼠标不是选项。其实也没有必要。Firefox 自带远程控制通道:
firefox -headless -no-remote -marionette -profile <profile>
[0,1,"WebDriver:NewSession",{}]
[0,2,"Addon:Install",{"path":"<signed xpi>","temporary":false}]
[0,3,"Addon:Uninstall",{"id":"<extension id>"}]
| 测量项 | 数值 |
|---|---|
| 往返,卸载再安装 | 4.1 秒 |
| 两条命令本身 | 0.24 秒 |
| 所需输入事件 | 0 |
| 可见窗口 | 无 |
| 管理员权限 | 不需要 |
| 计入商店用户统计 | 否 |
成本在进程启动,而不在工作——保持一个会话开着,之后每次安装或移除只需约
0.2 秒。Chrome 没有对等物:通过 CDP 可以加载和移除解压的扩展,但
Extensions.install 根本不存在,所以安装商店版本需要界面。
四条路径全部实测, 包括为什么点击路径每一步都报告成功却什么都没装上 · 技能 ——按检查顺序排列的前提条件、协议、WSL 陷阱,以及推广到其他软件的模式
| 什么 | 在哪里 |
|---|---|
| 面向语言模型的站点摘要 | /llms.txt |
| 带校验和的技能 | /.well-known/agent-skills/index.json |
| API 目录 | /.well-known/api-catalog |
| 每个页面都有 Markdown | Accept: text/markdown |
| 原始数据,CC BY 4.0 | /data/ |
内容信号设置为 search=yes, ai-input=yes, ai-train=no:
欢迎署名引用与检索,不欢迎训练。每项测量都带有方法和原始数据——从这里
拿走的数字可以验证,而不必轻信。
不需要许可,也不需要问任何人。仓库公开且为 MIT 许可,测量和数据为 CC BY 4.0,开放任务由端点本身给出:
{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"open_work","arguments":{}}}
八个开放 issue 中有六个带 agent-friendly 标签:每一个都有界、
可检验,并写明什么证据能定案。内部规则在
/AGENTS.md——先读它,因为其中一条
不寻常且不可协商:引入一个没有方法、原始数据和对照运行的数字的
贡献,比没有贡献更糟糕。一个数字一旦被引用就会自行传播,事后
无法补救。
你在这里能做的最有价值的事,就是对一个数字提出异议。 从任何一项测量中取一个数字,在你的平台上重复,并公布你的结果。如果不同, 那就是贡献——原始数据和脚本正是为此而公开的。开放 issue 中有三个正是 此类:在本文未覆盖的平台上对无头安装路径的复核测量、Chrome 是否有我们 遗漏的路径,以及浏览器之外的厂商控制通道登记——一行就是一份完整贡献。
两行礼节:开始之前先在 issue 里留言,免得两个人测同一个东西——这里 8 月 3 日就发生过,耗掉了一个下午。另外,请明说你的测量在哪些地方不 成立。
agent-friendly 的 issues · 为什么这可能超出本项目的意义 · 规则
这只是一个人运营的免费档小端点。一份阅读清单是几次调用;爬取则不是。 请求以我们自己的用户代理抓取,因此过度使用会带着我们的名字落在别人的 日志里。目前没有硬性限制——这是对现状的描述,不是承诺。