<?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.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>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>
    <item>
      <title>Build Once, Sell Forever: Designing Digital Products That Scale Without You</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Tue, 10 Jun 2025 16:30:00 +0000</pubDate>
      <link>https://dev.to/codanyks/build-once-sell-forever-designing-digital-products-that-scale-without-you-10fo</link>
      <guid>https://dev.to/codanyks/build-once-sell-forever-designing-digital-products-that-scale-without-you-10fo</guid>
      <description>&lt;h4&gt;
  
  
  &lt;em&gt;The solo creator’s blueprint for designing digital products that grow, sell, and evolve — all without you in the loop.&lt;/em&gt;
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The best work doesn’t multiply your time — it erases the need for it".&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Indie Dilemma
&lt;/h2&gt;

&lt;p&gt;You’re a solo founder. You love the rush of building, launching, creating.&lt;br&gt;
But you wake up realizing: every dollar still has a time cost.&lt;/p&gt;

&lt;p&gt;Each project, each client, each service — it’s a loop.&lt;br&gt;
No matter how efficient you become, the ceiling’s always there: &lt;strong&gt;&lt;em&gt;your time&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So what if the next thing you built… didn’t need you anymore?&lt;/strong&gt;&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%2Fbe8g5v01zx562zkchx21.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%2Fbe8g5v01zx562zkchx21.png" alt="A glowing storefront signs, one of which quietly reads " width="445" height="560"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Myth of Passive Income (and the Truth Behind It)
&lt;/h2&gt;

&lt;p&gt;"Make money while you sleep" is seductive. But let’s be honest — most digital product dreams fail not because the idea was wrong, but because &lt;strong&gt;the system wasn’t designed to scale.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Scaling doesn’t mean viral launches or unicorn valuations.&lt;br&gt;&lt;br&gt;
It means creating something that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Solves a recurring problem&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Works without you watching it&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can be discovered, bought, and delivered with zero meetings&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what digital products do &lt;em&gt;when built like systems&lt;/em&gt;, not artifacts.&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%2Fwxpih4epm9f3mqr82du2.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%2Fwxpih4epm9f3mqr82du2.png" alt="A lone indie builder working late, surrounded by idea boards, coffee, and code on screen. Bright focus on intentional systems, not chaos." width="665" height="375"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Think in Systems, Not Stuff
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Most creators start like this:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“I’ll make an ebook on productivity.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cool. But here’s what they often &lt;em&gt;don’t&lt;/em&gt; think through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;How will people find it tomorrow?&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What happens after someone buys it?&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;How will I improve it without burning out?&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thinking in &lt;em&gt;systems&lt;/em&gt; flips the question.&lt;br&gt;&lt;br&gt;
Instead of: &lt;em&gt;“What can I sell?”&lt;/em&gt;&lt;br&gt;&lt;br&gt;
You ask: &lt;em&gt;“What system can I build once that keeps helping, selling, and learning?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It’s a mindset shift — from &lt;strong&gt;crafting deliverables&lt;/strong&gt; to &lt;strong&gt;designing processes&lt;/strong&gt;.&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%2F97eyxg4dvdkaoyjqez5i.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%2F97eyxg4dvdkaoyjqez5i.png" alt="A illustration of a looped workflow glowing with energy: discover → engage → deliver → feedback → upgrade. Stylized arrows, digital UI elements overlaid." width="665" height="375"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Identify the Evergreen Loop
&lt;/h2&gt;

&lt;p&gt;Every good digital product lives inside a &lt;strong&gt;loop&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Discovery&lt;/strong&gt; – SEO, threads, YouTube, LinkedIn&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lead Magnet&lt;/strong&gt; – free value, trust building&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Offer&lt;/strong&gt; – one clear, sharp solution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Delivery&lt;/strong&gt; – instant, clean, satisfying&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Feedback Loop&lt;/strong&gt; – always listening, always improving&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You’re not just selling a file — you’re building an automated &lt;em&gt;experience&lt;/em&gt;.&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%2F7yo0k9a6byxiryqhot4h.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%2F7yo0k9a6byxiryqhot4h.png" alt="User journey map: from laptop search to download to smiling user giving feedback via form. Futuristic UI overlays and glowing trails connecting each stage." width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Solve the Right Kind of Problem
&lt;/h2&gt;

&lt;p&gt;Forget trendy. Forget “what’s hot in AI this week.”&lt;/p&gt;

