Westworld Finance Diligence Bench Evaluating AI Agents on a Complete company acquisition due-diligence process

We present Westworld Finance Diligence Bench, a benchmark of 88 problems that evaluates AI agents on a complete company acquisition due-diligence process. It draws on anonymized data from real private transactions, runs inside dynamic desktop environments, and spans trajectories that reach hundreds of steps. Every problem is written and reviewed by practicing finance deal professionals and verified by a mixed pipeline of agentic, discrete, and binary verifiers.

We evaluate a range of frontier models, each across its native CLI harness and our internal Halluminate CU + TU harness, and present every model-harness pair three ways.

The histogram shows each configuration's mean score with average cost per run inside the bar. The Pareto 2D plot trades that cost against mean score and the summary table adds average tool usage, cost, mean score, and pass rate. Mean score is the pass@1 verifier grade averaged over the 88 problems and their three attempts each, always between 0 and 1. Pass rate is the share of those 264 graded attempts that clear the 0.50 bar, meaning they score at least 0.50; the 0.50 threshold is a reporting choice and does not make the underlying reward binary, as we explain below. Cost per run is the platform-recorded spend where available and otherwise each run's token usage priced at the model's published input/output/cached rates, averaged across the 88 tasks.

Key Innovations of our Benchmark

  • Real private-deal data: anonymized documents from actual private equity transactions. To the best of our knowledge, no published benchmark evaluates a complete diligence process on private deal data of this breadth.
  • A complete process: tasks that together span one deal's diligence, from early analysis through to close, rather than isolated tasks tied to a single job title.
  • Mixed verifier pipeline: each problem is scored by a decomposed mix of agentic rubric grading and deterministic checks, weighted by expert authors and audited in an independent QA pass.
  • Computer use and tool use together: a single task requires operating a real desktop environment, with files, office applications, and a data room, while also calling structured tools for email and chat, all in one trajectory. A few benchmarks combine these two modes, but it remains rare, and rarer still on finance work.

The rest of this post walks through the benchmark in detail. We first place the benchmark in the context of related work. Then, walk through a sample of a single task, following it from the prompt through the tools, verifiers, and graders. We then describe the quality process we use to keep environments healthy. Next, we present detailed results from our runs, including a per-trajectory error analysis. We close with our takeaways and future work.

Previous Works

Benchmarks for professional domains have grown narrow by construction: accounting tasks in one suite, investment banking tasks in another, each targeted at a single task type or a single job title. For instance, some of these are:

  • FinanceBench - 10,231 open-book question-answer pairs about public companies, testing whether a model can pull the right figure from a filing.
  • FinQA - expert-written numerical-reasoning questions over single earnings reports, each paired with an executable reasoning program.
  • ConvFinQA - a conversational extension of FinQA that chains multi-step numerical questions across the turns of a dialogue.
  • BizBench - eight quantitative-reasoning tasks that grade financial problem solving through program synthesis over structured data.
  • FinanceQA - hedge-fund, private-equity, and investment-banking analysis questions covering hand-spreading, valuation conventions, and reasoning under incomplete information.

However, this decomposition no longer matches how AI systems enter these domains. Organizations now deploy agents against whole processes. This complete-process way of using AI has no frontier-quality benchmark, only piecewise tests that cannot be combined into a full picture. Some works that have attempted to address this are:

  • DealTrace - our own private-equity deal review across ten real deals and five sequential stages (extract, reconcile, forecast, market, recommend); a first step toward process-level evaluation, but narrower than a full diligence suite.
  • Finance Agent Benchmark - 537 expert questions across nine categories answered by an agent with web-search and EDGAR access; agentic, but still discrete research questions over public filings rather than one connected deal.
  • TheAgentCompany - long-horizon agent tasks inside a simulated software company that combine computer use (a real browser and desktop applications) with tool use (code execution, chat, and internal services) in the same task; the closest general analogue to whole-process work precisely because it exercises both modes together, though with almost no finance content.
  • OSWorld - 369 open-ended computer-use tasks across real operating systems and applications, establishing the stateful multi-app desktop setting but without any deal or finance domain.
  • tau-bench - multi-turn tool-agent-user interactions graded against database state and policy rules, testing sustained tool use, but on customer support rather than analyst deal work.

Westworld Finance Diligence Bench targets this gap, simulating the full body of work that a team of investment bankers, consultants, and accountants would produce together over several weeks. Unlike pure computer-use benchmarks such as OSWorld, our agents operate in the environment through code, structured tools, and mouse-driven GUI control. Trajectories regularly run to hundreds of steps, and the longest model and harness pairing averages more than five hundred steps per run, as the results below show; the trajectory analysis below shows how runs spend those steps.

Coverage

The benchmark spans the full arc of a deal, from the first model to the signed close.

  • Modeling - building and updating the financial models (three-statement, LBO, DCF) that project the target's economics.
  • Underwriting - assessing the risk and terms of the deal, and sizing what can be financed and on what conditions.
  • Quality of earnings - testing whether reported earnings are real and sustainable, adjusting for one-offs and accounting choices.
  • Data preparation - cleaning, organizing, and reconciling the raw deal data so it can be analyzed.
  • Pitch materials - producing the client-facing decks and memos that present the opportunity and the recommendation.
  • Closing - the final steps that get a deal signed: redlining contracts, reconciling terms, and confirming conditions.
  • Diligence review - reviewing the data room to surface risks, obligations, and inconsistencies before committing.

Problems are organized into the seven task categories shown above. They are distributed across these categories and across the professional roles that would own them, so that no single specialty dominates and no stage of the process goes untested. Within a single problem, an agent may need to search a data room, reconcile spreadsheet models, draft client-facing documents, and communicate results over email, mirroring how the underlying work actually flows between artifacts and channels. Here we show the number of tasks in each of the seven task categories.

Task categoryNumber of tasks
Modeling14
Underwriting13
Quality of earnings9
Data preparation11
Pitch materials15
Closing4
Diligence review22

Sample Task

Every task in the benchmark was authored by a finance expert. They wrote the prompt, constructed the ground truth, and chose the verifiers and their weights so that the score reflects what actually matters in the work. Verifier weights were chosen to reflect the relative value of each individual verifier on the overall quality of the output. For example, saving a spreadsheet under the right file name is important, but much less so than the substance of the analysis performed, and therefore the filename check is weighted much less than the analysis check. Every problem went through our automated QA pipeline and findings were reviewed by our core team (detailed in the quality-assurance section below).

Problems follow the same shape: the agent receives a set of inputs (a prompt and supporting context), acts on the environment through tools (which can be MCP or GUI-based) to produce a deliverable, which is scored by a mix of agentic and deterministic verifiers. The grade is not a single judgment: it decomposes into several weighted verifiers. Each verifier returns either 0 or 1 (the binary checks and the rubric grader) or a proportional fraction, such as the share of cells in a range that match ground truth. The task score is the weight-weighted average of those per-verifier scores, so it always lands somewhere in 0 to 1.

Here we walk through a single task end to end. Note that the verifiers change from one task to the next.

Sample task and verifier walkthrough

Prompt

Review and redline the "11.02.01.05 CAMA Statement of Work" file from the data room. We are representing Vision Government Solutions. Save the redlined output file to the Desktop, named "11.02.01.05 CAMA Statement of Work Redlined".

Context given

The desktop might or might not have files. In this case, it starts without files.

