Skip to content

PlaidCloud’s MCP server exposes your allocation models to AI agents, so once an allocation has run you can ask about its results in plain English from an MCP-connected chat — Claude Code, Claude Desktop, Cursor, ChatGPT, or any MCP-compatible client. The agent reads your allocation model directly, so it already knows how each cost line is built and what drives it.

The most common question — compare two periods and explain the movement:

Why did the revenue-allocated cost line change from January to February?

The agent returns:

  • The size of the change — before, after, and the delta.
  • What drove it — whether the input cost pool grew or shrank, or the driver mix shifted.
  • The top contributors — the accounts, cost centres, or products that moved the most.

Narrow the same question to a single member to get a precise breakdown:

Explain just the Operations cost centre.

The agent separates the two effects — how much came from the overall pool moving versus the slice’s share of it changing. For example: Operations fell because the pool shrank, even though Operations took a larger share of it.

Where the answer is that the share moved, it names the driver that share is split on, and states the share either side — “the shift in this slice’s share of the pool (split on the headcount driver; this slice’s share of the cost pool went 26.5% to 18.2%)”. That is the part you can act on: a share is a result, a driver is an input someone owns and can check. The two figures are that same share of the pool, stated rather than left for you to go and look up. They say whose share they are because they are not a share of the driver column, and the two can differ completely: a slice can hold a perfectly flat share of the driver across both years while its share of the pool falls eight points, so reading the pair as the driver’s would send you to reweight an input that never moved. The driver is named without figures wherever that share is not a sensible percentage. A slice can hold more than all of a pool, or less than none of it, once the pool carries credits or reversals that net against each other — a loss-making line is the common case — and a share of “11.1% to 900.0%” reads as broken rather than informative. The driver is still the lever there, so it is still named. And a step with no driver at all has none to name, so the sentence reads as it always did.

The share names the column whose pool it is. Each value column is allocated out of its own pool, so on a table with several of them one slice has a share of each — and the line used to say only “pool share”, which on one model printed three shares for the same slice over the same pair of years (26.5% to 18.2%, 25.9% to 18.1%, 21.9% to 16.9%) with nothing to tell them apart. Each now reads “this slice’s share of the cost pool”, “of the revenue pool”, “of the margin pool”. Single-column answers name their column too, because “pool share” is as unanswerable there — share of this column’s pool, or of the model’s? Where the step carries no readable column name, the line reads as it did before rather than naming nothing.

The other two explanations are deliberately left alone: where the answer is that the pool as a whole moved, or that the value arriving changed, the driver is not the mechanism and naming it would point you at the wrong input.

Where Values Come From, and What They Feed

Section titled “Where Values Come From, and What They Feed”

Trace an allocation’s lineage in either direction:

Where does this cost line come from?

What does the GL cost pool feed downstream?

The agent lists the upstream sources and drivers, or every downstream step the table feeds — across allocations and the transforms between them.

Is revenue used as a driver, and where?

The agent lists each step that uses the table as a driver — the basis for the split — versus an input, the values being spread.

Ask a forward-looking question:

If revenue rises by 1 million next quarter, which cost lines are affected?

The agent names the affected outputs and an estimated size for each — split across a fan-out by each result’s current share of the pool, so the per-target figures add up rather than each showing the whole change. You can also scope the question to one target — “what would a $1M revenue rise do to Customer A?” — and the estimate is applied to just that slice.

What cost allocations are in this project?

The agent lists the allocation models and their final output tables — useful for orienting yourself in an unfamiliar model.

Every explanation is labelled with how confident the agent is in it — and, just as importantly, it flags when a confident-sounding number would mislead. Those warnings are carried into the plain-language summary itself, not buried in the detail, so you see them before you act on the figure.

The line says which breakdown it is rating, where it is rating one. Where the answer covers a single value column and shows you a member breakdown, the confidence line names the field that breakdown is cut by — “Confidence in this breakdown by lob: high” — and it is the same field the mover list above it is headed with. This matters most when you follow an answer’s own suggested next step: the same figure cut by line of business and then by branch can honestly rate medium and then high, because cutting differently changes which members offset each other. Without the field named, those read as one number rated twice, the second reading as “we looked again and it’s fine”. With it, they are two ratings of two different breakdowns.

Where an answer covers several columns it names no field, because it shows the breakdown for one of them. The rating covers every column; the member list covers one, and says which in its own heading. Naming the field in both places rated a by-programme breakdown across three columns while telling you, a few lines further down, that two of the three describe the whole pool only. Such an answer now reads “Confidence in these figures”, and the mover list is what tells you which column and which field its members belong to. An answer that shows no breakdown at all reads the same way.

Where an answer covers several value columns, the block says how those columns relate and what each one moved between. Each line used to give a change and a percentage and no amounts, so margin down 19.9% sat beside cost down 10.4% and revenue down 11.5% and read as margin eroding at nearly twice the rate of costs. It is not: those three balance exactly, and margin opens at $53,848,657.50 against cost’s $401,305,825.54, so the same dollar amount is a far larger percentage of it. Neither fact was on the page, and the one column whose opening and closing amounts were shown was the only one that did not need them — so working the gearing out meant recovering a starting amount from a percentage rounded to one decimal, which pins it no better than a couple of per cent. Every line now ends with the two amounts it moved between — - margin: -$10,701,036.06 (-19.9%), from $53,848,657.50 to $43,147,621.44 — and a line above the rows states that the columns balance to the cent at both ends of the period as well as on their changes, expresses that balance in terms of one of them, and says which starts from the smallest amount: “These 3 tie out to the cent at both ends of the period, and so do their changes: margin equals revenue less cost. The smallest opening level is margin’s, so a given dollar amount is a much larger percentage of it than of the others.” Both claims are checkable against the rows immediately below them, which is the whole reason for making them.

It says nothing about how your model is built. Whether one of those columns is calculated from the others is not something the answer can see, and every rearrangement of a balance is equally true — margin = revenue - cost and cost = revenue - margin describe the same three figures — so naming one as the calculated column would claim something the arithmetic does not support. The column the balance is expressed in terms of is a stated choice, the one starting from the smallest amount, rather than a finding. Nor does the answer carry an explicit denial: nothing on the page would back one, and an unsupported denial beside a checkable balance costs the balance its credibility.

The balance is stated and the comparison of sizes left out where a column starts from a negative amount — smallest-by-size and smallest-by-value are then two different columns, and “smallest” stops being answerable from the amounts printed below it — and where the smallest starting amount is not much smaller than the next. Nothing is stated at all where more than one arrangement of the balance fits the figures, where the columns come to zero between them, where they do not balance to the cent, or where two columns start from the same amount and there is no single smallest to express the balance in terms of. That last case covers every two-column answer: a = b and a = -b are the only balances two columns can satisfy, and both make the two starting amounts equal in size. Answers covering a single value column are unchanged.

Where a table carries several value columns, that label is an average across them, weighted by how much each column moved — and any column the agent is less confident about is named first: “Confidence in these figures: medium for the net_contribution column (gross offsetting); high for the other 3 columns”. Read the first level, not the last. A summary column is the difference between the others, so it is usually the smallest mover and carries the least weight in that average, while being the column the answer leads on and the one you are most likely to act on. The column named is whichever one is weaker, which is not always the summary: where the agent chose a column to search for you, that is often the one it is less sure of.

Where the weaker column is the one the answer is about, the stronger rating is stated of the other columns rather than of the answer. It used to close “high overall across 4 columns”, and on a table reporting income alongside the charges it nets against, those other columns are what the summary column is made of — so they carry most of the movement the average is weighted by, and the average was reassurance about columns you had not asked about. A reader skimming to the end of the line took “high” away about the one figure they had. Where the weaker column is not the one the answer leads on — a column the agent chose to search, say — the line still closes with the overall rating, because that rating is then about the column you asked for.

Where the columns agree, the line says how many it is about, and gives a reason only where they share one. A rating with nothing named after it used to read as a single verdict with a single explanation, when it was an average with one column’s explanation attached. It now states its scope — “medium across 3 columns” — and states the reason in brackets only where every column gives the same reason. Where they differ, no reason is given, because attaching one column’s reason to an average across three is a claim about a column you were not shown: on a real automotive model that put “mixed residual” against a 38.0% fall in margin, when the residual belonged to cost, a column that had moved 0.2%. The per-column reasons are still in Honest limits below, each against the column it belongs to. A single-column answer has nothing to average, so it reads as it always did.

A rating that covers every column still names any column carrying a stated limit. Where the columns all rate the same, there is no weaker one to name — but one of them may still carry a limit set out under Honest limits, and a single word covering them all reads as though none does. On a real banking model the line rated four columns medium twelve lines above a limit on net_contribution, the very column the answer leads with. The line now closes by naming any such column — “medium across 4 columns; the net_contribution column carries a stated limit as well” — so the rating and the limit are read together. The limit itself is not repeated there: it is a statement about how a change divides between its causes, not about the figure being weak, and it stays in full under Honest limits. Where every column carries the same limit, the line is unchanged and the breakdown block says so once above the figures instead; where a column is already named as less confident, that naming stands on its own.