&lt;p&gt;You want &lt;strong&gt;painkillers&lt;/strong&gt;, not vitamins.&lt;br&gt;&lt;br&gt;
Look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Repetitive pain points&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;High time cost to solve&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Boring solutions that need better UX&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Overlaps with your lived experience&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%2Fhx5fd9fjey274u2sv3i5.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%2Fhx5fd9fjey274u2sv3i5.png" alt="Close-up anime-style portrait of a solo founder reflecting in front of a window at night, various problems and question marks glowing on a holographic board nearby." width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Deliver Like a Product Studio, Even If You’re Solo
&lt;/h2&gt;

&lt;p&gt;Every touchpoint is a chance to make it memorable.&lt;br&gt;&lt;br&gt;
Even a $9 template should feel like magic.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Friendly onboarding&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clean design&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2-min walkthrough video&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Speak human, not corporate&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;People &lt;em&gt;share&lt;/em&gt; joy — not just utility.&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%2Fq050hr4ozw32beddik95.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%2Fq050hr4ozw32beddik95.png" alt="Scene of a delighted user opening a beautifully packaged digital product on their laptop, confetti sparkles and small touches like thank-you notes animate subtly." width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Build Feedback Into the DNA
&lt;/h2&gt;

&lt;p&gt;Scaling isn’t about launching 10 products.&lt;br&gt;&lt;br&gt;
It’s about &lt;strong&gt;evolving one product 10 times&lt;/strong&gt; with clarity.&lt;/p&gt;

&lt;p&gt;Simple loops work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;“What’s missing?” buttons&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Feature requests&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A changelog that actually changes&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren’t marketing hacks — they’re quiet longevity tools.&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%2Fs9pj77gmp23ttjih8hfh.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%2Fs9pj77gmp23ttjih8hfh.png" alt="A glowing feedback panel embedded inside a product UI, where users write thoughtful notes. Soft interface with friendly icons, cozy environment." width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Subtle Automation (That Doesn’t Feel Robotic)
&lt;/h2&gt;

&lt;p&gt;Automate what eats time but adds no soul.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Product access → Gumroad, LemonSqueezy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Email onboarding → &lt;a href="https://buttondown.com/refer/codanyks" rel="noopener noreferrer"&gt;Buttondown&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Feedback collection → light, clean forms&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  A Tool Suggestion to Get You Started
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;To begin with, let me offer a suggestion: try&lt;/em&gt; &lt;a href="https://tally.so" rel="noopener noreferrer"&gt;&lt;em&gt;Tally.so&lt;/em&gt;&lt;/a&gt; or &lt;a href="https://typeform.cello.so/btjZcggRuc3" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt; &lt;em&gt;to collect interest, feedback, or waitlist signups. It's quick, clean, and friendly — no setup headaches.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You don’t have to use it. Pick what fits your flow.&lt;br&gt;&lt;br&gt;
Just don’t wait to build the loop.&lt;/p&gt;

&lt;p&gt;Once you see your first automated response come in — you’ll feel it:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“I’m finally scaling without showing up.”&lt;/em&gt;&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%2Fwvenogx7su5xt3iqzm40.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%2Fwvenogx7su5xt3iqzm40.png" alt="minimal UI showing a sleek form filling up with responses in real time while the creator naps on a couch — soft sunlight coming in." width="490" height="362"&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 3 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;/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>
    <item>
      <title>Service Like SaaS: Turning Projects into Predictable Income</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Tue, 03 Jun 2025 13:05:00 +0000</pubDate>
      <link>https://dev.to/codanyks/service-like-saas-turning-projects-into-predictable-income-11bn</link>
      <guid>https://dev.to/codanyks/service-like-saas-turning-projects-into-predictable-income-11bn</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;How solo founders can escape the custom-client grind by packaging services into scalable, repeatable flows&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Escaping the Custom-Client Grind
&lt;/h2&gt;

&lt;p&gt;For many creatives and technical minds, the journey begins with freedom.&lt;/p&gt;

&lt;p&gt;You ditch the 9–5.&lt;br&gt;
Land a few freelance clients.&lt;br&gt;
Build websites, design brands, write newsletters.&lt;br&gt;
Each project feels like a win — until it doesn't.&lt;/p&gt;

&lt;p&gt;Soon, every new client brings a new briefing process. New tools. New expectations. New ways of working. The very freedom you chased starts to vanish under a pile of calendar invites and Google Docs titled "&lt;strong&gt;v2_final_FINAL&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;It's a trap: &lt;strong&gt;the custom-client loop.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And to escape it, you don't need to scale up. You need to &lt;strong&gt;scale down — into clarity.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is how solo founders flip their project-based chaos into a &lt;strong&gt;repeatable, productized service&lt;/strong&gt; — a system that runs smooth like SaaS, even if there's no code in sight.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧱 Step 1: Define the Outcome, Not the Offering
&lt;/h2&gt;