/06 Legal/06.02 Customer Information/Customer Contract Templates/11.02.01.05 CAMA Statement of Work.pdf212 KB
11.02.01.05 CAMA Statement of Work
11.02.01.05 CAMA Statement of Work
ReferenceProvision
Section 2.1(b)Included modules (GIS, Marshall & Swift, ...)
Section 3.2Licensed users (named and read-only)
Section 7Data conversion scope (assessment history, sketches, ...)
Section 8Import / export functionality
Section 9.1(a)Onsite training days
Section 10Payment milestones and Net 30 terms
Section 12.1Termination notice period
Exhibit AProject schedule and responsible parties

Preview shows the first 5 rows. The full statement of work continues below.

The one file named in the prompt, inside a 160-file data room. Click it to preview.

21 emails in 9 threads
Search emails...
John ReynoldsJul 9
Legal review (2)
Sarah MartinezJul 8
Imports requirements
John ReynoldsJul 8
Internal convo (2)
Sarah MartinezJul 8
user count (3)
Sarah MartinezJul 8
Conversion discussion (2)
Sarah MartinezJul 8
Kickoff – CAMA Implementation
From: Sarah Martinez <sarah@it.com>  ·  To: John Reynolds <john@visiongov.com>  ·  Kickoff – CAMA Implementation Discussion
Hi John,
We're excited to move forward.
Before legal review we'd like to discuss a few items:
- Increase licensed users from 18 to 24.
- We'd like GIS included.
- We don't think we'll need Marshall & Swift.
- We'd prefer all implementation to occur on-premise rather than Vision Cloud.
- We'd like two additional training days.

Let's discuss during kickoff.

Thanks,
Sarah

One message from a thread of about twenty; the terms keep moving across the conversation.

Conversations
George Smith & Jane Chen2
George SmithIt doesn't look like I have all the information to fill out the SOW template.
Jane ChenJust fill out what you can.
Notes
Project Kickoff
Sales Leadership Mtg
Steering Committee
Follow-up meeting
Project Kickoff Meeting Notes
Attendees
  • John Reynolds – Vision
  • Sarah Martinez – PM
  • Jane – County Assessor
  • Sam – Procurement
Customer requests
  • GIS module included
  • Marshall & Swift excluded
  • Customer prefers on-prem
  • Vision notes cloud may be required if servers fail readiness review
  • Three days onsite training (Vision says one is already included)
  • Procurement requests milestone payments shifted toward project completion
Action items
  • Vision to propose revised milestone schedule.

Desktop

The agent's working desktop, empty at the start. It downloads its inputs here and saves the final redlined deliverable back to it.

Possible actions
File managerOffice suite
Data Room

The deal's full document repository of 160 files. The one file named in the prompt sits among the rest of the deal's paperwork.

Possible actions
List folderSearch filesGet file infoDownload fileUpload fileCreate folderCreate share linkDelete file
Email

The full inbox, 21 emails across 9 threads. The negotiation plays out here, with the terms shifting from message to message.

Possible actions
Read emailSearch emailsDraft emailSend emailSend draftUpdate draftGet draftList draftsDelete draftModify emailBatch modify emailsDelete emailBatch delete emailsDownload attachmentList email labels
Chat App

Direct messages and channels with coworkers, used for quick clarifications on how to handle gaps in the task.

Possible actions
List channelsList membersGet channel messagesGet direct messagesSearch messagesSend channel messageSend dmCreate channel
Notes

Short, read-only meeting notes referenced in the prompt. Background context on what the customer asked for, not hints.

Possible actions
Read-only context

Desktop environment

The agent works inside a Docker container with a full Linux desktop. Beyond the email, chat, notes, and data-room apps shown in the context above, it drives the real desktop apps below. Click an outlined icon to see the tools it exposes. Market data has no desktop app: the agent reaches it from code or a market-data tool.

The agent's Linux desktop. The real LibreOffice Calc, Writer, and Impress icons in the dock, the File System icon, and the PDF viewer icon are outlined to show they are interactive.
Spreadsheets
18 tools

Open, read, edit, format, and save spreadsheets, including formulas and charts.

Actions
Add chartAdd sheetCreate workbookDelete sheetFormat cellFormat rangeGet commentGet infoModify chartRead cellRead commentsRead rangeSave workbookSet formulaSet formula rangeSet formulas batchWrite cellWrite range
Documents
14 tools

Open, read, edit, and save word-processing documents.

Actions
Add bulleted listAdd headingAdd imageAdd numbered listAdd page breakAdd paragraphAdd tableCreate documentGet infoRead documentReplace textSave documentSet footerSet header
Presentations
22 tools

Open, read, edit, and save slide decks.

Actions
Add chartAdd imageAdd slideAdd tableAdd text boxCount slidesCreate presentationDelete presentationDelete shapeDelete slideDuplicate slideFormat textList shapesRead all slidesRead slide textRead speaker notesReorder slidesReplace textSave presentationSet slide layoutSet speaker notesUpdate table cell
File system
2 tools

Browse folders and search for files on the desktop.

Actions
List directorySearch files
PDF viewer
3 tools

Open and read PDF documents.

Actions
Get infoRead allRead page

The agent can drive these apps through the GUI, or write and run code to do the same work.

Verifiers

Every task is graded by two kinds of verifiers working together. Deterministic verifiers run exact, code-level checks on the deliverable, while agentic verifiers read the document and grade open-ended criteria written by the task author. Both feed a single pool of reward weights: each check, deterministic or agentic, carries its own weight, and the task's score is the weighted average of every check's score divided by the total weight, so it always falls between 0 and 1. Most checks return a simple pass or fail, but some deterministic checks award proportional partial credit, for example the fraction of cells in a range that match ground truth, which is what makes the final score fine-grained rather than a coarse pass count. There is no fixed deterministic-versus-agentic ratio; the share each side contributes is simply what its own checks' weights add up to, and it shifts from task to task. In this example the three deterministic checks carry about 5% of the total weight and the seven agentic checks carry the other 95%.

Exact, code-level checks. Click one to see what it verifies and its reward weight.

Tracked changes on

Description: Checks that track changes is turned on, so every edit shows up as a visible redline.
Solution: Tracked changes enabled.
Reward weight: 5%

Correct output filename

Description: Checks that the redlined document is saved with the exact expected file name.
Solution: 11.02.01.05 CAMA Statement of Work Redlined.docx
Reward weight: 0.05%

Saved to the Desktop

Description: Checks that the redlined document is saved in the expected folder.
Solution: /home/model/Desktop
Reward weight: 0.05%

Each agentic verifier opens the finished document, reads it with tracked insertions accepted and deletions removed, and awards credit in proportion to the criteria it finds met. Each check carries its own reward weight.

1. GIS module (4%)
   - The scope states that the engagement includes Vision's commercial off-the-shelf GIS module.

2. User counts (16.9%)
   - Section 3.2 licenses up to 24 Users (half credit).
   - Section 3.2 adds 6 read-only Users (half credit).

3. Conversion scope (15%)
   - The scope states that it does not include Vision's Marshall & Swift module.
   - Section 7 states that historical property sketches will not be converted under this SOW.
   - Section 7 treats any requested historical sketch conversion as out of scope, to be handled by a separate Change Order.
   - The Customer can still terminate the Schedule on thirty (30) days' written notice to Vision.

