culprit
git bisectthinking for prompts: compare what changed in behavior, not only in text.
Not to be confused with the unrelated culprit package on PyPI or the Culprit Rust CLI — see How this compares.
Features
- Semantic diff: an LLM summary backed by per-case eval evidence.
- Behavioral bisect: binary-search prompt history to locate the first regression.
- Semantic merge (experimental): conservatively combine compatible branch edits and verify the result before staging it.
- Git-native architecture: prompt history stays in ordinary Git.
- Provider adapters for OpenAI, Anthropic, and arbitrary OpenAI-compatible endpoints.
- Content-addressed evaluation cache to avoid repeat API spend.
culprit checkwarnings for common secret and PII patterns.
How this compares
Among these similarly named tools, culprit-ai is differentiated by verifying prompt diff, bisect, and automated merge decisions against real eval runs rather than relying on text similarity or an LLM's judgment alone.
| Tool | Primary focus | Verification model |
|---|---|---|
culprit on PyPI |
Local, read-only root-cause and change-risk analysis for PRs, branches, fixes, and traces | Deterministic static analysis, with optional Git bisect confirmation when a repro command is available |
| Culprit Rust CLI | A local-first, guided Git bisect workflow with optional AI explanation | Runs the supplied test command at candidate commits and restores the checkout afterward |
culprit-ai (this project) |
Prompt-behavior diff, behavioral bisect, and experimental semantic merge in one Git-native toolkit | Runs the configured eval set; merge additionally rejects a candidate that loses behavior shared by both parents |
Other prompt tools cover adjacent workflows and can complement culprit-ai:
| Tool | Best fit | How this project's focus differs |
|---|---|---|
| Promptfoo | Broad prompt/model evaluation and red teaming | culprit-ai centers comparisons on Git revisions and commit history. |
| Confident AI / DeepEval | Evaluation frameworks and hosted workflows | culprit-ai is a local Git wrapper with no required hosted backend. |
| promptvc | Prompt versioning workflows | culprit-ai leaves version storage to Git and adds eval-backed behavioral operations. |
Installation
pip install culprit-ai
Quickstart
cp examples/quickstart/culprit.yaml .
cp -r examples/quickstart/evals .
export OPENAI_API_KEY="..."
culprit diff HEAD~1 HEAD --eval-set evals/summarizer.yaml
Contributing
Semantic diff, behavioral bisect, and experimental semantic merge improvements are open for contribution. See CONTRIBUTING.md, including adapter guidance and suggested first issues.
Released under the MIT License.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file culprit_ai-0.1.5.tar.gz.
File metadata
- Download URL: culprit_ai-0.1.5.tar.gz
- Upload date:
- Size: 235.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e7d695f48a0527befae92d8382b27dc24e00f40d5a81f7cbb4b4f4151b1b25d
|
|
| MD5 |
d73d191f85e43a9d01d6bd7480942b3a
|
|
| BLAKE2b-256 |
6bab0408e5cecfdffec43b4ac3690f63516e41f0350453237ea71840bb39f2ab
|
Provenance
The following attestation bundles were made for culprit_ai-0.1.5.tar.gz:
Publisher:
release.yml on abi6374/culprit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
culprit_ai-0.1.5.tar.gz -
Subject digest:
1e7d695f48a0527befae92d8382b27dc24e00f40d5a81f7cbb4b4f4151b1b25d - Sigstore transparency entry: 2766074656
- Sigstore integration time:
-
Permalink:
abi6374/culprit@a4da62907a5ffd604b56bf1295656a69e83f458e -
Branch / Tag:
refs/tags/v0.1.5 - Owner: https://github.com/abi6374
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a4da62907a5ffd604b56bf1295656a69e83f458e -
Trigger Event:
push
-
Statement type:
File details
Details for the file culprit_ai-0.1.5-py3-none-any.whl.
File metadata
- Download URL: culprit_ai-0.1.5-py3-none-any.whl
- Upload date:
- Size: 28.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0dccc4de1c318db809cf14eccc2e6bc4344f0bee244cb43aff7db007378d2eba
|
|
| MD5 |
8ffccc273bdc9bef50a4dec73d795c0a
|
|
| BLAKE2b-256 |
040da2c92b21b28f02d506f160d36273c656e3dcc365aebbef5e73ce538cc5f8
|
Provenance
The following attestation bundles were made for culprit_ai-0.1.5-py3-none-any.whl:
Publisher:
release.yml on abi6374/culprit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
culprit_ai-0.1.5-py3-none-any.whl -
Subject digest:
0dccc4de1c318db809cf14eccc2e6bc4344f0bee244cb43aff7db007378d2eba - Sigstore transparency entry: 2766075093
- Sigstore integration time:
-
Permalink:
abi6374/culprit@a4da62907a5ffd604b56bf1295656a69e83f458e -
Branch / Tag:
refs/tags/v0.1.5 - Owner: https://github.com/abi6374
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a4da62907a5ffd604b56bf1295656a69e83f458e -
Trigger Event:
push
-
Statement type: