Agustin Robledo

Fullstack developer and photographer

Agent decision card

2026

  • agents
  • spend-policy

Marisol & Finch

Oct 18, 2026

$412.80

Analyzing

Checking the expense against the meals policy.

9:41 · Card · Card charge posted

Was the agent right?

The card plays one expense through from the start. A $412.80 dinner posts, the agent checks it against the meals policy and holds it for review because there is no receipt. Request receipt asks the employee for it, and a few seconds later it arrives and the agent checks again. The control below the stage picks what the receipt says. Six guests comes in under the cap and four goes over it. Replay starts the flow again.

There is no state switcher, because in a real queue nobody jumps between states. Most of the changes are not yours to make. The charge posts, the agent decides, the employee uploads. The card has to say what moved and who moved it without turning into a feed, so it shows one line with the latest event, its time and who did it, and slides the next one in over it. The full log sits under History for when you need to audit it.

The main button follows the agent. It says Approve when the agent recommends approval, Reject when it recommends rejection and Request receipt when it cannot decide yet. While the agent is still checking, the pair is a plain Reject and Approve with neither one leading, so the buttons never hint at a verdict that does not exist yet. The other button goes against the agent and asks for a reason first, because a bare click is hard to audit later. Once resolved, the card keeps the evidence in view and asks whether the agent was right. That feedback is separate from the decision on purpose, since you can follow the agent and still think its reasoning was off.

The checks behind the verdict stay closed under Why, which only appears once there is a verdict to explain. The policy chip opens the exact policy text with its version, and highlights the one clause the verdict rests on, with this expense's number checked against it.

The fields the AI fills in wait for the agent. Until its first pass ends they are empty bars, and when the receipt arrives the old guess stays until the agent has read it. Provenance is on every field, but it is quiet. AI, Person and Rule are small neutral marks, so the eye skips them. Only low confidence breaks that. The value is shown as an estimate, with a note saying where the guess came from, and the words Low confidence sit in a tinted badge. An underline was the first try, but it read as a link.

The verdict is never stored. It is computed from the expense and the policy every time, so a receipt the agent has read is just new data and the outcome follows from it. The flow is a reducer with one step at a time (analyzing, recommended, waiting on the receipt, overriding or resolved), and every step appends to the log the ticker reads from.

Nothing jumps. The card is one size in every state, with the actions on its bottom edge, and the evidence band takes whatever height is left. Inside it each block that changes size eases on its own. That covers the verdict and its reason, Why when it appears and the fields when the guess becomes a count. When Why opens past the bottom, the band scrolls and fades at the edge with more to show. An earlier version let the card follow its content, and it shrank toward the top once the decision was made.

Keyboard and access

Keyboard
Everything is a real button or field. Why opens the checks, the policy chip opens the exact policy text and History opens the full log. Request receipt keeps focus on the card while the agent waits and checks again. The button that goes against the agent moves focus into the reason field, Enter confirms once there is a reason, and Escape cancels and returns focus to that button. After a decision focus lands on Undo, and Undo returns it to the main button. Replay sits at the end of the control bar.
Screen readers
The status is always words with an icon, never colour alone. A polite live region reads each change: the status with the latest event while the agent works or waits, and the recommendation with its reason once it decides. The card is marked busy while it works. Each field carries a visually hidden source such as "Filled by AI", and low confidence is written out as text, with the value marked as an estimate and a note on where it came from. The log is an ordered list.
Reduced motion
With reduced motion the status swaps without a blur, new events replace the ticker line in place, blocks change height at once instead of easing, and the analyzing spinner holds still.