Where the agent sits in the workflow

An agent is a step in someone's week, and attention is the budget it spends.

The idea

A working agent is not judged on its outputs. It is judged on what somebody's week looks like afterwards. So the design questions are about placement: what fires it, how often it is allowed to speak, what it hands over and when, and what it does on the days it has nothing useful to say.

Two dials decide most of it. A confidence threshold chooses what it handles by itself against what it passes up, and moving it trades errors for escalations. A cadence cap limits how many times a day it may interrupt, which protects the one resource that does not scale.

The failure that ends most internal agents is not a wrong answer. It is being noisy enough that people stop reading it, at which point the correct outputs stop counting too.

A working week of items, each handled, escalated, held or left alone by the agent, with running totals of time saved and interruptions created

How it works

The routing is three branches and a budget. Everything interesting is in where the two numbers are set.

def route(item, threshold, budget_left):
    if item.confidence >= threshold:
        return "handle" if budget_left else "hold"     # cap protects attention
    if item.confidence >= threshold - 25:
        return "escalate" if budget_left else "hold"   # ask, do not guess
    return "quiet"                                     # nothing useful to say

def run_day(items, threshold, cap, trigger):
    budget = cap
    routed = []
    for item in sorted(items, key=lambda i: -i.confidence):
        action = route(item, threshold, budget)
        if action in ("handle", "escalate"):
            budget -= 1
        routed.append((item, action))
    # a digest is one interruption for the whole day; per-event is one each
    speaks = [r for r in routed if r[1] in ("handle", "escalate")]
    interruptions = (1 if speaks else 0) if trigger == "digest" else len(speaks)
    return routed, interruptions

Sorting by confidence before spending the budget matters: the cap should be spent on what the agent is surest about, not on whatever arrived first.

Cost

ChoiceTime savedAttention spentRisk
Daily digestHighOne interruption a dayLatency: urgent things wait for the digest
On every eventHighOne per itemNotification fatigue, then it gets muted
Only when askedLowNoneDepends on someone remembering it exists
Lower the thresholdMore handledSameMore handled wrongly, and cleanup costs double

Cleanup is the number people forget to model. An item the agent gets wrong does not cost zero, it costs more than doing it by hand, because someone has to notice, undo, and redo it.

Watch out for

Worked example

A marketing lead spends three hours every Monday assembling a performance digest from three tools. The agent's job is that assembly.

Set it as a daily digest at 08:00 with a cadence cap of one, because the whole point is a single artifact. Set the confidence threshold high, so anything it is unsure about is escalated inside that same digest rather than asserted. On a day where nothing moved, it says so in one line and stops.

Now try the panel with the threshold at 55 and the trigger set to every event. More items get handled, the tally of time saved goes up, and so does the count of items handled wrongly, each costing double to undo. The interruption count climbs from one a day to a dozen. Both configurations "work". Only one of them is still being used in a month.

Check yourself

Your triage agent handles 80% of tickets correctly and escalates the rest. Adoption is falling and people say it is "noisy". What do you change first?