Implement the core orchestration logic for a simple multi-agent system in the Databricks Agent Framework. You have three agents: RetrieverAgent (fetches context from Vector Search), SQLAgent (answers structured data questions over Unity Catalog tables), and WriterAgent (produces the final response). Given a user request and conversation state, write code that routes the request to one or more agents, prevents infinite loops, records an execution trace, and merges intermediate outputs into a final answer. The router should use simple rules or scoring heuristics, not a full planner. Expected solution outline: define agent interfaces, maintain step budget / visited-agent tracking, implement routing based on request classification, collect tool outputs, and explain failure handling and observability in an agentic Databricks stack.