<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>Jesse Liberty - Silverlight Geek</title>
	<atom:link href="https://jesseliberty.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://jesseliberty.com</link>
	<description>More Signal - Less Noise</description>
	<lastBuildDate>Sun, 30 Aug 2026 15:24:49 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://jesseliberty.com/wp-content/uploads/2026/07/cropped-Square-Headshot-32x32.jpg</url>
	<title>Jesse Liberty</title>
	<link>https://jesseliberty.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>RAG in Microsoft Agent Framework – Overview</title>
		<link>https://jesseliberty.com/2026/08/30/rag-in-microsoft-agent-framework-overview/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Sun, 30 Aug 2026 15:24:47 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13571</guid>

					<description><![CDATA[Microsoft’s Agent Framework treats retrieval as a first‑class capability so agents can fetch only what they need (or always fetch), attach source metadata, and call search as a tool during reasoning. The result: more efficient, auditable, and controllable Retrieval‑Augmented Generation &#8230; <a href="https://jesseliberty.com/2026/08/30/rag-in-microsoft-agent-framework-overview/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Microsoft’s Agent Framework treats retrieval as a first‑class capability so agents can fetch only what they need (or always fetch), attach source metadata, and call search as a tool during reasoning. The result: more efficient, auditable, and controllable <strong>Retrieval‑Augmented Generation </strong>(RAG) for production assistants.</p>



<figure class="wp-block-image size-large is-resized"><img fetchpriority="high" decoding="async" width="552" height="800" src="https://jesseliberty.com/wp-content/uploads/2026/08/RAG-boy-1-552x800.png" alt="" class="wp-image-13572" style="width:236px;height:auto" srcset="https://jesseliberty.com/wp-content/uploads/2026/08/RAG-boy-1-552x800.png 552w, https://jesseliberty.com/wp-content/uploads/2026/08/RAG-boy-1-207x300.png 207w, https://jesseliberty.com/wp-content/uploads/2026/08/RAG-boy-1-104x150.png 104w, https://jesseliberty.com/wp-content/uploads/2026/08/RAG-boy-1.png 638w" sizes="(max-width: 552px) 100vw, 552px" /></figure>



<h2 class="wp-block-heading">tl;dr</h2>



<ul class="wp-block-list">
<li>Microsoft Agent Framework implements RAG via TextSearchProvider (an AIContextProvider) and a Semantic Kernel bridge to many vector stores.</li>



<li>Two retrieval modes: BeforeAIInvoke (automatic injection) and OnDemandFunctionCalling (agent calls search as a tool).</li>



<li>Recommended starting defaults: top_k = 3–5, chunk size ≈ 500–1,000 characters with 10–20% overlap, and prefer OnDemandFunctionCalling for cost/latency control.</li>



<li>Key production concerns: chunking, metadata for citations, latency and cost management, freshness, security and telemetry.</li>
</ul>



<span id="more-13571"></span>



<p class="wp-block-paragraph"><strong>Key terms </strong></p>



<ul class="wp-block-list">
<li>AIContextProvider: a component that supplies contextual data to an agent before the model is invoked. TextSearchProvider implements retrieval as an AIContextProvider.</li>



<li>Tool / Function calling: exposes actions (search, API calls) as callable functions the agent can invoke on demand during reasoning. The TextSearchProvider can be advertised as such (OnDemandFunctionCalling).</li>



<li>VectorStore / TextSearchStore: VectorStore holds embeddings and indexes; TextSearchStore is a convenience schema for text chunks + metadata built on a VectorStore.</li>
</ul>



<p class="wp-block-paragraph"><strong>Core components </strong></p>



<ul class="wp-block-list">
<li>VectorStore: stores embeddings + metadata. Backends supported via Semantic Kernel include InMemory, Qdrant, Pinecone, Redis, Weaviate, Azure AI Search, etc.</li>



<li>TextSearchStore: wraps a VectorStore with a text‑centric schema (collectionName, namespace, vector dimensions, chunk metadata).</li>



<li>TextSearchProvider: the AIContextProvider that performs searches and either injects results or exposes search as a callable tool.</li>



<li>Kernel bridge: converts Semantic Kernel search functions into Agent Framework tools so the same agent logic works across backends.</li>



<li>Agent / AgentThread: the runtime that combines user messages, context providers, tools, and the LLM to produce grounded responses.</li>
</ul>



<p class="wp-block-paragraph">How RAG is implemented — simple flow<br />1) Index your docs into a VectorStore:</p>



<ul class="wp-block-list">
<li>Generate embeddings (Azure OpenAI, OpenAI, etc.) and store vectors with metadata (source URL, chunk id, section).<br />2) Wrap the VectorStore in a TextSearchStore (choose collectionName, namespaces).<br />3) Create a TextSearchProvider backed by the TextSearchStore and add it to the agent thread’s AIContextProviders.<br />4) Choose SearchTime:</li>



<li>BeforeAIInvoke (default): run searches automatically before each model call and inject the top results into the prompt.</li>



<li>OnDemandFunctionCalling: advertise search as a callable tool and let the agent call it while reasoning.<br />5) Run the agent: retrieved text is combined with the prompt and sent to the LLM; results can include source metadata for inline citations.</li>
</ul>



<p class="wp-block-paragraph"><strong>Injection mechanics — what actually gets passed to the model</strong></p>



<ul class="wp-block-list">
<li>In BeforeAIInvoke mode, the provider runs a vector search (by default top_k hits) and concatenates the retrieved chunks into the agent’s context. That context is typically appended as extra system/assistant content and is subject to truncation/prioritization to respect the model’s context window.</li>



<li>In OnDemandFunctionCalling mode, the search appears as a callable tool; the LLM receives the tool’s output (chunks + metadata) only when the agent invokes the tool.</li>



<li>Retrieved results include metadata (source URL, document id, chunk id, score). Use that metadata for citations and audit trails.</li>



<li>You control ranking limits and filtering via TextSearchProviderOptions (top_k, namespaces, recency filters, message memory limits).</li>
</ul>



<p class="wp-block-paragraph"><strong>Defaults and practical parameter guidance</strong></p>



<ul class="wp-block-list">
<li>top_k (number of chunks returned): start with 3–5. More adds context but increases token use and noise.</li>



<li>Chunk size: aim for 500–1,000 characters per chunk (roughly 75–200 tokens). This balances retrieval granularity and coherent passages. If you prefer token‑based chunks, 200–500 tokens is a reasonable upper bound for longer passages.</li>



<li>Overlap: 10–20% overlap between adjacent chunks helps prevent losing relevant sentence boundaries.</li>



<li>Relevance filtering: use namespace/collectionName to scope queries (multi‑tenant or multi‑corpus setups).</li>



<li>Embedding model: choose a semantic embedding suitable for your domain; embedding quality directly affects retrieval relevance.</li>
</ul>



<p class="wp-block-paragraph"><strong>BeforeAIInvoke vs OnDemandFunctionCalling — choose by use case</strong></p>



<ul class="wp-block-list">
<li>BeforeAIInvoke (automatic):</li>



<li>Best when almost every user query must be grounded (e.g., compliance answers).</li>



<li>Simpler to reason about: search runs, results are always available to the model.</li>



<li>Downsides: higher cost and possible token bloat.</li>



<li>Trace: user query -> provider runs search -> top_k chunks injected -> model call -> response.</li>



<li>OnDemandFunctionCalling (agentic/tool-based):</li>



<li>Best when many queries are casual or do not need grounding, and you want the agent to decide when to fetch data.</li>



<li>Enables multi‑step reasoning (agent thinks, calls search, examines results, calls other tools, returns final).</li>



<li>Lower baseline cost and conditional latency.</li>



<li>Trace: user query -> agent begins reasoning -> decides to call Search tool -> search returns chunks -> agent may call another tool or ask follow-up -> final model call -> response.</li>
</ul>



<p class="wp-block-paragraph">Example: a multi-step agentic sequence (conceptual)<br />1) User: “How do I roll back build 1.2.3?”<br />2) Agent (thinking): Not sure. Calls Search tool with query “roll back build 1.2.3 runbook”.<br />3) Search returns runbook chunks A, B (with source URLs).<br />4) Agent inspects chunks, calls a “Validate-Runbook” tool to confirm commands are safe.<br />5) Agent composes final answer quoting steps and adds “[source: Runbook / sectionX | URL]” inline for each step.</p>



<p class="wp-block-paragraph"><strong>Prompt and output formatting — keep answers auditable</strong></p>



<ul class="wp-block-list">
<li>When injecting retrieved content, format chunks with clear attribution. Example snippet used in the prompt:<br />[Retrieved 1/3] Title: “Rollback Procedure” — Source: https://contoso/docs/runbook#sectionX<br />“Step 1: … Step 2: …” (chunk id: abc123)</li>



