{"id":81063,"date":"2026-08-10T18:35:36","date_gmt":"2026-08-10T13:05:36","guid":{"rendered":"https:\/\/tothenewco.pro\/blog\/?p=81063"},"modified":"2026-09-01T15:53:58","modified_gmt":"2026-09-01T10:23:58","slug":"who-picks-the-next-step-you-or-the-llm","status":"publish","type":"post","link":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/","title":{"rendered":"Who Picks the Next Step \u2013 You or the LLM?"},"content":{"rendered":"<p><!-- TITLE: Who Picks the Next Step \u2014 You or the LLM? | EXCERPT: I built two agent apps in .NET before I understood they weren't the same thing. Here's what I learned \u2014 and how to choose the right pattern before you write code. --><\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 24px 0;\">\n<tbody>\n<tr>\n<td style=\"background-color: #faf8f3; border: 2.5px solid #2d2d44; border-radius: 8px; padding: 24px 28px;\">\n<p style=\"font-family: Arial,sans-serif; font-size: 13px; color: #5c5c7a; margin: 0 0 10px 0; letter-spacing: 0.5px;\">AUGUST 2026 \u00b7 ~7 MIN READ \u00b7 .NET \u00b7 AGENTIC AI<\/p>\n<h1 style=\"font-family: Arial,sans-serif; font-size: 34px; font-weight: bold; line-height: 1.25; color: #1a1a2e; margin: 0 0 8px 0;\">Who Picks the Next Step &#8211; <span style=\"background: linear-gradient(180deg, transparent 55%, #fff176 55%); padding: 0 2px;\">You<\/span> or the <span style=\"background: linear-gradient(180deg, transparent 55%, #f8bbd0 55%); padding: 0 2px;\">LLM<\/span>?<\/h1>\n<p style=\"font-family: Arial,sans-serif; font-size: 18px; color: #5c5c7a; line-height: 1.6; margin: 0; font-style: italic;\">I built two agent apps in .NET before I understood they weren&#8217;t the same thing. This is what I learned &#8211; and how you can build either one without rebuilding halfway through.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 28px 0;\">\n<tbody>\n<tr>\n<td style=\"background-color: #1a1a2e; border-radius: 8px; padding: 20px 24px;\">\n<p style=\"font-family: Arial,sans-serif; font-size: 12px; color: #a5b4fc; margin: 0 0 10px 0; letter-spacing: 1px; text-transform: uppercase; font-weight: bold;\">Key takeaway<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.7; color: #f8fafc; margin: 0 0 12px 0;\">Before you pick Semantic Kernel or roll your own pipeline, answer one question: <strong style=\"color: #fff176;\">who picks the next step &#8211; your code or the LLM?<\/strong><\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 16px; line-height: 1.7; color: #e2e8f0; margin: 0;\">Known stages and fixed order \u2192 you own the flow (pipeline). Open-ended user messages \u2192 the model picks tools (Semantic Kernel). I learned that the hard way by building both.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: center; margin: 0 0 28px 0;\"><img decoding=\"async\" class=\"aligncenter\" style=\"max-width: 100%; height: auto; margin: 0 auto; border-radius: 6px;\" src=\"https:\/\/tothenewco.pro\/blog\/wp-ttn-blog\/uploads\/2026\/08\/sticky-notes-comparison-1.png\" alt=\"Pipeline vs tool-calling sticky notes\" width=\"588\" \/><\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 24px 0;\">\n<tbody>\n<tr>\n<td style=\"background-color: #fffde7; border-left: 6px solid #fff176; border-top: 2px solid #e8e4da; border-right: 2px solid #e8e4da; border-bottom: 2px solid #e8e4da; padding: 16px 20px;\">\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0;\">It started with a simple goal: I wanted an AI that could take a rough product idea and turn it into something useful &#8211; requirements, architecture, a code plan, a review. The kind of output a small software team might produce over a week, but in minutes.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">I didn&#8217;t start by picking a framework. I started by asking: <em>who decides what happens next?<\/em><\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 28px 0;\">That question turned out to matter more than the model, the hosting, or the UI. I only wish I&#8217;d written it down before I shipped the first app &#8211; because I ended up building twice.<\/p>\n<h2 style=\"font-family: Arial,sans-serif; font-size: 26px; font-weight: bold; color: #1a1a2e; margin: 32px 0 14px 0; padding-bottom: 6px; border-bottom: 3px solid #f8bbd0;\">How I decide now (before opening Visual Studio)<\/h2>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">After building both apps, I sketch the same four questions. Your answers point you to one pattern &#8211; not both.<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 20px 0; border: 2px solid #2d2d44; border-radius: 6px; overflow: hidden;\">\n<thead>\n<tr style=\"background-color: #2d2d44;\">\n<th style=\"font-family: Arial,sans-serif; font-size: 14px; color: #faf8f3; padding: 11px 14px; text-align: left; width: 24%;\">Question<\/th>\n<th style=\"font-family: Arial,sans-serif; font-size: 14px; color: #fff176; padding: 11px 14px; text-align: left; width: 38%;\">You pick (pipeline)<\/th>\n<th style=\"font-family: Arial,sans-serif; font-size: 14px; color: #f8bbd0; padding: 11px 14px; text-align: left; width: 38%;\">LLM picks (tool-calling)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"background-color: #fffde7;\">\n<td style=\"font-family: Arial,sans-serif; font-size: 15px; font-weight: bold; padding: 12px 14px; border-top: 1px solid #e8e4da;\">User input<\/td>\n<td style=\"font-family: Arial,sans-serif; font-size: 15px; padding: 12px 14px; border-top: 1px solid #e8e4da;\">One idea in, staged deliverables out<\/td>\n<td style=\"font-family: Arial,sans-serif; font-size: 15px; padding: 12px 14px; border-top: 1px solid #e8e4da;\">Conversation &#8211; intent changes every message<\/td>\n<\/tr>\n<tr>\n<td style=\"font-family: Arial,sans-serif; font-size: 15px; font-weight: bold; padding: 12px 14px; border-top: 1px solid #e8e4da;\">Order of work<\/td>\n<td style=\"font-family: Arial,sans-serif; font-size: 15px; padding: 12px 14px; border-top: 1px solid #e8e4da;\">Fixed: PO \u2192 Architect \u2192 Dev \u2192 Review<\/td>\n<td style=\"font-family: Arial,sans-serif; font-size: 15px; padding: 12px 14px; border-top: 1px solid #e8e4da;\">Model chooses tools per turn<\/td>\n<\/tr>\n<tr style=\"background-color: #fffde7;\">\n<td style=\"font-family: Arial,sans-serif; font-size: 15px; font-weight: bold; padding: 12px 14px; border-top: 1px solid #e8e4da;\">What you write<\/td>\n<td style=\"font-family: Arial,sans-serif; font-size: 15px; padding: 12px 14px; border-top: 1px solid #e8e4da;\">Agent classes + one chain method<\/td>\n<td style=\"font-family: Arial,sans-serif; font-size: 15px; padding: 12px 14px; border-top: 1px solid #e8e4da;\">Plugins with <code style=\"background: #eee; padding: 1px 4px; font-size: 13px;\">[KernelFunction]<\/code> descriptions<\/td>\n<\/tr>\n<tr>\n<td style=\"font-family: Arial,sans-serif; font-size: 15px; font-weight: bold; padding: 12px 14px; border-top: 1px solid #e8e4da;\">Stack I used<\/td>\n<td style=\"font-family: Arial,sans-serif; font-size: 15px; padding: 12px 14px; border-top: 1px solid #e8e4da;\">Plain C#, <code style=\"background: #eee; padding: 1px 4px; font-size: 13px;\">IAIProvider<\/code>, SignalR<\/td>\n<td style=\"font-family: Arial,sans-serif; font-size: 15px; padding: 12px 14px; border-top: 1px solid #e8e4da;\">Semantic Kernel, ChatCompletionAgent<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 32px 0;\">Neither column is &#8220;better.&#8221; They answer different product questions. The expensive mistake is picking SK vs plain C# before you know who&#8217;s holding the baton.<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 32px 0 16px 0;\">\n<tbody>\n<tr>\n<td style=\"width: 8px; background-color: #ffcdd2; border-radius: 4px 0 0 4px;\"><\/td>\n<td style=\"background-color: #faf8f3; border: 2px dashed #cccccc; border-left: none; padding: 14px 18px;\">\n<h2 style=\"font-family: Arial,sans-serif; font-size: 26px; font-weight: bold; color: #1a1a2e; margin: 0;\">The first build: I became the conductor<\/h2>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">For the pipeline app, I mapped out the work the way a real team would. Product Owner first. Then Architect. Then Developer. Then Reviewer. The order wasn&#8217;t negotiable &#8211; requirements before design, design before code, code before review.<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 20px 0;\">\n<tbody>\n<tr>\n<td style=\"background-color: #e3f2fd; border: 2px solid #90caf9; border-radius: 4px; padding: 14px 18px;\">\n<p style=\"font-family: Arial,sans-serif; font-size: 16px; line-height: 1.6; color: #1a1a2e; margin: 0;\"><strong>Pipeline mental model:<\/strong> Product Owner \u2192 Architect \u2192 Developer \u2192 Reviewer. Fixed order. You own the choreography.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">Each agent became a C# class with a role and a prompt. They share a base that handles the LLM call and pushes status to the browser through SignalR:<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 20px 0;\">\n<tbody>\n<tr>\n<td style=\"background-color: #e6dff2; padding: 6px 14px; border: 2px solid #2d2d44; border-bottom: none; border-radius: 6px 6px 0 0; font-family: Arial,sans-serif; font-style: italic; font-size: 14px; color: #4a4a68;\">BaseAgent.cs &#8211; the pattern every agent shares<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #1e1e2e; color: #cdd6f4; padding: 16px 20px; border: 2px solid #2d2d44; border-top: none; border-radius: 0 0 8px 8px; font-family: 'Courier New',monospace; font-size: 13px; line-height: 1.55;\">protected async Task&lt;string&gt; Execute(string prompt)<br \/>\n{<br \/>\nawait _logger.Log($&#8221;\ud83e\udd16 {_name}: Thinking&#8230;&#8221;);<br \/>\nvar result = await _ai.Ask(prompt);<br \/>\nawait _logger.Log($&#8221;\u2705 {_name}: Done&#8221;);<br \/>\nreturn result;<br \/>\n}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">The Product Owner agent wraps your idea in instructions and sends it to the model. The Architect gets the requirements. The Developer gets the architecture. Nobody sees the full picture &#8211; just the handoff from the agent before them.<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">Then I wired them together. If you&#8217;re building a pipeline agent, this is where you live:<\/p>\n<p style=\"text-align: center; margin: 0 0 20px 0;\"><img decoding=\"async\" class=\"aligncenter\" style=\"max-width: 100%; height: auto; border-radius: 6px;\" src=\"https:\/\/tothenewco.pro\/blog\/wp-ttn-blog\/uploads\/2026\/08\/pipeline-flow-1.png\" alt=\"Pipeline flow: Idea to PO to Architect to Developer to Reviewer\" width=\"484\" \/><\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 16px 0;\">\n<tbody>\n<tr>\n<td style=\"background-color: #e6dff2; padding: 6px 14px; border: 2px solid #2d2d44; border-bottom: none; border-radius: 6px 6px 0 0; font-family: Arial,sans-serif; font-style: italic; font-size: 14px; color: #4a4a68;\">OpenAIWorkflowEngine.cs<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #1e1e2e; color: #cdd6f4; padding: 16px 20px; border: 2px solid #2d2d44; border-top: none; border-radius: 0 0 8px 8px; font-family: 'Courier New',monospace; font-size: 13px; line-height: 1.55;\">public async Task&lt;WorkflowResult&gt; RunAsync(string idea)<br \/>\n{<br \/>\nvar po = new ProductOwnerAgent(_ai, _logger);<br \/>\nvar arch = new ArchitectAgent(_ai, _logger);<br \/>\nvar dev = new DeveloperAgent(_ai, _logger);<br \/>\nvar rev = new ReviewerAgent(_ai, _logger);var req = await po.Run(idea);<br \/>\nvar architecture = await arch.Run(req);<br \/>\nvar code = await dev.Run(architecture);<br \/>\nvar review = await rev.Run(code);return new WorkflowResult { Requirements = req, Architecture = architecture, Code = code, Review = review };<br \/>\n}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">Early on I chained the agents with <code style=\"background-color: #eeeeee; padding: 2px 6px; border-radius: 4px; color: #c62828; font-family: 'Courier New', monospace; font-size: 15px;\">.Result<\/code> inside an async method. That worked until it didn&#8217;t &#8211; blocked threads, messy logs, hard-to-debug hangs. Switching to <code style=\"background-color: #eeeeee; padding: 2px 6px; border-radius: 4px; color: #c62828; font-family: 'Courier New', monospace; font-size: 15px;\">await<\/code> all the way through was a small change that made SignalR updates actually behave.<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">I plugged in OpenRouter behind an <code style=\"background-color: #eeeeee; padding: 2px 6px; border-radius: 4px; color: #c62828; font-family: 'Courier New', monospace; font-size: 15px;\">IAIProvider<\/code> interface, registered everything in <code style=\"background-color: #eeeeee; padding: 2px 6px; border-radius: 4px; color: #c62828; font-family: 'Courier New', monospace; font-size: 15px;\">Program.cs<\/code>, and added SignalR so users could watch each agent light up. The app went live at <a style=\"color: #1565c0; text-decoration: underline;\" href=\"https:\/\/pipeline-based-multiagent-ai-6w7n.onrender.com\">pipeline-based-multiagent-ai-6w7n.onrender.com<\/a>.<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">It worked. Type an idea, get a four-part software blueprint. I controlled the choreography completely &#8211; and that was the point. Where it fell short was anything conversational. There is no &#8220;step two&#8221; when the user sends a sentence that mixes three intents.<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 24px 0 32px 0;\">\n<tbody>\n<tr>\n<td style=\"border-left: 5px solid #2d2d44; padding: 8px 0 8px 20px;\">\n<p style=\"font-family: Georgia,serif; font-size: 22px; line-height: 1.4; color: #333333; font-style: italic; margin: 0;\">I wasn&#8217;t building an agent. I was building an assembly line &#8211; and I was the foreman.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table style=\"width: 100%; border-collapse: collapse; margin: 32px 0 16px 0;\">\n<tbody>\n<tr>\n<td style=\"width: 8px; background-color: #c8e6c9; border-radius: 4px 0 0 4px;\"><\/td>\n<td style=\"background-color: #faf8f3; border: 2px dashed #cccccc; border-left: none; padding: 14px 18px;\">\n<h2 style=\"font-family: Arial,sans-serif; font-size: 26px; font-weight: bold; color: #1a1a2e; margin: 0;\">The second build: I handed over the baton<\/h2>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">Then I wanted something different. Not a workflow with a fixed end. A chatbot that could check symptoms, look up medication, book appointments, set reminders, check weather &#8211; depending on what the user actually said.<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">A pipeline didn&#8217;t fit. I couldn&#8217;t hardcode &#8220;step one: symptoms, step two: booking&#8221; because users don&#8217;t talk in steps. They talk in sentences.<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">So I picked up Semantic Kernel &#8211; and the mental model flipped.<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 20px 0;\">\n<tbody>\n<tr>\n<td style=\"background-color: #ffffff; border: 2.5px solid #2d2d44; border-radius: 3px 14px 5px 12px; padding: 16px 18px;\">\n<p style=\"font-family: Georgia,serif; font-size: 20px; font-weight: bold; color: #1a1a2e; margin: 0 0 6px 0;\">The shift<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 16px; line-height: 1.6; color: #5c5c7a; margin: 0;\">Instead of writing the flow, I wrote <strong>capabilities<\/strong> &#8211; C# methods the LLM could call when it needed them. I stopped being the conductor. I became the toolbox builder.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">MediBot started with a Kernel &#8211; SK&#8217;s object that connects your model to your tools:<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 20px 0;\">\n<tbody>\n<tr>\n<td style=\"background-color: #e6dff2; padding: 6px 14px; border: 2px solid #2d2d44; border-bottom: none; border-radius: 6px 6px 0 0; font-family: Arial,sans-serif; font-style: italic; font-size: 14px; color: #4a4a68;\">HealthcareAgentService.cs<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #1e1e2e; color: #cdd6f4; padding: 16px 20px; border: 2px solid #2d2d44; border-top: none; border-radius: 0 0 8px 8px; font-family: 'Courier New',monospace; font-size: 13px; line-height: 1.55;\">var builder = Kernel.CreateBuilder();<br \/>\nbuilder.AddOpenAIChatCompletion(<br \/>\nmodelId: &#8220;deepseek\/deepseek-chat&#8221;,<br \/>\napiKey: apiKey,<br \/>\nendpoint: new Uri(&#8220;https:\/\/openrouter.ai\/api\/v1&#8221;),<br \/>\nhttpClient: httpClient);<br \/>\nvar kernel = builder.Build();<br \/>\nkernel.Plugins.AddFromType&lt;HealthcarePlugin&gt;(&#8220;Healthcare&#8221;);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">Each tool is a method with a name and a description. The LLM reads those descriptions and decides when to call them &#8211; you don&#8217;t write routing logic:<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 20px 0;\">\n<tbody>\n<tr>\n<td style=\"background-color: #e6dff2; padding: 6px 14px; border: 2px solid #2d2d44; border-bottom: none; border-radius: 6px 6px 0 0; font-family: Arial,sans-serif; font-style: italic; font-size: 14px; color: #4a4a68;\">HealthcarePlugin.cs<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #1e1e2e; color: #cdd6f4; padding: 16px 20px; border: 2px solid #2d2d44; border-top: none; border-radius: 0 0 8px 8px; font-family: 'Courier New',monospace; font-size: 13px; line-height: 1.55;\">[KernelFunction(&#8220;check_symptoms&#8221;)]<br \/>\n[Description(&#8220;Analyzes reported symptoms and returns possible conditions.&#8221;)]<br \/>\npublic string CheckSymptoms(<br \/>\n[Description(&#8220;Comma-separated symptoms, e.g. &#8216;fever, headache'&#8221;)]<br \/>\nstring symptoms)<br \/>\n{<br \/>\n\/\/ your logic here<br \/>\nreturn $&#8221;Based on symptoms &#8216;{symptoms}&#8217;, possible conditions include: &#8221; +<br \/>\n$&#8221;{string.Join(&#8220;, &#8220;, unique)}.&#8221;;<br \/>\n}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">Give the agent a persona, attach the kernel, and invoke it with conversation history:<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 20px 0;\">\n<tbody>\n<tr>\n<td style=\"background-color: #e6dff2; padding: 6px 14px; border: 2px solid #2d2d44; border-bottom: none; border-radius: 6px 6px 0 0; font-family: Arial,sans-serif; font-style: italic; font-size: 14px; color: #4a4a68;\">the loop that runs on every message<\/td>\n<\/tr>\n<tr>\n<td style=\"background-color: #1e1e2e; color: #cdd6f4; padding: 16px 20px; border: 2px solid #2d2d44; border-top: none; border-radius: 0 0 8px 8px; font-family: 'Courier New',monospace; font-size: 13px; line-height: 1.55;\">_agent = new ChatCompletionAgent<br \/>\n{<br \/>\nName = &#8220;MediBot&#8221;,<br \/>\nInstructions = &#8220;You are MediBot, a compassionate healthcare assistant&#8230;&#8221;,<br \/>\nKernel = kernel<br \/>\n};<br \/>\nvar thread = new ChatHistoryAgentThread(chatHistory);<br \/>\nawait foreach (var message in _agent.InvokeAsync(thread))<br \/>\nresponseBuilder.Append(message.Message.Content);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: center; margin: 0 0 20px 0;\"><img decoding=\"async\" class=\"aligncenter\" style=\"max-width: 100%; height: auto; border-radius: 6px;\" src=\"https:\/\/tothenewco.pro\/blog\/wp-ttn-blog\/uploads\/2026\/08\/tool-calling-flow-1.png\" alt=\"Tool-calling flow: User to LLM to tools to Reply\" width=\"515\" \/><\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 20px 0;\">\n<tbody>\n<tr>\n<td style=\"width: 40px; vertical-align: top; padding: 12px 0 0 4px; font-family: Arial,sans-serif; font-size: 24px;\">\ud83d\udcac<\/td>\n<td style=\"background-color: #f3e5f5; border: 2px solid #ce93d8; border-radius: 16px 16px 16px 4px; padding: 14px 18px;\">\n<p style=\"font-family: Arial,sans-serif; font-size: 16px; line-height: 1.6; color: #1a1a2e; margin: 0; font-style: italic;\">&#8220;I have fever and body ache, find hospitals near Mumbai&#8221;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">MediBot might call <code style=\"background-color: #eeeeee; padding: 2px 6px; border-radius: 4px; color: #c62828; font-family: 'Courier New',monospace; font-size: 15px;\">check_symptoms<\/code>, then <code style=\"background-color: #eeeeee; padding: 2px 6px; border-radius: 4px; color: #c62828; font-family: 'Courier New',monospace; font-size: 15px;\">find_nearby_hospitals<\/code>, then write a single friendly reply. I didn&#8217;t plan that sequence. The model did.<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">The part that took iteration wasn&#8217;t the C# &#8211; it was the tool descriptions and system prompt. Vague descriptions meant the model called the wrong plugin or skipped one entirely. I built Aria the same way (different plugin, different instructions, same pattern). Both went live at <a style=\"color: #1565c0; text-decoration: underline;\" href=\"https:\/\/agentic-ai-yihx.onrender.com\">agentic-ai-yihx.onrender.com<\/a>.<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 24px 0 32px 0;\">\n<tbody>\n<tr>\n<td style=\"border-left: 5px solid #2d2d44; padding: 8px 0 8px 20px;\">\n<p style=\"font-family: Georgia,serif; font-size: 22px; line-height: 1.4; color: #333333; font-style: italic; margin: 0;\">I stopped writing if\/else. I started writing small methods and trusting the model to pick the right one.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table style=\"width: 100%; border-collapse: collapse; margin: 32px 0 16px 0;\">\n<tbody>\n<tr>\n<td style=\"width: 8px; background-color: #fff176; border-radius: 4px 0 0 4px;\"><\/td>\n<td style=\"background-color: #faf8f3; border: 2px dashed #cccccc; border-left: none; padding: 14px 18px;\">\n<h2 style=\"font-family: Arial,sans-serif; font-size: 26px; font-weight: bold; color: #1a1a2e; margin: 0;\">The question that ties them together<\/h2>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">Same language &#8211; &#8220;agent.&#8221; Same stack &#8211; .NET, Razor Pages, OpenRouter. Completely different answer to one question:<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 24px 0;\">\n<tbody>\n<tr>\n<td style=\"text-align: center; background-color: #faf8f3; border: 2px solid #2d2d44; border-radius: 6px; padding: 18px 20px;\">\n<p style=\"font-family: Georgia,serif; font-size: 24px; font-weight: bold; color: #1a1a2e; margin: 0;\"><span style=\"background: linear-gradient(180deg, transparent 55%, #fff176 55%); padding: 0 6px;\">Who picks the next step?<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: center; margin: 0 0 24px 0;\"><img decoding=\"async\" class=\"aligncenter\" style=\"max-width: 100%; height: auto; border-radius: 6px;\" src=\"https:\/\/tothenewco.pro\/blog\/wp-ttn-blog\/uploads\/2026\/08\/you-vs-llm-comparison-2.png\" alt=\"Sticky notes comparing pipeline and tool-calling approaches\" width=\"505\" \/><\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 24px 0;\">\n<tbody>\n<tr>\n<td style=\"width: 48%; vertical-align: top; background-color: #fffde7; border: 2.5px solid #2d2d44; border-radius: 4px 12px 4px 4px; padding: 18px 16px;\">\n<p style=\"font-family: Georgia,serif; font-size: 18px; font-weight: bold; color: #1a1a2e; margin: 0 0 10px 0;\"><span style=\"background: linear-gradient(180deg, transparent 55%, #fff176 55%); padding: 0 4px;\">You pick<\/span><\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 16px; line-height: 1.6; color: #1a1a2e; margin: 0;\">PO \u2192 Architect \u2192 Developer \u2192 Reviewer. Every time. One class per role, one chain method, LLM behind an interface. Plain C# &#8211; no framework required.<\/p>\n<\/td>\n<td style=\"width: 4%;\"><\/td>\n<td style=\"width: 48%; vertical-align: top; background-color: #fce4ec; border: 2.5px solid #2d2d44; border-radius: 12px 4px 4px 4px; padding: 18px 16px;\">\n<p style=\"font-family: Georgia,serif; font-size: 18px; font-weight: bold; color: #1a1a2e; margin: 0 0 10px 0;\"><span style=\"background: linear-gradient(180deg, transparent 55%, #f8bbd0 55%); padding: 0 4px;\">LLM picks<\/span><\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 16px; line-height: 1.6; color: #1a1a2e; margin: 0;\">Kernel + plugins with <code style=\"background-color: #eeeeee; padding: 1px 5px; border-radius: 3px; color: #c62828; font-family: 'Courier New',monospace; font-size: 14px;\">[KernelFunction]<\/code> + <code style=\"background-color: #eeeeee; padding: 1px 5px; border-radius: 3px; color: #c62828; font-family: 'Courier New',monospace; font-size: 14px;\">ChatCompletionAgent<\/code>. You write capabilities; SK runs the loop.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 12px 0;\">Neither is better. They answer different questions.<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 12px 0;\">Your process has <strong style=\"background: linear-gradient(180deg, transparent 55%, #fff176 55%); padding: 0 3px;\">known stages<\/strong> \u2192 build a pipeline. You own the flow.<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 28px 0;\">Your users bring <strong style=\"background: linear-gradient(180deg, transparent 55%, #f8bbd0 55%); padding: 0 3px;\">unpredictable requests<\/strong> \u2192 build tool-calling agents. You own the capabilities.<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 28px 0;\">What took me too long to accept: you have to choose upfront. You can&#8217;t bolt a pipeline onto a chatbot or vice versa without rethinking who holds the baton.<\/p>\n<h2 style=\"font-family: Arial,sans-serif; font-size: 26px; font-weight: bold; color: #1a1a2e; margin: 32px 0 14px 0; padding-bottom: 6px; border-bottom: 3px solid #81d4fa;\">What I&#8217;d build next (honestly)<\/h2>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">I haven&#8217;t shipped a third app yet. If I did, it would probably mix both patterns &#8211; a fixed outer flow (intake, draft, review) with tool-calling inside each stage, so the model has room to move but can&#8217;t skip a human approval before something important goes out.<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 32px 0;\">For now, the lesson from two live demos is simpler: pick who owns the next step on day one. Everything else &#8211; SK vs plain C#, OpenRouter vs something else &#8211; is easier once that&#8217;s clear.<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 32px 0 16px 0;\">\n<tbody>\n<tr>\n<td style=\"width: 8px; background-color: #b3e5fc; border-radius: 4px 0 0 4px;\"><\/td>\n<td style=\"background-color: #faf8f3; border: 2px dashed #cccccc; border-left: none; padding: 14px 18px;\">\n<h2 style=\"font-family: Arial,sans-serif; font-size: 26px; font-weight: bold; color: #1a1a2e; margin: 0;\">If you&#8217;re starting today<\/h2>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; line-height: 1.75; color: #1a1a2e; margin: 0 0 16px 0;\">Pick your side of the question first. Then the code almost writes itself.<\/p>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 24px 0;\">\n<tbody>\n<tr>\n<td style=\"width: 48%; vertical-align: top; background-color: #e8eaf6; border: 2px solid #7986cb; border-radius: 6px; padding: 16px;\">\n<p style=\"font-family: Georgia,serif; font-size: 17px; font-weight: bold; color: #1a1a2e; margin: 0 0 8px 0;\">Pipeline path<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 15px; line-height: 1.6; color: #1a1a2e; margin: 0;\">Sketch stages on paper. One agent class per stage. One method that chains outputs. Add SignalR if you want users to watch progress light up.<\/p>\n<\/td>\n<td style=\"width: 4%;\"><\/td>\n<td style=\"width: 48%; vertical-align: top; background-color: #e0f2f1; border: 2px solid #4db6ac; border-radius: 6px; padding: 16px;\">\n<p style=\"font-family: Georgia,serif; font-size: 17px; font-weight: bold; color: #1a1a2e; margin: 0 0 8px 0;\">Tool-calling path<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 15px; line-height: 1.6; color: #1a1a2e; margin: 0;\">List what your app can <em>do<\/em>. Turn each into a C# method with a clear description. Spend time on the system prompt &#8211; it shapes behaviour more than anything else.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table style=\"width: 100%; border-collapse: collapse; margin: 20px 0 24px 0;\">\n<tbody>\n<tr>\n<td style=\"background-color: #ffe0b2; border: 2.5px solid #2d2d44; border-radius: 4px 16px 6px 10px; padding: 18px 20px;\">\n<p style=\"font-family: Georgia,serif; font-size: 20px; font-weight: bold; margin: 0 0 12px 0; color: #1a1a2e;\">See it live<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; margin: 0 0 4px 0; color: #1a1a2e;\"><strong>Pipeline:<\/strong> <a style=\"color: #1565c0; text-decoration: underline;\" href=\"https:\/\/pipeline-based-multiagent-ai-6w7n.onrender.com\">pipeline-based-multiagent-ai-6w7n.onrender.com<\/a><\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; margin: 0 0 16px 0; color: #1a1a2e;\">Type <em>&#8220;Build a habit tracker for developers&#8221;<\/em> &#8211; watch four agents chain.<\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; margin: 0 0 4px 0; color: #1a1a2e;\"><strong>Tool-calling:<\/strong> <a style=\"color: #1565c0; text-decoration: underline;\" href=\"https:\/\/agentic-ai-yihx.onrender.com\">agentic-ai-yihx.onrender.com<\/a><\/p>\n<p style=\"font-family: Arial,sans-serif; font-size: 17px; margin: 0; color: #1a1a2e;\">Ask MediBot about symptoms, or tell Aria to set a reminder.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table style=\"width: 100%; border-collapse: collapse; margin: 0 0 24px 0;\">\n<tbody>\n<tr>\n<td style=\"text-align: center; background-color: #faf8f3; border: 2px dashed #cccccc; border-radius: 6px; padding: 20px 24px;\">\n<p style=\"font-family: Georgia,serif; font-size: 20px; line-height: 1.5; color: #1a1a2e; font-style: italic; margin: 0;\">I built the pipeline first because I wanted control. I built the SK agents second because I needed to let go. The best agent you&#8217;ll write is the one where you know &#8211; clearly &#8211; who&#8217;s picking the next step.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>AUGUST 2026 \u00b7 ~7 MIN READ \u00b7 .NET \u00b7 AGENTIC AI Who Picks the Next Step &#8211; You or the LLM? I built two agent apps in .NET before I understood they weren&#8217;t the same thing. This is what I learned &#8211; and how you can build either one without rebuilding halfway through. Key takeaway [&hellip;]<\/p>\n","protected":false},"author":2274,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":8,"footnotes":""},"categories":[5867],"tags":[6734,8783,8785,8782,8784],"class_list":["post-81063","post","type-post","status-publish","format-standard","hentry","category-net","tag-dotnet","tag-multiagentpipeline","tag-openrouter","tag-semantickernel","tag-signalr"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"AUGUST 2026 \u00b7 ~7 MIN READ \u00b7 .NET \u00b7 AGENTIC AI Who Picks the Next Step - You or the LLM? I built two agent apps in .NET before I understood they weren&#039;t the same thing. This is what I learned - and how you can build either one without rebuilding halfway through. Key takeaway\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Harshit Gupta\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"TO THE NEW BLOG\" \/>\n\t\t<meta property=\"og:type\" content=\"blog\" \/>\n\t\t<meta property=\"og:title\" content=\"Who Picks the Next Step \u2013 You or the LLM? | TO THE NEW Blog\" \/>\n\t\t<meta property=\"og:description\" content=\"AUGUST 2026 \u00b7 ~7 MIN READ \u00b7 .NET \u00b7 AGENTIC AI Who Picks the Next Step - You or the LLM? I built two agent apps in .NET before I understood they weren&#039;t the same thing. This is what I learned - and how you can build either one without rebuilding halfway through. Key takeaway\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@tothenew\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Who Picks the Next Step \u2013 You or the LLM? | TO THE NEW Blog\" \/>\n\t\t<meta name=\"twitter:description\" content=\"AUGUST 2026 \u00b7 ~7 MIN READ \u00b7 .NET \u00b7 AGENTIC AI Who Picks the Next Step - You or the LLM? I built two agent apps in .NET before I understood they weren&#039;t the same thing. This is what I learned - and how you can build either one without rebuilding halfway through. Key takeaway\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/who-picks-the-next-step-you-or-the-llm\\\/#article\",\"name\":\"Who Picks the Next Step \\u2013 You or the LLM? | TO THE NEW Blog\",\"headline\":\"Who Picks the Next Step \\u2013 You or the LLM?\",\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/harshit-gupta1\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/wp-ttn-blog\\\/uploads\\\/2026\\\/08\\\/sticky-notes-comparison-1.png\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/who-picks-the-next-step-you-or-the-llm\\\/#articleImage\"},\"datePublished\":\"2026-08-10T18:35:36+05:30\",\"dateModified\":\"2026-09-01T15:53:58+05:30\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/who-picks-the-next-step-you-or-the-llm\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/who-picks-the-next-step-you-or-the-llm\\\/#webpage\"},\"articleSection\":\".NET, dotnet, MultiAgentPipeline, OpenRouter, SemanticKernel, SignalR\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/who-picks-the-next-step-you-or-the-llm\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/net\\\/#listItem\",\"name\":\".NET\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/net\\\/#listItem\",\"position\":2,\"name\":\".NET\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/net\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/who-picks-the-next-step-you-or-the-llm\\\/#listItem\",\"name\":\"Who Picks the Next Step \\u2013 You or the LLM?\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/who-picks-the-next-step-you-or-the-llm\\\/#listItem\",\"position\":3,\"name\":\"Who Picks the Next Step \\u2013 You or the LLM?\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/net\\\/#listItem\",\"name\":\".NET\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\",\"name\":\"TO THE NEW Blog\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/harshit-gupta1\\\/#author\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/harshit-gupta1\\\/\",\"name\":\"Harshit Gupta\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/who-picks-the-next-step-you-or-the-llm\\\/#authorImage\",\"url\":\"https:\\\/\\\/newersworld-sf-static.tothenew.net\\\/prod\\\/profilePicFolder\\\/71b80154-de13-4b9f-a7c4-bfe2ee0ef01e_7206-Harshit-Gupta-PROFILEPICTURE.jpeg\",\"width\":96,\"height\":96,\"caption\":\"Harshit Gupta\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/who-picks-the-next-step-you-or-the-llm\\\/#webpage\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/who-picks-the-next-step-you-or-the-llm\\\/\",\"name\":\"Who Picks the Next Step \\u2013 You or the LLM? | TO THE NEW Blog\",\"description\":\"AUGUST 2026 \\u00b7 ~7 MIN READ \\u00b7 .NET \\u00b7 AGENTIC AI Who Picks the Next Step - You or the LLM? I built two agent apps in .NET before I understood they weren't the same thing. This is what I learned - and how you can build either one without rebuilding halfway through. Key takeaway\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/who-picks-the-next-step-you-or-the-llm\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/harshit-gupta1\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/harshit-gupta1\\\/#author\"},\"datePublished\":\"2026-08-10T18:35:36+05:30\",\"dateModified\":\"2026-09-01T15:53:58+05:30\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\",\"name\":\"TO THE NEW Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Who Picks the Next Step \u2013 You or the LLM? | TO THE NEW Blog","description":"AUGUST 2026 \u00b7 ~7 MIN READ \u00b7 .NET \u00b7 AGENTIC AI Who Picks the Next Step - You or the LLM? I built two agent apps in .NET before I understood they weren't the same thing. This is what I learned - and how you can build either one without rebuilding halfway through. Key takeaway","canonical_url":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/#article","name":"Who Picks the Next Step \u2013 You or the LLM? | TO THE NEW Blog","headline":"Who Picks the Next Step \u2013 You or the LLM?","author":{"@id":"https:\/\/tothenewco.pro\/blog\/author\/harshit-gupta1\/#author"},"publisher":{"@id":"https:\/\/tothenewco.pro\/blog\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/tothenewco.pro\/blog\/wp-ttn-blog\/uploads\/2026\/08\/sticky-notes-comparison-1.png","@id":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/#articleImage"},"datePublished":"2026-08-10T18:35:36+05:30","dateModified":"2026-09-01T15:53:58+05:30","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/#webpage"},"isPartOf":{"@id":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/#webpage"},"articleSection":".NET, dotnet, MultiAgentPipeline, OpenRouter, SemanticKernel, SignalR"},{"@type":"BreadcrumbList","@id":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog#listItem","position":1,"name":"Home","item":"https:\/\/tothenewco.pro\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/category\/net\/#listItem","name":".NET"}},{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/category\/net\/#listItem","position":2,"name":".NET","item":"https:\/\/tothenewco.pro\/blog\/category\/net\/","nextItem":{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/#listItem","name":"Who Picks the Next Step \u2013 You or the LLM?"},"previousItem":{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/#listItem","position":3,"name":"Who Picks the Next Step \u2013 You or the LLM?","previousItem":{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/category\/net\/#listItem","name":".NET"}}]},{"@type":"Organization","@id":"https:\/\/tothenewco.pro\/blog\/#organization","name":"TO THE NEW Blog","url":"https:\/\/tothenewco.pro\/blog\/"},{"@type":"Person","@id":"https:\/\/tothenewco.pro\/blog\/author\/harshit-gupta1\/#author","url":"https:\/\/tothenewco.pro\/blog\/author\/harshit-gupta1\/","name":"Harshit Gupta","image":{"@type":"ImageObject","@id":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/#authorImage","url":"https:\/\/newersworld-sf-static.tothenew.net\/prod\/profilePicFolder\/71b80154-de13-4b9f-a7c4-bfe2ee0ef01e_7206-Harshit-Gupta-PROFILEPICTURE.jpeg","width":96,"height":96,"caption":"Harshit Gupta"}},{"@type":"WebPage","@id":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/#webpage","url":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/","name":"Who Picks the Next Step \u2013 You or the LLM? | TO THE NEW Blog","description":"AUGUST 2026 \u00b7 ~7 MIN READ \u00b7 .NET \u00b7 AGENTIC AI Who Picks the Next Step - You or the LLM? I built two agent apps in .NET before I understood they weren't the same thing. This is what I learned - and how you can build either one without rebuilding halfway through. Key takeaway","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/tothenewco.pro\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/#breadcrumblist"},"author":{"@id":"https:\/\/tothenewco.pro\/blog\/author\/harshit-gupta1\/#author"},"creator":{"@id":"https:\/\/tothenewco.pro\/blog\/author\/harshit-gupta1\/#author"},"datePublished":"2026-08-10T18:35:36+05:30","dateModified":"2026-09-01T15:53:58+05:30"},{"@type":"WebSite","@id":"https:\/\/tothenewco.pro\/blog\/#website","url":"https:\/\/tothenewco.pro\/blog\/","name":"TO THE NEW Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/tothenewco.pro\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"TO THE NEW BLOG","og:type":"blog","og:title":"Who Picks the Next Step \u2013 You or the LLM? | TO THE NEW Blog","og:description":"AUGUST 2026 \u00b7 ~7 MIN READ \u00b7 .NET \u00b7 AGENTIC AI Who Picks the Next Step - You or the LLM? I built two agent apps in .NET before I understood they weren't the same thing. This is what I learned - and how you can build either one without rebuilding halfway through. Key takeaway","og:url":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/","og:image":"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","og:image:secure_url":"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","twitter:card":"summary","twitter:site":"@tothenew","twitter:title":"Who Picks the Next Step \u2013 You or the LLM? | TO THE NEW Blog","twitter:description":"AUGUST 2026 \u00b7 ~7 MIN READ \u00b7 .NET \u00b7 AGENTIC AI Who Picks the Next Step - You or the LLM? I built two agent apps in .NET before I understood they weren't the same thing. This is what I learned - and how you can build either one without rebuilding halfway through. Key takeaway","twitter:image":"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png"},"aioseo_meta_data":{"post_id":"81063","title":null,"description":null,"keywords":[],"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":[],"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"limit_modified_date":false,"created":"2026-08-01 07:44:45","updated":"2026-09-01 10:24:00","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/tothenewco.pro\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/tothenewco.pro\/blog\/category\/net\/\" title=\".NET\">.NET<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tWho Picks the Next Step \u2013 You or the LLM?\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/tothenewco.pro\/blog"},{"label":".NET","link":"https:\/\/tothenewco.pro\/blog\/category\/net\/"},{"label":"Who Picks the Next Step \u2013 You or the LLM?","link":"https:\/\/tothenewco.pro\/blog\/who-picks-the-next-step-you-or-the-llm\/"}],"_links":{"self":[{"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/posts\/81063","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/users\/2274"}],"replies":[{"embeddable":true,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/comments?post=81063"}],"version-history":[{"count":14,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/posts\/81063\/revisions"}],"predecessor-version":[{"id":82008,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/posts\/81063\/revisions\/82008"}],"wp:attachment":[{"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/media?parent=81063"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/categories?post=81063"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/tags?post=81063"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}