Intent Verification · GitHub App

Intent verification
for AI-assisted development

What if your PR reviewer had read the ticket?

Join the waitlist

AI writes code fast.
Nobody checks if it matches the spec.

41% of merged code is now written by AI
+33% increase in average PR size since 2023
Silent drift compounds — reviewers can't keep up

AI coding tools generate plausible-looking code quickly. But plausible isn't the same as correct. Reviewers are stretched across larger PRs with less context, and no one is systematically checking whether the implementation actually satisfies the acceptance criteria in the ticket. The gap between intent and shipped code is widening quietly.

Keel reads the ticket.
So your reviewer doesn't have to.

01

Reads the spec

Keel is a GitHub App. When a PR opens, it resolves the spec — from a linked Linear ticket, a closing GitHub Issue (Closes #N), or a SPEC.md in the repo.

02

Verifies the diff

It checks the PR diff against each acceptance criterion and surfaces exactly what was addressed, what was missed, and what drifted.

03

Comments before merge

A structured verification comment lands on the PR — spec coverage score, per-criterion status, evidence — before a single keystroke of code review.

keel-bot Keel Spec Verification
✅ PASS Auth token is stored in httpOnly cookie
✅ PASS Login endpoint returns 401 on bad credentials
⚠️ PARTIAL Rate limiting on /login — middleware present, limit not enforced
❌ FAIL Refresh token rotation — not implemented in this diff
Spec coverage: 67% — ❌ FAIL (threshold: 70%)

See Keel in action.

Below is a real Keel verification run on a TypeScript URL-shortener PR. The acceptance criteria were written to surface all three verdict states — so you can see exactly what lands on your PR before it merges.

📋 Linear ticket — KEE‑14: URL shortener POST /shorten

Acceptance criteria

POST /shorten returns a unique short code for each URL
Short codes are exactly 7 alphanumeric characters
Duplicate URLs within 24 h return the same code (idempotent)
Invalid or missing URL returns 400 with a descriptive error message
All requests are rate-limited to 60 req/min per IP
keel-bot Keel Spec Verification — PR #7

KEE‑14 · Spec coverage report

✅ PASS POST /shorten returns a unique short code handler.ts:42 — nanoid(7) generated per request, stored in urls table
✅ PASS Short codes are exactly 7 alphanumeric characters handler.ts:42 — nanoid(7) uses default alphabet [A-Za-z0-9]
⚠️ PARTIAL Duplicate URLs within 24 h return the same code db/urls.ts:18 — upsert ON CONFLICT present, but no TTL check; returns same code indefinitely
✅ PASS Invalid URL returns 400 with descriptive error middleware/validate.ts:9 — zod schema + 400 on parse failure with message field
❌ FAIL Rate limiting 60 req/min per IP No rate-limit middleware found in diff. express-rate-limit not imported.

Spec coverage: 60% (3/5 criteria met) — ❌ below 70% threshold

The verification above ran automatically when the PR was opened — zero config for the reviewer. Works with Linear tickets, GitHub Issues (Closes #N), or SPEC.md files in your repo.

Try it on your own PR.

No install. Paste any public GitHub PR URL and an optional spec source. Keel runs the full verification pipeline and renders the verdict below in seconds.

3 runs per IP per 15 min · Public repos only · Max 50 KB diff

Intent verification —
a new layer in the dev toolchain.

Code quality CodeRabbit · Greptile

Finds bugs, smells, and style issues in code. Reviews code for what it is.

Intent verification Keel ←

Checks whether code does what the ticket said it should. Reviews code for what it was supposed to be.

CI / testing GitHub Actions · Jest

Verifies code works correctly at runtime. Reviews code for whether it passes.

Keel is complementary — not a replacement. It closes the gap that no existing tool covers.

Be first when we ship.

Early access for teams using AI coding tools and Linear. No spam — just a single email when we’re ready for you.