· Agent Backbone Briefing #1 · Published by Tool Use Cases (Lali Publications)
Issue #1: 5 Ways Production AI Agents Quietly Break (And the Deterministic Fixes)
Most AI agents look great in a five-minute demo and quietly degrade in week three of production. The failure is almost never that the foundation model "got dumber." Instead, production drift comes from five repeatable architectural traps: unconstrained writes on low-confidence spans, flat tool menus that blur attention past ~15 tools, bloated system prompts stuffed with FAQs, checker agents that share the worker's reasoning context, and multi-turn conversations where each user correction drops an earlier constraint.
When we evaluate a live support, voice, or workflow agent across 8 to 15 real production turns, we don't rewrite prompts by guesswork. We score every output from 1 to 5 across four weighted criteria (Accuracy & Policy Adherence 35%, Conciseness & Clarity 25%, Tone & Brand Alignment 20%, Actionability & Next Steps 20%), group every failure by frequency into Primary, Secondary, and Minor weaknesses, and apply deterministic structural fixes.
Here are the five failure modes we see most often in production agents right now—and the exact deterministic fixes that stop them.
1. Silent Bad Writes Masquerading as Completed Tasks
What goes wrong in production: An outbound voice agent calling insurance payers or a customer intake bot extracts structured fields (claim status, policy dates, caller name) after a call. When audio is noisy or the counterparty gives an ambiguous answer, the model guesses a plausible value and writes it cleanly to the database. Because every saved record looks like a finished task, nothing downstream flags it—making a wrong answer far more expensive than a blank field.
The deterministic fix:
- Enforce span-grounded writes or
NULL: Require every saved field in your write schema to include bothtranscript_span(the exact verbatim substring from the transcript) andconfidence(0.0–1.0). Ifconfidence < 0.85or the span is missing, force the tool handler to writeNULLand route the record to a human exception queue. - Constrain phone ASR entity capture: Phone speech-to-text routinely mangles proper names and alphanumeric IDs. Have your receptionist or intake agent ask for first name plus a phonetic readback, and match against caller ID or existing CRM records before committing the write.
2. Tool Blindness Past ~15 Tools (And Nested Skill/Mode Menus)
What goes wrong in production: You give an agent more abilities—expanding from 6 tools to 20+, or introducing a "master skill with sub-modes." Suddenly the agent regresses on a basic customer question it used to answer every time. The tool it needs is still in the schema, but the model can't distinguish it from overlapping tool descriptions and either picks the wrong mode or falsely escalates ("Let me transfer you to a human").
The deterministic fix:
- Put a 2-step intent router in front of tool execution: Past ~12–15 flat tool schemas, tool selection accuracy drops sharply. Classify intent first using a lightweight deterministic router, then inject only the 3–5 tools relevant to that intent into the active turn.
- Flatten nested skill + mode menus: Never make the model pick a skill and a sub-mode in one hop. Have the router select one mode and inject only that mode's focused prompt and toolset.
3. Voice & Support Prompt FAQ Stuffing (Policy Invention & Rule Skipping)
What goes wrong in production: When a support or voice agent stalls on specific questions—like property locations, cancellation windows, or refund rules—teams respond by stuffing more FAQs and edge-case rules into the system prompt. Within weeks, the system prompt balloons past 2,000 tokens. Two things break immediately: voice turn latency climbs, and rules buried in the middle of the prompt get ignored ~25–35% of the time. Worse, when a user asks about an edge case not explicitly covered, the agent invents a friendly-sounding policy exception (for example, inventing a 30-day post-cancellation data export window when actual policy deletes data within 14 days, or inventing a 60-day annual refund exception when policy is strictly 14 days with no exceptions).
The deterministic fix:
- Cap the core system contract at 400–500 tokens: Keep only role, hard behavioral rules (never invent policy exceptions; answer only the question asked in ≤6 sentences; state exact policy on billing, cancellation, data retention, and refunds; close with one concrete next step or explicit limit), and an internal policy summary table.
- Move volatile FAQs to a fast keyed lookup tool: Fetch property facts, location details, or SKU rules on demand via a deterministic lookup tool keyed by ID rather than preloading every FAQ into the prompt.
- Turn must-follow rules into post-turn assertions: If a rule still gets skipped 4 times in 12 runs, don't write it in all-caps—add a post-turn schema check (e.g., sentence count ≤6, no unverified policy promises) that blocks completion and triggers a targeted rewrite on failure.
4. Worker + Verifier Shared-Context Rubber-Stamping & Stage-Handoff Distrust
What goes wrong in production: Teams add a "checker agent" to review a worker agent's output, only to wake up at 2 AM and find both agents confidently agreed on the wrong answer. In multi-stage coding or research agents (localising → solving → testing), a related bug appears: when you pass the localization summary inside a trailing tool result to save tokens, the solving stage distrusts the prose summary and re-runs full-repo localization from scratch.
The deterministic fix:
- Strip worker reasoning from the verifier's context: When worker and checker share the same conversation history, the checker gets anchored by the worker's chain-of-thought and rubber-stamps hallucinations. Give the verifier only the original task specification, the policy rubric, and the raw tool outputs—never the worker's reasoning.
- Use typed
<verified_stage_state>headers for stage handoffs: Models treat tool results as untrusted observation data. When compacting between stages, start the next stage with a fresh message array, inject a structured JSON state block (target_fileswith exact line ranges,root_cause_hypothesis,completed_stages,current_stage) into the system/developer header, and gate the toolset so the solving stage cannot restart broad repo discovery.
5. Multi-Turn Constraint Regression ("Whack-a-Mole" Drift) & Unconstrained Shell/State Calls
What goes wrong in production: A user gives an agent three constraints on turn 1 (e.g., fixed budget table, no rental car, 3 hours of daily downtime). Turn 1 is too packed. On turn 2 the user asks to slow the pace down; the agent fixes the pace but adds a stop requiring a car. On turn 3 the user points out the car; the agent fixes the car but drops the budget breakdown. Each correction crowds out earlier requirements. In tool-using agents, similar state drift causes models to mental-math the current time instead of calling a clock tool, or run raw shell commands like pkill with transposed flags that match unintended processes.
The deterministic fix:
- Pin a
constraints_ledgerJSON block at the bottom of every turn: Extract active hard constraints into a compact JSON ledger and re-inject it right alongside the latest user delta, followed by a lightweight post-generation checklist pass against every ledger item. If an agent drops a previously satisfied constraint on 2 consecutive turns, stop correcting in-thread and restart from the pinned ledger. - Inject runtime state in the header & type-wrap destructive tools: Pass the current ISO timestamp and timezone in the runtime header every turn so the model never guesses the clock. Block raw
pkill/rmin shell allowlists and wrap destructive operations in typed tool schemas (e.g.,kill_process_by_pid(pid: int)).
Want to benchmark your own agent? Use the complete 4-criteria weighted rubric and 8-question regression test template on our main Agent Backbone Rubric page, download the free printable PDF rubric, or write to larrys@lalipublications.com with your agent's failure pattern.
Tool Use Cases / Lali Publications · larrys@lalipublications.com