Where the answer has already said the split between causes is not a finding, the rating says what it is rating. An allocation shares out a pool without changing its size, so on a whole-pool answer the split between “the value coming in” and “the driver” is forced by that arithmetic rather than measured — which the answer says under Honest limits and again on the traced stage. The rating above it used to read “high (clean attribution)”, and a reader who stopped there took the cause as settled while the same page was withdrawing it further down. It now reads “high across 3 columns (clean attribution — rated on the arithmetic, not on why it moved)”, so the line refuses that reading on its own. The rating itself has not changed: the figures still tie out and are still rated high. Where the split was genuinely measured, and where only some of the columns are whole-pool, the line reads as before.

Where the columns share a reason but measured different amounts of it, the figure beside that reason is the range they measured — “mostly clean — 8% at the lowest and 12% at the highest of the 3 columns’ own moves are interaction between …” — rather than one column’s figure standing for all of them. Where they measured the same amount, a single figure states as before.

Where several columns are rated together, the line says when the answer leads on the one it explains least well. Each step of the trace names the biggest single factor behind that column’s move and how much of the move that factor explains. Those figures appear once each, one per step, at the end of the answer, and nothing compared them — so on one automotive model the answer opened on margin, gave margin the only member breakdown on the page, and only the trace at the bottom showed that the biggest single factor explains 81% of the cost move, 79% of the revenue move and 60% of the margin one. The figure the answer is built on was the one whose story holds together least, and the one rating covering all three columns is what a reader applies to it. The confidence line now closes by saying so: which column the answer leads with, that it is also the one a single factor explains least of, whether it is the same factor in each case, what it explains for each column, and that the rest of each move is carried by the other factors and the interaction between them rather than being missing. It is a different measure from the confidence level itself, and it is about how each move divides between factors rather than about the amounts. Nothing is said where the spread is small, where any column’s split is being withheld, or where two columns tie at the bottom — there is then no column the answer explains worst, and naming one would mean choosing between two identical figures.

A table that recombines several allocation branches is read the same way. That overall level is an average across the branches, weighted by how much each one moved, so a small branch whose attribution is shaky is outvoted by the large clean ones and the figure you take away is the average. Any branch the agent is less confident about is named first, ahead of that figure — “Confidence in these figures: medium for the Allocate Support Costs branch; high overall across 2 branches” — and its line in the per-branch breakdown carries its own level alongside it, so a branch the closing line names can always be found in the list. Where a branch covers several value columns, the column is named with it. Each branch’s line also states the two figures its change moved between — Allocate Support Costs: -$72,000.00 (from $120,000.00 to $48,000.00) — so a branch’s move can be judged against its own size rather than read as a bare amount, which on its own says nothing about whether it is most of a small branch or a rounding error on a large one. A line whose figure carries a caveat is marked · carries a caveat, and this is separate from the confidence level beside it: a level says how one branch compares with the answer as a whole, so where every branch shares the same problem none of them stands out — which is exactly when the breakdown is most worth qualifying. Where every figure in the block is covered by the same caveat, the block says so once, above the figures, and says that the caveat bears on comparing the branches with one another — a doubt that covers all of them, read as a separate doubt about each, invites you to discount the amounts and trust the ranking, which is the part such a caveat is least likely to leave standing. A breakdown by value column is marked the same way.

A level marked against a column or a branch always means weaker than the answer overall. One that agrees with the overall figure, or is more confident than it, is left unmarked — a mark is a reason to be careful, never a reassurance.

The closing line goes one step further than the marks do: where some columns or branches are stronger than the rest and the weakest group all give the same reason, that group is named even though it only matches the overall level rather than falling below it — because at the overall level the level itself is not news and the reason is the whole of what there is to say. Where every column or branch sits at the overall level, none is named: the line is already about all of them.

The same rule applies inside the trace. The step-by-step account at the end of an answer used to stamp each step’s own confidence on its caveats — so an answer opening “low (partial attribution)” could say “Caveats (high confidence)” twice, eight lines down, in the block where the figures are. One word, two scopes, with nothing on the page distinguishing them, and a reader scanning for the numbers took away the wrong one. A step now states a confidence word only where it is weaker than the answer as a whole; otherwise the line reads “Caveats: …” and the caveat itself is unchanged.

Where two things hold the confidence down, the line names both. A rating held at medium by unevenly populated periods and by part of the upstream chain the agent could not attribute used to print only the first, so a reader who skimmed to the label never learned the more serious half. It now reads “Confidence in this breakdown by account: medium (uneven period coverage; partial attribution)”, which is what that answer’s own opening summary already said.

