Everything below is written to be pasted into the two dashboards as-is. Character counts are given where a limit exists; the dashboards enforce their own, so re-check if a field is refused.
The naming is settled. The extension keeps its store name, Text
Reliability Assessment — descriptive, and changing it would move an entry
existing users already have. The repository is renamed to crabe, which is
what the project is called and what the icon shows. The two are explained to
each other in the README and inside the extension, on the rubrics page.
The GitHub URL below assumes that rename. Do it before submitting, or the listing links to a 404.
Text Reliability Assessment
description in the manifest, 132 max)Assesses the text on a web page and states how strong the evidence behind each finding is. Uses your own AI key. No tracking.
125 characters.
Crabe reads the text on a web page and tells you what kind of writing it is, who published it, what independent sources say about them, and whether the page's own links actually go anywhere.
It never gives you a single score. It gives you four separate axes, and every finding states how strong its own evidence is.
WHY THAT MATTERS
There is a difference between "we fetched this and checked it", "you can open these sources yourself", "this is a judgement about text on your screen" and "the model remembers this and nothing here can verify it". Most tools present all four the same way. Crabe labels each one, in writing, and refuses to let a finding claim more support than it has.
An axis that could not run says why. It never reports zero. "We could not look" and "we looked and it was bad" stay different statements all the way to the screen.
WHAT IT CHECKS
• What the text does — classified as Factual, Opinion or Fiction, then scored only against the rubric for that category.
• Who published it — the byline and date declared in the page, plus what the model knows about the author and publisher, marked as recall.
• What other sources say — lateral reading: independent sources on the publisher and the central claim, with links you can open.
• Whether its links work — each outbound link in the article is fetched and its real outcome reported. A page that names its sources and links none of them is told to you plainly.
The rubrics are readable inside the extension, and so is the complete instruction sent to the model, word for word. What scored your page is what you can read.
YOU NEED YOUR OWN AI KEY
Crabe has no server and no account. It uses an API key you provide, and you are billed by that provider, not by us:
• Anthropic Claude — its web search returns durable source links.
• Google Gemini — has a free tier. Its search citations are redirect links that expire and cannot be checked automatically, and Crabe labels them as such.
• A local model through Ollama — the page's text never leaves your machine. Lateral reading is then unavailable, because a local model has no web search tool, and Crabe says so rather than quietly using a cloud provider you did not choose. Citation checking, if you switch it on, still contacts the sites the page links to: that is what checking a link means, and it is true of every provider.
PRIVACY
No telemetry, no analytics, no accounts, no server. There is nothing to phone home to.
Analysis only happens when you click, on the page you are looking at. The two kinds of outgoing request beyond your chosen provider — the search query for lateral reading, and the requests to the page's own links — are each behind their own switch, off until you turn them on, and each switch states what is sent and to whom. A withheld switch is enforced before a network connection is opened.
Your API keys are kept on the machine you entered them on and excluded from browser sync, so they are never copied to Google's or Mozilla's servers.
The text of an analysed page is never written to disk. Every stylesheet and script is bundled: opening the settings page contacts nobody.
WHAT IT DOES NOT DO
Crabe supports critical judgement; it does not replace it. Every result says so, and means it: read the page critically, and read the assessment critically too. Any model can be confidently wrong — comparing two of them on the same page is the cheapest way to see that for yourself.
Crabe assesses text only. It does not evaluate images, video or audio — including whether they are authentic, current, or shown in their original context. That limit is deliberate, it is stated on every result, and the evidence for the decision is published in the repository.
It also does not tell you whether something is true. It tells you what the page supports, who stands behind it, and what you can check for yourself.
OPEN SOURCE
AGPL-3.0. The network-copyleft clause forecloses turning this into a closed hosted service. Source, architecture notes and the full reasoning behind what was built and what was dropped:
https://github.com/clenoble/crabe
Productivity (secondary, if offered: Tools).
Crabe has one purpose: to assess the reliability of the text on a web page the user explicitly submits, and to present that assessment with an explicit evidence level for each finding. Every permission it requests serves that one operation.
Chrome asks for one per permission. Keep them this specific — vague justifications are the common rejection cause.
| Field | Text to paste |
|---|---|
activeTab |
Reads the text, metadata and links of the page the user is on, only at the moment they click Analyse. It is not used at any other time and grants no standing access. |
scripting |
Injects the extraction functions that read the page’s text, its declared author and date, and its outbound links. Injection happens once per analysis, on the tab the user clicked from. |
storage |
Stores the user’s own settings: which provider and model they chose, their two consent switches, and their API key. The key is written to storage.local only and deliberately excluded from storage.sync. |
tabs |
Identifies which tab a result belongs to, so an analysis is never displayed over a different page, and lets the user return to the page a result describes. |
sidePanel |
Opens the side panel the analysis runs in. The analysis needs a context that survives longer than a service worker’s 30-second fetch limit. |
Host permission <all_urls> (optional) |
Never requested at install. Requested in two places, for two reasons. Per site, at the moment the user clicks Analyse, so the extension can read that one page. And for all sites, only if the user turns on citation checking, because verifying that a link resolves means requesting it and a page’s links point at other people’s domains — there is no narrower permission that reaches them. Turning that switch off hands the broad access back. With citation checking off, the extension only ever holds the pages the user has analysed. |
Host generativelanguage.googleapis.com |
The Google Gemini API, if the user selects Gemini and supplies a key. |
Host api.anthropic.com |
The Anthropic Claude API, if the user selects Claude and supplies a key. |
Host localhost:11434 |
A local Ollama server, if the user selects the local-model option. Never leaves the machine. |
| Remote code | None. Every script and stylesheet is bundled. The extension loads no remote code of any kind. |
Chrome’s form asks what you collect. Answer honestly on both counts — the developer collects nothing, and the extension does transmit page content to a third party at the user’s request.
Certifications to tick:
Privacy policy URL: the raw or rendered docs/privacy_policy.md in the
repository.
Text Reliability Assessment
Assesses the text on a web page: what kind of writing it is, who published it, what independent sources say, and whether its links work. Every finding states how strong its own evidence is. Uses your own AI key — no account, no server, no tracking.
248 characters.
Use the Chrome detailed description above unchanged. AMO accepts basic HTML;
if you prefer marked-up text, <b> for the section headings and <ul>/<li>
for the bullet lists are enough, and the plain text is fine as-is.
Privacy & Security, and Other or Search Tools as secondary.
This add-on is built from source with Vite and ships bundled JavaScript, so
full source and build instructions are provided.
BUILD
Node.js 22 LTS, npm 10 (Node 18+ / npm 9+ also work)
npm ci
npm run build:firefox
Output: dist-firefox/ — this is the submitted package, byte for byte.
Optional: `npm test` runs 90 assertions that check the add-on's declared
behaviour, including that no request is made without consent and that API
keys are never written to storage.sync.
WHAT IT SENDS, AND WHEN
Nothing happens without a click on "Analyse this page".
1. Always: the page's text, URL, title and declared author/date go to the one
AI provider the user configured with their own key — Anthropic, Google, or
a local Ollama server on localhost.
2. Only with an explicit, separate opt-in: a search query for lateral
reading, sent through the same provider's web search tool.
3. Only with a second, independent opt-in: an HTTP GET to each outbound link
in the article, to see whether it resolves. Cookies are not sent.
Both opt-ins default to off. The check is fail-closed and enforced at the
network boundary in src/core/net-guard.ts before a socket is opened; a
missing or malformed setting reads as withheld.
PERMISSIONS
activeTab + scripting read the submitted page, at the moment of the click
storage the user's own settings and API key
tabs bind a result to the tab it describes
<all_urls> OPTIONAL, never requested at install. Two paths,
both via permissions.request() on a user gesture:
(a) per site, at the moment of the click, to read
the page being analysed;
(b) all sites, only when the user enables citation
checking, because checking whether a link
resolves means requesting it and links point
off-domain by definition. Revoked with
permissions.remove() when that switch is
turned off.
DATA HANDLING
No server, no account, no telemetry, no analytics, no remote code. The
extracted page text is passed in memory to the sidebar and is never written
to storage. API keys are written to storage.local only and are explicitly
excluded from storage.sync — this is enforced in src/settings-store.ts and
asserted by the test suite.
INTERFACE
Firefox uses sidebar_action pointing at sidepanel.html; the toolbar button
toggles it from the background script. There is no popup: an analysis takes
tens of seconds and a popup is destroyed when the window loses focus.
LICENCE
AGPL-3.0.
| Asset | Size | Status |
|---|---|---|
| Store icon | 128 × 128 | public/icon128.png — the full illustration |
| Screenshots | 1280 × 800, 1 to 5 | docs/screenshots/store/ — seven available, five go up |
| Small promo tile | 440 × 280 | optional, to produce |
| Marquee tile | 1400 × 560 | optional |
Screenshots worth taking, in this order — each shows something a competitor listing cannot claim: