<?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>Forem: Gnanaguru Sattanathan</title>
    <description>The latest articles on Forem by Gnanaguru Sattanathan (@avoguru).</description>
    <link>https://forem.com/avoguru</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%2F3592727%2Feff097cc-af76-4072-8290-7e759c80ba54.jpeg</url>
      <title>Forem: Gnanaguru Sattanathan</title>
      <link>https://forem.com/avoguru</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/avoguru"/>
    <language>en</language>
    <item>
      <title>Your MCP Client Just Got Superpowers: Arcade Tools are now in Cursor, VS Code, and more</title>
      <dc:creator>Gnanaguru Sattanathan</dc:creator>
      <pubDate>Thu, 26 Feb 2026 08:00:00 +0000</pubDate>
      <link>https://forem.com/avoguru/your-mcp-client-just-got-superpowers-arcade-tools-are-now-in-cursor-vs-code-and-more-3pjj</link>
      <guid>https://forem.com/avoguru/your-mcp-client-just-got-superpowers-arcade-tools-are-now-in-cursor-vs-code-and-more-3pjj</guid>
      <description>&lt;p&gt;If you've been using Cursor, Claude Desktop*, VS Code, or any MCP-compatible client, you've probably experienced the same frustration: your agent is brilliant at reasoning through workflows, but the moment it needs to actually &lt;em&gt;do&lt;/em&gt; something across your tools, you're back to juggling configurations for each individual tool, debugging auth flows, and troubleshooting why the setup that worked yesterday doesn't work today.&lt;/p&gt;

&lt;p&gt;Those days are over. With the launch of &lt;strong&gt;Arcade MCP Gateways&lt;/strong&gt;, your MCP client of choice can now instantly connect to Arcade's catalog of best-in-class tools as a single collection so you get agents that can actually take actions with full authorization and better accuracy, for any use case you need. As a single URL, your agents can access a curated set of use case specific tools, work across any MCP client, and be shared with your entire team in seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pain You Already Know
&lt;/h2&gt;

&lt;p&gt;Every developer who's tried to build real workflows with MCP tools has hit the same walls:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fragmented tooling.&lt;/strong&gt; You need GitHub, Linear, Slack, and maybe your CRM. That's four different MCP servers, each with its own configuration, its own auth flow, its own quirks. Some are official, some are community-maintained, some break when you look at them wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IDE lock-in.&lt;/strong&gt; You painstakingly configure everything in Cursor. Then you want to try Claude Desktop* or the new VS Code MCP support. Time to start from scratch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Team friction.&lt;/strong&gt; Your workflow is finally working. Now you need to onboard three teammates. That means writing documentation, walking them through auth, debugging why it works on your machine but not theirs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero visibility.&lt;/strong&gt; Something went wrong. Which tool failed? What permissions are missing? You're flying blind.&lt;/p&gt;

&lt;p&gt;These aren't edge cases. This is the default experience for anyone trying to build agent-driven workflows today.&lt;/p&gt;

&lt;h2&gt;
  
  
  What MCP Gateways Now Enable
&lt;/h2&gt;

&lt;p&gt;An Arcade MCP Gateway is a single URL that exposes a curated set of tools through one consistent interface. What does this unlock?&lt;/p&gt;

&lt;h3&gt;
  
  
  Access the largest catalog of high-quality tools
&lt;/h3&gt;

&lt;p&gt;Most MCP servers you'll find are minimal wrappers around REST APIs. They expose raw endpoints, return inconsistent schemas, and leave error handling as an exercise for the model. APIs were designed for structured inputs from applications, not the natural language intent that comes from agents. The result: poor accuracy, frustrated users, and workflows that break unpredictably.&lt;/p&gt;

&lt;p&gt;Arcade has developed thousands of agent-optimized MCP tools, including GitHub, Linear, Slack, Salesforce, Google Workspace, and many other integrations. These aren't wrappers. They're purpose-built for agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Consistent schemas&lt;/strong&gt; across all integrations so agents can reason about tools predictably&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictable error handling&lt;/strong&gt; that agents can understand and recover from&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic tool design&lt;/strong&gt; where operations map to what agents actually want to do, not just what the underlying API exposes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So now you can build any agentic workflow that can not only connect to all the systems you care about, but can take actions on them with better reliability and lower costs.&lt;/p&gt;

&lt;h3&gt;
  
  
  One URL, All Your Tools
&lt;/h3&gt;

&lt;p&gt;Instead of configuring multiple MCP servers, you select the tools you need—GitHub, Linear, Slack, Gmail, whatever your workflow requires—and Arcade bundles them into a Gateway. You get one URL that provides access to all of them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.arcade.dev/mcp/gateway/your-gateway-id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Point your MCP client at this URL. Done.&lt;/p&gt;

&lt;p&gt;And if you have your own MCP servers? Bring them. Arcade's Gateway can aggregate tools from any source — Arcade's catalog, your custom servers, third-party MCP implementations — behind a single endpoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  Portability Across Clients
&lt;/h3&gt;

&lt;p&gt;The same Gateway URL works in Cursor, Claude Desktop*, VS Code, ChatGPT, and any other MCP-compatible client. Configure your tools once, use them everywhere.&lt;/p&gt;

&lt;p&gt;Want to try that new IDE everyone's talking about? Your Gateway comes with you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-User by Default
&lt;/h3&gt;

&lt;p&gt;Most MCP setups are fundamentally single-user. They work great on your machine, but scaling to a team means everyone manages their own tokens and their own configs. This is why so many agent projects never get past the demo stage.&lt;/p&gt;

&lt;p&gt;Arcade MCP Gateways are multi-user from the start. Send a teammate the Gateway URL. They authenticate with their own credentials for each service — their Google account, their GitHub identity — and they're running the same toolset you are. Same tools, same reliability, their permissions.&lt;/p&gt;

&lt;p&gt;The security context travels with the user, not the agent. That's what makes this actually deployable in a team environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Visibility Into What's Running
&lt;/h3&gt;

&lt;p&gt;Gateways give you a single place to see what tools are available, what's been called, and what's happening across your integrations. No more black-box debugging.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with MCP Gateways: Agentic Developer Workflow example
&lt;/h2&gt;

&lt;p&gt;Let's walk through what this can look like for a common developer workflow.&lt;/p&gt;

&lt;p&gt;Every engineer runs this loop on repeat: grab a ticket from Linear, create a branch in GitHub, make your changes, open a PR, assign reviewers, close the ticket, and notify the team in Slack. Your agent already helps you code. With an Arcade Gateway, it can handle the rest too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools needed:&lt;/strong&gt; GitHub, Linear, Slack&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%2Fw1rq64j7az5i2ywm0wdw.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%2Fw1rq64j7az5i2ywm0wdw.png" alt="Developer Workflow Diagram"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create Your Gateway
&lt;/h3&gt;

&lt;p&gt;Head to the &lt;a href="https://arcade.dev/dashboard" rel="noopener noreferrer"&gt;Arcade Dashboard&lt;/a&gt; and create a new Gateway. Add these tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt; — for branches, commits, and PRs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linear&lt;/strong&gt; — for ticket management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack&lt;/strong&gt; — for team notifications&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%2Fn6tank31ft5k2elycne3.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%2Fn6tank31ft5k2elycne3.png" alt="Tool governance screenshot"&gt;&lt;/a&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%2F7mstp7kf9fdh0s1rc0hl.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%2F7mstp7kf9fdh0s1rc0hl.png" alt="Fine-grained tool permissions screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Within each Gateway, you pick exactly which tools to expose to your agent. This is where centralized governance happens—you decide which Gateway (and which team or use case) gets access to which tools. Three tools, one Gateway, one URL.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Connect Your MCP Client
&lt;/h3&gt;

&lt;p&gt;Add your Gateway URL to Cursor Settings -&amp;gt; Tools &amp;amp; MCP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ARCADE-MCP"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://api.arcade.dev/mcp/engineering"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bearer arc_xxxxxxx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Arcade-User-ID"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"john@acme.com"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&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%2F3xb9j6z94132muedyb96.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%2F3xb9j6z94132muedyb96.png" alt="Single endpoint screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your agent now has access to GitHub, Linear, and Slack through a single connection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Authenticate
&lt;/h3&gt;

&lt;p&gt;When your agent tries to access a tool it doesn't have permission for yet, Arcade detects this and prompts you to authorize just-in-time, with exactly the scopes needed for that action. No upfront permission grabs, no over-provisioning. You authorize what's needed, when it's needed.&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%2F8q8hzdzk7mhffjxfcdnl.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%2F8q8hzdzk7mhffjxfcdnl.png" alt="Just-in-time authorization screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are first-party OAuth flows directly with each provider: GitHub, Linear, Slack — the same flows your security team already trusts. Once authorized, Arcade handles token refresh and lifecycle automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Run the Workflow
&lt;/h3&gt;

&lt;p&gt;Open Cursor and tell your agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Pick up SAL-20 from Linear, create a feature branch in GitHub Repo - https://github.com/ArcadeAI/F1-Pitwall. When I'm done with my changes, open a PR with a description based on the ticket, assign @evan as reviewer, close the Linear issue, and post an update to #engineering in Slack."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Watch it happen. Your agent grabs the ticket, creates the branch, waits for you to code, opens the PR, updates Linear, and notifies the team — all without leaving your IDE.&lt;/p&gt;

&lt;h2&gt;
  
  
  See It in Action
&lt;/h2&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/3FY9i56hS7s"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP Gateways for any use case or user
&lt;/h3&gt;

&lt;p&gt;Different teams need different tools. Your engineering team needs GitHub and Linear. Support needs Zendesk and Confluence. Sales needs Salesforce and HubSpot.&lt;/p&gt;

&lt;p&gt;You can create separate Gateways for each use case, each with its own curated toolset. Each Gateway becomes a managed endpoint for the specific workflow or team. Here's an example of what becomes possible when your agent has reliable tools behind a single Gateway.&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%2F7rzm978dmzpcglkdkvyi.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%2F7rzm978dmzpcglkdkvyi.png" alt="Multi-user agent use cases diagram"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Persona&lt;/th&gt;
&lt;th&gt;Tools&lt;/th&gt;
&lt;th&gt;Example Prompt&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Developer&lt;/td&gt;
&lt;td&gt;GitHub, Linear, Slack&lt;/td&gt;
&lt;td&gt;"Pick up PROJ-1234, create a branch, and when I'm done, open a PR and close the ticket."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engineering Manager&lt;/td&gt;
&lt;td&gt;Linear, Jira, GitHub, Slack&lt;/td&gt;
&lt;td&gt;"What did the platform team ship this week? Any blocked issues?"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Incident Response&lt;/td&gt;
&lt;td&gt;PagerDuty, GitHub, Confluence, Slack&lt;/td&gt;
&lt;td&gt;"What changed in the payments service in the last 24 hours? Any related customer tickets?"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer Support&lt;/td&gt;
&lt;td&gt;Zendesk, Salesforce, Confluence, Slack&lt;/td&gt;
&lt;td&gt;"Pull up context for ticket #45231 and check if this customer has had similar issues before."&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each persona gets a Gateway with exactly the tools they need. Different permission structures, same reliability. The developer workflow is the one most teams start with—issue to branch to PR to done, all from your IDE.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bigger Picture: Managing MCP Gateways at Scale
&lt;/h2&gt;

&lt;p&gt;Here's where it gets interesting for platform teams and Arcade admins.&lt;/p&gt;

&lt;p&gt;Arcade functions as a &lt;strong&gt;single runtime&lt;/strong&gt; for all your MCP tools — whether they're from Arcade's catalog, custom-built, or third-party servers you bring yourself. Every Gateway is a single, manageable URL that plugs into this runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Centralized governance.&lt;/strong&gt; You decide which tools are available in which Gateway, with granular permissions. Engineering gets GitHub and Linear. Support gets Zendesk. Sales gets Salesforce. Each team has exactly the tools they need, nothing more. No MCP sprawl, no teams accidentally rebuilding servers that already exist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Non-disruptive updates.&lt;/strong&gt; Your team switches from ClickUp to Linear. In the old world, everyone reconfigures their local MCP setup. With Gateways, you update the Gateway once. Everyone using that Gateway URL gets the new tools automatically. Version control and safe rollouts built in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fine-grained audit logs.&lt;/strong&gt; See what tools are being used, by which user, for which actions, across which services. This isn't just useful for debugging. It's the visibility your security team needs to actually approve agent deployments. OTEL-compatible for integration with your existing observability stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scalable onboarding.&lt;/strong&gt; New hire joins the team. Send them the Gateway URL. They authenticate with their own credentials. Done. They have the same toolset as everyone else, with their own permissions.&lt;/p&gt;

&lt;p&gt;This is the shift: from "every developer manages their own MCP configuration" to "the platform team manages Gateways, any team can just use them." You get to accelerate AI development without sacrificing the control enterprise environments require.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.arcade.dev/en/home/mcp-gateway-quickstart" rel="noopener noreferrer"&gt;Quickstart Guide: Setting up an Arcade MCP Gateway →&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.arcade.dev/en/mcp-servers" rel="noopener noreferrer"&gt;Full Tool Catalog →&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.arcade.dev/en/home/mcp-gateways" rel="noopener noreferrer"&gt;Gateway Documentation →&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Free
&lt;/h2&gt;

&lt;p&gt;MCP Gateways are now available as part of Arcade's runtime. Create a Gateway, connect your client, and see what your agent can actually do when it has reliable tools behind it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://account.arcade.dev/register" rel="noopener noreferrer"&gt;Get Started for free →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have questions or want to share what you're building? Join the conversation on &lt;a href="https://discord.gg/jBDcBqtQzu" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; or reach out at &lt;a href="mailto:hello@arcade.dev"&gt;hello@arcade.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;*Claude Desktop will be coming soon&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>agents</category>
      <category>ai</category>
    </item>
    <item>
      <title>Federation Over Embeddings: Let AI Agents Query Data Where It Lives</title>
      <dc:creator>Gnanaguru Sattanathan</dc:creator>
      <pubDate>Thu, 26 Feb 2026 08:00:00 +0000</pubDate>
      <link>https://forem.com/avoguru/federation-over-embeddings-let-ai-agents-query-data-where-it-lives-58l3</link>
      <guid>https://forem.com/avoguru/federation-over-embeddings-let-ai-agents-query-data-where-it-lives-58l3</guid>
      <description>&lt;p&gt;Someone told you to pivot to AI. Add an AI layer. "We need to be AI-first."&lt;/p&gt;

&lt;p&gt;Fair enough. So you start thinking: what does AI need? Data. Obviously.&lt;/p&gt;

&lt;p&gt;So the playbook writes itself: collect data in a central place, set up a vector database, do some chunking, build a RAG pipeline, maybe fine-tune a model. Then query it. Ship the chatbot. Declare victory.&lt;/p&gt;

&lt;p&gt;This is what I call the &lt;strong&gt;AI centralization tax&lt;/strong&gt;. Not the cost of having a data warehouse — that's often justified. The tax is building a &lt;em&gt;parallel&lt;/em&gt; AI-specific data infrastructure on top of what you already have: vector databases, embedding pipelines, chunking strategies, custom models. A whole new layer, just for AI.&lt;/p&gt;

&lt;p&gt;Here's the thing: you might eventually need some of that. But probably not yet. And probably not for the use cases you think.&lt;/p&gt;

&lt;p&gt;You likely already have systems that hold your data: CRMs, support platforms, billing systems, maybe a data warehouse. The question isn't whether to centralize data (you probably already have). The question is whether AI needs its own separate copy, transformed into embeddings, stored in yet another database.&lt;/p&gt;