A “Concentrated:” line in the trace names the column its figure is measured on. Each step of the trace covers one value column, and where a step’s change is concentrated in a single member it says so — “branch=REGIONAL = 70% of the delta”. The step names its column at the start of the line, but on an answer covering several columns that loses to the breakdown printed above it: on a banking model two steps quoted 70% for REGIONAL while the only rows on the page were net_contribution, where REGIONAL came last of four with about a fifth of the movement. Both were right about their own column. Those lines now read “70% of the funding_charge delta — that is its own change, not its share of the pool shifting”, and the decision is taken across the whole answer rather than line by line — two steps quoting the same percentage about different columns are the same confusion with no breakdown involved, so either every concentration line names its column or none does. An answer covering a single column, and one whose steps are all about the column it broke down, read as before.

Each step of the trace says which rows its figures cover. A question scoped to a slice runs its own step on that slice and every step above it on the whole pool — the scope is authored against the table you asked about and does not reach an earlier one — and nothing said so. Two steps of one answer therefore showed -$9,321,592.41 and -$16,235,106.82 with no way to tell that the second covers rows the first excludes, which invites the one division that looks most natural and is a share of nothing. Steps now carry their population where they disagree — (entity=DE) on the scoped one, (all entity values) on the one above it — and where the whole chain used the same rows, nothing is added. Both sides are marked rather than just the unusual one: a note on a single line reads as an extra fact about that line, where the same note on both reads as the contrast it is.

A “Concentrated:” figure says which step it belongs to. Where two steps of one answer are each concentrated in the same member to the same rounded percentage, they printed identically — “account=600000 = 64% of the delta” twice, against changes $6.9m apart. Each line was right about its own step; together they read as one finding restated, and landing on the same percentage is exactly what removes the prompt to check. Those lines now read “64% of the delta at stage 1”, naming the step rather than the table — a step scoped to a slice does not share its table’s total, so naming the table would name a base the percentage was not taken over. It appears where an answer has more than one such line to tell apart, in the trace and in the opening summary alike.

The pool-conservation note states the half the arithmetic forces, and measures the rest. An allocation cannot change the size of the pool it divides, so a step’s group total credits the driver with essentially none of the movement — that half is fixed, and the note now says ~0% of the move goes to the driver total. What is left was claimed for the value coming in as a matching “~100%”, which is not forced: where the two factors interact, visibly less than all of it lands on the value coming in, and one answer carried that claim above its own step reporting 82%. The note now describes the remainder as splitting between the value coming in and the interaction between them, and states the “~100%” only where the step measured it. What the note is for is unchanged — it is telling you the split is a property of how allocation conserves the pool rather than a finding about any member, and pointing you at the step’s own table if you want the shifts between members.

And the step that states the “~100%” now says on its own line that it is arithmetic. Where a step covers the whole pool and the value coming in takes all of the movement, its trace line reads “dominant: the value coming in explains 100% of the move” — a sentence written like a finding, sitting in the block a sceptical reader skims because it looks like the working. The note that withdraws it was a section away, and only one kind of step carried a short form of it beneath the figure; every other step’s line said only that the split “describes the whole pool”, which reads as a note about scope. On a four-column banking answer that meant the same 100% appeared four times and was called mechanical once, so the marked step read as the only doubtful one. The line beneath every such step now reads “whole-pool only — the split is arithmetic, not a driver finding; filter to a member for key shifts”. It names no percentage, because the same line also prints where the answer withholds the split entirely and beside a different column’s figure in the opening summary. Steps that measured a genuine leading factor — a question narrowed to one member, where the pool total and the member’s share of it both really move — are unchanged.

A share-shift figure shows the two shares it is a shift between. Where a member is named as most of a movement “by its shift in share of the pool”, that figure is a share of the whole change in money, not a share of the pool — two different things, and only the first was ever printed. Answers said three times over what the figure was not (“that is its shift in share of the pool, not its own change”) and never once what it was, so nothing connected “its share moved” to “71% of the change”. Where the two measures came out close that was actively misleading: on an insurance model the figure quoted was 11.7 times the movement and the member’s own change was 12.3 times it, five percent apart and inches apart on the page, which teaches you the warning separating them is pedantry. Those lines now carry the pair — “by its shift in share of the pool, from 26.5% to 18.2%”. The version that prints no percentage at all, used where a member’s shift is larger than the whole movement, gains it too and is where it helps most, since until now that sentence carried no number whatsoever. Where the pool is positive at one end of the comparison and negative at the other, the two figures are not shares of anything and are left out rather than printed.

