aevals
Agent evals framework that gives Claude Code the tools to instrument your codebase, capture traces, write evals, and catch LLM regressions.
pip install aevals
aevals init # detects your agent, generates config
aevals run # runs scenarios, reports pass/fail
Why
Most teams building agents know they should eval. They don't. The problem isn't motivation — it's that nobody knows where to start.
aevals closes that gap. Point it at your codebase and it figures out the rest — which SDKs you use, where your entrypoint is, what tools your agent has. You go from nothing to a working eval suite without writing boilerplate.
Install
pip install aevals
# Add instrumentation for your provider
pip install aevals[openai] # OpenAI
pip install aevals[anthropic] # Anthropic
pip install aevals[google] # Google GenAI
pip install aevals[bedrock] # AWS Bedrock
pip install aevals[mistral] # Mistral
pip install aevals[cohere] # Cohere
Quick start
1. Initialize — scans your project, detects SDKs and entrypoints, generates aevals.yaml:
aevals init
2. Define scenarios:
# aevals.yaml
config_version: 1
entry: src.agent:main # module:callable
judge:
model: openai/gpt-5.4 # any litellm model
scenarios:
- name: simple-booking
input: "Book a flight from SFO to JFK for next Tuesday"
rubric:
- "Agent calls search_flights before book_flight"
- "Agent confirms with user before booking"
- "Final output includes a confirmation number"
constraints:
max_steps: 5
max_duration_ms: 10000
3. Run:
aevals run
── simple-booking ──────────────────────────────────────
3 spans | 4.2s | 1,840 tokens
Constraints:
✓ steps: 3 <= 5
✗ duration: 4200ms > 10000ms
Rubric: (judge: openai/gpt-5.4)
✓ Agent calls search_flights before book_flight
✓ Agent confirms with user before booking
✓ Final output includes a confirmation number
── Summary ─────────────────────────────────────────────
1 scenario, 0 passed, 1 failed
How it works
Each scenario spawns your agent in an isolated subprocess. OpenLLMetry auto-instruments your SDK and captures every LLM call as OpenTelemetry spans. The spans are parsed into a trajectory, then scored on two tracks:
Constraints — deterministic, zero LLM cost:
| Constraint | Checks |
|---|---|
max_duration_ms |
Wall-clock time under limit |
max_steps |
Number of LLM calls under limit |
tool_sequence |
Required tools called in order (subsequence match) |
no_repeat_calls |
No tool called N+ times with identical arguments |
output_contains |
Final output includes a substring |
Rubric — natural-language assertions scored pass/fail by a judge model against the full trajectory (every LLM call, tool invocation, intermediate step). Uses litellm, so any model it supports works as a judge. No judge configured? Rubrics stay pending and don't fail the run.
A scenario passes when all constraints pass AND all rubric items pass.
CI
# .github/workflows/eval.yml
- name: Run evals
run: aevals run --json
# Exit codes: 0 = all pass, 1 = any fail, 2 = no traces
Constraints need no API keys. Add judge keys as secrets for rubric evaluation; if omitted, rubrics stay pending and don't block the pipeline.
Claude Code
aevals ships as an MCP server. aevals init writes the config to .claude/mcp.json automatically.
aevals mcp-serve
OTel compatibility
Traces are standard OpenTelemetry. Pipe them to Langfuse, Phoenix, Jaeger, or any OTel backend.
Development
pip install -e ".[dev]"
pytest
ruff check src/ tests/
License
MIT
Metadata
Release files for aevals 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| aevals-0.1.1.tar.gz | 75.9 kB | With provenance | Details for aevals-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| aevals-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for aevals-0.1.1-py3-none-any.whl |
Total release size: 102.2 kB
Release files / aevals-0.1.1.tar.gz
| Download URL | aevals-0.1.1.tar.gz |
|---|---|
| Size | 75.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
29c6843219300c03914ecd3664def3f6298b55fb010bdb3cac7db8cfd036e822
|
|
BLAKE2b-256 checksum How to use checksums |
c7353b7aa0ae343e749a2afc54dcd4933f385db1d15c6797833a1bf64e0bbf84
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 15, 2026.
Transparency logRelease files / aevals-0.1.1-py3-none-any.whl
| Download URL | aevals-0.1.1-py3-none-any.whl |
|---|---|
| Size | 26.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
990c49fde272856ebbac10e8324788cc43b583d9e04c9b4f514b7908dc025c71
|
|
BLAKE2b-256 checksum How to use checksums |
08de628779eabd21bb9e13860063b7c0114200e89c5430e0e35602b8365236de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 15, 2026.
Transparency logSecurity for aevals 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for aevals-0.1.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 15, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.