&lt;p&gt;The answer is almost always no.&lt;/p&gt;

&lt;p&gt;If you're going after differentiation, if you're trying to prove unit economics, if you're racing to stay ahead of competitors — building AI-specific infrastructure before seeing any returns is a strategic mistake. You're creating a parallel data estate for questions you haven't validated.&lt;/p&gt;

&lt;p&gt;And here's the trap: once you've invested months building embedding pipelines and vector infrastructure, it's painful to pivot even when better options emerge. That's not just technical debt. That's strategic lock-in to an architecture that may already be obsolete.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's Be Blunt
&lt;/h2&gt;

&lt;p&gt;Someone asks: "What's the health of this customer?"&lt;/p&gt;

&lt;p&gt;You don't need a RAG pipeline for that. You don't need a vector database. You don't need your own model. You don't need a data warehouse with months of ETL work.&lt;/p&gt;

&lt;p&gt;What you need: an AI agent with tool calling capabilities and a capable foundation model. That's it. Everything else is optimization.&lt;/p&gt;

&lt;p&gt;An agentic AI system with tool access can query your CRM, pull recent support tickets, check billing status, and synthesize a health assessment in seconds — with real-time data, without any infrastructure you need to build or maintain.&lt;/p&gt;

&lt;p&gt;This isn't theoretical. This is what's possible right now with MCP (Model Context Protocol) and Agent orchestration frameworks.&lt;/p&gt;

&lt;p&gt;If your AI use case looks anything like "get me information about X from our systems," stop. Don't reach for the centralization playbook. There's a faster path.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI Centralization Playbook
&lt;/h2&gt;

&lt;p&gt;Four approaches, same trap: building AI-specific infrastructure instead of leveraging what you have:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RAG pipelines.&lt;/strong&gt; Chunk your documents, generate embeddings, store them in a vector database, retrieve the top-k matches, stuff them into context. Works for "chat with your PDF." Falls apart when you need accurate structured results — ask for a count or an aggregation and you get hallucinated numbers. Teams keep optimizing chunking strategies and similarity thresholds, solving the wrong problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom fine-tuned models.&lt;/strong&gt; Collect training data, curate examples, run fine-tuning jobs, deploy, monitor drift. Weeks or months of work. By the time you ship, base models have improved and your fine-tune is already behind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data warehouses &lt;em&gt;for AI&lt;/em&gt;.&lt;/strong&gt; You already have Snowflake or BigQuery for analytics. The AI playbook says: now build semantic layers, create AI-specific transformations, maybe replicate into a vector store. More infrastructure, more maintenance, when an AI agent could just query your existing warehouse directly via tool calling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Knowledge graphs &lt;em&gt;for AI&lt;/em&gt;.&lt;/strong&gt; Model your domain as entities and relationships, ingest data, build traversal logic. Months of work, brittle when schemas change, solving a problem that agentic systems with tools can often handle through reasoning.&lt;/p&gt;

&lt;p&gt;Same pattern: assume AI needs its own data layer. Same problem: you're building parallel infrastructure instead of connecting to what exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  Federation: The RAG Alternative That Ships
&lt;/h2&gt;

&lt;p&gt;There's a simpler question: why does AI need its own copy of the data?&lt;/p&gt;

&lt;p&gt;If AI agents can reason, and tools can query systems, and LLMs can synthesize — the data can stay where it already lives. &lt;strong&gt;Query at runtime. Synthesize on demand.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's federation. Instead of copying data into AI-specific infrastructure, give agents tools to query your existing systems directly.&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%2Ft6zk9kt7c5w1kx7jxuus.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%2Ft6zk9kt7c5w1kx7jxuus.png" alt="Federation architecture diagram" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Critical clarification:&lt;/strong&gt; A Snowflake warehouse with an MCP server is federation. You're querying data where it lives. The warehouse serves its purpose, and AI agents access it directly without needing a vector layer on top. Federation isn't anti-warehouse — it's anti-duplication.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;What makes this viable now:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model capability.&lt;/strong&gt; Frontier LLMs handle multi-step reasoning and tool orchestration reliably. Context windows hold results from multiple system queries. The models do synthesis that would have required custom code two years ago.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tool standardization via MCP.&lt;/strong&gt; The Model Context Protocol has emerged as the standard for connecting AI agents to external systems. Major model providers — &lt;a href="https://www.anthropic.com/" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, &lt;a href="https://developers.openai.com/apps-sdk/concepts/mcp-server/" rel="noopener noreferrer"&gt;OpenAI&lt;/a&gt; — have adopted it. The ecosystem now includes thousands of pre-built integrations: CRMs, support systems, billing platforms, databases, developer tools. And there are MCP runtimes that &lt;a href="https://blog.arcade.dev/agent-authorization-langgraph-guide" rel="noopener noreferrer"&gt;handle authorization at query time&lt;/a&gt; — agents authenticate as the user rather than relying on over-privileged service accounts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent frameworks.&lt;/strong&gt; The orchestration layer has matured. Chain-of-thought reasoning means agents recover from mistakes and converge on correct answers. Error handling that required explicit coding is now emergent behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three AI Agent Architecture Patterns
&lt;/h2&gt;

&lt;p&gt;Each pattern builds on the previous one. Start simple, add complexity only when you hit limits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 1: Simple Federation with Tool Calling
&lt;/h3&gt;

&lt;p&gt;The foundational pattern. An AI agent receives a query, uses tool calling to query source systems via MCP servers, and synthesizes the answer.&lt;/p&gt;

&lt;p&gt;Don't underestimate this. With current LLMs, simple federation handles most "get me information about X" queries — status checks, lookups, cross-system research — without any custom infrastructure.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The key insight: the agent is the join layer.&lt;/strong&gt; It reasons across sources, handles schema differences through semantic understanding, and synthesizes coherent answers. You don't need to model the relationships in advance — the agent figures them out at query time.&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%2F4wr8f76d9f2dm7cw2rq6.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%2F4wr8f76d9f2dm7cw2rq6.png" alt="Simple Federation diagram" width="800" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; The agent maintains minimal state — just enough to track the conversation and coordinate MCP tool calls. Each query hits source systems directly, gets fresh data, returns results. Agent frameworks like &lt;a href="https://docs.langchain.com/oss/python/langgraph/persistence" rel="noopener noreferrer"&gt;LangGraph&lt;/a&gt; provide state persistence and checkpointing out of the box — this alone takes you a long way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Works for:&lt;/strong&gt; Status checks, lookups, cross-system queries, research tasks. "What's the health of Acme Corp?" "Show me recent tickets for this customer." "What's our pipeline this quarter?" "Compare this customer's support history with their billing status."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt; Adds latency (typically 2-5 seconds for multi-system queries, on top of model inference time). No persistent memory across sessions — as more tools and systems are queried within a session, context grows and accuracy can degrade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When it breaks:&lt;/strong&gt; Queries requiring computation across large datasets (aggregations over thousands of records), sub-second response requirements, or queries where source API latency compounds unacceptably.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 2: Federation with Ephemeral Compute
&lt;/h3&gt;

&lt;p&gt;Simple federation handles most queries. But some tasks need more: complex aggregations, data transformations, joins across large result sets, or generating artifacts from fetched data.&lt;/p&gt;

&lt;p&gt;For these cases, add ephemeral compute.&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%2Fa82ofjnb446m1l89zz2l.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%2Fa82ofjnb446m1l89zz2l.png" alt="Ephemeral Compute diagram" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; The AI agent fetches data via MCP tools, then spins up temporary compute — a sandboxed environment where it can execute code, run SQL against in-memory databases, or process data programmatically. Results return, compute disposes. Sandboxed environments like &lt;a href="https://e2b.dev/" rel="noopener noreferrer"&gt;E2B&lt;/a&gt; are built specifically for this pattern.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Works for:&lt;/strong&gt; Cross-system joins over thousands of records, complex aggregations, code generation from data, document assembly, analytical scripts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt; More complex orchestration. Adds latency (compute spin-up plus execution time). The join logic itself can be complex when schemas don't align — you're writing fuzzy matching or asking the agent to reason about entity resolution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When it breaks:&lt;/strong&gt; Datasets exceeding what fits in memory (typically 100K+ records depending on schema width), queries requiring historical data the source systems don't retain, or when you need results cached for repeated access.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 3: Agentic AI with Long-term Memory
&lt;/h3&gt;

&lt;p&gt;Add persistent context that accumulates across sessions. The AI agent federates for current data but also maintains memory of decisions, context, and precedents.&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%2Fo8aptesc4baczwqmoyew.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%2Fo8aptesc4baczwqmoyew.png" alt="Long-term Memory diagram" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; Before querying live systems, the agent checks memory for relevant history. This isn't about embedding your entire data estate — it's about persisting agent-generated context: decisions made, precedents set, user preferences learned. Memory layers like &lt;a href="https://mem0.ai/" rel="noopener noreferrer"&gt;Mem0&lt;/a&gt; and &lt;a href="https://www.getzep.com/" rel="noopener noreferrer"&gt;Zep&lt;/a&gt; are emerging to solve this.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The difference from traditional RAG:&lt;/strong&gt; You're storing agent-generated context, not raw source documents. It's accumulated intelligence from interactions, not replicated data. The memory is append-only and grows organically from actual usage.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Works for:&lt;/strong&gt; Decision support with precedent ("Should we approve this discount? What did we do for similar deals?"), personalized experiences that improve over time, audit trails of agent reasoning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt; Memory architecture is still maturing across the ecosystem. You need explicit decisions about what's worth persisting. Memory retrieval adds latency and can surface irrelevant context.&lt;/p&gt;

&lt;h2&gt;
  
  
  What About the Edge Cases?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;"What about schema mismatches?"&lt;/strong&gt; When Salesforce's "Account" doesn't match Stripe's "Customer" — that's a SQL problem, not a vector problem. An AI agent with schema context can write joins that handle naming conventions and fuzzy matching. You need a capable model and well-designed MCP tools, not embeddings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"What about finding similar customers?"&lt;/strong&gt; Before reaching for vector similarity, ask: can SQL pattern matching, joins, and filtering get you there? Most "similarity" use cases are structural, not semantic. Agent reasoning with tools can get you there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"What about latency and API costs?"&lt;/strong&gt; Yes, LLM inference costs money. Compare that to three months of infrastructure investment before you've validated whether the use case matters. The model cost is the cheaper way to learn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When you genuinely need vector search:&lt;/strong&gt; Semantic search over large unstructured document sets where keyword search fails. That's RAG's sweet spot. Build it as an isolated tool: a vector store exposed via MCP, not as a centralized AI data layer.&lt;/p&gt;

&lt;p&gt;The pattern: &lt;strong&gt;solve isolated problems with isolated tools.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Asymmetry That Matters
&lt;/h2&gt;

&lt;p&gt;You might eventually need a vector store for semantic search over documents. You might need a fine-tuned model for domain-specific language. You might need embeddings for true similarity matching at scale.&lt;/p&gt;

&lt;p&gt;But you don't have to build any of that to start delivering value.&lt;/p&gt;

&lt;p&gt;That's the asymmetry. You can always add AI-specific infrastructure later: vector stores, custom models, embedding pipelines — for the isolated use cases that genuinely require them. The tools-first architecture accommodates it. Build the vector store when you've proven you need semantic search. Fine-tune a model when base models demonstrably fall short.&lt;/p&gt;

&lt;p&gt;You cannot easily do the reverse. Once you've invested months in embedding pipelines and vector infrastructure, you have teams maintaining them and stakeholders defending the investment. Pivoting to simpler tool-based approaches means stranded infrastructure and difficult conversations about sunk costs.&lt;/p&gt;

&lt;p&gt;Start with MCP tools. Ship value in days. Add complexity only where it's earned.&lt;/p&gt;

&lt;p&gt;If you start with the AI centralization playbook? By the time you've built the embedding pipelines and shipped the vector infrastructure, competitors who started with tools are on their third iteration. They've validated what users actually want. They're capturing market share while you're debugging retrieval accuracy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;Your data already lives somewhere: CRMs, support platforms, billing systems, data warehouses. AI agents with MCP tools can query those systems directly and synthesize answers in seconds.&lt;/p&gt;

&lt;p&gt;Schema mismatches? An agent with context can reason through them. Cross-system joins? Ephemeral compute. Similarity search? Often just SQL pattern matching. Semantic search over unstructured documents? That's where a vector store earns its place — as one MCP tool among many, not as the foundation of your architecture.&lt;/p&gt;

&lt;p&gt;The pattern I keep seeing work: start with federation, ship value quickly, then add specialized infrastructure only for the specific problems that genuinely require it. Vector stores, custom models, embedding pipelines — they all have their place. But that place is usually narrower than the default playbook suggests.&lt;/p&gt;

&lt;p&gt;Most enterprise AI use cases are variations of "get me information about X from our systems." For that, agents and tools are enough. The organizations shipping fastest have figured this out.&lt;/p&gt;

&lt;p&gt;Query data where it lives. Add complexity only where it's earned.&lt;/p&gt;

</description>
      <category>vectordatabase</category>
      <category>mcp</category>
      <category>agents</category>
      <category>ai</category>
    </item>
    <item>
      <title>Patterns for Agentic Tools: Your agents are only as good as your tools</title>
      <dc:creator>Gnanaguru Sattanathan</dc:creator>
      <pubDate>Wed, 25 Feb 2026 23:28:18 +0000</pubDate>
      <link>https://forem.com/avoguru/patterns-for-agentic-tools-your-agents-are-only-as-good-as-your-tools-22ao</link>
      <guid>https://forem.com/avoguru/patterns-for-agentic-tools-your-agents-are-only-as-good-as-your-tools-22ao</guid>
      <description>&lt;h2&gt;
  
  
  The Moment
&lt;/h2&gt;

&lt;p&gt;Every few years, a new pattern language emerges that changes how we build software.&lt;/p&gt;

&lt;p&gt;In 1994, the &lt;a href="https://martinfowler.com/bliki/GangOfFour.html" rel="noopener noreferrer"&gt;Gang of Four&lt;/a&gt; gave us Design Patterns. In 2003, Hohpe and Woolf gave us &lt;a href="https://www.enterpriseintegrationpatterns.com/" rel="noopener noreferrer"&gt;Enterprise Integration Patterns&lt;/a&gt;. Since then: &lt;a href="https://martinfowler.com/microservices/" rel="noopener noreferrer"&gt;Microservices Patterns&lt;/a&gt;, Cloud Patterns, and now Agent Patterns.&lt;/p&gt;

&lt;p&gt;But there's a gap. Agents can chat and reason on their own — but they can't &lt;strong&gt;'act'&lt;/strong&gt; without tools. Standards like MCP have unlocked how agents discover and call tools. The protocol layer is solved. What's missing is the design layer: patterns for building tools that agents can actually use well. That's the missing layer.&lt;/p&gt;

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

&lt;p&gt;We've built over 8000 tools across 100+ integrations — the largest catalog of agent-ready tools in production. Not API wrappers. Production-grade tools that handle the edge cases: rate limits, pagination, auth refresh, partial failures.&lt;/p&gt;

&lt;p&gt;Every mistake you can make: unclear descriptions, unhelpful errors, parameters that made sense to us but not to an LLM, we've made it. We learned that "working" isn't the same as "agent-usable."&lt;/p&gt;

&lt;p&gt;A tool can return the right data and still fail because the agent couldn't figure out when to call it.&lt;/p&gt;

