<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Codanyks</title>
    <description>The latest articles on DEV Community by Codanyks (@codanyks).</description>
    <link>https://dev.to/codanyks</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2895249%2Fd8f9320b-8305-48ec-962e-0000be867939.png</url>
      <title>DEV Community: Codanyks</title>
      <link>https://dev.to/codanyks</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codanyks"/>
    <language>en</language>
    <item>
      <title>Anatomy of an Agent</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Sun, 19 Jul 2026 12:32:22 +0000</pubDate>
      <link>https://dev.to/codanyks/anatomy-of-an-agent-4apc</link>
      <guid>https://dev.to/codanyks/anatomy-of-an-agent-4apc</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Looking Beyond the Prompt to Understand How Agents Actually Work&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One of the easiest mistakes to make when thinking about AI agents is assuming that the response is where the interesting work happens.&lt;/p&gt;

&lt;p&gt;It is an understandable assumption. The response is the only part we actually see. Whether the agent generates code, summarizes a document, investigates a production issue, or answers a question, the visible output naturally becomes the focus of our attention. We judge the system by what appears on the screen, much like we judge a website by its interface rather than the infrastructure quietly supporting every request.&lt;/p&gt;

&lt;p&gt;Production environments tell a different story.&lt;/p&gt;

&lt;p&gt;Experienced builders quickly discover that the response is often the least interesting part of an agent's operation. By the time those few paragraphs of text appear, the system has already passed through multiple stages of processing that most users never notice. Context has been gathered, instructions have been interpreted, available tools have been evaluated, memory may have been consulted, execution constraints have been applied, and decisions have already started taking shape before a single token is generated.&lt;/p&gt;

&lt;p&gt;The response is simply the visible consequence of those earlier decisions.&lt;/p&gt;

&lt;p&gt;This distinction matters because many discussions about agents still revolve around the reasoning model itself. Builders compare models, benchmark reasoning performance, experiment with prompting techniques, and debate which foundation model produces the best outputs. Those are valuable discussions, but they often leave the impression that the model is the agent.&lt;/p&gt;

&lt;p&gt;That mental model usually survives until the first real deployment.&lt;/p&gt;

&lt;p&gt;A prototype might perform remarkably well during controlled demonstrations. It can inspect a repository, explain unfamiliar code, generate deployment plans, or coordinate several tool calls in sequence. The experience feels surprisingly capable, especially when compared to traditional automation.&lt;/p&gt;

&lt;p&gt;Then the environment becomes less predictable.&lt;/p&gt;

&lt;p&gt;The repository has accumulated years of inconsistent architectural decisions. Internal documentation contradicts the implementation. Monitoring systems report incomplete telemetry. External APIs become temporarily unavailable. A deployment partially succeeds before failing health checks. The model itself may continue producing coherent responses, yet the overall system starts making progressively weaker decisions because the environment no longer resembles the clean scenarios shown during demonstrations.&lt;/p&gt;

&lt;p&gt;Eventually, most builders encounter the same realization.&lt;/p&gt;

&lt;p&gt;The difficult part of building an agent is rarely generating intelligent responses. The difficult part is ensuring that every decision leading to those responses is based on an accurate understanding of the environment the agent is operating within.&lt;/p&gt;

&lt;p&gt;That realization changes the conversation completely.&lt;/p&gt;

&lt;p&gt;Instead of asking how intelligent an agent appears, experienced teams begin asking different questions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Where did the context come from?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Which tools influenced the decision?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Was the retrieved information still relevant?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;What assumptions did the system carry over from previous executions?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Why did it choose this action instead of another?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those questions reveal something important.&lt;/p&gt;

&lt;p&gt;An agent is not a single thinking entity.&lt;/p&gt;

&lt;p&gt;It is a collection of cooperating systems that continuously exchange information before the reasoning model ever begins producing an answer.&lt;/p&gt;

&lt;p&gt;Understanding that internal cooperation is what separates building impressive demonstrations from building reliable operational systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  The First Thing an Agent Receives Isn't a Prompt
&lt;/h2&gt;

&lt;p&gt;People often describe interacting with an agent as &lt;em&gt;&lt;strong&gt;giving it a prompt&lt;/strong&gt;&lt;/em&gt;, but that description becomes less accurate as agents move beyond conversational interfaces.&lt;/p&gt;

&lt;p&gt;Prompts are only one small part of what an operational agent receives.&lt;/p&gt;

&lt;p&gt;Imagine asking a repository analysis agent to review a pull request before it is merged. The natural assumption is that the user's request becomes the primary input. In reality, the request is often the least informative piece of information available.&lt;/p&gt;

&lt;p&gt;The agent may also receive the repository itself, the proposed code changes, commit history, architectural conventions, dependency graphs, issue tracker references, coding standards, security policies, previous review comments, continuous integration results, and perhaps the output of earlier analysis performed by other systems. By the time reasoning begins, the original prompt has become just one signal among many.&lt;/p&gt;

&lt;p&gt;The same pattern appears across other domains.&lt;/p&gt;

&lt;p&gt;A deployment agent is influenced by infrastructure state, environment configuration, release history, health checks, rollback policies, service dependencies, and monitoring data. A research agent combines user intent with retrieved documents, source credibility, previous findings, and available search tools. A customer support agent considers historical conversations, product documentation, account information, escalation rules, and organizational policies before deciding how to respond.&lt;/p&gt;

&lt;p&gt;In each case, the agent is not receiving a question in isolation.&lt;/p&gt;

&lt;p&gt;It is receiving a situation.&lt;/p&gt;

&lt;p&gt;That distinction changes how builders should think about inputs.&lt;/p&gt;

&lt;p&gt;Traditional software usually expects clearly defined parameters. An endpoint receives a request, validates the data, performs a predictable operation, and returns a result. The surrounding environment matters, but it rarely becomes part of the application's decision-making process.&lt;/p&gt;

&lt;p&gt;Agents operate differently because the environment itself influences reasoning.&lt;/p&gt;

&lt;p&gt;The quality of a decision depends not only on what the user asked, but also on what the system knows about the current state of the world. If that understanding is incomplete, outdated, or inconsistent, the reasoning process begins from a flawed foundation regardless of how capable the underlying model may be.&lt;/p&gt;

&lt;p&gt;This is one reason production agents often behave differently from laboratory demonstrations.&lt;/p&gt;

&lt;p&gt;During a demonstration, builders usually control the surrounding environment. Context is intentionally selected, tools behave predictably, documentation is accurate, and external systems cooperate. The reasoning model performs well because the information entering the system is already clean.&lt;/p&gt;

&lt;p&gt;Operational environments rarely provide that luxury.&lt;/p&gt;

&lt;p&gt;Information arrives with contradictions. Some data sources disagree. Important details are missing. Logs contain noise. Documentation lags behind implementation. APIs respond inconsistently. Human decisions introduce exceptions that no documentation captures.&lt;/p&gt;

&lt;p&gt;The agent is expected to interpret that imperfect reality before deciding what to do next.&lt;/p&gt;

&lt;p&gt;Experienced builders eventually realize they are spending less time improving prompts and more time improving the quality of information reaching the agent. Better retrieval strategies, cleaner repositories, stronger documentation, more reliable integrations, and well-defined operational boundaries often improve outcomes more than another round of prompt refinement.&lt;/p&gt;

&lt;p&gt;The first lesson in understanding an agent's anatomy, then, is surprisingly simple.&lt;/p&gt;

&lt;p&gt;An agent does not begin with an answer waiting to be generated.&lt;/p&gt;

&lt;p&gt;It begins with an environment waiting to be understood.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdpqcvnjoasmhl7vxz3rh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdpqcvnjoasmhl7vxz3rh.png" alt="A central AI processing core receives multiple structured information streams simultaneously" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Context Is Usually More Important Than Intelligence
&lt;/h2&gt;

&lt;p&gt;If two builders use exactly the same reasoning model but produce completely different results, the immediate assumption is often that one of them wrote a better prompt.&lt;/p&gt;

&lt;p&gt;Sometimes that is true.&lt;/p&gt;

&lt;p&gt;More often, the difference lies somewhere else.&lt;/p&gt;

&lt;p&gt;Context determines what the model is allowed to know before it begins reasoning, and that makes it one of the most influential components inside any agent architecture. Intelligence can only operate on the information it receives. When the surrounding context changes, the quality of reasoning changes with it, even if the underlying model remains identical.&lt;/p&gt;

&lt;p&gt;Consider two coding agents reviewing the same feature request. Both are powered by the same model and receive the same user instructions. The first agent has access to the repository structure, architectural guidelines, dependency relationships, recent pull requests, coding conventions, and issue history. The second agent only receives the feature request and a handful of isolated files.&lt;/p&gt;

&lt;p&gt;The difference in output is unlikely to come from intelligence alone.&lt;/p&gt;

&lt;p&gt;One agent understands the environment it is operating within. The other is forced to fill the missing gaps through prediction.&lt;/p&gt;

&lt;p&gt;This is why experienced builders gradually stop treating context as supporting information and start treating it as operational infrastructure. Good context reduces unnecessary prediction. Poor context forces the model to invent continuity where none exists.&lt;/p&gt;

&lt;p&gt;In many production failures, the model did exactly what it was designed to do. It reasoned over the information available to it. The problem was that the available information no longer reflected reality.&lt;/p&gt;

&lt;p&gt;That observation also explains why context engineering is becoming one of the most important disciplines in modern agent development. As systems grow larger, the challenge is no longer providing more information. The challenge is providing the &lt;em&gt;&lt;strong&gt;right&lt;/strong&gt;&lt;/em&gt; information at the &lt;em&gt;&lt;strong&gt;right&lt;/strong&gt;&lt;/em&gt; time, while filtering out everything that increases noise without improving understanding.&lt;/p&gt;

&lt;p&gt;An agent that receives every available document is not necessarily better informed than one receiving a carefully selected subset. In fact, excessive context often creates its own problems. Irrelevant information competes with relevant information for attention, older assumptions overshadow newer ones, and retrieval systems begin surfacing familiarity instead of importance.&lt;/p&gt;

&lt;p&gt;Understanding this trade-off changes how builders design agent systems. Rather than asking how much context can fit inside a model's window, they begin asking how context should be collected, ranked, validated, and refreshed throughout an execution.&lt;/p&gt;

&lt;p&gt;Only then does it make sense to examine how the agent actually turns that understanding into decisions, because reasoning is never performed in isolation. It is continuously shaped by the constraints, priorities, and operational realities surrounding it. That is where the next layer of an agent's anatomy begins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffymgye4vexq1a9curr6d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffymgye4vexq1a9curr6d.png" alt="Show two identical AI reasoning cores." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Decision Making Is Mostly Constraint Management
&lt;/h2&gt;

&lt;p&gt;Once builders begin looking beyond prompts and responses, another assumption starts to disappear.&lt;/p&gt;

&lt;p&gt;It is tempting to imagine that an agent &lt;em&gt;&lt;strong&gt;thinks&lt;/strong&gt;&lt;/em&gt; in much the same way a person does. We picture it weighing alternatives, considering possibilities, and eventually choosing the best path forward. While modern reasoning models can certainly perform impressive forms of analysis, that mental model becomes less useful once an agent begins operating inside a production environment.&lt;/p&gt;

&lt;p&gt;Most decisions are not made in complete freedom.&lt;/p&gt;

&lt;p&gt;They are made inside boundaries.&lt;/p&gt;

&lt;p&gt;Consider an infrastructure agent responsible for deploying a new service. The objective appears straightforward: &lt;em&gt;&lt;strong&gt;deploy the latest version successfully&lt;/strong&gt;&lt;/em&gt;. Yet before any action is taken, the system must reconcile a surprising number of constraints.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Is the deployment window currently open?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Have all required approvals been granted?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Are dependent services healthy?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Does the rollout policy allow incremental deployment?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Have monitoring baselines been established?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;If the deployment fails, is a rollback strategy available?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Should the deployment continue if latency increases but error rates remain stable?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these questions are particularly glamorous, but they determine whether the agent behaves like a reliable operational system or an unpredictable experiment.&lt;/p&gt;

&lt;p&gt;This is why it is often more accurate to think of an agent's decision engine as a constraint management system rather than a source of unlimited autonomy. The reasoning model explores possibilities, but the surrounding architecture determines which possibilities are acceptable.&lt;/p&gt;

&lt;p&gt;A useful comparison comes from aviation. Modern autopilot systems are capable of making thousands of adjustments during a flight, yet every adjustment occurs within carefully engineered safety boundaries. The autopilot is not exercising unrestricted freedom; &lt;em&gt;it is continuously optimizing within constraints established by the aircraft, the flight plan, weather conditions, and operational regulations&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Production agents behave in much the same way.&lt;/p&gt;

&lt;p&gt;Their decisions are influenced simultaneously by user intent, retrieved context, organizational policies, available permissions, tool availability, execution history, confidence thresholds, cost budgets, and safety guardrails. Remove any one of these influences, and the same reasoning model may reach an entirely different conclusion.&lt;/p&gt;

&lt;p&gt;This also explains why experienced builders rarely evaluate an agent by asking whether it made the &lt;em&gt;&lt;strong&gt;correct&lt;/strong&gt;&lt;/em&gt; decision in isolation. Instead, they examine the chain of influences that produced the decision.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Which documents shaped the reasoning?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Which retrieved memories carried the most weight?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Which constraints prevented alternative actions?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Were those constraints still valid?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Did the evaluator correctly interpret the tool outputs?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Did the agent have sufficient information to justify the action it eventually chose?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions reveal an important characteristic of mature agent systems.&lt;/p&gt;

&lt;p&gt;Reasoning is only one participant in the decision-making process.&lt;/p&gt;

&lt;p&gt;The architecture surrounding the reasoning process often contributes just as much to the final outcome.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;There is a subtle parallel here with how&lt;/em&gt; &lt;em&gt;&lt;strong&gt;Doctor Strange&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;approaches difficult situations. His decisions rarely come from raw intelligence alone. They emerge from understanding the constraints of each possible timeline, recognizing which outcomes remain achievable and which are already impossible. The wisdom lies less in choosing freely and more in recognizing the boundaries within which meaningful choices still exist.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Operational agents face a similar reality. Their effectiveness depends not on unlimited intelligence but on making consistently good decisions inside the constraints of real-world systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tools Are How Agents Leave Their Own Head
&lt;/h2&gt;

&lt;p&gt;Reasoning, no matter how sophisticated, remains an internal activity until it interacts with the outside world.&lt;/p&gt;

&lt;p&gt;This distinction becomes obvious the moment an agent loses access to its tools.&lt;/p&gt;

&lt;p&gt;Ask a disconnected coding agent how to resolve a production incident, and it may propose several plausible debugging strategies. Ask that same agent to inspect the live logs, verify the deployment status, compare the current configuration against the previous release, identify the failing service, and confirm whether the incident has already been acknowledged by another engineer, and its limitations become immediately apparent.&lt;/p&gt;

&lt;p&gt;Without tools, the agent can speculate.&lt;/p&gt;

&lt;p&gt;With tools, the agent can investigate.&lt;/p&gt;

&lt;p&gt;That transition is one of the most important moments in an agent's execution lifecycle because it transforms prediction into observation.&lt;/p&gt;

&lt;p&gt;Traditional language models primarily generate responses from the information already available within their context window. Operational agents continuously expand that understanding by interacting with external systems. They retrieve repository contents, query databases, execute terminal commands, inspect monitoring dashboards, call internal APIs, analyze deployment pipelines, search documentation, and coordinate with other services before deciding what to do next.&lt;/p&gt;

&lt;p&gt;Every successful tool invocation reduces uncertainty.&lt;/p&gt;

&lt;p&gt;Every failed tool invocation introduces new decisions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Should the agent retry?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Should it switch to an alternative data source?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Should it proceed with partial information?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Should it escalate the issue to a human operator?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Should it terminate execution entirely?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions are not secondary concerns. They become part of the reasoning process itself.&lt;/p&gt;

&lt;p&gt;This growing dependence on external capabilities explains why protocols such as MCP have attracted significant attention across the AI ecosystem. As the number of available tools increases, the challenge shifts from simply exposing capabilities to managing them consistently. Authentication, permissions, parameter validation, execution tracing, error handling, version compatibility, and security boundaries all become architectural concerns rather than implementation details.&lt;/p&gt;

&lt;p&gt;Interestingly, this mirrors how experienced engineering teams operate.&lt;/p&gt;

&lt;p&gt;A senior engineer is valuable not simply because they possess technical knowledge, but because they know how to navigate repositories, interpret monitoring data, examine infrastructure, communicate with specialists, validate assumptions, and gather evidence before making decisions. Their expertise is amplified by their ability to interact with the surrounding operational environment.&lt;/p&gt;

&lt;p&gt;Agent systems follow the same pattern.&lt;/p&gt;

&lt;p&gt;The reasoning model remains central, but its practical usefulness grows in proportion to the quality, reliability, and safety of the tools surrounding it.&lt;/p&gt;

&lt;p&gt;This is one reason many builders eventually stop asking, &lt;em&gt;&lt;strong&gt;Which model should we use?&lt;/strong&gt;&lt;/em&gt; and begin asking a more operational question.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Which capabilities should this agent be trusted to perform?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The second question usually produces better systems because it shifts attention away from intelligence as an isolated feature and toward capability as an engineered outcome.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft9xe8jv9brx7smmv8pxo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft9xe8jv9brx7smmv8pxo.png" alt="A central reasoning core is connected to multiple external operational systems." width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Execution Changes Everything
&lt;/h2&gt;

&lt;p&gt;Up to this point, the anatomy of an agent may appear surprisingly orderly. Information enters the system, context is assembled, constraints influence reasoning, and tools provide access to the outside world. If the story ended there, building agents would mostly be an exercise in connecting well-designed components.&lt;/p&gt;

&lt;p&gt;Execution is where that simplicity disappears.&lt;/p&gt;

&lt;p&gt;Unlike generating text, execution changes the state of real systems.&lt;/p&gt;

&lt;p&gt;A generated deployment plan carries little operational risk while it remains words on a screen. Executing that deployment modifies infrastructure. Updating a configuration changes application behavior. Closing an incident affects operational workflows. Creating a pull request influences future development. Sending an email changes a customer's experience. Every action introduces consequences that cannot always be undone simply by generating another response.&lt;/p&gt;

&lt;p&gt;This shift from reasoning to execution fundamentally changes how builders must think about reliability.&lt;/p&gt;

&lt;p&gt;When an agent performs an action, it is no longer sufficient for the reasoning to appear convincing. The action must also be appropriate, timely, observable, and recoverable. An excellent decision executed at the wrong moment can produce the same operational damage as a poor decision executed correctly.&lt;/p&gt;

&lt;p&gt;This is why mature agent systems invest heavily in validation before and after execution.&lt;/p&gt;

