AgentBench-Live evaluates AI coding agents on real-world task execution — not chat quality, not vibes, not self-reported metrics. Each agent receives the same task prompt, works in an isolated workspace, and is scored by automated tests and/or LLM-as-Judge.
Tasks are designed to test capabilities that matter in real development workflows:
| Domain | What We Test | Example |
|---|---|---|
| Code | Bug fixes, feature implementation | Fix off-by-one error in pagination |
| Data | CSV/JSON analysis, insights | Analyze sales data and generate summary |
| Multi-step | Complex workflows across tools | Refactor + test + document a module |
| Research | Technical investigation | Compare database options for a use case |
| Tool Use | API calls, file operations | Set up GitHub Actions workflow |
Each task must be:
- Deterministic — the same correct output is always achievable
- Self-contained — all fixtures and test cases are included
- Time-calibrated — annotated with estimated human completion time
- Auto-scorable — has automated tests, LLM-judge rubric, or both
Tasks are defined as YAML files with structured fields:
id: code-001
domain: code
difficulty: easy
title: "Fix off-by-one error in pagination"
prompt: "Fix the bug in paginator.py so all tests pass"
setup:
files:
- src: fixtures/code-001
dst: workspace
install: "pip install pytest"
evaluation:
type: auto
auto:
command: "cd /workspace && python -m pytest test_paginator.py -v"-
Auto (
auto) — runs a test command (usually pytest) and scores based on pass rate. Score = tests_passed / tests_total. Fully deterministic. -
LLM Judge (
llm-judge) — sends the agent's output and a rubric to an LLM evaluator (Claude Sonnet by default). The judge scores each rubric criterion on a 1-10 scale. Final score = average / 10. -
Composite (
composite) — weighted combination of auto (60%) and LLM judge (40%). Used for tasks where both test results and output quality matter.
An agent "passes" a task if its score ≥ 0.80. This threshold was chosen to require strong (not just partial) solutions.
When no LLM API key is configured, tasks using LLM-judge evaluation fall back to heuristic scoring (capped at 0.60). This is clearly marked in results. For authoritative scores, set ANTHROPIC_API_KEY or OPENAI_API_KEY.
When running multiple trials (e.g., --trials 3), pass@k = (trials where score ≥ 0.80) / total_trials. The leaderboard reports the best score across trials.
Each task runs in an isolated workspace:
- Docker mode (recommended): A fresh Docker container prepares the workspace — installs dependencies, copies fixture files. The agent then works against this clean environment. This ensures reproducibility across machines.
- Local mode (fallback): When Docker is unavailable, a local temporary directory is used. Results may vary based on the host environment.
Agents receive:
- A text prompt describing the task
- A workspace directory with pre-configured files
- A timeout (default 300 seconds)
The agent runs as a subprocess and can execute any commands within the workspace. Network access is enabled only for tasks that require it (research, tool-use domains).
- Access other tasks' workspaces
- Read the evaluation criteria or test cases
- Modify the benchmark framework itself
To reproduce our results:
git clone https://github.com/jackjin1997/AgentBench-Live
cd AgentBench-Live
pip install -e ".[eval]"
export ANTHROPIC_API_KEY=your-key # for LLM judge scoring
# Run full benchmark
agentbench run --agent claude-code --tasks all
agentbench run --agent gemini-cli --tasks allResults depend on:
- Agent version (we report the version used)
- Docker availability (for reproducible sandboxing)
- LLM judge availability (for non-auto tasks)
- Network access (for research/tool-use tasks)
Why we count both, not just quality. A 0.7 score that costs $0.50 and takes 90s is not the same product as a 0.7 score that costs $0.02 and takes 12s. Most agent leaderboards ignore this dimension entirely.
The EvalScore model (in src/agentbench/evaluator/models.py) already carries optional CostMetrics and LatencyMetrics fields:
@dataclass
class CostMetrics:
input_tokens: Optional[int] = None
output_tokens: Optional[int] = None
cost_usd: Optional[float] = None
raw: dict = field(default_factory=dict) # provider-specific pass-through
@dataclass
class LatencyMetrics:
total_seconds: Optional[float] = None
time_to_first_output_seconds: Optional[float] = None
step_count: Optional[int] = Nonev0.2 status: schema in place, not populated. Adapters do not yet capture token usage from CLI stdout. v0.3 plan:
- Each adapter parses agent stdout for token usage where available (Claude Code emits
--output-format=jsonwith usage; Gemini CLI exposes--quiet --usage; Codex CLI logs cost; Aider has--show-token-cost). - The runner wraps agent invocation in a wall-clock timer that records
total_seconds, plus parses logs fortime_to_first_output_secondsandstep_countwhere available. - The leaderboard renders a 3-axis matrix: score × cost × latency, so users can pick by their actual constraint (best-quality, lowest-cost, fastest, or best-tradeoff).
- The composite ranking exposes weights so anyone can re-rank for their own preference (e.g. "I weigh latency 2× as much as cost").
Tradeoff acknowledgement: an adapter that under-reports tokens looks artificially cheap. We treat missing data as None, never 0, and surface "n agents missing data on axis X" in the leaderboard so users know what's comparable.
- Small task set. 10 tasks across 5 domains is a starting point, not exhaustive. We actively seek task contributions.
- Agent availability. Not all agents have CLI interfaces suitable for automated benchmarking. IDE-based agents (Cursor, Windsurf) cannot currently be tested.
- LLM judge variance. LLM-as-judge scores have inherent variance (~±0.05). Auto-eval tasks are fully deterministic.
- Single-turn only. Tasks test one-shot execution. Multi-turn interaction patterns are not yet evaluated.
- Sample size for variance claims. v0.2 variance findings are based on n=2-3 full runs per agent. v0.3 targets n≥5.
See the task authoring guide for the full specification. Good benchmark tasks test real capabilities, not trick questions.