Skip to content
SkilledDragonEngineering Intelligence
MinilabKeylessOctober 13, 2026

ClaimGate verified 5 of 5 README claims on our fixture. Here is what it can't see.

We built ClaimGate to check skill README promises against the code. On our sample fixture all 5 claims came back verified with file and line evidence.

By David Discua

Measured in the lab

5
claims verified
0
unverified
0
contradicted
  • bun test found in .github/workflows/ci.yml:14
  • DEMO_API_KEY documented in .env.example:2
  • no known telemetry endpoints found
  • LICENSE and package.json agree on MIT
  • no git commit invocations in code or scripts

From reports/claimgate.json · run on October 13, 2026. extract mode fixture (recorded claims, no Gemini); 5 deterministic checkers; sample-repo fixture only

How it is wired

extractverified onlyREADME claimsno telemetry, MITClaimGate5 checkersYour agentreads the report

01/03A skill README makes promises about the code.

Skill READMEs promise things like "no telemetry" and "never commits", and most people install the skill without checking. ClaimGate is our lab tool that turns each promise into one atomic claim, checks it against the repo with a deterministic checker, and writes JSON, Markdown and SARIF with file and line evidence. On our sample fixture all 5 claims came back verified, and the catch is that a verified "no telemetry" only means none of the patterns we know about matched.

The catch

Each checker is a pattern list. no_telemetry greps code and config for 13 patterns, such as api.segment.io, app.posthog.com, ingest.sentry.io and sendTelemetry(. A skill that posts to its own domain would pass. never_commits looks for git commit invocation patterns in code and scripts, so a commit made through a git library could slip by.

The claim set is fixed in CI too. With no GEMINI_API_KEY, ClaimGate reads recorded claims from fixtures/extracted-claims.json instead of extracting them live. The report says so (extractMode: fixture). Read "verified" as "we looked in these places and found nothing against it", and open the evidence column before you repeat the claim.

What we ran (keyless)

bun install
bun run check:skills
bun run typecheck
bun test
bun run report
bun audit

bun run claimgate scan ./fixtures/sample-repo --force-fixture
bun run claimgate scan ./fixtures/bad-repo --fixture ./fixtures/bad-claims.json --force-fixture

From reports/claimgate.json, run on October 13, 2026:

ClaimCheckerStatusEvidence
CI runs bun test on every pushworkflow_commandverified.github/workflows/ci.yml:14
Optional DEMO_API_KEY is documentedenv_documentedverified.env.example:2, src/tool.ts:3
This skill sends no telemetryno_telemetryverifiednone found
Licensed under MITlicense_matchverifiedLICENSE:1, package.json:5
The tool never commits to gitnever_commitsverifiednone found

Summary: 5 verified, 0 unverified, 0 contradicted.

We also keep a repo that lies. fixtures/bad-repo ships a script that runs git add -A, git commit and git push, a file that fetches a PostHog capture URL, an Apache LICENSE next to a package.json that says MIT, and a README that names a CI command and a secret that do not exist. tests/scan.test.ts asserts that all five claims come back contradicted and none verified, and the CLI exits 1 on that scan. That run lives in the test suite, so it is not in the committed report.

How it is wired

The skill at .claude/skills/claim-gate/SKILL.md tells Claude Code or Cursor when to run a scan and to cite a claim as verified only when the report says verified. bun run mcp starts an MCP server with two tools, scan_repo for a whole repo and check_claim for a single promise, so an agent can check one sentence before it repeats it. The SARIF file goes to any tool that reads SARIF, and the exit code fails CI when anything is contradicted.

Minilab (open source)

ClaimGate is our own lab, MIT licensed and written in TypeScript on Bun, so there is no third-party upstream to credit. The repo is SkilledDragonCorp/minilab-claimgate-ci. Run bun install && bun run report to rebuild reports/claimgate.json, then point the scan at your own skill with a claims file shaped like fixtures/extracted-claims.json, or set GEMINI_API_KEY in .env to extract claims live.

Run it yourself

SkilledDragonCorp/minilab-claimgate-ci

Clone, install and run the report with no API keys. The numbers above are what that run writes.

bun install && bun run report

ClaimGate is a SkilledDragon lab with no third-party upstream. Numbers are from our own keyless lab run; re-run the report before relying on them. Marks belong to their owners.

All labs