4. Import / export (14%)
   - Section 8.1 replaces the "[INSERT SPECS HERE]" placeholder with standard import and export functionality.
   - Section 8.1 excludes nightly automated exports to Tyler Technologies, ESRI, and the State Tax Commission.
   - Section 8.1 says those excluded exports may be done under a separate Change Order.
   - Section 8.2 charges any additional or custom automated imports or exports as a separate Change Order.

5. Payment and training (12%)
   - A 15% payment milestone is due upon signing.
   - All four remaining milestones are 21.25%: initial database mapping, beta conversion install, revised beta conversion install, and live database conversion (all or nothing).
   - The Customer gets three (3) days of onsite training.
   - Invoices are payable within 30 days of receipt.

6. Hosting (17%)
   - Section 6.2 adds that Vision will temporarily host the software at no charge until Customer hardware is available.
   - Section 6.2 states that standard annual hosting fees resume after cutover.

7. Exhibit A and preserved terms (16%)
   - No "[CUSTOMER NAME]" placeholder remains anywhere in the document.
   - Each resolved placeholder now reads "IT" (for example, "IT and Vision").
   - Value calibration stays an Optional Service, with a 4-hour session.
   - The delay-fee clause is preserved (a 2-week Project Extension due to Customer delay at $11,000).
   - The suspension clause is preserved (Vision may suspend Services for up to sixty (60) days).
   - The Exhibit A Project Schedule is preserved, including milestones such as "Data Mapping for Conversion" and "Beta Conversion Review and Feedback".

Source: Halluminate · Due Diligence Bench

The prompt is crisp, aiming to reflect real requests in the real world. The task ships with a thread of about twenty emails in which the terms keep moving. The agent has to reconcile the full conversation and redline the contract to the final negotiated state. In this case, the data room holds 160 files. For each task we also decide which tools and verifiers are appropriate for the problem. You can see the ones chosen for this sample in the GUI & tools and Verifiers tab.

Read more about our Halluminate CU + TU harness

CU + TU (computer use + tool use) is our Halluminate harness. It aims to create an equal playing field for evaluating different models' tool-use and computer-use abilities. It does not let the agent execute code. The action space within the CU + TU harness is:

  • Read the current state - the task prompt, notes, emails, chat, and the outputs of earlier tool calls.
  • Call a tool - invoke any of the tools listed above with structured arguments; the harness runs it and returns the result. Every change to the environment happens through a tool call.
  • Use the computer tool - operate the desktop UI directly through screenshots, mouse, and keyboard.
  • Reason in text - write intermediate reasoning between calls to plan the next step.
  • Finish - stop calling tools to end the run; the agent's work is whatever it has saved to the desktop and data room.

The harness gives the agent no shell tool and no code-interpreter tool: it drives the desktop through a computer tool (screenshots plus mouse and keyboard) and calls structured tools, reasons, and finishes, but it cannot run bash or Python to script around them.

Coverage alone is not sufficient; each problem also has to clear a quality bar.

Quality Assurance

To ensure realism and optimize this benchmark for real-world testing, every completed run is put through six independent post-job checks.

Quality assurance is a combination of human and agentic review. Finance experts author each problem, then they go through the automated QA pipeline described here. All QA findings raised by the pipeline are adjudicated by a core-team member, who is responsible for validating then accepting or rejecting, and applying fixes where necessary.

Open any check below to see what it looks for, with an example:

Quality Checks

A single Claude agent (claude-opus-5) runs inside the task's Docker container with shell and file-read access. It reads the problem statement, the seeded emails and chat, and the verifier spec, then extracts every requirement, meaning each concrete thing the task asks the agent to produce or satisfy: a specific number to compute, a file to save under an exact name, an email that must be sent, a contract clause that must change. It maps each requirement to the verifiers that grade it (covered, partially covered, or not covered) and flags requirements with missing or weak coverage, verifiers that check things the task never asked for, and output filenames the grader expects but never communicates to the agent.

Pseudocode
agent = ClaudeAgent("claude-opus-5", tools=[Bash, Read])  # in task container
reqs  = agent.extract_requirements(problem, emails, chat)   # each thing the task asks for
for req in reqs:
    cov = agent.map_to_verifiers(req, spec.yaml)            # covered/partial/none
    if cov in {none, partial} or req.ambiguous:
        findings.add(issue, evidence, severity, category)
return findings

Example: a contract-editing task tells the agent to save the finished contract as Hemi_MSA_vFINAL.docx. The verifiers check the edited clause and that track changes is on, but none of them check the file name, so an agent that saves output.docx still scores full marks.

Requirement coverage map
RequirementGraded by
Edit the GIS clauseclause_text
Turn on tracked changestracked_changes
Save as Hemi_MSA_vFINAL.docxno verifier

A claude-opus-5 agent reviews the problem from inside the container with shell and file access. It walks ten checks:

  • Naming consistency: file names, company names, and version numbers match across the problem statement, the hints, the verifier spec, and the actual files.
  • Hints: any hints help the agent along without being essential to the solution or giving away the exact answer.
  • Data presence: every file, email, and chat message the task refers to actually exists where it should.
  • World and identity coherence: people, companies, and dates line up, and the agent's own identity is not confused with someone else's.
  • Output filename communication: the exact name the deliverable must be saved under is stated somewhere the agent can see.
  • Verifier best practices: the verifiers focus on what matters, are not redundant, and do not lean on weak or degenerate judges.
  • Grading design: each verifier's weight reflects its importance to the task, no single check is disproportionately weighted, and partial credit is used where all-or-nothing grading would be too harsh.
  • Manufactured difficulty: the challenge comes from real domain competence, not from tedium, bulk edits, or waiting on timers.
  • Visual quality: the seeded and reference spreadsheets, documents, and decks look professionally built and are pleasant to look at, not obviously auto-generated.
  • Answer leakage: no graded answer, ground-truth value, or exact formula is exposed on a surface the agent can reach.
  • Authoring artifacts: no leftover template text, placeholder personas, serialization junk, or misspellings betray how the problem was assembled.

For the visual-quality check it renders every spreadsheet, document, and slide deck with LibreOffice and reads back the images, judging whether they look clean and professional rather than just numerically correct. Before flagging answer leakage it first proves the file is actually readable by the agent's own user.

Pseudocode
agent = ClaudeAgent("claude-opus-5", tools=[Bash, Read])
for art in office_files:                     # .xlsx / .docx / .pptx
    png = render(art, "soffice + pdftoppm")  # inside container
    agent.inspect(png)                       # is it nice to look at?
for path in graded_answers + gt_values:
    if readable_by(model_user, path):        # reachability guard
        findings.add(answer_leak)
findings += agent.check(naming, hints, identity, difficulty)
return findings

Example: the task says to compute the FY24 blended gross margin, but the data room only contains statements through FY23. There is no FY24 revenue or cost anywhere in the files, so the number the grader expects cannot be derived.

Income_Statement.xlsx (data room)
FY22FY23
Revenue41,20044,800
COGS26,90028,510
Gross margin34.7%36.4%

A claude-opus-5 agent audits the running environment, given the shell, file access, and the compressed traces of three real runs. It walks a fixed checklist:

  • Are the required tools present and returning the right data?
  • Does every file, email, and message the task references actually exist?
  • Are the seeded workbooks internally consistent (do totals sum, do balances balance)?
  • Do the fixture values agree with what the graders expect?
  • Is the agent's identity coherent across its email and chat accounts?
  • Does any surface leak a privileged file or answer key?

