Build1 distinct publisher3 min readUpdated
Salesforce's engineering team argues production agent evaluation has to verify system state, not replies, because the same code and prompt can either call the refund tool or merely say it did.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Salesforce's engineering blog has put a name to a failure most agent teams have seen and mis-filed: an agent that says "I have processed your refund," leaves the customer satisfied, trips no obvious monitoring errors, and never calls the refund tool at all, with the invoice still open in billing [1][2]. If that is a plausible outcome in your stack, then every green check in your eval suite is grading the wrong artifact.
The mechanics are dull, which is the point. A refund requires the agent to identify the correct customer and invoice, choose the appropriate tool, call it with the correct arguments, update the invoice status, and only then report success; almost none of that work is visible in the final response [4]. Two agents can emit the identical sentence "Your refund has been processed" while only one performs the refund, and a conversation-scoring eval marks both interactions successful [5]. Traditional LLM evaluation measures generated responses, which works when text is the final output and breaks down when tool calling modifies production systems [6]. Agents are now issuing refunds, scheduling technicians, updating customer records and managing campaigns, so the gap is not academic [3].
The part worth internalising is that this is not a defect you can fix upstream. According to the post, the model decides at inference time whether and how to call a tool, so two runs of the same agent with identical code and identical prompts can land in different places: one emits the tool call, the other narrates that it did [7]. That puts the burden on the evaluation rather than the code [8]. A transcript-only score cannot separate those two runs, which makes its pass signal indifferent to whether the tool ever fired [15].
So the assertion has to read the billing table. CRMAgentBench, per Salesforce, gives every task a shared stateful environment, lets the agent's tools modify that environment across a complete multi-turn workflow, and verifies at the end that the correct state changes occurred [9]. It scores correct actions and the final CRM state, not the agent's claims [10]. In CRM terms the evidence is concrete: a scheduled field-service appointment exists with the correct technician, a coupon is attached to the intended account, a campaign lookup uses the identifier discovered during the conversation rather than one the model guessed [11]. "Production systems trust observable outcomes, not promises," the post argues [14].
Two operational consequences follow. First, a harness that reads only logs and replies is insufficient; it needs visibility into the same state the agent writes, plus a per-task expected-state check, which pushes you toward fixtures and teardown rather than a rubric [9]. Second, correct final state is necessary but not sufficient [12]. An agent can refund the correct invoice and also modify another customer's record: the intended state change occurred, and so did collateral damage [13]. A defensible pass is therefore a conjunction, required changes present and unintended changes absent [16].
What to watch is the second half of that conjunction, because it is the expensive one. Detecting the write that should not have happened means asserting over records outside the task's intended change set, a strictly larger surface than the one you were already checking [17]. Also worth noting: this account is single-sourced, and CRMAgentBench is the publisher's own benchmark [1][10].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
CRMAgentBench runs complete multi-turn workflows with stateful tools, giving every task a shared stateful environment that the agent's tools modify; when the task finishes, the benchmark verifies that the correct state changes occurred.
CRMAgentBench scores correct actions and the final CRM state, not just the agent's claims.
Salesforce's engineering blog published an argument that production AI agent evaluation should measure system outcomes rather than conversations.
Opening example: a production AI agent tells a customer "I have processed your refund", the customer leaves satisfied, the conversation looks perfect and monitoring shows no obvious errors, but the invoice in the billing system is still open because the refund tool was never called.
Two agents can produce the same sentence, "Your refund has been processed", while only one actually performs the refund; if evaluation focuses on the conversation, both interactions appear successful.
In a CRM workflow the evidence may be that a scheduled field-service appointment exists with the correct technician, a coupon is attached to the intended account, or a campaign lookup uses the identifier discovered during the conversation rather than one the model guessed.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Coherent mechanism argument, one first-party source, zero measurements
The causal core — inference-time tool-call nondeterminism means identical code and prompts can diverge, so only state inspection separates a done refund from a narrated one — is internally consistent and independently checkable in principle. But all of it comes from a single vendor engineering post with no quantitative evidence: no failure rates, no CRMAgentBench scores or task inventory, no reproducibility or availability detail, and no third-party corroboration.
No adoption data in supplied sources
The only observation is the vendor's own description of CRMAgentBench. There are no disclosed users, deployments, scores, downloads, license terms, or reports of other teams adopting outcome-based state verification, so adoption cannot be scored without inventing facts.
Modest thesis, mildly overstated benchmark
The central argument is unglamorous and well-scoped — it asks for state assertions instead of transcript grading and explicitly concedes that correct final state is necessary but not sufficient, which suppresses hype. The overstatement is confined to CRMAgentBench, whose strict all-or-nothing grading is presented as production-ready without a single published score, task count, or independent check, and to the unquantified assumption that broad 'nothing else changed' assertions are practical to maintain.
Vendor blog promoting its own benchmark and agent platform
Salesforce publishes this on its own engineering property, defines the evaluation standard, and names its own CRMAgentBench as the implementation of that standard, with CRM-specific examples (field-service appointments, coupons, campaign ROI) that map onto its product surface. There is no disclosed independent review, no competing benchmark comparison, and no acknowledged downside of the approach.
Mechanism trustworthy, benchmark and impact unverified
Confidence is moderate: the reasoning-level claims are directly attested and hard to dispute, and the derived pass-condition claims follow from them. It is held down by single-publisher sourcing, clear publisher incentive, an unmeasured adoption dimension, and the absence of any figure that would let a reader test how often the narrate-without-calling failure occurs or how well CRMAgentBench detects it.
build
Notion's agent stack is live, not slideware, and it only changes one of your decisions1 distinct publisher
build
A green build only proves your agent was consistent with itself1 distinct publisher
invest
Spark's $22M bet that the agent framework layer can stay independent1 distinct publisher
leadership
The help desk is now your softest identity check, and Mandiant shows how cheaply it breaks1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
1 article · August 17, 2026