“Below the bar for a finding” now names the bar. When you ask a question without naming a breakdown, the agent searches the available dimensions and tells you the closest it found even when nothing was strong enough to report — “branch accounts for a share shift worth ~45% of that column’s change, below the bar for a finding”. You learned a figure had failed a test and never what the test was, so you could not tell a near miss from nowhere close — the whole judgement that sentence invites, on the one kind of answer that exists because the finding is uncertain. It now reads “below the 60% a finding needs”. The threshold is not fixed: it rises with how many dimensions were examined, from 60% up to 80%, so an answer that searched more of them will quote a higher one. Where the candidate’s figure is larger than the whole movement it is written as a multiple rather than a percentage, and no threshold is quoted there, since a percentage bar next to “11.7×” would argue with itself.

The trace numbers parallel branches as branches, and reserves “stage” for depth. The step-by-step account at the end of an answer numbered everything the same way, and the numbering meant two different things depending on the shape of the model. On an answer that traced a chain, “Stage 2” fed “Stage 1” — a real hop upstream. On an answer covering a table that recombines several allocation branches, “Stage 1” through “Stage 4” were four branches side by side that recombine and never touch each other, so a reader who had seen the first kind of answer took the second to be a four-hop chain and drew a lineage that does not exist. One answer used both words for the same two tables six lines apart, calling them “Branches 1, 2” in its limits and “Stage 1, Stage 2” in its trace. A parallel branch now reads “Branch 2 of 4”, with the same numbering the rest of the answer already uses for it, and “Stage” appears only where one step genuinely feeds another. Where a branch covers several value columns it keeps one number, and its lines are told apart by the column named on each. A table that recombines just one branch reads “Branch 1”, with no count after it — a count of one is not a count. Answers that trace a chain are unchanged.

Every answer names the two periods it compares, on the line you forward. Figures were quoted to the cent and attached to nothing: no answer named a date, a quarter or a year anywhere, so a figure could not be tied to a filing, a trial balance or a prior-year record, and two answers about consecutive spans were indistinguishable on the page from two about the same span — one tax answer ends at $25,999,193.60 and the next one starts there, with nothing on either page saying why. The opening paragraph now carries “Periods compared: year 2024 → 2025”, ordered to match the “from $X to $Y” pair beside it so each figure attaches to a period rather than leaving you to work out which is which. Where the question used a date range rather than a single label, the range is spelled out; where the agent cannot state the periods reliably — the rare case of an answer whose steps did not all use the same window — it says nothing rather than naming the wrong ones.

Currency is a separate question and this does not address it: PlaidCloud reports the amounts your model holds, and does not know their currency or any conversion basis, so figures are shown in bare currency units. Where that matters — a model spanning jurisdictions, or one feeding a filing — record the functional currency alongside the answer yourself.

Where an answer leads on a single figure, the opening line states the levels the change moved between, not only the percentage it moved by — it fell 7.2% (from $26,121,744.14 to $24,229,133.70). Because each answer states where it started and finished, two questions about the same slice in consecutive periods join up — one answer’s closing figure is the next one’s opening figure.

Where the figure is below zero at both ends, the opening line describes the size of the balance rather than its direction. “Fell” is correct about a signed figure and backwards about the quantity most people have in mind, so a deepening loss read as an improving one: net_contribution fell 23.5% (from -$12,917,012.01 to -$15,957,089.93) is three million dollars worse, announced with the one word a reader scanning a loss line takes to mean the opposite. That line now reads net_contribution went further below zero — the negative balance grew 23.5%, with the same two figures after it, and the mirror case reads “moved back toward zero — the negative balance shrank”. The percentage is unchanged: on a figure that is negative at both ends, the percentage it moved by is exactly the percentage the balance grew or shrank by. The answer still does not say whether that is good or bad — which way is good depends on the column, and only you know that. A figure that crosses zero keeps the plain direction word, because there it has only one reading.

An answer whose opening line reports large rises and falls cancelling out states the pair too — “the net barely moved (3.7%, from $85,472,090.25 to $88,668,890.26), but that hides large offsetting movements up and down”. Those two figures are the pool’s, not the net’s, so they make that line’s point more plainly rather than softening it: $3.2M of movement inside an $85.5M pool is visibly nothing, where “barely” on its own was a judgement about a base the answer never showed you. It still tells you the net understates what happened and still sends you on to a single member. An answer reporting no material change carries the same pair, for the same reason.