&lt;p&gt;After thousands of iterations, patterns emerged. We built internal checklists, review processes, and eventually a framework that let us ship quality tools consistently. Not theory — just what works when you're building tools that agents actually use.&lt;/p&gt;

&lt;p&gt;We documented them. Now we're sharing them. Explore the full catalog at &lt;a href="http://arcade.dev/patterns" rel="noopener noreferrer"&gt;arcade.dev/patterns&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Paradigm Shift
&lt;/h2&gt;

&lt;p&gt;For two decades, we built integration around a simple model: middleware orchestrates, applications consume. ESBs routed messages. Workflow engines enforced sequence. The integration layer decided what happened, when, and in what order.&lt;/p&gt;

&lt;p&gt;Agent tooling collapses that entire layer. There is no bus. There is no predetermined workflow. The agent decides which tool to call, interprets the parameters, handles the response, and figures out what to do next. The orchestration logic that lived in your middleware is now emergent, reconstructed by the agent on every invocation, with no guarantee it plays out the same way twice.&lt;/p&gt;

&lt;p&gt;This isn't traditional integration with a new consumer. It's an entirely new type of consumer and the fundamentals have changed.&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%2Frxg67yfahgjusv3fef2u.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%2Frxg67yfahgjusv3fef2u.png" alt="Traditional vs Agent Tools" width="721" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When an LLM selects which tool to call, interprets parameters, and decides what to do with errors, the design constraints are fundamentally different. The old patterns don't fit. We need new ones.&lt;/p&gt;

&lt;p&gt;So where do you start? With a way to classify what you're building.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Axes of Classification
&lt;/h2&gt;

&lt;p&gt;Every tool exists somewhere in three dimensions. Understanding where helps you pick the right patterns.&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%2Fbozrenvuamfgiqyd4q6d.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%2Fbozrenvuamfgiqyd4q6d.png" alt="3 Dimensions of Tools" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maturity&lt;/strong&gt; is the vertical axis: how sophisticated your tool is. Atomic tools do one thing: &lt;code&gt;get_user(id)&lt;/code&gt;. Orchestrated tools coordinate many, managing state across calls. We'll dig deeper into this axis in the maturity model below.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integration&lt;/strong&gt; is what your tool connects to — APIs, databases, file systems, or system operations. Each carries different design constraints. Database tools need the Idempotent Operation pattern because agents retry on timeout and your tool must handle duplicate calls gracefully.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Access&lt;/strong&gt; is how execution works. Synchronous tools are straightforward: call, wait, respond. But a report generation tool that blocks for 45 seconds will timeout or stall the agent. That's where the Async Job pattern comes in: the agent calls &lt;code&gt;generate_report()&lt;/code&gt;, receives a job ID, and polls &lt;code&gt;check_status(job_id)&lt;/code&gt; until complete.&lt;/p&gt;

&lt;p&gt;Your coordinates across all three axes determine which patterns you need. A tool that is Composite × Database × Async has very different design requirements than one that is Atomic × API × Sync.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cross-Cutting Concerns
&lt;/h2&gt;

&lt;p&gt;Knowing where your tool sits on the three axes tells you &lt;em&gt;which&lt;/em&gt; patterns to look at. But four concerns cut across every axis: agent experience, security boundaries, error-guided recovery, and tool composition. Get these wrong and it doesn't matter how well you've classified your tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent Experience
&lt;/h2&gt;

&lt;p&gt;Design for the LLM, not the human. Tool descriptions, parameter names, and error messages should be optimized for agent comprehension.&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%2Fovvh6qyyo4jy57bxxsrk.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%2Fovvh6qyyo4jy57bxxsrk.png" alt="Agent Experience" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Parameter Coercion pattern is a good example: an agent might pass "2024–01–15", "January 15", or "yesterday" — your tool accepts all of them and normalizes internally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security Boundaries
&lt;/h2&gt;

&lt;p&gt;Prompts express intent, code enforces rules. Never trust the agent to enforce security. Authorization and secrets must be handled server-side.&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%2Fx3slqdi4m379yorcs5zy.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%2Fx3slqdi4m379yorcs5zy.png" alt="Security Boundaries" width="800" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Context Injection pattern passes user identity, permissions, and credentials through a server-side context object — never through the LLM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Error-Guided Recovery
&lt;/h2&gt;

&lt;p&gt;Errors should teach, not just fail. When things go wrong, provide actionable guidance. What should the agent try next? A raw 429 means nothing to an LLM. A response that says "rate limited, retry after 30 seconds or reduce batch size to 50" gives the agent a path forward.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tool Composition
&lt;/h2&gt;

&lt;p&gt;Tools should compose well together like Unix pipes, not like a chain of command. That means consistent response shapes so one tool's output feeds cleanly as another's input, batch support so agents don't loop one-at-a-time, and multiple abstraction levels so the agent picks the right granularity for the task.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Landscape: 54 Patterns, 10 Categories
&lt;/h2&gt;

&lt;p&gt;These four principles — agent experience, security boundaries, error-guided recovery, and tool composition — thread through everything. They show up differently depending on the tool, but the questions they raise are universal: How will agents understand this? How do we keep it secure? What happens when it fails? How do tools fit together without directing each other?&lt;/p&gt;

&lt;p&gt;We organized our answers into 54 patterns across 10 categories. Each category maps to one of those recurring questions:&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%2Fcmj0bia94omixus4hbin.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%2Fcmj0bia94omixus4hbin.png" alt="Categories of Tool Patterns" width="719" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each pattern includes the problem it solves, when to apply it, implementation considerations, and code examples.&lt;/p&gt;

&lt;p&gt;The full catalog is at &lt;a href="https://arcade.dev/patterns" rel="noopener noreferrer"&gt;arcade.dev/patterns&lt;/a&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%2Fcl2if7yoy73bav4gj6w0.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%2Fcl2if7yoy73bav4gj6w0.png" alt="Patterns for Agentic Tools" width="800" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now how do you actually put it to use?&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Your First Tool
&lt;/h2&gt;

&lt;p&gt;Where you start depends on two things: where your tool sits on the three axes, and what maturity level you're at today.&lt;/p&gt;

&lt;h3&gt;
  
  
  Classify Your Tool
&lt;/h3&gt;

&lt;p&gt;Work through four questions: What &lt;strong&gt;type&lt;/strong&gt; is this — Query, Command, or Discovery? What &lt;strong&gt;integration&lt;/strong&gt; — API, Database, File System, or System? What &lt;strong&gt;access pattern&lt;/strong&gt; — sync, async, streaming, or event-driven? And what &lt;strong&gt;maturity level&lt;/strong&gt; — single operation or bundled workflow?&lt;/p&gt;

&lt;h3&gt;
  
  
  Find Your Level
&lt;/h3&gt;

&lt;p&gt;Your position on the maturity axis tells you which patterns to start with. Don't over-engineer: start atomic, watch how agents actually use your tools, and level up when you see the signals in your traces.&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%2Fbtv14xysmidfa616xi6k.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%2Fbtv14xysmidfa616xi6k.png" alt="Tool Maturity Spectrum" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The observable signals between levels are real things you'll find in your logs: high retry rates mean your tool needs better descriptions and error guidance. Repeated tool sequences mean it's time to bundle. Partial completions on multi-step operations mean you need transaction boundaries and compensation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Join Us
&lt;/h2&gt;

&lt;p&gt;These patterns exist because of the engineering discipline behind them. The Arcade engineering team, particularly &lt;a href="https://www.linkedin.com/in/eric-gustin/" rel="noopener noreferrer"&gt;Eric&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/renatobyrro/" rel="noopener noreferrer"&gt;Renato&lt;/a&gt;, and &lt;a href="https://www.linkedin.com/in/frliberal/" rel="noopener noreferrer"&gt;Francisco&lt;/a&gt;, authored thousands of tools and built the quality control processes that turned hard-won lessons into repeatable standards.&lt;/p&gt;

