The open source agent evals harness
Project description
kensa is an open source eval harness for agent codebases. It gives coding agents an opinionated CLI and bundled skills to generate scenarios, run them in subprocesses, judge results, and report failures.
Installation
Skills + CLI (recommended)
npx skills add satyaborg/kensa
uv add kensa
Works for Claude Code, Codex, Cursor, OpenCode, Gemini CLI, and similar coding agents.
Claude Code plugin
If you primarily use Claude Code, you can install it as a plugin:
/plugin marketplace add satyaborg/kensa
/plugin install kensa
Quickstart
Tell your coding agent:
evaluate this agent
That gives you the basic loop:
- your coding agent inspects the repo, sets up instrumentation and writes evals
- it runs
kensato execute scenarios and capture traces - deterministic checks run first
- the LLM judge only runs when those pass
- reports show what failed and why
- you review changes, approve fixes and iterate
If instrumentation is missing
Add instrument() before importing your LLM SDK:
from kensa import instrument
instrument()
If you use the bundled skills, your coding agent will usually add this for you.
Provider extras
uv add "kensa[anthropic]"
uv add "kensa[openai]"
uv add "kensa[langchain]"
uv add "kensa[all]"
Core commands
| Command | What it does |
|---|---|
kensa init --blank |
Scaffold .kensa/ without example content |
kensa doctor |
Check instrumentation, config, and environment readiness |
kensa eval |
Run + judge + report in one command |
kensa report |
Show the latest results in terminal, Markdown, JSON, or HTML |
kensa analyze |
Flag slow, expensive, flaky, or error-prone traces |
Manual workflow
If you want to author evals yourself:
kensa init --blank
kensa doctor
Scenarios live in .kensa/scenarios/*.yaml and point at your agent entrypoint with run_command.
id: classify_ticket
input: "Our entire team can't log in. SSO has returned 502 since 7am."
run_command: [python, agent.py] # input is appended as the final argv element
checks:
- type: output_matches
params: { pattern: "^P[123]$" }
criteria: |
P1 is for outages or data loss affecting multiple users.
For complete examples, see examples/.
CI
- name: Run evals
run: uv run kensa eval --format markdown
If you only use deterministic checks, you do not need API keys. If you use criteria or judge, add judge provider secrets in CI.
Need more?
- Docs
examples/has sample agents and scenariosCONTRIBUTING.mdcovers local development- Homepage
- Issues
- MIT License
Project details
Release history Release notifications | RSS feed
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 kensa-0.2.0.tar.gz.
File metadata
- Download URL: kensa-0.2.0.tar.gz
- Upload date:
- Size: 50.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa3fd2cbaf8ac6eb475a572c78706d33062fe30f5d3546cb47870a718b67e313
|
|
| MD5 |
d84648ddd907035be9d79d75ffc6c15e
|
|
| BLAKE2b-256 |
2db240813032f165d93e8207389abc934cae5924dd8434657acdff268fe97c11
|
Provenance
The following attestation bundles were made for kensa-0.2.0.tar.gz:
Publisher:
release.yml on satyaborg/kensa
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kensa-0.2.0.tar.gz -
Subject digest:
aa3fd2cbaf8ac6eb475a572c78706d33062fe30f5d3546cb47870a718b67e313 - Sigstore transparency entry: 1254527943
- Sigstore integration time:
-
Permalink:
satyaborg/kensa@c8679eba7d308a1a00dde154a307c7b85245a091 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/satyaborg
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c8679eba7d308a1a00dde154a307c7b85245a091 -
Trigger Event:
push
-
Statement type:
File details
Details for the file kensa-0.2.0-py3-none-any.whl.
File metadata
- Download URL: kensa-0.2.0-py3-none-any.whl
- Upload date:
- Size: 52.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff848366a93bc092ca299767cc13bb1081ef4a34854e6bdae8491244e340679b
|
|
| MD5 |
a4318a4ac1aad384a2b889d7d9a46b6b
|
|
| BLAKE2b-256 |
e412fb49eb15863d2e733a7462880f53acd4a9054aabaf0948aa1a273d96f11b
|
Provenance
The following attestation bundles were made for kensa-0.2.0-py3-none-any.whl:
Publisher:
release.yml on satyaborg/kensa
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kensa-0.2.0-py3-none-any.whl -
Subject digest:
ff848366a93bc092ca299767cc13bb1081ef4a34854e6bdae8491244e340679b - Sigstore transparency entry: 1254528130
- Sigstore integration time:
-
Permalink:
satyaborg/kensa@c8679eba7d308a1a00dde154a307c7b85245a091 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/satyaborg
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c8679eba7d308a1a00dde154a307c7b85245a091 -
Trigger Event:
push
-
Statement type: