Laminar logo
All blog posts

Flow-1 in Action

Oct 15, 2026 · Laminar team

flow-1 is our new model fine-tuned for trace analysis.

Agent traces explain why an agent failed, but with hundreds of steps per run, you don't have time to read them all. Signals reads them for you, and flow-1 makes it cheap enough to run on every trace.

Here's how flow-1 compares to frontier models on three real benchmark tasks.

The Traces

For demonstration purposes, we used publicly released benchmark traces from the Terminal Bench 2 leaderboard, the τ²-bench leaderboard and Harbor's TheAgentCompany runs.

Here are the traces from each of these tasks:

  1. τ²-bench - airline support agent handling a request to downgrade a reservation to Basic Economy.
  2. TheAgentCompany - HR agent writing a job description from a hiring manager's requirements.
  3. Terminal Bench 2 - agent merging two git branches and solving an ARC-style grid puzzle.

A customer asks to remove a passenger, then to downgrade the whole reservation to Basic Economy. The agent refuses both, and the customer cancels the reservation instead. Score: 0.

Open full trace

The Issues

Our custom model flow-1 runs inside our Signals agent harness. Signals is an agent that automatically analyzes each of your traces to find issues.

We ran the same Signals agent with different models on each of the traces above.

τ²-benchTheAgentCompanyTerminal Bench 2AgentTraceTrace analysisagentsIssues

Here's a breakdown of the actual issues and the actual outputs from each of the different agents.

Actual issue

The customer asked to downgrade all three passengers from Business to Basic Economy. The policy says "all reservations, including basic economy, can change cabin without changing the flights", but the agent said the downgrade wasn't possible, so the customer cancelled the whole reservation instead.

Caught itflow-1

The agent called for user details using an identifier it had not obtained. “The agent must first obtain the user id from the user.”

  • The agent asked for the user ID llm.
  • It requested details for james_patel_9828 get_user_details. It then used those details to offer cancellation and downgrade options llm.

The agent offered options for a request the user did not make. The user asked to remove one passenger and receive a refund for her ticket.

  • The agent offered a downgrade to Economy as an alternative to keeping the reservation llm. The user was left with options that did not address removing a passenger llm.

The agent stated a cancellation reason that the user had not provided. “The agent must also obtain the reason for cancellation (change of plan, airline cancelled flight, or other reasons)”

  • The agent asked the user to select a reason llm.
  • It then cited Change of plan in the cancellation summary llm. The agent had no tool result or user input establishing that reason llm.

The agent told the user that a cabin change was not possible. “In other cases, all reservations, including basic economy, can change cabin without changing the flights.”

  • The agent stated that a Business or Economy reservation could not be changed to Basic Economy llm. The statement contradicted the policy and was unsupported by the flight-status results get_flight_status.
Caught itClaude Opus 5.5

The agent wrongly told the user they could not downgrade their Business reservation to Basic Economy, misreading a rule that only applies to reservations already in basic economy.

The user asked: "can you downgrade all passengers to Basic Economy instead?" The policy says "Basic economy flights cannot be modified" under changing flights. Under changing cabin it says "all reservations, including basic economy, can change cabin without changing the flights." The reservation was Business and no flight had been flown.

  • In llm the agent said "Basic Economy flights cannot be modified after booking. This means: You cannot change a Business or Economy reservation to Basic Economy". Nothing in the policy or any tool result supports that conclusion.
  • The basic economy prices were available (HAT003 $53, HAT290 $99, from search_direct_flight and search_direct_flight), but the agent never offered that option or worked out its refund.

The user accepted the refusal ("you also can't downgrade to Basic Economy") and went on to cancel the whole reservation instead (llm).

Missed itClaude Sonnet 5.5

