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 category | Number of tasks |
|---|---|
| Modeling | 14 |
| Underwriting | 13 |
| Quality of earnings | 9 |
| Data preparation | 11 |
| Pitch materials | 15 |
| Closing | 4 |
| Diligence review | 22 |
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.
Prompt
Context given
The desktop might or might not have files. In this case, it starts without files.
| 11.02.01.05 CAMA Statement of Work | |
|---|---|
| Reference | Provision |
| Section 2.1(b) | Included modules (GIS, Marshall & Swift, ...) |
| Section 3.2 | Licensed users (named and read-only) |
| Section 7 | Data conversion scope (assessment history, sketches, ...) |
| Section 8 | Import / export functionality |
| Section 9.1(a) | Onsite training days |
| Section 10 | Payment milestones and Net 30 terms |
| Section 12.1 | Termination notice period |
| Exhibit A | Project 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.
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.
Project Kickoff Meeting Notes
- John Reynolds – Vision
- Sarah Martinez – PM
- Jane – County Assessor
- Sam – Procurement
- 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
- 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.
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.
The full inbox, 21 emails across 9 threads. The negotiation plays out here, with the terms shifting from message to message.
Chat App
Direct messages and channels with coworkers, used for quick clarifications on how to handle gaps in the task.
Notes
Short, read-only meeting notes referenced in the prompt. Background context on what the customer asked for, not hints.
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.
Open, read, edit, format, and save spreadsheets, including formulas and charts.
Open, read, edit, and save word-processing documents.
Open, read, edit, and save slide decks.
Browse folders and search for files on the desktop.
Open and read PDF documents.
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:
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.
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 | Graded by |
|---|---|
| Edit the GIS clause | clause_text |
| Turn on tracked changes | tracked_changes |
| Save as Hemi_MSA_vFINAL.docx | no 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.
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.
| FY22 | FY23 | |
|---|---|---|
| Revenue | 41,200 | 44,800 |
| COGS | 26,900 | 28,510 |
| Gross margin | 34.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.
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.
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.
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.
Keyword verifier matches "recommend" and returns 1.0, despite the wrong call.
Two red-team checks look for reward hacking:
- A cheap deterministic probe submits an empty, degenerate deliverable and reports what it scores.
- 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.
- a solver that actively tries to cheat the graders (
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.
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.
| A | B | |
|---|---|---|
| 1 | Adjusted 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.
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.
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.
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.
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.
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.
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.
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
Artifact focus by run
How the runs interact with the environment
| run | Structured tool call (API) | Code execution (terminal or script) | GUI interaction (click, type, scroll) |
|---|---|---|---|
| deepseek-v4.1-flash / halluminate | 79.1% | 2.9%* | 18.1% |
| deepseek-v4.1-flash / native | 43.0% | 57.0% | 0.0% |
| fable-5.1 / halluminate | 75.1% | 0.0% | 24.9% |
| fable-5.1 / native | 30.1% | 69.9% | 0.0% |
| gemini-3.8-flash / halluminate | 41.0% | 3.1%* | 55.9% |
| gemini-3.8-flash / native | 30.8% | 69.2% | 0.0% |
| gpt-6-astra / halluminate | 31.1% | 4.9%* | 64.0% |
| gpt-6-astra / native | 5.2% | 88.5% | 6.3% |
| grok-4.7 / halluminate | 49.9% | 0.0% | 50.1% |
| grok-4.7 / native | 33.6% | 55.4% | 11.1% |
| meta-muse-spark-1.3 / halluminate | 80.5% | 0.0% | 19.5% |
| meta-muse-spark-1.3 / native | 55.1% | 44.9% | 0.0% |
| opus-5.5 / halluminate | 52.0% | 0.0% | 48.0% |
| opus-5.5 / native | 24.5% | 75.5% | 0.0% |
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
| Overall | Anthropic | DeepSeek | Meta | OpenAI | xAI | ||
|---|---|---|---|---|---|---|---|
Wrong analytical methodA wrong analytical method substituted for the required one. | 22.1% | 26.4% | 20.7% | 28.6% | 17.6% | 12.6% | 23.2% |
Wrong analytical method. A different analytical method is substituted for the required one: a shortcut average where a weighted build was demanded, a top-down estimate where a bottom-up derivation was specified, the wrong valuation approach entirely. It is tagged when the method itself deviates, not when a correct method is merely executed badly. Tagged 1161 times across both analyzers. | |||||||
Wrong presentation of correct workCorrect analysis presented in the wrong form or place. | 19.6% | 27.1% | 10.2% | 18.9% | 14.8% | 32.9% | 15.6% |
Wrong presentation of correct work. The analysis is substantively correct but presented in the wrong form or place: right numbers in the wrong template, a flat table where a bridge was required, content delivered inside the wrong section. The work exists; its presentation defeats the requirement. It is distinct from Delivery mechanics failure, which is about files and naming rather than analytical form. Tagged 1031 times across both analyzers. | |||||||
Reconciliation and tie-out failureOutputs that should reconcile with each other do not tie out. | 13.7% | 16.8% | 16.5% | 2.9% | 10.2% | 23.6% | 12.0% |
Reconciliation and tie-out failure. Outputs that must agree with each other do not: the summary tab disagrees with the detail, the memo quotes a number the model does not produce, totals differ between exhibits. The failure is tagged where the disagreement is delivered, regardless of which side of the tie is the correct one. Tagged 717 times across both analyzers. | |||||||
Copied instead of derivedCopied a number instead of deriving it, with no explicit verification. | 11.8% | 5.4% | 14.7% | 16.1% | 12.5% | 6.0% | 17.2% |
Copied instead of derived. The run copies a headline number from a source instead of deriving it from the underlying data, and never verifies the copy. Copying can be fine when the source is authoritative; it is tagged when the task requires the derivation, when the copied figure is wrong or unreconciled, or when the number is presented as if computed. The telltale is a pasted total that does not equal the sum of its own components. Tagged 619 times across both analyzers. | |||||||
Stale source anchoringAnchored 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% |
Stale source anchoring. The run anchors a number or fact on an outdated source when the data room contains a fresher version, or when the current value could have been computed from primary data. The typical shape is an old board deck or draft model feeding a figure that a later document supersedes. The analyzers tag it when the delivered value traces to the stale source and the fresher one was reachable within the task. It differs from Missed superseding correction, where the newer information was actively pushed into the task as a correction. Tagged 417 times across both analyzers. | |||||||
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 expected block (insight). Analysis a competent analyst would include without being asked is missing: the obvious bridge, the materiality comment, the sanity check the situation begs for. The analyzers tag it conservatively, only where the omission plausibly changes the reader's conclusion. It is the judgment-call sibling of the explicit omission type. Tagged 378 times across both analyzers. | |||||||
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% |
Omitted required block (explicit). A block the instructions explicitly demanded is absent from the deliverable: a named schedule, section, tab, reconciliation or exhibit. The bar is literal: if the instructions name it and it is not there, this is the failure. Contrast with the insight variant, where nothing named the block but competence expected it. Tagged 336 times across both analyzers. | |||||||
Formula disciplineFormula discipline errors: wrong ranges, broken references, hardcoded values. | 4.9% | 1.0% | 10.0% | 0.0% | 11.4% | 0.3% | 5.6% |
Formula discipline. Spreadsheet mechanics fail: ranges that miss rows, references pointing at the wrong cells, hardcoded constants where formulas belong, links broken by restructuring. The analytical intent may be right while the implementation in the artifact is wrong. The analyzers tag it on the artifact evidence itself, not on what the agent claimed to be doing. Tagged 255 times across both analyzers. | |||||||
Missed superseding correctionMissed a correction issued mid task that superseded earlier information. | 4.8% | 6.8% | 2.0% | 7.5% | 5.3% | 5.3% | 1.8% |
Missed superseding correction. A correction issued mid task, in an email, a revised file, or an updated instruction, supersedes earlier information, and the run keeps using the pre-correction value. It is tagged when the corrected value was delivered through a channel the agent read or should have read. The distinguishing feature versus Stale source anchoring is that the fix arrived during the task rather than merely sitting in the data room. Tagged 251 times across both analyzers. | |||||||
Unit and format errorsUnit, currency, magnitude or format errors in figures. | 1.5% | 0.2% | 1.4% | 0.0% | 4.2% | 2.6% | 1.2% |
Unit and format errors. Units, currency, magnitude or formatting corrupt a figure: thousands versus millions, mixed currencies without conversion, percentages treated as ratios, periods mislabeled. These errors are usually introduced at the boundaries where a value moves between documents. It is tagged even when the underlying computation was correct, because the delivered number misleads the reader. Tagged 79 times across both analyzers. | |||||||
| Scenario architecture misuse | 0.1% | 0.0% | 0.6% | 0.0% | 0.0% | 0.0% | 0.0% |
| Overall | Anthropic | DeepSeek | Meta | OpenAI | xAI | ||
|---|---|---|---|---|---|---|---|
Wrong analytical methodA wrong analytical method substituted for the required one. | 21.5% | 28.4% | 19.0% | 19.3% | 19.2% | 19.3% | 19.8% |
Wrong analytical method. A different analytical method is substituted for the required one: a shortcut average where a weighted build was demanded, a top-down estimate where a bottom-up derivation was specified, the wrong valuation approach entirely. It is tagged when the method itself deviates, not when a correct method is merely executed badly. Tagged 543 times by Opus 5.5. | |||||||
Wrong presentation of correct workCorrect analysis presented in the wrong form or place. | 14.2% | 16.1% | 9.8% | 14.6% | 8.6% | 23.3% | 14.5% |
Wrong presentation of correct work. The analysis is substantively correct but presented in the wrong form or place: right numbers in the wrong template, a flat table where a bridge was required, content delivered inside the wrong section. The work exists; its presentation defeats the requirement. It is distinct from Delivery mechanics failure, which is about files and naming rather than analytical form. Tagged 359 times by Opus 5.5. | |||||||
Copied instead of derivedCopied a number instead of deriving it, with no explicit verification. | 13.8% | 8.3% | 16.6% | 16.5% | 11.1% | 9.6% | 23.8% |
Copied instead of derived. The run copies a headline number from a source instead of deriving it from the underlying data, and never verifies the copy. Copying can be fine when the source is authoritative; it is tagged when the task requires the derivation, when the copied figure is wrong or unreconciled, or when the number is presented as if computed. The telltale is a pasted total that does not equal the sum of its own components. Tagged 347 times by Opus 5.5. | |||||||
Reconciliation and tie-out failureOutputs that should reconcile with each other do not tie out. | 11.3% | 15.2% | 13.0% | 2.5% | 9.6% | 14.9% | 9.9% |
Reconciliation and tie-out failure. Outputs that must agree with each other do not: the summary tab disagrees with the detail, the memo quotes a number the model does not produce, totals differ between exhibits. The failure is tagged where the disagreement is delivered, regardless of which side of the tie is the correct one. Tagged 285 times by Opus 5.5. | |||||||
Missed superseding correctionMissed a correction issued mid task that superseded earlier information. | 8.8% | 12.0% | 2.6% | 14.6% | 9.8% | 9.3% | 3.5% |
Missed superseding correction. A correction issued mid task, in an email, a revised file, or an updated instruction, supersedes earlier information, and the run keeps using the pre-correction value. It is tagged when the corrected value was delivered through a channel the agent read or should have read. The distinguishing feature versus Stale source anchoring is that the fix arrived during the task rather than merely sitting in the data room. Tagged 221 times by Opus 5.5. | |||||||
Omitted expected block (insight)Omitted analysis a competent analyst would include without being told. | 8.4% | 10.0% | 10.4% | 6.3% | 7.8% | 7.1% | 6.4% |
Omitted expected block (insight). Analysis a competent analyst would include without being asked is missing: the obvious bridge, the materiality comment, the sanity check the situation begs for. The analyzers tag it conservatively, only where the omission plausibly changes the reader's conclusion. It is the judgment-call sibling of the explicit omission type. Tagged 211 times by Opus 5.5. | |||||||
Stale source anchoringAnchored on an outdated source figure when a fresher or computable one was available. | 8.0% | 5.7% | 6.6% | 16.0% | 6.3% | 5.9% | 9.3% |
Stale source anchoring. The run anchors a number or fact on an outdated source when the data room contains a fresher version, or when the current value could have been computed from primary data. The typical shape is an old board deck or draft model feeding a figure that a later document supersedes. The analyzers tag it when the delivered value traces to the stale source and the fresher one was reachable within the task. It differs from Missed superseding correction, where the newer information was actively pushed into the task as a correction. Tagged 201 times by Opus 5.5. | |||||||
Omitted required block (explicit)Omitted a block the instructions explicitly required. | 7.1% | 3.0% | 8.1% | 10.2% | 9.6% | 6.2% | 7.8% |
Omitted required block (explicit). A block the instructions explicitly demanded is absent from the deliverable: a named schedule, section, tab, reconciliation or exhibit. The bar is literal: if the instructions name it and it is not there, this is the failure. Contrast with the insight variant, where nothing named the block but competence expected it. Tagged 179 times by Opus 5.5. | |||||||
Formula disciplineFormula discipline errors: wrong ranges, broken references, hardcoded values. | 4.9% | 1.0% | 11.7% | 0.0% | 12.1% | 0.6% | 3.8% |
Formula discipline. Spreadsheet mechanics fail: ranges that miss rows, references pointing at the wrong cells, hardcoded constants where formulas belong, links broken by restructuring. The analytical intent may be right while the implementation in the artifact is wrong. The analyzers tag it on the artifact evidence itself, not on what the agent claimed to be doing. Tagged 124 times by Opus 5.5. | |||||||
Unit and format errorsUnit, currency, magnitude or format errors in figures. | 1.8% | 0.3% | 1.1% | 0.0% | 5.8% | 3.7% | 1.2% |
Unit and format errors. Units, currency, magnitude or formatting corrupt a figure: thousands versus millions, mixed currencies without conversion, percentages treated as ratios, periods mislabeled. These errors are usually introduced at the boundaries where a value moves between documents. It is tagged even when the underlying computation was correct, because the delivered number misleads the reader. Tagged 46 times by Opus 5.5. | |||||||
| Scenario architecture misuse | 0.2% | 0.0% | 1.1% | 0.0% | 0.0% | 0.0% | 0.0% |
| Overall | Anthropic | DeepSeek | Meta | OpenAI | xAI | ||
|---|---|---|---|---|---|---|---|
Wrong presentation of correct workCorrect analysis presented in the wrong form or place. | 24.6% | 38.8% | 10.7% | 22.9% | 19.9% | 43.8% | 16.3% |
Wrong presentation of correct work. The analysis is substantively correct but presented in the wrong form or place: right numbers in the wrong template, a flat table where a bridge was required, content delivered inside the wrong section. The work exists; its presentation defeats the requirement. It is distinct from Delivery mechanics failure, which is about files and naming rather than analytical form. Tagged 672 times by GPT-6 Astra. | |||||||
Wrong analytical methodA wrong analytical method substituted for the required one. | 22.7% | 24.3% | 22.5% | 37.5% | 16.4% | 4.9% | 25.3% |
Wrong analytical method. A different analytical method is substituted for the required one: a shortcut average where a weighted build was demanded, a top-down estimate where a bottom-up derivation was specified, the wrong valuation approach entirely. It is tagged when the method itself deviates, not when a correct method is merely executed badly. Tagged 618 times by GPT-6 Astra. | |||||||
Reconciliation and tie-out failureOutputs that should reconcile with each other do not tie out. | 15.8% | 18.6% | 20.2% | 3.4% | 10.8% | 33.6% | 13.4% |
Reconciliation and tie-out failure. Outputs that must agree with each other do not: the summary tab disagrees with the detail, the memo quotes a number the model does not produce, totals differ between exhibits. The failure is tagged where the disagreement is delivered, regardless of which side of the tie is the correct one. Tagged 432 times by GPT-6 Astra. | |||||||
Copied instead of derivedCopied a number instead of deriving it, with no explicit verification. | 10.0% | 2.2% | 12.7% | 15.6% | 13.7% | 1.8% | 13.0% |
Copied instead of derived. The run copies a headline number from a source instead of deriving it from the underlying data, and never verifies the copy. Copying can be fine when the source is authoritative; it is tagged when the task requires the derivation, when the copied figure is wrong or unreconciled, or when the number is presented as if computed. The telltale is a pasted total that does not equal the sum of its own components. Tagged 272 times by GPT-6 Astra. | |||||||
Stale source anchoringAnchored on an outdated source figure when a fresher or computable one was available. | 7.9% | 8.0% | 6.6% | 12.2% | 7.2% | 6.0% | 7.4% |
Stale source anchoring. The run anchors a number or fact on an outdated source when the data room contains a fresher version, or when the current value could have been computed from primary data. The typical shape is an old board deck or draft model feeding a figure that a later document supersedes. The analyzers tag it when the delivered value traces to the stale source and the fresher one was reachable within the task. It differs from Missed superseding correction, where the newer information was actively pushed into the task as a correction. Tagged 216 times by GPT-6 Astra. | |||||||
Omitted expected block (insight)Omitted analysis a competent analyst would include without being told. | 6.1% | 4.1% | 10.7% | 6.8% | 7.5% | 4.2% | 4.0% |
Omitted expected block (insight). Analysis a competent analyst would include without being asked is missing: the obvious bridge, the materiality comment, the sanity check the situation begs for. The analyzers tag it conservatively, only where the omission plausibly changes the reader's conclusion. It is the judgment-call sibling of the explicit omission type. Tagged 167 times by GPT-6 Astra. | |||||||
Omitted required block (explicit)Omitted a block the instructions explicitly required. | 5.8% | 1.7% | 5.2% | 0.8% | 9.3% | 3.5% | 11.9% |
Omitted required block (explicit). A block the instructions explicitly demanded is absent from the deliverable: a named schedule, section, tab, reconciliation or exhibit. The bar is literal: if the instructions name it and it is not there, this is the failure. Contrast with the insight variant, where nothing named the block but competence expected it. Tagged 157 times by GPT-6 Astra. | |||||||
Formula disciplineFormula discipline errors: wrong ranges, broken references, hardcoded values. | 4.8% | 1.0% | 8.2% | 0.0% | 10.8% | 0.0% | 6.7% |
Formula discipline. Spreadsheet mechanics fail: ranges that miss rows, references pointing at the wrong cells, hardcoded constants where formulas belong, links broken by restructuring. The analytical intent may be right while the implementation in the artifact is wrong. The analyzers tag it on the artifact evidence itself, not on what the agent claimed to be doing. Tagged 131 times by GPT-6 Astra. | |||||||
Unit and format errorsUnit, currency, magnitude or format errors in figures. | 1.2% | 0.0% | 1.8% | 0.0% | 2.9% | 1.4% | 1.3% |
Unit and format errors. Units, currency, magnitude or formatting corrupt a figure: thousands versus millions, mixed currencies without conversion, percentages treated as ratios, periods mislabeled. These errors are usually introduced at the boundaries where a value moves between documents. It is tagged even when the underlying computation was correct, because the delivered number misleads the reader. Tagged 33 times by GPT-6 Astra. | |||||||
Missed superseding correctionMissed a correction issued mid task that superseded earlier information. | 1.1% | 1.2% | 1.4% | 0.8% | 1.7% | 0.7% | 0.7% |
Missed superseding correction. A correction issued mid task, in an email, a revised file, or an updated instruction, supersedes earlier information, and the run keeps using the pre-correction value. It is tagged when the corrected value was delivered through a channel the agent read or should have read. The distinguishing feature versus Stale source anchoring is that the fix arrived during the task rather than merely sitting in the data room. Tagged 30 times by GPT-6 Astra. | |||||||
Long-horizon capability failures: where each provider's failure mass goes
| Overall | Anthropic | DeepSeek | Meta | OpenAI | xAI | ||
|---|---|---|---|---|---|---|---|
Premature discovery closureClosed discovery too early and missed available material. | 22.1% | 30.6% | 20.1% | 28.5% | 16.4% | 44.6% | 7.3% |
Premature discovery closure. Discovery closes too early: the run stops surveying the data room after the first plausible sources and misses material that later mattered. It is tagged when reachable, relevant material was never opened and that absence shaped the outcome. The failure lives in the coverage decision, not in the reasoning about what was found. Tagged 589 times across both analyzers. | |||||||
Delivery mechanics failureWork was done but delivered wrongly: wrong file, place or naming. | 14.9% | 6.2% | 3.8% | 3.8% | 20.0% | 2.2% | 35.7% |
Delivery mechanics failure. The work exists but the handoff fails: saved to the wrong location, wrong filename, wrong recipient, a required attachment absent, or the final send step never executed. The analysis can be flawless and the task still fails at delivery. It is the mechanics sibling of Wrong presentation of correct work. Tagged 396 times across both analyzers. | |||||||
False verificationClaimed to verify, but the check was shallow, circular or fake. | 14.7% | 19.3% | 28.1% | 10.2% | 12.5% | 5.6% | 11.8% |
False verification. The run claims verification that did not really happen: it asserts numbers were checked while the trace shows no check, re-reads its own output instead of the source, or runs a trivially weak comparison and declares success. This is worse than no verification, because it manufactures confidence the evidence does not support. Tagged 392 times across both analyzers. | |||||||
Instruction loss over horizonInstructions 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% |
Instruction loss over horizon. An instruction given early in the task no longer shapes behavior by the time it matters, often hundreds of steps later. The constraint appears once in context, is never argued with, and is simply not there in the final behavior. It is tagged when the delivered work contradicts a standing instruction that was never rescinded. Tagged 387 times across both analyzers. | |||||||
Affordance gap not escalatedBlocked 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% |
Affordance gap not escalated. The run hits a missing affordance, a tool that will not open or data it cannot reach, and neither escalates nor rebalances its remaining budget toward what is still achievable. Compute keeps burning against the wall while untouched parts of the task starve. The tag is for the failure to adapt, not for the blockage itself. Tagged 213 times across both analyzers. | |||||||
Verbatim fidelity missContent that had to be carried verbatim was paraphrased or altered. | 7.4% | 15.5% | 6.9% | 1.5% | 2.8% | 15.2% | 4.5% |
Verbatim fidelity miss. Content that had to be carried exactly, names, quoted terms, legal language, precise labels, gets paraphrased, reformatted or normalized somewhere along the way. Every hop between artifacts is a chance to drift. It is tagged on any delivered text that was required to match its source verbatim and does not. Tagged 198 times across both analyzers. | |||||||
Premature terminationStopped early with the final output incomplete. | 5.8% | 0.0% | 0.0% | 23.3% | 7.7% | 0.0% | 4.9% |
Premature termination. The run ends while the final output is visibly incomplete: sections empty, placeholders still in place, completion declared early or the run simply stopping. The signature is an ending that arrives too soon, as opposed to Silent scope drop, where one branch dies while the run goes on. Tagged 155 times across both analyzers. | |||||||
Detrimental loopingRepeated a failing approach without changing strategy. | 4.2% | 0.0% | 0.0% | 0.0% | 6.0% | 0.0% | 13.0% |
Detrimental looping. The run repeats a failing approach without changing strategy: the same edit reapplied, the same failing call retried, the same file reread, well past the point where repetition could plausibly work. It is tagged as detrimental when the loop consumes budget the rest of the task needed. Tagged 112 times across both analyzers. | |||||||
Provided template ignoredA provided template or example was ignored. | 3.5% | 3.8% | 1.7% | 0.3% | 6.0% | 6.1% | 2.1% |
Provided template ignored. A provided template, example or format specification is ignored: the run builds its own structure instead of filling the given one. It is tagged whenever a supplied scaffold exists and the deliverable does not inherit it, regardless of how reasonable the invented structure looks. Tagged 92 times across both analyzers. | |||||||
Context loss over horizonEarlier context is forgotten or contradicted later in the run. | 2.3% | 2.8% | 3.5% | 7.0% | 0.0% | 1.3% | 1.2% |
Context loss over horizon. Information the run itself established earlier is later forgotten or contradicted: a value computed at step 40 is recomputed differently at step 200, a fact confirmed early is denied late. It is distinct from Instruction loss in that what decays is the run's own discovered state rather than the user's directive. Tagged 61 times across both analyzers. | |||||||
Silent scope dropPart 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% |
Silent scope drop. A part of the task is silently dropped mid run: a sub-deliverable stops being worked on and is never mentioned again, with no acknowledgment and no de-scoping. It differs from Premature termination in that the run continues and completes other work; what is lost is a branch, not the ending. Tagged 30 times across both analyzers. | |||||||
Plan driftLater work drifts away from the stated plan without re-planning. | 0.9% | 1.0% | 0.7% | 0.0% | 1.8% | 0.0% | 1.0% |
Plan drift. The run states a plan and then departs from it without ever re-planning: later work quietly contradicts the declared sequence or approach, and the plan becomes dead text. It is tagged on the mismatch between stated intent and actual behavior when no revision was ever announced. Tagged 25 times across both analyzers. | |||||||
No self verificationFinished without checking its own work against the available evidence. | 0.3% | 0.0% | 0.0% | 0.6% | 0.5% | 0.0% | 0.5% |
No self verification. The run finishes without once checking its own work against the available evidence: no re-opening the artifact, no recomputation, no comparison back to the source. It is tagged for the absence of any genuine verification pass in a task where one was feasible and material. Tagged 8 times across both analyzers. | |||||||
Fabricated state or successFabricated state, data or success that never happened. | 0.2% | 0.0% | 0.3% | 0.9% | 0.0% | 0.0% | 0.3% |
Fabricated state or success. The run fabricates state, data or success: it cites files it never opened, reports steps that did not happen, invents figures, or declares checks passed that never ran. It is tagged on any material claim in the trace or the deliverable that the recorded evidence contradicts. Tagged 6 times across both analyzers. | |||||||
| Tool format friction | 0.1% | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0.3% |
| Overall | Anthropic | DeepSeek | Meta | OpenAI | xAI | ||
|---|---|---|---|---|---|---|---|
Instruction loss over horizonInstructions given early in the task are lost by the time they matter. | 20.0% | 27.6% | 22.3% | 25.1% | 15.0% | 11.7% | 16.1% |
Instruction loss over horizon. An instruction given early in the task no longer shapes behavior by the time it matters, often hundreds of steps later. The constraint appears once in context, is never argued with, and is simply not there in the final behavior. It is tagged when the delivered work contradicts a standing instruction that was never rescinded. Tagged 282 times by Opus 5.5. | |||||||
Premature discovery closureClosed discovery too early and missed available material. | 19.2% | 30.0% | 16.2% | 17.2% | 16.0% | 36.6% | 5.5% |
Premature discovery closure. Discovery closes too early: the run stops surveying the data room after the first plausible sources and misses material that later mattered. It is tagged when reachable, relevant material was never opened and that absence shaped the outcome. The failure lives in the coverage decision, not in the reasoning about what was found. Tagged 271 times by Opus 5.5. | |||||||
False verificationClaimed to verify, but the check was shallow, circular or fake. | 11.6% | 21.5% | 20.3% | 8.4% | 4.9% | 4.1% | 10.6% |
False verification. The run claims verification that did not really happen: it asserts numbers were checked while the trace shows no check, re-reads its own output instead of the source, or runs a trivially weak comparison and declares success. This is worse than no verification, because it manufactures confidence the evidence does not support. Tagged 164 times by Opus 5.5. | |||||||
Affordance gap not escalatedBlocked by a missing affordance and did not escalate or rebalance effort to unexplored areas. | 10.5% | 2.7% | 20.3% | 3.8% | 12.4% | 24.8% | 9.9% |
Affordance gap not escalated. The run hits a missing affordance, a tool that will not open or data it cannot reach, and neither escalates nor rebalances its remaining budget toward what is still achievable. Compute keeps burning against the wall while untouched parts of the task starve. The tag is for the failure to adapt, not for the blockage itself. Tagged 148 times by Opus 5.5. | |||||||
Premature terminationStopped early with the final output incomplete. | 10.2% | 0.0% | 0.0% | 33.5% | 12.1% | 0.0% | 9.9% |
Premature termination. The run ends while the final output is visibly incomplete: sections empty, placeholders still in place, completion declared early or the run simply stopping. The signature is an ending that arrives too soon, as opposed to Silent scope drop, where one branch dies while the run goes on. Tagged 144 times by Opus 5.5. | |||||||
Delivery mechanics failureWork was done but delivered wrongly: wrong file, place or naming. | 9.8% | 1.7% | 1.4% | 1.7% | 18.0% | 3.4% | 24.5% |
Delivery mechanics failure. The work exists but the handoff fails: saved to the wrong location, wrong filename, wrong recipient, a required attachment absent, or the final send step never executed. The analysis can be flawless and the task still fails at delivery. It is the mechanics sibling of Wrong presentation of correct work. Tagged 138 times by Opus 5.5. | |||||||
Provided template ignoredA provided template or example was ignored. | 4.5% | 5.1% | 3.4% | 0.4% | 6.2% | 9.7% | 3.6% |
Provided template ignored. A provided template, example or format specification is ignored: the run builds its own structure instead of filling the given one. It is tagged whenever a supplied scaffold exists and the deliverable does not inherit it, regardless of how reasonable the invented structure looks. Tagged 64 times by Opus 5.5. | |||||||
Verbatim fidelity missContent that had to be carried verbatim was paraphrased or altered. | 4.3% | 5.7% | 7.4% | 0.4% | 3.6% | 7.6% | 3.6% |
Verbatim fidelity miss. Content that had to be carried exactly, names, quoted terms, legal language, precise labels, gets paraphrased, reformatted or normalized somewhere along the way. Every hop between artifacts is a chance to drift. It is tagged on any delivered text that was required to match its source verbatim and does not. Tagged 61 times by Opus 5.5. | |||||||
Detrimental loopingRepeated a failing approach without changing strategy. | 4.0% | 0.0% | 0.0% | 0.0% | 9.2% | 0.0% | 10.2% |
Detrimental looping. The run repeats a failing approach without changing strategy: the same edit reapplied, the same failing call retried, the same file reread, well past the point where repetition could plausibly work. It is tagged as detrimental when the loop consumes budget the rest of the task needed. Tagged 56 times by Opus 5.5. | |||||||
Context loss over horizonEarlier context is forgotten or contradicted later in the run. | 3.9% | 5.4% | 6.8% | 8.4% | 0.0% | 2.1% | 2.2% |
Context loss over horizon. Information the run itself established earlier is later forgotten or contradicted: a value computed at step 40 is recomputed differently at step 200, a fact confirmed early is denied late. It is distinct from Instruction loss in that what decays is the run's own discovered state rather than the user's directive. Tagged 55 times by Opus 5.5. | |||||||
No self verificationFinished without checking its own work against the available evidence. | 0.6% | 0.0% | 0.0% | 0.8% | 1.0% | 0.0% | 1.1% |
No self verification. The run finishes without once checking its own work against the available evidence: no re-opening the artifact, no recomputation, no comparison back to the source. It is tagged for the absence of any genuine verification pass in a task where one was feasible and material. Tagged 8 times by Opus 5.5. | |||||||
Silent scope dropPart of the task silently dropped mid run, never delivered or mentioned. | 0.5% | 0.0% | 0.0% | 0.0% | 1.6% | 0.0% | 0.7% |
Silent scope drop. A part of the task is silently dropped mid run: a sub-deliverable stops being worked on and is never mentioned again, with no acknowledgment and no de-scoping. It differs from Premature termination in that the run continues and completes other work; what is lost is a branch, not the ending. Tagged 7 times by Opus 5.5. | |||||||
Plan driftLater work drifts away from the stated plan without re-planning. | 0.4% | 0.3% | 1.4% | 0.0% | 0.0% | 0.0% | 1.1% |
Plan drift. The run states a plan and then departs from it without ever re-planning: later work quietly contradicts the declared sequence or approach, and the plan becomes dead text. It is tagged on the mismatch between stated intent and actual behavior when no revision was ever announced. Tagged 6 times by Opus 5.5. | |||||||
Fabricated state or successFabricated state, data or success that never happened. | 0.3% | 0.0% | 0.7% | 0.4% | 0.0% | 0.0% | 0.7% |
Fabricated state or success. The run fabricates state, data or success: it cites files it never opened, reports steps that did not happen, invents figures, or declares checks passed that never ran. It is tagged on any material claim in the trace or the deliverable that the recorded evidence contradicts. Tagged 4 times by Opus 5.5. | |||||||
| Tool format friction | 0.1% | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0.4% |
| Overall | Anthropic | DeepSeek | Meta | OpenAI | xAI | ||
|---|---|---|---|---|---|---|---|
Premature discovery closureClosed discovery too early and missed available material. | 25.3% | 31.1% | 24.3% | 54.3% | 16.9% | 58.1% | 8.9% |
Premature discovery closure. Discovery closes too early: the run stops surveying the data room after the first plausible sources and misses material that later mattered. It is tagged when reachable, relevant material was never opened and that absence shaped the outcome. The failure lives in the coverage decision, not in the reasoning about what was found. Tagged 318 times by GPT-6 Astra. | |||||||
Delivery mechanics failureWork was done but delivered wrongly: wrong file, place or naming. | 20.5% | 10.5% | 6.4% | 8.6% | 22.1% | 0.0% | 45.9% |
Delivery mechanics failure. The work exists but the handoff fails: saved to the wrong location, wrong filename, wrong recipient, a required attachment absent, or the final send step never executed. The analysis can be flawless and the task still fails at delivery. It is the mechanics sibling of Wrong presentation of correct work. Tagged 258 times by GPT-6 Astra. | |||||||
False verificationClaimed to verify, but the check was shallow, circular or fake. | 18.1% | 17.1% | 36.4% | 14.3% | 20.1% | 8.1% | 12.9% |
False verification. The run claims verification that did not really happen: it asserts numbers were checked while the trace shows no check, re-reads its own output instead of the source, or runs a trivially weak comparison and declares success. This is worse than no verification, because it manufactures confidence the evidence does not support. Tagged 228 times by GPT-6 Astra. | |||||||
Verbatim fidelity missContent that had to be carried verbatim was paraphrased or altered. | 10.9% | 24.8% | 6.4% | 3.8% | 1.9% | 27.9% | 5.3% |
Verbatim fidelity miss. Content that had to be carried exactly, names, quoted terms, legal language, precise labels, gets paraphrased, reformatted or normalized somewhere along the way. Every hop between artifacts is a chance to drift. It is tagged on any delivered text that was required to match its source verbatim and does not. Tagged 137 times by GPT-6 Astra. | |||||||
Instruction loss over horizonInstructions given early in the task are lost by the time they matter. | 8.4% | 7.6% | 18.6% | 12.4% | 6.5% | 5.8% | 5.6% |
Instruction loss over horizon. An instruction given early in the task no longer shapes behavior by the time it matters, often hundreds of steps later. The constraint appears once in context, is never argued with, and is simply not there in the final behavior. It is tagged when the delivered work contradicts a standing instruction that was never rescinded. Tagged 105 times by GPT-6 Astra. | |||||||
Affordance gap not escalatedBlocked by a missing affordance and did not escalate or rebalance effort to unexplored areas. | 5.2% | 4.4% | 6.4% | 0.0% | 11.7% | 0.0% | 2.0% |
Affordance gap not escalated. The run hits a missing affordance, a tool that will not open or data it cannot reach, and neither escalates nor rebalances its remaining budget toward what is still achievable. Compute keeps burning against the wall while untouched parts of the task starve. The tag is for the failure to adapt, not for the blockage itself. Tagged 65 times by GPT-6 Astra. | |||||||
Detrimental loopingRepeated a failing approach without changing strategy. | 4.5% | 0.0% | 0.0% | 0.0% | 2.9% | 0.0% | 15.5% |
Detrimental looping. The run repeats a failing approach without changing strategy: the same edit reapplied, the same failing call retried, the same file reread, well past the point where repetition could plausibly work. It is tagged as detrimental when the loop consumes budget the rest of the task needed. Tagged 56 times by GPT-6 Astra. | |||||||
Provided template ignoredA provided template or example was ignored. | 2.2% | 2.5% | 0.0% | 0.0% | 5.8% | 0.0% | 0.7% |
Provided template ignored. A provided template, example or format specification is ignored: the run builds its own structure instead of filling the given one. It is tagged whenever a supplied scaffold exists and the deliverable does not inherit it, regardless of how reasonable the invented structure looks. Tagged 28 times by GPT-6 Astra. | |||||||
Silent scope dropPart of the task silently dropped mid run, never delivered or mentioned. | 1.8% | 0.0% | 1.4% | 1.0% | 5.2% | 0.0% | 1.3% |
Silent scope drop. A part of the task is silently dropped mid run: a sub-deliverable stops being worked on and is never mentioned again, with no acknowledgment and no de-scoping. It differs from Premature termination in that the run continues and completes other work; what is lost is a branch, not the ending. Tagged 23 times by GPT-6 Astra. | |||||||
Plan driftLater work drifts away from the stated plan without re-planning. | 1.5% | 1.6% | 0.0% | 0.0% | 3.6% | 0.0% | 1.0% |
Plan drift. The run states a plan and then departs from it without ever re-planning: later work quietly contradicts the declared sequence or approach, and the plan becomes dead text. It is tagged on the mismatch between stated intent and actual behavior when no revision was ever announced. Tagged 19 times by GPT-6 Astra. | |||||||
Premature terminationStopped early with the final output incomplete. | 0.9% | 0.0% | 0.0% | 0.0% | 3.2% | 0.0% | 0.3% |
Premature termination. The run ends while the final output is visibly incomplete: sections empty, placeholders still in place, completion declared early or the run simply stopping. The signature is an ending that arrives too soon, as opposed to Silent scope drop, where one branch dies while the run goes on. Tagged 11 times by GPT-6 Astra. | |||||||
Context loss over horizonEarlier context is forgotten or contradicted later in the run. | 0.5% | 0.3% | 0.0% | 3.8% | 0.0% | 0.0% | 0.3% |
Context loss over horizon. Information the run itself established earlier is later forgotten or contradicted: a value computed at step 40 is recomputed differently at step 200, a fact confirmed early is denied late. It is distinct from Instruction loss in that what decays is the run's own discovered state rather than the user's directive. Tagged 6 times by GPT-6 Astra. | |||||||
Fabricated state or successFabricated state, data or success that never happened. | 0.2% | 0.0% | 0.0% | 1.9% | 0.0% | 0.0% | 0.0% |
Fabricated state or success. The run fabricates state, data or success: it cites files it never opened, reports steps that did not happen, invents figures, or declares checks passed that never ran. It is tagged on any material claim in the trace or the deliverable that the recorded evidence contradicts. Tagged 2 times by GPT-6 Astra. | |||||||
| Tool format friction | 0.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 | Opus 5.5 | GPT-6 Astra | gap | misalignment |
|---|---|---|---|---|
| Relevant | 72.0% | 90.7% | -18.7 pp | 21.6% |
| Unclear | 19.2% | 6.7% | +12.5 pp | 88.8% |
| Irrelevant | 8.9% | 2.7% | +6.2 pp | 71.2% |
| Looping (any) | 12.3% | 5.7% | +6.7 pp | 71.8% |
| Detrimental looping | 6.0% | 2.9% | +3.1 pp | 68.4% |
| Suboptimal | 13.4% | 17.2% | -3.8 pp | 81.9% |
| trajectory analyzer | own-lab steps | own relevant share | other analyzer's read | self bias |
|---|---|---|---|---|
| Opus 5.5 | 1944 | 87.6% | 99.0% | -11.5 pp |
| GPT-6 Astra | 1118 | 96.7% | 65.8% | +30.9 pp |
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.