&lt;p&gt;This work is dedicated to them, to the broader tool engineering and MCP community, and to every team that's learned the hard way that "working" and "agent-usable" aren't the same thing.&lt;/p&gt;

&lt;p&gt;The full set of patterns is at &lt;a href="https://arcade.dev/patterns" rel="noopener noreferrer"&gt;arcade.dev/patterns&lt;/a&gt;. Each pattern includes diagrams, code examples, and implementation considerations.&lt;/p&gt;

&lt;p&gt;We're releasing these patterns openly because better tools benefit everyone. When the ecosystem builds better tools, agents get more capable. When agents get more capable, more people build with them. That's the future we want to help create.&lt;/p&gt;

&lt;p&gt;What did we miss? What patterns have you discovered that aren't here? Where did we get it wrong? We'd love your feedback — send us a note, tell us what doesn't make sense.&lt;/p&gt;

&lt;p&gt;This is a shared language. Help us make tools better.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Explore the full pattern catalog.&lt;/strong&gt;&lt;br&gt;
All 54 patterns with examples, trade-offs, and implementation guidance: &lt;a href="https://www.arcade.dev/patterns" rel="noopener noreferrer"&gt;arcade.dev/patterns&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to build?&lt;/strong&gt;&lt;br&gt;
Arcade gives you the runtime, the tools, and the auth layer to ship agents that actually work in production. &lt;a href="https://docs.arcade.dev/en/home" rel="noopener noreferrer"&gt;Get started&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>agents</category>
      <category>ai</category>
    </item>
    <item>
      <title>Java's Agentic Framework Boom is a Code Smell</title>
      <dc:creator>Gnanaguru Sattanathan</dc:creator>
      <pubDate>Sun, 02 Nov 2025 16:08:25 +0000</pubDate>
      <link>https://forem.com/avoguru/javas-agentic-framework-boom-is-a-code-smell-5eni</link>
      <guid>https://forem.com/avoguru/javas-agentic-framework-boom-is-a-code-smell-5eni</guid>
      <description>&lt;p&gt;Originally published &lt;a href="https://www.gnanaguru.com/p/javas-agentic-framework-boom-is-a" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last week, I published a post arguing that you don't need an agentic framework to start building agents. That piece was for the developers waiting on the sidelines for the "perfect" framework to arrive.&lt;/p&gt;

&lt;p&gt;This week, I need to talk to a different group: the people who are actually building those frameworks. I know this group well because I was one of them.&lt;/p&gt;

&lt;p&gt;I need to come clean. I'm a &lt;a href="https://github.com/avoguru/not7-core" rel="noopener noreferrer"&gt;framework-aholic&lt;/a&gt;. I built my career on &lt;a href="https://camel.apache.org/" rel="noopener noreferrer"&gt;Apache Camel&lt;/a&gt;, and I owe a good portion of my life's successes to the elegance of &lt;a href="https://www.enterpriseintegrationpatterns.com/" rel="noopener noreferrer"&gt;Enterprise Integration Patterns&lt;/a&gt;. I get it. And if there's one community that deserves the Nobel Prize for Frameworks, it's the Java community. From the early days at Red Hat to the entire big data ecosystem, frameworks have been the engine of the JVM world for 15 years. We are the masters of abstraction.&lt;/p&gt;

&lt;p&gt;So when the agentic era dawned and Java was playing catch-up, my first instinct was primal: build a framework. I even started one, driven by the thought, "Where is the Apache Camel for AI agents?"&lt;/p&gt;

&lt;p&gt;Three months ago, there was maybe one serious Java agentic framework. Now, there are three—including &lt;a href="https://embabel.io/" rel="noopener noreferrer"&gt;Embabel&lt;/a&gt;. The race is on. But watching this explosion, I'm forced to ask a difficult question: Is the framework itself becoming an anti-pattern? Are we creating a liability for ourselves instead of focusing on what really matters—building agents?&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%2Flyf77yqwr78hjqdeuo6h.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%2Flyf77yqwr78hjqdeuo6h.png" alt="Developers rushing to build frameworks" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The recent boom in Java agentic frameworks isn't a sign of a healthy, maturing ecosystem. It's a symptom. A code smell at the architectural level that tells us something is fundamentally wrong with our approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Did We Build Frameworks in the First Place?
&lt;/h2&gt;

&lt;p&gt;Let's rewind. Why did frameworks like &lt;a href="https://spring.io/" rel="noopener noreferrer"&gt;Spring&lt;/a&gt; and &lt;a href="https://camel.apache.org/" rel="noopener noreferrer"&gt;Camel&lt;/a&gt; become so dominant? The reasons were clear and valid:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer Productivity:&lt;/strong&gt; We were drowning in boilerplate code. Frameworks abstracted it away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code Quality &amp;amp; Governance:&lt;/strong&gt; They provided standardized patterns that prevented every developer from reinventing the wheel (often poorly).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reusability:&lt;/strong&gt; They gave us battle-tested constructs to build upon, saving immense time and effort.&lt;/p&gt;

&lt;p&gt;The goal was to optimize for productivity, quality, and governance. But are those the same parameters we should be optimizing for today? It feels like we're trying to solve a 2010 problem in 2025, completely ignoring the elephant in the room: AI-powered developer tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Elephant Has a Name: Cursor (and Friends)
&lt;/h2&gt;

&lt;p&gt;Here's what changed while we were busy porting &lt;a href="https://www.langchain.com/" rel="noopener noreferrer"&gt;LangChain&lt;/a&gt; to Java:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cursor.sh/" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; and &lt;a href="https://github.com/features/copilot" rel="noopener noreferrer"&gt;GitHub Copilot&lt;/a&gt; can generate boilerplate faster than you can type an import statement. That elaborate chain abstraction you're building? Cursor writes it in three seconds. That tool registration pattern you're standardizing? Copilot already knows five variations.&lt;/p&gt;

&lt;p&gt;But here's where we need to stop and ask a more fundamental question: What does your end user actually need?&lt;/p&gt;

&lt;h2&gt;
  
  
  What Do You Really Need to Build?
&lt;/h2&gt;

&lt;p&gt;Let's get specific. There are two scenarios most of us face:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 1:&lt;/strong&gt; You're building one critical agent over the next 12 months. Maybe it's a customer service agent handling 10,000 conversations a day. Or a code review agent that needs to understand your company's specific standards. Or a compliance agent that must never hallucinate on regulatory requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 2:&lt;/strong&gt; You're building an agent platform. Hundreds or thousands of agents, each with different contexts, different domains, different requirements. Maybe you're at a consultancy building agents for multiple clients. Or you're creating an internal platform where different teams can spin up their own agents. You need something reusable, adaptable, evolvable. Something that lets you create new agents quickly while maintaining consistency and quality across all of them.&lt;/p&gt;

&lt;p&gt;In both cases, ask yourself honestly: Does your user need a code framework?&lt;/p&gt;

&lt;p&gt;Or do they need something completely different?&lt;/p&gt;

&lt;h2&gt;
  
  
  Redefining the Framework
&lt;/h2&gt;

&lt;p&gt;Here's what I've learned after abandoning my framework and actually shipping agents: We don't need to eliminate frameworks. We need to redefine what a framework actually means in the AI era.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The old framework definition:&lt;/strong&gt; A reusable code abstraction that provides structure and handles cross-cutting concerns. Something you import and build on top of.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The new framework definition:&lt;/strong&gt; The complete environment for building agents—a set of interdependent layers that work together, where the code layer is just one piece of a larger puzzle.&lt;/p&gt;

&lt;p&gt;Here are the layers that actually matter in a modern agent framework:&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%2Fxhux1lbctjzwyyo4khef.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%2Fxhux1lbctjzwyyo4khef.png" alt="New way to create frameworks that create agents" width="800" height="825"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 1: The Language Itself
&lt;/h3&gt;

