Stop Calling It an “Agent”: Shipping Real AI Automation Instead of Demo Theater

Why this matters this week
Two things are colliding right now:
- Vendors are rebranding everything as “AI agents” and “copilots.”
- Teams are under pressure to “do something with AI” that actually cuts cost or increases throughput, not just produce a slide.
If you run real workloads, you already know:
– RPA is brittle.
– Manual swivel-chair operations don’t scale.
– “GenAI in the chat widget” doesn’t move your EBITDA.
What’s new is that AI automation is starting to replace pieces of RPA and human glue in narrow, well-instrumented workflows. Not “general agents that can do anything,” but bounded automations that:
- Consume structured events (tickets, orders, alerts, forms)
- Call multiple tools (APIs, DBs, SaaS)
- Use LLMs only for judgment, transformation, and edge cases
- Emit structured outputs into existing systems (CRM, ERP, queue, code repo)
If you care about reliability, security, and unit economics, the question is no longer “Should we use AI agents?” but:
“What parts of our workflows can be safely turned into AI-backed state machines with measurable impact?”
This post is about that, and only that.
What’s actually changed (not the press release)
Three concrete shifts in the last ~12 months make AI automation useful in production for real businesses:
-
LLMs got “good enough” at structured reasoning under constraints
Not “AGI good,” but:- Robust JSON/XML generation with constrained decoding
- Tool-use (function calling) that works across multiple steps
- The ability to follow narrow operating procedures if you spell them out
This matters because you can now treat the model as:
- A policy engine within a bounded state machine
- A classifier/extractor for semi-structured enterprise mush (emails, PDFs, tickets)
- A router between different downstream tools
-
Orchestration frameworks are converging on similar patterns
Under the branding differences, most viable systems share:- Event-driven triggers (webhooks, queues, cron)
- Declarative workflows or DAGs (state machines, steps, guards)
- Tool abstractions around your internal APIs / DBs
- Strong logging/telemetry around prompts, model calls, and decisions
- Human-in-the-loop hooks
You could use a vendor product, or you can compose:
- Queue + workflow engine (Temporal / Airflow / homegrown)
- LLM + tool-calling library
- Audit/log storage
-
Costs and latency have dropped enough for “in the loop,” not “offline”
You can feasibly:- Put LLM judgment calls on the critical path of a ticket workflow
- Run multiple attempts / self-checks on a single item
- Backtest prompts on historical data sets to tune accuracy vs. cost
This doesn’t mean “replace whole jobs.” It means:
- Replace 20–60% of the steps in recurring workflows with AI-driven automation.
- Keep humans for exception handling, safety checks, and policy edge cases.
How it works (simple mental model)
Forget mystical “agents.” Use this mental model instead:
Event → Gatekeeper → Orchestrated Tools → Output + Feedback
-
Event: Something happens in your system
- New support ticket created
- Invoice received via email
- Monitoring alert fired
- Lead form submitted
-
Gatekeeper: Decide if this is eligible for AI automation
Often an LLM or simple rules engine that:- Classifies event type
- Checks for missing required data
- Applies basic policy (e.g., “don’t auto-handle VIP customers”, “don’t touch payments > $X”)
Output:
eligible = true/falseworkflow_type = "billing_dispute" | "password_reset" | ...risk_level = low/medium/high
-
Orchestrated Tools: A state machine, not a chat
Define a workflow perworkflow_type. Each step:- Calls tools (your APIs, search, DB, third-party services)
- Optionally calls an LLM to:
- Decide next step
- Transform or enrich data
- Draft communication
- Evaluates guards: “Are we still within safe bounds?”
Think:
“`text
State S1 (Gather context)
-> tools: CRM.getCustomer, Billing.getInvoices
-> LLM: summarize context for decisionState S2 (Decide recommended action)
-> LLM: choose action from {refund, requestmoreinfo, escalate}
-> guard: if refund > $1000 => route to humanState S3 (Act + log)
-> tools: Billing.issueRefund, Ticket.update, Email.sendDraft
“` -
Output + Feedback
- Writes back to source systems
- Annotates records with:
- Automation confidence
- Steps taken
- Reasoning trace (or a redacted version of it)
- Captures feedback:
- Human overrides
- Customer satisfaction
- Downstream errors
That feedback feeds:
- Prompt updates
- Guardrail adjustments
- Eligibility criteria
This is AI workflow automation, not “a magic agent.”
The LLM is mostly a decision and transformation layer inside a deterministic skeleton.
Where teams get burned (failure modes + anti-patterns)
1. “Chatbot-shaped brain” for non-chat problems
Anti-pattern:
– Implementing everything as a chat session with tools.
– No explicit states, no clear finish condition, no timeouts.
Result:
– Unreliable behavior, hard to reason about cost.
– Production incidents that are hard to debug (“The agent just… decided to do X.”).
Fix:
– Start with explicit states and transitions.
– Treat the LLM as a pure function: input → output, with strict schemas.
– Only use multi-turn “agent” loops when you truly need iterative planning.
2. No hard constraints on what the automation is allowed to do
Anti-pattern:
– Granting broad API access (e.g., “the agent can call anything the human can”).
– Relying purely on prompt text like “never refund more than $1000.”
Result:
– Policy drift when prompts change or models are upgraded.
– Rare but catastrophic violations (e.g., wrong refunds, data exfiltration).
Fix:
– Enforce constraints in code, not just prompts:
– Parameter caps (max refund, max quantity, etc.)
– Allow-lists of callable methods per workflow/state
– PII redaction before LLM calls when possible
– Design tools as capability-scoped (e.g., IssueRefund(maxAmount=1000)).
3. Skipping ground truth and evaluation
Anti-pattern:
– Rolling out automation based on “it looks good in staging.”
– No labeled dataset, no per-workflow metrics.
Result:
– Surprises in production.
– Impossible to answer “Is this better than our human baseline?”
Fix:
– For each candidate workflow:
– Build a stratified sample (e.g., 500 historical tickets).
– Label the “correct” outcome (policy-aligned) and any key fields.
– Offline-run the automation; measure:
– Accuracy of decisions
– Error severity, not just count
– Cost per item vs. current process
– Only promote to “real” automation once you have numbers.
4. Over-ambitious scope: “End-to-end first”
Anti-pattern:
– Trying to fully automate a complex, multi-system process on v1.
– Skipping human-in-the-loop because it’s “not cool.”
Result:
– Months of integration with nothing shipped.
– Risk aversion from leadership after the first visible mistake.
Fix:
– Aim for:
– Assist mode first: automation drafts, human approves.
– Then move to auto for low-risk slice (e.g., 30% of volume).
– Progressive rollout toggles:
– OFF → ASSIST → AUTO_LOW_RISK → AUTO_BROAD
with the ability to roll back per workflow.
5. Treating LLM prompts as “fire and forget”
Anti-pattern:
– One-shot prompt, never revisited, no versioning.
– Prompt edits deployed ad hoc without backtesting.
Result:
– Silent regressions after seemingly innocuous changes.
– “It used to work…” with no way to pinpoint why.
Fix:
– Treat prompts like code:
– Version them.
– Tie them to evaluation runs.
– Require a quick offline eval before deploying changes to a critical workflow.
Practical playbook (what to do in the next 7 days)
The goal: Identify and build v0 of one AI automation that saves measurable time or cost.
Day 1–2: Inventory and pick one workflow
-
Pull a list of candidate workflows:
- Repetitive, high volume (1000+/month).
- Currently handled by humans or RPA.
- Mostly digital, with data in your systems.
-
Prioritize by:
- Risk: start with low monetary / compliance impact.
- Data clarity: fewer free-text dependencies is easier.
- Containment: can you flip it on/off by a feature flag?
-
Examples that tend to work early:
- Tier-1 support triage + reply drafts for common issues.
- Invoice classification + GL code suggestion.
- Lead enrichment + routing suggestion.
- Simple IT helpdesk (password reset, access requests).
Pick one. Resist the urge to boil the ocean.
Day 3: Map the workflow into states
For your chosen process:
-
Write down the current manual steps as a linear script:
- Read ticket
- Look up customer
- Check entitlement
- Decide if this is known issue
- Apply fix or ask for more info
- Update ticket and send message
-
Convert to 3–5 states with clear I/O:
GatherContextDecideActionApplyActionCommunicateAndClose
For each state:
– Inputs it requires.
– Tools it will call.
– Decisions it must make (where LLM may help).
– Safety constraints.
Day 4–5: Build a thin vertical slice
Use whatever stack you already have (workflow engine, serverless, plain cron + worker). Minimum implementation:
- Event trigger from your real system (ticket created, email received, etc.).
- Simple gatekeeper:
- Limit to a single queue / customer segment.
- Filter by