&lt;p&gt;Before taking action, the system may verify permissions, confirm assumptions, inspect dependencies, evaluate confidence, or require additional approval. After execution, it often performs another round of verification to determine whether the intended outcome was actually achieved. If the deployment reports success but health checks immediately fail, the execution cannot be considered complete. If a repository update introduces new test failures, the task has not truly succeeded. If a research agent retrieves contradictory evidence after publishing its conclusion, the workflow must continue rather than declaring victory.&lt;/p&gt;

&lt;p&gt;Execution creates feedback.&lt;/p&gt;

&lt;p&gt;Feedback creates another decision.&lt;/p&gt;

&lt;p&gt;That feedback loop is one of the defining characteristics separating operational agents from conventional automation. Traditional workflows often assume that successful execution marks the end of a process. Agent systems increasingly treat execution as another source of information that influences subsequent reasoning.&lt;/p&gt;

&lt;p&gt;Builders who spend enough time operating these systems eventually notice an interesting shift in where engineering effort accumulates. Early prototypes devote considerable attention to prompt design and reasoning quality. Production systems devote increasing attention to execution tracing, rollback strategies, observability, validation layers, approval workflows, and recovery mechanisms.&lt;/p&gt;

&lt;p&gt;In other words, the conversation gradually moves away from &lt;em&gt;&lt;strong&gt;Can the model solve this problem?&lt;/strong&gt;&lt;/em&gt; toward &lt;em&gt;&lt;strong&gt;Can the system safely recover when reality differs from the model's expectations?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That question continues into the next layer of an agent's anatomy, because every execution leaves behind something that shapes the future.&lt;/p&gt;

&lt;p&gt;Memory is not simply a record of what happened.&lt;/p&gt;

&lt;p&gt;It becomes part of what the agent believes the world looks like before it makes its next decision.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxdnxushs9nbhc16jjfqh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxdnxushs9nbhc16jjfqh.png" alt="A single approved action leaves the reasoning layer and enters an execution pipeline." width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Memory Changes Future Decisions
&lt;/h2&gt;

&lt;p&gt;Every execution leaves something behind.&lt;/p&gt;

&lt;p&gt;Sometimes it is a log entry. Sometimes it is an updated document, a newly created issue, a completed deployment, or a successful API call. More importantly, it leaves information that can influence what the agent does next.&lt;/p&gt;

&lt;p&gt;This is where memory enters the anatomy of an agent.&lt;/p&gt;

&lt;p&gt;It is tempting to think of memory as a convenience feature that allows an agent to remember previous conversations or avoid asking the same questions repeatedly. While those capabilities are useful, they represent only a small part of what memory contributes to an operational system.&lt;/p&gt;

&lt;p&gt;Memory changes future behavior.&lt;/p&gt;

&lt;p&gt;That distinction becomes increasingly important as agents move beyond isolated tasks and begin operating continuously over days, weeks, or even months.&lt;/p&gt;

&lt;p&gt;Imagine an agent responsible for maintaining internal documentation. During one execution, it identifies that a particular service is owned by Team A and stores that information for future reference. Several weeks later, ownership shifts to Team B, but the memory is never updated. The next time the agent investigates an incident, it confidently notifies the wrong team, generates documentation around outdated assumptions, and reinforces those same assumptions by storing new execution records that appear internally consistent.&lt;/p&gt;

&lt;p&gt;The reasoning model has not failed.&lt;/p&gt;

&lt;p&gt;The memory has.&lt;/p&gt;

&lt;p&gt;This pattern appears surprisingly often in production systems because memory is rarely static. Every environment evolves continuously. Repositories change. Infrastructure grows. Documentation becomes outdated. Organizational structures shift. APIs are deprecated. Monitoring thresholds are adjusted. Information that was completely accurate yesterday may quietly become misleading tomorrow.&lt;/p&gt;

&lt;p&gt;An agent that cannot recognize these changes gradually drifts away from reality, even if every individual reasoning step appears logical.&lt;/p&gt;

&lt;p&gt;This is why experienced builders stop viewing memory as storage and start viewing it as a living operational dependency.&lt;/p&gt;

&lt;p&gt;The interesting engineering questions are no longer about how much information can be retained. They become questions about lifecycle management.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;How long should a memory remain trusted?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;What evidence should allow an existing memory to be replaced?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Should contradictory observations overwrite previous knowledge immediately, or should they trigger additional verification?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;How do multiple agents maintain a consistent understanding of shared information?&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions have no universal answers because they depend on the operational environment, but they all point toward the same realization.&lt;/p&gt;

&lt;p&gt;Good memory is not about remembering everything.&lt;/p&gt;

&lt;p&gt;It is about remembering the right things for the right amount of time.&lt;/p&gt;

&lt;p&gt;That realization also explains why many modern agent architectures separate different forms of memory instead of treating all knowledge equally.&lt;/p&gt;

&lt;p&gt;Working memory supports the current execution. It contains the information immediately relevant to the task at hand and disappears once execution completes.&lt;/p&gt;

&lt;p&gt;Session memory preserves continuity across related interactions. It allows the agent to maintain progress without repeatedly rediscovering the same context during a larger workflow.&lt;/p&gt;

&lt;p&gt;Long-term operational memory captures knowledge that remains valuable across many independent executions. Architectural decisions, operational playbooks, coding conventions, verified documentation, and organizational knowledge often belong here, provided mechanisms exist to ensure that the information remains accurate over time.&lt;/p&gt;

&lt;p&gt;Separating these responsibilities reduces interference between temporary observations and long-term knowledge. It also allows each type of memory to evolve according to different policies rather than forcing every piece of information into a single persistent store.&lt;/p&gt;

&lt;p&gt;Interestingly, human teams operate in a remarkably similar way. Engineers rely on short-term working notes while debugging an incident, maintain project knowledge throughout the duration of a release, and preserve long-term architectural understanding through documentation and shared experience. Mixing all three into a single notebook would quickly become unmanageable.&lt;/p&gt;

&lt;p&gt;Agent systems benefit from the same discipline.&lt;/p&gt;

&lt;p&gt;Memory should support execution, not overwhelm it.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9x4ffvnhaa7qjyc5vt8m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9x4ffvnhaa7qjyc5vt8m.png" alt="Display the complete anatomy of an AI agent as interconnected operational layers." width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  None of These Components Matter Alone
&lt;/h2&gt;

&lt;p&gt;By this point, the anatomy of an agent may appear to consist of several independent building blocks. There are inputs, context, reasoning, constraints, tools, execution, and memory, each serving a distinct purpose within the system.&lt;/p&gt;

&lt;p&gt;The temptation is to optimize each one individually.&lt;/p&gt;

&lt;p&gt;In practice, that approach rarely produces reliable agents.&lt;/p&gt;

&lt;p&gt;The quality of an agent emerges from the interaction between these components rather than the strength of any single one.&lt;/p&gt;

&lt;p&gt;A state-of-the-art reasoning model cannot compensate for incomplete context. Rich contextual information cannot help if the agent lacks the tools required to verify its assumptions. Reliable tools become significantly less valuable when execution occurs without proper validation. Well-executed actions can still create long-term instability if inaccurate memories continue influencing future decisions.&lt;/p&gt;

&lt;p&gt;Every layer depends on the others.&lt;/p&gt;

&lt;p&gt;Consider a repository analysis agent reviewing a large software project before a migration.&lt;/p&gt;

&lt;p&gt;The reasoning model correctly identifies a potential architectural improvement. Context retrieval surfaces the relevant files, but an outdated design document introduces a subtle misunderstanding about service ownership. Based on that assumption, the agent queries the wrong repository through its tooling layer. The execution succeeds because the requested changes are technically valid, and the resulting documentation is stored as verified operational knowledge.&lt;/p&gt;

&lt;p&gt;From the perspective of each individual component, very little appears to have gone wrong.&lt;/p&gt;

&lt;p&gt;The reasoning process was coherent.&lt;/p&gt;

&lt;p&gt;The retrieval system returned documents.&lt;/p&gt;

&lt;p&gt;The tools executed successfully.&lt;/p&gt;

&lt;p&gt;The workflow completed.&lt;/p&gt;

&lt;p&gt;Memory was updated.&lt;/p&gt;

&lt;p&gt;Yet the overall system moved further away from reality because the components reinforced an incorrect assumption instead of challenging it.&lt;/p&gt;

&lt;p&gt;This is one of the reasons experienced builders invest so heavily in observability.&lt;/p&gt;

&lt;p&gt;Understanding &lt;em&gt;what&lt;/em&gt; an agent did is rarely enough.&lt;/p&gt;

&lt;p&gt;Builders also need to understand &lt;strong&gt;why&lt;/strong&gt; it reached that decision, &lt;strong&gt;which information&lt;/strong&gt; influenced it, &lt;strong&gt;which tools&lt;/strong&gt; it relied upon, &lt;strong&gt;which constraints&lt;/strong&gt; shaped the outcome, and &lt;strong&gt;which memories&lt;/strong&gt; may continue affecting future executions.&lt;/p&gt;

&lt;p&gt;Without that visibility, failures become extremely difficult to diagnose. The final response may appear reasonable while the underlying decision process quietly accumulates technical debt that only becomes visible much later.&lt;/p&gt;

&lt;p&gt;There is an interesting parallel here with how J.A.R.V.I.S. operates throughout the early Marvel films. J.A.R.V.I.S. is often remembered as an intelligent assistant, but his real value comes from continuous coordination. He monitors suit diagnostics, manages communications, analyzes environmental data, coordinates multiple subsystems, and surfaces relevant information at exactly the right moment. His usefulness does not come from a single extraordinary capability. It comes from the reliable interaction of many ordinary capabilities working together.&lt;/p&gt;

&lt;p&gt;Well-designed agents follow the same principle.&lt;/p&gt;

&lt;p&gt;They are not impressive because one component is exceptionally intelligent.&lt;/p&gt;

&lt;p&gt;They are dependable because every component continuously supports the others.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing Reflection
&lt;/h2&gt;

&lt;p&gt;When builders first begin exploring AI agents, it is natural to focus on the reasoning model. It is the most visible part of the system, the easiest to experiment with, and the component responsible for producing the responses that capture everyone's attention.&lt;/p&gt;

&lt;p&gt;Given enough time, however, that perspective usually changes.&lt;/p&gt;

&lt;p&gt;The reasoning model gradually becomes one element within a much larger operational architecture. Context determines what the model understands before reasoning begins. Constraints shape which decisions remain acceptable. Tools allow those decisions to interact with the outside world. Execution transforms plans into real-world consequences. Memory carries the results of today's decisions into tomorrow's workflows.&lt;/p&gt;

&lt;p&gt;None of these layers exist in isolation.&lt;/p&gt;

&lt;p&gt;Each one influences the others, and weaknesses in one layer eventually propagate throughout the entire system. Improving an agent therefore becomes less about finding a smarter model and more about strengthening the relationships between the components surrounding it.&lt;/p&gt;

&lt;p&gt;This shift in thinking also changes where engineering effort is invested. Prompt optimization gives way to context engineering. Tool integration evolves into capability design. Memory becomes an operational concern rather than a storage problem. Observability becomes just as important as reasoning quality because understanding &lt;em&gt;how&lt;/em&gt; an agent reached a decision is often more valuable than simply knowing &lt;em&gt;what&lt;/em&gt; it decided.&lt;/p&gt;

&lt;p&gt;Viewed from this perspective, the anatomy of an agent is not a checklist of technologies. It is a map of dependencies.&lt;/p&gt;

&lt;p&gt;Understanding that map allows builders to identify where failures originate, where reliability can be improved, and where new capabilities can be introduced without destabilizing the rest of the system. More importantly, it reveals that successful agents are rarely built by maximizing a single component. They emerge from carefully balancing many interconnected systems that must continue operating together as the surrounding environment evolves.&lt;/p&gt;

&lt;p&gt;The anatomy, then, is not simply about understanding how an agent works.&lt;/p&gt;

&lt;p&gt;It is about understanding where engineering discipline creates leverage.&lt;/p&gt;

&lt;p&gt;Because in the end, reliable agents are not assembled by adding more intelligence.&lt;/p&gt;

&lt;p&gt;They are engineered by designing systems that allow intelligence to operate safely, consistently, and effectively in the real world.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>architecture</category>
      <category>programming</category>
    </item>
    <item>
      <title>Anatomy of a Good Skill: Designing Capabilities That Systems Can Trust</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Sun, 21 Jun 2026 17:46:26 +0000</pubDate>
      <link>https://dev.to/codanyks/anatomy-of-a-good-skill-designing-capabilities-that-systems-can-trust-4ap5</link>
      <guid>https://dev.to/codanyks/anatomy-of-a-good-skill-designing-capabilities-that-systems-can-trust-4ap5</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;A skill is more than instructions. Learn how reliable skills define inputs, outputs, contracts, failures, and flexibility inside agent systems.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the &lt;a href="https://dev.to/codanyks/what-is-a-skill-19en"&gt;previous article&lt;/a&gt;, we looked at what a skill actually represents inside an agent system. A skill is not just a collection of instructions or a reusable prompt. It is a defined capability that allows an agent to perform a specific operation without rebuilding the same reasoning every time.&lt;/p&gt;

&lt;p&gt;That definition introduces the next question.&lt;/p&gt;

&lt;p&gt;If a skill becomes a reusable capability inside an agent workflow, what makes one skill better than another?&lt;/p&gt;

&lt;p&gt;A skill can technically work and still be a poor building block.&lt;/p&gt;

&lt;p&gt;It may complete the task once, but fail when another agent tries to use it. It may produce useful information, but in a format that cannot be consumed by the next step in a workflow. It may handle the ideal scenario but collapse when the input is incomplete or unexpected.&lt;/p&gt;

&lt;p&gt;The difference between a basic skill and a reliable skill comes down to design.&lt;/p&gt;

&lt;p&gt;A reliable skill behaves less like an isolated instruction and more like a well-defined system component. It has boundaries, expectations, and predictable behavior. Other parts of the system should understand how to interact with it without needing to inspect its internal reasoning.&lt;/p&gt;

&lt;p&gt;This is where skill design becomes important.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Skill Needs a Contract
&lt;/h2&gt;

&lt;p&gt;In software systems, components become easier to maintain when they have clear contracts.&lt;/p&gt;

&lt;p&gt;A function defines what arguments it accepts and what it returns. An API defines how another system communicates with it. A service defines what happens when a request succeeds or fails.&lt;/p&gt;

&lt;p&gt;Skills need the same discipline.&lt;/p&gt;

&lt;p&gt;A skill contract defines the relationship between the capability and the system using it.&lt;/p&gt;

&lt;p&gt;It answers a few important questions:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What information does this skill require?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What kind of result will it produce?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What assumptions does it make?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What should happen when the required information is missing?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Without these boundaries, a skill becomes difficult to compose.&lt;/p&gt;

&lt;p&gt;Consider a simple skill called &lt;strong&gt;Generate Project Summary&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A weak implementation might describe it as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Analyze the project and create a summary.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The intention is clear for a human, but the system still has many unanswered questions.&lt;/p&gt;

&lt;p&gt;Does the skill need source files, documentation, recent commits, user notes, or previous decisions? Should the output be a paragraph, a structured report, or a list of important findings?&lt;/p&gt;

&lt;p&gt;The problem is not that the skill cannot perform the task.&lt;/p&gt;

&lt;p&gt;The problem is that the interface is undefined.&lt;/p&gt;

&lt;p&gt;A better-designed skill makes these expectations explicit. It defines what context it requires and what shape the final output should follow. Once that exists, the skill becomes easier to connect with other agents, tools, and workflows.&lt;/p&gt;

&lt;p&gt;The contract becomes the bridge between capability and coordination.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2ngnzktlrhfv4ntykmr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2ngnzktlrhfv4ntykmr.jpg" alt="The architecture of an AI skill contract." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Inputs Define the Skill’s Boundary
&lt;/h2&gt;

&lt;p&gt;The quality of a skill often depends on how carefully its inputs are designed.&lt;/p&gt;

&lt;p&gt;Many early skills become unreliable because they attempt to accept everything. They are created with broad instructions like &lt;strong&gt;handle anything related to coding&lt;/strong&gt; or &lt;strong&gt;help with project tasks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;These descriptions sound flexible, but they create uncertainty.&lt;/p&gt;

&lt;p&gt;When a skill accepts unclear inputs, the agent has to spend additional reasoning effort deciding what information matters. That decision might change from one execution to another, creating inconsistent behavior.&lt;/p&gt;

&lt;p&gt;A well-designed skill has a defined operating area.&lt;/p&gt;

&lt;p&gt;A code review skill, for example, should understand what it needs before reviewing a repository. It may require the changed files, project conventions, security expectations, or a specific review goal. If those details are missing, the skill should identify the gap instead of silently making assumptions.&lt;/p&gt;

&lt;p&gt;Good input design reduces unnecessary guessing.&lt;/p&gt;

&lt;p&gt;This does not mean every skill needs rigid schemas and dozens of required fields. Some skills naturally work with incomplete information. Research and exploration skills may need flexibility because their purpose is to investigate uncertainty.&lt;/p&gt;

&lt;p&gt;The important part is knowing where uncertainty belongs.&lt;/p&gt;

&lt;p&gt;A skill should be flexible where exploration is required and strict where correctness matters.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsyfmog3p1nucpb7xay1m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsyfmog3p1nucpb7xay1m.jpg" alt="Difference between a well-defined skill boundary and a chaotic undefined skill" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Outputs Should Be Designed for the Next System
&lt;/h2&gt;

&lt;p&gt;A common mistake when creating skills is focusing only on whether the skill completes its own task.&lt;/p&gt;

&lt;p&gt;But in an agent ecosystem, completion is only one part of the workflow.&lt;/p&gt;

&lt;p&gt;The next question is whether another system can use the result.&lt;/p&gt;

&lt;p&gt;A skill that returns a long explanation may be useful for a human reading it, but difficult for another agent to process. A deployment skill that simply says &lt;strong&gt;deployment failed&lt;/strong&gt; gives less value than one that returns the failed stage, error details, and possible recovery actions.&lt;/p&gt;

&lt;p&gt;Outputs are part of the skill’s interface.&lt;/p&gt;

&lt;p&gt;A good output format considers what happens after the skill finishes.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Will another skill consume this information?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Will an orchestrator decide the next action?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Will a human need to review it?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The answer changes how the output should be structured.&lt;/p&gt;

&lt;p&gt;This is why reliable skills often return information that is organized around decisions rather than only descriptions. The goal is not to make outputs longer. The goal is to make them useful.&lt;/p&gt;

&lt;p&gt;A skill should leave behind something another part of the system can act on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysanm6xq0srxgt4oguji.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysanm6xq0srxgt4oguji.png" alt="How skill outputs connect into larger agent systems." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Error Handling Is Part of the Design
&lt;/h2&gt;

&lt;p&gt;Many skills are designed around the successful path.&lt;/p&gt;

&lt;p&gt;The instructions explain what to do when everything is available and everything works correctly.&lt;/p&gt;

&lt;p&gt;Real systems rarely operate like that.&lt;/p&gt;

&lt;p&gt;Inputs can be incomplete. External tools can fail. Context can be outdated. The requested operation may not be possible with the available information.&lt;/p&gt;

&lt;p&gt;A skill that does not define these situations creates uncertainty for the entire workflow.&lt;/p&gt;

&lt;p&gt;Good skills include failure behavior as part of their design.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If required information is missing, should the skill request clarification?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If an external operation fails, should it retry or report the failure?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If partial results are available, should it return them?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;These decisions matter because failures propagate.&lt;/p&gt;

&lt;p&gt;In a chain of multiple skills, a poorly handled failure can confuse every later step. A clearly reported failure gives the system a chance to recover.&lt;/p&gt;

&lt;p&gt;Reliable systems are not built by avoiding failure.&lt;/p&gt;

&lt;p&gt;They are built by making failure understandable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Determinism vs Flexibility
&lt;/h2&gt;

&lt;p&gt;One of the biggest design choices in skill creation is deciding how much freedom the skill should have.&lt;/p&gt;

&lt;p&gt;Too much determinism creates rigid skills.&lt;/p&gt;

&lt;p&gt;They work only for one exact situation and become difficult to adapt.&lt;/p&gt;

&lt;p&gt;Too much flexibility creates unpredictable behavior.&lt;/p&gt;

&lt;p&gt;The skill may produce different outcomes depending on subtle changes in context, making it harder to trust.&lt;/p&gt;

&lt;p&gt;The right balance depends on the responsibility of the skill.&lt;/p&gt;

&lt;p&gt;A formatting skill, validation skill, or deployment check should usually behave closer to a traditional function. The expected behavior should remain consistent because other systems depend on accuracy.&lt;/p&gt;

&lt;p&gt;A research or planning skill may need more flexibility because the objective involves exploration and interpretation.&lt;/p&gt;

&lt;p&gt;The goal is not removing flexibility.&lt;/p&gt;

&lt;p&gt;The goal is controlled flexibility.&lt;/p&gt;

&lt;p&gt;A strong skill understands where variation is useful and where consistency is necessary.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuu5j2pflhvaqlhlhvetg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuu5j2pflhvaqlhlhvetg.png" alt="The balance between Determinism and Flexibility in skill design" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Building Skills That Scale
&lt;/h2&gt;

&lt;p&gt;A single skill can survive with loose instructions.&lt;/p&gt;

&lt;p&gt;A skill library cannot.&lt;/p&gt;

&lt;p&gt;Once agents start depending on multiple skills, every capability becomes part of a larger operating system. Small inconsistencies begin creating larger problems. Ambiguous inputs, unclear outputs, and undefined failures slowly make the whole workflow harder to maintain.&lt;/p&gt;

&lt;p&gt;This is why skill design matters.&lt;/p&gt;

&lt;p&gt;A good skill is not simply one that produces an answer.&lt;/p&gt;

&lt;p&gt;It is one that communicates clearly with the systems around it.&lt;/p&gt;

&lt;p&gt;It defines what it needs, what it provides, and how it behaves under different conditions. That clarity is what allows skills to become reusable building blocks instead of one-time solutions.&lt;/p&gt;

&lt;p&gt;The first step in building agent systems is creating capabilities.&lt;/p&gt;

&lt;p&gt;The next step is creating capabilities that can be trusted.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>softwareengineering</category>
      <category>architecture</category>
    </item>
    <item>
      <title>What Is an Agent?</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Mon, 08 Jun 2026 13:15:00 +0000</pubDate>
      <link>https://dev.to/codanyks/what-is-an-agent-4nli</link>
      <guid>https://dev.to/codanyks/what-is-an-agent-4nli</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Why Most Builders Misunderstand Agents&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The AI industry is approaching the word &lt;strong&gt;agent&lt;/strong&gt; the same way it once approached the word &lt;strong&gt;AI-powered&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Everything becomes one eventually.&lt;/p&gt;

&lt;p&gt;A chatbot becomes an agent.&lt;br&gt;&lt;br&gt;
A workflow becomes an agent.&lt;br&gt;&lt;br&gt;
A scheduled script becomes an autonomous system after adding an LLM somewhere in the middle.&lt;/p&gt;

&lt;p&gt;The label spreads faster than the architecture behind it.&lt;/p&gt;

&lt;p&gt;Right now, a large portion of the industry is optimizing for the appearance of agency rather than the operational reality of it. Systems are designed to &lt;strong&gt;&lt;em&gt;look autonomous&lt;/em&gt;&lt;/strong&gt; long before they are capable of surviving autonomous execution.&lt;/p&gt;

&lt;p&gt;And strangely, most builders do not notice the gap initially.&lt;/p&gt;

&lt;p&gt;Because modern models are extremely good at simulating coherence.&lt;/p&gt;

&lt;p&gt;A system can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;explain its reasoning,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;narrate execution,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;generate plans,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;sound adaptive,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;and still completely fail under operational pressure.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the part demos rarely reveal.&lt;/p&gt;

&lt;p&gt;Most AI agent demonstrations end before:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;memory degradation appears,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;recursive retries begin,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;context pollution accumulates,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;tool failures compound,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;execution drift starts,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;or operational ambiguity enters the loop.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The difficult part of agents is not generating impressive behavior for thirty seconds.&lt;/p&gt;

&lt;p&gt;The difficult part is sustaining useful behavior after uncertainty enters the environment.&lt;/p&gt;

&lt;p&gt;That is where the definition of an agent starts changing completely.&lt;/p&gt;

&lt;p&gt;A surprising number of modern “agents” are still heavily supervised orchestration systems temporarily surviving inside ideal conditions.&lt;/p&gt;

&lt;p&gt;And that realization becomes uncomfortable once you start building them at scale.&lt;/p&gt;

&lt;p&gt;In Iron Man, Jarvis is not impressive because it talks intelligently. Plenty of systems in science fiction talk intelligently.&lt;/p&gt;

&lt;p&gt;Jarvis becomes interesting because it continuously operates underneath the surface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;monitoring systems,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;coordinating information,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;maintaining continuity,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;assisting execution,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;adapting to environmental changes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jarvis behaves less like a chatbot and more like operational infrastructure.&lt;/p&gt;

&lt;p&gt;That distinction is probably one of the most misunderstood ideas in the current AI ecosystem.&lt;/p&gt;

&lt;p&gt;Because most people still think agents are primarily conversation systems.&lt;/p&gt;

&lt;p&gt;They are not.&lt;/p&gt;

&lt;p&gt;The real challenge begins the moment conversation becomes execution.&lt;/p&gt;




&lt;h2&gt;
  
  
  Most Builders Are Still Optimizing Theater
&lt;/h2&gt;

&lt;p&gt;One of the strangest patterns in the current AI ecosystem is how much energy goes into optimizing visible intelligence while the operational layer remains fragile.&lt;/p&gt;

&lt;p&gt;Builders spend weeks refining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;prompts,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;personalities,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;orchestration aesthetics,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;conversational tone,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;autonomous demos,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;multi-agent visualizations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile the underlying execution systems often remain unstable.&lt;/p&gt;

&lt;p&gt;This creates a dangerous illusion.&lt;/p&gt;

&lt;p&gt;The system sounds intelligent, so builders assume the system behaves intelligently.&lt;/p&gt;

&lt;p&gt;Those are not the same thing.&lt;/p&gt;

&lt;p&gt;A coding agent may generate clean architectural explanations while repeatedly failing the same migration internally. A research agent may confidently synthesize information while reinforcing hallucinated assumptions through recursive retrieval loops. A deployment agent may narrate infrastructure success while silently ignoring failed health checks.&lt;/p&gt;

&lt;p&gt;Operationally, many agents are still extremely brittle.&lt;/p&gt;

&lt;p&gt;And the brittleness usually appears slowly rather than dramatically.&lt;/p&gt;

&lt;p&gt;That is what makes the problem difficult.&lt;/p&gt;

&lt;p&gt;Most systems do not collapse instantly.&lt;br&gt;&lt;br&gt;
They gradually drift away from operational truth.&lt;/p&gt;

&lt;p&gt;An agent retrieves stale memory.&lt;br&gt;&lt;br&gt;
That stale memory affects planning.&lt;br&gt;&lt;br&gt;
The flawed plan affects execution.&lt;br&gt;&lt;br&gt;
Execution failures generate misleading logs.&lt;br&gt;&lt;br&gt;
Those logs re-enter memory retrieval.&lt;br&gt;&lt;br&gt;
The system slowly begins reinforcing its own incorrect assumptions.&lt;/p&gt;

&lt;p&gt;Eventually the agent starts retrieving its own outdated reasoning faster than actual environmental reality.&lt;/p&gt;

&lt;p&gt;This is where many long-running systems quietly deteriorate.&lt;/p&gt;

&lt;p&gt;And this is also the point where many builders realize they were never really building &lt;strong&gt;autonomous intelligence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;They were building orchestration systems struggling to maintain alignment under changing conditions.&lt;/p&gt;

&lt;p&gt;That realization changes how you think about agents entirely.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Builders Eventually Discover
&lt;/h2&gt;

&lt;p&gt;One of the reasons agent discussions become confusing is that builders often start with the visible layer and only later encounter the operational layer.&lt;/p&gt;

&lt;p&gt;At first, an agent appears deceptively simple. You give a model a goal, connect a few tools, add some memory, and watch it perform tasks that would have seemed impossible only a few years ago.&lt;/p&gt;

&lt;p&gt;For a while, this feels like progress.&lt;/p&gt;

&lt;p&gt;The system can inspect repositories, generate documentation, call APIs, analyze logs, search across internal knowledge, and coordinate multiple execution steps without direct human involvement. From the outside, it looks as though intelligence has finally become operational.&lt;/p&gt;

&lt;p&gt;Then the system runs long enough for reality to appear.&lt;/p&gt;

&lt;p&gt;The first major surprise is that the model itself is rarely the primary problem.&lt;/p&gt;

&lt;p&gt;Many builders enter agent development assuming that reasoning capability is the limiting factor. The assumption seems reasonable. If the model becomes smarter, the agent should become more capable.&lt;/p&gt;

&lt;p&gt;Production environments rarely behave that way.&lt;/p&gt;

&lt;p&gt;A repository agent retrieves outdated architectural assumptions and starts generating changes around an obsolete design. A deployment agent successfully executes infrastructure changes but incorrectly evaluates the outcome. A monitoring agent receives valid telemetry but prioritizes the wrong signals. A research agent gradually accumulates stale context and begins reinforcing conclusions that were already disproven several execution cycles earlier.&lt;/p&gt;

&lt;p&gt;When these failures start appearing consistently, something important becomes obvious.&lt;/p&gt;

&lt;p&gt;Agents are not primarily intelligence systems.&lt;/p&gt;

&lt;p&gt;They are coordination systems.&lt;/p&gt;

&lt;p&gt;The reasoning model remains important, but it operates inside a larger environment consisting of memory, tooling, retrieval, permissions, evaluation, execution logic, and recovery behavior. The challenge is not simply generating good decisions. The challenge is maintaining alignment between all of those moving parts while conditions continue changing.&lt;/p&gt;

&lt;p&gt;This realization changes how experienced builders think about agents. Before encountering these problems, it is easy to imagine an agent as an intelligent entity. After encountering them repeatedly, agents start looking much closer to distributed software systems with reasoning capabilities attached.&lt;/p&gt;

&lt;p&gt;That shift in perspective is where serious agent engineering begins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubm9jze0dzok5gsivpdv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubm9jze0dzok5gsivpdv.png" alt="Illustration showing the difference between a simple AI chat interface and the complex operational systems hidden behind it, including memory, tools, repositories, MCP servers, evaluators, and execution workflows." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Difference Between Automation and Agency
&lt;/h2&gt;

&lt;p&gt;This realization also explains why so many discussions confuse automation with agency.&lt;/p&gt;

&lt;p&gt;Traditional automation systems operate inside predefined boundaries. They follow established paths and produce predictable outcomes. When something unexpected happens, they usually stop and hand control back to humans.&lt;/p&gt;

&lt;p&gt;Agents attempt something different.&lt;/p&gt;

&lt;p&gt;They continue operating when uncertainty appears.&lt;/p&gt;

&lt;p&gt;That sounds like a small distinction until you examine what it means operationally.&lt;/p&gt;

&lt;p&gt;Imagine a deployment workflow executing a database migration. If the migration fails, a traditional automation system records the error and exits. The workflow did exactly what it was designed to do.&lt;/p&gt;

&lt;p&gt;An agent is expected to continue. It may inspect logs, analyze dependencies, investigate recent changes, propose corrective actions, attempt recovery strategies, or escalate the issue based on confidence levels.&lt;/p&gt;

&lt;p&gt;This recovery behavior is where agency starts emerging.&lt;/p&gt;

&lt;p&gt;It is also where complexity grows rapidly.&lt;/p&gt;

&lt;p&gt;Every additional decision introduces new opportunities for misinterpretation. Every attempt to recover requires context. Every context source introduces ambiguity. Every ambiguity increases the possibility that the system will pursue the wrong path while believing it is making progress.&lt;/p&gt;

&lt;p&gt;Many current agent demonstrations focus heavily on successful execution paths. Production environments spend far more time dealing with unsuccessful ones.&lt;/p&gt;

&lt;p&gt;The real test of agency is not whether a system can execute a plan. The real test is how it behaves after the original plan stops working.&lt;/p&gt;

&lt;p&gt;That is why agency should be viewed as an operational property rather than a marketing label. It is less about what a system can do under ideal conditions and more about how it behaves when those conditions disappear.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Memory Becomes the First Real Problem
&lt;/h2&gt;

&lt;p&gt;Most builders think memory exists to help agents remember more.&lt;/p&gt;

&lt;p&gt;In practice, memory often becomes the first major source of instability.&lt;/p&gt;

&lt;p&gt;The initial challenge is not forgetting useful information. The initial challenge is remembering incorrect information for too long.&lt;/p&gt;

&lt;p&gt;An agent operating across days or weeks accumulates assumptions constantly. Some of those assumptions are accurate. Some are incomplete. Some become obsolete. Some were wrong from the beginning.&lt;/p&gt;

&lt;p&gt;Without careful memory management, all of them start looking equally important.&lt;/p&gt;

&lt;p&gt;This is where many systems begin drifting away from reality.&lt;/p&gt;

&lt;p&gt;A repository agent incorrectly identifies a service boundary. That assumption gets stored. Future retrievals surface the same assumption repeatedly. New plans become influenced by it. Subsequent actions generate additional evidence that appears to validate the original conclusion. Eventually the agent develops an internally consistent understanding that is completely disconnected from the actual architecture.&lt;/p&gt;

&lt;p&gt;The problem is not intelligence.&lt;/p&gt;

&lt;p&gt;The problem is accumulated context.&lt;/p&gt;

&lt;p&gt;Many builders discover that long-term memory behaves less like a knowledge system and more like an operational dependency. Once memory starts influencing decisions, memory quality becomes just as important as model quality.&lt;/p&gt;

&lt;p&gt;This is one reason large context windows have not solved the memory problem. More context does not automatically create better understanding. In many cases, additional context simply increases the amount of information competing for attention.&lt;/p&gt;

&lt;p&gt;Experienced teams eventually spend less time discussing memory size and more time discussing memory quality. Retrieval strategies, relevance scoring, compression, expiration policies, and contextual weighting often have a greater impact on reliability than adding more tokens to a context window.&lt;/p&gt;

&lt;p&gt;Memory sounds like a storage problem until agents begin operating continuously. At that point it becomes an alignment problem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F91fhe9b2ugwpkrek8uxu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F91fhe9b2ugwpkrek8uxu.png" alt="Visualization of an AI memory network where organized knowledge pathways gradually become tangled with stale assumptions, duplicated information, and corrupted context, illustrating memory drift in agent systems." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Tools Matter More Than Intelligence
&lt;/h2&gt;

&lt;p&gt;One of the easiest ways to expose the limitations of an agent is to remove its tools.&lt;/p&gt;

&lt;p&gt;The results are usually revealing.&lt;/p&gt;

&lt;p&gt;Without access to repositories, terminals, APIs, databases, browsers, monitoring systems, or execution environments, most agents become sophisticated narrators. They can explain what should happen. They can describe a solution. They can generate plans. But they cannot meaningfully interact with reality.&lt;/p&gt;

&lt;p&gt;This distinction matters because many discussions still frame agents primarily as reasoning systems.&lt;/p&gt;

&lt;p&gt;Reasoning is valuable. Capability comes from interaction.&lt;/p&gt;

&lt;p&gt;A deployment agent becomes useful because it can inspect infrastructure state. A monitoring agent becomes useful because it can access telemetry. A repository agent becomes useful because it can examine code directly rather than speculate about it.&lt;/p&gt;

&lt;p&gt;The most valuable agent systems increasingly resemble operational interfaces rather than conversational interfaces.&lt;/p&gt;

&lt;p&gt;This is also why protocols such as MCP have attracted so much attention. As agents gain access to more tools, the challenge shifts from generating responses to managing capabilities safely and consistently. Tool access becomes an architectural concern rather than a feature.&lt;/p&gt;

&lt;p&gt;Many builders begin their agent journey focused on model selection. After enough production experience, they often become more concerned with tool reliability, execution permissions, integration quality, and operational observability.&lt;/p&gt;

&lt;p&gt;The reasoning layer remains important, but tools are what allow reasoning to affect the real world.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Orchestration Eventually Becomes the Hardest Problem
&lt;/h2&gt;

&lt;p&gt;There is a point in nearly every agent project where model discussions start becoming less important.&lt;/p&gt;

&lt;p&gt;That point usually arrives when the system gains enough capabilities to become operationally useful.&lt;/p&gt;

&lt;p&gt;Once an agent can access memory, tools, retrieval systems, execution environments, and external services, coordination becomes the dominant challenge.&lt;/p&gt;

&lt;p&gt;The model may generate a reasonable plan, but the plan still needs context. Context needs retrieval. Retrieval needs ranking. Tool outputs need validation. Validation needs evaluation criteria. Evaluations need logging. Failures need recovery paths.&lt;/p&gt;

&lt;p&gt;Each layer introduces dependencies on every other layer.&lt;/p&gt;

&lt;p&gt;This is why many agent projects become significantly more complicated than their initial prototypes suggest.&lt;/p&gt;

&lt;p&gt;The prototype demonstrates intelligence.&lt;/p&gt;

&lt;p&gt;The production system demonstrates orchestration.&lt;/p&gt;

&lt;p&gt;Builders often discover that the majority of engineering effort eventually shifts away from prompts and toward infrastructure. Observability pipelines, execution tracing, evaluator systems, permission boundaries, memory governance, retry policies, and recovery workflows start consuming more attention than model behavior itself.&lt;/p&gt;

&lt;p&gt;The difficult part is that orchestration failures rarely look dramatic.&lt;/p&gt;