&lt;p&gt;Java (or your language of choice) with its constructs, types, and patterns. Not wrapped in abstractions—used directly. The language is already your framework for structuring logic. You don't need a code framework on top of Java. Java IS the framework.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 2: The Model
&lt;/h3&gt;

&lt;p&gt;A really good LLM—&lt;a href="https://openai.com/gpt-4" rel="noopener noreferrer"&gt;GPT-4&lt;/a&gt;, &lt;a href="https://www.anthropic.com/claude" rel="noopener noreferrer"&gt;Claude&lt;/a&gt;, &lt;a href="https://deepmind.google/technologies/gemini/" rel="noopener noreferrer"&gt;Gemini&lt;/a&gt;. This isn't just an API you call. It's a core component of your stack. The model's capabilities directly determine what you can build. Choose it as carefully as you'd choose your programming language.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 3: Developer Productivity Tools
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://cursor.sh/" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;, &lt;a href="https://github.com/features/copilot" rel="noopener noreferrer"&gt;Copilot&lt;/a&gt;, and the next generation of AI-powered dev tools. These are NOT optional. They're critical infrastructure. Your framework should be designed to work seamlessly with these tools. If Cursor can't easily generate code in your pattern, your pattern is wrong.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 4: Prompt Packs &amp;amp; Guidelines
&lt;/h3&gt;

&lt;p&gt;Your versioned, tested, governed prompts. Your organizational voice. Your domain knowledge. Your compliance rules. This is where your business logic lives—not in code, but in carefully curated context and instructions. Think of these as your dependency artifacts, like JARs, but for agent behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 5: Ecosystem APIs
&lt;/h3&gt;

&lt;p&gt;Context awareness about the emerging ecosystem of specialized platforms and their APIs. Vector databases for knowledge retrieval. Context stores and memory management systems like &lt;a href="https://www.getzep.com/" rel="noopener noreferrer"&gt;Zep&lt;/a&gt;. Tool execution platforms like &lt;a href="https://www.arcade.dev/" rel="noopener noreferrer"&gt;Arcade&lt;/a&gt;. Observability platforms for agent monitoring. Prompt management and versioning tools. Most of these expose REST APIs or standard protocols, most of these provide &lt;a href="https://llmstxt.org/" rel="noopener noreferrer"&gt;LLM.txt&lt;/a&gt; for context import. Your framework needs awareness that these exist and knowledge of how to connect to them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 6: Architecture &amp;amp; Design Patterns
&lt;/h3&gt;

&lt;p&gt;Architectural thinking captured as guidelines and patterns. Reusable blueprints for how these layers compose together across different use cases. Not code abstractions—documented knowledge on routing logic, versioning strategies, deployment patterns, and ecosystem integration that becomes part of your organizational context.&lt;/p&gt;

