> your AI agent picks dependencies from memory; give it dated facts — try starlog.dev ↗ vet your agent's deps ↗ vibe-coding is fine. vibe-importing isn’t. — try starlog.dev ↗ vibe-importing isn’t fine ↗ your agent has never seen your private packages — try starlog.dev ↗ facts for private packages ↗ a linter for the dependencies your AI agent picks — try starlog.dev ↗ a linter for agent deps ↗

Back to Articles

ALE: Evaluating AI Agents on Real Professional Work Without Giving Them the Answers

[ View on GitHub ]

ALE: Evaluating AI Agents on Real Professional Work Without Giving Them the Answers

Hook

Most AI agent benchmarks accidentally teach agents the answers during evaluation. ALE solves this by injecting the grading rubric only after the agent has finished working—like giving students the exam, collecting their papers, and only then printing the answer key.

Context

The explosion of autonomous agent frameworks—from AutoGPT to multi-agent orchestrators like CrewAI—created a benchmarking crisis. Existing evaluations either measure narrow capabilities (can your agent use a calculator API?) or reduce complex workflows to toy environments. SWE-bench focuses exclusively on GitHub issues. WebArena only tests browser navigation. OSWorld covers desktop automation but uses simplified Ubuntu containers. None of these tell you whether an agent can actually perform professional work: editing video in Premiere, building Excel financial models, or configuring network infrastructure.