&lt;p&gt;A tool call returns partial information. A retrieval system surfaces slightly outdated context. An evaluator approves a questionable result. A retry introduces additional drift. None of these failures appear catastrophic individually. Together, they gradually pull the system away from reliable execution.&lt;/p&gt;

&lt;p&gt;This is why mature agent systems increasingly resemble operational platforms rather than AI demos.&lt;/p&gt;

&lt;p&gt;The intelligence layer remains visible. The orchestration layer determines whether the system survives.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8r9a3sh3h8un1411nsqb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8r9a3sh3h8un1411nsqb.png" alt="Detailed systems architecture illustration showing interconnected execution pipelines, tool servers, memory systems, monitoring platforms, evaluators, and MCP gateways coordinating through a complex orchestration network with retries, routing decisions, and dependency flows." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Most Agents Still Need Supervision
&lt;/h2&gt;

&lt;p&gt;One of the more interesting lessons emerging from production deployments is that agents rarely fail because they lack intelligence.&lt;/p&gt;

&lt;p&gt;They fail because they lack discipline.&lt;/p&gt;

&lt;p&gt;Long-running systems accumulate uncertainty continuously. Goals change. Context evolves. Dependencies shift. Tool outputs become inconsistent. Environmental conditions introduce ambiguity.&lt;/p&gt;

&lt;p&gt;Humans handle much of this through judgment developed from experience.&lt;/p&gt;

&lt;p&gt;Agents attempt to handle it through context, memory, retrieval, and reasoning.&lt;/p&gt;

&lt;p&gt;The gap between those approaches remains substantial.&lt;/p&gt;

&lt;p&gt;A coding agent may spend hours pursuing an implementation path built on a flawed architectural assumption. A monitoring agent may repeatedly investigate symptoms instead of root causes. A research agent may become increasingly confident in conclusions built on incomplete information.&lt;/p&gt;

&lt;p&gt;The common pattern is not stupidity.&lt;/p&gt;

&lt;p&gt;The common pattern is misalignment between the system's internal understanding and external reality.&lt;/p&gt;

&lt;p&gt;This is why supervision remains important.&lt;/p&gt;

&lt;p&gt;Not because agents are incapable of useful work. Many are already producing significant value. Supervision exists because reality changes faster than internal representations of reality.&lt;/p&gt;

&lt;p&gt;The most successful systems today are rarely fully autonomous. They are carefully constrained. They operate inside clear boundaries. They expose reasoning. They provide visibility into decisions. They make intervention possible before small mistakes become large ones.&lt;/p&gt;

&lt;p&gt;The future may include greater autonomy, but current operational experience continues pointing toward a simple conclusion:&lt;/p&gt;

&lt;p&gt;Reliability scales through architecture faster than it scales through intelligence alone.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Skills Matter More Than Agents
&lt;/h2&gt;

&lt;p&gt;Eventually, many builders arrive at a realization that changes how they evaluate the entire ecosystem.&lt;/p&gt;

&lt;p&gt;The agent itself is rarely the most valuable component.&lt;/p&gt;

&lt;p&gt;The skill is.&lt;/p&gt;

&lt;p&gt;This becomes obvious when comparing systems that look similar on the surface but produce dramatically different outcomes in practice.&lt;/p&gt;

&lt;p&gt;Two agents may use the same model, the same framework, and the same orchestration platform. One consistently delivers useful results. The other produces attractive demonstrations but struggles under operational pressure.&lt;/p&gt;

&lt;p&gt;The difference usually exists inside the capability layer.&lt;/p&gt;

&lt;p&gt;A repository analysis skill may understand architectural boundaries, dependency relationships, migration risks, ownership patterns, and historical changes. A deployment skill may understand rollback procedures, infrastructure dependencies, environment validation, and release verification. A monitoring skill may understand anomaly correlation, alert prioritization, incident history, and telemetry interpretation.&lt;/p&gt;

&lt;p&gt;These capabilities do not emerge automatically from intelligence.&lt;/p&gt;

&lt;p&gt;They emerge from specialization.&lt;/p&gt;

&lt;p&gt;This is why many teams eventually stop asking how to build smarter agents and start asking how to build better skills.&lt;/p&gt;

&lt;p&gt;The shift is subtle but important. It moves attention away from personalities and interfaces and toward operational competence.&lt;/p&gt;

&lt;p&gt;Interestingly, this resembles how effective teams operate in the real world. Organizations rarely succeed because every individual can do everything. They succeed because specialized capabilities are coordinated effectively toward shared objectives.&lt;/p&gt;

&lt;p&gt;The same pattern appears to be emerging inside agent ecosystems.&lt;/p&gt;

&lt;p&gt;Skills create capability.&lt;/p&gt;

&lt;p&gt;Agents coordinate capability.&lt;/p&gt;

&lt;p&gt;Understanding the difference may be one of the most important architectural lessons of the current AI cycle.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Future May Look More Like Infrastructure Than Intelligence
&lt;/h2&gt;

&lt;p&gt;Much of the public conversation around agents still assumes they will become increasingly visible.&lt;/p&gt;

&lt;p&gt;Operational trends suggest the opposite.&lt;/p&gt;

&lt;p&gt;The most useful systems are often the ones that disappear into workflows.&lt;/p&gt;

&lt;p&gt;They monitor environments, validate actions, retrieve context, coordinate tools, identify anomalies, surface relevant information, and assist execution without constantly demanding attention.&lt;/p&gt;

&lt;p&gt;In many ways, this brings the discussion back to Jarvis. The character was never compelling because it could generate responses. It was compelling because it continuously supported a larger operational system without becoming the center of it.&lt;/p&gt;

&lt;p&gt;That may be a more useful mental model for the future than many of the autonomous assistant narratives currently dominating the industry.&lt;/p&gt;

&lt;p&gt;The long-term value of agents may not come from replacing human decision-making. It may come from reducing operational friction around it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flld7fpvbuhp274bqo4h1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flld7fpvbuhp274bqo4h1.png" alt="Workspace showing a systems builder reviewing memory flows, execution traces, monitoring dashboards, skill coordination graphs, and operational AI infrastructure, emphasizing architecture and coordination over artificial intelligence itself." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing Reflection
&lt;/h2&gt;

&lt;p&gt;Most builders begin by viewing agents as intelligent entities.&lt;/p&gt;

&lt;p&gt;Many finish by viewing them as coordination systems.&lt;/p&gt;

&lt;p&gt;That shift sounds small, but it changes nearly every architectural decision that follows.&lt;/p&gt;

&lt;p&gt;Once agents are understood as coordination systems, different questions start becoming important. Memory quality becomes more important than memory volume. Recovery behavior becomes more important than successful demos. Observability becomes more important than polished conversations. Specialized capabilities become more important than generalized intelligence.&lt;/p&gt;

&lt;p&gt;The conversation stops revolving around whether a model can appear intelligent and starts revolving around whether a system can remain useful while interacting with reality.&lt;/p&gt;

&lt;p&gt;That is ultimately where most agent projects succeed or fail.&lt;/p&gt;

&lt;p&gt;The industry will continue producing impressive demonstrations. Some of them will evolve into durable systems. Many will not. The difference will rarely come down to intelligence alone.&lt;/p&gt;

&lt;p&gt;It will come down to architecture, discipline, and the ability to remain aligned after uncertainty enters the loop.&lt;/p&gt;

&lt;p&gt;That is what agents actually force builders to learn. Not how to create intelligence, but how to coordinate it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>architecture</category>
      <category>codanyks</category>
    </item>
    <item>
      <title>What Is a Skill?</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Sun, 31 May 2026 12:15:00 +0000</pubDate>
      <link>https://dev.to/codanyks/what-is-a-skill-19en</link>
      <guid>https://dev.to/codanyks/what-is-a-skill-19en</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Why Skills Matter More Than Most AI Builders Realize?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most builders enter AI systems through prompts.&lt;/p&gt;

&lt;p&gt;That makes sense initially because prompts are the most visible layer. You type instructions, the model responds, and useful output appears almost immediately. Early experimentation feels deceptively smooth because the system complexity is still low. One prompt handles one task, context windows remain small, and the workflow has not yet accumulated operational pressure.&lt;/p&gt;

&lt;p&gt;The problems usually begin once builders try scaling behaviour instead of generating isolated outputs.&lt;/p&gt;

&lt;p&gt;A single prompt turns into a workflow. The workflow starts calling tools. Outputs become inputs for downstream steps. Context grows larger. Formatting becomes important. Retry logic appears. Validation becomes necessary because malformed outputs start breaking later stages of execution. Eventually the system stops behaving like a chatbot and starts behaving like infrastructure.&lt;/p&gt;

&lt;p&gt;This is usually the point where builders begin encountering the concept of &lt;strong&gt;skills&lt;/strong&gt;, even if they are not using that terminology yet.&lt;/p&gt;

&lt;p&gt;A skill is not simply a well-written prompt. A skill is a reusable operational capability designed to perform a specific responsibility consistently under repeated execution. That distinction becomes extremely important once AI systems move beyond demos and into environments where reliability matters more than novelty.&lt;/p&gt;

&lt;p&gt;For example, a markdown cleanup skill is not just:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;strong&gt;Format this document properly.&lt;/strong&gt;”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A production-grade formatting skill often includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  preprocessing,&lt;/li&gt;
&lt;li&gt;  structure normalization,&lt;/li&gt;
&lt;li&gt;  token-aware chunk handling,&lt;/li&gt;
&lt;li&gt;  output validation,&lt;/li&gt;
&lt;li&gt;  formatting constraints,&lt;/li&gt;
&lt;li&gt;  retry behaviour,&lt;/li&gt;
&lt;li&gt;  schema checks,&lt;/li&gt;
&lt;li&gt;  fallback responses,&lt;/li&gt;
&lt;li&gt;  and observability around failures.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The prompt is only one component inside the operational system.&lt;/p&gt;

&lt;p&gt;This difference is easy to underestimate early on because modern models are extremely capable at improvisation. The danger is that improvisation creates the illusion of reliability. Systems appear stable until execution volume increases, context becomes noisy, or workflows begin interacting with each other in unpredictable ways.&lt;/p&gt;

&lt;p&gt;Many AI systems fail not because the model lacks intelligence, but because the operational architecture around the model was never properly constrained.&lt;/p&gt;

&lt;p&gt;That is where &lt;strong&gt;skills&lt;/strong&gt; become foundational.&lt;/p&gt;




&lt;h2&gt;
  
  
  Skills Are About Operational Reliability, Not Intelligence
&lt;/h2&gt;

&lt;p&gt;One of the easiest mistakes in AI architecture is assuming intelligence automatically creates reliability.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;It does not.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A model can generate brilliant output in one execution and structurally invalid output in the next. The challenge is not whether the system can succeed occasionally. The challenge is whether it can behave predictably across hundreds or thousands of repeated executions with inconsistent inputs, noisy context, and orchestration pressure.&lt;/p&gt;

&lt;p&gt;This changes how experienced builders think about system design.&lt;/p&gt;

&lt;p&gt;Instead of asking: &lt;strong&gt;&lt;em&gt;How smart is this model?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They begin asking: &lt;strong&gt;&lt;em&gt;How dependable is this capability under operational load?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That shift changes almost everything.&lt;/p&gt;

&lt;p&gt;A retrieval skill, for example, is not judged solely by whether it finds information. It is judged by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  whether it consistently retrieves relevant context,&lt;/li&gt;
&lt;li&gt;  whether irrelevant memory pollutes execution,&lt;/li&gt;
&lt;li&gt;  whether retrieval latency remains acceptable,&lt;/li&gt;
&lt;li&gt;  whether the returned format stays predictable,&lt;/li&gt;
&lt;li&gt;  whether downstream systems can trust the response shape,&lt;/li&gt;
&lt;li&gt;  and whether the retrieval behaviour remains stable as data volume grows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those concerns sound closer to infrastructure engineering than chatbot design because that is effectively what production AI systems become over time.&lt;/p&gt;

&lt;p&gt;Even systems like JARVIS in Iron Man were functionally structured around specialized operational responsibilities. Diagnostics, targeting, environmental analysis, and execution support were separated into capabilities instead of being treated as one giant undefined intelligence layer. Real AI systems increasingly evolve the same way. Reliability usually emerges from constrained specialization rather than unrestricted autonomy.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F67bad6e0e5f3dbbe31047b35%2F738dba37-09ba-4281-a7cf-c20a167011f6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F67bad6e0e5f3dbbe31047b35%2F738dba37-09ba-4281-a7cf-c20a167011f6.png" alt="Prompt → Skill → Agent orchestration" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt vs Skill vs Agent
&lt;/h2&gt;

&lt;p&gt;A large amount of confusion in AI discussions comes from people using prompts, skills, and agents interchangeably even though they represent different architectural layers.&lt;/p&gt;

&lt;p&gt;A prompt is instruction.&lt;/p&gt;

&lt;p&gt;A skill is an operational capability.&lt;/p&gt;

&lt;p&gt;An agent is an orchestration layer responsible for coordination and decision-making.&lt;/p&gt;

&lt;p&gt;This distinction matters because each layer solves a different problem.&lt;/p&gt;

&lt;p&gt;Consider a documentation workflow for a software repository.&lt;/p&gt;

&lt;p&gt;A simple version might begin with a prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;strong&gt;Summarize this repository and generate documentation.&lt;/strong&gt;”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That works for small experiments. But production systems eventually require more control.&lt;/p&gt;

&lt;p&gt;The workflow may evolve into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  a repository ingestion skill,&lt;/li&gt;
&lt;li&gt;  a dependency analysis skill,&lt;/li&gt;
&lt;li&gt;  a markdown normalization skill,&lt;/li&gt;
&lt;li&gt;  a code summarization skill,&lt;/li&gt;
&lt;li&gt;  a validation skill,&lt;/li&gt;
&lt;li&gt;  and a publishing skill.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An orchestration agent may coordinate those capabilities by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  deciding execution order,&lt;/li&gt;
&lt;li&gt;  handling retries,&lt;/li&gt;
&lt;li&gt;  managing context windows,&lt;/li&gt;
&lt;li&gt;  routing tasks,&lt;/li&gt;
&lt;li&gt;  and validating final outputs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The prompts still exist, but they are now embedded inside operational systems rather than functioning as the system itself.&lt;/p&gt;

&lt;p&gt;This is one of the biggest architectural transitions builders eventually make. They stop viewing AI systems as conversations and begin viewing them as coordinated execution pipelines.&lt;/p&gt;

&lt;p&gt;That shift changes how workflows are designed, tested, monitored, and maintained.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Actually Makes Something a Skill?
&lt;/h2&gt;

&lt;p&gt;A useful way to think about skills is that they represent constrained operational behaviour around a narrowly defined responsibility.&lt;/p&gt;

&lt;p&gt;Good skills are usually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  specialized,&lt;/li&gt;
&lt;li&gt;  observable,&lt;/li&gt;
&lt;li&gt;  replaceable,&lt;/li&gt;
&lt;li&gt;  composable,&lt;/li&gt;
&lt;li&gt;  and predictable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The narrower the responsibility, the easier the capability becomes to stabilize.&lt;/p&gt;

&lt;p&gt;For example, a JSON validation skill should not simultaneously:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  summarize content,&lt;/li&gt;
&lt;li&gt;  retrieve memory,&lt;/li&gt;
&lt;li&gt;  classify intent,&lt;/li&gt;
&lt;li&gt;  and rewrite formatting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That kind of overloaded behaviour creates hidden coupling between unrelated responsibilities. Small prompt modifications begin affecting downstream behaviour in unpredictable ways. Eventually teams reach a point where nobody wants to modify the workflow anymore because every small change risks destabilizing unrelated execution paths.&lt;/p&gt;

&lt;p&gt;This is one of the most common operational failure patterns in growing AI systems.&lt;/p&gt;

&lt;p&gt;Builders accidentally create tightly coupled cognitive workflows without realizing it.&lt;/p&gt;

&lt;p&gt;A well-designed skill usually contains several important layers beneath the visible prompt.&lt;/p&gt;

&lt;p&gt;Input contracts define what the system accepts and rejects. Context boundaries determine what information enters execution. Validation layers verify structural correctness. Retry behaviour handles unstable outputs. Observability mechanisms track failures and execution drift over time.&lt;/p&gt;

&lt;p&gt;Without these layers, workflows become fragile surprisingly quickly.&lt;/p&gt;

&lt;p&gt;A summarization skill, for instance, may initially perform well during testing. But after deployment, real-world inputs begin exposing weaknesses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  oversized documents,&lt;/li&gt;
&lt;li&gt;  malformed formatting,&lt;/li&gt;
&lt;li&gt;  multilingual content,&lt;/li&gt;
&lt;li&gt;  irrelevant retrieval injections,&lt;/li&gt;
&lt;li&gt;  inconsistent markdown,&lt;/li&gt;
&lt;li&gt;  duplicated context,&lt;/li&gt;
&lt;li&gt;  hallucinated citations,&lt;/li&gt;
&lt;li&gt;  partial truncation,&lt;/li&gt;
&lt;li&gt;  or downstream formatting failures.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Production environments introduce entropy continuously.&lt;/p&gt;

&lt;p&gt;Good skills are designed with the assumption that entropy is normal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpbxu1w63zgmzhyquqg2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpbxu1w63zgmzhyquqg2.png" alt="Break down skill internals visually" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Anatomy of a Reliable Skill
&lt;/h2&gt;

&lt;p&gt;Reliable skills are usually designed more like operational components than prompts.&lt;/p&gt;

&lt;p&gt;The first major characteristic is controlled input structure. Systems become unstable when inputs are unconstrained because models begin adapting behaviour inconsistently depending on context quality. A retrieval cleanup skill, for example, may expect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  vector search results,&lt;/li&gt;
&lt;li&gt;  metadata fields,&lt;/li&gt;
&lt;li&gt;  relevance scores,&lt;/li&gt;
&lt;li&gt;  and token limits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If those assumptions are violated silently, downstream behaviour becomes unpredictable.&lt;/p&gt;

&lt;p&gt;The second characteristic is context discipline.&lt;/p&gt;

&lt;p&gt;Many builders assume larger context automatically improves intelligence. In practice, excessive context often reduces execution quality. Irrelevant instructions accumulate. Older workflow assumptions remain active accidentally. Retrieval systems inject noisy memory. Tool outputs collide with formatting expectations.&lt;/p&gt;

&lt;p&gt;Over time the model starts responding to cognitive residue rather than active execution intent.&lt;/p&gt;

&lt;p&gt;This becomes especially visible in long-running agent systems where context inheritance slowly contaminates workflow reliability.&lt;/p&gt;

&lt;p&gt;A surprisingly large percentage of production debugging involves discovering which forgotten instruction is still influencing execution several layers downstream.&lt;/p&gt;

&lt;p&gt;The third characteristic is observability.&lt;/p&gt;