&lt;p&gt;Ask ten freelancers what they offer, and you’ll get ten versions of:&lt;br&gt;
"&lt;em&gt;I help people with X&lt;/em&gt;".&lt;/p&gt;

&lt;p&gt;But clients don't buy help. They buy &lt;strong&gt;certainty&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's why service design doesn't start with a feature list or toolchain.&lt;br&gt;
It starts with a &lt;strong&gt;transformation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine someone landing on your website. Instead of reading fluff, they immediately understand:&lt;br&gt;
"If I pay you, &lt;em&gt;this&lt;/em&gt; will happen — and here's what I’ll walk away with."&lt;/p&gt;

&lt;p&gt;It’s the difference between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  "&lt;em&gt;I'll design your brand&lt;/em&gt;"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;vs&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  "&lt;em&gt;In 5 days, you'll walk away with a color palette, logo pack, and typography system — ready to plug into your site or pitch deck&lt;/em&gt;".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It sounds obvious, but most freelancers avoid this specificity. They want room to "collaborate", to "customize", to "co-create".&lt;/p&gt;

&lt;p&gt;But ambiguity is what kills scale.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🧠 Think on this: &lt;em&gt;What's a result you could deliver with 90% of the process identical every time — no matter who books you?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's your product. You just haven't packaged it yet.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛤 Step 2: Niche by Format, Not Audience
&lt;/h2&gt;

&lt;p&gt;One common myth: to productize, you must niche &lt;em&gt;vertically&lt;/em&gt; — "I do SEO for dentists", or "Branding for crypto founders".&lt;/p&gt;

&lt;p&gt;But there's another path. And arguably, it's better for solo builders:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Niche by format.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Define a unique delivery method that you control — a sprint, a teardown, a playbook, a kit — and let your audience shape itself around it.&lt;/p&gt;

&lt;p&gt;You don't need to know &lt;em&gt;who&lt;/em&gt; you serve yet.&lt;br&gt;
You need to know &lt;em&gt;how&lt;/em&gt; you serve.&lt;/p&gt;

&lt;p&gt;Imagine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A UX designer who offers 48-hour audit sprints&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A developer who delivers full-stack MVPs in one week&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A video editor offering async YouTube launches with zero calls&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They've built lanes. Those lanes attract traffic over time.&lt;br&gt;
The constraint becomes the magnet.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚠️ The Trap of Tool-First Thinking
&lt;/h3&gt;

&lt;p&gt;This is where many creators go wrong.&lt;/p&gt;

&lt;p&gt;They fall in love with tools — Notion templates, Figma kits, &lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;Tally so&lt;/a&gt;, &lt;a href="https://typeform.cello.so/btjZcggRuc3" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt;, Zapier flows — and mistake the tool for the service.&lt;/p&gt;

&lt;p&gt;But tools aren't the product. Tools are the &lt;em&gt;medium&lt;/em&gt; through which a transformation happens.&lt;/p&gt;

&lt;p&gt;Until you've defined the change you create, the tool you pick is irrelevant.&lt;br&gt;
Process first. Platform second.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Step 3: Build a Delivery Engine
&lt;/h2&gt;

&lt;p&gt;Now that you know the outcome — and you've framed it in a narrow, repeatable format — it's time to build the engine.&lt;/p&gt;

&lt;p&gt;Think of this as your internal operating system.&lt;/p&gt;

&lt;p&gt;Clients don't need to see all the gears. But the smoother it runs, the more scalable it becomes.&lt;/p&gt;

&lt;p&gt;Here's what a delivery engine might look like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A short intake form with 5–7 questions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A structured kickoff message that auto-sends when the form's submitted&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A 2- to 5-day async creation phase&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A clean handoff process with documentation or assets&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A feedback window (optional)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A follow-up email 30 days later&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're creating a track your service can glide down — not a maze to re-navigate every time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📌 Bonus: When your system is this clean, you can delegate parts later — without losing the soul of your service.&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%2F7ssxal2f06l6ern8fvdc.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%2F7ssxal2f06l6ern8fvdc.png" alt="Anime-style solo founder at a glowing control panel, operating a futuristic production line with holographic interfaces." width="665" height="375"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧘 Step 4: Invite Recurrence (Without Being Pushy)
&lt;/h2&gt;

&lt;p&gt;Most solo builders focus on landing &lt;em&gt;new&lt;/em&gt; clients.&lt;/p&gt;