It must prove a file is reachable before calling it a leak.

Pseudocode
agent = ClaudeAgent("claude-opus-5", tools=[Bash, Read])
trajs = compress(runs[:3])                   # first/last/error steps + scores
for c in [TOOLS, RESOURCES, FIXTURES, FIXTURE_vs_GRADER,
          IDENTITY, SEED, BUDGET, LEAK]:
    agent.walk(c, container, trajs)          # docker exec to confirm
    # e.g. open workbooks: do totals sum? do balances balance?
return findings                              # empty if healthy

Example: the prompt tells the agent to open Bid_Comparison.xlsx on the Desktop, but that workbook was never seeded. Only unrelated files are present, so the task cannot even start.

/home/model/Desktop
LOI_Review.xlsx
Kickoff_Notes.txt
Bid_Comparison.xlsx (not found)

A claude-opus-5 agent audits the verifiers across at least two runs of the same problem. For each verifier it forms its own verdict on each run, reading what the agent actually did from that run's trajectory and comparing against the ground truth, then checks that verdict against the score the verifier gave. It flags verifiers that:

  • pass everything, even low-quality or wrong work;
  • fail everything, even correct work;
  • pass wrong work or fail correct work;
  • give unstable scores on work of similar quality;
  • error out instead of returning a judgment.

It reads the verifier code and ground truth from the container; the run trajectories are embedded in its prompt.

Pseudocode
agent = ClaudeAgent("claude-opus-5", tools=[Bash, Read])  # needs >= 2 runs
for v in verifiers:
    mine = [agent.assess(u.trajectory, gt) for u in units] # own verdict
    if constant(v.scores):       flag(v, "trivial pass/fail")
    if mine != v.verdicts:       flag(v, "false verdict")
    if unstable(v.scores, mine): flag(v, "nondeterminism")
return findings

Example: the memo must conclude the deal is not recommended, but the verifier only checks that the word "recommend" appears anywhere in the text, so a memo that reaches the opposite conclusion still passes.

Recommendation_Memo.docx (agent output)
"On balance, we recommend proceeding with the acquisition at the proposed price."
Keyword verifier matches "recommend" and returns 1.0, despite the wrong call.

Two red-team checks look for reward hacking:

  1. A cheap deterministic probe submits an empty, degenerate deliverable and reports what it scores.
  2. An agentic red-teamer goes further using two models:
    • a solver that actively tries to cheat the graders (claude-opus-5) and a judge that decides whether it really cheated (claude-sonnet-5). The solver is told to earn credit without doing the work:
      • build the emptiest shell that still satisfies the verifiers (right file names, sheet and section headers, empty tables);
      • fill everything with placeholder or garbage content;
      • take exactly one grade.

It runs inside the container with the real MCP tools plus a synthetic grade tool, and tries three independent times under a shared time budget. If any attempt scores at least 0.3, the judge reads the mandated work, the actual deliverable content, and the tool calls to decide whether the high score was hollow (won by a fake) or genuine. A separate check confirms the ground-truth files are not readable from the solver's sandbox.

Pseudocode
if readable_by(uid=1000, gt_files): flag("ground_truth_leak")  # critical
best = 0
for attempt in range(3):                   # best-of-K, shared 1400s budget
    solver = ClaudeAgent("claude-opus-5", tools=MCP+[grade_submission])
    solver.build_hollow_deliverable()      # structure only, placeholders
    best = max(best, solver.grade_submission())   # exactly 1 grade
if best >= 0.30:
    v = judge("claude-sonnet-5", mandated_work, deliverable_text, calls)
    if v.hollow: flag("reward_hacking", score=best)

Example: the Quality-of-Earnings workbook has a verifier that only checks that some cell contains the text "Adjusted EBITDA". The red-teamer submits a one-cell spreadsheet with exactly that label and no analysis behind it, and still collects that verifier's full weight.

QoE_Model.xlsx (hollow submission)
AB
1Adjusted EBITDA
2

A claude-sonnet-5 model reads each run's trajectory (screenshots stripped) through a direct API call, with no container and no tools of its own. It reports only tool-level runtime problems, not task or grading issues:

  • a tool that errors on valid use;
  • one the agent gives up on and works around;
  • one that hangs or hits a lock;
  • one that returns wrong data.

Each run is analyzed in its own separate API call, so if one run's analysis fails the others still go through. A final call then groups together the findings that are really the same underlying problem showing up across several runs, so one broken tool is reported once instead of many times.

Pseudocode
findings = []
for run in runs:                           # one API call per run
    t = strip_screenshots(run.trajectory)
    findings += llm("claude-sonnet-5", classify_tool_events(t))
    # tool_error | tool_abandoned | tool_hang | tool_wrong_data
if len(findings) >= 2:
    findings = llm_cluster(findings)       # merge same root cause
return findings

Example: on step 47 the agent calls save on the model workbook and the spreadsheet tool returns a lock error. It retries twice, gets the same error, and gives up with its work unsaved.

trajectory, step 47
excel.save_workbook(path="LBO_Model.xlsx")
UnoException: document is locked for editing by another process
> retry 1 ... same error
> retry 2 ... same error
> agent abandons the spreadsheet with edits unsaved

Source: Halluminate · Due Diligence Bench

Results

This benchmark shows that Opus 5.5 has the strongest performance across both harnesses, with Fable 5.1 in second across both harnesses and then GPT-6.1 Sol across both harnesses. DeepSeek V4.1 Flash is the cheapest and GPT-6 Astra is the most token-efficient in both harnesses. We see across tasks that the underlying model drives the mean score far more than the harness. We see that the value of the harness is primarily on cost. A given model can post nearly the same score in either harness while spending far more in one of them. Here, we outline our results in more detail.

Experimental setup

We evaluate eight models: Opus 5.5, Fable 5.1, GPT-6.1 Sol, GPT-6 Astra, Gemini 3.8 Flash, Grok 4.7, DeepSeek V4.1 Flash, and Meta Muse Spark 1.3. Each model runs in two configurations: inside the CU + TU harness, and inside its own native CLI harness (Claude Code for Opus 5.5 and Fable 5.1, Codex for GPT-6.1 Sol and GPT-6 Astra, Antigravity for Gemini 3.8 Flash, Grok Build for Grok 4.7, the DeepSeek harness for DeepSeek V4.1 Flash, and Muse Code for Meta Muse Spark 1.3). Both configurations share the same tool suite; the native CLI harness adds code execution (a shell and file editing) on top. Every model and harness pair attempts each of the 88 tasks three times (k=3). Scores are verifier based and aggregated per problem. Costs use platform-recorded spend where available and priced tokens otherwise. The trajectory figures below cover these same runs, labeled step by step by two trajectory analyzers, Opus 5.5 and GPT-6 Astra; the interactive trajectory explorer comes from an earlier round of runs of the same tasks.

As above, pass rate is the share of graded attempts that clear the 0.50 pass bar, meaning they earn a verifier score of at least 0.50. The figure below generalizes that view, sweeping the bar from 0 to 100 percent and plotting how many tasks each configuration still clears, averaged over its three attempts.

Tasks cleared at each score threshold
Focus
020406080020406080100pass bar (50%)Score thresholdNumber of Tasks scoring above thresholdnative CLICU + TU