&lt;p&gt;Reliable systems expose execution behaviour clearly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  structured outputs,&lt;/li&gt;
&lt;li&gt;  validation reports,&lt;/li&gt;
&lt;li&gt;  execution logs,&lt;/li&gt;
&lt;li&gt;  confidence checks,&lt;/li&gt;
&lt;li&gt;  retry visibility,&lt;/li&gt;
&lt;li&gt;  failure tracking,&lt;/li&gt;
&lt;li&gt;  and schema verification.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without observability, debugging AI systems becomes extremely expensive because failures rarely remain isolated. One malformed response can silently poison downstream execution several stages later.&lt;/p&gt;

&lt;p&gt;A classification skill returning inconsistent labels may eventually break routing logic. A markdown formatter inserting unstable syntax may cause rendering failures later in publishing pipelines. A retrieval skill returning oversized context may indirectly destabilize summarization quality three steps downstream.&lt;/p&gt;

&lt;p&gt;AI systems often fail through accumulation rather than catastrophic collapse.&lt;/p&gt;

&lt;p&gt;That is why operational visibility matters so heavily.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs32aj6jevpz01qu0h1ux.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs32aj6jevpz01qu0h1ux.png" alt="Visually reinforce operational entropy" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Production Systems Become Fragile
&lt;/h2&gt;

&lt;p&gt;Many workflows initially appear stable because testing environments are unrealistically clean.&lt;/p&gt;

&lt;p&gt;Inputs are controlled.&lt;br&gt;&lt;br&gt;
Execution paths are predictable.&lt;br&gt;&lt;br&gt;
Context is manually curated.&lt;br&gt;&lt;br&gt;
Token pressure is low.&lt;br&gt;&lt;br&gt;
Failure conditions are rare.&lt;/p&gt;

&lt;p&gt;Production systems remove those protections almost immediately.&lt;/p&gt;

&lt;p&gt;One common problem is instruction collision. Multiple workflow layers unintentionally introduce competing behavioural constraints. A system prompt asks for concise output while downstream formatting instructions require verbose structure. Retrieval memory injects outdated assumptions. Validation layers attempt correction after the model has already committed to the wrong structure.&lt;/p&gt;

&lt;p&gt;The system technically still functions, but reliability slowly degrades.&lt;/p&gt;

&lt;p&gt;Another issue is orchestration fatigue. As workflows grow, execution chains become increasingly difficult to reason about operationally. Builders add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  retries,&lt;/li&gt;
&lt;li&gt;  fallback models,&lt;/li&gt;
&lt;li&gt;  tool routing,&lt;/li&gt;
&lt;li&gt;  memory systems,&lt;/li&gt;
&lt;li&gt;  validators,&lt;/li&gt;
&lt;li&gt;  context injectors,&lt;/li&gt;
&lt;li&gt;  post-processors,&lt;/li&gt;
&lt;li&gt;  and formatting layers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eventually the workflow behaves less like one coherent system and more like overlapping operational assumptions stitched together over time.&lt;/p&gt;

&lt;p&gt;This is also where hidden maintenance costs begin emerging.&lt;/p&gt;

&lt;p&gt;Many teams eventually stop modifying prompts because changing one instruction unexpectedly affects unrelated workflows. Nobody fully understands which behaviours are inherited, which are emergent, and which exist accidentally due to context interactions accumulated months earlier.&lt;/p&gt;

&lt;p&gt;That situation is extremely common in rapidly evolving AI stacks.&lt;/p&gt;

&lt;p&gt;The challenge is rarely intelligence.&lt;br&gt;&lt;br&gt;
The challenge is operational predictability under scaling pressure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Modularity Matters So Much
&lt;/h2&gt;

&lt;p&gt;Modularity matters because operational complexity compounds faster than most builders expect.&lt;/p&gt;

&lt;p&gt;Specialized skills reduce cognitive surface area. Smaller responsibilities are easier to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  monitor,&lt;/li&gt;
&lt;li&gt;  debug,&lt;/li&gt;
&lt;li&gt;  validate,&lt;/li&gt;
&lt;li&gt;  optimize,&lt;/li&gt;
&lt;li&gt;  replace,&lt;/li&gt;
&lt;li&gt;  and reason about.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A narrowly scoped retrieval skill can be improved independently without destabilizing classification logic. A formatting validator can evolve separately from summarization behaviour. An extraction skill can be swapped entirely without redesigning orchestration architecture.&lt;/p&gt;

&lt;p&gt;This separation becomes increasingly valuable as workflows grow.&lt;/p&gt;

&lt;p&gt;Large universal prompts usually fail for the same reason monolithic software architectures eventually become painful. Responsibilities overlap, coupling increases, debugging becomes slower, and system behaviour becomes harder to predict after each modification.&lt;/p&gt;

&lt;p&gt;Operational trust erodes gradually.&lt;/p&gt;

&lt;p&gt;Modular skills help restore trust because responsibilities remain visible and isolated.&lt;/p&gt;

&lt;p&gt;That architectural pattern already exists across mature software systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  microservices,&lt;/li&gt;
&lt;li&gt;  pipeline stages,&lt;/li&gt;
&lt;li&gt;  infrastructure layers,&lt;/li&gt;
&lt;li&gt;  distributed execution boundaries.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI systems are slowly converging toward similar operational structures because scaling intelligence eventually creates the same maintainability pressures as scaling software.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5fc7xjt3raf07nd5ibgv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5fc7xjt3raf07nd5ibgv.png" alt="mature AI operational ecosystem" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Skills as Cognitive Infrastructure
&lt;/h2&gt;

&lt;p&gt;One of the more important shifts happening right now is that AI systems are slowly moving from interface-centric design toward infrastructure-centric design.&lt;/p&gt;

&lt;p&gt;Early AI products focused primarily on interaction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  conversations,&lt;/li&gt;
&lt;li&gt;  prompts,&lt;/li&gt;
&lt;li&gt;  chat interfaces,&lt;/li&gt;
&lt;li&gt;  response generation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But production environments prioritize something different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  dependable execution,&lt;/li&gt;
&lt;li&gt;  operational consistency,&lt;/li&gt;
&lt;li&gt;  orchestration reliability,&lt;/li&gt;
&lt;li&gt;  and maintainable workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Skills become important in this transition because they allow intelligence to behave like infrastructure instead of improvisation.&lt;/p&gt;

&lt;p&gt;A solo builder today can assemble operational systems that would previously require entire engineering teams:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  repository analysis pipelines,&lt;/li&gt;
&lt;li&gt;  autonomous documentation systems,&lt;/li&gt;
&lt;li&gt;  support triage workflows,&lt;/li&gt;
&lt;li&gt;  deployment review systems,&lt;/li&gt;
&lt;li&gt;  retrieval-assisted research agents,&lt;/li&gt;
&lt;li&gt;  structured content operations,&lt;/li&gt;
&lt;li&gt;  internal automation infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the leverage does not come from one giant autonomous agent doing everything.&lt;/p&gt;

&lt;p&gt;It usually comes from collections of constrained capabilities working together predictably.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;Even organizations like S.H.I.E.L.D operated through specialized operational divisions rather than one centralized entity attempting simultaneous execution of every responsibility. Mature AI systems increasingly evolve in a similar direction because specialization scales more reliably than generalized improvisation.&lt;/p&gt;

&lt;p&gt;The builders who understand this early tend to design systems differently from the beginning.&lt;/p&gt;

&lt;p&gt;They optimize less for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  impressive demos,&lt;/li&gt;
&lt;li&gt;  conversational novelty,&lt;/li&gt;
&lt;li&gt;  or unrestricted autonomy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And more for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  reliability,&lt;/li&gt;
&lt;li&gt;  observability,&lt;/li&gt;
&lt;li&gt;  maintainability,&lt;/li&gt;
&lt;li&gt;  operational trust,&lt;/li&gt;
&lt;li&gt;  and execution stability over time.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Closing Reflection
&lt;/h2&gt;

&lt;p&gt;Skills matter because they change how AI systems are understood architecturally.&lt;/p&gt;

&lt;p&gt;Once builders begin thinking in terms of operational capabilities instead of isolated prompts, workflows become easier to scale, maintain, and reason about. Reliability improves because execution boundaries become clearer. Observability improves because responsibilities become isolated. Systems become less dependent on improvisation and more dependent on structured operational behaviour.&lt;/p&gt;

&lt;p&gt;That shift is subtle initially, but it changes nearly every design decision afterward.&lt;/p&gt;

&lt;p&gt;The future of AI infrastructure will likely depend less on building increasingly dramatic autonomous agents and more on building dependable operational layers underneath them.&lt;/p&gt;

&lt;p&gt;Because after the demo phase ends, stability becomes more valuable than spectacle.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>beginners</category>
      <category>codanyks</category>
    </item>
    <item>
      <title>Triggering Agents with Binance Price Events</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Sat, 28 Jun 2025 15:15:00 +0000</pubDate>
      <link>https://dev.to/codanyks/triggering-agents-with-binance-price-events-5a1c</link>
      <guid>https://dev.to/codanyks/triggering-agents-with-binance-price-events-5a1c</guid>
      <description>&lt;h3&gt;
  
  
  Turning real-time price signals into agent-driven automation with the MCP server.
&lt;/h3&gt;

&lt;p&gt;If you followed the MCP server series, you already know how to build a system that lets agents process goals with rich context. But what if that context came from the outside world — live, volatile, and full of opportunity?&lt;/p&gt;