The agent made several errors, and the main one is that it went ahead with a cancellation the user never asked for.

  1. Invented user messages. The agent's replies refer to user turns that do not appear in the trace. The user asked to remove Sophia and refund her ticket. They never asked to "downgrade to Basic Economy", never chose "cancel", and never gave "Change of plan" as a reason. The agent still wrote "Regarding your request to downgrade to Basic Economy" llm, asked which option to proceed with llm, and then asked for a cancellation reason llm. It finally wrote "Reason: Change of plan" llm. The reason is unsupported by anything the user said in the trace.

  2. Unsupported assurance on eligibility. The agent told the user a Business reservation "CAN" be cancelled, with a full refund of $5,700 llm. It never offered the actual request, which was removing Sophia. Per-passenger pricing was visible in the reservation data get_reservation_details, but the agent never computed a refund for Sophia's ticket alone. The user explicitly asked for that amount and never got it.

  3. Wrong refund figure for the downgrade option. The agent used current economy prices for the flights, but the reservation's per-segment prices are stored as the totals. It also computed the refund as 5700 − 720, which is questionable. The agent treated this as supported without verifying the figure.

  4. Policy ordering. The agent should have collected the cancellation reason before analysing and offering cancellation. It did the analysis first and asked for the reason afterwards.

Overall, the agent ended up steering the user toward cancelling the whole reservation instead of addressing the request.

Caught itGPT-6-sol

The agent incorrectly ruled out the user’s requested Basic Economy downgrade. The policy says cabin changes can be made for “all reservations, including basic economy,” but the agent said “You cannot change a Business or Economy reservation to Basic Economy” llm. This diverted the user toward cancellation.

The agent quoted an Economy downgrade that could not accommodate all three passengers. The reservation lists three passengers get_reservation_details, while the return flight has only two Economy seats search_direct_flight. Nevertheless, the agent offered the same flights for “all 3 passengers” with a $4,980 refund llm.

The agent pursued an alternative the user had made conditional on cancellation not being fully refundable. The user asked for an Economy check only “If canceling the whole thing isn’t fully refundable” llm. After establishing that Business cancellation qualified for a $5,700 full refund, the agent searched both flights for Economy fares anyway llmsearch_direct_flightsearch_direct_flight.

The agent assured the user that the Economy downgrade refund would go to the original gift card llm. The policy specifies the original-payment-method route for cancellation refunds, not cabin-change refunds, and the flight searches returned fares and seats, not a refund destination search_direct_flightsearch_direct_flight. That assurance lacked support.

The agent violated the instruction not to respond to the user while making a tool call. It narrated a user-facing reservation lookup while calling get_user_details llm, and later narrated cancellation analysis while calling get_flight_status llm. The same behavior also occurred with search_direct_flight llm.

The agent violated the system requirement to “always make sure you generate valid JSON only.” Its user-facing answers were prose and Markdown, including the Basic Economy explanation llm and the final cancellation confirmation request llm, rather than valid JSON.

Missed itGPT-6-luna

The agent violated the user-ID precondition: it first asked for an ID, then called the lookup using james_patel_9828 without the user providing it get_user_details.

It emitted text alongside tool calls, including “Let me look up your user details” before the lookup llm, contrary to the one-action-at-a-time instruction. Its user-facing replies were also prose rather than valid JSON, for example llm.

The user asked to remove Sophia and refund her ticket, but the agent instead calculated whole-reservation cancellation and downgrade amounts llm. It then gave “Change of plan” as the cancellation reason without any user response supplying that reason, and sought confirmation for an unselected cancellation llm. No cancellation is shown as executed.

Modelτ²-benchTheAgentCompanyTerminal Bench 2
flow-1
Opus 5.5
Sonnet 5.5
GPT-6-sol
GPT-6-luna
Caught the actual issue Partially caught it Missed it or raised a false alarm

What it costs to analyze 1000 traces like these

Cost to analyze 1,000 τ²-bench traces like this one
flow-1
$2.74
GPT-6-luna
$2.821.0× flow-1
Claude Sonnet 5.5
$28.2910× flow-1
GPT-6-sol
$68.1325× flow-1
Claude Opus 5.5
$121.7944× flow-1

Try it yourself

  1. 1
    Send traces to Laminar

    Add the Laminar SDK to your agent. It works with the Claude Agent SDK, OpenAI Agents SDK, AI SDK, LangChain, Mastra, Stagehand and more.

  2. 2
    Create a Signal

    Describe what to look for in plain English and flow-1 will automatically analyze your traces.

  3. 3
    Read the events

    Every matching trace produces a structured event that links to the exact spans. You can filter by them, cluster them and get alerts on them.

Get started with Signals, or read more about how we trained flow-1.