Everyone’s building AI agents. Most shouldn’t be. An agent is an AI that autonomously plans, executes, and iterates — using tools, MCP servers, and multi-step reasoning. It’s powerful. It’s also expensive, unpredictable, and often unnecessary.
Here’s when a simpler approach is better.
When NOT to use an agent
1. The task is deterministic
If the same input always needs the same output, use a function, not an agent.
Bad: An agent that converts CSV to JSON (it’ll do it differently each time) Good: A Python script that converts CSV to JSON (deterministic, free, instant)
2. The task is a single LLM call
If you just need to summarize text, classify a ticket, or extract data — that’s one API call, not an agent.
Bad: An agent with planning, tool use, and iteration to summarize an email
Good: response = llm("Summarize this email: " + email) — done in 2 seconds
3. The cost of failure is high
Agents make mistakes. They hallucinate, call wrong tools, and go down rabbit holes. For high-stakes decisions (financial, medical, legal), a human-in-the-loop is safer than an autonomous agent.
Bad: An agent that autonomously approves loan applications Good: An AI that recommends a decision, human approves
4. You can’t afford the latency
Agents are slow. A multi-step agent workflow takes 10-60 seconds. If your user expects a response in under 2 seconds, use a single LLM call or a cached response.
5. You can’t afford the cost
Each agent step is an API call. A 10-step agent workflow costs 10x a single call. At Claude Opus pricing ($15/1M tokens), a complex agent task can cost $0.50-5.00 per execution.
For high-volume use cases, model routing with cheap models or self-hosting is more practical.
6. The task doesn’t need iteration
Agents shine when they need to try, fail, adjust, and retry. If the task succeeds on the first attempt 95% of the time, the agent overhead (planning, tool selection, evaluation) is wasted.
7. You can’t observe what it’s doing
If you don’t have logging and observability, don’t deploy an agent. When it goes wrong (and it will), you need to understand what happened.
When agents ARE the right choice
- Multi-step coding tasks — Claude Code, Aider need to read files, edit, test, iterate
- Research workflows — search, read, synthesize, verify across multiple sources
- Complex data processing — tasks that require conditional logic and error recovery
- Parallelizable work — Kimi’s Agent Swarm for batch operations
The decision framework
Can a script do it? → Use a script
Can a single LLM call do it? → Use a single call
Does it need iteration? → Maybe an agent
Does it need multiple tools? → Probably an agent
Is failure acceptable? → Agent is fine
Is failure catastrophic? → Human-in-the-loop
The honest take from our race
In the AI Startup Race, we run 7 AI agents autonomously. They’re impressive when they work — Kimi planned a full Product Hunt launch, Claude wrote 20 blog posts. But they also waste time spectacularly — Gemini spent 5 days fighting deploy errors, Codex ran the same deploy check 15 times in a row.
Agents are powerful but not magic. Use them where they add value, not because they’re trendy.
The cost of agent overhead
Every agent step has overhead: planning tokens, tool selection tokens, evaluation tokens. A simple task that takes one LLM call (500 tokens) might take an agent 5 calls (5,000 tokens) to accomplish the same thing.
| Approach | Tokens used | Cost (Claude Sonnet) | Time |
|---|---|---|---|
| Single LLM call | 500 | $0.002 | 2s |
| Simple agent (3 steps) | 3,000 | $0.012 | 10s |
| Complex agent (10 steps) | 15,000 | $0.060 | 45s |
That’s a 30x cost difference for the same output. At scale, this matters.
Signs you need an agent (vs a simpler approach)
You probably need an agent if:
- The task requires multiple tool calls in sequence
- The next step depends on the result of the previous step
- The task might fail and need retry with a different approach
- You need human-like judgment at multiple decision points
You probably don’t need an agent if:
- The task is a single transformation (summarize, translate, classify)
- The steps are always the same regardless of input
- You can hardcode the workflow in a script
- The task needs to complete in under 2 seconds
The hybrid approach
The best production systems combine agents and simple calls:
async def handle_request(user_input):
# Step 1: Classify (single call, cheap model)
category = await classify(user_input, model="deepseek-chat")
if category == "simple_question":
# Step 2a: Direct answer (single call)
return await answer(user_input, model="claude-sonnet")
elif category == "complex_task":
# Step 2b: Agent workflow (multi-step)
return await run_agent(user_input, model="claude-opus")
Route simple tasks to simple calls. Reserve agents for tasks that genuinely need them. This cuts costs by 60-80% while maintaining quality where it matters.
See our multi-agent guide for building agents when you do need them, and our cost optimization guide for keeping spending under control.
Related: How to Build Multi-Agent Systems · How to Choose an AI Coding Agent · Tool Calling Patterns · How to Reduce LLM API Costs · Agent Orchestration Patterns