&lt;p&gt;Welcome to your first &lt;em&gt;real-world input&lt;/em&gt;: &lt;a href="https://www.binance.com/activity/referral-entry/CPA?ref=CPA_00N98FDBL5" rel="noopener noreferrer"&gt;Binance&lt;/a&gt; price data.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;This isn’t a trading bot. This is about using &lt;strong&gt;market signals as system triggers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine this: Bitcoin crosses $100K — and your agent kicks in, not to trade, but to &lt;em&gt;do something&lt;/em&gt;. It could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Alert your Telegram group&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Archive a snapshot to Notion&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Log the event to a custom journal&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kick off a long-running model run&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Launch your NFT burn script (who knows?)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this tutorial, we’ll plug &lt;strong&gt;Binance’s WebSocket API&lt;/strong&gt; into your &lt;strong&gt;MCP server&lt;/strong&gt;, triggering agents based on real-time market thresholds.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔗 Need a refresher on WebSockets in Node.js? Check out our &lt;a href="https://codanyks.hashnode.dev/series/real-time-nodejs-websockets" rel="noopener noreferrer"&gt;Real-Time Node.js WebSockets series&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Binance WebSocket (public market data)&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Node.js/TypeScript listener&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP Server&lt;/strong&gt; (from &lt;a href="https://codanyks.hashnode.dev/series/mcp-server-series-architecture-guide" rel="noopener noreferrer"&gt;series&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Local Agent Functions&lt;/strong&gt; with autonomous goals&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. Listening to Binance Price Events
&lt;/h2&gt;

&lt;p&gt;Let’s build a simple WebSocket listener to subscribe to BTCUSDT ticker updates.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;startWatcher&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;socket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WebSocket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;wss://stream.binance.com:9443/ws/btcusdt@ticker&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;json&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseFloat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;100000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`[Watcher] BTC crossed threshold: $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;triggerAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;open&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[Watcher] Connected to Binance WebSocket&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[Watcher] Error connecting to Binance WebSocket&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code connects to &lt;a href="https://www.binance.com/activity/referral-entry/CPA?ref=CPA_00N98FDBL5" rel="noopener noreferrer"&gt;Binance&lt;/a&gt; and listens for real-time trades. Once BTC crosses your set threshold, it fires the &lt;code&gt;triggerAgent&lt;/code&gt; function.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Triggering the MCP Server
&lt;/h2&gt;

&lt;p&gt;You already have an MCP route like &lt;code&gt;/goal&lt;/code&gt; to receive instructions. Here’s a simple POST call.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;triggerAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:3000/goal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;binance-watcher&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;goal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`btc_crossed_threshold`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BTCUSDT&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt; 100000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This sends the signal to your MCP server, which can now dispatch it to a relevant agent.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Sample Agent Logic
&lt;/h2&gt;

&lt;p&gt;Let’s say your MCP calls this agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;btcAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;condition&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`BTC &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; at $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Extend this: send to Telegram, Discord, Email, log to Notion, etc.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The action here is simple, but the framework allows infinite expansion.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Complete Flow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Binance WebSocket → MCP Server → Agent Goal → Action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdwc4exn6jx8ox6lyevau.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdwc4exn6jx8ox6lyevau.png" alt="Binance WebSocket → MCP Server → Agent Goal → Action" width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This flow mimics real-world systems that adapt to change, not just react manually. You can chain this into larger systems: trigger a build, launch a job, even orchestrate multiple agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  Expand This Further
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Trigger on &lt;strong&gt;multiple tokens&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;strong&gt;volatility-based thresholds&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Send context to &lt;strong&gt;multiple agents&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add &lt;strong&gt;debouncing logic&lt;/strong&gt; to avoid spam&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Trigger external &lt;strong&gt;webhook&lt;/strong&gt; actions&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Source Code
&lt;/h2&gt;

&lt;p&gt;Want to explore the full project? Grab the code on GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/codanyks/mcp-binance" rel="noopener noreferrer"&gt;codanyks/mcp-binance&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This isn’t about being a trader. It’s about being a &lt;strong&gt;builder who listens to the world&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.binance.com/activity/referral-entry/CPA?ref=CPA_00N98FDBL5" rel="noopener noreferrer"&gt;Binance&lt;/a&gt; becomes your sensor. The MCP server becomes your router. Agents become your fingers on the keyboard.&lt;/p&gt;

&lt;p&gt;Automation doesn’t have to be loud. Sometimes, the best systems whisper back only when it truly matters.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Some links may be affiliate links. We only recommend tools we use or believe in.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>node</category>
      <category>programming</category>
      <category>mcp</category>
    </item>
    <item>
      <title>MCP Server Wrap-Up — Patterns, Libraries &amp; Scaling Context</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Fri, 27 Jun 2025 22:30:00 +0000</pubDate>
      <link>https://dev.to/codanyks/mcp-server-wrap-up-patterns-libraries-scaling-context-1f02</link>
      <guid>https://dev.to/codanyks/mcp-server-wrap-up-patterns-libraries-scaling-context-1f02</guid>
      <description>&lt;h3&gt;
  
  
  &lt;em&gt;A final look at how to scale agent memory, build coordination patterns, and extend MCP into real-world systems.&lt;/em&gt;
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Let’s Recap the Journey
&lt;/h2&gt;

&lt;p&gt;We started with a problem every agent-based developer faces:&lt;br&gt;
&lt;strong&gt;Memory is duct-taped. Context is fragile. Coordination is chaotic.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then, over 4 days, we built and evolved a system to change that.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;Day 1&lt;/strong&gt; — &lt;em&gt;What is MCP Server?&lt;/em&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Identified the “&lt;em&gt;context crisis&lt;/em&gt;” in LLM systems&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Introduced the &lt;strong&gt;Model Context Protocol&lt;/strong&gt; as a solution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Showed how a centralized MCP server can manage memory, goals, identity, and tool routing&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Day 2&lt;/strong&gt; — &lt;em&gt;Built an MCP Server&lt;/em&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Implemented a TypeScript server that delivers structured context&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Introduced a clean request/response protocol&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Designed for frontend → MCP → agent architecture&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Day 3&lt;/strong&gt; — &lt;em&gt;Agents Fetch Their Own Context&lt;/em&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agents became &lt;strong&gt;autonomous context consumers&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enabled polling loops, cron tasks, and background agents&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Created the foundation for modular, runtime-resilient agent design&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Day 4&lt;/strong&gt; — &lt;em&gt;Agents Talk to Each Other via MCP&lt;/em&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Introduced indirect &lt;strong&gt;agent-to-agent communication&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agents read/write shared memory without direct messaging&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built coordination patterns like chain-of-thought, delegation, and swarm behavior&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Putting the Architecture Together
&lt;/h2&gt;

&lt;p&gt;At the end of this series, here’s the big-picture model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;+-------------+&lt;/span&gt;       &lt;span class="o"&gt;+-------------+&lt;/span&gt;       &lt;span class="o"&gt;+-------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="nx"&gt;Frontend&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;---&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;   &lt;span class="nx"&gt;MCP&lt;/span&gt; &lt;span class="nx"&gt;API&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;---&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;   &lt;span class="nx"&gt;Agents&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+-------------+&lt;/span&gt;       &lt;span class="o"&gt;+-------------+&lt;/span&gt;       &lt;span class="o"&gt;+-------------+&lt;/span&gt;
                           &lt;span class="o"&gt;|&lt;/span&gt;
                           &lt;span class="nx"&gt;v&lt;/span&gt;
                &lt;span class="o"&gt;+-----------------------+&lt;/span&gt;
                &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;Memory&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;Goal&lt;/span&gt; &lt;span class="nx"&gt;Stores&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;
                &lt;span class="o"&gt;+-----------------------+&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP&lt;/strong&gt; is the context router, memory librarian, identity resolver, and goalkeeper.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agents&lt;/strong&gt; are stateless functions that think clearly because they ask for the right input.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Frontend/UI&lt;/strong&gt; is optional — orchestration logic can live anywhere.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Patterns We Observed
&lt;/h2&gt;

&lt;p&gt;Here’s what emerged naturally as you followed the protocol mindset:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stateless Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents don’t carry memory — they ask for it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context Bundles&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents receive rich, structured state: who, what, why, and how&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Autonomous Loops&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents can wake up, pull context, act, and repeat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent Delegation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents leave instructions for others inside the shared memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chain of Roles&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Planner → Researcher → Writer → QA → Deployer, all mediated by MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Runtime Modularity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Swap out agents, tools, or memory engines with no architecture rewrite&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Libraries &amp;amp; Tools That Pair Well
&lt;/h2&gt;

&lt;p&gt;Want to extend your MCP ecosystem? Here are some options:&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory &amp;amp; State
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://redis.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;Redis&lt;/strong&gt;&lt;/a&gt; — for fast task state or ephemeral context&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.postgresql.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;&lt;/a&gt; — for structured goal + agent metadata&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://fly.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;LiteFS&lt;/strong&gt;&lt;/a&gt; — for distributed SQLite across edge agents&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  LLM Agents
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;OpenAI&lt;/strong&gt;, &lt;strong&gt;Claude&lt;/strong&gt;, &lt;strong&gt;Gemini&lt;/strong&gt; — use your model of choice&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CrewAI&lt;/strong&gt;, &lt;strong&gt;AutoGen&lt;/strong&gt;, &lt;strong&gt;LangGraph&lt;/strong&gt; — use MCP to feed context into these frameworks&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  API &amp;amp; Infra
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.npmjs.com/package/http-error-kit" rel="noopener noreferrer"&gt;&lt;code&gt;http-error-kit&lt;/code&gt;&lt;/a&gt; + &lt;a href="https://www.npmjs.com/package/@wthek/express-middleware" rel="noopener noreferrer"&gt;&lt;code&gt;@wthek/express-middleware&lt;/code&gt;&lt;/a&gt; — clean error handling for your TypeScript MCP server&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.npmjs.com/package/zod" rel="noopener noreferrer"&gt;&lt;code&gt;zod&lt;/code&gt;&lt;/a&gt; + &lt;a href="https://www.npmjs.com/package/@wthek/zod-express-interceptor" rel="noopener noreferrer"&gt;&lt;code&gt;@wthek/zod-express-interceptor&lt;/code&gt;&lt;/a&gt; — schema-level request validation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.postman.com/" rel="noopener noreferrer"&gt;&lt;code&gt;Postman&lt;/code&gt;&lt;/a&gt; — for quick testing MCP routes&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Going Beyond the Series
&lt;/h2&gt;

&lt;p&gt;Now that you’ve built your MCP system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add &lt;strong&gt;tool routers&lt;/strong&gt;: Let MCP tell agents what tools they can use&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Layer in &lt;strong&gt;feedback loops&lt;/strong&gt;: Save model outputs into memory for the next round&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable &lt;strong&gt;multi-tenant memory&lt;/strong&gt;: Separate goal trees by user, product, or agent persona&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visualize workflows: Turn your context requests into event graphs&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Guidance: Design Like a Protocol, Not a Pipeline
&lt;/h2&gt;

&lt;p&gt;Here’s the key takeaway:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Don’t hardcode behavior.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Don’t duct-tape prompts.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Don’t make your agent “smart” by making the prompt longer.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;p&gt;✅ Design &lt;strong&gt;interfaces&lt;/strong&gt;&lt;br&gt;
✅ Serve structured &lt;strong&gt;context&lt;/strong&gt;&lt;br&gt;
✅ Let agents be actors — and &lt;strong&gt;MCP be the stage manager&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s how you scale weirdness, not chaos.&lt;br&gt;
That’s how you build systems that grow without growing fragile.&lt;/p&gt;




&lt;h2&gt;
  
  
  Thanks for Reading
&lt;/h2&gt;

&lt;p&gt;If you’ve followed the whole series, you now have the mindset and tools to build your own agent architecture from scratch — or retrofit MCP into an existing one.&lt;/p&gt;

&lt;p&gt;We’ll keep building. You should too.&lt;br&gt;
Keep it weird. Keep it modular. Keep it scalable.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Protocols first. Prompts second.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>programming</category>
      <category>node</category>
    </item>
    <item>
      <title>Agent-to-Agent Communication via MCP</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Thu, 26 Jun 2025 15:00:00 +0000</pubDate>
      <link>https://dev.to/codanyks/agent-to-agent-communication-via-mcp-1imj</link>
      <guid>https://dev.to/codanyks/agent-to-agent-communication-via-mcp-1imj</guid>
      <description>&lt;h3&gt;
  
  
  Let your agents coordinate, delegate, and collaborate — all via shared context and clean protocols.
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Recap So Far
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/mcp-server-introduction-context-routing" rel="noopener noreferrer"&gt;&lt;strong&gt;Day 1:&lt;/strong&gt; Introduced the Model Context Protocol (MCP) and the context crisis it solves&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/build-mcp-server" rel="noopener noreferrer"&gt;&lt;strong&gt;Day 2:&lt;/strong&gt; Built a working MCP server to serve context to agents via frontend orchestration&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/connect-agents-to-mcp" rel="noopener noreferrer"&gt;&lt;strong&gt;Day 3:&lt;/strong&gt; Enabled agents to pull their own context autonomously from MCP&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now that our agents are &lt;strong&gt;self-aware&lt;/strong&gt; and &lt;strong&gt;autonomous&lt;/strong&gt;, we’re unlocking the next phase:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Letting agents communicate &lt;strong&gt;with each other&lt;/strong&gt;, using MCP as the shared protocol.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This expands the system horizontally — instead of a single agent acting on context, we now have a &lt;strong&gt;mesh of agents&lt;/strong&gt; coordinating through shared state and memory.&lt;/p&gt;




&lt;h2&gt;
  
  
  From Autonomy to Coordination
&lt;/h2&gt;

&lt;p&gt;Imagine a world where agents don’t just operate independently — they can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Hand off tasks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Collaborate asynchronously&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Trigger sub-agents&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Chain operations using shared memory&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns your MCP-powered ecosystem into an &lt;strong&gt;orchestrated swarm&lt;/strong&gt; — not centrally controlled, but &lt;strong&gt;cooperatively intelligent&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Agent-to-Agent Communication Works
&lt;/h2&gt;

&lt;p&gt;Instead of agents directly messaging each other, they communicate &lt;strong&gt;indirectly&lt;/strong&gt; through &lt;strong&gt;shared context&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent A → MCP: Save updated memory and next steps
Agent B → MCP: Pull memory + instructions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MCP becomes the &lt;strong&gt;coordination layer&lt;/strong&gt; — not just a memory server, but a protocol hub for agent workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Case:
&lt;/h3&gt;

&lt;p&gt;Let’s say &lt;code&gt;PlannerAgent&lt;/code&gt; creates a set of subtasks. It writes them into a task memory object via MCP.&lt;/p&gt;

&lt;p&gt;Later, &lt;code&gt;BuilderAgent&lt;/code&gt; fetches its context, reads those subtasks, and starts execution.&lt;/p&gt;

&lt;p&gt;No direct message was sent. But the baton was passed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Patterns That Emerge
&lt;/h2&gt;

&lt;p&gt;Once agents communicate via MCP, you unlock powerful design patterns:&lt;/p&gt;

&lt;h3&gt;
  
  
  Chain of Thought (Distributed)
&lt;/h3&gt;

&lt;p&gt;Each agent takes a step in a longer reasoning chain. Think:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Planner&lt;/code&gt; → defines tasks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Researcher&lt;/code&gt; → gathers context&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Writer&lt;/code&gt; → drafts copy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Reviewer&lt;/code&gt; → gives feedback&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All agents pull and mutate shared memory objects via MCP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Loop + Delegate
&lt;/h3&gt;

&lt;p&gt;Agents can offload part of their job by spawning task bundles for others to consume.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;saveMemory&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;beta_launch&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;next_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Check signup flow&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Optimize landing page&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;assigned_to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;LaunchAgent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Later:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetchContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;LaunchAgent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps agents &lt;strong&gt;loosely coupled&lt;/strong&gt; but highly coordinated.&lt;/p&gt;




&lt;h2&gt;
  
  
  Minimal Implementation
&lt;/h2&gt;

&lt;p&gt;No new endpoints required. You already built the protocol in Day 2. It’s just &lt;strong&gt;how you use it&lt;/strong&gt; that changes.&lt;/p&gt;

&lt;p&gt;Let’s look at a chaining example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// PlannerAgent writes goals&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;saveContext&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;planner&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;launch_101&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;subtasks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;write email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;build waitlist&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;QA form&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;next_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Assign to BuilderAgent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// BuilderAgent later reads the same task&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchContext&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;builder&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;launch_101&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agents never talk — but the baton is passed via shared context.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Enables
&lt;/h2&gt;

&lt;p&gt;With MCP as the protocol layer, you now have the foundation for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Chained agents&lt;/strong&gt; (multi-step workflows)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent swarms&lt;/strong&gt; (distributed tasks)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent-led scheduling&lt;/strong&gt; (polling + delegation)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cross-agent memory&lt;/strong&gt; (common task state)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And all of this happens &lt;strong&gt;without hardcoded logic&lt;/strong&gt;. No if-else glue. No manual wiring.&lt;/p&gt;

&lt;p&gt;Just clean roles and shared context.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+-------------+        +-------------+        +-------------+
| Agent A     | -----&amp;gt; |     MCP     | &amp;lt;----- |   Agent B   |
+-------------+        +-------------+        +-------------+
                            |
                            v
                 +----------------------+
                 | Memory + Goal Store |
                 +----------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every arrow here is a &lt;strong&gt;protocol call&lt;/strong&gt;, not a socket or stream. This makes debugging easier, scaling more flexible, and agents fully modular.&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;p&gt;To keep things smooth:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use unique &lt;code&gt;task_id&lt;/code&gt;s per shared effort&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Define clear &lt;code&gt;persona&lt;/code&gt; and &lt;code&gt;role&lt;/code&gt; in each context bundle&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid over-mutating memory in one agent’s cycle&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Think of memory as a shared doc — not a private log&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;We now have agents that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Can fetch their own context (Day 3)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can hand off tasks to other agents (via MCP)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Are decoupled, but interoperable&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This lays the groundwork for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Complex pipelines&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Swarm behaviors&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recursive task agents&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MCP becomes the &lt;strong&gt;coordination language&lt;/strong&gt; — and agents become the workers who speak it fluently.&lt;/p&gt;




&lt;h2&gt;
  
  
  Coming Up: Series Wrap-Up
&lt;/h2&gt;

&lt;p&gt;In &lt;strong&gt;Day 5&lt;/strong&gt;, we’ll wrap up this entire journey:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Recap MCP’s purpose and implementation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reflect on architecture patterns&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Share suggested libraries + strategies&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provide next steps for scaling&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s put the full stack together.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Protocols first. Prompts second.&lt;/strong&gt;&lt;br&gt;
Stay tuned for Day 4.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>programming</category>
      <category>node</category>
    </item>
    <item>
      <title>Connect Your Agents to the MCP Server</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Wed, 25 Jun 2025 13:10:00 +0000</pubDate>
      <link>https://dev.to/codanyks/connect-your-agents-to-the-mcp-server-28m</link>
      <guid>https://dev.to/codanyks/connect-your-agents-to-the-mcp-server-28m</guid>
      <description>&lt;h3&gt;
  
  
  Let agents query, think, and act with real-time context. No frontend required.
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Recap So Far
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Day 1:&lt;/strong&gt; &lt;a href="https://codanyks.hashnode.dev/mcp-server-introduction-context-routing" rel="noopener noreferrer"&gt;Introduced the Model Context Protocol (MCP) and why it matters&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Day 2:&lt;/strong&gt; &lt;a href="https://codanyks.hashnode.dev/build-mcp-server" rel="noopener noreferrer"&gt;Built the MCP Server that handles context for inference orchestration&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Until now, the &lt;strong&gt;frontend drove everything&lt;/strong&gt; — it requested context from MCP and passed it to the agents.&lt;/p&gt;

&lt;p&gt;But what if your agents could manage themselves? What if they could fetch memory, update state, adapt roles, and operate without orchestration glue?&lt;/p&gt;

&lt;p&gt;That’s what today is about.&lt;/p&gt;




&lt;h2&gt;
  
  
  From Orchestrated to Autonomous
&lt;/h2&gt;

&lt;p&gt;In many LLM-based workflows, the frontend or coordinator acts as the brain. That works — but only to a point.&lt;/p&gt;

&lt;p&gt;As your systems grow more complex:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agents need autonomy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They may trigger sub-agents&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They should be able to operate independently of a user interface&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means agents must &lt;strong&gt;talk to MCP directly&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Today, we expand our architecture so agents can request context bundles themselves.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This design unlocks agent autonomy, where the model can reason over its own past, current task state, memory, and tools — all without frontend involvement.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Agents Should Pull Their Own Context
&lt;/h2&gt;

&lt;p&gt;When agents rely on frontends for context, you introduce brittle dependencies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agents can’t be reused easily across environments&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging context issues requires full-stack tracing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real-time reactions are delayed by orchestration lag&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By allowing agents to pull their &lt;strong&gt;own state&lt;/strong&gt;, you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enable background or CRON-like execution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow persistent context recall&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build modular agent services that evolve with their purpose&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Think of agents as microservices. Context is their configuration file.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Architecture: Agent-Initiated Context Flow
&lt;/h2&gt;

&lt;p&gt;New flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Frontend&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;Orchestrated&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;Frontend&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;MCP&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;Agent&lt;/span&gt;

&lt;span class="nx"&gt;Agent&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;Orchestrated&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="nx"&gt;Agent&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;MCP&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;Inference&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;       &lt;span class="o"&gt;+-------------+&lt;/span&gt;
       &lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="nx"&gt;Agent&lt;/span&gt; &lt;span class="nx"&gt;GPT&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;
       &lt;span class="o"&gt;+-------------+&lt;/span&gt;
              &lt;span class="o"&gt;|&lt;/span&gt;
              &lt;span class="nx"&gt;v&lt;/span&gt;
       &lt;span class="o"&gt;+-------------+&lt;/span&gt;        &lt;span class="o"&gt;+------------------+&lt;/span&gt;
       &lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="nx"&gt;MCP&lt;/span&gt; &lt;span class="nx"&gt;Server&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;-----&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;Memory&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;Goals&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt;
       &lt;span class="o"&gt;+-------------+&lt;/span&gt;        &lt;span class="o"&gt;+------------------+&lt;/span&gt;
              &lt;span class="o"&gt;|&lt;/span&gt;
              &lt;span class="nx"&gt;v&lt;/span&gt;
       &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt; &lt;span class="nx"&gt;Bundle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Breakdown:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent GPT&lt;/strong&gt; makes a structured HTTP request to MCP&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP&lt;/strong&gt; fetches all relevant details for the agent — persona, memory, system prompt, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent&lt;/strong&gt; receives the context bundle, reasons, and acts&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This removes any dependency on the frontend. Agents are now runtime-aware actors — capable of pulling their state and recontextualizing themselves.&lt;/p&gt;

&lt;p&gt;This pattern forms the basis for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agent polling loops&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Asynchronous task workers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scheduled jobs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Chainable agents&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Use Case: Autonomous Task Loop
&lt;/h2&gt;

&lt;p&gt;Imagine you have a &lt;code&gt;ResearchAgent&lt;/code&gt; (let's call it &lt;code&gt;TrendWatcherGPT&lt;/code&gt;) that loops every hour.&lt;br&gt;&lt;br&gt;
It needs to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Wake up&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Request context from MCP&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use tools/memory to take next step&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save progress (to MCP or external store)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sleep again&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is useful for agents like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Feed Watchers (&lt;em&gt;e.g., price monitoring&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Project Agents (&lt;em&gt;managing async updates&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Background Taskers (&lt;em&gt;handling queues or workflows&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Autonomy is possible because agents &lt;strong&gt;aren’t blind anymore&lt;/strong&gt;. They know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Who they are (&lt;code&gt;persona&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What to do (&lt;code&gt;next_steps&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What they’ve done before (&lt;code&gt;memory&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Project Setup
&lt;/h2&gt;

&lt;p&gt;We reuse most of the structure from Day 2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;memoryStore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="nx"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The only change is how &lt;strong&gt;agents use this system&lt;/strong&gt; — not how it’s served. That’s the beauty of protocol thinking: clients evolve independently.&lt;/p&gt;




&lt;h2&gt;
  
  
  Protocol Recap
&lt;/h2&gt;

&lt;p&gt;The agent sends this request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;agent_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;research-007&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;task_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mission-04&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;request_type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;context_bundle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It expects:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;persona&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ResearchGPT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system_prompt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a research agent...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;memory&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sources&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;report1.pdf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;report2.pdf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;last_update&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2025-06-20&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tools&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;web_search&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;summarizer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next_steps&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Analyze trends&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Draft summary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This output helps agents rehydrate their own identity + past state. No need for manual context assembly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Endpoint Overview (&lt;code&gt;routes/context.ts&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;No changes needed here — our endpoint already accepts structured agent requests. It was designed with both frontend and agent clients in mind.&lt;/p&gt;

&lt;p&gt;But now, we simulate &lt;strong&gt;the agent&lt;/strong&gt; calling it as a standalone process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Agent Code Sample (Autonomous Caller)
&lt;/h2&gt;

&lt;p&gt;Let’s say you have a TypeScript/Node-based agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://localhost:3000/context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;research-007&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mission-04&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;request_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;context_bundle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Failed to fetch context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;actOnContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;system_prompt&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;\n\nMemory:\n&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;\n\nNext Steps:\n&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;next_steps&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Call OpenAI/Claude here with the prompt&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The prompt here is reconstructed using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;system_prompt&lt;/code&gt; → core personality&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;memory&lt;/code&gt; → previous task-related details&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;next_steps&lt;/code&gt; → chainable future intentions&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can optionally extend this with tool use, decision logs, and state saves.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bootstrapping Agents at Runtime
&lt;/h2&gt;

&lt;p&gt;This simple loop starts a recurring agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;setInterval&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;actOnContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Every hour&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or trigger agents on-demand via HTTP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/run-agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;actOnContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Agent run complete&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In production systems, this could be part of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;CRON jobs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Workflow engines&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agent spawner services&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Event-driven systems&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This structure makes your agent pluggable and composable.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Is This Different from Frontend Mode?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Frontend-Orchestrated&lt;/th&gt;
&lt;th&gt;Agent-Orchestrated&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Driven by UI/app&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Autonomous execution&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uses memory/goals&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pulls own context&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for...&lt;/td&gt;
&lt;td&gt;Tools, dashboards&lt;/td&gt;
&lt;td&gt;Agents, daemons&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The real win? Your agents no longer rely on external context assembly. They become persistent processes that evolve over time.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Achieved
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Gave agents the ability to request context bundles directly&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simulated an autonomous loop that fetches memory + instructions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Paved the way for more reactive, modular agent design&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agents now act like autonomous services — not passive responders.&lt;/p&gt;

&lt;p&gt;In short, we’ve made our agents aware of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Themselves&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Their past&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Their role&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Their tasks&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s the root of scalable, composable AI systems.&lt;/p&gt;




&lt;h3&gt;
  
  
  Up Next: Agent-to-Agent Communication
&lt;/h3&gt;

&lt;p&gt;In &lt;strong&gt;Day 4&lt;/strong&gt;, we’ll go one layer deeper: agents talking to each other using shared context via MCP.&lt;/p&gt;

&lt;p&gt;We’ll explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How agents can hand off tasks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How MCP acts as an inter-agent protocol layer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What patterns work best for chaining behavior and distributed autonomy&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Protocols first. Prompts second.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Stay tuned for Day 4.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>programming</category>
      <category>node</category>
    </item>
    <item>
      <title>Build a Real MCP Server in TypeScript</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Tue, 24 Jun 2025 14:30:00 +0000</pubDate>
      <link>https://dev.to/codanyks/build-a-real-mcp-server-in-typescript-32l</link>
      <guid>https://dev.to/codanyks/build-a-real-mcp-server-in-typescript-32l</guid>
      <description>&lt;h3&gt;
  
  
  Bring the Model Context Protocol to life with a clean, scalable TypeScript implementation using Express, Zod, and http-error-kit.
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Recap from Day 1
&lt;/h2&gt;

&lt;p&gt;In our previous article, we explored &lt;strong&gt;why MCP matters&lt;/strong&gt;: it's a protocol layer that acts as the context brain for multi-agent systems. Instead of cramming memory and goals into prompts, we delegate context management to an &lt;strong&gt;MCP Server&lt;/strong&gt; that can provide structured responses to any agent.&lt;/p&gt;

&lt;p&gt;Today, we build that brain.&lt;/p&gt;

&lt;p&gt;This article is not a checklist — it's a detailed walkthrough. You'll not only see code, but understand &lt;strong&gt;why&lt;/strong&gt; each part exists and &lt;strong&gt;how&lt;/strong&gt; it helps agents operate more intelligently.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 This sets the stage for future articles, where agents will begin to fetch, mutate, and even share context without frontend dependency.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What We’re Building
&lt;/h2&gt;

&lt;p&gt;In this article, we’re building the first working version of the architectural flow introduced in Day 1 — where the &lt;strong&gt;frontend queries the MCP Server&lt;/strong&gt;, receives structured context, and passes it to the &lt;strong&gt;agent or LLM&lt;/strong&gt; for execution. This establishes the foundation of context routing and separation of concerns that will evolve further in later articles. We'll create a minimal but real &lt;strong&gt;MCP Server&lt;/strong&gt; with the following features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Accepts structured requests from agents&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Responds with memory, persona, tools, and goals&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uses &lt;a href="https://www.npmjs.com/package/http-error-kit" rel="noopener noreferrer"&gt;&lt;code&gt;http-error-kit&lt;/code&gt;&lt;/a&gt; for clean error handling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In-memory store for now (extendable later)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We'll use &lt;strong&gt;TypeScript + Express&lt;/strong&gt; for clarity and familiarity.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Agents Interact with the MCP
&lt;/h2&gt;

&lt;p&gt;Let’s begin with the big picture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does an agent need to function?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A role/persona&lt;/strong&gt; (&lt;em&gt;Who am I?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory&lt;/strong&gt; (&lt;em&gt;What have I done?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Goals&lt;/strong&gt; (&lt;em&gt;What should I achieve?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt; (&lt;em&gt;What can I use?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The MCP server gives the agent all this in a single response. The agent sends a request like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;agent_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;planner-001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;task_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;goal-execution-42&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;request_type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;context_bundle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This says: &lt;em&gt;"Hey MCP, I'm PlannerGPT, working on Task 42. Give me what I need."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The MCP returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;persona&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PlannerGPT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system_prompt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a planning agent...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;memory&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{...},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tools&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scheduler&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next_steps&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Break down UI work&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent now has everything to act independently.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🧠 This context-driven setup enables agents to become self-operating — requesting their own data without hardcoding prompt logic or relying on frontends.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;Node.js 22.15+&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.typescriptlang.org/" rel="noopener noreferrer"&gt;TypeScript&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://expressjs.com/" rel="noopener noreferrer"&gt;Express&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.npmjs.com/package/http-error-kit" rel="noopener noreferrer"&gt;http-error-kit&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Project Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;              &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Entry&lt;/span&gt; &lt;span class="nx"&gt;point&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;     &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Core&lt;/span&gt; &lt;span class="nx"&gt;endpoint&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;contextBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Context&lt;/span&gt; &lt;span class="nf"&gt;logic &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;optional&lt;/span&gt; &lt;span class="nx"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;memoryStore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Simulated&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;memory&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="nx"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;              &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Shared&lt;/span&gt; &lt;span class="nx"&gt;types&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="kr"&gt;package&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;tsconfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is intentionally minimal. You can later split logs, DB integrations, auth layers, and OpenAPI docs as the system grows.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 1: Schema Definitions (&lt;code&gt;types.ts&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Define the &lt;strong&gt;contract&lt;/strong&gt; between agent and MCP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;AgentContextRequest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;request_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;context_bundle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;AgentContextResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;system_prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="nl"&gt;next_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This sets a &lt;strong&gt;standard format&lt;/strong&gt; for every context exchange. MCP stays consistent no matter how many agents/tools you support.&lt;/p&gt;

&lt;p&gt;Why this matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;agent_id&lt;/code&gt; is used to fetch memory/persona&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;task_id&lt;/code&gt; can be used for tracking session history or task-level memory later&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;request_type&lt;/code&gt; supports extensibility: &lt;em&gt;in the future, you can add&lt;/em&gt; &lt;code&gt;"tool_request"&lt;/code&gt;&lt;em&gt;,&lt;/em&gt; &lt;code&gt;"log_feedback"&lt;/code&gt;&lt;em&gt;, etc.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 2: Mock Memory Layer (&lt;code&gt;lib/memoryStore.ts&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;For now, we simulate memory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agentMemory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;planner-001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;past_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Initial UI layout&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tooling setup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;user_feedback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Focus on mobile responsiveness&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PlannerGPT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;system_prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a planner...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;notepad&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scheduler&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;next_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Break down frontend work&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getAgentContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;agentMemory&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows us to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Store structured state per agent&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simulate retrieval of memory, persona, tools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quickly prototype without DB overhead&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of this as a &lt;strong&gt;mock database&lt;/strong&gt;. In real setups, you'd connect to Redis, Postgres, Supabase, etc.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: The Context Endpoint (&lt;code&gt;routes/context.ts&lt;/code&gt;)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getAgentContext&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../lib/memoryStore&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;BadRequestError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;NotFoundError&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http-error-kit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;request_type&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request_type&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;context_bundle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BadRequestError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Unsupported request type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getAgentContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;NotFoundError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;No context found for this agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This route powers the &lt;strong&gt;frontend → MCP&lt;/strong&gt; call chain.&lt;/p&gt;

&lt;p&gt;By supporting one endpoint (&lt;code&gt;/context&lt;/code&gt;), we simplify the contract. In future versions, you could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add &lt;code&gt;/feedback&lt;/code&gt; for reflection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add &lt;code&gt;/tool-result&lt;/code&gt; to store tool outputs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add &lt;code&gt;/task-complete&lt;/code&gt; to log transitions&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 4: Server Bootstrap (&lt;code&gt;index.ts&lt;/code&gt;)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;contextRouter&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./routes/context&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/context&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;contextRouter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Central error handler&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;statusCode&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`MCP Server running on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why this matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Plug-and-play entry point.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can now POST to &lt;code&gt;/context&lt;/code&gt; to simulate agent requests.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How the Agent Consumes It
&lt;/h2&gt;

&lt;p&gt;Let’s say you're calling MCP from a GPT agent via fetch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://localhost:3000/context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;planner-001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;goal-001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;request_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;context_bundle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;// use context.persona, context.memory, etc.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your agent now dynamically adjusts prompts, roles, and behaviors &lt;strong&gt;based on this response.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🤖 In Day 3, we’ll give agents even more power — letting them fetch, mutate, and adapt context in real-time. This is the first step toward autonomy.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  ✅ What We Achieved Today
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You created an &lt;strong&gt;MCP server&lt;/strong&gt; from scratch&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You understand &lt;strong&gt;why&lt;/strong&gt; request/response schemas matter&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You know how agents plug into this&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can extend it with DBs, queues, and auth later&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is foundational infrastructure for LLM-native apps.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⏭️ Next Up: Connecting with Agents
&lt;/h3&gt;

&lt;p&gt;In Day 3, we’ll:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Write agent code that fetches context from MCP&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Customize prompts and behaviors per role&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Explore memory mutation and task coordination&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s go from &lt;em&gt;"protocol exists"&lt;/em&gt; to &lt;em&gt;"agents are actually using it".&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Stay weird, stay modular.&lt;br&gt;&lt;br&gt;
Stay tuned for Day 3.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>programming</category>
      <category>node</category>
    </item>
    <item>
      <title>Stop Duct-Taping Context Into Prompts: Meet the MCP Server</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Mon, 23 Jun 2025 20:35:00 +0000</pubDate>
      <link>https://dev.to/codanyks/stop-duct-taping-context-into-prompts-meet-the-mcp-server-hi5</link>
      <guid>https://dev.to/codanyks/stop-duct-taping-context-into-prompts-meet-the-mcp-server-hi5</guid>
      <description>&lt;h3&gt;
  
  
  Learn how the Model Context Protocol (MCP) can power smarter, scalable, and stateless AI agent systems.
&lt;/h3&gt;

&lt;p&gt;If you’ve ever built anything slightly more complex than a simple chat interface with an LLM, you’ve probably run into the same wall most of us hit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agents forget things.&lt;/li&gt;
&lt;li&gt;Context doesn’t persist.&lt;/li&gt;
&lt;li&gt;Coordination feels clunky.&lt;/li&gt;
&lt;li&gt;Everything breaks when scale enters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Welcome to the &lt;strong&gt;context crisis.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The era of building LLM-powered tools and agents is here — but our infrastructure isn’t ready. Most devs are duct-taping memory, state, and agent logic into isolated silos, and calling it a day. But you know that won’t scale.&lt;/p&gt;

&lt;p&gt;What if you could separate the logic of &lt;em&gt;what a system should do&lt;/em&gt; from &lt;em&gt;what it knows&lt;/em&gt; and &lt;em&gt;how it remembers?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That’s where the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; comes in — and no, this isn’t just a fancy wrapper. It’s an architectural pattern that might just save your stack.&lt;/p&gt;

&lt;p&gt;Let’s go deep.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is MCP, Really?
&lt;/h2&gt;

&lt;p&gt;At its core, an &lt;strong&gt;MCP server&lt;/strong&gt; is a centralized system responsible for managing and serving structured &lt;strong&gt;context&lt;/strong&gt; to agents, tools, and orchestrators in a multi-agent or AI-enhanced application.&lt;/p&gt;

&lt;p&gt;Think of it as the &lt;strong&gt;memory-and-goalkeeper&lt;/strong&gt; for your AI systems.&lt;/p&gt;

&lt;p&gt;MCP doesn't run inference. It doesn’t respond like ChatGPT. Instead, it responds like a &lt;em&gt;protocol-bound librarian&lt;/em&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“You are the planner. You’ve been working on Task #42. Here’s your role, memory, and available tools. Good luck.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s like a &lt;strong&gt;router for meaning&lt;/strong&gt; — sitting in the middle, handing out purpose, memory, identity, and task state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fevqs7j9rz700op7rzn9y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fevqs7j9rz700op7rzn9y.png" alt="Anime-style interface HUD view from the perspective of an agent interacting with the MCP server. The agent sees a data stream uploading context: goals, history, tools. Holographic overlays reflect emotional tone detection, role enforcement, and memory bubbles. The agent nods thoughtfully, illuminated by the glow of the UI. Scene includes futuristic details like neural sync ports and floating prompt cubes." width="665" height="375"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Context Needs Its Own Server
&lt;/h2&gt;

&lt;p&gt;Let’s walk through a few realities of agent-based development:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agents need to know who they are, what their role is, and what’s been done so far.&lt;/li&gt;
&lt;li&gt;You might be dealing with tool-using agents, each with different objectives.&lt;/li&gt;
&lt;li&gt;Memory isn't just logs; it’s a structured and evolving state.&lt;/li&gt;
&lt;li&gt;You want clean interfaces, separation of concerns, and scalable logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But here's what usually happens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agentPrompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
  You are AgentPlanner. Your task is to break down user goals into steps.
  Prior goal: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;goal&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
  Past memory: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You start cramming context into prompts. You start caching state into local files. You start coupling memory logic to inference code. Suddenly, everything is fragile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP breaks that pattern.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It says: &lt;em&gt;Let the agents focus on thinking. Let the MCP server handle knowing.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does an MCP Server Actually Do?
&lt;/h2&gt;

&lt;p&gt;Let’s break it down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Identity Resolution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every agent has an identity: a name, a role, maybe a persona or tone. The MCP server tells agents &lt;em&gt;who they are&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Memory Abstraction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MCP offers structured memory: past inputs, decisions, events, user feedback. It can be task-scoped or global.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Goal Distribution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agents may be working toward shared or solo goals. MCP tracks and distributes these dynamically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Contextual Routing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Need tools? Previous state? Team member roles? MCP routes the right payloads to the right agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  Anatomy of an MCP Request
&lt;/h2&gt;

&lt;p&gt;Here’s a sample POST request from an agent to the MCP server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;POST&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;agent_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;planner-001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;task_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;goal-execution-42&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;request_type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;context_bundle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here’s what the MCP might return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;persona&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PlannerGPT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system_prompt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are an expert task planner...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;memory&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;past_steps&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[...],&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user_feedback&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Focus on frontend components.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tools&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;search&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;task-scheduler&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next_steps&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Draft UI plan&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Assign tasks to DesignerGPT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not inference — this is &lt;strong&gt;intelligent scaffolding.&lt;/strong&gt; It allows agents to stay stateless and sharp.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv0ikg48crn6440vg4bh6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv0ikg48crn6440vg4bh6.png" alt="A group of four agents walk purposefully toward a tall, rectangular tower labeled " width="665" height="375"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Real-World Analogies
&lt;/h2&gt;

&lt;p&gt;Let’s say you’re building an indie RPG with multiple characters, quests, and evolving storylines.&lt;/p&gt;

&lt;p&gt;In game dev, you wouldn’t make every NPC hardcode the player’s current state, completed quests, or world state, right?&lt;/p&gt;

&lt;p&gt;You’d centralize that. You’d have a state manager.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That’s what MCP is — but for agents.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's the "quest manager" of your AI story. Agents query it to get the world state, their role, their memory.&lt;/p&gt;

&lt;p&gt;Now take that metaphor and apply it to an LLM-based assistant that uses Codex, a browser plugin, and a memory engine.&lt;/p&gt;

&lt;p&gt;Boom. You need an MCP server.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architectural Pattern
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;+----------------+&lt;/span&gt;      &lt;span class="o"&gt;+--------------+&lt;/span&gt;      &lt;span class="o"&gt;+------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="nx"&gt;Frontend&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;---&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="nx"&gt;MCP&lt;/span&gt; &lt;span class="nx"&gt;Server&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;---&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="nx"&gt;Agent&lt;/span&gt; &lt;span class="nx"&gt;Inference&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+----------------+&lt;/span&gt;      &lt;span class="o"&gt;+--------------+&lt;/span&gt;      &lt;span class="o"&gt;+------------------+&lt;/span&gt;
                             &lt;span class="o"&gt;|&lt;/span&gt;
                             &lt;span class="nx"&gt;v&lt;/span&gt;
                       &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Memory&lt;/span&gt; &lt;span class="nx"&gt;Store&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                             &lt;span class="o"&gt;|&lt;/span&gt;
                             &lt;span class="nx"&gt;v&lt;/span&gt;
                      &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Goal&lt;/span&gt; &lt;span class="nx"&gt;Repository&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The MCP server sits in between, handling structured API requests and serving agents clean, focused context.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqbprsundg83yol9xunry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqbprsundg83yol9xunry.png" alt="The MCP Server acts as a central coordinator between the frontend, memory store, goal repository, and the agent. When a request is made from the frontend, the MCP Server retrieves relevant context and goals by connecting to the memory store and goal repository. It then passes this structured data to the agent for processing. The agent generates a response based on the provided information and sends it back to the MCP Server, which then returns the final output to the frontend." width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It connects memory, goals, identity, and available tools to the active session.&lt;/p&gt;

&lt;p&gt;In later articles, this pattern expands to support &lt;strong&gt;agent-initiated context fetching&lt;/strong&gt;, &lt;strong&gt;agent-to-agent coordination&lt;/strong&gt;, and &lt;strong&gt;shared blackboard communication models&lt;/strong&gt; — all mediated through the MCP.&lt;/p&gt;




&lt;h2&gt;
  
  
  Without MCP: What Goes Wrong
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agents lack history or carry too much of it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can’t easily rotate or upgrade memory providers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You’re locked into brittle prompt-chaining.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging context bugs becomes a nightmare.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You get burned out managing the glue instead of building the product.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Now?
&lt;/h2&gt;

&lt;p&gt;The agent ecosystem is exploding. Frameworks like AutoGen, CrewAI, LangGraph, and open-agent stacks are maturing.&lt;/p&gt;

&lt;p&gt;But they all suffer from the same issue: &lt;strong&gt;context is poorly managed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As AI architectures evolve, context routing is poised to become a new standard — and MCP servers offer a practical way to start building around it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You’ll Learn in This Series
&lt;/h2&gt;

&lt;p&gt;This is just Day 1.&lt;/p&gt;

&lt;p&gt;Here’s what’s coming next:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 2: “Build Your Own MCP Server (In TypeScript)”&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create a functioning MCP Server&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Define context schemas&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build routes for &lt;code&gt;/context&lt;/code&gt; and error handling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modularize memory and goal repositories&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Day 3: “Let Agents Pull Their Own Context”&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Build agent-side context fetchers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add autonomy to inference layers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Eliminate reliance on UI requests&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Day 4: “Enable Agent-to-Agent Communication”&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agents that write and read context from each other&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Shared blackboard model&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Delegation and feedback loops&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Day 5: “The Wrap-Up: Tools, Patterns, Libraries”&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Design tradeoffs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tooling suggestions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Future directions for multi-agent systems&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Build for Scale, Even When Small
&lt;/h2&gt;

&lt;p&gt;Even if you're just experimenting, building with protocol-thinking can save you from rewrites down the line.&lt;/p&gt;

&lt;p&gt;MCP doesn’t just improve developer experience — it opens the door for truly &lt;strong&gt;modular, scalable, agent-based applications.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Stop hardcoding memory into your agents.&lt;br&gt;&lt;br&gt;
Start thinking in systems.&lt;br&gt;&lt;br&gt;
Build weird, but build right.&lt;/p&gt;




&lt;p&gt;Stay tuned for Day 2.&lt;/p&gt;

&lt;p&gt;And remember → &lt;strong&gt;LLMs are the actors. MCP is the director.&lt;/strong&gt;🎬&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>programming</category>
      <category>node</category>
    </item>
    <item>
      <title>The Art of Saying No: Creating Boundaries and Systems as a Creative Freelancer</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Fri, 20 Jun 2025 13:20:00 +0000</pubDate>
      <link>https://dev.to/codanyks/the-art-of-saying-no-creating-boundaries-and-systems-as-a-creative-freelancer-4ga4</link>
      <guid>https://dev.to/codanyks/the-art-of-saying-no-creating-boundaries-and-systems-as-a-creative-freelancer-4ga4</guid>
      <description>&lt;h3&gt;
  
  
  &lt;em&gt;The final chapter in The Indie Stack shows how to protect your time, energy, and focus—without killing your creativity.&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"You don’t burn out from hard work. You burn out from doing things that don’t matter to you."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let’s talk about boundaries—not as walls, but as architecture. Not fences that keep people out, but frameworks that let your best work live in peace.&lt;/p&gt;

&lt;p&gt;As a solo founder or creative freelancer, you’re the talent &lt;em&gt;and&lt;/em&gt; the bottleneck. If everything flows through you, your energy is the most critical resource in the business. And if your day is shaped by other people’s priorities, you’ve already lost.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Systems Are the New Boundaries
&lt;/h2&gt;

&lt;p&gt;Boundaries aren’t just "saying no".&lt;/p&gt;

&lt;p&gt;They’re systems. Invisible automations, policies, workflows, and defaults that protect your time without you having to constantly guard it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A calendar rule is a boundary.&lt;/strong&gt; No meetings before 11am.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A form is a boundary.&lt;/strong&gt; Not everyone gets access.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A scope doc is a boundary.&lt;/strong&gt; It’s clarity before commitment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A follow-up sequence is a boundary.&lt;/strong&gt; It prevents you from chasing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fng2b516jm9qyc5iqa7jz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fng2b516jm9qyc5iqa7jz.png" alt="A creative character surrounded by floating templates and checklists, like glowing spell scrolls protecting their workspace—peaceful, organized, and confident." width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are not defensive. They are &lt;em&gt;design choices&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Each one creates a little more space around your genius. A little more oxygen around your creativity. They keep your day from being hijacked.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Say No Before They Even Ask
&lt;/h2&gt;

&lt;p&gt;Let’s go deeper. Most solo founders say yes too often—not because they want to, but because saying no in the moment is hard.&lt;/p&gt;

&lt;p&gt;So the trick is to say no &lt;em&gt;before they even ask.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Pre-qualify leads with a form&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Filter messages through a "&lt;strong&gt;working with me&lt;/strong&gt;" page&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Post minimum project rates publicly&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use autoresponders to reset expectations&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where &lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;Tally so&lt;/a&gt; can quietly shine.&lt;/p&gt;

&lt;p&gt;You can spin up a form that’s not just about collecting info—it’s a filter, a gate, and a mirror.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🧰 Suggested tool: Try using &lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;Tally so&lt;/a&gt; or &lt;a href="https://typeform.cello.so/btjZcggRuc3" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt; to build a playful intake form with disqualifiers.&lt;/p&gt;

&lt;p&gt;Just a nudge—pick your own tools that match your style.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  3. What Triggers Your Chaos?
&lt;/h2&gt;

&lt;p&gt;Every freelancer has their chaos triggers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;The 11pm Slack message that leads to three hours of free consulting&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;The open-ended project that never ends&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;The "&lt;/em&gt;&lt;strong&gt;&lt;em&gt;quick call&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;" that turns into therapy&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;The vague scope that invites endless revisions&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your job is not to hustle harder. It’s to design a system that makes chaos less likely.&lt;/p&gt;

&lt;p&gt;Map your chaos. Then build tiny protective rituals around each one.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Trigger:&lt;/strong&gt; Last-minute changes → &lt;strong&gt;System:&lt;/strong&gt; Lock deliverables 72 hours before delivery&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Trigger:&lt;/strong&gt; Free calls → &lt;strong&gt;System:&lt;/strong&gt; Booking form with pre-approval&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Trigger:&lt;/strong&gt; Ghosted payments → &lt;strong&gt;System:&lt;/strong&gt; Auto-invoice + pay-to-book model&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Templates Are Emotional Boundaries
&lt;/h2&gt;

&lt;p&gt;People think templates are lazy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Wrong.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Templates are how you preserve emotional energy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The polite no-response email&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The scope doc with non-negotiables&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The intake form that walks clients through how you work&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You write them when you're calm, and they speak for you when you're not.&lt;/p&gt;

&lt;p&gt;Templates remove the emotional tax of repeating yourself. They prevent reactive responses. They make your boundaries scalable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdb67neq58cfknmp26vie.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdb67neq58cfknmp26vie.png" alt="An anime-style creative character surrounded by floating templates and checklists, like glowing spell scrolls protecting their workspace—peaceful, organized, and confident." width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Boundaries Buy You Creative Flow
&lt;/h2&gt;

&lt;p&gt;Most creatives think boundaries kill spontaneity. Actually, they buy you time &lt;em&gt;for&lt;/em&gt; spontaneity.&lt;/p&gt;

&lt;p&gt;You can’t do your best work if your brain is still carrying the weight of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Chasing unpaid invoices&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prepping for ten different project calls&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Managing other people’s disorganization&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A protected schedule gives you blocks of flow time. A clear scope gives you permission to say “&lt;strong&gt;not my job&lt;/strong&gt;”.&lt;/p&gt;

&lt;p&gt;You’re not just a creator. You’re a system designer.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Scarcity Can Be a Boundary
&lt;/h2&gt;

&lt;p&gt;Here’s an advanced move: use &lt;em&gt;scarcity&lt;/em&gt; as a boundary.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Only take on 2 projects per quarter&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Offer booking windows that close after 7 days&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create "&lt;strong&gt;&lt;em&gt;studio seasons&lt;/em&gt;&lt;/strong&gt;"—limited windows of availability&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives clients urgency while giving you spaciousness.&lt;/p&gt;

&lt;p&gt;You don’t need to always be open. You just need to be clear about when and how you are.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Audit Your Energy Leaks
&lt;/h2&gt;

&lt;p&gt;Want to know where your systems should go? Look at where your energy goes.&lt;/p&gt;

&lt;p&gt;Track your last 30 days. What drained you?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Did you answer the same question 14 times?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Did you onboard a client without clarity?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Did a vague scope become a full-time job?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these is a boundary begging to exist. Turn every energy leak into a system.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Create a Pre-Work Firewall
&lt;/h2&gt;

&lt;p&gt;Before any client gets your time, effort, or ideas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;They fill a form&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They receive a clear process overview&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They review a scope template&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They pay a deposit&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This firewall isn’t about arrogance. It’s about alignment. You’re filtering for the kind of people who value your process.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Delegate the Gatekeeping
&lt;/h2&gt;

&lt;p&gt;Eventually, systems can do the boundary work for you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://encharge.io?deal=codanyks" rel="noopener noreferrer"&gt;Encharge&lt;/a&gt; can move leads to Notion&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;Tally so&lt;/a&gt; or &lt;a href="https://typeform.cello.so/btjZcggRuc3" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt; can pre-vet clients with disqualifiers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Email rules can auto-label low-priority senders&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren’t just time savers. They are &lt;em&gt;energy filters&lt;/em&gt;. They remove the noise before it even reaches you.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Freedom Within the Business
&lt;/h2&gt;

&lt;p&gt;You’re not building systems to escape the business. You’re building systems so the business doesn’t consume &lt;em&gt;you&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;There’s a difference.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwe09przdfeb8dbnmlby9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwe09przdfeb8dbnmlby9.png" alt="A serene anime-style freelancer sitting at a desk surrounded by light holographic systems and rules floating peacefully around—symbolizing harmony, freedom, and boundaries inside their own creative business." width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal isn’t to say “no” forever. It’s to say “yes” more fully—because everything else has been filtered.&lt;/p&gt;

&lt;p&gt;And that’s how you protect creative energy.&lt;/p&gt;




&lt;h2&gt;
  
  
  The End of a Series — The Start of Your Next Chapter
&lt;/h2&gt;

&lt;p&gt;You’ve just read the last piece in the &lt;strong&gt;Indie Stack&lt;/strong&gt; series. But this isn’t a goodbye. This is your start line.&lt;/p&gt;

&lt;p&gt;You now have the playbooks.&lt;/p&gt;

&lt;p&gt;The systems.&lt;br&gt;
The templates.&lt;br&gt;
The boundary builders.&lt;br&gt;
The delegation frameworks.&lt;br&gt;
The mindset shifts.&lt;/p&gt;

&lt;p&gt;You don’t need to “&lt;strong&gt;do it all&lt;/strong&gt;” anymore — you just need to design &lt;em&gt;how&lt;/em&gt; it gets done.&lt;/p&gt;

&lt;p&gt;If this series helped you breathe easier, ship faster, or sleep better — let us know. We’re listening.&lt;/p&gt;

&lt;p&gt;And if there’s more you want — deeper guides, async systems, or just a little inspiration to keep going — hit reply or send a DM. We’re already sketching what comes next.&lt;/p&gt;

&lt;p&gt;Let’s make solo building less lonely — and a whole lot smarter.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Related Series Section&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/series/founder-fuel-weekend-systems" rel="noopener noreferrer"&gt;&lt;strong&gt;Founder Fuel: Weekend Systems for Solo Builders&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/series/real-time-nodejs-websockets" rel="noopener noreferrer"&gt;&lt;strong&gt;Real-Time with Node.js: WebSockets&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/series/code-the-core-ddd-nodejs-nestjs" rel="noopener noreferrer"&gt;&lt;strong&gt;Code the Core: DDD with Node.js&lt;/strong&gt; &lt;strong&gt;&amp;amp;&lt;/strong&gt; &lt;strong&gt;NestJS&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Let’s Connect
&lt;/h2&gt;

&lt;p&gt;Was this helpful? Share this article with your indie hacker or bootstrapped founder friends.&lt;/p&gt;

&lt;p&gt;Follow @&lt;a href="https://dev.to@codanyks"&gt;@codanyks&lt;/a&gt; on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;X: &lt;a href="https://x.com/codanyks" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instagram: &lt;a href="https://www.instagram.com/codanyks/" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Threads: &lt;a href="https://www.threads.com/@codanyks" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We build in public — come join the movement.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Some links may be affiliate links. We only recommend tools we use or believe in.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tooling</category>
      <category>codanyks</category>
      <category>learning</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Build a Stack, Not a Startup: Creating Resilient One-Person Businesses</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Sat, 14 Jun 2025 15:10:00 +0000</pubDate>
      <link>https://dev.to/codanyks/build-a-stack-not-a-startup-creating-resilient-one-person-businesses-54e2</link>
      <guid>https://dev.to/codanyks/build-a-stack-not-a-startup-creating-resilient-one-person-businesses-54e2</guid>
      <description>&lt;h3&gt;
  
  
  &lt;em&gt;A solo founder’s guide to designing systems that scale without chaos—and outlast your energy.&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Startups chase growth. Stacks chase stability”.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s the shift.&lt;/p&gt;

&lt;p&gt;When you’re a solo founder, the traditional playbook stops making sense. You’re not managing teams. You’re not pitching VCs.&lt;br&gt;
You’re building something to live inside of—&lt;em&gt;not something you want to escape from&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This article is about designing that thing:&lt;br&gt;
A resilient stack that makes space for life, without sacrificing ambition.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why “Stack” Thinking Wins for Solopreneurs
&lt;/h2&gt;

&lt;p&gt;Startups are designed for velocity.&lt;br&gt;
Stacks are designed for longevity.&lt;/p&gt;

&lt;p&gt;If a startup is a rocketship fueled by scale, a solo business stack is a &lt;strong&gt;self-sustaining ecosystem&lt;/strong&gt;—quietly running under its own weight. The goal isn’t to do more. It’s to build less often, and benefit longer.&lt;/p&gt;

&lt;p&gt;The big mindset shift?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You stop optimizing for explosive growth.&lt;br&gt;
You start optimizing for predictable flow.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Is a Stack (When You’re a Solo Founder)?
&lt;/h2&gt;

&lt;p&gt;Your stack isn’t just your tools.&lt;br&gt;
It’s the &lt;strong&gt;architecture of how your business thinks, runs, and responds.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine it as layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Top Layer: Outcomes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Products, services, courses, assets.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Middle Layer: Processes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How things get created, delivered, refined.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Base Layer: You&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your capacity, energy, priorities.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;If any layer collapses, the rest wobble.&lt;/p&gt;

&lt;p&gt;Building a resilient stack means starting &lt;em&gt;from the base&lt;/em&gt; and designing upwards.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwbd1g5qlok87edi49a9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwbd1g5qlok87edi49a9.png" alt="A layered “stack” metaphor for a solo founder’s business. Imagine three glowing, semi-transparent horizontal layers stacked on top of each other like a vertical hologram." width="445" height="560"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Start with Your Operating Loop
&lt;/h2&gt;

&lt;p&gt;Don’t build systems around what you &lt;em&gt;wish&lt;/em&gt; you were doing.&lt;br&gt;
Build them around how you &lt;strong&gt;actually&lt;/strong&gt; operate.&lt;/p&gt;

&lt;p&gt;Start by identifying your real cycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When do you ideate?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When do you write?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When do you rest?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When do you spiral into imposter syndrome?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every system you build should respect this rhythm.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Your stack shouldn’t fight your nature.&lt;br&gt;
It should frame it.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Build Processes That Don’t Require You
&lt;/h2&gt;

&lt;p&gt;Let’s kill the idea that &lt;em&gt;everything&lt;/em&gt; needs your touch.&lt;/p&gt;

&lt;p&gt;Start defining processes in terms of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Triggers&lt;/strong&gt; (&lt;em&gt;what starts this?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Inputs&lt;/strong&gt; (&lt;em&gt;what needs to be gathered?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Decisions&lt;/strong&gt; (&lt;em&gt;what can be automated?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Outputs&lt;/strong&gt; (&lt;em&gt;what does this result in?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These systems could live in Notion, in Airtable, in your head—even scribbled on a whiteboard. Doesn’t matter.&lt;/p&gt;

&lt;p&gt;Just start writing things down. Codify how you think. Then make it repeatable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your Tools Should Be Replaceable
&lt;/h2&gt;

&lt;p&gt;Tools are just sockets.&lt;br&gt;
Your process is the wiring.&lt;/p&gt;

&lt;p&gt;Don’t obsess over which app to use. Focus on the workflow. &lt;em&gt;Then&lt;/em&gt; pick something that can quietly run in the background.&lt;/p&gt;

&lt;p&gt;To begin with, here’s a quiet suggestion:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You could use &lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;&lt;strong&gt;Tally so&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;/&lt;/strong&gt; &lt;a href="https://typeform.cello.so/btjZcggRuc3" rel="noopener noreferrer"&gt;&lt;strong&gt;Typeform&lt;/strong&gt;&lt;/a&gt; to collect responses, feedback, or automate tiny inputs that feed bigger flows.&lt;br&gt;&lt;br&gt;
But it’s just that—a suggestion. Use whatever matches your motion.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The point is: &lt;strong&gt;tools should disappear into your process.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Design for Defaults, Not Decisions
&lt;/h2&gt;

&lt;p&gt;Every extra decision taxes your energy.&lt;/p&gt;

&lt;p&gt;The most resilient stacks reduce decisions by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Predefining formats (&lt;em&gt;templates&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Creating default modes (&lt;em&gt;e.g., always async&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using time-blocked rituals (&lt;em&gt;e.g., weekly reviews&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’re not building rigidity. You’re creating &lt;strong&gt;trust in your own flow&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you disappear for two weeks, your stack should carry on without burning to the ground.&lt;/p&gt;




&lt;h2&gt;
  
  
  Track Energy, Not Just Revenue
&lt;/h2&gt;

&lt;p&gt;Founders often burn out with profitable businesses—because they weren’t built to support &lt;em&gt;them.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Which process is draining?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What part of the work do I avoid?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can I delay, delete, or delegate it?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Resilient stacks &lt;strong&gt;track your energy the same way they track cash&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Because if you fall apart, the whole thing stops. Protecting &lt;em&gt;you&lt;/em&gt; is protecting the business.&lt;/p&gt;




&lt;h2&gt;
  
  
  Build Systems That Outlive You
&lt;/h2&gt;

&lt;p&gt;You don’t need to hire to scale.&lt;br&gt;&lt;br&gt;
You need to &lt;em&gt;record&lt;/em&gt;, &lt;em&gt;automate&lt;/em&gt;, and &lt;em&gt;simplify&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Turn onboarding into async docs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Turn feedback into recurring forms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Turn updates into pre-scheduled loops.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Turn chaos into predictable operating motion.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This doesn’t mean you’re building a big business.&lt;br&gt;&lt;br&gt;
It means you’re building a &lt;strong&gt;quiet engine&lt;/strong&gt; that runs without constant repair.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mindsets That Make the Stack Strong
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Asynchronous is sacred&lt;/strong&gt;&lt;br&gt;
Your best work happens off-calendar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Default to clarity, not speed&lt;/strong&gt;&lt;br&gt;
You can’t scale miscommunication.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Every problem solved twice&lt;/strong&gt;&lt;br&gt;
Once now, and once in a way it never happens again.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build process &amp;gt; fix problems&lt;/strong&gt;&lt;br&gt;
Systems solve what effort can’t.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  You’re Not the Business. You’re the Architect.
&lt;/h2&gt;

&lt;p&gt;The endgame isn’t freedom &lt;em&gt;from&lt;/em&gt; the business.&lt;br&gt;
It’s freedom &lt;em&gt;within&lt;/em&gt; the business.&lt;/p&gt;

&lt;p&gt;Your stack should serve your work style, your energy, and your ambition.&lt;/p&gt;

&lt;p&gt;It doesn’t have to be a rocket.&lt;br&gt;
But it can be a &lt;strong&gt;beautiful machine that hums even when you’re asleep.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So don’t start with what you can sell.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Start with what you can &lt;em&gt;sustain.&lt;/em&gt;&lt;br&gt;
Then build a stack that respects that.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dujsdzrx1s0n8oabtrs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dujsdzrx1s0n8oabtrs.png" alt="A solo founder standing atop a blueprint-like platform" width="445" height="560"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Related Series&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is Part 4 in our &lt;a href="https://codanyks.hashnode.dev/series/the-indie-stack" rel="noopener noreferrer"&gt;The Indie Stack&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/indie-stack-solo-agency-process" rel="noopener noreferrer"&gt;The Indie Stack: Building Client Systems That Scale Without People&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/service-like-saas" rel="noopener noreferrer"&gt;Service Like SaaS: Turning Projects into Predictable Income&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/build-once-sell-forever" rel="noopener noreferrer"&gt;Build Once, Sell Forever: Designing Digital Products That Scale Without You&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Previous Series You Might Love&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/series/founder-fuel-weekend-systems" rel="noopener noreferrer"&gt;&lt;strong&gt;Founder Fuel: Weekend Systems for So&lt;/strong&gt;&lt;/a&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;lo Builders&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;Real-Time with Node.js: Web&lt;/strong&gt;&lt;/a&gt;&lt;a href="https://codanyks.hashnode.dev/scaling-without-hiring-fiverr-founders-guide-2025" rel="noopener noreferrer"&gt;&lt;strong&gt;Sock&lt;/strong&gt;&lt;/a&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;ets&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;Code the Core: DDD with Node.js&lt;/strong&gt; &lt;strong&gt;&amp;amp;&lt;/strong&gt; &lt;strong&gt;NestJS&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Let’s Connect
&lt;/h2&gt;

&lt;p&gt;Was this helpful? Share this article with your indie hacker or bootstrapped founder friends.&lt;/p&gt;

&lt;p&gt;Follow @&lt;a href="https://dev.to@codanyks"&gt;@codanyks&lt;/a&gt; on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;X: &lt;a href="https://x.com/codanyks" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instagram: &lt;a href="https://www.instagram.com/codanyks/" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Threads: &lt;a href="https://www.threads.com/@codanyks" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We build in public — come join the movement.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Some links may be affiliate links. We only recommend tools we use or believe in.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>codanyks</category>
      <category>learning</category>
      <category>tutorial</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