The contamination problem makes this worse. When benchmarks stage reference answers alongside task inputs, agents can peek at solutions instead of solving problems. When graders run during execution, agents learn to game intermediate checkpoints rather than produce correct final outputs. And when environments are sanitized simulations, performance metrics become disconnected from economic value—the whole point of building agents is to automate real jobs with real tools, not navigate sandboxed playgrounds. ALE (Agents' Last Exam) emerged from Berkeley's RDI lab to address these gaps: evaluate heterogeneous agent systems on authentic professional tasks using production software, with grading mechanisms that prevent answer leakage.

Technical Insight

ALE's architecture decouples agent evaluation into three swappable components: agent harnesses (the system being tested), sandbox environments (cloud VMs running Windows or Linux with actual professional software), and task definitions (Python modules specifying instructions and grading logic). The critical innovation is the execution pipeline's temporal separation of inputs and references.

Here's how a typical task module structures this separation:

from ale.task import Task

class VideoEditTask(Task):
    def stage_inputs(self, vm_session):
        """Called before agent runs—sets up task materials."""
        vm_session.upload_file('raw_footage.mp4', '/workspace/')
        vm_session.upload_file('brand_logo.png', '/workspace/')
        return {
            'instruction': 'Edit raw_footage.mp4: add 2s fade-in, '
                          'overlay brand_logo.png in top-right, export as MP4',
            'workspace': '/workspace/'
        }
    
    def stage_reference(self, vm_session):
        """Called AFTER agent completes—injects grading materials."""
        vm_session.upload_file('reference_output.mp4', '/grading/')
        vm_session.upload_file('grader.py', '/grading/')
    
    def evaluate(self, vm_session):
        """Executes grader in isolated environment."""
        result = vm_session.exec('/grading/grader.py --compare '
                                 '/workspace/output.mp4 /grading/reference_output.mp4')
        return float(result.stdout.strip())  # Returns [0,1] score

The agent never sees reference_output.mp4 or grader.py during execution. It receives only the natural language instruction and input files. After the agent signals completion (or times out), ALE snapshots the VM state, injects hidden references, and runs deterministic grading code that compares produced artifacts against ground truth. This prevents contamination while enabling automated evaluation at scale.

The unified CUA (Command-line + UI Agent) bridge is architecturally elegant. Traditional agent harnesses are either CLI-native (stdin/stdout loops, perfect for code-writing agents) or GUI-native (VNC/RDP control, necessary for desktop automation). ALE lets CLI harnesses drive graphical applications through MCP (Model Context Protocol) tool servers:

# Agent harness code (runs outside VM)
import mcp

# Connect to dual MCP bridges
cli_bridge = mcp.Client('cli-mcp-server')  # For bash/powershell
gui_bridge = mcp.Client('cua-mcp-server')  # For desktop actions

# CLI-native agent can now use GUI tools
screenshot = gui_bridge.call_tool('screenshot', {})
if 'Save' in screenshot['text_regions']:
    gui_bridge.call_tool('click', {'x': 450, 'y': 120})
    gui_bridge.call_tool('type', {'text': 'output.mp4'})

# Same agent can shell out when needed
cli_bridge.call_tool('exec', {'command': 'ffmpeg -version'})

This abstraction means a lightweight ReAct loop that normally operates through bash can interact with Premiere Pro's GUI without architectural changes. The MCP server running inside the VM translates click and type calls into actual desktop events (pyautogui on Linux, win32api on Windows). Screenshot tools return both raw images and OCR-extracted text regions, giving language-model agents structured visual context.

The framework supports two execution modes based on where the harness runs. In-sandbox harnesses (injected CLIs like gpt-cli-assistant) execute inside the VM alongside the CUA MCP server—the agent is literally a process on the evaluation machine. Out-of-sandbox harnesses (heavyweight orchestrators like AutoGPT with persistent memory) run externally and drive the VM through both MCP bridges—CLI for shell commands, GUI for desktop automation. Both modes produce identical trajectory schemas:

{
  "steps": [
    {
      "timestamp": "2024-01-15T10:23:45Z",
      "action": {"type": "tool_call", "tool": "exec", "args": {"command": "ls"}},
      "observation": {"stdout": "raw_footage.mp4\nbrand_logo.png", "stderr": ""},
      "reasoning": "Checking available input files in workspace"
    },
    {
      "timestamp": "2024-01-15T10:24:12Z",
      "action": {"type": "tool_call", "tool": "screenshot", "args": {}},
      "observation": {"image_path": "traj/screenshots/step_2.png", "text_regions": [...]}
    }
  ],
  "final_score": 0.87,
  "artifacts": ["workspace/output.mp4"]
}

This unified logging lets you compare a simple GPT-4 CLI loop against a multi-agent CrewAI system with vector memory—radically different architectures reduced to comparable outcome metrics and auditable decision trails. The framework explicitly rejects step-by-step evaluation (checking intermediate states) in favor of black-box testing: did the agent produce correct artifacts, regardless of how it reasoned?

Tasks are sourced from 300+ industry professionals across 55 O*NET-defined occupations (video editing, financial analysis, network administration, CAD design). Each task includes time budgets (most allow 30-60 minutes), required software manifests (VM provisioning installs Premiere, Excel, AutoCAD via automation), and success criteria encoded in grading scripts. The corpus intentionally spans skill levels—some tasks are entry-level data entry, others require expert domain knowledge—to measure agents across the actual distribution of professional work, not just cherry-picked demonstrations.

Gotcha

The infrastructure requirements are punishing. Each evaluation run provisions a fresh GCP VM (n1-standard-4 for Linux tasks, n1-standard-8 for Windows with GPU for video work), which takes 3-8 minutes just to boot and install software. A single task run costs $2-15 in compute depending on duration and VM size. Running the full 150-task public benchmark once will consume hundreds of dollars and multiple days of wall-clock time. The repository includes GCP Terraform configs but assumes you're comfortable burning cloud credits—there's no local Docker fallback because the whole point is testing against real professional software that won't run in containers.

The public dataset is a teaser. Only 150 of the claimed 1,500+ tasks are open-source, and those skew toward software that's freely available (VSCode, GIMP, LibreOffice). Tasks requiring licensed tools (Adobe Creative Suite, AutoCAD, professional DAWs) are documented but not runnable without bringing your own licenses, and the VM provisioning scripts don't include automation for software that requires click-through EULAs. You can write custom tasks, but you'll need to solve software licensing yourself. This makes ALE more of a framework than a ready-to-use benchmark if you're outside academia.

Deterministic grading breaks down for creative or ambiguous professional work. Comparing video files with grader.py works if you're checking for specific edits (fade duration, logo position), but many real professional tasks have multiple valid solutions. A financial model that uses different formulas but reaches the same conclusions would fail a naive file-diff grader. The framework pushes this complexity into task authors—you can write sophisticated evaluators, but the repo provides minimal guidance on handling ambiguity, and most example tasks use brittle exact-match grading.

Verdict

Use if: You're building autonomous agent systems (not just evaluating foundation models) and need to compare architecturally different approaches—ReAct loops vs multi-agent orchestrators vs code-writing systems—on real professional tasks where existing benchmarks like SWE-bench are too narrow. The unified CUA bridge and hidden-reference grading are genuinely useful contributions if you're already spending serious money on agent R&D and can absorb the cloud costs. This is for well-funded labs or companies treating agent evaluation as production infrastructure, not a side experiment. Skip if: You're evaluating models directly (use GAIA or AgentBench instead—no VMs required), working on consumer automation where OSWorld's containers are sufficient, operating without cloud budget for repeated runs (SWE-bench costs pennies per eval), or need fully reproducible baselines that don't depend on proprietary software licenses. ALE's sweet spot is narrow: organizations already committed to generalist agent development who need industry-validated tasks and consider $10K+ monthly evaluation budgets reasonable.