An answer covering a table that recombines several allocation branches opens with that table’s own total. It used to open with a count and a direction alone — “across 4 recombined branches, all 4 fell” — on the reasoning that a recombined table has no single total to state. It has one: it is a real table, and the agent reads its total straight off it. So the line reads “the combined total fell 58.0% (from $34,621,164.20 to $14,535,705.89); across 4 recombined branches, all 4 fell”, and the year-on-year comparison resolves for these answers as it does for every other shape. The total is read from the table rather than by adding the branches up, because a branch that reaches the recombination by more than one route is listed once in the breakdown and counted more than once in the table. Where the branch figures do not come to the table’s own change, the answer says so and gives both — “the branch figures shown ($12,231,623.56) do not account for the combined change of $25,082,057.48” — rather than leaving you to add up a list that does not reconcile. Where the total genuinely cannot be read, the opening line reads as it did before and the answer states which condition stopped it: the branches allocate different value columns, or the recombined table does not carry the column being totalled.

Where the whole movement is the size of the row shortfall between the two periods, the answer says so on its opening line. Two periods can hold very different numbers of rows — most often because the later one has not finished loading — and the answer has always warned about that. What it did not do was put the two proportions side by side, which is the one comparison that settles it: on a real model asking why German cost fell returned “it fell 58.0%”, over periods holding 1,755 rows and 754, and the money fell in almost exactly the same proportion. So the entire 58% was consistent with a half-loaded period, and the warning read “part of this change may reflect incomplete data” — a hedge on something that might be all of it. The Honest limits note now reads “the later period holds 43% of the earlier period’s rows, and the change reported here leaves its value at 42% of the earlier period’s — the same proportion, so this movement is what the row shortfall alone would produce”, and the opening line carries the same warning, where a recombined-branch answer stating a $20m fall used to carry none at all.

It is explicit that this does not settle which: an incompletely loaded period and a genuine fall of that size look identical on that measure, so the answer asks you to check the load rather than telling you the movement was not real. Where the money did not move with the rows, the answer says that too — the reassuring half, which was equally unavailable before. And where any part of an answer covers a period pair that is evenly populated, the opening line is left alone: a recombined table that rose 11.1% on a healthy branch, beside a small branch whose fall is entirely calendar, states its rise plainly and names the weak branch in Honest limits where it belongs.

One answer states no levels, and that is deliberate rather than an omission: a question the agent declines to attribute has no figure to give.

Where an answer declines, its suggested next step is about the thing it could not answer. A declined answer says where the trace stopped and then what to do about it, and the two used to come apart: “this can’t be answered as asked — the expected allocated column is not on the result table. Trace cost_pool as the target in its own right.” Both halves were true and the second had nothing to do with the first, because the suggestion was picked from everything the agent had noticed anywhere along the chain rather than from the step that actually stopped — so following it spent a query in the wrong place. The suggestion now comes from the step that stopped: a missing allocated column sends you to check that table’s columns, an input pool that has not been built sends you to run the workflow that builds it. Where there is genuinely nothing specific to offer, the answer still passes on the nearest useful suggestion rather than leaving you with none, and says plainly that it is about a different step.

A declined answer explains itself in plain words. Asking about a table without naming its period column, where the agent could not work the column out for itself, used to return an internal code quoted as though it meant something — “auto-detect returned ‘no_candidates’”. It now says what happened and what to do: “No period column was supplied and none of the table’s columns look like a period column. Pass temporal_filter.column explicitly.” Where more than one column looked equally likely it lists them, so the answer contains the fix. The note explaining why a year-on-year comparison was skipped reads the same way. Which questions succeed is unchanged; only what an unsuccessful one tells you.

The attribution quality behind the confidence:

  • Clean — the change was fully attributed to its drivers. This includes filtered allocations, those scoped to specific accounts: the filter is applied automatically, so the contributors are exactly the rows in scope.
  • Partial — the agent can show what changed and where — the totals and top contributors are correct — but cannot fully attribute the why on its own. It tells you why, and what to ask next.

