<?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: Jonathan Wong</title>
    <description>The latest articles on DEV Community by Jonathan Wong (@jonathan78wong).</description>
    <link>https://dev.to/jonathan78wong</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3871202%2F343e4457-180b-4eab-af90-04c5935b3567.jpg</url>
      <title>DEV Community: Jonathan Wong</title>
      <link>https://dev.to/jonathan78wong</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jonathan78wong"/>
    <language>en</language>
    <item>
      <title>Autonomous Tool Orchestration &amp; Multi-Capability Agent Systems with Amazon Bedrock AgentCore &amp; Strands SDK</title>
      <dc:creator>Jonathan Wong</dc:creator>
      <pubDate>Tue, 10 Nov 2026 17:04:39 +0000</pubDate>
      <link>https://dev.to/jonathan78wong/autonomous-tool-orchestration-multi-capability-agent-systems-with-amazon-bedrock-agentcore--5l8</link>
      <guid>https://dev.to/jonathan78wong/autonomous-tool-orchestration-multi-capability-agent-systems-with-amazon-bedrock-agentcore--5l8</guid>
      <description>&lt;p&gt;Part 4 of the series: “Engineering Next-Gen AI Agents: Reflections on the Future AWS Agent Engineer Nanodegree”&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;&lt;a href="https://blog.jonanata.com/prompt-driven-routing-managed-agent-architecture-with-amazon-bedrock-agentcore/" rel="noopener noreferrer"&gt;Part 3&lt;/a&gt;&lt;/strong&gt;, we explored prompt-driven intent routing and automated LLM-as-a-judge evaluations within a single managed harness. While single-prompt routing works well for targeted domain tasks, enterprise AI solutions demand multi-modal tool integration, cross-session long-term memory, secure code execution, and external platform connectivity.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Project 2 of the Future AWS Agent Engineer Nanodegree&lt;/strong&gt; , we built an end-to-end, autonomous &lt;strong&gt;AI Customer Support Agent&lt;/strong&gt; deployed on &lt;strong&gt;Amazon Bedrock AgentCore Runtime&lt;/strong&gt;. Built using a single &lt;strong&gt;Strands SDK &lt;code&gt;Agent&lt;/code&gt; instance&lt;/strong&gt; and the &lt;code&gt;bedrock-agentcore-starter-toolkit&lt;/code&gt;, this agent acts as an intelligent, multi-tool orchestration hub for an e-commerce platform—integrating REST APIs, vector databases, persistent memory, and isolated code sandboxes into a unified conversational runtime.&lt;/p&gt;

&lt;p&gt;The complete project source code and implementation files are available on my GitHub repository: &lt;a href="https://github.com/jonanata/ai-support-agent" rel="noopener noreferrer"&gt;https://github.com/jonanata/ai-support-agent&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Below is an architectural breakdown of how these components integrate to solve real-world customer support challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architectural Blueprint &amp;amp; Component Synergies
&lt;/h2&gt;

&lt;p&gt;Modern customer support requires far more than basic text generation. Our agent unifies five distinct AWS and Bedrock capabilities into a single conversational entry point:&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;How the Components Work Together:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AgentCore Gateway &amp;amp; Model Context Protocol (MCP):&lt;/strong&gt; Exposes backend AWS Lambda functions (order tracking, refund processing) as standardized tools via REST endpoints managed by API Gateway. The agent discovers these tools dynamically at runtime using MCP docstrings and schema definitions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bedrock Knowledge Base (RAG):&lt;/strong&gt; Connects to an S3 bucket storing unstructured catalog data (&lt;code&gt;product_catalog.txt&lt;/code&gt;). The &lt;code&gt;search_knowledge_base&lt;/code&gt; tool queries Bedrock’s vector search to retrieve grounded policy and warranty facts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AgentCore Memory:&lt;/strong&gt; Provides persistent, cross-session context. Using a custom &lt;code&gt;MemoryHook&lt;/code&gt;, user facts and preferred communication styles are automatically prepended to incoming prompts and saved back to the memory store after each turn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AgentCore Code Interpreter:&lt;/strong&gt; Runs exact numerical math—such as points redemptions, tier calculations, and tiered discounts—inside an isolated, secure Python execution sandbox to avoid LLM arithmetic errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AgentCore Browser Tool:&lt;/strong&gt; Grants the agent real-time web access to inspect external URLs when information isn’t available in internal databases. &lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Deep Dive: Implementation Highlights&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The application entry point is built using the Strands SDK and registered with Bedrock AgentCore Runtime. For example, in the main.py:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;strands&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;bedrock_agentcore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;runtime&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nc"&gt;BedrockAgentCoreApp&lt;/span&gt;

&lt;span class="c1"&gt;# 1. Register the application with Bedrock AgentCore Runtime&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BedrockAgentCoreApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 2. Define the asynchronous entry point decorated with @app.entrypoint&lt;/span&gt;
&lt;span class="nd"&gt;@app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;entrypoint&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;invoke&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;user_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# ... setup tools, hooks, and clients ...&lt;/span&gt;

    &lt;span class="c1"&gt;# 3. Instantiate the Strands SDK Agent&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;hooks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;hook&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"You are a helpful Amazon customer support AI."&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;  

    &lt;span class="c1"&gt;# 4. Invoke the agent and return the response&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Model Context Protocol (MCP) Tool Loading&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of manually mapping API calls, the agent connects directly to the AgentCore Gateway URL over MCP to discover available tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="no"&gt;GATEWAY_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://&amp;lt;alias&amp;gt;.gateway.bedrock-agentcore.us-east-1.amazonaws.com/mcp"&lt;/span&gt;  
&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MCPClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;streamable_http_client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;GATEWAY_URL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  
    &lt;span class="n"&gt;gateway_tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list_tools_sync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gateway_tools&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cross-Session Memory Hook&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To maintain continuity without cluttering prompt state, we subclassed &lt;code&gt;HookProvider&lt;/code&gt; to intercept conversation events:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;MessageAddedEvent&lt;/code&gt;:&lt;/strong&gt; Retrieves facts from namespaces (e.g., &lt;code&gt;cs_agent/{actorId}/facts&lt;/code&gt;) and prepends &lt;code&gt;Customer Context:&lt;/code&gt; to the prompt before invocation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;AfterInvocationEvent&lt;/code&gt;:&lt;/strong&gt; Writes completed conversation pairs back to AgentCore Memory asynchronously.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MemoryHook&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HookProvider&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;retrieve_customer_context&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;MessageAddedEvent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Fetches semantic facts &amp;amp; preferences from AgentCore Memory&lt;/span&gt;
        &lt;span class="c1"&gt;# Prepends memories directly into the user message frame&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;def&lt;/span&gt; &lt;span class="nf"&gt;save_support_interaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;AfterInvocationEvent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Commits (USER, ASSISTANT) message pairs to memory after turn completion&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;&lt;strong&gt;Exact Calculations with Code Interpreter&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For complex tier structures, relying on LLM text generation risks rounding errors. The &lt;code&gt;calculate_loyalty_discount&lt;/code&gt; tool executes pure Python arithmetic within &lt;code&gt;code_session(REGION)&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@tool&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;calculate_loyalty_discount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;loyalty_points&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;order_total&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;product_category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"standard"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"""
