Skip to content

Agent Discovery

When a reasoner runs, it calls the LLM with tools="discover":

  1. Agent queries GET /api/v1/discovery/capabilities on the control plane
  2. Control plane returns all registered skills and reasoners across the mesh
  3. SDK converts these to LLM function schemas (name, description, parameters)
  4. LLM decides which tools/agents to call based on the system prompt
  5. Calls route through the control plane back to the target agent
  6. Results flow back to the calling LLM

Each discovered capability becomes a callable function:

{
"type": "function",
"function": {
"name": "fast-analytics-agent__think",
"description": "Answer questions about brand/category performance...",
"parameters": {"type": "object", "properties": {"trigger": {"type": "string"}}}
}
}

Agent descriptions come from the Agent(description=...) constructor and function docstrings. FAM patches the SDK to include these in discovery responses.

Tags on reasoners and skills help the LLM understand capabilities:

AgentRouter(prefix="", tags=["analytics", "brands", "categories"])
customer-agent.think
→ discovers fast-analytics-agent.think
→ calls it via control plane execution gateway
→ fast-analytics-agent discovers fast_query tool
→ calls external FAST API
→ result flows back through the chain

All calls share a run_id for tracing the full call chain.