Warnings you may see attached to an answer:

  • A year-over-year comparison measured over a still-incomplete current period — or with no prior-year data to compare against, in which case it says there is no baseline rather than calling the change normal.

    Where there is a prior year, the answer gives both halves of that comparison: whether the change was normal, elevated or extreme, and how it compares in size — “normal — 62% the size of last year’s move in absolute terms; 2024 → 2025 moved +$6,183,330.15”, meaning the rise was smaller than the one before it. The word alone answers whether this is an anomaly; the size answers whether it is still accelerating, which is usually the question being asked. “In absolute terms” is there because the same line also carries a percentage change, and this comparison is between amounts, not between rates. It is also between sizes only, so where the two periods moved in opposite directions the answer says so — and says it first, as “normal in size, opposite in direction”, rather than five clauses later where a reader who has already read “normal” will not reach it.

    The comparison is only labelled year-on-year where the two periods really are a year apart. A comparison of two consecutive months, or two consecutive quarters, is measured against the same window a year earlier just as an annual one is — but calling that “year-on-year” says the change itself spans a year, which it does not. Those answers read “against a year earlier” and name the window instead. Nothing about the measurement changes; only the claim the label makes.

    A year-on-year verdict measured over a half-loaded period says so. Where the answer also warns that the two periods are unevenly populated and the money moved in step with the row shortfall, that verdict is not a second opinion on whether the movement is real: it is a ratio whose top half is the movement being doubted, so a period that has not finished loading pulls the verdict toward “normal” for exactly the reason the answer is warning about. It now says which — “this verdict is computed from the change reported in this answer, so it is not an independent check on whether that change is real” — so a “normal year-on-year” reading cannot be taken as clearing the load warning above it. The verdict itself is a real measurement and is still given.

    Last year’s own move is stated, with the years it covers, and it is worth reading before the multiple is. A comparison is only as meaningful as the year it is measured against, and a year in which large rises and falls very nearly cancelled out leaves a net close to nothing — so the year after it can be an ordinary one and still come out as a very large multiple. On a real insurance model a prior year that netted +$1,792,719.72, out of member movements of roughly $22 million each way, made an unremarkable following year read as “extreme — 1325%”. Naming what the multiple is measured against is what lets you tell a big move from a small comparand: the two amounts are both on the line, so the percentage between them can be checked. That amount now carries its own periods too — “2024 → 2025 moved +$1,792,719.72” — so the figure the percentage divides by can be traced to a year rather than to the words “last year”. Where the two are too far apart for a ratio to be worth quoting you still get that move and the direction, which is the case where it matters most.

    Where no year-on-year comparison could be made, the answer says so instead of going quiet. A table written by a step that allocates several measures at once — cost, revenue and margin together — gets neither of the two comparisons that put a movement in context: against the same movement a year earlier, and against recent periods. Each is built for an answer covering a single measure, and reporting one of the three as though it were the answer would be worse than not running them. Until now that was silent, so an answer to “why is margin eroding” carried a fall, a breakdown and a step-by-step account, and no hint that the one check telling you whether a fall that size is normal had never run. It now reads “This answer does not say whether a change this size is unusual here”, names both missing comparisons, and says that one step produces every one of the measures — so there is no single-measure answer to ask for instead, which is the re-run a reader would otherwise try. It closes by saying that no figure above is withdrawn: the amounts are exact and it is only the context that is missing, and a note under Honest limits is otherwise read as doubt about the numbers beside it. The same sentence covers two narrower cases — periods that cannot be stepped back a year, where it names the period formats that can be, and a recombined table whose own combined total could not be read, where the comparison goes with the total.

  • A whole-group total that hides a member-level reshuffle underneath it.

  • A slice whose factors move together, so the headline percentages aren’t reliable on their own.

  • A change whose attributed pieces don’t add back to the reported total.

  • A what-if whose per-target impacts can’t simply be summed.

When a result is partial, the guidance usually points you to the slice drill-down above, which gives a real decomposition for a single member.

When the agent picks the breakdown for you

Section titled “When the agent picks the breakdown for you”

Where you do not name a field, the agent tries each one it can and reports the strongest — and it now tells you how much strongest, naming the field that came second: “On that measure account scored about 2.0× the next candidate, line”. That margin is the difference between one dominant driver and three plausible stories of which the biggest was taken, and it is worth reading before you act on the field it chose. It is deliberately a comparison rather than a second percentage, because two percentages measured differently side by side is the confusion these answers work hardest to avoid. Where only one field could be scored the answer says so rather than referring to a runner-up that does not exist.

Where the member table shows only the largest movers rather than every member, it now says how much of the change is actually on the page. A heading of “Top movers by account, sales_document (largest shown)” and a heading of “All movers by account” look alike and carry completely different weight: the second adds up to the change exactly, and the first can be a small and mixed corner of it. On one model twenty rows, none of them as much as $110,000, sat under a fall of $9,321,592.41 and came to $169,230.35 between them — thirteen down, seven up — so the table read as a noisy picture of the fall while accounting for under two per cent of it, and “(largest shown)” was the whole of the warning. The table now carries a line above its rows: how many of the rows shown move each way, what their sizes add to, what they come to on balance, what the change itself is, and that the difference is in the members not shown. It sits above the rows so it travels with them when they are copied out.