import json
earn_rates = {{"standard": 1, "device": 2, "fresh": 5}}
tier_rates = {{"Silver": 0.00, "Gold": 0.10, "Platinum": 0.15}}
# Performs exact point conversion, tier discounting, and remaining point totals...
print(json.dumps(result))
"""&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;code_session&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;REGION&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;code_client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;code_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"executeCode"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"language"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"clearContext"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"stream"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"result"&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;h2&gt;
  
  
  Setup Guide: Configuring the AWS Components
&lt;/h2&gt;

&lt;p&gt;Before deploying the agentic runtime, you must configure and tie together the underlying AWS resources, including the API Gateway, Lambda functions, Bedrock Knowledge Base, and AgentCore Memory.&lt;/p&gt;

&lt;h3&gt;
  
  
  AgentCore Gateway &amp;amp; Model Context Protocol (MCP)
&lt;/h3&gt;

&lt;h4&gt;
  
  
  How Real-Time Dynamic Tool Discovery Works
&lt;/h4&gt;

&lt;p&gt;Instead of hardcoding backend API routing or manually maintaining tool definitions in code, the AI agent relies on Model Context Protocol (MCP) capabilities built directly into the AgentCore 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftfbdbe4zn2x9p5hf2jdb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftfbdbe4zn2x9p5hf2jdb.jpg" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When the Strands SDK Agent starts up, it connects to the &lt;code&gt;GATEWAY_URL&lt;/code&gt; endpoint over MCP and performs a standard &lt;code&gt;tools/list&lt;/code&gt; handshake:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Schema Discovery:&lt;/strong&gt; AgentCore Gateway queries its registered targets (both API Gateway REST stages and standalone Lambda functions).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docstring &amp;amp; Operation Mapping:&lt;/strong&gt; For API Gateway routes, the Gateway inspects the configured OpenAPI operation names (&lt;code&gt;get_order&lt;/code&gt;, &lt;code&gt;get_customer_orders&lt;/code&gt;, &lt;code&gt;get_customer&lt;/code&gt;). For standalone Lambda functions like &lt;code&gt;refund_processor&lt;/code&gt;, it inspects the attached MCP JSON tool schema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM Tool Binding:&lt;/strong&gt; The Gateway aggregates these descriptions into structured MCP tool definitions (including typed argument schemas and descriptions) and returns them to the agent runtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Execution:&lt;/strong&gt; When a user asks &lt;em&gt;“Where is order ORD-001?”&lt;/em&gt;, the LLM evaluates the available tools, matches the user intent to &lt;code&gt;get_order&lt;/code&gt;, generates the input parameters (&lt;code&gt;{"order_id": "ORD-001"}&lt;/code&gt;), and sends a &lt;code&gt;tools/call&lt;/code&gt; request to the Gateway. The Gateway automatically routes the payload to the underlying API Gateway REST endpoint, which triggers the corresponding AWS Lambda function behind the scenes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step-by-Step Setup
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 1: Deploy the Lambda Functions&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Create two separate Lambda functions using the Python 3.12 runtime in the AWS Lambda console: &lt;code&gt;order-tracker&lt;/code&gt; and &lt;code&gt;refund-processor&lt;/code&gt; (please refer to &lt;code&gt;starter/lambda/ folder&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Attach an execution role with basic Lambda permissions for CloudWatch Logs and note each function’s ARN.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 2: Configure the API Operations&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Open API Gateway -&amp;gt; Create API -&amp;gt; REST API.&lt;/li&gt;
&lt;li&gt;Create the resources and GET methods configured as Lambda proxy integrations with the &lt;code&gt;order-tracker&lt;/code&gt; Lambda function according to the mapping table below. &lt;/li&gt;
&lt;li&gt;Deploy the REST API to a stage (such as &lt;code&gt;prod&lt;/code&gt;) and copy your REST API ID and stage name.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;| &lt;strong&gt;Method and Resource&lt;/strong&gt; | &lt;strong&gt;Operation Name&lt;/strong&gt; | &lt;strong&gt;Description&lt;/strong&gt; |&lt;br&gt;
| &lt;code&gt;GET /orders/{order_id}&lt;/code&gt; | &lt;code&gt;get_order&lt;/code&gt; | Fetch order status details |&lt;br&gt;
| &lt;code&gt;GET /customers/{customer_id}/orders&lt;/code&gt; | &lt;code&gt;get_customer_orders&lt;/code&gt; | List all orders for a customer |&lt;br&gt;
| &lt;code&gt;GET /customers/{customer_id}&lt;/code&gt; | &lt;code&gt;get_customer&lt;/code&gt; | Retrieve customer profile details |&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 3: Set up the AgentCore Gateway&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to Amazon Bedrock -&amp;gt; AgentCore -&amp;gt; Gateways and create a Gateway named &lt;code&gt;CustomerSupportGateway&lt;/code&gt; using a &lt;code&gt;NONE&lt;/code&gt; authorizer.&lt;/li&gt;
&lt;li&gt;Add the targets mapping to your infrastructure according to the mapping table below. &lt;/li&gt;
&lt;li&gt;Copy the resulting Gateway URL (ending with &lt;code&gt;/mcp&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;| &lt;strong&gt;Target Name&lt;/strong&gt; | &lt;strong&gt;Target Type&lt;/strong&gt; | &lt;strong&gt;Configuration Reference&lt;/strong&gt; |&lt;br&gt;
| &lt;code&gt;order_tracker&lt;/code&gt; | API Gateway REST API stage | Linked to your REST API, stage (&lt;code&gt;prod&lt;/code&gt;), and the three GET operations |&lt;br&gt;
| &lt;code&gt;refund_processor&lt;/code&gt; | Lambda function | Linked to the &lt;code&gt;refund-processor&lt;/code&gt; function using tool schema &lt;code&gt;starter/lambda/lambda schema&lt;/code&gt; |&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Validation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To confirm that the Gateway tools are accessible via the Model Context Protocol, run the MCP Inspector CLI tool:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx @modelcontextprotocol/inspector&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Connect to your Gateway URL and confirm that all configured tools (&lt;code&gt;get_order&lt;/code&gt;, &lt;code&gt;get_customer_orders&lt;/code&gt;, &lt;code&gt;get_customer&lt;/code&gt;, and &lt;code&gt;refund_processor&lt;/code&gt;) are listed properly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bedrock Knowledge Base (S3 Vector Search)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To provide grounded product and policy answers, we configure a Managed Knowledge Base backed by an S3 bucket.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 1:&lt;/strong&gt; Upload &lt;code&gt;starter/product_catalog.txt&lt;/code&gt; to your S3 bucket.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 2:&lt;/strong&gt; Open Amazon Bedrock AgentCore -&amp;gt; Built-in tools -&amp;gt; Knowledge Base -&amp;gt; Create Managed Knowledge Base named &lt;code&gt;CustomerSupportKB&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 3:&lt;/strong&gt; Configure the setup parameters according to the table below:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;| &lt;strong&gt;Setting Field&lt;/strong&gt; | &lt;strong&gt;Configuration Value&lt;/strong&gt; |&lt;br&gt;
| &lt;strong&gt;Knowledge Base Name&lt;/strong&gt; | &lt;code&gt;CustomerSupportKB&lt;/code&gt; |&lt;br&gt;
| &lt;strong&gt;Embedding Model Type&lt;/strong&gt; | Managed |&lt;br&gt;
| &lt;strong&gt;Service Role&lt;/strong&gt; | Let the console create a new service role |&lt;br&gt;
| &lt;strong&gt;Data Source&lt;/strong&gt; | S3 bucket containing &lt;code&gt;product_catalog.txt&lt;/code&gt; |&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 4:&lt;/strong&gt; Sync the data source and copy your generated Knowledge Base ID. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Validation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open the Bedrock console -&amp;gt; Knowledge Bases -&amp;gt; &lt;code&gt;CustomerSupportKB&lt;/code&gt; -&amp;gt; Test tab, and query: &lt;em&gt;“What is the return policy for electronics?”&lt;/em&gt; (Expected: a result detailing the 15-day return window).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AgentCore Memory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To ensure multi-turn contextual continuity and long-term user recall across separate sessions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 1:&lt;/strong&gt; In the Bedrock console, navigate to AgentCore -&amp;gt; Memory and create a resource named &lt;code&gt;CustomerSupportMemory&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 2:&lt;/strong&gt; Configure the memory strategies using the schema below:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;| &lt;strong&gt;Strategy Type&lt;/strong&gt; | &lt;strong&gt;Strategy Name&lt;/strong&gt; | &lt;strong&gt;Namespace Template&lt;/strong&gt; |&lt;br&gt;
| &lt;strong&gt;Semantic extraction&lt;/strong&gt; | &lt;code&gt;customer_facts&lt;/code&gt; | &lt;code&gt;cs_agent/{actorId}/facts&lt;/code&gt; |&lt;br&gt;
| &lt;strong&gt;User preference&lt;/strong&gt; | &lt;code&gt;customer_preferences&lt;/code&gt; | &lt;code&gt;cs_agent/{actorId}/preferences&lt;/code&gt; |&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 3:&lt;/strong&gt; Wait until the memory state becomes &lt;code&gt;ACTIVE&lt;/code&gt;, then copy the Memory ID.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Putting Configs Together
&lt;/h3&gt;

&lt;p&gt;Once provisioned, input your collected &lt;code&gt;GATEWAY_URL&lt;/code&gt;, &lt;code&gt;KB_ID&lt;/code&gt;, and &lt;code&gt;MEMORY_ID&lt;/code&gt; directly into the configuration block of &lt;code&gt;main.py&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="no"&gt;GATEWAY_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://&amp;lt;alias&amp;gt;.gateway.bedrock-agentcore.&amp;lt;region&amp;gt;.amazonaws.com/mcp"&lt;/span&gt;
&lt;span class="no"&gt;KB_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;Your-Knowledge-Base-ID&amp;gt;"&lt;/span&gt;
&lt;span class="no"&gt;REGION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"us-east-1"&lt;/span&gt;
&lt;span class="no"&gt;MEMORY_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;Your-Memory-ID&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Lifecycle Deployment Flow: Config -&amp;gt; Build -&amp;gt; Deploy -&amp;gt; Test
&lt;/h2&gt;

&lt;p&gt;Deploying an autonomous agent requires a systematic sequence using the &lt;code&gt;bedrock-agentcore-starter-toolkit&lt;/code&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh67scbopddmepvmoxu2z.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh67scbopddmepvmoxu2z.jpg" width="800" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Configure Runtime
&lt;/h3&gt;

&lt;p&gt;To initialize the deployment environment and establish metadata mapping for your AWS account, execute the configuration command via the toolkit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run agentcore configure \
  --entrypoint main.py \
  --name customer_support_agent \
  --deployment-type direct_code_deploy \
  --runtime PYTHON_3_13 \
  --disable-memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Parameter Breakdown
&lt;/h4&gt;

&lt;p&gt;| &lt;strong&gt;Flag / Option&lt;/strong&gt; | &lt;strong&gt;Purpose &amp;amp; Description&lt;/strong&gt; |&lt;br&gt;
| &lt;code&gt;--entrypoint main.py&lt;/code&gt; | Specifies the root script containing the &lt;code&gt;@app.entrypoint&lt;/code&gt; ASGI application handler (&lt;code&gt;main.py&lt;/code&gt;). |&lt;br&gt;
| &lt;code&gt;--name customer_support_agent&lt;/code&gt; | Defines the unique identifier name for the agent within the local configuration registry. |&lt;br&gt;
| &lt;code&gt;--deployment-type direct_code_deploy&lt;/code&gt; | Tells the toolkit to bundle and push raw source code directly to Amazon S3 rather than building heavy container images, accelerating iteration cycles. |&lt;br&gt;
| &lt;code&gt;--runtime PYTHON_3_13&lt;/code&gt; | Configures the managed serverless execution runtime environment version on AgentCore. |&lt;br&gt;
| &lt;code&gt;--disable-memory&lt;/code&gt; | Disables automated toolkit memory provisioning. This ensures the agent uses the custom &lt;code&gt;CustomerSupportMemory&lt;/code&gt; resource explicitly configured in &lt;code&gt;main.py&lt;/code&gt;. |&lt;/p&gt;
&lt;h4&gt;
  
  
  Anatomy &amp;amp; Impact of the Generated &lt;code&gt;.bedrock_agentcore.yaml&lt;/code&gt; File
&lt;/h4&gt;

&lt;p&gt;Running the configuration command generates a local hidden state tracking file named &lt;code&gt;.bedrock_agentcore.yaml&lt;/code&gt; in your project root. This file acts as the central control plane for all subsequent toolkit interactions.&lt;/p&gt;

&lt;p&gt;Here is how its key sections affect your deployment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Source &amp;amp; Entrypoint Mapping (&lt;code&gt;agents&lt;/code&gt; block):&lt;/strong&gt; Specifies the exact absolute path to &lt;code&gt;entrypoint&lt;/code&gt; and &lt;code&gt;source_path&lt;/code&gt;. When you run &lt;code&gt;agentcore deploy&lt;/code&gt;, the toolkit references these paths to bundle your code files and upload them to the designated S3 bucket (&lt;code&gt;s3://bedrock-agentcore-codebuild-sources-...&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Infrastructure Binding (&lt;code&gt;aws&lt;/code&gt; block):&lt;/strong&gt; Automatically records your target AWS &lt;code&gt;account&lt;/code&gt;, &lt;code&gt;region&lt;/code&gt; (&lt;code&gt;us-east-1&lt;/code&gt;), and the &lt;code&gt;execution_role&lt;/code&gt; ARN (e.g., &lt;code&gt;arn:aws:iam::783469453888:role/AmazonBedrockAgentCoreSDKRuntime-...&lt;/code&gt;). This ensures that any command you execute targets the correct AWS environment without requiring manual environment variable exports every time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime State Tracking (&lt;code&gt;bedrock_agentcore&lt;/code&gt; block):&lt;/strong&gt; Once deployed, this section stores the generated remote resource identifiers, including the &lt;code&gt;agent_id&lt;/code&gt; (e.g., &lt;code&gt;customer_support_agent-nUpbKY5Ff2&lt;/code&gt;) and the full &lt;code&gt;agent_arn&lt;/code&gt;. Subsequent commands like &lt;code&gt;agentcore invoke&lt;/code&gt; read these identifiers to route payloads directly to your active remote agent runtime.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  2. Deployment
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run agentcore deploy

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Deployment Mechanics &amp;amp; Runtime Initialization
&lt;/h4&gt;

&lt;p&gt;When you execute &lt;code&gt;agentcore deploy&lt;/code&gt;, the toolkit and Amazon Bedrock AgentCore execute a structured provisioning workflow behind the scenes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Source Bundling &amp;amp; S3 Upload:&lt;/strong&gt; The toolkit bundles your local project directory (including &lt;code&gt;main.py&lt;/code&gt; and local dependencies) and pushes the archive up to the designated S3 source bucket specified in your &lt;code&gt;.bedrock_agentcore.yaml&lt;/code&gt; configuration (&lt;code&gt;s3://bedrock-agentcore-codebuild-sources-...&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Container Provisioning &amp;amp; Runtime Activation:&lt;/strong&gt; Amazon Bedrock AgentCore reads the deployment specification (&lt;code&gt;PYTHON_3_13&lt;/code&gt;, &lt;code&gt;direct_code_deploy&lt;/code&gt;, platform &lt;code&gt;linux/arm64&lt;/code&gt;) and provisions a managed serverless execution container instance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Warm-Up &amp;amp; ASGI Bootstrapping:&lt;/strong&gt; Inside the remote container, AgentCore pulls your uploaded source files from S3 and mounts the execution environment. It spins up the ASGI server registered by your &lt;code&gt;BedrockAgentCoreApp&lt;/code&gt; instance (&lt;code&gt;app = BedrockAgentCoreApp()&lt;/code&gt;) from &lt;code&gt;main.py&lt;/code&gt;. Once the ASGI application binds to the runtime port and completes its internal initialization, the deployed agent (referenced by its unique &lt;code&gt;agent_id&lt;/code&gt;) goes into an &lt;strong&gt;Active&lt;/strong&gt; state, ready to receive incoming invocations and handle asynchronous event loops.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  3. Configure IAM Permissions
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run setup_permissions.py

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This script reads &lt;code&gt;.bedrock_agentcore.yaml&lt;/code&gt; to locate your execution role name and runtime ID. It uses this mapping to safely attach inline IAM policies granting your deployed agent access to Bedrock Knowledge Bases, AgentCore Memory namespaces, and the Browser session pool.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Integration Testing &amp;amp; Real-World Validation
&lt;/h3&gt;

&lt;p&gt;To verify autonomous execution across subsystems, we executed structured test invocations against the live runtime endpoint:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Test 1: Backend Integration (MCP &amp;amp; Lambda)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;agentcore invoke '{"prompt": "Can you track order ORD-001?", "customer_id": "CUST-123", "session_id": "t1"}'&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation:&lt;/strong&gt; Agent routes request via AgentCore Gateway to &lt;code&gt;order-tracker&lt;/code&gt; Lambda, returning status, carrier (UPS), tracking number (&lt;code&gt;TRK987654321&lt;/code&gt;), and estimated delivery.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test 2: Cross-Session Long-Term Memory Recall&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Session A:&lt;/strong&gt; &lt;code&gt;agentcore invoke '{"prompt": "Hi, I am Jane. I prefer concise responses.", "customer_id": "CUST-123", "session_id": "s-A"}'&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;(Wait 30s for background memory extraction)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session B (New Session):&lt;/strong&gt; &lt;code&gt;agentcore invoke '{"prompt": "Do you remember my name and communication preference?", "customer_id": "CUST-123", "session_id": "s-B"}'&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation:&lt;/strong&gt; Agent successfully recalls “Jane” and formats its response concisely without needing prior prompt context in session &lt;code&gt;s-B&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test 3: Knowledge Base RAG Retrieval&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;agentcore invoke '{"prompt": "What are the benefits of the Platinum loyalty tier?", "customer_id": "CUST-123", "session_id": "t3"}'&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation:&lt;/strong&gt; Retrieves grounded facts from S3 vector index (free same-day shipping, 15% discount, priority support).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test 4: Sandbox Code Execution&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Command:&lt;/strong&gt; &lt;code&gt;agentcore invoke '{"prompt": "I am a Gold member with 4250 points. Calculate my discount on a $150 standard order.", "customer_id": "CUST-123", "session_id": "t5"}'&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation:&lt;/strong&gt; Executes sandbox Python script, correctly applying 4,000 redeemed points ($40) + 10% Gold tier discount, yielding the exact mathematical total and remaining point balance.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Business Value &amp;amp; Engineering Takeaways
&lt;/h2&gt;

&lt;p&gt;Integrating multi-agent tools directly into enterprise workflows generates distinct operational metrics:&lt;/p&gt;

&lt;p&gt;| &lt;strong&gt;Technical Component&lt;/strong&gt; | &lt;strong&gt;Business Problem Solved&lt;/strong&gt; | &lt;strong&gt;Business ROI Impact&lt;/strong&gt; |&lt;br&gt;
| &lt;strong&gt;AgentCore Gateway (MCP)&lt;/strong&gt; | Siloed legacy APIs requiring custom integration code | Standardizes backend integration; reduces API connector dev time by ~60%. |&lt;br&gt;
| &lt;strong&gt;AgentCore Memory&lt;/strong&gt; | Repetitive user context switching &amp;amp; disjointed support tickets | Increases First Contact Resolution (FCR) by remembering customer facts across channels. |&lt;br&gt;
| &lt;strong&gt;Code Interpreter&lt;/strong&gt; | Mathematical hallucinations in financial/discount calculations | Eliminates billing errors with 100% deterministic calculation precision. |&lt;br&gt;
| &lt;strong&gt;Bedrock Knowledge Base&lt;/strong&gt; | Hallucinated support policies &amp;amp; outdated documentation | Grounded RAG responses ensure zero compliance/policy drift. |&lt;/p&gt;


&lt;h2&gt;
  
  
  Advanced Architecture Extension: Production Integration &amp;amp; Runtime Trade-Offs
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Note: The following integration and architectural analysis go beyond the baseline requirements of the original project spec, exploring production-ready deployment patterns for enterprise environments.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finding Your &lt;code&gt;AGENT_RUNTIME_ARN&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once your agent is deployed via the starter toolkit, you can retrieve its unique Amazon Resource Name (ARN) either through the AWS CLI or the management console:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Via AWS CLI:&lt;/strong&gt;
&lt;code&gt;aws bedrock-agentcore list-agent-runtimes --region us-east-1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Via AWS Console:&lt;/strong&gt; Navigate to &lt;strong&gt;Amazon Bedrock&lt;/strong&gt; -&amp;gt; &lt;strong&gt;AgentCore&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Runtimes&lt;/strong&gt; , select your deployed agent (&lt;code&gt;customer_support_agent&lt;/code&gt;), and copy the &lt;strong&gt;Agent Runtime ARN&lt;/strong&gt; from the overview panel. It follows the format:
&lt;code&gt;arn:aws:bedrock-agentcore:&amp;lt;region&amp;gt;:&amp;lt;account-id&amp;gt;:runtime/&amp;lt;agent-name&amp;gt;-&amp;lt;hash&amp;gt;&lt;/code&gt;.
You can also find it locally in your project’s &lt;code&gt;.bedrock_agentcore.yaml&lt;/code&gt; configuration file.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Production Integration: Invoking AgentCore from a FastAPI Backend&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Instead of executing your agent solely through local CLI commands, you can wrap it inside a production microservice using &lt;strong&gt;FastAPI&lt;/strong&gt; and the AWS SDK (&lt;code&gt;boto3&lt;/code&gt;). Your backend acts as an API gateway that securely proxies requests to the managed AgentCore container runtime:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastapi&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nc"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;HTTPException&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pydantic&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nc"&gt;BaseModel&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Customer Support API Gateway"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Initialize the Bedrock AgentCore boto3 client&lt;/span&gt;
&lt;span class="n"&gt;bedrock_agentcore_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"bedrock-agentcore"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;region_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"us-east-1"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="no"&gt;AGENT_RUNTIME_ARN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"arn:aws:bedrock-agentcore:us-east-1:123456789012:runtime/customer_support_agent-nUpbKY5Ff2"&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ChatRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;session_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;str&lt;/span&gt; &lt;span class="c1"&gt;# Requires valid session tracking format&lt;/span&gt;

&lt;span class="nd"&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="s2"&gt;"/api/v1/support/chat"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;invoke_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;ChatRequest&lt;/span&gt;&lt;span class="p"&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="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;"customer_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;"session_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;session_id&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;# Programmatically invoke the remote AgentCore runtime&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bedrock_agentcore_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke_agent_runtime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;agentRuntimeArn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;AGENT_RUNTIME_ARN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;runtimeSessionId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;session_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;response_body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&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="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"utf-8"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response_body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;HTTPException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status_code&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="n"&gt;detail&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kt"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&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;h4&gt;
  
  
  &lt;strong&gt;Architectural Decision: Why Bedrock AgentCore Runtime over AWS Lambda?&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;While an AWS Lambda function (even utilizing 10GB container images) can technically host agent logic and the Strands SDK, it introduces severe architectural friction for autonomous agentic workflows.&lt;/p&gt;

&lt;p&gt;| &lt;strong&gt;Evaluation Dimension&lt;/strong&gt; | &lt;strong&gt;AWS Lambda (Container / Zip)&lt;/strong&gt; | &lt;strong&gt;Amazon Bedrock AgentCore Runtime&lt;/strong&gt; | &lt;strong&gt;Architectural Impact&lt;/strong&gt; |&lt;br&gt;
| &lt;strong&gt;Execution Timeout&lt;/strong&gt; | Hard-capped at 15 minutes (29 seconds for synchronous API Gateway). | Built for long-running, persistent agent sessions. | Agentic loops requiring multiple reasoning steps or human-in-the-loop pauses can time out prematurely on Lambda. |&lt;br&gt;
| &lt;strong&gt;State &amp;amp; Memory&lt;/strong&gt; | Fully stateless; requires manual boilerplate code to persist data across turns (e.g., DynamoDB). | Native, built-in support for memory hooks, semantic fact extraction, and cross-session management. | AgentCore eliminates custom CRUD boilerplate for conversation state and user preference tracking. |&lt;br&gt;
| &lt;strong&gt;Cost &amp;amp; Billing Model&lt;/strong&gt; | Billed for the &lt;strong&gt;entire duration&lt;/strong&gt; the function execution runs. | Optimized for agent workloads; billed based on active execution. | AI agents spend significant time idling while waiting for LLM tokens or external API tools. Lambda bills you for that wait time; AgentCore does not. |&lt;br&gt;
| &lt;strong&gt;MicroVM Isolation&lt;/strong&gt; | Shared multi-tenant execution environment per container instance. | Isolated microVM execution environment per runtime container. | Enhanced security segregation when executing dynamic tool calls or untrusted code snippets. |&lt;/p&gt;




&lt;h2&gt;
  
  
  What’s Next
&lt;/h2&gt;

&lt;p&gt;In Part 5, we will build a production-grade multi-agent customer support system using Amazon Bedrock AgentCore and the Strands Agents SDK.&lt;/p&gt;

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




&lt;p&gt;&lt;strong&gt;About the Author&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Jonathan Wong&lt;/em&gt; is an IT and AI consultant with 20+ years of experience leading engineering teams across Vancouver and Hong Kong. He specializes in modernizing legacy platforms, cloud security, and building AI-ready systems for startups and large enterprises while advising leadership on using strategic technology to drive business growth.&lt;br&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://www.linkedin.com/in/jonanata/" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://blog.jonanata.com/autonomous-tool-orchestration-multi-capability-agent-systems-with-amazon-bedrock-agentcore-strands-sdk/" rel="noopener noreferrer"&gt;Autonomous Tool Orchestration &amp;amp; Multi-Capability Agent Systems with Amazon Bedrock AgentCore &amp;amp; Strands SDK&lt;/a&gt; appeared first on &lt;a href="https://blog.jonanata.com" rel="noopener noreferrer"&gt;Behind the Build&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>aws</category>
      <category>certification</category>
      <category>agentcore</category>
    </item>
    <item>
      <title>Prompt-Driven Routing &amp; Managed Agent Architecture with Amazon Bedrock AgentCore</title>
      <dc:creator>Jonathan Wong</dc:creator>
      <pubDate>Tue, 03 Nov 2026 20:12:11 +0000</pubDate>
      <link>https://dev.to/jonathan78wong/prompt-driven-routing-managed-agent-architecture-with-amazon-bedrock-agentcore-5ck7</link>
      <guid>https://dev.to/jonathan78wong/prompt-driven-routing-managed-agent-architecture-with-amazon-bedrock-agentcore-5ck7</guid>
      <description>&lt;p&gt;Part 3 of the series: “Engineering Next-Gen AI Agents: Reflections on the Future AWS Agent Engineer Nanodegree”&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;&lt;a href="https://blog.jonanata.com/foundations-rapid-prototyping-inside-the-aws-ai-practitioner-challenge/" rel="noopener noreferrer"&gt;Part 2&lt;/a&gt;&lt;/strong&gt; of this series, we covered the foundational phase—the &lt;strong&gt;AWS AI Practitioner Challenge&lt;/strong&gt; and rapid prototyping using AWS PartyRock. While low-code sandboxes are great for early proof-of-concepts, enterprise production systems require strict control, robust state management, and rigorous evaluation frameworks.&lt;/p&gt;

&lt;p&gt;Crossing into &lt;strong&gt;Project 1 of the Future AWS Agent Engineer Nanodegree&lt;/strong&gt; , the engineering stakes were raised significantly. The objective was to build an enterprise-grade &lt;strong&gt;customer support chatbot&lt;/strong&gt; for an online shop using the &lt;strong&gt;Amazon Bedrock AgentCore&lt;/strong&gt; managed harness.&lt;/p&gt;

&lt;p&gt;Unlike traditional rule-based chatbots that rely on explicit condition nodes, if-else logic, or hardcoded classification pipelines, this application routes incoming customer intents &lt;strong&gt;entirely through system prompt engineering&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here is a deep-dive breakdown of how the architecture was built, tested, and systematically evaluated using automated LLM-as-a-judge metrics.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Architectural Overview &amp;amp; System Flow
&lt;/h3&gt;

&lt;p&gt;The pre-provisioned infrastructure leverages a cloud-native serverless architecture consisting of the &lt;strong&gt;AgentCore Gateway&lt;/strong&gt; , &lt;strong&gt;AWS Lambda&lt;/strong&gt; , &lt;strong&gt;Amazon DynamoDB&lt;/strong&gt; , and &lt;strong&gt;Amazon S3&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Core Architectural Components&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Bedrock AgentCore Gateway:&lt;/strong&gt; Acts as the managed entry point and orchestration harness for the LLM runtime. It manages session context, wraps tool definitions, and enforces system prompt boundaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Lambda &amp;amp; Simple RAG:&lt;/strong&gt; The backend logic executes inside AWS Lambda. The function injects a localized &lt;code&gt;FAQ.json&lt;/code&gt; document into the prompt payload to serve as a lightweight Retrieval-Augmented Generation (RAG) knowledge base.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon DynamoDB:&lt;/strong&gt; Serves as the high-throughput, low-latency operational data store for filed bug reports.

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Why DynamoDB over MySQL?&lt;/em&gt; For semi-structured operational logs like bug reports—where individual records may vary in metadata fields (e.g., varying browser flags or client environments)—DynamoDB’s schemaless document model offers instant, key-value writes without the schema migration overhead or connection pool management required by traditional relational databases like MySQL.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  High-Level End-to-End Workflow
&lt;/h3&gt;

&lt;p&gt;Before diving into execution details, the project lifecycle follows a strict three-stage engineering loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build Phase:&lt;/strong&gt; Configuring the core system prompt, integrating the Lambda action groups, and setting up the DynamoDB persistence layer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test Phase:&lt;/strong&gt; Deploying test harness suites (&lt;code&gt;harness-tests.json&lt;/code&gt;) to validate intent classification and tool execution against edge cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluation Phase:&lt;/strong&gt; Running automated LLM-as-a-judge evaluations using Amazon Nova Pro to score generation correctness.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To understand how user inputs move through the runtime system, the architectural flow is mapped below:&lt;/p&gt;

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

&lt;h3&gt;
  
  
  2. Infrastructure Sanity Check: Testing Lambda &amp;amp; DynamoDB
&lt;/h3&gt;

&lt;p&gt;Before crafting the core prompt, we performed an isolated infrastructure verification test using the AWS Lambda console to ensure the backend toolchain and database persistence were functioning.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Lambda Test Event Payload&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;We triggered the underlying bug-reporting Lambda function using a structured JSON test event containing the three required bug metadata fields:&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;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The checkout page crashes when I click the Pay button"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"stepsToReproduce"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1. Add an item to the cart. 2. Go to checkout. 3. Click Pay."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"environment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Chrome 120 on macOS Sonoma"&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;h4&gt;
  
  
  &lt;strong&gt;Verification via DynamoDB Console&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;A successful execution returns a JSON payload containing a newly generated &lt;code&gt;ticketId&lt;/code&gt; and a &lt;code&gt;"status": "OPEN"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To verify data persistence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;Amazon DynamoDB Console&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Explore items&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;code&gt;bug-report-tool-stack-bug-reports&lt;/code&gt; table.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Run&lt;/strong&gt; to execute a table scan.&lt;/li&gt;
&lt;li&gt;The newly created item appears with its unique &lt;code&gt;ticketId&lt;/code&gt;, timestamp, description, environment details, and initial &lt;code&gt;OPEN&lt;/code&gt; state.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;h3&gt;
  
  
  3. Core Mission: Prompt-Driven System Routing (&lt;code&gt;system_prompt.txt&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;The core challenge of this project was enforcing strict routing behavior &lt;strong&gt;without hardcoded conditional logic&lt;/strong&gt;. The system prompt acts as both a state machine and a guardrail controller.&lt;/p&gt;

&lt;p&gt;Below is the full production system prompt (&lt;code&gt;system_prompt.txt&lt;/code&gt;) engineered for the application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are the customer support assistant for an online shop.

For every customer message, you must first classify it into exactly ONE of the following three categories.  
Make the classification BEFORE doing anything else.

------------------------------------------------------------
1. BUG REPORT
------------------------------------------------------------
The customer says something on the website or app is broken, malfunctioning, or not working as expected.

You MUST collect all three required fields:

1. description — Description of the bug, in the customer’s own words  
2. stepsToReproduce — Steps someone should follow to reproduce the issue  
3. environment — Customer’s environment (browser, OS, device)

Rules:
- Customers rarely provide all three up front.
- If any item is missing, ask for EXACTLY ONE missing item at a time.
- Do NOT call the create_bug_report tool until ALL THREE fields are collected.
- Once all three are gathered, call the tool with:
    - description
    - stepsToReproduce
    - environment
- After the tool succeeds, it returns a ticketId.
  You MUST tell the customer their ticket ID and inform them the engineering team will follow up.

------------------------------------------------------------
2. PLATFORM QUESTION
------------------------------------------------------------
Questions about orders, shipping, returns, refunds, payments, products, accounts, or privacy.

Rules:
- Answer ONLY using the FAQ document provided.
- NEVER invent policies.
- If the FAQ does NOT contain the answer, reclassify the message as Category 3.

------------------------------------------------------------
3. ANYTHING ELSE
------------------------------------------------------------
Any message that is NOT a bug report and NOT answerable from the FAQ.

Rules:
- Politely explain you cannot help with that here.
- Refer the customer to the human support line at 1‑800‑555‑0199 (Mon–Fri).

------------------------------------------------------------
GENERAL RULES
------------------------------------------------------------
- Always be polite and concise.
- Never fabricate information.
- Routing is a STRICT classification problem: pick ONE category only.
- Category definitions must be applied crisply.
- Follow the bug‑report checklist exactly and ask for missing items ONE AT A TIME.

--- FAQ document ---
{{FAQ}}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;Key Design Highlights of the System Prompt:&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Explicit Intent Ordering:&lt;/strong&gt; Mandates that the LLM performs internal classification &lt;em&gt;before&lt;/em&gt; choosing an output strategy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single-Question Collection Strategy:&lt;/strong&gt; Prevents the LLM from overwhelming users by enforcing a strict rule: &lt;em&gt;“ask for EXACTLY ONE missing item at a time”&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict Fallback Mechanisms:&lt;/strong&gt; Eliminates hallucinated store policies by forcing any unanswerable platform question to fall back to Category 3 (Human Support Routing).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Constructing the Test Harness (&lt;code&gt;harness-tests.json&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;To evaluate the agent’s behavior across edge cases, we constructed a test suite in &lt;code&gt;harness-tests.json&lt;/code&gt;. Each test item defines an &lt;code&gt;id&lt;/code&gt;, a customer &lt;code&gt;prompt&lt;/code&gt;, and an &lt;code&gt;expected&lt;/code&gt; intent description that serves as the ground-truth reference for evaluation:&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;"tests"&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="nl"&gt;"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;"t1_bug_report_full"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The checkout page crashes when I click the Pay button. Steps: 1. Add an item to the cart. 2. Go to checkout. 3. Click Pay. Environment: Chrome 120 on macOS Sonoma."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"expected"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"create a bug report"&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="nl"&gt;"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;"t2_bug_report_missing_environment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"I can't upload my profile picture; it shows an error. Steps: Go to account settings and try uploading any image. Environment: not provided."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"expected"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ask for missing environment"&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="nl"&gt;"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;"t3_platform_question_shipping"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"How long does shipping take to New York?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"expected"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"answer from FAQ"&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="nl"&gt;"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;"t4_platform_question_refund"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Can I return an item if I lost the receipt?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"expected"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"answer from FAQ"&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="nl"&gt;"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;"t5_anything_else_general_chat"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Can you recommend a good laptop for gaming?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"expected"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"refer to human support line"&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="nl"&gt;"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;"t6_anything_else_not_supported"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Can you delete my account permanently?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"expected"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"refer to human support line"&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;Executing the test suite pairs the model’s actual response against the reference response. For instance, running a test on an incomplete bug report yields:&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;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"the app crashes every time I try to upload a file..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"referenceResponse"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Acknowledges the issue and asks for steps to reproduce..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"modelResponses"&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="nl"&gt;"response"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"I'm sorry to hear about the crash. Could you tell me..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"modelIdentifier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-support-chatbot"&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;h3&gt;
  
  
  5. Automated Evaluation via Amazon Bedrock Evaluations
&lt;/h3&gt;

&lt;p&gt;Relying on manual spot-checks is insufficient for enterprise deployment. We automated quality assessment using &lt;strong&gt;Amazon Bedrock Model Evaluation Jobs&lt;/strong&gt; , using &lt;strong&gt;Amazon Nova Pro (&lt;code&gt;amazon.nova-pro-v1:0&lt;/code&gt;)&lt;/strong&gt; as an LLM-as-a-Judge evaluator model.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;AWS CLI Evaluation Job Command Breakdown&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The evaluation command utilizes a set of robust configuration blocks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--evaluation-config&lt;/code&gt;: Defines the automated evaluation parameters. It points to a dataset configuration located on S3 (&lt;code&gt;output_eval_dataset.jsonl&lt;/code&gt;) under a general task type, specifies the evaluation metric (&lt;code&gt;Builtin.Correctness&lt;/code&gt;), and designates &lt;strong&gt;Amazon Nova Pro&lt;/strong&gt; (&lt;code&gt;amazon.nova-pro-v1:0&lt;/code&gt;) as the independent judge model via &lt;code&gt;evaluatorModelConfig&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--inference-config&lt;/code&gt;: Points to the precomputed inference output (&lt;code&gt;my-support-chatbot&lt;/code&gt;) generated by our test harness runs.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--output-data-config&lt;/code&gt;: Specifies the destination S3 bucket path where evaluation reports and logs will be written.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws bedrock create-evaluation-job &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--job-name&lt;/span&gt; support-chatbot-eval-run-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--role-arn&lt;/span&gt; &amp;lt;BedrockEvalRoleArn&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--evaluation-config&lt;/span&gt; &lt;span class="s1"&gt;'{
    "automated": {
      "datasetMetricConfigs": [{
        "taskType": "General",
        "dataset": {
          "name": "support-chatbot-eval-dataset",
          "datasetLocation": {
            "s3Uri": "s3://&amp;lt;EvalDatasetBucketName&amp;gt;/output_eval_dataset.jsonl"
          }
        },
        "metricNames": ["Builtin.Correctness"]
      }],
      "evaluatorModelConfig": {
        "bedrockEvaluatorModels": [{
          "modelIdentifier": "amazon.nova-pro-v1:0"
        }]
      }
    }
  }'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--inference-config&lt;/span&gt; &lt;span class="s1"&gt;'{
    "models": [{
      "precomputedInferenceSource": {
        "inferenceSourceIdentifier": "my-support-chatbot"
      }
    }]
  }'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output-data-config&lt;/span&gt; &lt;span class="s1"&gt;'{"s3Uri": "s3://&amp;lt;EvalDatasetBucketName&amp;gt;/results/"}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;Analyzing Results in the Console&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Once the job completes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Amazon Bedrock Console&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Assess&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Evaluations&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;&lt;code&gt;support-chatbot-eval-run-1&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As shown in the evaluation report dashboard&lt;sup&gt;&lt;/sup&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Metrics Summary:&lt;/strong&gt; The system achieved a normalized &lt;strong&gt;Correctness score of 1.00&lt;/strong&gt; across all test prompts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generation Metrics Breakdown:&lt;/strong&gt; The distribution histogram shows that 100% of the prompts (6 out of 6) hit the maximum score of 1.0, confirming that prompt-driven routing, FAQ retrieval, missing item collection, and fallback handoffs operated with 100% precision.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4wmjkh992xbh21rpmpdi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4wmjkh992xbh21rpmpdi.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Takeaways for Tech Leaders
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;System Prompts ARE Business Logic:&lt;/strong&gt; Deterministic routing doesn’t always require rigid state machines. Well-structured prompt guardrails can handle multi-category intent routing gracefully.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluation-Driven Development:&lt;/strong&gt; Treating LLM testing with the same discipline as traditional CI/CD unit testing—using precomputed test suites and automated LLM-as-a-judge scoring—is essential before deploying AI agents to production.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In &lt;strong&gt;Part 4&lt;/strong&gt; , we will step beyond single-agent routing into &lt;strong&gt;AI Support Agent&lt;/strong&gt; using &lt;strong&gt;Amazon Bedrock AgentCore&lt;/strong&gt; and the &lt;strong&gt;Strands SDK&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/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqhsdnab47ge3mxc6z4x7.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqhsdnab47ge3mxc6z4x7.webp" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://blog.jonanata.com/prompt-driven-routing-managed-agent-architecture-with-amazon-bedrock-agentcore/" rel="noopener noreferrer"&gt;Prompt-Driven Routing &amp;amp; Managed Agent Architecture with Amazon Bedrock AgentCore&lt;/a&gt; appeared first on &lt;a href="https://blog.jonanata.com" rel="noopener noreferrer"&gt;Behind the Build&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>aws</category>
      <category>certification</category>
      <category>agentcore</category>
    </item>
    <item>
      <title>Foundations &amp; Rapid Prototyping: Inside the AWS AI Practitioner Challenge</title>
      <dc:creator>Jonathan Wong</dc:creator>
      <pubDate>Tue, 27 Oct 2026 00:12:24 +0000</pubDate>
      <link>https://dev.to/jonathan78wong/foundations-rapid-prototyping-inside-the-aws-ai-practitioner-challenge-55if</link>
      <guid>https://dev.to/jonathan78wong/foundations-rapid-prototyping-inside-the-aws-ai-practitioner-challenge-55if</guid>
      <description>&lt;p&gt;Part 2 of the series: “Engineering Next-Gen AI Agents: Reflections on the Future AWS Agent Engineer Nanodegree”&lt;/p&gt;

&lt;p&gt;In my &lt;a href="https://blog.jonanata.com/engineering-next-gen-ai-agents-reflections-on-the-aws-udacity-nanodegree/" rel="noopener noreferrer"&gt;previous post&lt;/a&gt;, I shared the milestone of completing the &lt;strong&gt;Future AWS Agent Engineer Nanodegree&lt;/strong&gt; , sponsored by the &lt;strong&gt;AWS AI &amp;amp; ML Scholars Program&lt;/strong&gt;. But before diving into complex multi-agent architectures and production-grade tool orchestration, every scholar had to build a rock-solid foundation.&lt;/p&gt;

&lt;p&gt;The program was structured into two distinct parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The Challenge Phase (AWS AI Practitioner Challenge)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Nanodegree Phase (Future AWS Agent Engineer Track)&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this installment, we look at how the journey began, starting with foundational AI learning and rapid prototyping.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: The Challenge Phase &amp;amp; AWS AI Practitioner Learning Plan
&lt;/h3&gt;

&lt;p&gt;The gateway into the scholarship was the &lt;strong&gt;AWS AI Practitioner Challenge&lt;/strong&gt;. Rather than diving straight into raw code and backend API configuration, the program kicked off with structured, self-paced training mapped directly to the &lt;strong&gt;AWS AI Practitioner Learning Plan&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For experienced engineers and technology leaders, this phase served as an essential baseline refresh on how AWS approaches cloud-native artificial intelligence. It covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The core spectrum of foundational models available on AWS.&lt;/li&gt;
&lt;li&gt;Responsible AI frameworks, security, and governance in cloud environments.&lt;/li&gt;
&lt;li&gt;The foundational mechanics of Retrieval-Augmented Generation (RAG) and prompt engineering before scaling up to autonomous agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: From Theory to Application with AWS PartyRock
&lt;/h3&gt;

&lt;p&gt;To graduate from the Challenge Phase and secure a spot in the selective Nanodegree track, participants had to transition immediately from theory to execution by building functional generative AI applications.&lt;/p&gt;

&lt;p&gt;The tool of choice for this rapid prototyping phase was &lt;strong&gt;AWS PartyRock&lt;/strong&gt; (powered by Amazon Bedrock)—a generative AI app-building playground that allows creators to rapidly build working functional prototypes without getting bogged down in boilerplate code.&lt;/p&gt;

&lt;p&gt;Building in PartyRock wasn’t just about playing with prompts; it forced a shift in mindset regarding &lt;strong&gt;application composition&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do you structure multi-step prompt chains to guide an LLM toward a specific output?&lt;/li&gt;
&lt;li&gt;How do you combine multiple models and widgets to create a cohesive user experience?&lt;/li&gt;
&lt;li&gt;How can rapid cloud prototyping validate a product concept before writing a single line of production code?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I documented the deep-dive architectural review and lessons learned from building those initial PartyRock applications in my previous write-up:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://blog.jonanata.com/what-we-learned-from-building-two-partyrock-apps/" rel="noopener noreferrer"&gt;Read the full breakdown: What We Learned from Building Two PartyRock Apps&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Crossing the Threshold: Into the Nanodegree
&lt;/h3&gt;

&lt;p&gt;Successfully completing the PartyRock build projects marked the finish line of the Challenge Phase—and the ticket into the highly competitive &lt;strong&gt;Future AWS Agent Engineer Nanodegree&lt;/strong&gt; program (reserved for top performers in the cohort).&lt;/p&gt;

&lt;p&gt;Clearing this initial hurdle proved that rapid prototyping and cloud-based AI literacy were fully locked in. But it also set the stage for a massive leap forward: moving away from single-window prompt interfaces and static playground apps into &lt;strong&gt;stateful, tool-wielding, autonomous agent engineering&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s Next in the Series?
&lt;/h3&gt;

&lt;p&gt;Now that the foundational baseline was established, the real engineering work began.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;next article&lt;/strong&gt; , we will cross into Part 2 of the program, exploring &lt;strong&gt;Amazon Bedrock AgentCore&lt;/strong&gt; , building a customer support chatbot with active API action groups, and designing an AI support agent equipped with real memory and tool execution.&lt;/p&gt;

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

&lt;p&gt;The post &lt;a href="https://blog.jonanata.com/foundations-rapid-prototyping-inside-the-aws-ai-practitioner-challenge/" rel="noopener noreferrer"&gt;Foundations &amp;amp; Rapid Prototyping: Inside the AWS AI Practitioner Challenge&lt;/a&gt; appeared first on &lt;a href="https://blog.jonanata.com" rel="noopener noreferrer"&gt;Behind the Build&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>aws</category>
      <category>certification</category>
    </item>
    <item>
      <title>Engineering Next-Gen AI Agents: Reflections on the Future AWS Agent Engineer Nanodegree</title>
      <dc:creator>Jonathan Wong</dc:creator>
      <pubDate>Sun, 25 Oct 2026 03:22:49 +0000</pubDate>
      <link>https://dev.to/jonathan78wong/engineering-next-gen-ai-agents-reflections-on-the-aws-udacity-nanodegree-25el</link>
      <guid>https://dev.to/jonathan78wong/engineering-next-gen-ai-agents-reflections-on-the-aws-udacity-nanodegree-25el</guid>
      <description>&lt;p&gt;I’m excited to share a milestone. I’ve completed the Future AWS Agent Engineer Nanodegree, sponsored by the AWS AI &amp;amp; ML Scholars Program.&lt;/p&gt;

&lt;p&gt;This journey took me through the AWS AI Practitioner Challenge, PartyRock builds, and three hands‑on AgentCore projects, including a customer support chatbot, an AI support agent, and a multi‑agent e‑commerce RAG system. Real agents. Real Bedrock tools. Real engineering.&lt;/p&gt;

&lt;p&gt;Thank you to &lt;strong&gt;Amazon Web Services (AWS)&lt;/strong&gt; and &lt;strong&gt;Udacity&lt;/strong&gt; for the opportunity to dive deep into next‑generation AI agent development.&lt;/p&gt;

&lt;p&gt;Over the next few weeks, I’ll be releasing a short article series documenting my AWS AI exploration journey, breaking down the architecture, key technical lessons, and practical takeaways from each project.&lt;/p&gt;

&lt;p&gt;AWS AI &amp;amp; ML Scholars: &lt;a href="https://www.udacity.com/scholarships/aws-ai-ml-scholars" rel="noopener noreferrer"&gt;AWS AI &amp;amp; ML Scholars&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbfx9v6wq3yhrsphjtrhq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbfx9v6wq3yhrsphjtrhq.png" width="800" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://blog.jonanata.com/engineering-next-gen-ai-agents-reflections-on-the-aws-udacity-nanodegree/" rel="noopener noreferrer"&gt;Engineering Next-Gen AI Agents: Reflections on the AWS &amp;amp; Udacity Nanodegree&lt;/a&gt; appeared first on &lt;a href="https://blog.jonanata.com" rel="noopener noreferrer"&gt;Behind the Build&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>aws</category>
      <category>certification</category>
      <category>learning</category>
    </item>
    <item>
      <title>Level Up Your AI Skills with Microsoft AI Skills Fest 2026: Ends June 12!</title>
      <dc:creator>Jonathan Wong</dc:creator>
      <pubDate>Wed, 10 Jun 2026 17:11:47 +0000</pubDate>
      <link>https://dev.to/jonathan78wong/level-up-your-ai-skills-with-microsoft-ai-skills-fest-2026-ends-june-12-357</link>
      <guid>https://dev.to/jonathan78wong/level-up-your-ai-skills-with-microsoft-ai-skills-fest-2026-ends-june-12-357</guid>
      <description>&lt;p&gt;If you’re looking to strengthen your AI capabilities — whether in AI agent development or AI business leadership — the Microsoft AI Skills Fest is the perfect place to start.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The event brings together everything you need to grow your AI career:&lt;/li&gt;
&lt;li&gt;Curated Learning Playlists&lt;/li&gt;
&lt;li&gt;Explore structured Playlists such as AI agent development and AI business leadership. Each path gives you focused, practical content to build real skills.&lt;/li&gt;
&lt;li&gt;Learn New Knowledge at Your Own Pace&lt;/li&gt;
&lt;li&gt;Every Playlist includes high‑quality modules so you can learn new AI knowledge and stay ahead in this fast‑moving field.&lt;/li&gt;
&lt;li&gt;LinkedIn Live Sessions + Playback&lt;/li&gt;
&lt;li&gt;Join &lt;a href="https://www.linkedin.com/company/microsoftlearn/" rel="noopener noreferrer"&gt;&lt;strong&gt;Microsoft Learn&lt;/strong&gt;&lt;/a&gt; expert‑led LinkedIn Live sessions covering technical deep dives, business strategy, and certification prep. If you miss a session, simply watch the LinkedIn Live playback anytime.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A Complete One‑Stop Learning Journey&lt;br&gt;&lt;br&gt;
Microsoft AI Skills Fest gives you a fully guided pathway from learning to certification — all in one place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose your learning path&lt;/li&gt;
&lt;li&gt;Pick the Playlist that matches your goals, whether technical or leadership‑focused.&lt;/li&gt;
&lt;li&gt;Learn through curated modules&lt;/li&gt;
&lt;li&gt;Build practical, job‑ready AI skills through structured lessons and real‑world scenarios.&lt;/li&gt;
&lt;li&gt;Join or replay the exam prep session&lt;/li&gt;
&lt;li&gt;Attend the LinkedIn Live exam prep session — or watch the playback whenever it fits your schedule.&lt;/li&gt;
&lt;li&gt;Unlock your free exam voucher&lt;/li&gt;
&lt;li&gt;Complete a Playlist and receive a free Microsoft certification exam voucher.&lt;/li&gt;
&lt;li&gt;Earn your certification&lt;/li&gt;
&lt;li&gt;Pass the exam and gain recognized proof of your AI expertise.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A smooth, end‑to‑end journey — from learning → preparation → certification → recognition.&lt;/p&gt;

&lt;p&gt;If you’re building your AI career in 2026, this is one of the best zero‑cost opportunities to gain structured learning, expert guidance, and an official Microsoft certification.&lt;/p&gt;

&lt;p&gt;Start your learning journey before June 12:&lt;br&gt;&lt;br&gt;
&lt;a href="https://aiskillsnavigator.microsoft.com/events/AISF2026" rel="noopener noreferrer"&gt;AI Skills Fest – AI Skills Navigator&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;About the Author&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Jonathan Wong&lt;/em&gt; is an IT and AI consultant with 20+ years of experience leading engineering teams across Vancouver and Hong Kong. He specializes in modernizing legacy platforms, cloud security, and building AI-ready systems for startups and large enterprises while advising leadership on using strategic technology to drive business growth.&lt;br&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://www.linkedin.com/in/jonanata/" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://blog.jonanata.com/level-up-your-ai-skills-with-microsoft-ai-skills-fest-2026-ends-june-12/" rel="noopener noreferrer"&gt;Level Up Your AI Skills with Microsoft AI Skills Fest 2026: Ends June 12!&lt;/a&gt; appeared first on &lt;a href="https://blog.jonanata.com" rel="noopener noreferrer"&gt;Behind the Build&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>leadership</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>Pre-AI Lessons in the AI Era: Why Hard Work Breaks Projects Without Transparency </title>
      <dc:creator>Jonathan Wong</dc:creator>
      <pubDate>Wed, 27 May 2026 04:12:10 +0000</pubDate>
      <link>https://dev.to/jonathan78wong/pre-ai-lessons-in-the-ai-era-why-hard-work-breaks-projects-without-transparency-40a8</link>
      <guid>https://dev.to/jonathan78wong/pre-ai-lessons-in-the-ai-era-why-hard-work-breaks-projects-without-transparency-40a8</guid>
      <description>&lt;p&gt;&lt;a href="https://blog.jonanata.com/when-invisible-tasks-break-projects-a-story-of-chaos-security-and-the-power-of-a-shared-language/" rel="noopener noreferrer"&gt;The previous article&lt;/a&gt; solved the first major dysfunction: no common language between business and engineering. Once the team aligned on shared concepts, invisible tasks stopped derailing the roadmap.&lt;/p&gt;

&lt;p&gt;But another problem remained, one that appears in almost every engineering team, especially in the AI era:&lt;br&gt;&lt;strong&gt;The team is full of hardworking experts…&lt;br&gt;yet the project still breaks. Why?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hard work is not the engine of delivery when a team cannot see the system they are collectively building. In software engineering, untracked effort does not accelerate progress; it accelerates chaos. This timeless principle forms the foundation of modern engineering governance. As organizations integrate autonomous artificial intelligence into production pipelines, this human lesson becomes a fundamental survival requirement.&lt;/p&gt;




&lt;h2&gt;&lt;strong&gt;The Human Dysfunction: Hard Work Without Transparency&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;Project failure rarely stems from a lack of effort. It occurs when a team of hardworking experts operates in isolation, blinding themselves to overlapping system dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Network Effect of Modern Features&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modern software features are no longer isolated updates. They exist as interconnected networks across multiple technical layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Front-End Interactions:&lt;/strong&gt; User interfaces and state management.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Microservices:&lt;/strong&gt; Backend business logic and API endpoints.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Workflow Automation:&lt;/strong&gt; State machines and server-side pipelines.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Messaging Systems:&lt;/strong&gt; Event brokers and publish/subscribe schemas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When complexity becomes a network, individual heroism fails. Optimization at the individual level, without systemic visibility, breaks collective architecture.&lt;/p&gt;




&lt;h2&gt;&lt;strong&gt;Blindness, Communication Debt, and Lone-Wolf Isolation&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;Without a shared infrastructure for visibility, engineering teams succumb to severe operational friction:  &lt;/p&gt;

&lt;ol start="1"&gt;
&lt;li&gt;
&lt;strong&gt;Wasted Coding Effort:&lt;/strong&gt; Engineers guess dependency readiness and build unnecessary defensive wrappers, temporary bypasses, and redundant fallback logic.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Communication Debt:&lt;/strong&gt; Teams default to peer-to-peer inquiries to track deployments, schemas, and API states. This turns engineers into manual message routers, creating significant communication overhead.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;The Lone-Wolf Engineer Problem:&lt;/strong&gt; Many engineers love building things independently; it is a core part of the craft. However, in a multi-component system, a lone-wolf engineer is like a novelist trying to write a shared universe alone. Traditional sales team management tactics fail when applied to engineering because sales relies on individual quotas, whereas engineering requires collective architecture. When engineers optimize for personal productivity instead of team alignment, the system breaks.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Business Blindness:&lt;/strong&gt; Stakeholders lose track of completed, blocked, or in-progress work, rendering project roadmaps inaccurate.  &lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;&lt;strong&gt;The Turning Point&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Introducing structured transparency via Jira and Stand-ups&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The remedy is structured transparency, establishing clear visibility engines rather than adding administrative overhead.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Jira as a Single Source of Truth:&lt;/strong&gt; Centralizes requirements, blocker statuses, integration timelines, and staging environments into a universally accessible ledger.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Daily Stand-up Meetings:&lt;/strong&gt; Consolidates technical clarifications into a single daily synchronization point, resolving blockers and dependencies at once.  &lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;&lt;strong&gt;The Results&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;Restoring transparency transforms raw effort into measurable progress:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Elimination of Waste:&lt;/strong&gt; Redo cycles drop because engineers sequence tasks against real-time statuses rather than assumptions.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Stabilized Timelines:&lt;/strong&gt; Cross-component integration becomes highly predictable, allowing business roadmaps to align with actual deployment metrics.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;&lt;strong&gt;The AI Era: Scaling the Hardest-Working Teammate&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;This paradigm is highly relevant to contemporary development teams utilizing AI agents. AI agents represent the hardest-working teammates available, operating 24/7 to generate code, tests, and workflows instantaneously.&lt;/p&gt;

&lt;p&gt;However, the foundational rule remains unchanged: speed without transparency does not scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The AI Problem: Exponential Chaos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When transparency is omitted, AI agents do not merely repeat human mistakes. They multiply them at machine scale.&lt;/p&gt;

&lt;p&gt;[Missing Governance] ──► AI Agent Isolation ──► Machine-Velocity Hallucination ──► Systemic Implosion&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unbounded Output Velocity:&lt;/strong&gt; Agents generate codebase modifications faster than human review cycles can evaluate them.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Contextless Chaining:&lt;/strong&gt; Autonomous agents chain sequential tasks together without verifying broader architectural context.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Hallucinated Assumptions:&lt;/strong&gt; When information is missing, an agent generates plausible-sounding but technically incorrect assumptions, mistaking a hallucination for a valid path forward.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Absence of Interpersonal Alignment:&lt;/strong&gt; Humans resolve misunderstandings via direct conversation. AI agents cannot attend meetings, listen to context changes, or instinctively track updated deployment dependencies.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Applying Scrum to AI Agents: Transitioning to Agentic Traceability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To safely integrate AI agents, Scrum frameworks must evolve from human communication rituals into automated machine-governance guardrails.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Human Scrum Ritual&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Agentic Scrum Evolution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Technical Implementation Guide&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sprint Planning&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Runaway Execution Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Establish strict scope caps, token budgets, repository access boundaries, and directory-level file permissions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Daily Scrum&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Asynchronous Log Triage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dedicate 15 minutes to auditing anomaly dashboards, identifying logic loops, monitoring confidence metrics, and flagging reasoning drift.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Definition of Done&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Mandatory Traceability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Require automated Chain-of-Thought logs, step-by-step decision validation, model-driven scoring, and schema contract compliance.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The Transparent Execution Loop&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This updated methodology introduces a continuous verification loop:&lt;/p&gt;

&lt;ol start="1"&gt;
&lt;li&gt;
&lt;strong&gt;Lock Interface Boundaries:&lt;/strong&gt; Humans define and lock OpenAPI schemas, AsyncAPI payloads, and event contracts during planning.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Parallel Agent Execution:&lt;/strong&gt; Specialized agent personas (Front-End, API, Messaging) write code concurrently against these immutable boundaries.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Real-Time Automated Validation:&lt;/strong&gt; Specialized automation agents evaluate every commit instantly, flagging contract breaches and hallucinations directly on the Scrum board.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;&lt;strong&gt;What It Means for Your Business&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;For executive leadership, this shift alters engineering dynamics from human capacity management to systematic AI orchestration.&lt;/p&gt;

&lt;p&gt;Failing to establish agentic visibility introduces severe operational risks: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Broken integration pipelines &lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Wasted compute capital via runaway token consumption,&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Unstable code quality. &lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Conversely, businesses that &lt;strong&gt;implement structured machine governance unlock the true potential of AI velocity, maintaining safe, predictable, and continuous software delivery&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Visibility Trumping Effort:&lt;/strong&gt; Unchecked output from isolated human engineers or autonomous AI agents results in systemic code waste.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Agents Multiply Dysfunction:&lt;/strong&gt; Because AI operates at machine velocity, a lack of transparency causes projects to fail much faster and with greater complexity.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;The Paradigm Shift:&lt;/strong&gt; Modern engineering management must pivot from a model based on human trust and verbal updates to one built on automated traceability and rigorous verification logs.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;The core challenge of the AI era is not building harder-working models but managing the vast amount of code they generate. Yesterday’s lesson remains today’s reality: teams succeed only when they build in the open. By evolving Scrum from human-centric rituals into automated machine guardrails, organizations transform raw AI velocity into verifiable, production-grade progress.  &lt;/p&gt;




&lt;h2&gt;What’s Next  &lt;/h2&gt;

&lt;p&gt;In the next article of &lt;em&gt;Pre AI Lessons in the AI Era&lt;/em&gt;, we will look beyond transparency and examine how other pre‑AI fundamentals become essential guardrails as your software ecosystem evolves. This past project reveals exactly how we must rethink knowledge management, release management, and customer success when AI agents join the engineering workflow.&lt;/p&gt;

&lt;p&gt;These lessons are no longer optional. They are the structural foundations that keep an AI‑accelerated organization stable, predictable, and aligned.&lt;/p&gt;

&lt;p&gt;The next chapter will explore how these disciplines transform — and why they matter more than ever in the AI era.  &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;About the Author&lt;/strong&gt;&lt;br&gt;&lt;em&gt;Jonathan Wong&lt;/em&gt;&amp;nbsp;is an IT and AI consultant with 20+ years of experience leading engineering teams across Vancouver and Hong Kong. He specializes in modernizing legacy platforms, cloud security, and building AI-ready systems for startups and large enterprises while advising leadership on using strategic technology to drive business growth.&amp;nbsp;&lt;br&gt;&lt;em&gt;&lt;a href="https://www.linkedin.com/in/jonanata/" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;&lt;/em&gt;  &lt;/p&gt;



&lt;p&gt;The post &lt;a href="https://blog.jonanata.com/pre-ai-lessons-in-the-ai-era-why-hard-work-breaks-projects-without-transparency/" rel="noopener noreferrer"&gt;Pre-AI Lessons in the AI Era: Why Hard Work Breaks Projects Without Transparency&amp;nbsp;&lt;/a&gt; appeared first on &lt;a href="https://blog.jonanata.com" rel="noopener noreferrer"&gt;Behind the Build&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>leadership</category>
      <category>management</category>
    </item>
    <item>
      <title>The AI Revenue Illusion: Fixing Maturity Errors to Prepare for the B2AI Future</title>
      <dc:creator>Jonathan Wong</dc:creator>
      <pubDate>Sun, 24 May 2026 06:06:28 +0000</pubDate>
      <link>https://dev.to/jonathan78wong/the-ai-revenue-illusion-fixing-maturity-errors-to-prepare-for-the-b2ai-future-2b7o</link>
      <guid>https://dev.to/jonathan78wong/the-ai-revenue-illusion-fixing-maturity-errors-to-prepare-for-the-b2ai-future-2b7o</guid>
      <description>&lt;p&gt;Every week, companies ask the same question: &lt;em&gt;“Can you add AI to our business?”&lt;/em&gt;, &lt;em&gt;“Will AI help cut costs?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The request is common. The readiness is not.&lt;/p&gt;

&lt;p&gt;Most businesses want AI because they believe it will automate everything, reduce headcount, and cut costs. But AI does not work that way. It depends heavily on business maturity, process clarity, and data consistency. To understand what AI can actually do, we must first look at where a business sits on the maturity curve.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Real-World Business Maturity Model&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This model describes how businesses actually operate, not how they imagine they operate. The truth is simple: &lt;strong&gt;AI helps individuals at low maturity, helps the business at mid maturity, and becomes the product itself only at high maturity.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is how AI usefulness changes across the five levels of maturity, mapping directly to your organizational capabilities:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Ad hoc Stage (Low Maturity)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capability Involved: None&lt;/strong&gt; &lt;em&gt;(No system integration)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Reality:&lt;/strong&gt; Work is manual, inconsistent, undocumented, and entirely dependent on individuals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How AI Helps:&lt;/strong&gt; It serves strictly as a personal productivity tool. Because AI cannot integrate with underlying business systems at this stage, it helps individuals summarize emails, rewrite documents, generate ideas, create templates, assist with research, and draft reports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Bottleneck:&lt;/strong&gt; AI cannot help the business entity because workflows are undefined, data is scattered, and nothing is standardized. &lt;strong&gt;AI cannot automate chaos.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Repeatable Stage (Low-to-Mid Maturity)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capability Involved: Light Automation&lt;/strong&gt; &lt;em&gt;(Manual Triggers, No ML)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Reality:&lt;/strong&gt; Teams begin doing tasks in similar ways, but processes are still not formally documented or deeply integrated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How AI Helps:&lt;/strong&gt; It assists small teams in aligning on process by drafting Standard Operating Procedures (SOPs), summarizing meetings, standardizing templates, and supporting small, manually-triggered data tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Bottleneck:&lt;/strong&gt; AI still cannot support core company operations because data remains inconsistent and systems are completely siloed. It helps people work better, but it does not run the business.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Defined Stage (Mid Maturity)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Capability Involved: Automation + Machine Learning&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Reality:&lt;/strong&gt; This is the milestone where data becomes structured enough that AI finally helps the business operational layer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How AI Helps:&lt;/strong&gt; AI transitions from a personal assistant to a workflow enhancer. It pairs rule-based automation with statistical pattern recognition to extract data from invoices, classify corporate documents, summarize customer conversations, enrich features for analytics, and assist in data pipelines (ETL).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Managed Stage (Mid-to-High Maturity)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capability Involved: AI-Enabled Workflows&lt;/strong&gt; &lt;em&gt;(AI Supports, Does Not Replace)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Reality:&lt;/strong&gt; Systems are fully integrated, data pipelines are reliably established, and KPIs are measurable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How AI Helps:&lt;/strong&gt; AI becomes an enterprise-wide business capability. It actively supports and enhances entire operational workflows without replacing the core human processes, providing predictive organizational insights, supporting executive decision-making, and scaling customer experience improvements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Optimized Stage (High Maturity)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capability Involved: AI Product&lt;/strong&gt; &lt;em&gt;(AI is the Core Value)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Reality:&lt;/strong&gt; AI transitions from a supportive background layer to the actual product and value engine of the company.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How AI Helps:&lt;/strong&gt; Only at this highly optimized stage can a company successfully build proprietary AI-driven analytics platforms, intelligent autonomous agents, predictive engines, and conversational interfaces where AI represents the core product offering.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;AI Usefulness &amp;amp; Capabilities&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The table below synthesizes how business maturity aligns with technological capabilities and real-world execution:&lt;/p&gt;

&lt;p&gt;| &lt;strong&gt;Business Maturity&lt;/strong&gt; | &lt;strong&gt;Who AI Helps&lt;/strong&gt; | &lt;strong&gt;Capability Involved&lt;/strong&gt; | &lt;strong&gt;What AI Can Do&lt;/strong&gt; | &lt;strong&gt;Real-World Example&lt;/strong&gt; |&lt;br&gt;
| &lt;strong&gt;Ad hoc&lt;/strong&gt; | Individuals | &lt;strong&gt;None&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;(No system integration)&lt;/em&gt; | Summaries, ideation, writing, personal speed. | An employee uses ChatGPT to summarize emails or draft a proposal. |&lt;br&gt;
| &lt;strong&gt;Repeatable&lt;/strong&gt; | Individuals &amp;amp; small teams | &lt;strong&gt;Light Automation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;(Manual triggers, no ML)&lt;/em&gt; | SOP drafts, meeting notes, template standardization. | A team drafts SOPs with AI, but monthly reports require manual CSV exports. |&lt;br&gt;
| &lt;strong&gt;Defined&lt;/strong&gt; | Business workflows | &lt;strong&gt;Automation + Machine Learning&lt;/strong&gt; | Data extraction, document classification, ETL support. | AI extracts invoice data, and a rule-based system automatically posts it to accounting. |&lt;br&gt;
| &lt;strong&gt;Managed&lt;/strong&gt; | Business &amp;amp; product | &lt;strong&gt;AI-Enabled Workflows&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;(AI supports, does not replace)&lt;/em&gt; | Insights, advanced automation, predictive CX. | AI summarizes customer calls, feeds the CRM, and triggers custom follow-up loops. |&lt;br&gt;
| &lt;strong&gt;Optimized&lt;/strong&gt; | Product itself | &lt;strong&gt;AI Product&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;(AI is the core value)&lt;/em&gt; | Predictive engines, generative features, custom platforms. | A conversational analytics platform generating insights directly from raw data. |&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Automation vs. AI in the Real World&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Most clients mistakenly believe that &lt;em&gt;AI = Automation = Cost Reduction&lt;/em&gt;. In reality, they are entirely different mechanisms that work better together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automation is deterministic.&lt;/strong&gt; It strictly follows rules and executes predictable tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI is probabilistic.&lt;/strong&gt; It interprets patterns to predict, classify, summarize, or generate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Automation Can Exist Without AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A well-designed, rule-based system can fully automate accounting workflows, P&amp;amp;L calculations, inventory reordering, payroll, compliance checks, and data validation. These systems do not need AI; they simply need operational clarity, strict rules, and predictable inputs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Blueprint: An AI-Enabled Business&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Many clients believe they need to build an &lt;em&gt;AI Product&lt;/em&gt; because investors ask about it, competitors talk about it, and the market rewards AI narratives.&lt;/p&gt;

&lt;p&gt;However, the correct answer is rarely to build an AI product. The correct answer is to &lt;strong&gt;build an AI-enabled business.&lt;/strong&gt; AI should accelerate your workflow, not replace it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; An accounting automation product runs entirely on deterministic rules. AI acts as the accelerator by extracting raw data from invoices, summarizing transactions, and classifying expenses. The product itself is not AI; the product is accounting automation. AI is simply the engine behind it.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Modern AI Tools Supporting Daily Workflows&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Achieving an AI-enabled business flow is easier than ever because modern tools drastically reduce the technical barrier to adoption. Instead of writing custom code for basic tasks, teams can use configuration-driven platforms to analyze data, streamline productivity, or build internal workflows instantly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT by OpenAI (Personal &amp;amp; Team Productivity Sandbox):&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capability:&lt;/strong&gt; Serves as a versatile natural language interface for individual or team-wide ideation, writing, and unstructured data structuring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-World Example:&lt;/strong&gt; A marketing executive copy-pastes a chaotic, 2,000-word transcript from a brainstorming session into ChatGPT and prompts: &lt;em&gt;“Turn this mess into a structured product brief with a clear background, key feature bullets, and five potential taglines.”&lt;/em&gt; Within ten seconds, ChatGPT delivers a highly organized document ready to share with the creative team.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;a href="https://blog.jonanata.com/what-we-learned-from-building-two-partyrock-apps/" rel="noopener noreferrer"&gt;PartyRock&lt;/a&gt; (Rapid Prototyping &amp;amp; Sandbox Testing):&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capability:&lt;/strong&gt; A free, zero-code environment powered by Anthropic Claude that allows anyone to upload unstructured data (up to 120,000 characters) to extract summaries, trends, and structures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-World Example:&lt;/strong&gt; A marketing coordinator uploads a massive CSV file containing raw customer feedback from a recent product launch. Within seconds, they build an app that separates the data into positive vs. negative sentiment, drafts personalized email responses for the frustrated customers, and translates the feedback into structural feature requests for the product engineering team.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Data Analysis with Amazon Q (Enterprise Insights):&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capability:&lt;/strong&gt; Merges completely unrelated enterprise datasets using plain English, backed by AWS Nova and Anthropic Claude.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-World Example:&lt;/strong&gt; A regional sales manager asks, &lt;em&gt;“Compare our Q3 CRM pipeline data in Salesforce with the actual product usage logs sitting in our AWS database to show me which accounts are at risk.”&lt;/em&gt; Amazon Q automatically writes the backend queries, merges the datasets, and outputs a prioritized customer churn risk report.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Chatbot Creation via Bedrock &amp;amp; Lex (Instant Knowledge Bases):&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capability:&lt;/strong&gt; Automatically builds an intelligent, data-aware chatbot without writing any custom code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-World Example:&lt;/strong&gt; An HR team drops 400 pages of scattered PDF employee handbooks, health insurance policies, and compliance guidelines into an Amazon S3 bucket. AWS automatically spins up a secure vector database, links it to Claude, and deploys an internal chat interface where employees can instantly ask, &lt;em&gt;“What is our policy on paternity leave for international transfers?”&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;AWS SageMaker (Enterprise Machine Learning &amp;amp; Custom AI Products):&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capability:&lt;/strong&gt; Provides a fully managed infrastructure for building, training, fine-tuning, and deploying proprietary machine learning models and large language models (LLMs) at scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-World Example:&lt;/strong&gt; A fintech company uses SageMaker to train a custom fraud-detection model on tens of millions of historical transaction logs. The proprietary model is deployed into their live production pipeline, flagging suspicious credit card charges with millisecond latency and running custom reinforcement learning loops to continuously adapt to new fraud patterns.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Tool Alignment Across the Business Maturity Spectrum&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Different tools require different levels of data consistency and infrastructure maturity to be useful. The table below maps where these modern tools fit, ensuring you don’t deploy an advanced tool onto a chaotic foundation:&lt;/p&gt;

&lt;p&gt;| &lt;strong&gt;Business Maturity Stage&lt;/strong&gt; | &lt;strong&gt;Capability Involved&lt;/strong&gt; | &lt;strong&gt;Recommended Modern AI Tools&lt;/strong&gt; | &lt;strong&gt;How the Tool Operates at This Level&lt;/strong&gt; |&lt;br&gt;
| &lt;strong&gt;Ad hoc&lt;/strong&gt; | None &lt;em&gt;(Siloed Individual Productivity)&lt;/em&gt; | &lt;strong&gt;ChatGPT&lt;/strong&gt; , Claude Pro, Gemini Advanced | Used entirely as a sandbox app for individual tasks (e.g., rewriting drafts, brainstorming, summarizing emails). No system integrations required. |&lt;br&gt;
| &lt;strong&gt;Repeatable&lt;/strong&gt; | Light Automation &lt;em&gt;(Manual triggers, no ML)&lt;/em&gt; | &lt;strong&gt;PartyRock&lt;/strong&gt; , Notion AI, Microsoft Copilot (Basic) | Used by small teams to build ad-hoc templates, draft recurring SOP guidelines, and summarize specific meeting transcripts manually. |&lt;br&gt;
| &lt;strong&gt;Defined&lt;/strong&gt; | Automation + Machine Learning | &lt;strong&gt;Amazon Q&lt;/strong&gt; , Document AI, Zapier AI | Securely connects to structured, documented company datasets. Automatically extracts data fields from documents and transforms them to fit defined business rules. |&lt;br&gt;
| &lt;strong&gt;Managed&lt;/strong&gt; | AI-Enabled Workflows &lt;em&gt;(AI supports, does not replace)&lt;/em&gt; | &lt;strong&gt;AWS Bedrock + Lex&lt;/strong&gt; , Salesforce Einstein, HubSpot AI | Integrated deeply into live corporate pipelines (CRMs, ERPs, S3 Buckets). AI automatically monitors live data, updates records, and triggers automated follow-up sequences. |&lt;br&gt;
| &lt;strong&gt;Optimized&lt;/strong&gt; | AI Product &lt;em&gt;(AI is the core value)&lt;/em&gt; | &lt;strong&gt;AWS SageMaker&lt;/strong&gt; , LangChain, Custom API Frameworks | Used to build, fine-tune, and deploy proprietary AI algorithms and autonomous agents that directly serve external customers and B2AI systems. |&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;AI Must Add Revenue Value, Not Just Cut Costs&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The market does not reward companies that use AI merely to reduce headcount; it rewards companies that use AI to generate new revenue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.jonanata.com/not-every-magic-wand-works-for-every-company-cloudflare-ai-restructuring-and-the-elder-wand-problem/" rel="noopener noreferrer"&gt;Take Cloudflare as a prime example&lt;/a&gt;. When they announced AI-related restructuring, the market punished them because the move looked like basic, short-sighted cost-cutting rather than a play for new product value or top-line revenue growth. AI should expand your capabilities and uncover hidden markets, not just shrink your payroll.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But what is the next major revenue channel unlocked by AI? More importantly, what is the cost of falling behind?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your business views AI strictly as an internal efficiency tool, you are setting yourself up for a massive, structural loss. While you focus on shaving pennies off your operational costs, the paradigm is shifting entirely. The real business threat, and the biggest financial opportunity, is no longer about making your human staff faster. It is about capturing a massive, unmapped ecosystem of programmatic buyers.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Strategic Shift: From AI Ready to Agent Ready&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Most companies ask, &lt;em&gt;“Are we AI ready?”&lt;/em&gt; That is no longer the right question.&lt;/p&gt;

&lt;p&gt;Traditional &lt;strong&gt;AI Readiness&lt;/strong&gt; focuses purely on internal efficiency, like cleaning data, documenting workflows, laying automation foundations, and upgrading integration maturity. While these steps are necessary, they are no longer sufficient.&lt;/p&gt;

&lt;p&gt;The real transformation is occurring externally: &lt;a href="https://blog.jonanata.com/the-new-customer-is-not-human-business-to-ai-b2ai/" rel="noopener noreferrer"&gt;&lt;strong&gt;Your next customer may not be human; your next buyer may be an AI agent.&lt;/strong&gt; This is the massive commercial shift from being &lt;em&gt;AI Ready&lt;/em&gt; to being &lt;strong&gt;Business-to-AI (B2AI) Ready&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; AI Ready: Focuses Internally (Optimizes Employee Workflows)&lt;/li&gt;
&lt;li&gt;B2AI Ready: Opens Externally (Exposes Machine-Readable Surfaces)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What Business-to-AI Ready Actually Means&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An “AI Agent buyer” is not a futuristic concept; it is an active economic channel utilizing specialized infrastructure landing today. Rather than navigating the web like a human, autonomous agents operate as independent software actors driven entirely by logic, policy, and strict parameters to execute transactions instantly.&lt;/p&gt;

&lt;p&gt;To capture this automated market, your business must expose &lt;strong&gt;machine-readable surfaces&lt;/strong&gt; (such as structured APIs and clear schemas) that autonomous software can seamlessly understand, trust, and interact with. Instead of rewriting your entire codebase, becoming “Agent Ready” means architecting your digital pipeline to support the modern, agent-native tech stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cryptographic Identity (KYC for Software):&lt;/strong&gt; Integrating with open standards like the &lt;strong&gt;x402 protocol&lt;/strong&gt; to instantly parse machine-readable mandates, verify an agent’s provenance, and authenticate its authority to act on behalf of a human or enterprise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handling Programmatic Paywalls:&lt;/strong&gt; Structuring your web endpoints to serve native machine-facing feedback, such as encountering an &lt;strong&gt;HTTP 402 (Payment Required) status code&lt;/strong&gt;, which an agent’s reasoning loop can interpret automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise-Grade Agent Payments:&lt;/strong&gt; Ensuring your systems can natively interact with managed financial substrates like &lt;strong&gt;Amazon Bedrock AgentCore Payments&lt;/strong&gt; to settle transactions via identity-bound wallets, enforce programmable spending limits, and process friction-free microtransactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data-Driven Discovery:&lt;/strong&gt; Replacing emotional branding hooks with flawless, highly structured product catalogs and metadata metadata. Agents select vendors based on verifiable trust signals, strict performance metrics, and policy constraints rather than catchy logos or visual marketing. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Third Commercial Channel&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;B2AI introduces a completely new revenue stream, transforming how we view market access:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;B2C (Business-to-Consumer):&lt;/strong&gt; Selling directly to human individuals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;B2B (Business-to-Business):&lt;/strong&gt; Selling to human-led organizations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;B2AI (Business-to-AI):&lt;/strong&gt; Selling directly to autonomous software agents.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;| &lt;strong&gt;Strategic Lens&lt;/strong&gt; | &lt;strong&gt;AI Ready (Internal)&lt;/strong&gt; | &lt;strong&gt;Business-to-AI Ready (External)&lt;/strong&gt; |&lt;br&gt;
| &lt;strong&gt;Core Focus&lt;/strong&gt; | Your business can &lt;em&gt;use&lt;/em&gt; AI. | AI agents can &lt;em&gt;use your business&lt;/em&gt;. |&lt;br&gt;
| &lt;strong&gt;Primary Target&lt;/strong&gt; | Helps your employees work faster. | Helps procurement, financial, and shopping agents buy from you. |&lt;br&gt;
| &lt;strong&gt;Financial Impact&lt;/strong&gt; | Reduces operational costs. | Unlocks entirely new revenue channels. |&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Key Takeaways&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Maturity Dictates Utility:&lt;/strong&gt; AI serves individuals at low maturity, enhances business workflows at mid maturity, and powers core products only at peak maturity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop Automating Chaos:&lt;/strong&gt; AI is probabilistic (pattern-based) and cannot fix broken workflows; deterministic (rule-based) automation must be established first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Revenue Imperative:&lt;/strong&gt; The market punishes companies using AI merely for headcount cost-cutting. True value lies in deploying AI to expand top-line capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The B2AI Paradigm Shift:&lt;/strong&gt; Internal “AI Readiness” only lowers operational expense. External “Business-to-AI Readiness” builds machine-readable infrastructure to capture the emerging economy of autonomous software buyers. &lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;About the Author&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Jonathan Wong&lt;/em&gt; is an IT and AI consultant with 20+ years of experience leading engineering teams across Vancouver and Hong Kong. He specializes in modernizing legacy platforms, cloud security, and building AI-ready systems for startups and large enterprises while advising leadership on using strategic technology to drive business growth.&lt;br&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://www.linkedin.com/in/jonanata/" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://blog.jonanata.com/the-ai-revenue-illusion-fixing-maturity-errors-to-prepare-for-the-b2ai-future/" rel="noopener noreferrer"&gt;The AI Revenue Illusion: Fixing Maturity Errors to Prepare for the B2AI Future&lt;/a&gt; appeared first on &lt;a href="https://blog.jonanata.com" rel="noopener noreferrer"&gt;Behind the Build&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>leadership</category>
    </item>
    <item>
      <title>The New Customer Is Not Human: Business-to-AI (B2AI)</title>
      <dc:creator>Jonathan Wong</dc:creator>
      <pubDate>Thu, 21 May 2026 22:07:53 +0000</pubDate>
      <link>https://dev.to/jonathan78wong/the-new-customer-is-not-human-business-to-ai-b2ai-2hoo</link>
      <guid>https://dev.to/jonathan78wong/the-new-customer-is-not-human-business-to-ai-b2ai-2hoo</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Why Business-to-AI (B2AI) is Your Company’s Next Essential Commercial Channel&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;For two decades, corporate strategy assumed a single, immovable truth: every digital transaction begins with a person. That baseline assumption is breaking.&lt;/p&gt;

&lt;p&gt;AI agents are emerging as independent economic actors that evaluate options, negotiate, authenticate, and pay. This is not a speculative future. The infrastructure is landing today in &lt;a href="https://www.x402.org/" rel="noopener noreferrer"&gt;Coinbase’s x402 open-payment standard&lt;/a&gt;, Amazon Bedrock AgentCore Payments, and Cloudflare’s bot-friendly security surfaces. The customer at the other end of your digital pipeline is no longer guaranteed to be human. As &lt;em&gt;&lt;a href="https://www.forbes.com/sites/daraabasiita/2026/05/14/why-fintechs-next-billion-dollar-category-is-being-built-for-the-agentic-era/" rel="noopener noreferrer"&gt;Forbes&lt;/a&gt;&lt;/em&gt; captures the shift clearly: &lt;strong&gt;“In the not too distant future agents will account for most transactions online.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is not a technical footnote. This is the birth of a brand-new commercial engine that &lt;em&gt;Forbes&lt;/em&gt; calls &lt;strong&gt;fintech’s next billion-dollar category&lt;/strong&gt; : &lt;strong&gt;Business-to-AI (B2AI)&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Third Commercial Channel&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The internet structure gave us Business-to-Consumer (B2C) and Business-to-Business (B2B). AI introduces the third lane: &lt;strong&gt;Business-to-AI (B2AI)&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;B2C Channel: Individual Consumers (Driven by Emotion &amp;amp; UX) &lt;/li&gt;
&lt;li&gt;B2B Channel: Corporate Procurement (Driven by Sales Cycles) &lt;/li&gt;
&lt;li&gt;B2A Channel: Autonomous AI Agents (Driven by Logic &amp;amp; Policy) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this model, your buyer is an autonomous agent. It does not browse, look at advertisements, or get stuck in traditional multi-month enterprise sales cycles. It evaluates parameters, makes a decision, and executes the transaction instantly.&lt;/p&gt;

&lt;p&gt;If agents are on track to account for most online transactions, your company’s commercial stack must evolve immediately to capture them. B2AI is not a niche feature; it is a fundamental platform shift.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Business to AI Stack
&lt;/h2&gt;

&lt;p&gt;Business to AI is not a future concept. The stack is already here. Identity, payments, and interaction surfaces have all begun shifting toward agent‑native design. If these pieces feel far apart today, it is only because they were built by different companies — but architecturally, they form a single system. The distance is not conceptual. It is only temporal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Identity and Trust: KYC for Software&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If agents are going to transact, they require cryptographic proof of identity. The &lt;a href="https://solana.com/x402/what-is-x402" rel="noopener noreferrer"&gt;x402 protocol&lt;/a&gt;—an open standard championed by the &lt;a href="https://x.com/coinbase/status/2039689568509989209" rel="noopener noreferrer"&gt;Linux Foundation&lt;/a&gt; along with Coinbase, Stripe, and Cloudflare—is the first major attempt to solve this.&lt;/p&gt;

&lt;p&gt;Built on top of the native web status code &lt;strong&gt;HTTP 402 (Payment Required)&lt;/strong&gt;, x402 delivers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cryptographic Identity&lt;/strong&gt; : Secure verification of the agent’s provenance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authenticated Authority&lt;/strong&gt; : Clear proof that the agent can act for a human or business.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Programmable Spending&lt;/strong&gt; : Hardcoded parameters that govern what an agent can purchase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Machine-Readable Mandates&lt;/strong&gt; : Transparent instructions that standard web servers can instantly parse.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is Know-Your-Customer (KYC) compliance engineered for autonomous software. Without native machine identity, there is no trust. Without trust, automated payments stall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enterprise-Grade Agent Payments&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Moving payments from a theoretical concept to enterprise architecture requires a managed substrate. AWS filled this gap by launching &lt;a href="https://aws.amazon.com/tw/blogs/machine-learning/agents-that-transact-introducing-amazon-bedrock-agentcore-payments-built-with-coinbase-and-stripe/" rel="noopener noreferrer"&gt;Amazon Bedrock AgentCore Payments&lt;/a&gt;, the first enterprise-ready payment layer designed for AI agents. This service allows developers to move away from building custom checkout billing logic for AI workflows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Agent Execution Loop] 
       │
       ▼
Encounters Paywall (HTTP 402) 
       │
       ▼
AgentCore Intercepts ──► Authenticates Wallet (Stripe Privy / Coinbase CDP)
       │
       ▼
Executes Stablecoin Settlement (USDC) ──► Delivers Cryptographic Receipt to Endpoint

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AgentCore Payments embeds financial rails natively inside the agent’s reasoning loop. Backed by &lt;a href="https://stripe.com/newsroom/news/aws-stripe-agentcore-privy" rel="noopener noreferrer"&gt;Stripe’s Privy infrastructure&lt;/a&gt; and Coinbase, it features identity-bound wallets, spending guardrails, full loop observability, and supports friction-free microtransactions that would otherwise be wiped out by legacy credit card processing fees.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Shift in Interaction Surfaces&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As technology leaders, we must recognize that &lt;a href="https://blog.jonanata.com/when-ai-agents-transact-how-interaction-surface-mobility-redefines-the-future-of-payments/" rel="noopener noreferrer"&gt;interaction surfaces shift cyclically&lt;/a&gt;, and the payment flow moves with them:&lt;/p&gt;

&lt;p&gt;Desktop → mobile → cloud agents → ambient AI&lt;/p&gt;

&lt;p&gt;Every time this surface shifts, the formula of intention, authentication, and channel changes with it. We have actually been optimizing for bots for decades via &lt;strong&gt;Google Search&lt;/strong&gt;. Search Engine Optimization (SEO), schema markups, and XML sitemaps are forms of negotiation with a non-human crawler. The critical modern difference? &lt;strong&gt;The bot no longer just reads your site; it has a wallet, it reasons, and it buys&lt;/strong&gt;. The interaction surface is no longer a graphical user interface (GUI); it is an API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack In Conceptual Layers&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Layer&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Core Concept&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Purpose&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identity Layer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;KYC for Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Establishes who the agent is, what authority it has, and how it authenticates.&lt;/td&gt;
&lt;td&gt;Coinbase x402 — cryptographic identity, programmable spending rules.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transaction Layer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;AgentCore Payments&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Enables the agent to act economically — pay, receive, and record transactions safely.&lt;/td&gt;
&lt;td&gt;AWS AgentCore — identity‑bound wallets, spending guardrails, observability.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Interface Layer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Interaction Surfaces&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Defines how agents and services communicate — the “face” of Business‑to‑AI.&lt;/td&gt;
&lt;td&gt;Cloudflare bot‑friendly APIs, Google Search as early machine‑facing surface.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why B2AI is a Top-Line Priority&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Smashing the “Efficiency Wall”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The legacy corporate tech stack was explicitly engineered to keep automated agents out. &lt;em&gt;Forbes&lt;/em&gt; calls this structural bottleneck the &lt;strong&gt;Efficiency Wall&lt;/strong&gt; : &lt;strong&gt;“The ceiling has always been the person at the keyboard.”&lt;/strong&gt; Traditional operational systems relied entirely on human limitations—a person had to manually approve invoices, sign wires, and click submit.&lt;/p&gt;

&lt;p&gt;This created a structural barrier where scaling corporate operations required scaling human headcount. B2AI entirely removes this barrier. Software agents scale like cloud compute, not like employee payroll.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Corporate Capital is Moving Rapidly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enterprise leaders are no longer just looking at AI as a tool for efficiency; they are reallocating real budgets toward agentic execution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;25% of enterprises&lt;/strong&gt; will deploy functional AI agents in 2025, spiking to &lt;strong&gt;50% by 2027&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;44% of corporate finance teams&lt;/strong&gt; expect to actively use agentic AI by 2026.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;56% of leadership teams&lt;/strong&gt; plan to expand their AI investment capital by at least 10%.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The High Price of Financial Inaction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Forbes&lt;/em&gt; makes the case directly: &lt;strong&gt;the next billion-dollar fintech category is being built for the agentic era.&lt;/strong&gt; In an industry where digital payments account for hundreds of billions of dollars, agentic commerce is the newest expansion vector. Traditional financial services and enterprises that fail to adapt their corporate architecture risk losing an estimated &lt;strong&gt;$170 billion in cumulative profit&lt;/strong&gt; over the next decade. Conversely, early market adopters can capture a &lt;strong&gt;four percentage point increase in net returns&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What Matters to a Business in the Business to AI Era&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When the customer becomes a machine, the core fundamentals of product, marketing, and corporate strategy are rewritten from scratch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Product Context: Machine-Understandable Inventories&lt;/strong&gt;
AI agents select products based on structured metadata, policy constraints, compatibility, and strict performance metrics. If your product, catalog, or service cannot be flawlessly parsed by software, your company will simply never be selected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Marketing Strategy: Data Over Emotion&lt;/strong&gt;
Traditional marketing relies on storytelling, visual branding, and emotional hooks. In a B2AI world, marketing transforms into data engineering driven entirely by highly structured data feeds, verifiable trust signals, and real-time performance metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer Loyalty: Cryptographic Reputation&lt;/strong&gt;
AI agents are entirely stateless and impervious to brand affinity or catchy logos. True customer retention shifts toward immutable contracts, seamless API integrations, operational reliability, and cryptographic reputation scores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer Accountability: Programmable Mandates&lt;/strong&gt;
Who is accountable when an automated agent commits capital? Enterprise security requires that accountability must be hardcoded into the workflow via spending limits, programmable mandates, complete audit trails, and instant revocation rights.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Two-Sided B2AI Operating Model&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To successfully navigate this landscape, your enterprise must architect for a dual-sided marketplace:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Side&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;What It Means&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Side1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Inbound Sales&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Your AI agent sells to their AI buying agent. The buyer is software, not a human.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Side2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Outbound Action&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Your company manages the agents acting on your behalf. These agents execute tasks, decisions, and transactions.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Inbound Side&lt;/strong&gt; : Your enterprise system must expose machine-readable catalogs, negotiate automatically within strict policy bounds, and natively integrate with agent payment rails. This is a challenge of protocol design, not human marketing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Outbound Side&lt;/strong&gt; : Your business must maintain ironclad control over the software agents acting on your behalf. This requires deploying secure identity issuance, setting strict spending guardrails, and enforcing exception approval workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just as your enterprise once required an Identity Management System for employees, your organization now requires a comprehensive &lt;strong&gt;Agent Management System&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion: The Next Platform Shift&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Every time the interaction surface moves, the entire flow of global commerce and capital moves with it. The modern interaction layer is no longer a human screen; it is an active API.&lt;/p&gt;

&lt;p&gt;The companies that win the next decade will be those that expose clear AI-facing surfaces, issue secure identities to software, and treat agents as first-class economic actors. Enterprise leaders still designing exclusively for human-to-human transactions will spend the coming years explaining why their architecture targeted the wrong end of the transaction.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;About the Author&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Jonathan Wong&lt;/em&gt; is an IT and AI consultant with 20+ years of experience leading engineering teams across Vancouver and Hong Kong. He specializes in modernizing legacy platforms, cloud security, and building AI-ready systems for startups and large enterprises while advising leadership on using strategic technology to drive business growth.&lt;br&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://www.linkedin.com/in/jonanata/" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://blog.jonanata.com/the-new-customer-is-not-human-business-to-ai-b2ai/" rel="noopener noreferrer"&gt;The New Customer Is Not Human: Business-to-AI (B2AI)&lt;/a&gt; appeared first on &lt;a href="https://blog.jonanata.com" rel="noopener noreferrer"&gt;Behind the Build&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>leadership</category>
    </item>
    <item>
      <title>Private, Sovereign Agents in Your Pocket: The Rise of USB-Deployed Local LLMs with AWS Strands</title>
      <dc:creator>Jonathan Wong</dc:creator>
      <pubDate>Wed, 20 May 2026 01:30:23 +0000</pubDate>
      <link>https://dev.to/jonathan78wong/private-sovereign-agents-in-your-pocket-the-rise-of-usb-deployed-local-llms-with-aws-strands-ofe</link>
      <guid>https://dev.to/jonathan78wong/private-sovereign-agents-in-your-pocket-the-rise-of-usb-deployed-local-llms-with-aws-strands-ofe</guid>
      <description>&lt;p&gt;Artificial intelligence is undergoing a massive architectural shift. While cloud-hosted API models dominated the initial wave of enterprise AI adoption, a combination of rising cloud costs, shifting privacy regulations, and advancements in open-weight models has catalyzed an alternative movement: fully localized, portable AI agents.&lt;/p&gt;

&lt;p&gt;Deploying an autonomous AI agent locally, or even storing it completely on a bootable or portable USB drive, is no longer a tech enthusiast’s hobby. It is a highly practical architecture for modern data analysts and security-conscious enterprises.  &lt;/p&gt;




&lt;h2&gt;&lt;strong&gt;The Strong Case for Local LLMs&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;For a long time, the convenience of API endpoints overshadowed local execution. However, major shifts in economics, security, and model capability have flipped the script.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SaaS Price Plan Volatility&lt;/strong&gt;: Major cloud AI providers continuously adjust their commercial enterprise tiers. Many organizations have faced unexpected price plan changes, making high-volume document processing and continuous data ingestion prohibitively expensive on a per-token model. Local deployment offers predictable infrastructure costs where you pay for the hardware once, and your marginal token cost is zero.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Privacy and Supply Chain Attacks&lt;/strong&gt;: Sending sensitive data like financial records, internal roadmaps, or intellectual property to a third-party cloud endpoint exposes corporations to data leaks and severe downstream supply chain vulnerabilities. Operating completely locally guarantees that data never leaves your infrastructure boundaries.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Bypassing Regional Blocks and Geo-Restrictions&lt;/strong&gt;: Cloud AI APIs are often restricted, gated, or altogether blocked in specific countries or corporate network zones due to geopolitical compliance and local regulations. Running a model locally bypasses all geographic restrictions entirely, ensuring your AI tools remain completely accessible anywhere in the world regardless of regional IP filtering.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Modular Freedom and Custom Mixing&lt;/strong&gt;: Cloud APIs lock you into a single provider’s walled garden and specific model versions. Local execution allows you to swap out your underlying model file instantly, test fine-tuned variants, or even mix entirely different model architectures (like using a coding model for data synthesis and a conversational model for summaries) tailored exactly to different use cases.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;The Capabilities of Open-Weight Models&lt;/strong&gt;: Models like Alibaba’s Qwen family have evolved dramatically. Middle-tier open models ranging from 7B to 14B parameters can execute highly complex tasks, follow structured JSON formats perfectly, and write accurate analytics code out of the box.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;True Offline Autonomy&lt;/strong&gt;: Local models function completely disconnected from the open web. For remote field research, high-security air-gapped networks, or maritime operations, local LLMs provide uninterrupted operational continuity.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;&lt;strong&gt;Why Portable USB Deployment?&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;Portability bridges the gap between local power and accessibility. Storing your local LLM engine, tools, and orchestration dependencies on a fast, external USB drive unlocks distinct advantages.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Environment Agility&lt;/strong&gt;: A portable USB allows an analyst or developer to plug their entire AI environment into a secure workstation, a home desktop, or a field laptop without tedious, repetitive software installation loops.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Zero-Footprint Auditing&lt;/strong&gt;: When combined with secure or sandboxed container environments, a USB setup can run operations purely in temporary memory space. Once unplugged, no trace of the underlying processed data is left behind on the host operating system.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;&lt;strong&gt;How a USB‑Based LLM Uses the Host GPU&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;A common point of confusion is how a software stack running off an external drive handles heavy computational matrix math. A USB-based LLM does not rely on the USB drive itself to crunch numbers. Instead, it utilizes standard local inferencing engines to negotiate access with the host machine’s hardware.&lt;/p&gt;

&lt;ol start="1"&gt;
&lt;li&gt;
&lt;strong&gt;Driver Interfacing&lt;/strong&gt;: When plugged in, the local inference engine queries the host machine’s operating system via standard APIs such as NVIDIA CUDA for GeForce/RTX cards, Apple Metal for Mac Silicon, or ROCm for AMD.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;VRAM Allocation&lt;/strong&gt;: The engine reads the quantized model file straight from the USB drive and directly loads those weights into the host machine’s high-speed Graphics Video RAM.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Execution&lt;/strong&gt;: Once loaded into the host GPU’s memory, the intense mathematical operations happen locally at massive parallel speeds. The USB drive is only used for initial loading and logging output.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Setting Up the Local LLM Server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To enable the portable USB environment to utilize the host computer’s computing power, both the host hardware and your USB software engine must align correctly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Host Computer Requirements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GPU Drivers&lt;/strong&gt;: The host machine must have appropriate graphics drivers installed. This means NVIDIA CUDA for Windows/Linux workstations, AMD ROCm or Vulkan for AMD setups, Intel OneAPI or Vulkan for Intel discrete graphics, and Apple Metal (built-in natively) for macOS devices.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;GPU Acceleration Runtime&lt;/strong&gt;: The local backend software must explicitly support hardware offloading. In this architecture, we use a portable build of llama.cpp.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;VRAM Capacity&lt;/strong&gt;: The chosen LLM must fit within the host machine’s available Video RAM. Heavy weights must be quantized (compressed) to prevent memory overflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What Happens in Practice&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;High-End Workstation (e.g., RTX 4090)&lt;/strong&gt;: Plugging your USB into a dedicated workstation loads the model entirely into ultra-fast VRAM, yielding extreme inference speeds ranging from 50 to 120 tokens per second.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Standard Work Laptop (No Discrete GPU)&lt;/strong&gt;: If plugged into a machine lacking a dedicated graphics card, the llama framework automatically falls back to CPU execution. The agent still works completely offline, though at a noticeably slower computational speed.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Apple Silicon MacBook (M-Series)&lt;/strong&gt;: Plugging the drive into a Mac leverages Apple’s unified memory architecture via Metal, resulting in fast, efficient acceleration without needing a massive desktop GPU.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Llama Portable Server Example Setup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To make the entire system completely self-contained on your USB drive, follow this structural organization:&lt;/p&gt;

&lt;ul start="1"&gt;
&lt;li&gt;
&lt;strong&gt;Download the Server Binary&lt;/strong&gt;: Visit the official ggerganov/llama.cpp releases page on GitHub. Download the pre-compiled portable zip file matching your host operating system (such as the split zip containing llama-server.exe with CUDA or AVX support for Windows). Extract these files directly onto a folder on your USB drive.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Download the Model File&lt;/strong&gt;: Navigate to Hugging Face and search for the Qwen repository containing GGUF formats. Download a balanced, quantized model file such as qwen2.5-7b-instruct-q3_k_m.gguf. This specific format offers low memory usage while maintaining high reasoning accuracy.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Establish the Portable Folder Structure&lt;/strong&gt;: Organize your files on the USB drive exactly like this to keep paths clean:  &lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code&gt;[USB Drive Root]
└── llama_portable/
    ├── bin/
    │   ├── llama-server.exe
    │   └── (other runtime dll/binary files)
    └── models/
        └── qwen2.5-7b-instruct-q3_k_m.gguf  &lt;/code&gt;&lt;/pre&gt;

&lt;ul start="1"&gt;
&lt;li&gt;
&lt;strong&gt;Launch the Engine&lt;/strong&gt;: Open your terminal, navigate into your bin folder, and execute the following unified initialization command:&lt;/li&gt;



&lt;li&gt;llama-server.exe –model ..\models\qwen2.5-7b-instruct-q3_k_m.gguf –ctx-size 8192 –gpu-layers 22 –threads 8 –temp 0.7 –port 8080 –log-disable  
&lt;ul&gt;
&lt;li&gt;–model: Tells the server exactly where to find your stored Qwen GGUF file.&lt;/li&gt;



&lt;li&gt;–ctx-size 8192: Expands the memory window to 8,192 tokens, allowing the agent to read larger Excel spreadsheets.&lt;/li&gt;



&lt;li&gt;–gpu-layers 22: Offloads 22 layers of the neural network directly into the host machine’s GPU VRAM. Adjust this number up or down depending on how much memory the host GPU possesses.&lt;/li&gt;



&lt;li&gt;–threads 8: Allocates 8 CPU cores to handle processing tasks if VRAM spills over.&lt;/li&gt;



&lt;li&gt;–temp 0.7: Stabilizes the model’s creativity for consistent data analysis formatting.&lt;/li&gt;



&lt;li&gt;–port 8080: Locks the local endpoint port to 8080, matching the target address used by our AI framework.&lt;/li&gt;



&lt;li&gt;–log-disable: Disables messy debugging text in the terminal window to keep the screen clean.&lt;/li&gt;
&lt;/ul&gt;




&lt;/li&gt;


&lt;/ul&gt;




&lt;h2&gt;&lt;strong&gt;How AWS’s AI Strands Framework Can Run Natively Locally&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;Amazon Web Services developed Strands, an elegant, open-source, code-first AI agent framework designed to simplify complex tool orchestration. While built by AWS, Strands is completely model-agnostic and runs beautifully in 100% offline environments.&lt;/p&gt;

&lt;p&gt;Instead of routing traffic to the cloud-hosted Amazon Bedrock API, Strands allows developers to instantiate a model class and intentionally override its endpoint URL. By pointing this parameter to your local port where your local Llama.cpp or Ollama server is running, Strands treats your local Qwen model exactly like a cloud endpoint. It automatically reads function schemas, handles single-query tool selection, and executes python actions locally without a single byte ever reaching the internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Practical Excel‑Analysis Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Consider a scenario where a financial auditor needs to process an asset ledger. Rather than sending this sensitive data up to a cloud model, they plug in their USB drive.&lt;/p&gt;

&lt;p&gt;The user asks: “What is the mean average of our Revenue column?”&lt;/p&gt;

&lt;p&gt;Using Strands, the system maps this flow internally using exactly one query turn.&lt;/p&gt;

&lt;ol start="1"&gt;
&lt;li&gt;The user asks the question.&lt;/li&gt;



&lt;li&gt;Strands passes the available tool descriptions to the local Qwen model.&lt;/li&gt;



&lt;li&gt;Qwen recognizes it needs to compute numerical fields, auto-selects the math tool, and extracts the target column parameter alongside the metric tool configuration.&lt;/li&gt;



&lt;li&gt;The local Python backend triggers a native pandas function against the local Excel file and returns the direct numeric calculation back to the screen instantly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;A High‑Level Implementation Guide&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building this system on your portable drive requires organizing your project code structurally into separate tool definitions and agent initialization routines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File 1: The Analytical Tools (ExcelAnalyzer.py)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This file houses the native Python code that will run locally on the host machine. We register these functions to the framework using Strands’ native tool decorator.  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# ExcelAnalyzer.py  

import pandas as pd
from strands import tool

@tool
def get_excel_metadata(file_path: str) -&amp;gt; str:
    """
    Use this tool to extract layout structural layout details about an Excel file.
    Returns available column headers, sheet shapes, and total row count.
    """
    # your logic  

@tool
def calculate_column_math(file_path: str, column_name: str, metric: str) -&amp;gt; str:
    """
    Use this tool to calculate analytical metrics on a single target numerical column.
    Supported metrics: 'mean' (average), 'sum' (total), 'max' (highest), 'min' (lowest).
    """
    # your logic 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;File 2: The Main Agent Execution Engine (agent.py)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This script loads the tools from your custom analyzer module, configures the local Llama framework bypass, and executes inquiries.   &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# agent.py  

import os
from strands import Agent
from strands.models import BedrockModel

# Bind the standalone functions from your local file
from ExcelAnalyzer import get_excel_metadata, calculate_column_math

# Redirect the AWS SDK interface down to your local port 8080 Llama server
# Dummy keys are passed simply to pass AWS SDK internal initialization checks
local_qwen_model = BedrockModel(
    modelId="qwen",
    endpoint_url="http://localhost:8080/v1",
    region_name="us-east-1",
    aws_access_key_id="mock_key",
    aws_secret_access_key="mock_secret"
)

# Instantiate the Agent with direct object reference mapping
agent = Agent(
    model=local_qwen_model,
    tools=[get_excel_metadata, calculate_column_math],
    system_prompt="""You are a sovereign Local Data Analyst Agent.
    You have direct access to automated python tools to analyze spreadsheet files.
    Auto-select the most specific tool available to satisfy user requests.
    If the question is standard conversational knowledge, reply without tools."""
)

if __name__ == "__main__":
    target_sheet = "sales_data.xlsx"
    
    # your logic  
&lt;/code&gt;&lt;/pre&gt;




&lt;h2&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Sovereignty is Non-Negotiable&lt;/strong&gt;: Moving your AI logic locally eliminates vulnerability to downstream data supply chain leaks and isolates operational data inside private boundaries.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;AWS Strands is Not Locked to the Cloud&lt;/strong&gt;: The framework provides an exceptionally lightweight syntax for localized python workflows simply by mapping standard endpoint parameters to localhost servers.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;USB Provisioning Delivers High Mobility&lt;/strong&gt;: Bundling open models like Qwen alongside an execution environment on plug-and-play storage allows technical professionals to instantly adapt to varying compute resources while leveraging the host computer’s heavy GPU power safely.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;What’s Next&lt;/h2&gt;

&lt;p&gt;Decoupling your enterprise artificial intelligence architecture from third-party cloud data pipes is the ultimate strategy for achieving true data security, cost predictability, and zero geopolitical restriction friction. By containerizing a lightweight local inference engine like llama.cpp and pairing it with a professional, tool-agnostic framework like AWS Strands on an external drive, you create an entire sovereign data laboratory that functions completely air-gapped on any host workstation you target.&lt;/p&gt;

&lt;p&gt;This architectural overview outlines the theoretical foundational pillars, resource allocations, and file structures required to launch your localized asset parser. In the &lt;strong&gt;next article&lt;/strong&gt;, we will dive deep into a complete, end-to-end AI agent implementation guide. We will walk through the granular production code line-by-line, implement custom multi-sheet data cross-referencing capabilities, and detail a complete code-level description to finalize your private AI workspace.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;About the Author&lt;/strong&gt;&lt;br&gt;&lt;em&gt;Jonathan Wong&lt;/em&gt;&amp;nbsp;is an IT and AI consultant with 20+ years of experience leading engineering teams across Vancouver and Hong Kong. He specializes in modernizing legacy platforms, cloud security, and building AI-ready systems for startups and large enterprises while advising leadership on using strategic technology to drive business growth.&amp;nbsp;&lt;br&gt;&lt;em&gt;&lt;a href="https://www.linkedin.com/in/jonanata/" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;&lt;/em&gt;  &lt;/p&gt;





&lt;p&gt;The post &lt;a href="https://blog.jonanata.com/private-sovereign-agents-in-your-pocket-the-rise-of-usb-deployed-local-llms-with-aws-strands/" rel="noopener noreferrer"&gt;Private, Sovereign Agents in Your Pocket: The Rise of USB-Deployed Local LLMs with AWS Strands&lt;/a&gt; appeared first on &lt;a href="https://blog.jonanata.com" rel="noopener noreferrer"&gt;Behind the Build&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Security Meets Reality: The Great Firewall</title>
      <dc:creator>Jonathan Wong</dc:creator>
      <pubDate>Mon, 18 May 2026 01:00:29 +0000</pubDate>
      <link>https://dev.to/jonathan78wong/security-meets-reality-the-great-firewall-1aol</link>
      <guid>https://dev.to/jonathan78wong/security-meets-reality-the-great-firewall-1aol</guid>
      <description>&lt;p&gt;The Great Wall protected the country for hundreds of years, and it remains one of the few human creations visible from space with the naked eye. In the digital world, its virtual counterpart continues that same idea of protection, shaping how information flows and what can pass through.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.jonanata.com/the-modernization-journey-how-to-take-a-legacy-system-from-zero-trust-to-ai-ready-without-rewrites-or-downtime-and-big-costs/" rel="noopener noreferrer"&gt;Our client&lt;/a&gt; expanded their business into mainland China, where their applications need to load images and documents stored in Amazon S3. However, the default S3 endpoint quickly became a bottleneck, with unstable connectivity and unpredictable latency inside the region. Latency spikes, packet loss, or outright blocking can break the user experience. Yet the company domain is already approved through internal compliance procedures, meaning traffic routed through that domain is stable and trusted.&lt;/p&gt;

&lt;p&gt;This creates a simple but important requirement:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Serve S3 files through the company domain without changing the app and without exposing the S3 bucket publicly.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;The API server must support mobile and web clients operating inside mainland China. Direct access to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://&amp;lt;bucket&amp;gt;.s3.ap-east-1.amazonaws.com/... 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is unreliable. Even when it works, the latency is unpredictable.&lt;/p&gt;

&lt;p&gt;However:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The company domain is already approved&lt;/li&gt;
&lt;li&gt;Traffic to this domain is stable&lt;/li&gt;
&lt;li&gt;The API layer can enforce authentication and security checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So instead of exposing S3 directly, the API domain becomes the gateway.&lt;/p&gt;




&lt;h1&gt;
  
  
  Solution Options Considered
&lt;/h1&gt;

&lt;p&gt;To solve the problem of unstable S3 access from mainland China while keeping the company domain approved and trusted, three architectural options were evaluated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CloudFront&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NGINX Reverse Proxy&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each option solves part of the problem, but only one satisfies all requirements with minimal change and cost.&lt;/p&gt;




&lt;h1&gt;
  
  
  Option One: Cloudflare
&lt;/h1&gt;

&lt;p&gt;Cloudflare already sits in front of the API domain, providing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TLS termination&lt;/li&gt;
&lt;li&gt;Global routing&lt;/li&gt;
&lt;li&gt;Edge caching&lt;/li&gt;
&lt;li&gt;DDoS protection&lt;/li&gt;
&lt;li&gt;China friendly stability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cloudflare can proxy requests to S3, but it &lt;strong&gt;cannot&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access private S3 using IAM roles&lt;/li&gt;
&lt;li&gt;Perform backend business logic checks&lt;/li&gt;
&lt;li&gt;Enforce per request authorization&lt;/li&gt;
&lt;li&gt;Keep traffic inside AWS backbone&lt;/li&gt;
&lt;li&gt;Read private S3 objects without presigned URLs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cloudflare Workers can add logic, but they introduce:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New code&lt;/li&gt;
&lt;li&gt;New runtime&lt;/li&gt;
&lt;li&gt;No IAM role support&lt;/li&gt;
&lt;li&gt;No VPC endpoint support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cloudflare is excellent for public static files, but insufficient for private S3 access with custom security checks.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Option Two: CloudFront
&lt;/h1&gt;

&lt;p&gt;CloudFront is AWS’s CDN and can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Map your company domain&lt;/li&gt;
&lt;li&gt;Cache S3 content&lt;/li&gt;
&lt;li&gt;Use Origin Access Control to secure S3&lt;/li&gt;
&lt;li&gt;Improve global routing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, CloudFront cannot natively perform cookie based authorization.&lt;br&gt;&lt;br&gt;
To check cookies, CloudFront requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CloudFront Functions (very limited)&lt;/li&gt;
&lt;li&gt;Lambda@Edge (powerful but complex)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CloudFront also cannot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use IAM roles to read private S3&lt;/li&gt;
&lt;li&gt;Access VPC endpoints&lt;/li&gt;
&lt;li&gt;Run your existing backend logic&lt;/li&gt;
&lt;li&gt;Guarantee optimal China performance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This makes CloudFront significantly complex, and doesn’t support IAM roles for least privilege.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Why CloudFront Cannot Assume an AWS IAM Role
&lt;/h2&gt;

&lt;p&gt;CloudFront cannot assume an AWS IAM role because it is &lt;strong&gt;not a compute service&lt;/strong&gt;. Only compute services such as EC2, Lambda, ECS, and EKS can call STS to assume roles and obtain temporary credentials. CloudFront has no execution environment, no credential provider, and no ability to sign AWS API requests using IAM role credentials.&lt;/p&gt;

&lt;p&gt;Instead, CloudFront uses &lt;strong&gt;Origin Access Control (OAC)&lt;/strong&gt;, which is a fixed CloudFront service identity, not an IAM role. OAC can only sign requests to S3 and cannot access other AWS services, cannot run business logic, and cannot integrate with VPC endpoints.&lt;/p&gt;

&lt;p&gt;Because CloudFront cannot assume IAM roles, it cannot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use IAM role permissions to read private S3&lt;/li&gt;
&lt;li&gt;Access S3 through your VPC endpoint&lt;/li&gt;
&lt;li&gt;Perform authenticated backend logic&lt;/li&gt;
&lt;li&gt;Enforce per user authorization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This limitation is one of the key reasons CloudFront cannot replace an EC2 based NGINX proxy.&lt;/strong&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  Option Three: NGINX Reverse Proxy
&lt;/h1&gt;

&lt;p&gt;NGINX running on EC2 inside AWS provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full control of request logic&lt;/li&gt;
&lt;li&gt;Cookie based authentication&lt;/li&gt;
&lt;li&gt;Business rule checks&lt;/li&gt;
&lt;li&gt;IAM role access to private S3&lt;/li&gt;
&lt;li&gt;VPC endpoint routing&lt;/li&gt;
&lt;li&gt;Zero client side changes&lt;/li&gt;
&lt;li&gt;Zero new AWS services&lt;/li&gt;
&lt;li&gt;Minimal cost&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;NGINX can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serve public files directly&lt;/li&gt;
&lt;li&gt;Serve private files only after validating cookies&lt;/li&gt;
&lt;li&gt;Access S3 privately through AWS backbone&lt;/li&gt;
&lt;li&gt;Enforce least privilege IAM policies&lt;/li&gt;
&lt;li&gt;Keep all traffic internal to AWS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This satisfies all requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;minimal change&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;minimal cost&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;least complexity&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;NGINX becomes the most cost effective and least disruptive solution.&lt;/strong&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  How the NGINX Proxy Works
&lt;/h1&gt;
&lt;h3&gt;
  
  
  1. Path Locations for Public and Private Buckets
&lt;/h3&gt;

&lt;p&gt;NGINX exposes two categories of paths:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/app/upload/public/...  
/app/upload/private/...  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Public files proxy directly.&lt;br&gt;&lt;br&gt;
Private files require cookie checks or business logic before proxying.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Proxy Mapping to S3
&lt;/h3&gt;

&lt;p&gt;NGINX rewrites the incoming path and forwards it to the correct S3 bucket endpoint.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/app/upload/public/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;https://your-public-bucket.s3.ap-east-1.amazonaws.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="s"&gt;your-public-bucket.s3.ap-east-1.amazonaws.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;  

&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/app/upload/private/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;  

    &lt;span class="kn"&gt;if&lt;/span&gt; &lt;span class="s"&gt;(your-checking)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kn"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;403&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;# Remove /app from the path&lt;/span&gt;
    &lt;span class="kn"&gt;rewrite&lt;/span&gt; &lt;span class="s"&gt;^/app/(.*)&lt;/span&gt;$ &lt;span class="n"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="s"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# S3 bucket&lt;/span&gt;
    &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;https://your-private-bucket.s3.ap-east-1.amazonaws.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# Required for S3&lt;/span&gt;
    &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="s"&gt;your-private-bucket.s3.ap-east-1.amazonaws.com&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;h3&gt;
  
  
  3. IAM Role for the NGINX Host
&lt;/h3&gt;

&lt;p&gt;The EC2 instance running NGINX is granted an IAM role with only the required S3 read permissions.&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;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AllowObjectReadWritePublic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Action"&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="s2"&gt;"s3:GetObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"s3:PutObject"&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;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:s3:::your-private-bucket/*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&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;"StringEquals"&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;"aws:RequestedRegion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ap-east-1"&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;h3&gt;
  
  
  4. VPC Endpoint for S3
&lt;/h3&gt;

&lt;p&gt;A Gateway VPC Endpoint ensures all S3 traffic stays inside AWS backbone, improving stability and security:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ensure you are in the &lt;strong&gt;correct AWS Region&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open VPC Console&lt;/strong&gt; : Navigate to the &lt;strong&gt;VPC Dashboard&lt;/strong&gt; in your AWS Management Console.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create Endpoint&lt;/strong&gt; : Click &lt;strong&gt;Endpoints&lt;/strong&gt; in the left sidebar, then click &lt;strong&gt;Create endpoint&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service Category&lt;/strong&gt; : Select &lt;strong&gt;AWS services&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service Name&lt;/strong&gt; : Search for &lt;code&gt;s3&lt;/code&gt; and select the &lt;strong&gt;Gateway&lt;/strong&gt; type (e.g., &lt;code&gt;com.amazonaws.ap-east-1.s3&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPC Selection&lt;/strong&gt; : Choose the specific &lt;strong&gt;VPC&lt;/strong&gt; where your private resources live.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Route Tables&lt;/strong&gt; : Select the &lt;strong&gt;Route Tables&lt;/strong&gt; associated with your private subnets to automatically inject the S3 route.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Policy&lt;/strong&gt; : Leave it as &lt;strong&gt;Full Access&lt;/strong&gt; for standard setups, or attach a custom IAM policy to restrict bucket access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finish&lt;/strong&gt; : Click &lt;strong&gt;Create endpoint&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The vpc policy:&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;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&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="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"nginx2S3ReadOnly"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"Action"&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="s2"&gt;"s3:GetObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"s3:ListBucket"&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;"Resource"&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="s2"&gt;"arn:aws:s3:::your-private-bucket"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:s3:::your-private-bucket/*"&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;"Condition"&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;"ArnEquals"&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;"aws:PrincipalArn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::your-aws-id:role/ec2-production"&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;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;h1&gt;
  
  
  Results
&lt;/h1&gt;

&lt;h3&gt;
  
  
  1. All S3 Files Accessible Through the Company Domain
&lt;/h3&gt;

&lt;p&gt;The app continues using the same URL pattern with no changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Private Bucket Security Without Presigned URLs
&lt;/h3&gt;

&lt;p&gt;NGINX performs the authentication and authorization checks.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. All File Transfers Stay Inside AWS Backbone
&lt;/h3&gt;

&lt;p&gt;The VPC endpoint ensures no public internet routing.&lt;/p&gt;




&lt;h1&gt;
  
  
  Comparison Table
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Strengths&lt;/th&gt;
&lt;th&gt;Limitations&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloudflare&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stable global routing, China friendly, SSL handled, caching, DDoS protection&lt;/td&gt;
&lt;td&gt;Cannot access private S3 via IAM, cannot run backend logic, cannot keep traffic inside AWS backbone&lt;/td&gt;
&lt;td&gt;Public static files, global CDN&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CloudFront&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AWS native CDN, OAC for S3, caching, custom domain&lt;/td&gt;
&lt;td&gt;Cannot assume IAM roles, cookie checks require Lambda@Edge, no VPC endpoint routing, more cost and complexity&lt;/td&gt;
&lt;td&gt;Public S3 distribution with CDN caching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NGINX Reverse Proxy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;IAM role access, VPC endpoint routing, custom security checks, simple logic, no client changes&lt;/td&gt;
&lt;td&gt;No global CDN, relies on Cloudflare for edge routing&lt;/td&gt;
&lt;td&gt;Mixed public and private S3 access with business logic&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  Key Takeaways
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;NGINX is the only option that supports IAM role access&lt;/strong&gt; , which is essential for secure private S3 reads without presigned URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudFront cannot assume IAM roles&lt;/strong&gt; , making it unsuitable for private S3 access with backend logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare provides global routing and SSL&lt;/strong&gt; , but cannot enforce your business logic or access S3 privately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPC endpoints keep all S3 traffic inside AWS&lt;/strong&gt; , improving stability for mainland China and eliminating public internet exposure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This architecture requires minimal changes to the application&lt;/strong&gt; , making it ideal for production systems that cannot afford disruption.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NGINX plus Cloudflare&lt;/strong&gt; gives you the best of both worlds: global routing at the edge and secure, controlled access inside AWS.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;About the Author&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Jonathan Wong&lt;/em&gt; is an IT and AI consultant with 20+ years of experience leading engineering teams across Vancouver and Hong Kong. He specializes in modernizing legacy platforms, cloud security, and building AI-ready systems for startups and large enterprises while advising leadership on using strategic technology to drive business growth.&lt;br&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://www.linkedin.com/in/jonanata/" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://blog.jonanata.com/security-meets-reality-the-great-firewall/" rel="noopener noreferrer"&gt;Security Meets Reality: The Great Firewall&lt;/a&gt; appeared first on &lt;a href="https://blog.jonanata.com" rel="noopener noreferrer"&gt;Behind the Build&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Not Every Magic Wand Works for Every Company: Cloudflare, AI Restructuring, and the Elder Wand Problem</title>
      <dc:creator>Jonathan Wong</dc:creator>
      <pubDate>Sat, 16 May 2026 04:27:35 +0000</pubDate>
      <link>https://dev.to/jonathan78wong/not-every-magic-wand-works-for-every-company-cloudflare-ai-restructuring-and-the-elder-wand-39lp</link>
      <guid>https://dev.to/jonathan78wong/not-every-magic-wand-works-for-every-company-cloudflare-ai-restructuring-and-the-elder-wand-39lp</guid>
      <description>&lt;p&gt;When Cloudflare announced strong quarterly results, few expected what came next:&lt;br&gt;&lt;br&gt;
a &lt;strong&gt;25 percent stock drop in a single day&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Revenue was up.&lt;br&gt;&lt;br&gt;
Margins were up.&lt;br&gt;&lt;br&gt;
Customer count was up.&lt;/p&gt;

&lt;p&gt;And yet the market reacted as if something had gone terribly wrong.&lt;/p&gt;

&lt;p&gt;The reason wasn’t the numbers.&lt;br&gt;&lt;br&gt;
It was the &lt;strong&gt;story&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cloudflare positioned its restructuring as an &lt;strong&gt;AI‑first transformation&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1,100 roles removed&lt;/li&gt;
&lt;li&gt;internal AI usage up 600 percent&lt;/li&gt;
&lt;li&gt;AI agents deployed across engineering, finance, HR, and GTM&lt;/li&gt;
&lt;li&gt;a new “agentic operating model”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The intention was clear:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI would make Cloudflare faster, leaner, and more scalable.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But the market didn’t buy it.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Elder Wand Problem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In &lt;em&gt;Harry Potter&lt;/em&gt;, the Elder Wand is described as the most powerful wand ever created. It is a gift from Death.&lt;br&gt;&lt;br&gt;
But the wizard who believes it is a universal solution is usually the one who dies first.&lt;/p&gt;

&lt;p&gt;Why?&lt;br&gt;&lt;br&gt;
Because the wand is powerful, but &lt;strong&gt;context‑dependent&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
It obeys rules the wizard doesn’t fully understand.&lt;br&gt;&lt;br&gt;
It backfires when used blindly.&lt;br&gt;&lt;br&gt;
And it punishes those who mistake power for inevitability.&lt;/p&gt;

&lt;p&gt;Cloudflare’s AI restructuring followed the same pattern.&lt;/p&gt;

&lt;p&gt;AI is powerful.&lt;br&gt;&lt;br&gt;
AI is transformative.&lt;br&gt;&lt;br&gt;
AI can reshape workflows.&lt;/p&gt;

&lt;p&gt;But &lt;strong&gt;AI is not a universal wand&lt;/strong&gt; , and treating it like one can be dangerous, especially for a mid‑cap tech company with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;slowing enterprise sales&lt;/li&gt;
&lt;li&gt;high valuation&lt;/li&gt;
&lt;li&gt;execution risk&lt;/li&gt;
&lt;li&gt;no AI‑product revenue engine&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cloudflare tried to wield AI like the Elder Wand.&lt;br&gt;&lt;br&gt;
The market reacted like the wand had backfired.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What the ISACA Vancouver Speakers Revealed and Why It Matters&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;At the &lt;a href="https://blog.jonanata.com/iec-bc-x-isaca-vancouver-cybersecurity-networking-event/" rel="noopener noreferrer"&gt;ISACA Vancouver event&lt;/a&gt;, speakers from both multinational corporations and local SMEs said the same thing:&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;“We are adopting AI in our work, but we are not restructuring our companies because of it. That is too risky restructuring teams too quickly around AI can create instability and unclear ownership” *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;They were clear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI is a tool, not a new org chart&lt;/li&gt;
&lt;li&gt;AI improves workflows, not reporting lines&lt;/li&gt;
&lt;li&gt;AI accelerates teams, but doesn’t replace them&lt;/li&gt;
&lt;li&gt;AI adoption should be incremental, not structural&lt;/li&gt;
&lt;li&gt;AI should reduce friction, not create uncertainty&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is exactly the opposite of Cloudflare’s approach.&lt;/p&gt;

&lt;p&gt;Cloudflare didn’t just adopt AI.&lt;br&gt;&lt;br&gt;
It &lt;strong&gt;reorganized the company around AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For MNCs and SMEs, this is the line they refuse to cross.&lt;/p&gt;

&lt;p&gt;Because they know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI is still evolving&lt;/li&gt;
&lt;li&gt;AI reliability varies by domain&lt;/li&gt;
&lt;li&gt;AI governance is immature&lt;/li&gt;
&lt;li&gt;AI introduces new risks&lt;/li&gt;
&lt;li&gt;AI requires human oversight&lt;/li&gt;
&lt;li&gt;AI is not a stable foundation for org design&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI is powerful, but not stable enough to restructure your company around it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The ISACA speakers understood this.&lt;br&gt;&lt;br&gt;
Investors understood this.&lt;br&gt;&lt;br&gt;
Cloudflare underestimated this.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why the Market Punished Cloudflare&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Cloudflare’s stock didn’t fall because of AI.&lt;br&gt;&lt;br&gt;
It fell because of &lt;strong&gt;misalignment&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI efficiency ≠ AI revenue&lt;/li&gt;
&lt;li&gt;AI restructuring ≠ AI growth&lt;/li&gt;
&lt;li&gt;AI agents ≠ enterprise sales&lt;/li&gt;
&lt;li&gt;AI adoption ≠ investor confidence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And here is the part you wanted added — the core investor logic:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Investors want AI to generate new revenue, not justify cost‑cutting.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Wall Street rewards companies that use AI to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create new products&lt;/li&gt;
&lt;li&gt;open new markets&lt;/li&gt;
&lt;li&gt;expand customer value&lt;/li&gt;
&lt;li&gt;increase consumption&lt;/li&gt;
&lt;li&gt;grow top‑line revenue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Microsoft, Google, Meta, and even AWS get rewarded because their AI stories are &lt;strong&gt;revenue stories&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cloudflare’s AI story was an &lt;strong&gt;efficiency story&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Investors don’t pay a premium for efficiency.&lt;br&gt;&lt;br&gt;
They pay a premium for &lt;strong&gt;growth&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cloudflare tried to tell a story of acceleration.&lt;br&gt;&lt;br&gt;
Investors heard a story of instability.&lt;/p&gt;

&lt;p&gt;Cloudflare tried to show strength.&lt;br&gt;&lt;br&gt;
Investors saw execution risk.&lt;/p&gt;

&lt;p&gt;Cloudflare tried to use AI as a magic wand.&lt;br&gt;&lt;br&gt;
Investors saw the Elder Wand.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What Actually Matters for Your Business&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The lesson is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI is not a universal solution.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI is not an org chart.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI is a tool. Powerful, but context‑dependent.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What matters is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Revenue clarity&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customer value&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operational stability&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Team alignment&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sustainable execution&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incremental adoption&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clear governance&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI that grows revenue, not just cuts cost&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI should &lt;strong&gt;enhance&lt;/strong&gt; your business, not &lt;strong&gt;redefine&lt;/strong&gt; it overnight.&lt;/p&gt;

&lt;p&gt;The companies at ISACA Vancouver event understood this.&lt;br&gt;&lt;br&gt;
The market understood this.&lt;br&gt;&lt;br&gt;
Cloudflare learned it the hard way.&lt;/p&gt;

&lt;p&gt;Because in business, as in the Deathly Hallows, &lt;strong&gt;the most powerful wand can be the most dangerous when misunderstood.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;About the Author&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Jonathan Wong&lt;/em&gt; is an IT and AI consultant with 20+ years of experience leading engineering teams across Vancouver and Hong Kong. He specializes in modernizing legacy platforms, cloud security, and building AI-ready systems for startups and large enterprises while advising leadership on using strategic technology to drive business growth.&lt;br&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://www.linkedin.com/in/jonanata/" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://blog.jonanata.com/not-every-magic-wand-works-for-every-company-cloudflare-ai-restructuring-and-the-elder-wand-problem/" rel="noopener noreferrer"&gt;Not Every Magic Wand Works for Every Company: Cloudflare, AI Restructuring, and the Elder Wand Problem&lt;/a&gt; appeared first on &lt;a href="https://blog.jonanata.com" rel="noopener noreferrer"&gt;Behind the Build&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>leadership</category>
      <category>management</category>
    </item>
    <item>
      <title>When Invisible Tasks Break Projects: A story of chaos, security, and the power of a shared language</title>
      <dc:creator>Jonathan Wong</dc:creator>
      <pubDate>Thu, 14 May 2026 00:52:45 +0000</pubDate>
      <link>https://dev.to/jonathan78wong/when-invisible-tasks-break-projects-a-story-of-chaos-security-and-the-power-of-a-shared-language-3dl8</link>
      <guid>https://dev.to/jonathan78wong/when-invisible-tasks-break-projects-a-story-of-chaos-security-and-the-power-of-a-shared-language-3dl8</guid>
      <description>&lt;p&gt;&lt;a href="https://blog.jonanata.com/project-management-story-leading-a-cross-regional-cloud-migration/" rel="noopener noreferrer"&gt;It was the project where I turned an original six‑month engineering estimate into a ten‑week delivery.&lt;/a&gt;&lt;br&gt;&lt;br&gt;
The project did not collapse in one dramatic moment. It unravelled quietly, through a thousand tiny misunderstandings.&lt;/p&gt;

&lt;p&gt;Every day the workflow felt more chaotic. Product features were told verbally to individual engineers. Requirements lived in scattered chats, calls, and assumptions. No one had the full picture. Everyone was busy, yet progress felt strangely unpredictable.&lt;/p&gt;

&lt;p&gt;More meetings were added to fix the communication problem.&lt;br&gt;&lt;br&gt;
But more meetings only made things worse.&lt;/p&gt;

&lt;p&gt;The real issue was not the number of meetings.&lt;br&gt;&lt;br&gt;
The real issue was that the teams did not share a common language.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Invisible Task That Triggered Everything&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Security was the perfect example of this invisible problem.&lt;/p&gt;

&lt;p&gt;The product team knew security mattered, but they were not sure whether the timeline was worth it.&lt;br&gt;&lt;br&gt;
The engineering team followed best practices, but they could not explain the business reasons behind the work.&lt;/p&gt;

&lt;p&gt;Security tasks were invisible.&lt;br&gt;&lt;br&gt;
You could not see progress.&lt;br&gt;&lt;br&gt;
You could not demo them.&lt;br&gt;&lt;br&gt;
You could not screenshot them.&lt;/p&gt;

&lt;p&gt;And because they were invisible, they created more inquiries, more conflicts, and less teamwork.&lt;br&gt;&lt;br&gt;
Information broke apart. Communication channels fractured.&lt;br&gt;&lt;br&gt;
Everyone was working, but no one was aligned.&lt;/p&gt;

&lt;p&gt;The workflow became a textbook communication breakdown: ineffective communication channels, uncontrolled scope change, and requirements shifting informally from one conversation to the next.&lt;/p&gt;

&lt;p&gt;The result was predictable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fragmented workflow&lt;/li&gt;
&lt;li&gt;No shared understanding&lt;/li&gt;
&lt;li&gt;Unexpected output&lt;/li&gt;
&lt;li&gt;Not the product the business expected&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When communication is fragmented and requirements are unclear, teams fall into a &lt;strong&gt;repeating cycle of rework&lt;/strong&gt;. A well‑known failure pattern in project delivery.&lt;br&gt;&lt;br&gt;
The team fell into a classic rework loop.  &lt;/p&gt;

&lt;p&gt;A classic communication failure&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Turning Point&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Introducing a common language&lt;/p&gt;

&lt;p&gt;The breakthrough came when I stopped trying to fix communication with more meetings and instead aligned on a shared language. Security became the anchor.&lt;/p&gt;

&lt;p&gt;I introduced the classic CIA triad as the foundation for understanding why security tasks exist.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confidentiality&lt;/li&gt;
&lt;li&gt;Integrity&lt;/li&gt;
&lt;li&gt;Availability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Suddenly, security was no longer a mysterious engineering ritual.&lt;br&gt;&lt;br&gt;
It became a business concept with clear meaning and impact.&lt;/p&gt;

&lt;p&gt;But the real clarity came when I explained where security tasks actually come from.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Four Layers Behind Every Security Task&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Why these tasks exist long before a developer writes a single line of code&lt;/p&gt;

&lt;p&gt;Security work does not appear randomly.&lt;br&gt;&lt;br&gt;
It flows through a predictable chain:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Law → Standard → Company Policy → Procedure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the business team understood this chain, the invisible became visible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Law&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The highest level of obligation&lt;br&gt;&lt;br&gt;
Laws define what must be protected. In the United States, examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HIPAA for healthcare&lt;/li&gt;
&lt;li&gt;GLBA for financial institutions&lt;/li&gt;
&lt;li&gt;SOX for public companies&lt;/li&gt;
&lt;li&gt;State privacy laws like CCPA&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Laws do not tell engineers how to build systems.&lt;br&gt;&lt;br&gt;
They simply say: “You must protect this data.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Standard&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Industry expectations that translate law into practice&lt;br&gt;&lt;br&gt;
Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ISO 27001&lt;/li&gt;
&lt;li&gt;SOC 2&lt;/li&gt;
&lt;li&gt;PCI DSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Standards define what “good security” looks like.&lt;br&gt;&lt;br&gt;
They turn legal obligations into &lt;strong&gt;auditable expectations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Company Policy&lt;/strong&gt; :&lt;br&gt;&lt;br&gt;
Leadership’s commitment to the rules&lt;br&gt;&lt;br&gt;
Policies translate standards into internal rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All production systems must use multi factor authentication&lt;/li&gt;
&lt;li&gt;All customer data must be encrypted&lt;/li&gt;
&lt;li&gt;All access must follow least privilege&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Policies define what the company promises to do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Procedure&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Where engineers turn policy into tasks&lt;br&gt;&lt;br&gt;
Procedures are the step‑by‑step instructions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to configure MFA&lt;/li&gt;
&lt;li&gt;How to implement micro segmentation&lt;/li&gt;
&lt;li&gt;How to set up audit logging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where invisible tasks live.&lt;br&gt;&lt;br&gt;
These were non‑functional requirements, essential, but invisible to stakeholders, and therefore constantly underestimated.&lt;/p&gt;

&lt;p&gt;A developer sees “Implement MFA” or “Break price query into server → proxy → database,” but behind each task is the full chain:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Procedure ← Policy ← Standard ← Law&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the business team saw this, the task was no longer invisible.&lt;br&gt;&lt;br&gt;
It became logical, necessary, and aligned with business value.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Case 1: More rights and more impact require more audit&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I explained it through real life.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One factor authentication: password for your personal email&lt;/li&gt;
&lt;li&gt;Two factor authentication: staff password and one-time device token for company restricted documents &lt;/li&gt;
&lt;li&gt;Three factor authentication: passport, token, and face photo at the airport &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The business team initially felt this was bad user experience and extra development time.&lt;br&gt;&lt;br&gt;
But once they understood the principle: more rights and more impact require more audit. The conversation changed.&lt;/p&gt;

&lt;p&gt;Security was no longer a blocker.&lt;br&gt;&lt;br&gt;
It became a business safeguard.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Case 2: Micro segmentation and least privilege&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I explained why a simple price query required three components: server, proxy, and database.&lt;/p&gt;

&lt;p&gt;The business team asked why we could not just query directly to save time and improve speed.&lt;/p&gt;

&lt;p&gt;Because micro segmentation protects the system.&lt;br&gt;&lt;br&gt;
Because least privilege prevents lateral movement.&lt;br&gt;&lt;br&gt;
Because shortcuts today become vulnerabilities tomorrow.&lt;/p&gt;

&lt;p&gt;Once the business team understood this, they saw the business value behind the architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Result&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Alignment, clarity, and teamwork&lt;/p&gt;

&lt;p&gt;With a shared language, everything changed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fewer inquiries&lt;/li&gt;
&lt;li&gt;Fewer conflicts&lt;/li&gt;
&lt;li&gt;More teamwork&lt;/li&gt;
&lt;li&gt;Less fragmentation&lt;/li&gt;
&lt;li&gt;More predictable delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security tasks were no longer invisible.&lt;br&gt;&lt;br&gt;
They were understood, valued, and properly planned.&lt;/p&gt;

&lt;p&gt;We documented everything in a &lt;strong&gt;Confluence space&lt;/strong&gt;. This became our knowledge management system, the structured way to reduce fragmentation and prevent repeated misunderstandings.&lt;br&gt;&lt;br&gt;
Teams added comments, shared insights, and reduced knowledge conflicts.&lt;br&gt;&lt;br&gt;
Security tasks were linked to business concepts, not just technical checklists.&lt;/p&gt;

&lt;p&gt;Only after this alignment did meetings become productive.&lt;br&gt;&lt;br&gt;
Because now everyone spoke the same language.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Key Takeaways&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Invisible tasks do not break projects. Misunderstood tasks do.&lt;/li&gt;
&lt;li&gt;When teams lack a shared mental model, even simple work becomes chaotic. &lt;/li&gt;
&lt;li&gt;When teams align on concepts, even complex work becomes manageable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security was just the example.&lt;br&gt;&lt;br&gt;
The real solution was alignment.&lt;/p&gt;

&lt;p&gt;And once we aligned, the project finally moved forward with clarity and confidence.&lt;/p&gt;




&lt;h1&gt;
  
  
  What’s Next
&lt;/h1&gt;

&lt;p&gt;This article showed how invisible tasks, especially security work, can quietly break a project when communication is fragmented and teams do not share a common language. Once we aligned on a shared mental model, the chaos settled, the rework loop stopped, and the workflow finally became predictable again.&lt;/p&gt;

&lt;p&gt;In the next part of this series, I will continue the story by walking through this real project from my past experience. I will explain how standup meetings, a well designed Confluence space, and a disciplined Jira workflow worked together to solve the same communication problems described here. It will be a practical continuation of this journey, showing how alignment, documentation, and predictable processes turned a fragmented project into a high performing delivery engine.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;About the Author&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Jonathan Wong&lt;/em&gt; is an IT and AI consultant with 20+ years of experience leading engineering teams across Vancouver and Hong Kong. He specializes in modernizing legacy platforms, cloud security, and building AI-ready systems for startups and large enterprises while advising leadership on using strategic technology to drive business growth.&lt;br&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://www.linkedin.com/in/jonanata/" rel="noopener noreferrer"&gt;Connect with me on LinkedIn&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://blog.jonanata.com/when-invisible-tasks-break-projects-a-story-of-chaos-security-and-the-power-of-a-shared-language/" rel="noopener noreferrer"&gt;When Invisible Tasks Break Projects: A story of chaos, security, and the power of a shared language&lt;/a&gt; appeared first on &lt;a href="https://blog.jonanata.com" rel="noopener noreferrer"&gt;Behind the Build&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>management</category>
    </item>
  </channel>
</rss>