Source: Halluminate · Due Diligence Bench

Performance and compute

On mean score, Opus 5.5 leads the field. On token efficiency, the standout is GPT-6 Astra, which uses the fewest tokens in both harnesses (3.3M per run in its native CLI harness, 18.7M in the CU + TU harness) while remaining among the top performers. Every model uses more tokens in the CU + TU harness than in its native CLI harness. On dollars, GPT-6 Astra inside the CU + TU harness is by far the most expensive configuration; it is simultaneously the costliest and still behind Opus 5.5 in its native CLI harness, which frames the central tradeoff the benchmark exposes: the top of the score axis is not purchasable, and near peers reach the same scores at a fraction of the spend.

Performance and compute by model and harness

0.000.150.300.450.600.75Mean score0.590.59Opus 5.50.560.58Fable 5.10.540.55GPT-6.1 Sol0.530.54GPT-6 Astra0.500.45Gemini 3.8Flash0.480.40DeepSeek V4.1Flash0.470.30Grok 4.70.450.26Meta Muse Spark1.3native CLICU + TU
0.025.050.075.0100.0125.0Millions10.844.8Opus 5.55.5100.4Fable 5.13.624.4GPT-6.1 Sol3.318.7GPT-6 Astra21.171.0Gemini 3.8Flash12.922.0DeepSeek V4.1Flash10.8111.9Grok 4.713.2109.2Meta Muse Spark1.3native CLICU + TU
0.0025.0050.0075.00100.00125.00USD$5.76$27.96Opus 5.5$15.15$81.71Fable 5.1$0.97$27.32GPT-6.1 Sol$6.05$104.85GPT-6 Astra$2.91$8.09Gemini 3.8Flash$0.25$0.42DeepSeek V4.1Flash$7.66$81.87Grok 4.7$2.78$27.50Meta Muse Spark1.3native CLICU + TU

Source: Halluminate · Due Diligence Bench

Model or harness

74 percent of score variation is due to which model is chosen and 9 percent due to the harness it runs in, with the remainder attributable to their interaction. We compute this with a two-way decomposition of the 16 model-by-harness mean scores: the total variation across those cells is partitioned into the share explained by the model factor, the share explained by the harness factor, and a remainder capturing their interaction, with each percentage that factor's share of the total sum of squares. Model choice dominates, and the harness moves the final score surprisingly little. It is essentially flat for the strongest models: Opus 5.5, Fable 5.1, GPT-6.1 Sol, and GPT-6 Astra each land within about 0.02 across their two harnesses. Two models lose real ground in the CU + TU harness, Meta Muse Spark 1.3 dropping about 0.20 and Grok 4.7 about 0.17 of mean score relative to native CLI. Where the harness matters most is not the score at all but the wasted motion behind it: the steps, tokens, and looping a run spends getting there.

Score across every model × harness
0.590.59Opus 5.50.560.58Fable 5.10.540.55GPT-6.1 Sol0.530.54GPT-6 Astra0.500.45Gemini 3.8 Flash0.480.40DeepSeek V4.1 Flash0.470.30Grok 4.70.450.26Meta Muse Spark 1.3native CLICU + TU0.240.320.400.480.560.60WHAT MOVES THE SCORE74%of variation comes fromwhich model you choose9%comes from the harnessremainder = model x harness interaction

Source: Halluminate · Due Diligence Bench

Performance by task category

Category-level scores vary across the deal arc: pitch materials and diligence review are the strongest categories on average, while modeling and closing are the weakest. Opus 5.5 leads or ties for the lead in six of the seven categories, scoring highest on pitch materials and diligence review; Fable 5.1 in the CU + TU harness leads closing.

Mean score by task category, per model and harness
Focus
0.00.10.20.30.40.50.60.7Mean scoreModelingUnderwritingQualityof earningsDatapreparationPitchmaterialsClosingDiligencereviewnative CLICU + TU

Source: Halluminate · Due Diligence Bench

Trajectory analysis

The figures and tables in this section analyze the runs reported above. The interactive explorer, and the notes on step relevance, looping, and golden trajectories that accompany it, come from the earlier v1 run of the benchmark, so its models differ from those in the results above.

Our trajectory analysis ran in four phases. In phase one, for every final run of every configuration, three independent judge models labeled each step as relevant, unclear, or irrelevant to the task and flagged looping, detrimental looping, and suboptimal choices. In phase two, a linking pass attributed each verifier outcome to the specific steps that caused it. In phase three, we designed and validated a golden trajectory for each task, shown in sky blue in the interactive and detailed below. In phase four, on top of the per-run judgments, a cross-model analyst pass defined two overlays: critical regions, shared decision windows of at most fifteen steps in which the task is decided, and a failure point for each failing run, the step at which its outcome was sealed.

The visualization below covers three of the benchmark’s tasks. Each run is drawn as a single line that rises with steps and moves right as tokens are spent, colored by the judged relevance of each step. Click a line or its name label to focus that run, click a segment for the judge’s reasoning on that step, and use “Compare step” to view one step number across every run side by side. The pass bar is 50 percent, and every score shown is a single attempt’s verifier grade, never an average across attempts. The side panel carries each task’s prompt, its verifier mix, the golden trajectory’s design principles, and the full cross-model pattern report.

Scores tell you which model won; they do not tell you where the others lost. We rebuilt trajectory analysis from the ground up: two independent trajectory analyzers from different labs read every step of every analyzed run and labeled it for relevance, action type, artifact, interaction modality, and behavior flags, then tied each failed verifier back to the specific steps that sealed it. For the runs above, the analyzers are Opus 5.5 and GPT-6 Astra; the explorer below shows the same analysis on the earlier v1 run, read by Claude Opus 4.8 and GPT 5.6 Sol. One click selects a run, double-click zooms to it alone, every step dot opens that step's full read, and "Compare judges" stacks both judges' views of the same runs.

Open the interactive full screen.

How the runs behave

Before asking what went wrong, it helps to see what the models actually do with their steps. Every bar below is one model on one harness, built from the analyzers' per-step labels: halluminate-harness rows have dark labels, other harnesses light ones, and hovering any segment shows the exact share. One reading note that matters throughout: the halluminate harness does not allow code execution. When a halluminate run shows code-modality steps, the model was attempting code execution, typing script files and interpreter commands that the harness never runs, and part of what these figures measure is how long each model takes to figure that out and route around it.

Step relevance

In the explorer, deep blue steps advance the task, gray steps are ambiguous, and light gray steps do not. Halluminate-harness runs compress into a narrow band of steps with mostly deep blue mixes. Native runs spread from under a hundred steps to many hundreds, and the longest lines carry sustained gray and light gray stretches, compute spent without advancing the deliverable. Because each verifier outcome is linked to the steps that caused it, clicking a step shows which checks that moment earned or lost.

Looping

In the v1 run shown in the explorer, looping is common, and a significant share of it is detrimental. On their native harnesses, Grok 4.5 and GPT 5.6 Sol loop only to self-verify; Grok 4.5 shows the highest looping share of any configuration, and none of it is judged detrimental. Detrimental looping concentrates in Gemini 3.6 Flash and Opus 5 inside the Halluminate harness. Grok 4.5 inside the Halluminate harness registers no measured looping.

Golden trajectory

