7 badge types · 7 answering right now · no account · no key · no tracking · CC BY 4.0
An independent measurement, in your README
One line of markdown. It reads from the index that made the measurement, it updates itself when the measurement changes, and it costs nothing. If you would rather not hotlink us at all, there is a shields.io endpoint below that puts shields between you and this domain.
What these are, and what they are not
- It is about your project, not about us
- The right-hand side is your result. Nobody has ever pasted a badge that advertises a vendor, and we are not going to pretend otherwise — the reason our name is on the left is that a measurement needs a referee attached to it, not because the badge is an advertisement.
- It updates itself
- Every index behind these rebuilds nightly. The badge reads the index, so it changes when the measurement changes and there is nothing to keep up to date. If your maintenance verdict improves tomorrow the badge says so tomorrow.
- You cannot set the value
- There is no
?message=parameter and there will not be one. A badge whose value the embedder controls is a sticker, and one forged badge would end the usefulness of every honest one. - We do not track your readers
- The badge endpoint sets no cookie, reads no header it does not need to render an SVG, and keeps no per-reader log. This is the real objection to README badges and it deserves a real answer rather than a promise: if you do not want to take our word for it, use the shields.io route and your readers never talk to this domain at all.
- It can say something you do not like
- A dead project renders
dead. We are not going to soften a verdict to get a badge into a README — the whole value of the badge is that it could have said something else. Nobody is obliged to embed one. - Two of the nine have no badge, deliberately
- CiteRank measures how often answer engines cite a site, and doc-extract-bench scores commercial extraction vendors against each other. Neither is a thing its subject would be displaying about itself — one is a scoreboard you are losing, the other is a competitor comparison. Both indexes are published in full. Neither mints a badge.
The seven, live
Each row below is a real reading of a real subject, rendered by the same endpoint your README would call. The example subject is a row that exists in that index — it is not an endorsement of anything.
StillShipping
subject: GitHub repositorythe nightly verdict — maintained, stale or dead — and the 0-100 freshness behind it.
StillShipping reads obra/superpowers as maintained, freshness 100/100, recomputed nightly from the GitHub API. Every verdict ships with the facts that produced it.
[](https://stillshipping.kynth.studio/tool/superpowers)Replace obra/superpowers with your own GitHub repository. If your project is not in this index the badge renders unknown, which is a good reason not to embed it rather than an error.
SkillWorks
subject: GitHub repositoryhow many listings the index holds from that repository and how many pass every static structural check.
SkillWorks indexes 21 listings from anthropics/skills; 18 pass every static structural check. Nothing is executed — the checks read and parse the files.
[](https://skillworks.kynth.studio/?q=anthropics%2Fskills)Replace anthropics/skills with your own GitHub repository. If your project is not in this index the badge renders unknown, which is a good reason not to embed it rather than an error.
RuleStack
subject: GitHub repositorythe measured quality of the strongest agent config file in the repository, out of 100.
RuleStack measures 15 agent instruction files in n8n-io/n8n; the strongest scores 100/100 on what is present — headings, runnable commands, section coverage.
[](https://rulestack.kynth.studio/configs/n8n-io-n8n-packages-n8n-agents-agents)Replace n8n-io/n8n with your own GitHub repository. If your project is not in this index the badge renders unknown, which is a good reason not to embed it rather than an error.
KitGrade
subject: GitHub repositorythe kit's score out of 100, and whether it was scored hands-on or from documentation.
KitGrade scores Bullet Train at 92.2/100, from a hands-on install run with every command and exit status recorded.
[](https://kitgrade.kynth.studio/kit/bullet-train)Replace bullet-train-co/bullet_train with your own GitHub repository. If your project is not in this index the badge renders unknown, which is a good reason not to embed it rather than an error.
ToolDrift
subject: GitHub repositorywhether the tool is active, and that its pricing and default model are re-read daily.
ToolDrift tracks anomalyco/opencode as active; its pricing page and default model are re-read on a schedule and diffed against the previous capture.
[](https://tooldrift.kynth.studio/tools/opencode)Replace anomalyco/opencode with your own GitHub repository. If your project is not in this index the badge renders unknown, which is a good reason not to embed it rather than an error.
StoreReady
subject: builder slugwhether the builder's output reaches App Store review, from cited evidence.
StoreReady reads Rork as "ships with caveats" for App Store review. Every verdict is attached to numbered evidence, and a builder nobody has evidence for is published as unproven rather than given the benefit of the doubt.
[](https://storeready.kynth.studio/builder/rork)Replace rork with your own builder slug. If your project is not in this index the badge renders unknown, which is a good reason not to embed it rather than an error.
BlockDex
subject: registry slughow many items the registry publishes, enumerated nightly from its own registry.json.
BlockDex enumerates 7,794 items in the shadcn-io registry, read nightly from the registry's own registry.json.
[](https://blockdex.kynth.studio/registries/shadcn-io)Replace shadcn-io with your own registry slug. If your project is not in this index the badge renders unknown, which is a good reason not to embed it rather than an error.
Which of these apply to your repository
One call answers it. Every index that holds a measurement of your repository comes back with the reading and the exact line to paste; indexes that hold nothing are absent rather than reported as a failure.
1curl https://toolproof.kynth.studio/api/v1/subjects/obra/superpowers23{4 "subject": { "type": "github-repository", "repo": "obra/superpowers" },5 "measured_by": 2,6 "measurements": [7 {8 "index": "stillshipping",9 "value": "maintained · 100",10 "detail": "StillShipping reads obra/superpowers as maintained, freshness 100/100…",11 "source": "https://stillshipping.kynth.studio/api/tools?limit=2000",12 "badge": {13 "markdown": "[](…)",14 "shields": "https://img.shields.io/endpoint?url=…"15 }16 }17 ]18}
The sample above is trimmed for width. Call the URL for the whole document — no key, no account, CORS open so a browser can do it.
If you will not hotlink us — use shields.io instead
The strongest argument against README badges is that they are an image hotlink, and it is a good argument. You are asking every reader of your README to make a request to a third party, and that third party can later start logging them, change what the image says, add an advertisement — CircleCI did — or let the domain lapse and be bought by somebody else, which is what happened to pypip.in. A service you have never heard of has not earned that.
So do not give it to us. Every badge is also served in shields.io’s endpoint schema. Shields renders the image and shields is the host your readers talk to; Toolproof is only the JSON behind it, and your README never points at this domain for an image.
Works for all seven — swap the index slug and the subject in the encoded URL. The trade is styling: shields renders it in its own flat template rather than ours.
The contract
- The URL will not move
https://toolproof.kynth.studio/badge/{index}/{subject}.svgis the stable form. A badge is a link somebody else maintains for us; breaking it would be breaking their page, not ours.- It always renders
- There is no path through the badge endpoint that returns anything but 200 and an SVG. If an index is unreachable the badge says
unknownin grey. A broken image in a README gets deleted, and deleted is permanent. - Cached for an hour, stale-served for a week
- GitHub proxies and caches README images on its own account anyway, so the refresh a reader sees is theirs. An hour behind is the honest description.
- CC BY 4.0
- Reuse any figure with attribution to Toolproof and the date of the run it came from. The method is published; if a number is wrong it gets corrected and the correction is dated, whichever direction it moves.
