My AI Agent Has 100 Tools. Why Should I Send All 100 to the LLM?
I recently came across an interesting problem while thinking about AI agents. Imagine an enterprise agent with 100+ tools: Search Wazuh Query Microsoft Sentinel Check DNS Check IP reputation Query EDR Search AWS Cloud
I recently came across an interesting problem while thinking about AI agents.
Imagine an enterprise agent with 100+ tools:
- Search Wazuh
- Query Microsoft Sentinel
- Check DNS
- Check IP reputation
- Query EDR
- Search AWS CloudTrail
- Query PostgreSQL
- Search OpenSearch
- Create Jira ticket
- Send email
- Restart service
- Block IP
- Get user information
- Get asset information
- And many more...
Now a user asks:
"Investigate this suspicious login from 10.20.30.45."
How does the agent decide what to do?
The obvious solution is:
Send all 100 tools to the LLM and let it choose.
But this creates a practical problem.
The larger the tool catalog becomes, the more information we have to put into the agent's context.
More tools β more tokens β more latency β more chances of selecting the wrong tool.
So I started looking at a different architecture.
Don't ask the big LLM to make every small decision
Instead, separate the problem into two layers.
Layer 1 β Reasoning
The LLM understands the user's objective:
"The user wants to investigate a suspicious login."
Layer 2 β Decision
A small decision engine determines:
"Which of these available tools is relevant?"
For example:
User Request
|
v
Reasoning LLM
|
Understand intent
|
v
Decision Layer
|
+-------------+-------------+
| | |
Wazuh EDR DNS
| | |
+-------------+-------------+
|
v
Execute Tool
This is where Jev becomes interesting.
Jev is designed for bounded, typed decisions such as Choice, Score and Noul, rather than generating a paragraph of text. The current Jev ecosystem contains examples for tool routing, model routing, guardrails and agent workflows.
A practical example
Let's say our agent has these candidate tools:
tools = [
"search_wazuh",
"query_edr",
"check_ip_reputation",
"query_dns",
"query_cloudtrail",
"create_jira_ticket"
]
The agent has already understood the user's intent.
Now instead of asking the main LLM:
"Which tool should I call?"
we can formulate a bounded decision:
Which tool is most relevant?
1. search_wazuh
2. query_edr
3. check_ip_reputation
4. query_dns
5. query_cloudtrail
6. create_jira_ticket
The decision layer returns something like:
search_wazuh: 0.82
query_edr: 0.11
check_ip_reputation: 0.05
query_dns: 0.01
query_cloudtrail: 0.01
create_jira_ticket: 0.00
Our application can then apply its own policy:
if confidence > 0.75:
execute(selected_tool)
else:
ask_llm_for_more_context()
Notice something important.
The decision engine does not execute anything.
Our application still controls execution.
That separation is important for enterprise systems.
What happens when we have 100 tools?
We can take this further.
Instead of:
100 tools
β
LLM
we can use a two-stage approach:
100 tools
β
Decision layer
β
10 candidate tools
β
LLM reasoning
β
1 selected tool
β
Execution
Or even:
100 tools
β
Jev
β
20 relevant tools
β
Jev
β
3 candidates
β
LLM
β
Final selection
This is particularly interesting for MCP-based agents, where the number of available tools can grow rapidly.
The Jev project ecosystem already includes examples of discrete tool pruning and routing for large tool catalogs.
Why not just use rules?
A fair question.
We could write:
if "login" in request:
use_wazuh()
elif "endpoint" in request:
use_edr()
elif "ip" in request:
use_ip_reputation()
This works initially.
But enterprise requests are rarely that clean.
Consider:
"A user logged in from an unusual location and shortly afterwards accessed a sensitive server. Can you investigate?"
Now the decision depends on the meaning of the request, not just keywords.
This is where a semantic decision model can be useful.
The application still owns the hard rules.
The decision model handles the fuzzy part.
Another important separation: Decision β Policy
I think this is one of the most important architectural ideas.
Don't do:
Jev says BLOCK
β
Immediately block the IP
Instead:
Jev
|
Risk = HIGH
|
v
Policy Engine
|
+---------+---------+
| |
Allowed Approval
| |
v v
Execute Human review
The model provides a decision signal.
The application provides the policy.
That makes the system easier to audit and control.
The same architecture works outside cybersecurity
Once you see the pattern, many use cases appear.
Customer support
Customer message
β
Decision
β
Billing / Technical / Sales / Security
Model routing
User request
β
Decision
β
Small LLM / Coding LLM / Reasoning LLM
RAG
50 retrieved documents
β
Decision
β
Top relevant candidates
β
LLM
AI governance
AI wants to perform an action
β
Risk decision
β
Low risk β execute
High risk β human approval
DevOps agent
Incident
β
Decision
β
Logs / Metrics / Kubernetes / Cloud / Database
The common pattern is:
LLM for reasoning.
Decision model for bounded choices.
Code for execution.
Policy engine for control.
The architecture I find most interesting
For an enterprise AI platform, I would consider:
User
|
v
AI Agent / LLM
|
Understand task
|
v
+----------------+
| Decision Layer |
| Jev |
+-------+--------+
|
+------------+-------------+
| | |
Routing Risk Tool
Decision Decision Selection
| | |
+------------+-------------+
|
v
Policy Engine
|
+------+------+
| |
Allow Approval
| |
+------+------+
|
v
Tool / API
|
v
Result
This gives us something different from simply putting an LLM in front of every API.
It gives us a decision architecture.
The bigger question
I don't think the interesting question is:
"Can Jev replace an LLM?"
That's the wrong comparison.
The more interesting question is:
"Why should a large generative model make every small decision inside an AI agent?"
For complex reasoning, keep the LLM.
For bounded decisions, routing, scoring, classification and verification, a specialized decision layer may be a better architectural fit.
That separation could become increasingly important as AI agents move from simple chat interfaces to systems with hundreds of tools, APIs and autonomous workflows.
I'm currently exploring this architecture:
LLM β Decision Layer β Policy β Tools β Execution
rather than:
LLM β Everything
And I think this is a pattern worth experimenting with.
AI #AgenticAI #LLM #AIAgents #MCP #AIArchitecture #Cybersecurity #GenerativeAI #Automation #Jev
Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes β full credit and traffic to the original publisher.