The sky blue line in each task is the golden trajectory. For each task we designed an ordered plan of tool calls with complete literal arguments, per-step reasoning, and expected results, constructed from the full ten-run evidence base to satisfy every verifier while remaining realistic and minimal. Each plan was then tested by independent executor agents in the same environment, and a golden was accepted only if it executed with 100 percent accuracy and passed every verifier in the task’s own harness, across two different executor models. The accepted runs land at full credit with a fraction of the tokens the organic runs spend, and each is clickable step by step, including the plan’s reasoning.

What the runs spend their steps on

Share of steps by action type for every run, split by harness.
deepseek-v4.1-flash / halluminatedeepseek-v4.1-flash / halluminate · Explore: 30.0%deepseek-v4.1-flash / halluminate · Build: 33.0%deepseek-v4.1-flash / halluminate · Verify: 19.5%deepseek-v4.1-flash / halluminate · Fix: 2.2%deepseek-v4.1-flash / halluminate · Navigate: 12.9%deepseek-v4.1-flash / halluminate · Communicate: 2.0%deepseek-v4.1-flash / halluminate · Narrate: 0.4%deepseek-v4.1-flash / nativedeepseek-v4.1-flash / native · Explore: 60.1%deepseek-v4.1-flash / native · Build: 11.4%deepseek-v4.1-flash / native · Verify: 14.1%deepseek-v4.1-flash / native · Fix: 8.4%deepseek-v4.1-flash / native · Navigate: 0.7%deepseek-v4.1-flash / native · Communicate: 3.4%deepseek-v4.1-flash / native · Narrate: 1.9%fable-5.1 / halluminatefable-5.1 / halluminate · Explore: 12.8%fable-5.1 / halluminate · Build: 60.5%fable-5.1 / halluminate · Verify: 8.8%fable-5.1 / halluminate · Fix: 4.8%fable-5.1 / halluminate · Navigate: 11.7%fable-5.1 / halluminate · Communicate: 1.2%fable-5.1 / halluminate · Narrate: 0.1%fable-5.1 / nativefable-5.1 / native · Explore: 53.2%fable-5.1 / native · Build: 13.5%fable-5.1 / native · Verify: 13.5%fable-5.1 / native · Fix: 11.5%fable-5.1 / native · Navigate: 2.6%fable-5.1 / native · Communicate: 5.8%gemini-3.8-flash / halluminategemini-3.8-flash / halluminate · Explore: 24.8%gemini-3.8-flash / halluminate · Build: 25.3%gemini-3.8-flash / halluminate · Verify: 8.0%gemini-3.8-flash / halluminate · Fix: 5.0%gemini-3.8-flash / halluminate · Navigate: 36.3%gemini-3.8-flash / halluminate · Communicate: 0.5%gemini-3.8-flash / halluminate · Narrate: 0.1%gemini-3.8-flash / nativegemini-3.8-flash / native · Explore: 71.2%gemini-3.8-flash / native · Build: 7.6%gemini-3.8-flash / native · Verify: 12.3%gemini-3.8-flash / native · Fix: 6.5%gemini-3.8-flash / native · Navigate: 1.3%gemini-3.8-flash / native · Communicate: 1.1%gemini-3.8-flash / native · Narrate: 0.1%gpt-6-astra / halluminategpt-6-astra / halluminate · Explore: 9.5%gpt-6-astra / halluminate · Build: 29.7%gpt-6-astra / halluminate · Verify: 7.2%gpt-6-astra / halluminate · Fix: 8.3%gpt-6-astra / halluminate · Navigate: 43.6%gpt-6-astra / halluminate · Communicate: 1.4%gpt-6-astra / halluminate · Narrate: 0.5%gpt-6-astra / nativegpt-6-astra / native · Explore: 41.3%gpt-6-astra / native · Build: 13.5%gpt-6-astra / native · Verify: 23.3%gpt-6-astra / native · Fix: 11.3%gpt-6-astra / native · Navigate: 6.3%gpt-6-astra / native · Communicate: 4.3%grok-4.7 / halluminategrok-4.7 / halluminate · Explore: 19.7%grok-4.7 / halluminate · Build: 17.0%grok-4.7 / halluminate · Verify: 10.4%grok-4.7 / halluminate · Fix: 17.0%grok-4.7 / halluminate · Navigate: 34.5%grok-4.7 / halluminate · Communicate: 1.1%grok-4.7 / halluminate · Narrate: 0.3%grok-4.7 / nativegrok-4.7 / native · Explore: 36.3%grok-4.7 / native · Build: 8.9%grok-4.7 / native · Verify: 23.7%grok-4.7 / native · Fix: 19.5%grok-4.7 / native · Navigate: 9.1%grok-4.7 / native · Communicate: 2.4%grok-4.7 / native · Narrate: 0.1%meta-muse-spark-1.3 / halluminatemeta-muse-spark-1.3 / halluminate · Explore: 21.7%meta-muse-spark-1.3 / halluminate · Build: 49.1%meta-muse-spark-1.3 / halluminate · Verify: 9.2%meta-muse-spark-1.3 / halluminate · Fix: 0.7%meta-muse-spark-1.3 / halluminate · Navigate: 18.7%meta-muse-spark-1.3 / halluminate · Communicate: 0.6%meta-muse-spark-1.3 / halluminate · Narrate: 0.1%meta-muse-spark-1.3 / nativemeta-muse-spark-1.3 / native · Explore: 57.0%meta-muse-spark-1.3 / native · Build: 24.3%meta-muse-spark-1.3 / native · Verify: 6.7%meta-muse-spark-1.3 / native · Fix: 6.0%meta-muse-spark-1.3 / native · Communicate: 3.7%meta-muse-spark-1.3 / native · Narrate: 2.4%opus-5.5 / halluminateopus-5.5 / halluminate · Explore: 19.4%opus-5.5 / halluminate · Build: 44.6%opus-5.5 / halluminate · Verify: 9.3%opus-5.5 / halluminate · Fix: 9.0%opus-5.5 / halluminate · Navigate: 15.2%opus-5.5 / halluminate · Communicate: 1.9%opus-5.5 / halluminate · Narrate: 0.6%opus-5.5 / nativeopus-5.5 / native · Explore: 59.4%opus-5.5 / native · Build: 11.4%opus-5.5 / native · Verify: 12.5%opus-5.5 / native · Fix: 12.0%opus-5.5 / native · Navigate: 1.0%opus-5.5 / native · Communicate: 3.5%opus-5.5 / native · Narrate: 0.2%ExploreBuildVerifyFixNavigateCommunicateNarrate

Artifact focus by run

