Cheaper Conversations and Fewer Failed Tool Calls
July 12, 2026 · InfraScout Team
This release is a roundup with one headline: conversations got measurably cheaper. Alongside that, we went through the tool calls that were actually failing on our own tenant and fixed the classes we found. Nothing here changes how you work — the same chats and the same tools simply cost less and fail less.
Conversations cost less
The cost of an assessment comes largely from how much the AI has to re-read as a conversation grows. We went through how InfraScout manages that on our own tenant and found several places where a long conversation was paying for far more of its own history than it needed to — some of them badly, and some of them on every single turn.
Those are fixed. The effect is largest exactly where it matters most: long, tool-heavy work — playbook runs, deep investigations, anything that reads a lot before it concludes — now costs meaningfully less than it did last week, while doing precisely what it did before. Short conversations were never the problem and are largely unchanged.
Nothing about this changes how you work; there is no setting to turn on. If you track spend in the Chat Audit, you should simply see lower numbers for the same work.
Fewer tool calls that fail for no good reason
A failed tool call is rarely fatal, but it is never free: the AI spends a turn on it, then spends more turns theorizing about what went wrong. We pulled the real failed calls from our own tenant, sorted them into classes, and fixed the classes.
Microsoft 365 Unified Audit Log searches were the worst offender by some distance. These searches run asynchronously on Microsoft's side and can take a long time, so InfraScout polls for the result. A transient error on Microsoft's end used to abort that poll outright, and the AI would reasonably conclude the search had been lost — then re-create six searches and throw away 90 minutes of server-side progress that was proceeding perfectly well. Polling now rides out transient errors within its budget, and when it runs out of time it tells the AI plainly that the search survives and to keep waiting with the same query ID rather than starting over.
The guidance around those searches was also over-promising. The AI was told searches "typically complete in 1–10 minutes"; in practice a scoped seven-day search routinely takes 12–27 minutes, and a wide unfiltered one can run for hours. Guidance now scales with the time window and filters you actually asked for, so the AI waits instead of panicking. A truncated search ID — easy to produce by pasting a shortened value — now fails fast with recovery guidance pointing at the list of your existing searches, instead of returning a permissions error that sent the AI looking for a problem that was never there.
One fix in that area is worth calling out on its own, because it was a silent failure rather than a loud one. A file path containing a comma — Q3 Report, Final.docx — was being split into two bogus filters, so an audit search for that file returned nothing at all. Not an error: nothing. That is a false negative on a security tool, which is the worst kind of bug we can ship, and it is fixed.
The rest of the round is smaller but adds up. inventory_get_software_distribution and inventory_get_system_distribution advertised limit and skip arguments that neither tool ever honored, so the AI would set them, believe it had bounded the result, and be wrong; a tool now offers only the arguments it actually uses. Permission errors on PIM queries now name the exact Microsoft Graph permission that is missing — RoleAssignmentSchedule.Read.Directory or RoleEligibilitySchedule.Read.Directory — instead of an opaque rejection you would have to decode yourself. And a batch of tools learned to heal reasonable-but-imperfect input rather than reject it:
- Comma-separated values are accepted where a list was expected.
- HTML-escaped LDAP filters are repaired before they reach a host.
- Empty queries are rejected up front instead of failing on the target machine.
- "Not found" errors that used to leak raw database text now read as plain English.
Steadier chat and memory
The most serious bug in this release had nothing to do with cost. A live chat could be permanently broken by a background memory rollup — the periodic job that distills what an idle conversation learned into long-term memory. Once a rollup had run over your conversation, the next message you sent in that chat failed, and kept failing. Retrying did not help, and the chat never recovered on its own.
That is fixed: a rollup no longer disturbs the conversation it reads. Conversations that were already stuck this way are repaired as part of the rollout; if a chat still refuses a new message, let us know.
Rollups themselves also got quicker and more reliable. One that should take a couple of passes was routinely taking three times that, and a repeat rollup over the same conversation could mark new messages as processed without actually having read them — meaning memory quietly missed what those messages contained. Both are fixed, so what you discussed in a chat reliably reaches long-term memory. The rollup card in a conversation now renders as one card per rollup, too, instead of one per pass.
One last thing, unrelated but welcome: the Dashboard's recent sessions panel now sorts by last activity rather than start time — so a long-running session that was active moments ago appears where you would expect it, instead of sinking below sessions that merely started more recently.
Questions or feedback? Reach us at info@infrascout.cloud.