&lt;p&gt;But long-term sustainability lives in &lt;strong&gt;follow-ups&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You don't need to build a full-blown subscription model.&lt;br&gt;
You just need to create &lt;strong&gt;natural continuation points&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you're a designer, offer seasonal refreshes.&lt;br&gt;
If you're a dev, offer a "&lt;em&gt;check-in build&lt;/em&gt;" every 3 months.&lt;br&gt;
If you're a strategist, offer quarterly pivots.&lt;/p&gt;

&lt;p&gt;The key is rhythm. Not reinvention.&lt;/p&gt;

&lt;p&gt;Your first offer is the open door. Your second — and third — create the hallway.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;🧠 Ask Yourself: &lt;em&gt;What would a 12-month relationship with your service look like — without it ever feeling like a retainer?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔁 The Onboarding Moment
&lt;/h2&gt;

&lt;p&gt;The first thing a client sees after they pay says everything about your service.&lt;/p&gt;

&lt;p&gt;Confusion kills trust.&lt;br&gt;
Clarity builds momentum.&lt;/p&gt;

&lt;p&gt;So keep it simple.&lt;/p&gt;

&lt;p&gt;Send them a form.&lt;br&gt;
Tell them what’s next.&lt;br&gt;
Set expectations clearly.&lt;/p&gt;

&lt;p&gt;Don't overdo the onboarding. Just make it &lt;em&gt;smooth.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🧪 A Quick Tool You Can Try
&lt;/h3&gt;

&lt;p&gt;To simplify this stage, I use &lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;Tally so&lt;/a&gt; — a clean, form-first tool that helps me onboard clients without fuss.&lt;/p&gt;

&lt;p&gt;But honestly?&lt;br&gt;&lt;br&gt;
You can use whatever you like — Google Forms, &lt;a href="https://typeform.cello.so/btjZcggRuc3" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt;, even a shared doc.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Tools don't matter unless the process is solid.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This isn't about the form. It's about building flow.&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%2Fu9hgrk22vybpav1psspp.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%2Fu9hgrk22vybpav1psspp.png" alt="A client entering a glowing doorway labeled " width="665" height="375"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Bonus: Launch Before You Automate
&lt;/h2&gt;

&lt;p&gt;You don't need a full system to start.&lt;/p&gt;

&lt;p&gt;In fact, the fastest way to kill your momentum is over-engineering before you’ve sold anything.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Build a landing page with your offer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add a payment button&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deliver manually the first few times&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch where you slow down&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Only then, add automation&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This way, your process &lt;em&gt;evolves&lt;/em&gt; instead of being imagined from thin air.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You're not scaling chaos. You're polishing reality.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ⚠️ Mistake to Avoid: "Polish Before Publish"
&lt;/h2&gt;

&lt;p&gt;Many builders delay for weeks trying to find the perfect tool stack, pricing, visuals, CRM — all before they’ve tested if &lt;em&gt;anyone&lt;/em&gt; wants the thing.&lt;/p&gt;

&lt;p&gt;Real validation happens in motion. Not in Notion.&lt;/p&gt;




&lt;h2&gt;
  
  
  💵 Pricing Like a Product
&lt;/h2&gt;

&lt;p&gt;When you turn a service into a system, you stop selling your time.&lt;/p&gt;

&lt;p&gt;You sell the certainty of an outcome, delivered on rails.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No hourly rates&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No endless discovery calls&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No "&lt;em&gt;price upon request&lt;/em&gt;" forms that lead nowhere&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't need 10 tiers. You need 1–2 crystal-clear options that remove friction.&lt;/p&gt;

&lt;p&gt;And most importantly — &lt;strong&gt;confidence.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Confidence in what you deliver.&lt;br&gt;
Confidence in saying: &lt;em&gt;this is the price, because this is the result.&lt;/em&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;🧠 Reflect: Could a total stranger understand your offer — and feel safe paying you — without ever emailing you?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If yes, you've productized.&lt;br&gt;
If not, you're still freelancing with extra steps.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧘 Final Reflection
&lt;/h2&gt;

&lt;p&gt;You don't need a startup to build leverage.&lt;br&gt;
You don't need code to scale.&lt;br&gt;
You don't need a team to feel stable.&lt;/p&gt;

&lt;p&gt;You need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A system that creates value&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A process that delivers results&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A path that frees you from chaos&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't about becoming a founder with investors and a burn rate.&lt;br&gt;
It's about being an artist who builds machines that serve others — and sustain yourself.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And yes, you can still have fun doing it.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Related Series&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is Part 2 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;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;/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>