Share of steps touching each artifact family, split by harness.
deepseek-v4.1-flash / halluminatedeepseek-v4.1-flash / halluminate · excel: 29.6%deepseek-v4.1-flash / halluminate · docx: 26.8%deepseek-v4.1-flash / halluminate · email: 4.2%deepseek-v4.1-flash / halluminate · pdf: 5.2%deepseek-v4.1-flash / halluminate · filesystem: 15.2%deepseek-v4.1-flash / halluminate · other: 19.1%deepseek-v4.1-flash / nativedeepseek-v4.1-flash / native · excel: 35.2%deepseek-v4.1-flash / native · docx: 23.6%deepseek-v4.1-flash / native · email: 5.4%deepseek-v4.1-flash / native · pdf: 14.1%deepseek-v4.1-flash / native · filesystem: 13.2%deepseek-v4.1-flash / native · memory: 1.8%deepseek-v4.1-flash / native · browser: 0.3%deepseek-v4.1-flash / native · other: 6.5%fable-5.1 / halluminatefable-5.1 / halluminate · excel: 48.9%fable-5.1 / halluminate · docx: 40.8%fable-5.1 / halluminate · email: 1.6%fable-5.1 / halluminate · pdf: 2.4%fable-5.1 / halluminate · filesystem: 2.3%fable-5.1 / halluminate · other: 4.1%fable-5.1 / nativefable-5.1 / native · excel: 22.4%fable-5.1 / native · docx: 23.1%fable-5.1 / native · email: 4.8%fable-5.1 / native · pdf: 15.1%fable-5.1 / native · filesystem: 23.1%fable-5.1 / native · memory: 2.9%fable-5.1 / native · other: 8.7%gemini-3.8-flash / halluminategemini-3.8-flash / halluminate · excel: 17.4%gemini-3.8-flash / halluminate · pptx: 0.1%gemini-3.8-flash / halluminate · docx: 14.7%gemini-3.8-flash / halluminate · email: 2.4%gemini-3.8-flash / halluminate · pdf: 3.4%gemini-3.8-flash / halluminate · filesystem: 30.6%gemini-3.8-flash / halluminate · browser: 0.3%gemini-3.8-flash / halluminate · other: 31.2%gemini-3.8-flash / nativegemini-3.8-flash / native · excel: 35.4%gemini-3.8-flash / native · docx: 11.7%gemini-3.8-flash / native · email: 2.4%gemini-3.8-flash / native · pdf: 14.8%gemini-3.8-flash / native · filesystem: 25.9%gemini-3.8-flash / native · browser: 0.5%gemini-3.8-flash / native · other: 9.2%gpt-6-astra / halluminategpt-6-astra / halluminate · excel: 8.6%gpt-6-astra / halluminate · docx: 39.2%gpt-6-astra / halluminate · email: 1.2%gpt-6-astra / halluminate · pdf: 2.8%gpt-6-astra / halluminate · filesystem: 20.2%gpt-6-astra / halluminate · browser: 0.2%gpt-6-astra / halluminate · other: 27.9%gpt-6-astra / nativegpt-6-astra / native · excel: 22.4%gpt-6-astra / native · docx: 23.9%gpt-6-astra / native · email: 4.8%gpt-6-astra / native · pdf: 18.7%gpt-6-astra / native · filesystem: 18.5%gpt-6-astra / native · browser: 4.1%gpt-6-astra / native · other: 7.6%grok-4.7 / halluminategrok-4.7 / halluminate · excel: 21.7%grok-4.7 / halluminate · pptx: 1.0%grok-4.7 / halluminate · docx: 46.3%grok-4.7 / halluminate · email: 2.4%grok-4.7 / halluminate · pdf: 6.1%grok-4.7 / halluminate · filesystem: 7.8%grok-4.7 / halluminate · other: 14.8%grok-4.7 / nativegrok-4.7 / native · excel: 36.3%grok-4.7 / native · docx: 23.4%grok-4.7 / native · email: 1.8%grok-4.7 / native · pdf: 11.4%grok-4.7 / native · filesystem: 18.2%grok-4.7 / native · memory: 0.3%grok-4.7 / native · other: 8.6%meta-muse-spark-1.3 / halluminatemeta-muse-spark-1.3 / halluminate · excel: 29.8%meta-muse-spark-1.3 / halluminate · docx: 40.5%meta-muse-spark-1.3 / halluminate · email: 1.4%meta-muse-spark-1.3 / halluminate · pdf: 2.2%meta-muse-spark-1.3 / halluminate · filesystem: 9.4%meta-muse-spark-1.3 / halluminate · other: 16.7%meta-muse-spark-1.3 / nativemeta-muse-spark-1.3 / native · excel: 26.2%meta-muse-spark-1.3 / native · docx: 30.8%meta-muse-spark-1.3 / native · email: 2.5%meta-muse-spark-1.3 / native · pdf: 5.9%meta-muse-spark-1.3 / native · filesystem: 21.1%meta-muse-spark-1.3 / native · memory: 3.8%meta-muse-spark-1.3 / native · browser: 0.6%meta-muse-spark-1.3 / native · other: 9.0%opus-5.5 / halluminateopus-5.5 / halluminate · excel: 30.7%opus-5.5 / halluminate · docx: 56.4%opus-5.5 / halluminate · email: 2.1%opus-5.5 / halluminate · pdf: 2.7%opus-5.5 / halluminate · filesystem: 5.6%opus-5.5 / halluminate · browser: 0.1%opus-5.5 / halluminate · other: 2.3%opus-5.5 / nativeopus-5.5 / native · excel: 30.2%opus-5.5 / native · docx: 20.6%opus-5.5 / native · email: 3.3%opus-5.5 / native · pdf: 21.2%opus-5.5 / native · filesystem: 17.6%opus-5.5 / native · other: 7.1%excelpptxdocxemailpdffilesystemmemorybrowserother

How the runs interact with the environment

Share of steps by interaction modality, split by harness: halluminate rows filled, other harnesses plain. Code cells on halluminate rows are attempts, marked with an asterisk: that harness does not execute typed code.
runStructured tool call (API)Code execution (terminal or script)GUI interaction (click, type, scroll)
deepseek-v4.1-flash / halluminate79.1%2.9%*18.1%
deepseek-v4.1-flash / native43.0%57.0%0.0%
fable-5.1 / halluminate75.1%0.0%24.9%
fable-5.1 / native30.1%69.9%0.0%
gemini-3.8-flash / halluminate41.0%3.1%*55.9%
gemini-3.8-flash / native30.8%69.2%0.0%
gpt-6-astra / halluminate31.1%4.9%*64.0%
gpt-6-astra / native5.2%88.5%6.3%
grok-4.7 / halluminate49.9%0.0%50.1%
grok-4.7 / native33.6%55.4%11.1%
meta-muse-spark-1.3 / halluminate80.5%0.0%19.5%
meta-muse-spark-1.3 / native55.1%44.9%0.0%
opus-5.5 / halluminate52.0%0.0%48.0%
opus-5.5 / native24.5%75.5%0.0%
* Attempted, not executed: the halluminate harness does not allow code execution. On those runs the model types script files and interpreter commands that the harness never runs, and it has to eventually figure that out and route around it. In the taxonomy this shows up as Affordance gap not escalated and Tool format friction when the model keeps trying instead of adapting.

Where the failures concentrate

The failure taxonomy has two axes. Finance reasoning failures are errors in the analysis itself: anchoring on stale sources, copying numbers instead of deriving them, omitting required blocks, work that does not tie out. Long-horizon capability failures are errors in the agent: instructions lost over the horizon, no self verification, premature termination, detrimental looping. Each column below is a distribution and sums to 100 percent, so providers with very different failure volumes stay comparable; Gemini 3.8 Flash sits under Google. Click any failure name for its full description: what the failure is, how it differs from its neighbors, and how often it was tagged, and use the toggle to switch between the pooled view and each trajectory analyzer alone.

Two more analyzer outputs sit behind these distributions. For every failed run, each trajectory analyzer names a failure point: the single step after which the run could no longer pass, drawn in the explorer as a dashed ring, with the reasoning in the run panel. And for every task it marks critical regions: the step ranges where the outcome was actually decided, drawn as shaded bands. The tables below count every verifier-linked failure by type; the failure points say which single step sealed each loss, and that sealing step often sits far upstream of where the damage becomes visible.

