Knowledge note
τ²-Bench: Mechanism and Design
How τ²-Bench evaluates conversational AI agents in a dual-control environment, covering its Dec-POMDP formalism, domain construction, task generation, and evaluation methodology.
τ²-Bench: Mechanism and Design
τ²-Bench (Barres et al., 2025) is a benchmark for evaluating conversational AI agents in a dual-control environment — one where both the agent and the simulated user can take tool-based actions to modify a shared world state. It extends the earlier τ-bench by giving the user meaningful agency rather than limiting them to a passive information provider.
Core Problem It Addresses
Existing benchmarks (τ-bench, ToolSandbox, FlowBench) are single-control: only the AI agent can call tools; the user only speaks. Real-world customer support is different — a user must actively perform steps (toggle airplane mode, reseat a SIM card, check a status bar) guided by the agent. τ²-Bench models this asymmetric collaboration.
Formal Model: Dec-POMDP
Dual-control interactions are formalised as a Decentralised Partially Observable Markov Decision Process (Dec-POMDP), defined by a tuple $(S, {A_i}, {O_i}, T, R, \mathcal{U}, M)$:
| Component | Meaning |
|---|---|
| $S$ | Global state = world databases ⊗ interaction history |
| $A_i$ | Action space for player $i$ — either a tool call or a natural-language message |
| $O_i$ | Observations for player $i$ — tool returns or the other player’s message |
| $T$ | Transition function: $(S, A) \to (S’, O)$ |
| $R$ | Reward $R: S \to [0,1]$ — binary task success verified against assertion functions |
| $\mathcal{U}$ | Instruction space — scenario instructions for the user; domain policy for the agent |
| $M$ | Message space — all possible natural-language exchanges |
Only one player acts per turn. The global state updates after every tool call; messages update only the history component.
Turn-by-Turn Interaction Loop
sequenceDiagram
participant A as AI Agent
participant E as Shared World State
participant U as User Simulator
Note over A,U: One player acts per turn
U->>A: "Hi, I have no signal."
A->>E: lookup_account(customer_id)
E-->>A: {account: active, line: enabled}
A->>U: "Can you check if airplane mode is on?"
U->>E: get_airplane_mode_status()
E-->>U: {airplane_mode: true}
U->>A: "Yes, it shows airplane mode is on."
A->>U: "Please toggle airplane mode off."
U->>E: toggle_airplane_mode()
E-->>U: {airplane_mode: false, signal: connected}
U->>A: "Done, I have signal now!"
Note over E: Assertion functions verify final state
Environment Architecture
graph TB
subgraph AgentSide["Agent Side"]
AP[Domain Policy] --> AG[AI Agent LLM]
AG --> AT["Agent Tools - 6 write, 7 read - CRM, billing, line mgmt"]
end
subgraph UserSide["User Side"]
SI[Scenario Instruction] --> US[User Simulator LLM]
US --> UT["User Tools - 15 write, 15 read - Phone: airplane mode, SIM, data toggle, speed test"]
end
subgraph SharedWorld["Shared World State"]
ADB[(Agent DB - Customers, Lines, Plans, Devices, Bills)]
UDB[(User DB - Phone status, Signal, SIM, Data, APN)]
HIS[Interaction History]
end
AT <--> ADB
UT <--> UDB
AG <-->|message| US
ADB -.->|partial obs| AG
UDB -.->|partial obs| US
The agent sees CRM-style data; the user sees phone-device-style data. Neither has full visibility of the other’s database, creating genuine partial observability.
Domain: Telecom
The primary new domain models a telecom technical-support interaction. Key statistics:
| retail | airline | telecom | |
|---|---|---|---|
| Agent tools | 7 write, 6 read | 6 write, 6 read | 6 write, 7 read |
| User tools | — | — | 15 write, 15 read |
| Tasks (sampled) | 115 | 50 | 114 (full: 2285) |
Three user intents form a difficulty hierarchy:
service_issue— no signal, SIM or airplane mode problems (mean 2.3 solution actions)mobile_data_issue— data unavailable or slow (mean 4.3 actions)mms_issue— picture/video messaging broken (mean 6.0 actions; requires service + data prerequisites)
Five-Stage Domain Construction
flowchart LR
S1["1. Agent DB and Tools - LLM generates PRD, schema, tool sigs, unit tests"]
S2["2. User DB and Tools - Mocked phone device, readable state, write tools"]
S3["3. Task Generation - Atomic subtasks: init, sol, assert - composite tasks"]
S4["4. Agent Policy - Troubleshooting doc and flowcharts for system prompt"]
S5["5. Manual Refinement - Joint review of tools, policy and subtasks"]
S1 --> S2 --> S3 --> S4 --> S5
Stage 1 — Agent database and tools. An LLM generates a Product Requirements Document (PRD) specifying the CRM schema (customers, lines, plans, devices, bills) and agent tool signatures. Implementations and unit tests are generated then manually refined until all tests pass.
Stage 2 — User database and tools. Similarly, a mocked phone device is defined with readable state (signal strength, SIM status, airplane mode, data toggle…) and write tools (toggle, reseat, reset APN…). Same generate-test-refine loop.
Stage 3 — Programmatic task creation. Each atomic subtask $t$ is a triple $({f^{\text{init}}}, {f^{\text{sol}}}, {f^{\text{assert}}})$:
- Initialization functions — set the broken initial state (e.g.,
set_airplane_mode(True)) - Solution functions — the ordered sequence of tool calls that fix it (e.g.,
toggle_airplane_mode()) - Assertion functions — conditions on the final world state that confirm success (e.g.,
assert_service_status("connected"))
Atomic subtasks are grouped into mutually-exclusive groups. A composite task picks at most one subtask per group and concatenates their function lists. Correctness is verified automatically: running init then solution must satisfy all assertions; running init alone must not. The telecom domain has 15 atomic subtask groups yielding 2285 valid composite tasks; 114 are sampled for a balanced distribution.
flowchart TD
subgraph GroupA["Subtask Group A - airplane mode"]
A1[airplane_on]
A2[airplane_off]
end
subgraph GroupB["Subtask Group B - SIM"]
B1[sim_removed]
B2[sim_locked]
end
subgraph GroupC["Subtask Group C - data toggle"]
C1[data_disabled]
end
A1 -->|pick one| CT
B2 -->|pick one| CT
C1 -->|pick one| CT
CT["Composite Task = concat inits + sols + asserts"]
CT --> V{"Auto-verify: init+sol satisfies asserts? init alone does not?"}
V -->|pass| OK[Valid task]
V -->|fail| DRP[Discard]
Stage 4 — Domain-specific agent policy. LLMs generate a detailed troubleshooting policy document (with optional workflow flowcharts) that the agent receives in its system prompt.
Stage 5 — Manual refinement. Tools, policy, and subtasks are jointly reviewed and fixed.
User Simulator Design
The user simulator is an LLM agent given:
- A scenario instruction (reason for call, known/unknown info, task-specific behaviour rules)
- The user tool set (identical to what a real user would operate)
Key constraints that improve reliability over τ-bench’s retail/airline simulators:
- User tools return human-readable outputs only — no raw JSON that could be misinterpreted as agent-side data.
- The simulator is instructed to call a tool only when the agent explicitly requests it, and to ask for clarification rather than guess.
- If the agent asks for multiple actions at once, the simulator states it can only do one at a time.
- Environment state constrains what tool calls can return, making fabrication harder.
Result: telecom user simulator error rate 16% (6% critical) vs. retail 40% (12%) and airline 47% (13%).
Task Evaluation Criteria
Tasks can specify any subset of five verification methods:
| Method | How it works |
|---|---|
| DB check | Compare final agent-side database values to expected values |
| Status assertion | Run predefined assertion functions on final world state $S_{\text{world}}$ |
| Natural language assertion | LLM-judge check on the conversation history |
| Communication info check | Verify specific facts were communicated by the agent |
| Action matching | Confirm every required solution function appears in the trajectory |
The telecom domain uses status assertions only.
Evaluation Metrics
The paper uses the pass^k metric from τ-bench: the fraction of $k$ independent runs on which all tasks succeed. This captures consistency, not just peak performance.
Ablation: Separating Reasoning from Communication
Three evaluation modes isolate different failure sources:
| Mode | Setup | Purpose |
|---|---|---|
| Default | Agent + user simulator; dual-control | Full benchmark |
| No-User | Agent controls all tools; gets a ticket describing the problem | Isolates pure reasoning capability |
| Oracle Plan | Agent given the full ground-truth tool sequence; must guide user to execute it | Isolates communication / coordination capability |
flowchart LR
subgraph Default ["Default (full benchmark)"]
DA[Agent] <-->|messages| DU[User Simulator]
DA --> DAT[Agent Tools]
DU --> DUT[User Tools]
DAT & DUT --> DSW[(Shared World)]
end
subgraph NoUser ["No-User (reasoning only)"]
NA[Agent] --> NAT["All Tools - agent and user"]
NAT --> NSW[(World)]
TKT[Ticket description] --> NA
end
subgraph Oracle ["Oracle Plan (communication only)"]
OA[Agent] <-->|messages| OU[User Simulator]
OU --> OUT[User Tools]
OUT --> OSW[(World)]
GT[Ground-truth plan] --> OA
end
Key finding: shifting from No-User to Default causes ~18–25% pass^1 drop, confirming that guiding an active user is the dominant bottleneck beyond reasoning.
Key Empirical Results
Pass^1 on the telecom domain (Default mode):
| Model | pass^1 |
|---|---|
| claude-3.7-sonnet | 49% |
| o4-mini | 42% |
| gpt-4.1 | 34% |
| gpt-4.1-mini | ~44% |
- Performance degrades sharply past 7 required actions in Default mode, approaching 0%.
- No-User mode outperforms Default for all task lengths, but the gap narrows for very long tasks.
- Harder issue types (
mms_issue) show near-zero pass^4 for most models, indicating low reliability. - Agent performs best with the Easy user persona, worst with None (no persona), which is often on par with or below Hard.
Persona System
Each telecom task is randomly assigned one of three user personas:
- None — no persona given to the simulator.
- Easy — office administrator; average technical skill; patient and communicative.
- Hard — 64-year-old retired librarian; limited technical knowledge; gets flustered easily; needs constant reassurance.
Where It Breaks
| Failure mode | When it happens | Impact |
|---|---|---|
| No expert-novice gap | Agent never needs to adapt explanations to user’s mental model | Real-world communication difficulty underestimated |
| Domain construction cost | Each new domain requires schema design, tool implementation, DB population, and user simulator authoring | Slower benchmark expansion than template-based approaches |
| Tool-augmented simulator not yet applied to retail/airline | Existing τ-bench domains | Simulator design validated on telecom only |
One Thing to Remember
τ²-Bench’s key contribution is formalizing conversational evaluation as a dual-control Dec-POMDP where the user is also a language model agent — this makes the benchmark a game between two LLMs, not a static test set.
Go Deeper
- Read: τ²-Bench paper
- Build on: τ-bench, τ-Voice: Full-Duplex Voice Benchmark
- Understand the context: DeepSWE: Long-Horizon Software Engineering Benchmark
- Reproduce: Check τ-bench repository