v2.4.0

Parallel workers are live →

Evals that run on every commit.

Tessel tests your LLM app against real conversations before it ships. One config file, one CLI, results right in the pull request.

Free up to 10,000 runs a month · no card · SOC 2 Type II

~/checkout-agent — zsh

Copy

curl

node

python

cli

1

2

3

4

5

6

7

8

9

$ curl https://api.tessel.dev/v1/runs \

-H "Authorization: Bearer $TESSEL_KEY" \

-d suite=checkout-agent -d model=gpt-5-mini


{

"id": "run_8f2k1",

"passed": 182, "failed": 4,

"p95_ms": 412

}

$

api operational · p95 412ms

sdk v2.4.0

Runs in CI at

Runs in CI at

  • halden

  • quarry/ai

  • mosswork

  • FERRO

  • lumen.dev

  • orbitals

  • halden

  • quarry/ai

  • mosswork

  • FERRO

  • lumen.dev

  • orbitals

//

01

how it works

Three files of config. Zero dashboards to babysit.

Write cases next to your code, run them where your tests already run, and block the merge when quality drops.

//

01

how it works

Three files of config. Zero dashboards to babysit.

Write cases next to your code, run them where your tests already run, and block the merge when quality drops.

01

Write cases

Plain YAML next to your prompts. Inputs, expected behaviour, and the graders that judge it.

cases:

- input: "refund 3 items"

expect: approve

grader: policy-v2

02

Run in CI

One line in your workflow. Tessel fans out across workers and caches what did not change.

- run: npx tessel run

env:

TESSEL_KEY: $KEY

timeout: 10m

03

Gate the merge

Results land as a PR check. Set a floor per suite and Tessel fails the build below it.

✓ checkout-agent 182/186

✗ support-bot 91/120

threshold 95%

status blocked

01

Write cases

Plain YAML next to your prompts. Inputs, expected behaviour, and the graders that judge it.

cases:

- input: "refund 3 items"

expect: approve

grader: policy-v2

02

Run in CI

One line in your workflow. Tessel fans out across workers and caches what did not change.

- run: npx tessel run

env:

TESSEL_KEY: $KEY

timeout: 10m

03

Gate the merge

Results land as a PR check. Set a floor per suite and Tessel fails the build below it.

✓ checkout-agent 182/186

✗ support-bot 91/120

threshold 95%

status blocked

01

Write cases

Plain YAML next to your prompts. Inputs, expected behaviour, and the graders that judge it.

cases:

- input: "refund 3 items"

expect: approve

grader: policy-v2

02

Run in CI

One line in your workflow. Tessel fans out across workers and caches what did not change.

- run: npx tessel run

env:

TESSEL_KEY: $KEY

timeout: 10m

03

Gate the merge

Results land as a PR check. Set a floor per suite and Tessel fails the build below it.

✓ checkout-agent 182/186

✗ support-bot 91/120

threshold 95%

status blocked

412ms

p95 API latency, last 30 days

64

parallel workers per suite

99.98%

uptime, trailing 90 days

11

model providers, one config

412ms

p95 API latency, last 30 days

64

parallel workers per suite

99.98%

uptime, trailing 90 days

11

model providers, one config

//

02

why it exists

Prompts change every week. Your users notice every regression. Tessel turns each prompt edit into a test run, a diff and a red or green check, before anyone merges.

//

03

under the hood

Built for the pipeline you already have.

// 01

Parallel by default

Every suite fans out across up to 64 workers. A 1,200-case run that took 9 minutes finishes in 41 seconds.

shipped in v2.4.0

// 01

Parallel by default

Every suite fans out across up to 64 workers. A 1,200-case run that took 9 minutes finishes in 41 seconds.

shipped in v2.4.0

// 02

Graders that check facts

A grader can call your staging API before it scores a reply, so “refund approved” only passes if the refund exists.

shipped in v2.3.0

// 02

Graders that check facts

A grader can call your staging API before it scores a reply, so “refund approved” only passes if the refund exists.

shipped in v2.3.0

// 03

Only what changed

Tessel hashes prompts, cases and model settings, then reruns just the cases your diff touched.

cache hits shown on every run

// 03

Only what changed

Tessel hashes prompts, cases and model settings, then reruns just the cases your diff touched.

cache hits shown on every run

// 04

A check, not a dashboard

Results post to the pull request as a status check. Red blocks the merge, and the report links straight to the failing case.

GitHub · GitLab · Buildkite

// 04

A check, not a dashboard

Results post to the pull request as a status check. Red blocks the merge, and the report links straight to the failing case.

GitHub · GitLab · Buildkite

~/checkout-agent — zsh

Copy

curl

node

python

cli

1

2

3

4

5

6

7

8

9

$ npx tessel run --suite checkout-agent


✓ 182 passed ✗ 4 failed 41.2s


✗ refund_over_limit expected "deny"

✗ address_fr_cedex timeout 8000ms


→ report https://tessel.dev/r/8f2k1


$

api operational · p95 412ms

sdk v2.4.0

One command locally, the same check in CI.

//

05

from the pull request

//

05

from the pull request

“We stopped arguing about whether the new prompt was better. The check goes red or it doesn’t. Our support bot went from 74% to 93% in six weeks of normal PRs.”

“We stopped arguing about whether the new prompt was better. The check goes red or it doesn’t. Our support bot went from 74% to 93% in six weeks of normal PRs.”

— Staff engineer, conversational AI team at Ferro (demo quote)

— Staff engineer, conversational AI team at Ferro (demo quote)

//

07

questions

Before you wire it into CI.

What counts as a run?

One case, evaluated once, against one model. A 200-case suite tested on two models is 400 runs.

Do you train on our data?

No. Inputs and outputs are stored only for your retention window, encrypted at rest, and never used to train anything.

Can we run it without sending data out?

Yes. Team and Enterprise support self-hosted runners. Only pass/fail counts leave your network.

Ship the prompt change. Keep the receipts.

Ship the prompt change. Keep the receipts.

$

npx tessel init

$

npx tessel init

tessel

Evals for LLM apps, on every commit.

Release notes, once a month

All systems normal · © 2026 Tessel Labs

tessel

tessel

Evals for LLM apps, on every commit.

Release notes, once a month

All systems normal · © 2026 Tessel Labs

tessel

Create a free website with Framer, the website builder loved by startups, designers and agencies.