Finance reasoning failures: where each provider's failure mass goes

For both judges (Opus 5.5 and GPT-6 Astra) we show, of all finance-reasoning failure hits for each provider family, the share falling on each type.
OverallAnthropicDeepSeekGoogleMetaOpenAIxAI
Wrong analytical method
A wrong analytical method substituted for the required one.
22.1%26.4%20.7%28.6%17.6%12.6%23.2%
Wrong presentation of correct work
Correct analysis presented in the wrong form or place.
19.6%27.1%10.2%18.9%14.8%32.9%15.6%
Reconciliation and tie-out failure
Outputs that should reconcile with each other do not tie out.
13.7%16.8%16.5%2.9%10.2%23.6%12.0%
Copied instead of derived
Copied a number instead of deriving it, with no explicit verification.
11.8%5.4%14.7%16.1%12.5%6.0%17.2%
Stale source anchoring
Anchored on an outdated source figure when a fresher or computable one was available.
7.9%6.8%6.6%14.1%6.8%6.0%8.1%
Omitted expected block (insight)
Omitted analysis a competent analyst would include without being told.
7.2%7.2%10.6%6.6%7.6%5.8%4.9%
Omitted required block (explicit)
Omitted a block the instructions explicitly required.
6.4%2.4%6.7%5.4%9.4%5.0%10.4%
Formula discipline
Formula discipline errors: wrong ranges, broken references, hardcoded values.
4.9%1.0%10.0%0.0%11.4%0.3%5.6%
Missed superseding correction
Missed a correction issued mid task that superseded earlier information.
4.8%6.8%2.0%7.5%5.3%5.3%1.8%
Unit and format errors
Unit, currency, magnitude or format errors in figures.
1.5%0.2%1.4%0.0%4.2%2.6%1.2%
Scenario architecture misuse0.1%0.0%0.6%0.0%0.0%0.0%0.0%

Long-horizon capability failures: where each provider's failure mass goes

We show the same construction for the capability axis for both judges (Opus 5.5 and GPT-6 Astra).
OverallAnthropicDeepSeekGoogleMetaOpenAIxAI
Premature discovery closure
Closed discovery too early and missed available material.
22.1%30.6%20.1%28.5%16.4%44.6%7.3%
Delivery mechanics failure
Work was done but delivered wrongly: wrong file, place or naming.
14.9%6.2%3.8%3.8%20.0%2.2%35.7%
False verification
Claimed to verify, but the check was shallow, circular or fake.
14.7%19.3%28.1%10.2%12.5%5.6%11.8%
Instruction loss over horizon
Instructions given early in the task are lost by the time they matter.
14.5%17.3%20.5%21.2%10.7%9.5%10.6%
Affordance gap not escalated
Blocked by a missing affordance and did not escalate or rebalance effort to unexplored areas.
8.0%3.6%13.5%2.6%12.1%15.6%5.7%
Verbatim fidelity miss
Content that had to be carried verbatim was paraphrased or altered.
7.4%15.5%6.9%1.5%2.8%15.2%4.5%
Premature termination
Stopped early with the final output incomplete.
5.8%0.0%0.0%23.3%7.7%0.0%4.9%
Detrimental looping
Repeated a failing approach without changing strategy.
4.2%0.0%0.0%0.0%6.0%0.0%13.0%
Provided template ignored
A provided template or example was ignored.
3.5%3.8%1.7%0.3%6.0%6.1%2.1%
Context loss over horizon
Earlier context is forgotten or contradicted later in the run.
2.3%2.8%3.5%7.0%0.0%1.3%1.2%
Silent scope drop
Part of the task silently dropped mid run, never delivered or mentioned.
1.1%0.0%0.7%0.3%3.4%0.0%1.0%
Plan drift
Later work drifts away from the stated plan without re-planning.
0.9%1.0%0.7%0.0%1.8%0.0%1.0%
No self verification
Finished without checking its own work against the available evidence.
0.3%0.0%0.0%0.6%0.5%0.0%0.5%
Fabricated state or success
Fabricated state, data or success that never happened.
0.2%0.0%0.3%0.9%0.0%0.0%0.3%
Tool format friction0.1%0.0%0.0%0.0%0.0%0.0%0.3%

Alignment between the two trajectory analyzers

Every label in this analysis was assigned twice, independently, by trajectory analyzers from two different labs: Opus 5.5 and GPT-6 Astra. The table below shows, for every label they assign, each analyzer's share, the gap between them, and the misalignment rate: of the steps where at least one analyzer applies the label, the share where the other does not. Self bias gets its own check, comparing how each analyzer reads runs from its own lab against the other analyzer's read of the very same steps.

Label shares and misalignment
labelOpus 5.5GPT-6 Astragapmisalignment
Relevant72.0%90.7%-18.7 pp21.6%
Unclear19.2%6.7%+12.5 pp88.8%
Irrelevant8.9%2.7%+6.2 pp71.2%
Looping (any)12.3%5.7%+6.7 pp71.8%
Detrimental looping6.0%2.9%+3.1 pp68.4%
Suboptimal13.4%17.2%-3.8 pp81.9%
Self bias on own-lab runs
trajectory analyzerown-lab stepsown relevant shareother analyzer's readself bias
Opus 5.5194487.6%99.0%-11.5 pp
GPT-6 Astra111896.7%65.8%+30.9 pp
Shares are the fraction of all double-labeled steps each analyzer gives the label; gap is Opus minus GPT in percentage points.

Conclusions and Takeaways

Westworld Finance Diligence Bench asks a model to do a complete deal, not a single task, and the gap that opens up is large: the best configuration clears only 0.59 of the available credit, and most configurations sit below it. The hardest parts are not exotic. Modeling and closing are the lowest-scoring categories.

The result we did not expect is how little the harness moves the score itself. Model choice explains most of the outcome; the harness explains only about nine percent, and for the strongest models it is essentially flat. It bites hardest on two models, Meta Muse Spark 1.3 and Grok 4.7, which lose around 0.20 and 0.17 of mean score moving into the CU + TU harness. Where the harnesses really differ is in wasted motion: how many steps a run takes, how often it loops, and whether that looping is useful self-checking or spinning in place. For teams deploying agents on long-horizon work, that is the actionable takeaway: once you have chosen a model, the scaffolding around it mostly shapes how efficiently it gets there, not whether it succeeds.

Next Steps

Given what this benchmark reveals, several directions stand out for future work:

  • Post-train open-source models on the benchmark. Because even frontier models clear only about 60 percent of the available credit, smaller open models would likely need a curriculum of easier tasks first, whereas a frontier-scale open model could be trained on it directly.
  • Turn the error analysis into a training signal. The per-step judgments, the executed golden trajectories, and the identified breakage points are a natural source of process-level reward, crediting how a solution is reached rather than only the final score.
  • Measure transfer. Does competence built here carry to adjacent finance work, to other expert domains such as accounting, law, and software engineering, or across modalities, for instance whether training on this process-and-tool-heavy benchmark improves pure coding or web navigation? We leave these questions to future work.

We will release an accompanying paper soon.

Authors

Alina Hyk, Robert Alward, Victoria Knapp Perez, and Wyatt Marshall

All authors contributed equally.