Skip to main content
Timbal provides a command-line interface for discovering and running evals. This guide covers all CLI options and integration patterns.

Basic Usage

Run evals from the command line:

CLI Options

Runnable Specification

The runnable can be specified in two ways: 1. Via CLI flag:
2. Per-eval in YAML:
Per-eval runnable overrides the CLI flag.

Tag Filtering

Filter evals by tags using -t or --tags:
Evals matching any of the specified tags will run.

Output Capture

By default, stdout/stderr from your agent is captured and only shown on failure. Use -s to see output live:

Streaming JSON Output

Use --format json to stream structured events instead of the rich terminal report. One JSON object is written per line (JSONL) to stdout, and each result event is emitted as the eval completes — human-readable output goes to stderr, so stdout stays parseable:

Event Reference

Every line is a JSON object with an event field: start (once, before any eval runs), result (once per eval), summary (once, at the end). start result — one per eval. With --jobs 1 results arrive in file order; with --jobs > 1 they arrive in completion order, so use name to correlate. Each entry in validators: summary The document written by -o/--output has the same shape: the summary fields at the top level plus a results list, where each entry matches the result event (minus the event key).

Parallel Execution

Use -j/--jobs to run evals concurrently. Results are reported in completion order, which pairs naturally with --format json for streaming consumers:
Per-eval stdout/stderr capture works in parallel mode — output is attributed to the eval that produced it.

Saving Results

Use -o/--output to write the full results document as JSON after the run:

File Discovery

Naming Patterns

Timbal discovers eval files matching these patterns:
  • eval*.yaml - e.g., eval_search.yaml, evals.yaml
  • *eval.yaml - e.g., search_eval.yaml, my_eval.yaml

Directory Structure

Run all evals:
Run specific subset:

Configuration File

Create an evalconf.yaml in your project root for shared configuration:
Timbal walks up the directory tree looking for evalconf.yaml.

Output Format

Successful Run

Failed Run

Exit Codes

CI/CD Integration

GitHub Actions

GitLab CI

Pre-commit Hook

Debugging

Verbose Output

Run Single Eval

Test a specific eval during development:

Environment Variables

Set environment variables for testing:

Best Practices

Separate fast smoke tests from slow regression tests:
Check exit codes in scripts:
Prevent hanging tests with timeouts (in milliseconds):
Organize evals with tags: