A polished agent demo shows a happy path: a goal, a few tool calls, a neat answer. Production agents fail on permissions, infinite loops, silent tool errors, and missing stop conditions. McKinsey’s 2025 survey still finds agents rarely scaled inside individual functions—under 10% in any given one. The gap is mostly engineering, not prompting.
Tools are an API surface
Every tool is a capability with inputs, side effects, and failure modes. Define schemas, validate arguments, and decide what happens when the tool times out or returns garbage. An agent that “can call Slack” without rate limits or allowlists is a liability.
Permissions before autonomy
Map which identities the agent assumes and which resources it may read or write. Default to draft-only for anything external. Promote to auto-execute only after you have traces, evals, and an owner who will get the page at 2 a.m.
Loops need budgets and stops
Set step limits, time limits, and spend limits. Define success and failure so the agent cannot wander. If it cannot make progress, it should hand off with the trace—not invent another plan forever.
Observability is part of the feature
Log prompts, tool calls, intermediate state, and final actions in a form a human can replay. Without that, you cannot debug, evaluate, or trust a wider rollout.
Ship a narrow workflow with these pieces before you market “autonomy.”