Both totals are given because either on its own is read as the other. The net alone — what the rows come to after the rises and falls cancel — reads as “these are noise, ignore them”, which is wrong when their sizes add to five times that amount; the gross alone reads as a net, which overstates what the table carries. Naming the two operations separately is what keeps them apart. No percentage is given, and that is deliberate rather than an omission: the rows shown can move against the change or outweigh it, so a share of the change is a figure that turns negative, exceeds a hundred per cent, or rounds away to nothing, and it needs different wording in each case for the same underlying fact. Two amounts printed beside the change answer the question at a glance and mean one thing in every result. A table that shows every member is untouched — it already adds up to the change by definition, and its heading says so.

On a table with several value columns, the member table the answer prints is the one for the column the agent searched — which is not the column the answer opens on. The heading said so, and that was all it said: on one automotive model the answer led with margin falling $10,701,036.06 and the only table on the page was headed “All movers by program — cost”, topped by a programme at -$40,680,000.00. Four characters of heading separated a cost figure from a margin question, so the top row read as the cause of the fall and carried a number four times the size of it. The table now says it itself, above the rows so it travels with them when they are copied: “These are cost figures. The answer leads on margin, where the biggest mover is not necessarily the one at the top here.” The wording states what the figures are before it says the order can differ, because knowing the ranking might differ does not stop you reading the top row as the cause. Where you name the breakdown yourself, every column gets its own table and the two always agree, so no such line appears.

On a table with several value columns, the breakdown the agent suggests answers on the column the answer leads with, which is not always the column it searched. On one model the story was found in cost and the suggested breakdown came back about margin — a different column, led by a different programme, with a top figure an order of magnitude smaller. Both were correct. The suggestion now names both columns and warns that the leading member can differ too, not only the percentage, so a list that opens with an unexpected name is not read as a contradiction. Where the answer covers a single column the two are the same and no such warning appears.

Where the strongest member’s shift is larger than the whole net change — routine on a pool where large rises and falls cancel out — the answer gives that size as a multiple rather than an absurd percentage: “by more than the whole net change in share-shift terms (11.7×)”. Where even that cannot be stated sensibly, it explains what the two measurements are without promising that they will visibly differ.

Every answer also ends with suggested next steps, in the order most likely to help. Where the answer warns that large rises and falls are cancelling out, the first suggestion narrows the question to the single member behind the movement — the one whose own rise or fall is largest against the headline change — and running it gives that member’s own change, usually with the warnings cleared. The offer to break the change down by a field is kept below it, because on an offsetting result the breakdown mostly re-states the movement the answer has already shown you.

That warning states the test it applied, so you can check it: it appears where one member’s movement, that member’s shift in share of the pool, or one factor’s contribution is at least a quarter larger than the whole net change. Three measures rather than one, because a member’s share of the pool can move by several times what the member itself does — so a rule naming only the member would be checkable and, on those answers, wrong. It used to explain itself as “the top mover alone exceeds the net delta”, which is a different and looser test than the one the agent uses — so a reader who took it at face value and checked it on the next answer found the rule apparently broken. A movement that is larger than the net change but not by a quarter is a mild overshoot rather than the churn this warning exists for, and those answers are rated on their merits without it.

The warning then gives the measurement, so you can see how far past that quarter the answer actually is: “Here account=LAE moved +$22,067,919.71, larger in size than the whole net change of +$1,792,719.72.” The threshold is a floor and the reports it fires on are usually well clear of it — an insurance model at twelve times the net change reads the same as one at one and a half unless the figure is stated. Both figures carry their sign, and the comparison is on size, so a member that fell inside a total that rose reads as the offsetting movement it is. Where what tripped the warning was not a single member’s own movement — a shift in share of the pool, or one factor’s contribution — the sentence names that measure instead and quotes no figure, because the figure for those is already stated elsewhere in the answer or would sit beside a different one and read as a contradiction.

An answer spanning several recombined branches offers one of those branches to follow. The agent does not trace a question back past the point where branches meet, so this is where it hands the thread back to you: it names a branch and the table to trace to pick it up on its own. The branch offered is the largest mover among those it can name and did attribute — where it could attribute none of them it keeps its plain refusal instead — and it does not describe itself as the largest for that reason — the per-branch list above it already shows every branch’s move, so you can see the ranking for yourself.

  • Name the table and the period. “Why did cost_line_rev change from 2025-01 to 2025-02?” gets a sharper answer than “why did costs change?”.
  • Pick a real before and after period with a movement you can sanity-check.
  • If the agent analyzes the wrong table, name the project and table explicitly so it doesn’t have to guess.