<li>When returning a final answer, include inline citations:<br />“To roll back build 1.2.3, follow steps 1–3 (see Runbook: https://contoso/docs/runbook#sectionX).”</li>



<li>If using OnDemandFunctionCalling, have the tool return structured metadata (title, url, chunk_id, score) so the agent can produce precise citations.</li>
</ul>



<p class="wp-block-paragraph"><strong>Code outline (C#) — on‑demand search example (conceptual)</strong><br /><br />// 1) Create embedding generator (IEmbeddingGenerator), vector store and TextSearchStore<br />var embeddingGenerator = /* AzureOpenAI embedding client */;<br />var vectorStore = new InMemoryVectorStore(new() { EmbeddingGenerator = embeddingGenerator });<br />using var textSearchStore = new TextSearchStore(vectorStore, collectionName: &#8220;Docs&#8221;, vectorDimensions: 1536);</p>



<p class="wp-block-paragraph">// 2) Create TextSearchProvider with on‑demand behavior<br />var options = new TextSearchProviderOptions { SearchTime = TextSearchProviderOptions.TextSearchBehavior.OnDemandFunctionCalling, TopK = 4 };<br />var textSearchProvider = new TextSearchProvider(textSearchStore, options);</p>



<p class="wp-block-paragraph">// 3) Attach to agent thread<br />var agentThread = new ChatHistoryAgentThread();<br />agentThread.AIContextProviders.Add(textSearchProvider);</p>



<p class="wp-block-paragraph">// 4) Invoke the agent — the agent may call the search tool during reasoning<br />var response = await agent.InvokeAsync(&#8220;How do I roll back build 1.2.3?&#8221;, agentThread).FirstAsync();<br />// response includes final answer; the framework supplies tool outputs when the agent invoked the search tool</p>



<p class="wp-block-paragraph"><strong>Production checklist and operational considerations</strong></p>



<ul class="wp-block-list">
<li>Latency: measure search latency and embedding latency; cache frequent queries; prefer on‑demand to avoid unnecessary embedding at request time.</li>



<li>Cost: monitor embedding and LLM call spend; use top_k and chunk limits strategically; cache and reuse embeddings where possible.</li>



<li>Freshness: plan an ingestion cadence and a strategy for reindexing changed documents.</li>



<li>Chunking/metadata: store rich metadata (source URL, section, timestamp) to make citations reliable.</li>



<li>Hallucination &amp; prompt injection: sanitize retrieved text, require provenance for critical facts, and apply verification steps for high‑risk actions.</li>



<li>Scaling: choose a production VectorStore that supports the throughput and replication you need (Qdrant, Pinecone, Redis, Azure AI Search).</li>



<li>Security &amp; permissions: treat vector stores and connectors as sensitive; enforce least privilege and secure credentials for connectors (Oracle, SQL, etc.).</li>



<li>Telemetry &amp; observability: capture search latency, top_k, cache hit rate, tool call counts, and a hallucination/error metric (mismatch between cited source and assertion). Log search queries and returned metadata for auditing.</li>



<li>Limitations: retrieval quality depends on embeddings and chunk strategy; RAG does not replace the need for verification for time‑sensitive facts unless you keep the index fresh.</li>
</ul>



<p class="wp-block-paragraph"><strong>Where to learn more</strong></p>



<ul class="wp-block-list">
<li><a href="https://learn.microsoft.com/en-us/agent-framework/agents/rag">Microsoft Learn: RAG | Agent Framework</a></li>



<li><a href="https://learn.microsoft.com/en-us/semantic-kernel/frameworks/agent/agent-rag">Microsoft Learn: Adding RAG to Semantic Kernel Agents</a></li>



<li><a href="https://github.com/microsoft/Agent-Framework-Samples/tree/main/06.RAGs">Agent Framework samples (06.RAGs)</a></li>



<li>Previous articles on RAG listed <a href="https://jesseliberty.com">here</a>.</li>
</ul>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>16 Week Johns Hopkins Program on Agentics</title>
		<link>https://jesseliberty.com/2026/08/29/16-week-johns-hopkins-program-on-agentics/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Sat, 29 Aug 2026 13:08:14 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13568</guid>

					<description><![CDATA[~2 hours a day for 16 weeks + 3 projects. Excellent program.]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large is-resized"><img decoding="async" width="800" height="556" src="https://jesseliberty.com/wp-content/uploads/2026/08/Johns-Hopkins-Cert-800x556.jpg" alt="" class="wp-image-13569" style="aspect-ratio:1.4388778900036912;width:508px;height:auto" srcset="https://jesseliberty.com/wp-content/uploads/2026/08/Johns-Hopkins-Cert-800x556.jpg 800w, https://jesseliberty.com/wp-content/uploads/2026/08/Johns-Hopkins-Cert-300x208.jpg 300w, https://jesseliberty.com/wp-content/uploads/2026/08/Johns-Hopkins-Cert-150x104.jpg 150w, https://jesseliberty.com/wp-content/uploads/2026/08/Johns-Hopkins-Cert-768x534.jpg 768w, https://jesseliberty.com/wp-content/uploads/2026/08/Johns-Hopkins-Cert-1536x1067.jpg 1536w, https://jesseliberty.com/wp-content/uploads/2026/08/Johns-Hopkins-Cert.jpg 1802w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p class="wp-block-paragraph">~2 hours a day for 16 weeks + 3 projects. Excellent program.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CoPilot Harness and Microsoft Agent Framework</title>
		<link>https://jesseliberty.com/2026/08/27/copilot-harness-and-microsoft-agent-framework/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Thu, 27 Aug 2026 11:34:00 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13561</guid>

					<description><![CDATA[Our friends at Microsoft have paired our development tool (CoPilot) with Microsoft Agent Framework. This powerful combination allows developers to create intelligent agents that can automate tasks, enhance productivity, and streamline workflows. This blog post will explore how to effectively &#8230; <a href="https://jesseliberty.com/2026/08/27/copilot-harness-and-microsoft-agent-framework/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Our friends at Microsoft have paired our development tool (CoPilot) with Microsoft Agent Framework. This powerful combination allows developers to create intelligent agents that can automate tasks, enhance productivity, and streamline workflows. This blog post will explore how to effectively use GitHub Copilot with the Microsoft Agent Framework, covering key features, real-world use cases, installation steps, and practical examples.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="605" height="800" src="https://jesseliberty.com/wp-content/uploads/2026/08/harness-605x800.jpg" alt="" class="wp-image-13562" style="aspect-ratio:0.7562452391648274;width:206px;height:auto" srcset="https://jesseliberty.com/wp-content/uploads/2026/08/harness-605x800.jpg 605w, https://jesseliberty.com/wp-content/uploads/2026/08/harness-227x300.jpg 227w, https://jesseliberty.com/wp-content/uploads/2026/08/harness-113x150.jpg 113w, https://jesseliberty.com/wp-content/uploads/2026/08/harness.jpg 762w" sizes="(max-width: 605px) 100vw, 605px" /></figure>



<span id="more-13561"></span>



<h2 class="wp-block-heading">Understanding GitHub Copilot and Microsoft Agent Framework</h2>



<h3 class="wp-block-heading">What is GitHub Copilot?</h3>



<p class="wp-block-paragraph">GitHub Copilot is an AI-powered code completion tool developed by GitHub in collaboration with OpenAI. It leverages machine learning models trained on a vast corpus of code to assist developers by suggesting code snippets, functions, and even entire algorithms as they write. Copilot aims to enhance the coding experience by reducing the time spent on repetitive tasks and providing intelligent suggestions based on context.</p>



<h3 class="wp-block-heading">What is the Microsoft Agent Framework?</h3>



<p class="wp-block-paragraph">The Microsoft Agent Framework (MAF) is a platform designed for building intelligent agents that can interact with users and perform tasks autonomously. MAF provides a robust architecture that supports extensibility, observability, and middleware capabilities, making it an ideal choice for developing production-ready agents. With MAF, developers can create agents that can integrate with various services, manage workflows, and provide insights into their operations. For much more on this see the posts listed <a href="https://jesseliberty.com">here</a>.</p>



<h2 class="wp-block-heading">Key Features and Innovations</h2>



<h3 class="wp-block-heading">1. Agentic Harness</h3>



<p class="wp-block-paragraph">The integration of GitHub Copilot with MAF introduces an &#8220;Agentic Harness,&#8221; which is a coding-focused framework that supports various approaches to agent development. This harness enables:</p>



<ul class="wp-block-list">
<li><strong>Planning</strong>: Agents can plan their actions based on user input and context.</li>



<li><strong>Tool Execution</strong>: Agents can execute specific tools or commands as part of their operations.</li>



<li><strong>Shell Access</strong>: Agents can interact with the system shell to perform tasks directly.</li>



<li><strong>File Manipulation</strong>: Agents can read, write, and modify files as needed.</li>



<li><strong>URL Retrieval</strong>: Agents can fetch data from the web, enhancing their capabilities.</li>
</ul>



<h3 class="wp-block-heading">2. Extensibility</h3>



<p class="wp-block-paragraph">One of the standout features of MAF is its extensibility. Developers can integrate multiple agent providers, <em>including GitHub Copilot</em>, into their applications. This flexibility allows for the creation of customized agents that can leverage the strengths of different tools and services, resulting in a more powerful and adaptable solution.</p>



<h3 class="wp-block-heading">3. Observability and Middleware</h3>



<p class="wp-block-paragraph">MAF comes equipped with built-in <a href="https://jesseliberty.com/2026/07/21/logging-opentelemetry-in-maf/">observability </a>features that enable developers to monitor and manage agent behavior in real-time. This is crucial for ensuring that agents operate as intended, especially in production environments. <a href="https://jesseliberty.com/2026/07/23/middleware-in-microsoft-agent-framework/">Middleware </a>support allows for the integration of additional functionalities, such as logging, error handling, and performance monitoring, further enhancing the robustness of the agents.</p>



<h2 class="wp-block-heading">Real-World Use Cases</h2>



<p class="wp-block-paragraph">The integration of GitHub Copilot with MAF opens up many possibilities for developers. Here are some compelling use cases:</p>



<h3 class="wp-block-heading">Automated Code Review</h3>



<p class="wp-block-paragraph">Developers can create agents that automatically review code changes, suggest improvements, and execute tests. By leveraging Copilot&#8217;s coding capabilities, these agents can provide insightful feedback, helping teams maintain high code quality and adhere to best practices.</p>



<h3 class="wp-block-heading">DevOps Automation</h3>



<p class="wp-block-paragraph">Integrating Copilot with MAF can significantly streamline Continuous Integration/Continuous Deployment (CI/CD) pipelines. Agents can automate deployment tasks, monitor system health, and respond to incidents, allowing DevOps teams to focus on strategic initiatives rather than routine operations.</p>



<h3 class="wp-block-heading">Intelligent Chatbots</h3>



<p class="wp-block-paragraph">By utilizing the capabilities of both GitHub Copilot and MAF, developers can build intelligent chatbots that assist users in various tasks, from answering queries to providing recommendations. These chatbots can learn from interactions and improve their responses over time, enhancing user satisfaction.</p>



<h3 class="wp-block-heading">Data Processing and Analysis</h3>



<p class="wp-block-paragraph">Agents can be designed to process and analyze large datasets, generating insights and visualizations. By automating data-related tasks, organizations can make informed decisions faster and more efficiently.</p>



<h2 class="wp-block-heading">Getting Started with GitHub Copilot and MAF</h2>



<p class="wp-block-paragraph">To harness the power of GitHub Copilot with the Microsoft Agent Framework, you need to set up your development environment and install the necessary SDKs. Below are the steps to get started.</p>



<h3 class="wp-block-heading">Installation</h3>



<h4 class="wp-block-heading">For .NET</h4>



<p class="wp-block-paragraph">To integrate GitHub Copilot with MAF in a .NET environment, you can use the following commands:</p>



<pre class="wp-block-code"><code>dotnet add package GitHub.Copilot.SDK
dotnet add package Microsoft.Agents.AI.GitHub.Copilot --prerelease</code></pre>



<h4 class="wp-block-heading">For Python</h4>



<p class="wp-block-paragraph">If you are working in a Python environment, you can install the required packages using pip:</p>



<pre class="wp-block-code"><code>pip install copilot-sdk agent-framework-github-copilot</code></pre>



<h3 class="wp-block-heading">Setting Up Your Development Environment</h3>



<p class="wp-block-paragraph">Once you have installed the necessary SDKs, you can start building your agents. Below is example code for both C# and Python to demonstrate how to create a simple agent that interacts with GitHub Copilot.</p>



<h2 class="wp-block-heading">Example Code</h2>



<h3 class="wp-block-heading">C# Example</h3>



<p class="wp-block-paragraph">Here’s a basic example of how to create an agent using C#:</p>



<pre class="wp-block-code"><code>using GitHub.Copilot.SDK;
using Microsoft.Agents.AI;

class Program
{
    static async Task Main(string&#91;] args)
    {
        await using CopilotClient copilotClient = new();
        await copilotClient.StartAsync();
        AIAgent agent = copilotClient.AsAIAgent();
        Console.WriteLine(await agent.RunAsync("What is Microsoft Agent Framework?"));
    }
}</code></pre>



<h3 class="wp-block-heading">Python Example</h3>



<p class="wp-block-paragraph">Below is a similar example using Python:</p>



<pre class="wp-block-code"><code>import asyncio
from agent_framework.github import GitHubCopilotAgent

async def basic_example():
    agent = GitHubCopilotAgent(
        default_options={"instructions": "You are a helpful assistant."},
    )
    async with agent:
        result = await agent.run("What is Microsoft Agent Framework?")
        print(result)

asyncio.run(basic_example())</code></pre>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">The integration of GitHub Copilot with the Microsoft Agent Framework provides a robust platform for developing intelligent agents capable of automating various tasks in software development. By leveraging the capabilities of both tools, developers can create agents that enhance productivity and streamline workflows. The potential applications are vast, ranging from automated code reviews to DevOps automation and intelligent chatbots.</p>



<p class="wp-block-paragraph">For more detailed information, see: <a href="https://devblogs.microsoft.com/agent-framework/build-production-ready-agents-with-the-github-copilot-harness-and-agent-framework">Microsoft Agent Framework documentation</a>.</p>



<p class="wp-block-paragraph">Much more on this to come.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Deploying to Foundry</title>
		<link>https://jesseliberty.com/2026/08/25/deploying-to-foundry/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Tue, 25 Aug 2026 22:02:57 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13553</guid>

					<description><![CDATA[When it comes to deploying Microsoft Agent Framework applications, Microsoft Foundry offers a robust platform that simplifies the process. This guide will walk you through one approach to deploying your application. Understanding Microsoft Agent Framework (MAF) Before diving into the &#8230; <a href="https://jesseliberty.com/2026/08/25/deploying-to-foundry/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">When it comes to deploying Microsoft Agent Framework applications, Microsoft Foundry offers a robust platform that simplifies the process. This guide will walk you through one approach to deploying your application.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="752" height="536" src="https://jesseliberty.com/wp-content/uploads/2026/08/docker.jpg" alt="" class="wp-image-13554" style="aspect-ratio:1.4030168182710556;width:355px;height:auto" srcset="https://jesseliberty.com/wp-content/uploads/2026/08/docker.jpg 752w, https://jesseliberty.com/wp-content/uploads/2026/08/docker-300x214.jpg 300w, https://jesseliberty.com/wp-content/uploads/2026/08/docker-150x107.jpg 150w" sizes="auto, (max-width: 752px) 100vw, 752px" /></figure>



<span id="more-13553"></span>



<h2 class="wp-block-heading">Understanding Microsoft Agent Framework (MAF)</h2>



<p class="wp-block-paragraph">Before diving into the deployment process, it’s essential to understand what the Microsoft Agent Framework is and how it can benefit your applications. MAF is designed to facilitate the development of intelligent agents that can perform tasks, respond to user queries, and integrate with various services. These agents can be deployed in a cloud environment, allowing for scalability and ease of management. For much more on Microsoft Agent Framework see the table of contents <a href="https://jesseliberty.com">here</a>.</p>



<h2 class="wp-block-heading">Overview of Foundry</h2>



<p class="wp-block-paragraph">Microsoft Foundry is a cloud-based platform that provides a managed environment for deploying and running applications. It abstracts the complexities of infrastructure management, allowing developers to focus on building and deploying their applications. Foundry supports various deployment models, including containerized applications, making it an ideal choice for deploying MAF applications. In this blog post I&#8217;ll show how to use containers for deployment. In an upcoming blog post I&#8217;ll show a simpler approach.</p>



<h2 class="wp-block-heading">Key Steps for Deployment</h2>



<p class="wp-block-paragraph">Deploying a MAF application to Foundry using containers involves several key steps. Each step is crucial for ensuring that your application is packaged correctly, deployed efficiently, and registered with the Foundry Agent Service. Below is a detailed breakdown of the deployment process.</p>



<h3 class="wp-block-heading">Step 1: Build and Package Your Agent</h3>



<p class="wp-block-paragraph">The first step in deploying your MAF application is to build and package it into a Docker container. This process involves creating a Dockerfile that defines how your application will be built and run within a container.</p>



<h4 class="wp-block-heading">Creating a Dockerfile</h4>



<p class="wp-block-paragraph">A Dockerfile is a text document that contains all the commands needed to assemble an image. Here’s a simple example of a Dockerfile for a MAF application:</p>



<pre class="wp-block-code"><code>FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
COPY . .
ENTRYPOINT &#91;"dotnet", "YourApp.dll"]</code></pre>



<p class="wp-block-paragraph">In this example:</p>



<ul class="wp-block-list">
<li>The base image is set to the ASP.NET runtime.</li>



<li>The working directory is defined as <code>/app</code>.</li>



<li>The application files are copied into the container.</li>



<li>The entry point is specified to run the application.</li>
</ul>



<h4 class="wp-block-heading">Local Testing</h4>



<p class="wp-block-paragraph">Before deploying your application, it’s crucial to test it locally. This ensures that your application behaves as expected and that all endpoints are functioning correctly. You can use the protocol library to validate the endpoints and ensure that your application is ready for deployment.</p>



<h3 class="wp-block-heading">Step 2: Push to Azure Container Registry</h3>



<p class="wp-block-paragraph">Once your application is packaged into a Docker container, the next step is to push the container image to Azure Container Registry (ACR). ACR is a managed Docker container registry that allows you to store and manage your container images.</p>



<h4 class="wp-block-heading">Using Azure Developer CLI</h4>



<p class="wp-block-paragraph">To push your container image to ACR, you can use the Azure Developer CLI (<code>azd</code>). Here’s the command to push your container image:</p>



<pre class="wp-block-code"><code>azd container push your-container-image</code></pre>



<p class="wp-block-paragraph"> This command uploads your image to ACR, making it available for deployment.</p>



<h3 class="wp-block-heading">Step 3: Register the Agent with Foundry</h3>



<p class="wp-block-paragraph">After pushing your container image to ACR, the next step is to register your agent with the Foundry Agent Service. This step provisions the necessary infrastructure and creates a dedicated identity for your agent.</p>



<h4 class="wp-block-heading">Creating an Agent Version</h4>



<p class="wp-block-paragraph">To register your agent, you can use the following command:</p>



<pre class="wp-block-code"><code>azd foundry agent create --image your-container-image</code></pre>



<p class="wp-block-paragraph">This command creates an agent version in Foundry using the image you just pushed. It’s important to ensure that the image is accessible and correctly configured.</p>



<h3 class="wp-block-heading">Step 4: Poll for Status</h3>



<p class="wp-block-paragraph">Once you have registered your agent, poll for the status until it reaches <code>active</code>. This step ensures that your agent is fully provisioned and ready to handle requests.</p>



<h3 class="wp-block-heading">Step 5: Invoke Your Agent</h3>



<p class="wp-block-paragraph">After your agent is active, you can start sending requests to its dedicated endpoint. This allows you to interact with your agent and utilize its capabilities.</p>



<h4 class="wp-block-heading">Example Invocation</h4>



<p class="wp-block-paragraph">Here’s an example of how to invoke your agent using Python:</p>



<pre class="wp-block-code"><code>import requests

response = requests.post("https://your-agent-endpoint", json={"input": "Where is Seattle?"})
print(response.json())</code></pre>



<p class="wp-block-paragraph"> The request sends a JSON payload to the agent, and the response is printed to the console.</p>



<h2 class="wp-block-heading">Key Considerations</h2>



<p class="wp-block-paragraph">When deploying a MAF application to Foundry, there are several key considerations to keep in mind:</p>



<h3 class="wp-block-heading">Local Testing</h3>



<p class="wp-block-paragraph">Before deploying, ensure that your agent works locally. The container should serve the same endpoints locally as it does in production. This step will identify any issues before deployment.</p>



<h3 class="wp-block-heading">Managed Infrastructure</h3>



<p class="wp-block-paragraph">One of the significant advantages of using Foundry is that it provides a managed environment. This means you don’t have to worry about the underlying infrastructure. Each agent gets its own dedicated endpoint and identity, simplifying the deployment process.</p>



<h3 class="wp-block-heading">Multi-Agent Workflows</h3>



<p class="wp-block-paragraph">Foundry supports orchestrating complex workflows using multiple agents. </p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Deploying a Microsoft Agent Framework application to Foundry is a structured process that involves building, packaging, and registering your application. By following the steps outlined in this guide, you can ensure that your MAF application is deployed efficiently and effectively, leveraging the capabilities of the Foundry platform.</p>



<h2 class="wp-block-heading">Additional Resources</h2>



<p class="wp-block-paragraph">For further reading see <a href="https://learn.microsoft.com/en-us/azure/foundry/agents/how-to/deploy-hosted-agent">Deploy a hosted agent &#8211; Microsoft Learn</a></p>



<ul class="wp-block-list"></ul>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Reducing Token Usage</title>
		<link>https://jesseliberty.com/2026/08/24/reducing-token-usage/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Mon, 24 Aug 2026 17:21:09 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13548</guid>

					<description><![CDATA[If you want to hold costs down, efficient resource management is paramount. One of the critical resources in AI applications is token usage. Tokens are the basic units of text that models process, and managing them effectively can lead to &#8230; <a href="https://jesseliberty.com/2026/08/24/reducing-token-usage/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">If you want to hold costs down, efficient resource management is paramount. One of the critical resources in AI applications is token usage. Tokens are the basic units of text that models process, and managing them effectively can lead to significant cost savings and improved performance. This post explores various techniques for measuring and minimizing token usage within the Microsoft Agent Framework.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="630" height="616" src="https://jesseliberty.com/wp-content/uploads/2026/08/token.jpg" alt="" class="wp-image-13549" style="width:259px;height:auto" srcset="https://jesseliberty.com/wp-content/uploads/2026/08/token.jpg 630w, https://jesseliberty.com/wp-content/uploads/2026/08/token-300x293.jpg 300w, https://jesseliberty.com/wp-content/uploads/2026/08/token-150x147.jpg 150w" sizes="auto, (max-width: 630px) 100vw, 630px" /></figure>



<span id="more-13548"></span>



<h2 class="wp-block-heading">Understanding Token Usage</h2>



<p class="wp-block-paragraph">Before diving into the techniques, it’s essential to understand what token usage entails. In the context of AI models, a token can represent a word, part of a word, or even punctuation. Each interaction with the model consumes tokens, both for the input provided and the output generated. Therefore, optimizing token usage is crucial for maintaining efficiency and controlling costs, especially in applications with high interaction volumes, such as chatbots and multi-agent systems.</p>



<h2 class="wp-block-heading">Key Techniques for Minimizing Token Usage</h2>



<h3 class="wp-block-heading">1. Token Management</h3>



<p class="wp-block-paragraph">One of the most straightforward methods to control token usage is through effective token management. By setting a maximum number of tokens for responses, developers can prevent excessive consumption and ensure that outputs remain concise and relevant.</p>



<p class="wp-block-paragraph"><strong>Example in C#:</strong></p>



<pre class="wp-block-code"><code>var response = await agent.GenerateResponseAsync(input, maxTokens: 100);</code></pre>



<p class="wp-block-paragraph">In this example, the response is limited to 100 tokens, which helps maintain brevity and relevance.</p>



<h3 class="wp-block-heading">2. Context Management</h3>



<p class="wp-block-paragraph">Context management is another critical area where developers can minimize token usage. Instead of sending the entire conversation history to the model, it is more efficient to retain only the most relevant exchanges. Typicallly this comes down to retaining only the most recent exchanges. This approach not only reduces the number of tokens sent but also enhances the model&#8217;s focus on pertinent information.</p>



<p class="wp-block-paragraph"><strong>Example in Python:</strong></p>



<pre class="wp-block-code"><code>context = &#91;message for message in conversation_history&#91;-5:]]  # Keep last 5 messages
response = agent.generate_response(input, context=context)</code></pre>



<p class="wp-block-paragraph">By limiting the context to the last five messages, developers can significantly reduce token consumption while still providing the model with enough information to generate a relevant response.</p>



<h3 class="wp-block-heading">3. Efficient History Management</h3>



<p class="wp-block-paragraph">When interacting with the model, it is essential to avoid resending large outputs or logs with every API call. Instead, developers should focus on sending only the essential context. Utilizing new threads for stateless interactions can also help prevent the unnecessary transmission of long histories.</p>



<p class="wp-block-paragraph"><strong>Example in C#:</strong></p>



<pre class="wp-block-code"><code>var newThreadId = Guid.NewGuid().ToString();
var response = await agent.GenerateResponseAsync(input, threadId: newThreadId);</code></pre>



<p class="wp-block-paragraph">This method ensures that each interaction is treated independently, minimizing the amount of historical data sent with each request.</p>



<h3 class="wp-block-heading">4. Lightweight Summarization</h3>



<p class="wp-block-paragraph">To maintain continuity in conversations while reducing payload size, developers can implement lightweight summarization techniques. By periodically summarizing previous interactions, the summary can be sent as context, which helps keep the conversation relevant without inflating token usage.</p>



<h3 class="wp-block-heading">5. Token-Optimized Object Notation (TOON)</h3>



<p class="wp-block-paragraph">Token-Optimized Object Notation (TOON) is a powerful technique for structuring data in a way that achieves high compression ratios, with some reports indicating reductions of up to 98% for certain payloads. This method is particularly useful for applications that require the transmission of structured data. This is typically done by the framework &#8212; it is very unusual to try to do this manually.</p>



<h3 class="wp-block-heading">6. Server-Side Computation</h3>



<p class="wp-block-paragraph">Another effective strategy for minimizing token usage is to move computation tasks to the server rather than performing them within the context of the model. By offloading these tasks, developers can reduce the amount of data sent to the model, thereby lowering token consumption.</p>



<h2 class="wp-block-heading">Measuring Token Usage</h2>



<p class="wp-block-paragraph">To effectively manage token usage, developers must also implement robust measurement techniques. Here are some strategies for measuring token usage within the Microsoft Agent Framework:</p>



<h3 class="wp-block-heading">Metrics Integration</h3>



<p class="wp-block-paragraph">Utilizing built-in metrics from the Microsoft Agent Framework allows developers to monitor input and output tokens, estimated costs, and latency. This data is invaluable for optimizing performance and identifying areas for improvement.</p>



<h3 class="wp-block-heading">Breakdown Analysis</h3>



<p class="wp-block-paragraph">Conducting a breakdown analysis of token usage across different stages—such as retrieval, planning, and execution—can help developers pinpoint where savings can be made. By understanding which stages consume the most tokens, developers can focus their optimization efforts more effectively.</p>



<h2 class="wp-block-heading">Real-World Use Cases</h2>



<p class="wp-block-paragraph">The techniques discussed above can be applied across various real-world scenarios, leading to significant improvements in efficiency and cost-effectiveness.</p>



<h3 class="wp-block-heading">Chatbots</h3>



<p class="wp-block-paragraph">In chatbot applications, implementing these techniques can lead to substantial cost savings and enhanced performance, particularly in high-traffic environments. By managing token usage effectively, chatbots can handle more interactions without incurring excessive costs.</p>



<h3 class="wp-block-heading">Multi-Agent Systems</h3>



<p class="wp-block-paragraph">In systems with multiple agents, distributing tasks among specialized agents can reduce redundant context passing and lower latency. This approach not only minimizes token usage but also enhances the overall responsiveness of the system.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">========== TOKEN USAGE FOR FIRST DRAFT OF THIS BLOG POST ==========<br />Input tokens: 4180<br />Output tokens: 1838<br />Reasoning tokens: 0<br />Total tokens: 6018</p>



<h1 class="wp-block-heading"></h1>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>About Neo4j</title>
		<link>https://jesseliberty.com/2026/08/21/about-nodejs/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Fri, 21 Aug 2026 10:48:30 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13530</guid>

					<description><![CDATA[In the previous blog post I mentioned Neo4j. In this post I will provide an overview of this important framework. A Graph Database In the era of big data, the way we store and manage information has evolved significantly. Traditional &#8230; <a href="https://jesseliberty.com/2026/08/21/about-nodejs/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In the <a href="https://jesseliberty.com/2026/08/20/memory-in-microsoft-agent-framework-an-overview/">previous blog post </a>I mentioned Neo4j. In this post I will provide an overview of this important framework.</p>



<h1 class="wp-block-heading">A Graph Database </h1>



<p class="wp-block-paragraph">In the era of big data, the way we store and manage information has evolved significantly. Traditional relational databases, while effective for many applications, often struggle with complex data relationships. Enter <strong>Neo4j</strong>, a leading <em>graph database</em> that allows users to model and query data in a way that reflects real-world relationships. This guide will walk you through the essentials of using Neo4j, from installation to practical applications, ensuring you have a solid foundation to leverage this powerful tool.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="342" height="222" src="https://jesseliberty.com/wp-content/uploads/2026/08/neo.jpg" alt="" class="wp-image-13534" srcset="https://jesseliberty.com/wp-content/uploads/2026/08/neo.jpg 342w, https://jesseliberty.com/wp-content/uploads/2026/08/neo-300x195.jpg 300w, https://jesseliberty.com/wp-content/uploads/2026/08/neo-150x97.jpg 150w" sizes="auto, (max-width: 342px) 100vw, 342px" /></figure>



<span id="more-13530"></span>



<h2 class="wp-block-heading">Understanding Neo4j</h2>



<h3 class="wp-block-heading">What is a Graph Database?</h3>



<p class="wp-block-paragraph">At its core, a graph database is designed to represent and store data in the form of nodes and relationships. In Neo4j:</p>



<ul class="wp-block-list">
<li><strong>Nodes</strong> represent entities (e.g., people, products, locations).</li>



<li><strong>Relationships</strong> define how these entities are connected (e.g., friendships, purchases, and geographical proximity).</li>
</ul>



<p class="wp-block-paragraph">This structure makes graph databases particularly well-suited for applications that require complex querying of interconnected data, such as social networks, recommendation systems, and fraud detection.</p>



<h3 class="wp-block-heading">The Cypher Query Language</h3>



<p class="wp-block-paragraph">Neo4j utilizes Cypher, a declarative query language specifically designed for graph data. Cypher allows users to express what data they want to retrieve without needing to specify how to get it. This makes it intuitive and powerful for querying complex relationships.</p>



<h2 class="wp-block-heading">Getting Started with Neo4j</h2>



<h3 class="wp-block-heading">Installation</h3>



<p class="wp-block-paragraph">To begin using Neo4j, you need to install it on your machine. There are two primary methods for installation:</p>



<ol class="wp-block-list">
<li><strong>Download the Neo4j Community Edition</strong>:</li>
</ol>



<ul class="wp-block-list">
<li>Visit the <a href="https://neo4j.com/download/">official Neo4j website</a> and download the Community Edition, which is free and open-source.</li>
</ul>



<ol class="wp-block-list">
<li><strong>Using Docker</strong>:</li>
</ol>



<ul class="wp-block-list">
<li>If you prefer containerization, you can easily run Neo4j using Docker. Open your terminal and execute the following commands:<br /><code>bash docker pull neo4j docker run -p7474:7474 -p7687:7687 neo4j</code></li>



<li>This command pulls the latest Neo4j image and runs it, exposing the necessary ports for web access and Bolt protocol.</li>
</ul>



<h3 class="wp-block-heading">Using Neo4j Sandbox</h3>



<p class="wp-block-paragraph">For those who are new to Neo4j or want to experiment without installation, the <a href="https://sandbox.neo4j.com/">Neo4j Sandbox</a> is an excellent resource. It provides a cloud-based environment with sample datasets and guided tutorials, allowing you to explore Neo4j&#8217;s capabilities without any setup.</p>



<h3 class="wp-block-heading">Basic Cypher Commands</h3>



<p class="wp-block-paragraph">Once you have Neo4j up and running, you can start interacting with it using Cypher. Here are some fundamental commands to get you started:</p>



<h4 class="wp-block-heading">Creating Nodes</h4>



<p class="wp-block-paragraph">To create a new node, you can use the following command:</p>



<pre class="wp-block-code"><code>CREATE (n:Person {name: 'Alice', age: 30})</code></pre>



<p class="wp-block-paragraph">This command creates a node labeled <code>Person</code> with properties <code>name</code> and <code>age</code>.</p>



<h4 class="wp-block-heading">Creating Relationships</h4>



<p class="wp-block-paragraph">To establish a relationship between two nodes, you can use the <code>MATCH</code> and <code>CREATE</code> commands:</p>



<pre class="wp-block-code"><code>MATCH (a:Person {name: 'Alice'})
CREATE (a)-&#91;:FRIENDS_WITH]-&gt;(b:Person {name: 'Bob'})</code></pre>



<p class="wp-block-paragraph">This command finds the node representing Alice and creates a <code>FRIENDS_WITH</code> relationship to a new node representing Bob.</p>



<h4 class="wp-block-heading">Querying Data</h4>



<p class="wp-block-paragraph">To retrieve data from your graph, you can use the <code>MATCH</code> command:</p>



<pre class="wp-block-code"><code>MATCH (n:Person) RETURN n</code></pre>



<p class="wp-block-paragraph">This command returns all nodes labeled <code>Person</code>, allowing you to see the data you&#8217;ve created.</p>



<h2 class="wp-block-heading">Real-World Use Cases</h2>



<p class="wp-block-paragraph">Neo4j&#8217;s graph structure lends itself to various applications across different industries. Here are some notable use cases:</p>



<h3 class="wp-block-heading">1. Social Networks</h3>



<p class="wp-block-paragraph">Graph databases excel at modeling relationships, making them ideal for social networking applications. You can easily represent users, their connections, and interactions, enabling features like friend suggestions and relationship analysis.</p>



<h3 class="wp-block-heading">2. Recommendation Systems</h3>



<p class="wp-block-paragraph">By analyzing user behavior and preferences, Neo4j can power recommendation engines. For instance, you can suggest products based on users&#8217; past purchases or their friends&#8217; activities, enhancing user engagement and satisfaction.</p>



<h3 class="wp-block-heading">3. Fraud Detection</h3>



<p class="wp-block-paragraph">In financial services, Neo4j can help identify fraudulent activities by analyzing connections between transactions. By visualizing relationships, you can uncover suspicious patterns that may indicate fraud, allowing for timely intervention.</p>



<h2 class="wp-block-heading">Resources for Learning Neo4j</h2>



<p class="wp-block-paragraph">To deepen your understanding of Neo4j and its capabilities, consider exploring the following resources:</p>



<h3 class="wp-block-heading">Tutorials</h3>



<ul class="wp-block-list">
<li><strong><a href="https://www.tutorialspoint.com/neo4j/index.htm">TutorialsPoint Neo4j Tutorial</a></strong>: A comprehensive guide that covers everything from the basics to advanced topics in Neo4j.</li>



<li><strong><a href="https://www.datacamp.com/tutorial/neo4j-tutorial">DataCamp Neo4j Tutorial</a></strong>: This tutorial focuses on using Neo4j with Python, including data ingestion and querying techniques.</li>
</ul>



<h3 class="wp-block-heading">Video Tutorials</h3>



<ul class="wp-block-list">
<li><strong><a href="https://www.youtube.com/watch?v=IShRYPsmiR8">Introduction to Neo4j</a></strong>: A beginner-friendly video that covers installation and basic usage, perfect for visual learners.</li>
</ul>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Neo4j is a powerful graph database that offers a unique approach to managing and querying complex data relationships. As you saw in the previous blog post, it is the framework that <strong>Agent Memory for .NET  </strong>leverages.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>An Overview of Agent Memory for .NET</title>
		<link>https://jesseliberty.com/2026/08/20/memory-in-microsoft-agent-framework-an-overview/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Thu, 20 Aug 2026 19:26:37 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Essentials]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13507</guid>

					<description><![CDATA[The ability for Microsoft Agent Framework agents to retain and utilize knowledge across interactions is critical. One solution for this is Agent Memory for .NET, a cutting-edge, mind-blowing, graph-native memory engine that leverages the robust capabilities of Neo4j as its &#8230; <a href="https://jesseliberty.com/2026/08/20/memory-in-microsoft-agent-framework-an-overview/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The ability for Microsoft Agent Framework agents to retain and utilize knowledge across interactions is critical. One solution for this is <strong>Agent Memory for .NET</strong>, a cutting-edge, mind-blowing, graph-native memory engine that leverages the robust capabilities of <a href="http://neo4j.com/labs/agent-memory/">Neo4j </a>as its backend. This framework is designed to empower AI agents with persistent memory, enabling them to provide contextually relevant responses and maintain continuity. <br /><br />In this post, we will explore the key features, real-world applications, and implementation details of <strong>Agent Memory for .NET</strong>, along with a practical code example to get you started.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="771" height="729" src="https://jesseliberty.com/wp-content/uploads/2026/08/elephant.jpg" alt="" class="wp-image-13509" style="aspect-ratio:1.0576178378511705;width:294px;height:auto" srcset="https://jesseliberty.com/wp-content/uploads/2026/08/elephant.jpg 771w, https://jesseliberty.com/wp-content/uploads/2026/08/elephant-300x284.jpg 300w, https://jesseliberty.com/wp-content/uploads/2026/08/elephant-150x142.jpg 150w, https://jesseliberty.com/wp-content/uploads/2026/08/elephant-768x726.jpg 768w" sizes="auto, (max-width: 771px) 100vw, 771px" /></figure>



<p class="wp-block-paragraph"></p>



<span id="more-13507"></span>



<h2 class="wp-block-heading">Overview of Agent Memory for .NET</h2>



<p class="wp-block-paragraph"><strong>Agent Memory for .NET</strong> is a sophisticated solution that allows AI agents to store and recall information across sessions. By utilizing a graph database structure, that is, one that organizes data as nodes, edges and properties, it enables agents to create a rich knowledge graph that captures entities, relationships, and interactions over time. </p>



<h3 class="wp-block-heading">Key Features and Innovations</h3>



<p class="wp-block-paragraph"><strong>Types of Memory</strong>:</p>



<ol class="wp-block-list">
<li></li>
</ol>



<ul class="wp-block-list">
<li><strong>Short-term Memory</strong>: This component captures the immediate context of conversations, allowing agents to respond appropriately to ongoing dialogues.</li>



<li><strong>Long-term Memory</strong>: This aspect stores a comprehensive knowledge graph that includes entities and relationships, enabling agents to recall past interactions and provide personalized responses.</li>



<li><strong>Reasoning Memory</strong>: By recording the agent&#8217;s actions and decisions, this memory type enhances the agent&#8217;s ability to make informed decisions in future interactions.</li>
</ul>



<p class="wp-block-paragraph"><strong>Time-aware Memory</strong>: One of the standout features of Agent Memory for .NET is its support for bitemporal recall.  Bitemporal recall is the ability of a data system to track and query information across two distinct timelines &#8212; in this case <em>valid time</em> (when the fact was true in the real world) and <em>transaction time</em> (when the fact was recorded in the Database). This allows agents to answer questions based on both past beliefs and current knowledge, providing a more nuanced understanding of user queries.</p>



<p class="wp-block-paragraph"><strong>Integration</strong>: The framework is designed to be compatible with the Microsoft Agent Framework and other .NET applications. This seamless integration makes it easy for developers to incorporate Agent Memory into existing systems without significant overhead.</p>



<p class="wp-block-paragraph"><strong>Graph-Native Structure</strong>: By leveraging Neo4j&#8217;s graph database capabilities, Agent Memory for .NET can store and query memory efficiently. This structure allows for complex relationships and interactions to be represented in a way that is both intuitive and powerful.</p>



<h2 class="wp-block-heading">Implementation: Getting Started with Agent Memory for .NET</h2>



<p class="wp-block-paragraph">To illustrate how to set up <strong>Agent Memory for .NET</strong>, let’s walk through a simple code example. This demonstrates how to initialize the memory store, store a memory, and retrieve it.</p>



<h3 class="wp-block-heading">Prerequisites</h3>



<p class="wp-block-paragraph">Before you begin, ensure you have the following:</p>



<ul class="wp-block-list">
<li>.NET SDK installed on your machine.</li>



<li>A running instance of Neo4j. You can download and install Neo4j from the <a href="https://neo4j.com/download/">official website</a>.</li>
</ul>



<h3 class="wp-block-heading">Code Example</h3>



<p class="wp-block-paragraph">Here’s a straightforward example of how to set up Agent Memory for .NET using Neo4j:</p>



<pre class="wp-block-code"><code>using Neo4j.Driver;
using AgentMemory;

class Program
{
    static async Task Main(string&#91;] args)
    {
        // Initialize Neo4j Driver
        var driver = GraphDatabase.Driver("bolt://localhost:7687", AuthTokens.Basic("neo4j", "password"));

        // Create a new memory store
        var memoryStore = new MemoryStore(driver);

        // Store a memory
        await memoryStore.StoreMemory("user123", "What is the capital of France?", "Paris");

        // Retrieve a memory
        var response = await memoryStore.RetrieveMemory("user123", "What is the capital of France?");
        Console.WriteLine(response); // Outputs: Paris
    }
}</code></pre>



<h3 class="wp-block-heading">Explanation of the Code</h3>



<ol class="wp-block-list">
<li><strong>Initialize Neo4j Driver</strong>: The first step is to create a connection to your Neo4j database using the <code>GraphDatabase.Driver</code> method. Replace the connection string and authentication details with your own.</li>



<li><strong>Create a Memory Store</strong>: An instance of <code>MemoryStore</code> is created, which will handle the storage and retrieval of memories.</li>



<li><strong>Store a Memory</strong>: The <code>StoreMemory</code> method is called to save a memory associated with a specific user. In this case, we store the question &#8220;What is the capital of France?&#8221; along with the answer &#8220;Paris&#8221;.</li>



<li><strong>Retrieve a Memory</strong>: Finally, we retrieve the stored memory using the <code>RetrieveMemory</code> method and print the response to the console.</li>
</ol>



<p class="wp-block-paragraph">By leveraging the power of Neo4j,<strong> Agent Memory for .NET</strong> provides a solution for enhancing applications with persistent memory. </p>



<p class="wp-block-paragraph">For more information and resources, see the <a href="https://github.com/joslat/agent-memory-dotnet">Agent Memory for .NET GitHub Repository</a> and the <a href="https://neo4j.com/blog/developer/agentmemory-for-net-a-native-sibling-to-neo4j-agent-memory/">Neo4j Blog on Agent Memory</a>. Also see:  <a href="https://learn.microsoft.com/en-us/agent-framework/integrations/by-component/context-providers/neo4j?pivots=programming-language-csharp">Microsoft Agent Framework Neo4J</a> and <a href="https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/02-agents/AgentWithMemory/AgentWithMemory_Step06_MemoryUsingAgentMemory">Agent With Memory</a></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Microsoft Agent Framework and Foundry</title>
		<link>https://jesseliberty.com/2026/08/13/microsoft-agent-framework-and-foundry/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Thu, 13 Aug 2026 19:40:51 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Foundry]]></category>
		<category><![CDATA[Microsoft Agent Framework]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13498</guid>

					<description><![CDATA[In the .NET development world the two most significant frameworks for AI are Microsoft Agent Framework and Microsoft Foundry. Together, they create a powerful ecosystem for building, deploying, and managing AI agents that can automate tasks, respond to user queries, &#8230; <a href="https://jesseliberty.com/2026/08/13/microsoft-agent-framework-and-foundry/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In the .NET development world the two most significant frameworks for AI are <strong>Microsoft Agent Framework</strong> and <strong>Microsoft Foundry</strong>. Together, they create a powerful ecosystem for building, deploying, and managing AI agents that can automate tasks, respond to user queries, and integrate seamlessly with various services. This post will explore how these two technologies relate to each other, their key features, and their real-world applications.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="750" height="744" src="https://jesseliberty.com/wp-content/uploads/2026/08/maf-and-foundry-shaking-hands-1.jpg" alt="" class="wp-image-13500" style="aspect-ratio:1.0080637577581344;width:307px;height:auto" srcset="https://jesseliberty.com/wp-content/uploads/2026/08/maf-and-foundry-shaking-hands-1.jpg 750w, https://jesseliberty.com/wp-content/uploads/2026/08/maf-and-foundry-shaking-hands-1-300x298.jpg 300w, https://jesseliberty.com/wp-content/uploads/2026/08/maf-and-foundry-shaking-hands-1-150x150.jpg 150w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>



<span id="more-13498"></span>



<h2 class="wp-block-heading">What is Microsoft Agent Framework?</h2>



<p class="wp-block-paragraph">To quickly review, <strong>Microsoft Agent Framework</strong> is a development framework designed specifically for creating AI agents. These agents are capable of interacting with various services and data sources, making them versatile tools for developers. The framework provides a rich set of tools and libraries that enable developers to build intelligent applications that can automate tasks, respond to user queries, and integrate with other systems.</p>



<h3 class="wp-block-heading">Key Features of Microsoft Agent Framework</h3>



<ol class="wp-block-list">
<li><strong>Development Tools</strong>: The framework includes a variety of libraries and APIs that simplify the process of building AI agents. Developers can leverage these tools to create agents that can understand natural language, process data, and perform complex tasks.</li>



<li><strong>Integration Capabilities</strong>: The framework is designed to work with various data sources and services, allowing developers to create agents that can pull information from multiple platforms and provide comprehensive responses to user queries.</li>



<li><strong>Flexibility</strong>: Developers can use the Microsoft Agent Framework alongside other frameworks, such as the OpenAI Agents SDK, to create a wide range of applications, from simple chatbots to complex AI-driven solutions.</li>
</ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">For much more on Microsoft Agent Framework and agentics in general see the blog posts beginning <a href="https://jesseliberty.com/2026/07/30/agentic-table-of-contents-so-far/">here</a>.</p>
</blockquote>



<h2 class="wp-block-heading">What is Microsoft Foundry?</h2>



<p class="wp-block-paragraph"><strong>Microsoft Foundry</strong> is a managed platform that provides a comprehensive environment for building, deploying, and scaling AI applications. It offers a suite of tools and services that enable developers to utilize various AI models and frameworks, making it easier to create sophisticated applications.</p>



<h3 class="wp-block-heading">Key Features of Microsoft Foundry</h3>



<ol class="wp-block-list">
<li><strong>Managed Environment</strong>: Foundry provides a fully managed environment, which means developers can focus on building their applications without worrying about the underlying infrastructure. This allows for faster development cycles and easier scaling.</li>



<li><strong>AI Model Integration</strong>: Foundry supports a wide range of AI models and tools, enabling developers to leverage the latest advancements in AI technology. This integration allows for the creation of more intelligent and capable agents.</li>



<li><strong>Governance and Observability</strong>: Foundry includes features that help organizations maintain compliance with regulations, making it particularly beneficial for industries that require strict governance, such as finance and healthcare.</li>
</ol>



<h2 class="wp-block-heading">The Relationship Between Microsoft Agent Framework and Microsoft Foundry</h2>



<p class="wp-block-paragraph">The relationship between the Microsoft Agent Framework and Microsoft Foundry is one of synergy and integration. Together, they provide a robust environment for developing AI agents that can handle complex tasks and workflows. Here are some key aspects of their relationship:</p>



<h3 class="wp-block-heading">1. Integration of Services</h3>



<p class="wp-block-paragraph">The <strong>Foundry Agent Service</strong> acts as a bridge between the Microsoft Agent Framework and various data sources and other agents. This integration enables seamless communication and data exchange, which is crucial for developing multi-agent workflows that can manage complex business processes.</p>



<p class="wp-block-paragraph">Additionally, the <strong>Responses API</strong> serves as a single entry point for accessing Foundry models and tools. This allows developers to build agents using the Agent Framework while leveraging the capabilities of Foundry, creating a more cohesive development experience.</p>



<h3 class="wp-block-heading">2. Multi-Agent Workflows</h3>



<p class="wp-block-paragraph">Both Foundry and Microsoft Agent Framework support the creation of <strong>multi-agent workflows</strong>. This feature allows developers to orchestrate complex, multi-step processes, enhancing the capabilities of AI applications. By enabling multiple agents to work together, organizations can automate intricate workflows that would be challenging to manage with a single agent.</p>



<h3 class="wp-block-heading">3. Identity and Security</h3>



<p class="wp-block-paragraph">Security is a paramount concern in the development of AI applications. The Microsoft Agent Framework utilizes <strong>Microsoft Entra ID</strong> for managing agent identities, ensuring secure authentication and authorization. With Foundry you get this and many other infrastructure features out of the box.</p>



<h3 class="wp-block-heading">4. Development Flexibility</h3>



<p class="wp-block-paragraph">The combination of the Microsoft Agent Framework and Microsoft Foundry offers developers significant flexibility in how they create agents. They can choose to build agents using the Microsoft Agent Framework and have them <strong>hosted </strong>in Foundry, or they can create AI applications directly with Foundry. This flexibility is essential for meeting the diverse needs of businesses and organizations.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">For more on this, be sure to watch my<a href="https://www.youtube.com/watch?v=IgoQI2YfeRI"> video interview</a> of Bruno Capuano and Jon Galloway, both of Microsoft, where, among other things, Bruno demonstrates how easy it is to have Foundry host a Microsoft Agent Framework application.</p>
</blockquote>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Managing Secrets in Microsoft Agent Framework</title>
		<link>https://jesseliberty.com/2026/08/11/configuration-management-in-microsoft-agent-framework/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Tue, 11 Aug 2026 16:27:50 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13490</guid>

					<description><![CDATA[In the realm of software development, managing configuration values and sensitive information is a critical aspect that can significantly impact the security and functionality of applications. Developers often find themselves at a crossroads when deciding how to store configuration values, &#8230; <a href="https://jesseliberty.com/2026/08/11/configuration-management-in-microsoft-agent-framework/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In the realm of software development, managing configuration values and sensitive information is a critical aspect that can significantly impact the security and functionality of applications. Developers often find themselves at a crossroads when deciding how to store configuration values, particularly when it comes to sensitive data such as API keys, passwords, and other credentials. Two common approaches are using a <code>config.json</code> file for configuration values and utilizing a secrets management system, such as that provided by the Microsoft Agent Framework. This post delves into the differences, trade-offs, and considerations for each approach, helping developers make informed decisions based on their specific needs.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Note: Microsoft strongly suggests using <em>secrets</em> and not putting these values in config.json</p>
</blockquote>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="775" height="706" src="https://jesseliberty.com/wp-content/uploads/2026/08/shhh.jpg" alt="" class="wp-image-13491" style="aspect-ratio:1.0977445533908503;width:301px;height:auto" srcset="https://jesseliberty.com/wp-content/uploads/2026/08/shhh.jpg 775w, https://jesseliberty.com/wp-content/uploads/2026/08/shhh-300x273.jpg 300w, https://jesseliberty.com/wp-content/uploads/2026/08/shhh-150x137.jpg 150w, https://jesseliberty.com/wp-content/uploads/2026/08/shhh-768x700.jpg 768w" sizes="auto, (max-width: 775px) 100vw, 775px" /></figure>



<span id="more-13490"></span>



<h3 class="wp-block-heading">What is <code>config.json</code>?</h3>



<p class="wp-block-paragraph">The <code>config.json</code> file is a widely used configuration file format in many programming environments, particularly in JavaScript and .NET applications. It serves as a simple way to store application settings, such as API endpoints, feature flags, and other non-sensitive configurations. The structure of a <code>config.json</code> file is straightforward, making it easy for developers to read and modify.</p>



<h4 class="wp-block-heading">Example of <code>config.json</code></h4>



<pre class="wp-block-code"><code>{
  "ApiUrl": "https://api.example.com",
  "FeatureFlag": true
}</code></pre>



<h3 class="wp-block-heading">Advantages of Using <code>config.json</code></h3>



<ol class="wp-block-list">
<li><strong>Simplicity and Accessibility</strong>: One of the primary advantages of using <code>config.json</code> is its simplicity. Developers can easily read and modify the file, making it an excellent choice for local development and testing environments. This ease of access allows for rapid iteration and debugging.</li>



<li><strong>Version Control</strong>: Configuration files can be included in version control systems like Git. This feature is beneficial for tracking changes over time, allowing teams to collaborate effectively and maintain a history of configuration changes. <br /><br /><strong>Note</strong>, if you have secret values (such as keys) you do <em>not</em> want them in version control. One solution is to add them to your .gitignore file. A better solution is not to have them in config.json in the first place.<br /></li>



<li><strong>No Additional Setup Required</strong>: Unlike secrets management systems, which may require additional setup and configuration, using <code>config.json</code> typically involves minimal overhead. Developers can start using it right away without needing to integrate with external services.</li>
</ol>



<h3 class="wp-block-heading">Disadvantages of Using <code>config.json</code></h3>



<ol class="wp-block-list">
<li><strong>Security Risks</strong>: The most significant drawback of using <code>config.json</code> is its lack of security for sensitive data. If sensitive information, such as passwords or API keys, is stored in this file, it can be easily accessed by anyone with access to the codebase. This poses a substantial risk, especially in production environments.</li>



<li><strong>Accidental Exposure</strong>: Including <code>config.json</code> in version control can lead to accidental exposure of sensitive data. Developers must be diligent about ensuring that sensitive information is excluded from version control, which can be challenging.</li>



<li><strong>Limited to Non-Sensitive Data</strong>: While <code>config.json</code> is suitable for general configuration, it is not designed for managing sensitive information securely. Developers must find alternative methods for handling sensitive data, which can complicate the development process.</li>
</ol>



<h2 class="wp-block-heading">Secrets Management in Microsoft Agent Framework</h2>



<h3 class="wp-block-heading">What is Secrets Management?</h3>



<p class="wp-block-paragraph">The Microsoft Agent Framework provides a robust secrets management system designed to securely manage sensitive information such as credentials, API keys, and other secrets. This system is particularly useful for applications deployed in production environments where security is paramount.</p>



<h4 class="wp-block-heading">Example of Secrets Management</h4>



<p class="wp-block-paragraph">Using Azure Key Vault, developers can securely store and retrieve secrets. Here’s a simple example of how to access a secret using the Azure SDK:</p>



<pre class="wp-block-code"><code>var secretClient = new SecretClient(new Uri("https://&lt;your-key-vault-name&gt;.vault.azure.net/"), new DefaultAzureCredential());
KeyVaultSecret secret = await secretClient.GetSecretAsync("MySecret");
string secretValue = secret.Value;</code></pre>



<h3 class="wp-block-heading">Advantages of Using Secrets Management</h3>



<ol class="wp-block-list">
<li><strong>Enhanced Security</strong>: The primary advantage of using a secrets management system is its built-in security features. Secrets are encrypted and access-controlled, ensuring that sensitive data is not exposed in the codebase. This level of security is essential for protecting sensitive information in production environments.</li>



<li><strong>Centralized Management</strong>: Secrets management systems like Azure Key Vault allow for centralized management of secrets across multiple applications. This centralization simplifies the process of updating and rotating secrets, reducing the risk of outdated or compromised credentials.</li>



<li><strong>Integration with Azure Services</strong>: The Microsoft Agent Framework&#8217;s secrets management seamlessly integrates with other Azure services, providing a cohesive environment for managing application secrets. This integration enhances the overall security posture of applications deployed in the Azure ecosystem.</li>
</ol>



<h3 class="wp-block-heading">Disadvantages of Using Secrets Management</h3>



<ol class="wp-block-list">
<li><strong>Complexity</strong>: Implementing a secrets management system can introduce additional complexity in setup and management compared to using a simple configuration file. Developers must familiarize themselves with the secrets management system and its APIs, which may require additional time and resources.</li>



<li><strong>Cost</strong>: Depending on the chosen secrets management solution, there may be associated costs. For example, using Azure Key Vault incurs charges based on the number of operations performed and the amount of data stored. Organizations must weigh these costs against the benefits of enhanced security.</li>



<li><strong>Learning Curve</strong>: For teams unfamiliar with secrets management practices, there may be a learning curve involved in adopting a new system. Training and documentation may be necessary to ensure that all team members understand how to use the system effectively.</li>
</ol>



<h2 class="wp-block-heading">Key Trade-offs</h2>



<p class="wp-block-paragraph">When deciding between <code>config.json</code> and secrets management in the Microsoft Agent Framework, developers must consider several key trade-offs:</p>



<ol class="wp-block-list">
<li><strong>Security vs. Convenience</strong>: Using <code>config.json</code> is convenient for non-sensitive configurations but poses security risks for sensitive data. In contrast, the Microsoft Agent Framework&#8217;s secrets management is secure but may require more setup and management effort.</li>



<li><strong>Development vs. Production</strong>: <code>config.json</code> is often more suitable for development environments, where rapid iteration is essential. However, for production environments, where security is a priority, leveraging secrets management is advisable.</li>



<li><strong>Version Control</strong>: Configuration files can be versioned easily, allowing for tracking changes over time. However, secrets should never be included in version control to prevent accidental exposure, necessitating a different approach for managing sensitive data.</li>
</ol>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Choosing between <code>config.json</code> and secrets management in the Microsoft Agent Framework ultimately depends on the specific needs of your application. For general configuration values that do not involve sensitive information, <code>config.json</code> remains a practical choice, provided that developers are diligent about handling sensitive data appropriately. However, for applications that require the management of sensitive information, leveraging the secrets management capabilities of the Microsoft Agent Framework is advisable to ensure security and compliance.</p>



<p class="wp-block-paragraph">In summary, understanding the differences and trade-offs between these two approaches is crucial for developers aiming to build secure and efficient applications. By carefully considering the specific requirements of your project, you can make an informed decision that balances convenience, security, and maintainability.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Detecting AI</title>
		<link>https://jesseliberty.com/2026/08/08/detecting-ai/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Sat, 08 Aug 2026 18:25:51 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13487</guid>

					<description><![CDATA[I fed the first half of one of the blog posts generated by my demonstration program to Pangram. Here are the results: Bzzzz Still your turn.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I fed the first half of one of the blog posts generated by my demonstration program to Pangram. Here are the results:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="629" height="540" src="https://jesseliberty.com/wp-content/uploads/2026/08/image.png" alt="" class="wp-image-13488" style="aspect-ratio:1.164819583899997;width:316px;height:auto" srcset="https://jesseliberty.com/wp-content/uploads/2026/08/image.png 629w, https://jesseliberty.com/wp-content/uploads/2026/08/image-300x258.png 300w, https://jesseliberty.com/wp-content/uploads/2026/08/image-150x129.png 150w" sizes="auto, (max-width: 629px) 100vw, 629px" /></figure>



<p class="wp-block-paragraph">Bzzzz Still your turn.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>