&lt;p&gt;Think about it. When you build that critical customer service agent, what actually determines its success?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Java code that calls the LLM? (That's 20 lines, Cursor writes it)&lt;/li&gt;
&lt;li&gt;The elaborate chain orchestration? (Standard control flow)&lt;/li&gt;
&lt;li&gt;The retry logic and error handling? (Java already has patterns for this)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Or is it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The model you chose&lt;/strong&gt; and how well it handles your domain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The prompts&lt;/strong&gt; that teach it your escalation rules and voice&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The tooling&lt;/strong&gt; that lets you iterate rapidly on those prompts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The integrations&lt;/strong&gt; with platforms like &lt;a href="https://arcade.dev/" rel="noopener noreferrer"&gt;Arcade&lt;/a&gt; for tools and &lt;a href="https://www.getzep.com/" rel="noopener noreferrer"&gt;Zep&lt;/a&gt; for memory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The architecture&lt;/strong&gt; that lets you version, test, and deploy changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The design patterns&lt;/strong&gt; that let you reuse this approach across agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;That's your framework.&lt;/strong&gt; All six layers, working together.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Framework in Practice
&lt;/h2&gt;

&lt;p&gt;Let me show you what this actually looks like when you're building agents:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 4 (Prompt Packs) are versioned artifacts&lt;/strong&gt;, not strings in your code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;prompts/
  customer-service/
    v1.2/
      system-prompt.md
      escalation-rules.md
      tone-guidelines.md
      product-context.md
      examples/
        refund-scenarios.yaml
        technical-issues.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Layer 5 (Ecosystem APIs) configuration&lt;/strong&gt; in your environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# .env&lt;/span&gt;
&lt;span class="nv"&gt;ARCADE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_arcade_key
&lt;span class="nv"&gt;ARCADE_GATEWAY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://api.arcade-ai.com
&lt;span class="nv"&gt;ZEP_API_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://api.getzep.com/v2
&lt;span class="nv"&gt;ZEP_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_zep_key
&lt;span class="nv"&gt;VECTOR_DB_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://your-vector-db.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Your ecosystem context is embedded in guidelines:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Ecosystem Integration Guidelines&lt;/span&gt;

&lt;span class="gu"&gt;## Tool Discovery&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Call Arcade API to list available tools: GET /tools
&lt;span class="p"&gt;-&lt;/span&gt; Reference: See Arcade LLM.txt at https://docs.arcade.dev/llms.txt

&lt;span class="gu"&gt;## Memory Management&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Zep session API: https://api.getzep.com/v2/sessions/{session_id}
&lt;span class="p"&gt;-&lt;/span&gt; Reference: See Zep API docs at https://docs.getzep.com

&lt;span class="gu"&gt;## Infra &amp;amp; Storage&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Object storage for prompt artifacts: S3, GCS, or Azure Blob
&lt;span class="p"&gt;-&lt;/span&gt; Vector DB for knowledge retrieval: Pinecone, Weaviate, or Qdrant endpoints
&lt;span class="p"&gt;-&lt;/span&gt; State persistence for long-running workflows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Layer 1 (Java) provides the structure&lt;/strong&gt;, clean and simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CustomerServiceAgent&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;PromptPack&lt;/span&gt; &lt;span class="n"&gt;prompts&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;ArcadeClient&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;ZepMemory&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt; &lt;span class="nf"&gt;handle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;CustomerQuery&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Retrieve conversation memory&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;history&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getSession&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sessionId&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;

        &lt;span class="c1"&gt;// Get available tools from Arcade&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;availableTools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;listTools&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;// Render prompt with context&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;prompts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;render&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"main"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;history&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;availableTools&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;complete&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Layer 3 (Cursor) generates this code&lt;/strong&gt; in seconds. You focus on the architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 6 (Architecture) guidelines:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Agent Architecture Guidelines&lt;/span&gt;

&lt;span class="gu"&gt;## Workflow Routing&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Design routing logic for multi-node agent workflows
&lt;span class="p"&gt;  -&lt;/span&gt; Classification node → routes to specialist nodes (support, sales, technical)
&lt;span class="p"&gt;  -&lt;/span&gt; Complexity analysis → routes to appropriate model tier (GPT-4o vs GPT-3.5)
&lt;span class="p"&gt;  -&lt;/span&gt; Tool selection node → routes to tool execution nodes based on user intent
&lt;span class="p"&gt;-&lt;/span&gt; Implement state machines for complex workflows with conditional branches
&lt;span class="p"&gt;-&lt;/span&gt; A/B routing for prompt versions: 10% to v2.0, 90% to v1.5, monitor quality...

&lt;span class="gu"&gt;## Rate Limiting &amp;amp; Throttling  &lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Per-user token budgets: 10K tokens/day (free), 100K (paid)
&lt;span class="p"&gt;-&lt;/span&gt; Route tool execution through Arcade gateway: centralized auth, rate limiting, tool discovery
&lt;span class="p"&gt;-&lt;/span&gt; Queue management: Max 100 concurrent requests, overflow to SQS...

&lt;span class="gu"&gt;## Versioning &amp;amp; Deployment&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Semantic versioning for prompts (v1.2, v2.0)
&lt;span class="p"&gt;-&lt;/span&gt; Decouple prompt deployments from code deployments
&lt;span class="p"&gt;-&lt;/span&gt; Blue-green rollouts with instant rollback capability...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why This Framework Scales
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;For one critical agent:&lt;/strong&gt; Pick your model (Layer 2), write clean code (Layer 1), iterate with Cursor (Layer 3), refine prompts (Layer 4), integrate ecosystem APIs (Layer 5), follow architectural patterns (Layer 6).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For a thousand agents:&lt;/strong&gt; Same model, same architectural patterns, same ecosystem APIs—but each agent gets its own prompt pack. Cursor generates the boilerplate. Your language provides structure. The ecosystem handles the hard problems.&lt;/p&gt;

&lt;p&gt;The beauty? The layers work together. Cursor generates code because patterns are simple. Prompts are independently versioned. Integrations use REST APIs. Architecture enables reuse without abstraction.&lt;/p&gt;

&lt;p&gt;No orchestration framework needed. This IS the framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Engine vs. SDK Question
&lt;/h2&gt;

&lt;p&gt;Let me be clear: I'm not saying all frameworks should disappear. I have tremendous respect for what the teams at &lt;a href="https://www.langchain.com/" rel="noopener noreferrer"&gt;LangChain&lt;/a&gt;, &lt;a href="https://www.langchain.com/langgraph" rel="noopener noreferrer"&gt;LangGraph&lt;/a&gt;, &lt;a href="https://maastra.ai/" rel="noopener noreferrer"&gt;Maastra&lt;/a&gt;, and others have built. But we need to understand a critical distinction that's getting lost in the rush to port everything to Java.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't confuse an engine with an SDK.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's what I mean: I can't wait to develop full agents in Java. I love Java. But I don't want a Java &lt;em&gt;engine&lt;/em&gt; just because I want to develop agents in Java.&lt;/p&gt;

&lt;p&gt;Consider these examples:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://docs.langchain4j.dev/" rel="noopener noreferrer"&gt;LangChain4J&lt;/a&gt;?&lt;/strong&gt; Great start as an SDK that connects to the broader LangChain ecosystem. You write in Java, but you're leveraging a proven engine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.crewai.com/" rel="noopener noreferrer"&gt;Crew AI&lt;/a&gt; with a Java SDK?&lt;/strong&gt; Perfect. Master the orchestration patterns in Python, then give me a Java interface to use them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://maastra.ai/" rel="noopener noreferrer"&gt;Maastra&lt;/a&gt; with multi-language support?&lt;/strong&gt; Exactly the right direction. Build the engine once, provide SDKs for every language.&lt;/p&gt;

&lt;p&gt;The pattern here? &lt;strong&gt;Develop in your preferred language without rebuilding the entire engine in that language.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We're building Java engines for agent orchestration when we should be building Java SDKs to proven engines. And honestly? Even that might be overkill.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Orchestration Layer is Getting Thinner
&lt;/h2&gt;

&lt;p&gt;Here's why I think even the SDK approach might be temporary, or at least becoming far more minimal:&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%2F99yxigbo73ou2wc4h5fo.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%2F99yxigbo73ou2wc4h5fo.png" alt="Yes, Agent frameworks will get thinner" width="800" height="797"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On one side:&lt;/strong&gt; Models are getting dramatically better. GPT-4, Claude 3.5, and Gemini have reasoning capabilities that make complex orchestration patterns obsolete. They can handle multi-step workflows with simple prompts that would have required elaborate chains six months ago.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On the other side:&lt;/strong&gt; The real engineering problems are being solved by specialized platforms. Take &lt;a href="https://arcade.dev/" rel="noopener noreferrer"&gt;Arcade&lt;/a&gt; as an example—tool discovery, authentication, execution at scale, handling rate limits, managing tool versions. That's where the hard engineering work is. Tool management isn't an orchestration problem anymore; it's an infrastructure problem being solved at the platform layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In the middle:&lt;/strong&gt; Orchestration frameworks are being squeezed thinner and thinner.&lt;/p&gt;

&lt;p&gt;When your model can reason through workflows and platforms handle the complex engineering problems (tools, memory, context), what's left for orchestration?&lt;/p&gt;

&lt;p&gt;The answer: Very little. And that's why the engineering focus needs to shift from orchestration to the broader agent development challenges—prompt management, ecosystem integration, decision auditability, cost optimization. The real problems aren't in orchestration anymore.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New Reality: AI-Native Frameworks
&lt;/h2&gt;

&lt;p&gt;The code smell isn't just that we're building too many frameworks. It's that we're building frameworks for a world that no longer exists. Here's what building frameworks in 2025 actually means:&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%2F4ppi5vag5vzphyvxcxin.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%2F4ppi5vag5vzphyvxcxin.png" alt="Old vs New framework comparison " width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Accept the AI-powered development reality&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every developer building agents will use &lt;a href="https://cursor.sh/" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;, &lt;a href="https://github.com/features/copilot" rel="noopener noreferrer"&gt;Copilot&lt;/a&gt;, or similar tools. That's not a trend—it's the new baseline. Design your framework to work seamlessly with AI code generation, not against it. If Cursor can't understand your patterns, your patterns are wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Your framework is plain English, not just code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most critical parts of your framework will be well-engineered prompts, clear guidelines, and structured context—not clever abstractions. These are your versioned artifacts. These determine agent behavior. Treat them with the same rigor you treat code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Don't reinvent engines when you need SDKs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, Java SDKs are critical. But you don't need to rebuild entire orchestration engines just to write agents in Java. The ecosystem already has platforms solving the hard problems: memory (&lt;a href="https://www.getzep.com/" rel="noopener noreferrer"&gt;Zep&lt;/a&gt;, &lt;a href="https://mem0.ai/" rel="noopener noreferrer"&gt;Mem0&lt;/a&gt;, &lt;a href="https://github.com/langchain-ai/langmem" rel="noopener noreferrer"&gt;LangMem&lt;/a&gt;), tools (specialized platforms), vectors (&lt;a href="https://www.pinecone.io/" rel="noopener noreferrer"&gt;Pinecone&lt;/a&gt;, &lt;a href="https://weaviate.io/" rel="noopener noreferrer"&gt;Weaviate&lt;/a&gt;, &lt;a href="https://qdrant.tech/" rel="noopener noreferrer"&gt;Qdrant&lt;/a&gt;), observability (&lt;a href="https://www.langchain.com/langsmith" rel="noopener noreferrer"&gt;LangSmith&lt;/a&gt;, &lt;a href="https://www.helicone.ai/" rel="noopener noreferrer"&gt;Helicone&lt;/a&gt;, &lt;a href="https://langfuse.com/" rel="noopener noreferrer"&gt;Langfuse&lt;/a&gt;). Integrate, don't rebuild.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Frameworks are still critical—but not for orchestration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're solving real problems—prompt versioning, decision auditability, ecosystem integration patterns, cost optimization—build that. But orchestration? The ecosystem has moved on. Memory, tools, context, observability are being solved by specialized platforms. Focus your innovation elsewhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Trust your language&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you feel there's a framework missing in your language of choice, step back. Modern languages—Java, Python, TypeScript, Go—are incredibly powerful. With their latest features plus AI code generation tools, you can build sophisticated agents with clean, simple code. Your language isn't the limitation—trying to wrap it in unnecessary abstractions is.&lt;/p&gt;

&lt;p&gt;The framework of the future isn't a code library you import. It's mastery of six interdependent layers: your language, your model, your dev tools, your prompts, your ecosystem integrations, and your architecture.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Maybe we don't need another agentic framework. Maybe all we need is an agent—one that creates agents in the language of your choice. An open-source one would be even better.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Stop building orchestration frameworks. Start building agents.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




</description>
      <category>ai</category>
      <category>agents</category>
      <category>java</category>
      <category>development</category>
    </item>
  </channel>
</rss>
