bite
Adds Bite checks to GitHub pull requests through a GitHub Action or the bite-check GitHub App, flagging changes whose fixes can be reverted while tests still pass.
Would your tests catch it if the bug came back?
Bite checks whether an AI coding agent's "fixed" is actually true.
Try it now
Free, no key, and it never changes your files. If you have Python, paste these two lines into any terminal (PowerShell, cmd, Terminal):
python -m pip install bite-check
python -m bite_check --freeOutside a project, Bite first shows a demo on a tiny made-up one. To check your own project, type the second line and a space, drag your project's folder into the window (that types its path), and press Enter.
Other ways: pipx run bite-check --free or uvx bite-check --free (one line, no install; on Linux or a Mac, use one
of these if pip says "externally managed"). Commits never say "fix"? Add --any. To keep a bite command installed:
install guide.
Related MCP server: platao
Why you need this
When an AI fixes a bug for you, it often says "Fixed, and I added a test." If you don't read code, you can't tell if that's true.
A test is a tiny robot that checks one thing and shouts when it's wrong. Bite puts the old bug back on purpose and watches whether any test shouts. It's like testing a smoke alarm with real smoke instead of trusting the little green light.
If a test shouts, that fix is guarded. If they all stay quiet, the bug could come back and nobody would notice. Bite names that fix, so you can tell your AI: "add a test that fails without this fix."
bite --demo shows both cases on a tiny made-up shop:
9661edcf ✅ noticed by test_discount_never_below_zero Fix discounts over 100% making the price negative
e5c329ec ⚠️ NO TEST NOTICED Fix totals showing long decimals like 0.30000000000000004Bite does this: takes each recent fix back out of a copy of your project, runs your tests, and tells you whether any test noticed. It never changes your files or pushes anything.
You decide that: whether to add the missing test, or leave it because the change didn't need one (a rename, a tidy-up). A ✅ means a test would catch that fix breaking. It doesn't prove the code has no other bugs.
Works with pytest, npm test, cargo test, go test, dotnet test, Maven and Gradle (Java and Kotlin). Full list: SUPPORTS.md.
Everything else Bite can do
What | How | More |
Check every pull request | Add the GitHub Action (below) or the bite-check app | |
Check Claude's "fixed" the moment it says it |
| |
Same, in Cursor, Copilot, Codex, Windsurf, Gemini CLI |
| |
Ask in plain words |
| |
Catch a fix a later commit quietly undid | Built into every free check | |
Write the missing test (your own key) |
| |
Score, badge, JSON for scripts |
| |
Speed up a slow check |
|
The pull request check. Add this as .github/workflows/bite.yml. It runs the free check on each pull
request's commits and fails when a change can be taken back out and your tests still pass. No key, no cost.
name: bite
on: pull_request
permissions:
contents: read
pull-requests: write
jobs:
bite:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
# install what your tests need here, e.g. for Python:
- uses: actions/setup-python@v7
- run: python -m pip install pytest -r requirements.txt
- uses: connabyss/bite@v1.0.5The paid step (optional). With your own Anthropic API key, Bite writes one small test of a commit's exact
claim and runs it; --budget caps what a run spends ($1 by default). It runs on Anthropic's Agent SDK, so it needs
an API key and never uses a Claude login or plan (Anthropic's Agent SDK rule:
https://code.claude.com/docs/en/agent-sdk/overview). Setup: install guide.
Updating Bite
bite --version says when a newer one is out. This line always gets the newest version:
pipx install --force bite-check --pip-args="--no-cache-dir"Installed with pip? python -m pip install --upgrade --no-cache-dir bite-check. Why not pipx upgrade:
install guide. What changed: CHANGELOG.md.
Does it work?
In prosemirror-py, a Claude commit said it fixed a memory leak. Bite wrote a test of that claim: it fails on that commit and on today's code. After 20,000 documents the cache still held all 20,000, using 35 MB. The tested fix was merged upstream. (The full story.)
"Reverting the claimed fix and making the change prove itself under a real test is exactly the kind of check that should exist for every "fixed" commit."
Famous repos Bite has checked with bite --free (Oct 30-31, 2026):
Project | Language | Changes checked | Noticed by a test | Real gaps |
Python | 37 | 15 | 1 small: | |
Python | 37 | 30 | 1 small: | |
JavaScript | 40 | 40 | none ✅ | |
Go | 27 | 21 | 2 small: a test that only works in a terminal, XML compression | |
Rust | 16 | 12 | none ✅ | |
C# | 9 | 5 | none ✅ |
More: the full scoreboard (20 projects, 5 languages), and bugs fixed or merged upstream in pyclibrary, django-tailwind-cli, west, mizani, pamqp and more.
Limits, plainly
Most claims hold. Across all rounds so far, Bite tested 137 "fixed" claims that it could run tests for (all from commits made with Claude Code, the AI those rounds looked at). 8 were false (about 1 in 17), and 4 of those were still broken on today's code. On well-reviewed projects it usually finds nothing, and that's the right answer.
Quiet is not a pass. Bite only shows a failing test that the second check calls fair and real. That second check has thrown out more than 10 failing tests that weren't. A claim that holds proves that one claim, not that the commit has no other bugs.
It needs the project's tests to run. If they don't run on a clean copy, Bite can't check that commit.
Bug hunting is weaker than claim checking. In a 10-project overnight hunt, two blind AI judges rated 21 of 22 proven fixes as real bugs and none as wrong, but Bite found only 1 of the 10 bugs the maintainers fixed soon after.
Small samples, AI judges. The judges read code without running it. The human checks are the maintainers' fixes and merges listed above.
Join in
Here for Hack Week or your first open-source PR? These good first issues are small, and each one says where to look and when it's done. Comment on one to claim it. Or try to fool Bite: sneak a "fix" past it.
🏆 Fooled Bite: nobody yet. Be the first: your name, your trick, and the test that now catches it go right here. (How to enter. Bite's own 2 known blind spots are in Still fools Bite, so they don't count.)
Bug reports, fixes and AI-assisted PRs are all welcome. See CONTRIBUTING.md. If Bite flagged something wrongly, or missed a claim you know was false, please open an issue.
Thank you to Bite's first contributors:
@snehaapratap made the setup error messages point to steps that exist (#18).
@gauravjangra3165 added macOS to the tests (#19).
@bfs2021 made the "check it yourself" steps work for commits that add a new file (#37, fixing #27).
MIT licensed.
Available Tools
2 toolsask_biteBite: is this past fix guarded by a test?ARead-only
Ask in plain words about a fix already committed, like "is last week's login fix guarded?". Bite finds the matching commit(s) by their messages, changed file names and the time named (today, yesterday, last week, the last 10 days...), takes each change back out of a copy and runs the tests. The answer opens in a few words (Yes, No or Partly), then a short block per commit, with its id. Free, needs no key, never touches the user's files. If nothing matches, ask again with words from the commit message.
| Name | Required | Description | Default |
|---|---|---|---|
| last | No | How many recent commits to look through (default 100). | |
| folder | No | The project folder you changed (any folder inside its git repository). Leave it out to use the folder Bite was started in. | |
| question | Yes | The question, in plain words. |
check_fixBite: does a test notice my fix?ARead-only
Call this after you change code to fix a bug, before you tell the user it's fixed. Bite takes your change back out of a copy of the project and runs the project's tests. If they still pass, no test shows your fix does anything: add a test that fails without your change and passes with it, then call this again. Free, needs no key, never touches the user's files. Can take as long as the tests do.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Check the changes since this commit or branch (for example main). Default: the changes since the last commit, including uncommitted ones. | |
| folder | No | The project folder you changed (any folder inside its git repository). Leave it out to use the folder Bite was started in. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v1.0.5- First observed
ask_bite - First observed
check_fix
TDQS
Scored across 2 tools
The two tools are cleanly separated by target: check_fix operates on the code change the agent just made, while ask_bite queries already-committed fixes described in plain language. Each description explicitly states its trigger condition ('after you change code' vs 'about a fix already committed'), leaving no realistic selection ambiguity.
Both names are snake_case verb_object constructions (check_fix, ask_bite), which is consistent. Minor deviation: ask_bite embeds the server name as its object, so the second token is not a domain entity like the first.
Two tools is thin for a general-purpose server, though bite's scope is genuinely narrow (revert-and-test verification). Each tool earns its place, but the surface offers no room for adjacent operations such as listing matchable commits.
The core lifecycle is covered: verify a new fix has a failing-without/passing-with test, and interrogate history for whether an old fix is guarded. The only rough edge is the dead end when ask_bite finds no commit match, requiring the agent to rephrase with commit message words rather than browse candidates.
Maintenance
Related MCP Connectors
Risk-scan a diff, flag AI-generated-code tells, find secrets. 5 of 7 tools need no account.
Diagnose why an AI agent failed and get the verified fix instantly. Free, no token.
Checks AI-written code for leaked keys and made-up packages, on your machine. Never uploads code.
1Audit and repair any public GitHub repo. Free survey; paid source, unified diffs and a pull request.
Related MCP Servers
- AlicenseAqualityCmaintenanceProvides AI coding agents with reliable root-cause diagnosis and minimal, high-confidence fixes for failing tests.31MIT
- AlicenseNot gradedqualityBmaintenanceEnables coding agents to run deterministic completeness audits on code before declaring 'done'—catching unwired modules, placebo tests, swallowed errors, and stubs via AST analysis, entirely offline and free.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding assistants to scan a repository for code that cannot prove its usefulness, attribute it to AI-assisted or human commits, prove candidate deletions against the project's own tests, and pull a payoff report or run history, all without ever writing to the repository. The test command and any model judging stay under a person's control through environment configuration.1MIT
- AlicenseAqualityBmaintenanceChecks what local coding agents such as Claude Code, Codex and Cursor really did: files changed, commands run and test results read from test output, not the agent's word. Unclear test results can be double-checked by Laya (on your computer) or TypeSafe's Jev (cloud, your own API key). Read-only.1028 npm60MIT