<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Agent Platform on William Denniss</title>
    <link>https://dev.wdenniss.com/ap/</link>
    <description>Recent content in Agent Platform on William Denniss</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 20 Jun 2026 20:39:04 +0000</lastBuildDate>
    <atom:link href="https://dev.wdenniss.com/ap/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Containerizing an ADK agent</title>
      <link>https://dev.wdenniss.com/ap/3-containerizing/3.1-adk-container/</link>
      <pubDate>Sat, 20 Jun 2026 20:39:04 +0000</pubDate>
      <guid>https://dev.wdenniss.com/ap/3-containerizing/3.1-adk-container/</guid>
      <description>&lt;p&gt;So far we’ve run the trading agent two ways: locally with &lt;code&gt;adk run&lt;/code&gt;, and &lt;a href=&#34;https://dev.wdenniss.com/ap/1-agent/1.2-deploy-to-ap-runtime/&#34;&gt;deployed to Agent Platform runtime&lt;/a&gt; with a little Python script that packages the code and hosts it for us. Both are handy, but in each case something else is deciding how your agent gets hosted. Sometimes you just want a plain container — one image you can run on your laptop today, and on Cloud Run, GKE, or Agent Platform runtime (in bring-your-own-container mode) tomorrow. Same artifact, runs anywhere Docker does.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Agent Container for Agent Platform runtime</title>
      <link>https://dev.wdenniss.com/ap/3-containerizing/3.5-container-for-ap-runtime/</link>
      <pubDate>Mon, 15 Jun 2026 18:39:04 +0000</pubDate>
      <guid>https://dev.wdenniss.com/ap/3-containerizing/3.5-container-for-ap-runtime/</guid>
      <description></description>
    </item>
    <item>
      <title>Deploy Agent Container to Agent Platform runtime</title>
      <link>https://dev.wdenniss.com/ap/3-containerizing/3.6-deploy-container-to-ap-runtime/</link>
      <pubDate>Mon, 15 Jun 2026 18:39:04 +0000</pubDate>
      <guid>https://dev.wdenniss.com/ap/3-containerizing/3.6-deploy-container-to-ap-runtime/</guid>
      <description></description>
    </item>
    <item>
      <title>Deploy an ADK Agent container to Cloud Run</title>
      <link>https://dev.wdenniss.com/ap/3-containerizing/3.3-deploy-to-cloud-run/</link>
      <pubDate>Mon, 15 Jun 2026 18:39:04 +0000</pubDate>
      <guid>https://dev.wdenniss.com/ap/3-containerizing/3.3-deploy-to-cloud-run/</guid>
      <description></description>
    </item>
    <item>
      <title>Deploy an ADK Agent container to GKE</title>
      <link>https://dev.wdenniss.com/ap/3-containerizing/3.4-deploy-to-gke/</link>
      <pubDate>Mon, 15 Jun 2026 18:39:04 +0000</pubDate>
      <guid>https://dev.wdenniss.com/ap/3-containerizing/3.4-deploy-to-gke/</guid>
      <description></description>
    </item>
    <item>
      <title>Deterministic memories</title>
      <link>https://dev.wdenniss.com/ap/2-memories/2.2-deterministic-memories/</link>
      <pubDate>Mon, 15 Jun 2026 18:37:26 +0000</pubDate>
      <guid>https://dev.wdenniss.com/ap/2-memories/2.2-deterministic-memories/</guid>
      <description>&lt;p&gt;The Trading agent we deployed earlier will automatically have session persistence when deployed on Agent Platform. You can test this by asking it a day later “What trades did you execute” from the same session that you executed the trades from. The full conversation history is preserved, even while the agent is suspended (you’re not paying for it to run continuously).&lt;/p&gt;&#xA;&lt;p&gt;You can also inspect the saved session data from the console.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating an Agent Platform resource identifier</title>
      <link>https://dev.wdenniss.com/ap/3-containerizing/3.2-creating-an-ap-resource/</link>
      <pubDate>Tue, 09 Jun 2026 13:54:14 -0700</pubDate>
      <guid>https://dev.wdenniss.com/ap/3-containerizing/3.2-creating-an-ap-resource/</guid>
      <description>&lt;p&gt;To use Agent Platform services like Memory Bank, and Sessions from other environments, you need to first create a resource that is currently known as an “agent engine”.&lt;/p&gt;&#xA;&lt;p&gt;Note: if you are familiar with the Python ADK libraries, you can follow &lt;a href=&#34;https://clouddocs.devsite.corp.google.com/gemini-enterprise-agent-platform/scale/memory-bank/setup#setup-sdk-client&#34;&gt;these instructions&lt;/a&gt; instead, to create an instance via the SDK.&lt;/p&gt;&#xA;&lt;p&gt;Here’s a single API call to create a resource identifier that you can use right away:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 1. Set your variables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PROJECT_ID&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;gcloud config get-value project&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LOCATION&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;us-west1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Replace with your target region&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RESOURCE_DISPLAY_NAME&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;My Memory Bank&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 2. Execute the REST API request&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -X POST &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization: Bearer &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;gcloud auth print-access-token&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;LOCATION&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;-aiplatform.googleapis.com/v1/projects/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;PROJECT_ID&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/locations/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;LOCATION&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/reasoningEngines&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -d &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    \&amp;#34;displayName\&amp;#34;: \&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;RESOURCE_DISPLAY_NAME&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;\&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  }&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The creation returns immediately with an operation id, and executes async, you can query the API with the operation, or look up the Deployments UI to get the resource.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Agent memories with ADK</title>
      <link>https://dev.wdenniss.com/ap/2-memories/2.1-add-memories/</link>
      <pubDate>Mon, 01 Jun 2026 16:16:44 -0700</pubDate>
      <guid>https://dev.wdenniss.com/ap/2-memories/2.1-add-memories/</guid>
      <description>&lt;p&gt;ADK Agents will automatically have &lt;em&gt;session&lt;/em&gt; persistence when deployed on Agent Platform. You can test this by asking follow up questions in the running sessions like “What trades did you execute?”. The full conversation history is preserved, even while the agent is suspended (you’re not paying for it to run continuously), and is visibile in the &lt;a href=&#34;https://console.cloud.google.com/agent-platform/sessions&#34;&gt;console&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When you start a new session however, that context is gone. It&amp;rsquo;s common to want some level of&#xA;memory and personalization for an agent. For example, if the user says &amp;ldquo;I never want to&#xA;buy ___ stock&amp;rdquo;, ideally we would remember this and factor that in to trading decisions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deploy an ADK agent to Agent Platform Runtime</title>
      <link>https://dev.wdenniss.com/ap/1-agent/1.2-deploy-to-ap-runtime/</link>
      <pubDate>Fri, 15 May 2026 11:03:02 -0700</pubDate>
      <guid>https://dev.wdenniss.com/ap/1-agent/1.2-deploy-to-ap-runtime/</guid>
      <description>&lt;p&gt;In my &lt;a href=&#34;https://dev.wdenniss.com/ap/1-agent/1.1-create-an-adk-agent/&#34;&gt;previous post&lt;/a&gt;, we created an agent with ADK and ran it locally. The next step is to deploy it to Agent Platform runtime.&lt;/p&gt;&#xA;&lt;p&gt;You can deploy to the runtime using a Python script that imports your agent, and configures the remote resource, and performs the deployment. This approach serializes your live object graph which is simple, but not suitable for production. We&amp;rsquo;ll cover production hardening later.&lt;/p&gt;&#xA;&lt;p&gt;Create the following script in the root project folder (the one containing &lt;code&gt;trading_agent&lt;/code&gt; from the previous example). There’s nothing to edit in it: the project ID is read from your environment (via Application Default Credentials), and the staging bucket name is derived from it (&lt;code&gt;gs://${PROJECT_ID}-trading-agent&lt;/code&gt;), with the bucket created on first run if it doesn’t exist. Just point gcloud at the right project first:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a stock-trading agent with ADK</title>
      <link>https://dev.wdenniss.com/ap/1-agent/1.1-create-an-adk-agent/</link>
      <pubDate>Wed, 22 Apr 2026 11:17:03 -0700</pubDate>
      <guid>https://dev.wdenniss.com/ap/1-agent/1.1-create-an-adk-agent/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://adk.dev/&#34;&gt;Agent Development Kit&lt;/a&gt; (ADK) is Google’s open-source Python framework for building AI agents. You write the agent’s logic and the tools it can call, and ADK handles orchestrating everything — with evaluation and deployment built in too.&lt;/p&gt;&#xA;&lt;p&gt;I wanted a slightly more interesting app than Hello World to exercise more parts of the platform, so I figured I’d write a little stock trading agent that applies a sentiment momentum trading strategy. We’ll use ADK and the Gemini API to execute trades on &lt;a href=&#34;https://alpaca.markets/&#34;&gt;Alpaca&lt;/a&gt;, chosen for its REST API and free paper-trading account.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
