<?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>Fri, 21 Aug 2026 11:02:29 +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>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 fetchpriority="high" 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="(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 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="(max-width: 771px) 100vw, 771px" /></figure>



<p class="wp-block-paragraph"><em>Get it? An elephant never forgets. Get it? Get it??</em></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"></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>. </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 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="(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>
		<item>
		<title>ChatClient Middleware vs. Agent Middleware</title>
		<link>https://jesseliberty.com/2026/08/08/chatclient-middleware-vs-agent-middleware/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Sat, 08 Aug 2026 17:55:28 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Essentials]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13481</guid>

					<description><![CDATA[As noted in a previous post, middleware plays a pivotal role in enhancing the functionality and observability of agents. The Microsoft Agent Framework utilizes two primary types of middleware: ChatClient Middleware and Agent Middleware. Understanding the distinctions between these two &#8230; <a href="https://jesseliberty.com/2026/08/08/chatclient-middleware-vs-agent-middleware/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">As noted in a<a href="https://jesseliberty.com/2026/07/23/middleware-in-microsoft-agent-framework/"> previous post</a>, middleware plays a pivotal role in enhancing the functionality and observability of agents. The Microsoft Agent Framework utilizes two primary types of middleware: <strong>ChatClient Middleware</strong> and <strong>Agent Middleware</strong>. Understanding the distinctions between these two middleware types is essential for developers looking to optimize their agents&#8217; performance and capabilities. This post will delve into the differences between ChatClient Middleware and Agent Middleware, illustrating their functionalities with examples, including a demonstration of function-invocation middleware for a single agent.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="765" height="457" src="https://jesseliberty.com/wp-content/uploads/2026/08/middleware-with-search.jpg" alt="" class="wp-image-13483" style="aspect-ratio:1.673980089791138;width:398px;height:auto" srcset="https://jesseliberty.com/wp-content/uploads/2026/08/middleware-with-search.jpg 765w, https://jesseliberty.com/wp-content/uploads/2026/08/middleware-with-search-300x179.jpg 300w, https://jesseliberty.com/wp-content/uploads/2026/08/middleware-with-search-150x90.jpg 150w" sizes="auto, (max-width: 765px) 100vw, 765px" /></figure>



<p class="wp-block-paragraph">This is the approach I use in the<a href="https://github.com/JesseLiberty/blogMigration---public"> demonstration program</a> to log the invocation of the Tavily search tool.</p>



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



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



<p class="wp-block-paragraph">To review, middleware is a software layer that acts as an intermediary between different software applications or components. In the context of the Microsoft Agent Framework, middleware enhances the interaction between agents and their underlying systems, allowing developers to intercept, modify, and log messages and operations. This capability is crucial for debugging, monitoring, and extending the functionality of agents.</p>



<h2 class="wp-block-heading">ChatClient Middleware</h2>



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



<p class="wp-block-paragraph">ChatClient Middleware is specifically designed to intercept calls made to an <code>IChatClient</code> implementation. This middleware is particularly useful for logging, modifying, or inspecting the raw messages exchanged between the agent and the underlying language model (LLM). By utilizing ChatClient Middleware, developers can gain insights into the communication flow, which is essential for debugging and improving the agent&#8217;s performance.</p>



<h3 class="wp-block-heading">Use Case</h3>



<p class="wp-block-paragraph">A common use case for ChatClient Middleware is logging all messages sent and received by the agent. This can help developers understand how the agent interacts with users and the LLM, allowing for better optimization of responses and overall user experience.</p>



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



<p class="wp-block-paragraph">Here’s a simple example of how to implement ChatClient Middleware in C#:</p>



<pre class="wp-block-code"><code>var chatClient = new AIProjectClient(new Uri("your-uri"), new DefaultAzureCredential())
    .GetProjectOpenAIClient()
    .GetProjectResponsesClient()
    .AsIChatClient(deploymentName);

var middlewareEnabledChatClient = chatClient
    .AsBuilder()
    .Use(getResponseFunc: CustomChatClientMiddleware, getStreamingResponseFunc: null)
    .Build();</code></pre>



<p class="wp-block-paragraph">In this example, <code>CustomChatClientMiddleware</code> would be a function that processes the messages before they are sent to or after they are received from the LLM. This middleware can log the messages, modify them, or even implement additional logic based on the content of the messages.</p>



<h2 class="wp-block-heading">Agent Middleware</h2>



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



<p class="wp-block-paragraph">Agent Middleware operates at a higher level than ChatClient Middleware. It allows for the interception of all agent runs, enabling developers to inspect and modify the input and output of the agent&#8217;s operations. This middleware is essential for managing the overall behavior of the agent, including session management, identity tracking, and token budget management.</p>



<h3 class="wp-block-heading">Use Case</h3>



<p class="wp-block-paragraph">A typical use case for Agent Middleware is collecting information about the agent&#8217;s session or identity. For instance, if an agent needs to maintain context across multiple interactions or manage its resource usage effectively, Agent Middleware would be the appropriate choice.</p>



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



<p class="wp-block-paragraph">Here’s how you might implement Agent Middleware in C#:</p>



<pre class="wp-block-code"><code>var agent = new ChatClientAgent(middlewareEnabledChatClient, instructions: "You are a helpful assistant.");</code></pre>



<p class="wp-block-paragraph">In this example, the <code>ChatClientAgent</code> is initialized with the middleware-enabled chat client. The agent can now leverage the capabilities of both ChatClient and Agent Middleware to enhance its functionality.</p>



<h2 class="wp-block-heading">Function-Invocation Middleware for a Single Agent</h2>



<p class="wp-block-paragraph">Function-invocation middleware can be applied to both ChatClient and Agent Middleware. This type of middleware allows for the interception of function calls executed by the agent, enabling developers to inspect and modify inputs and outputs. This capability is particularly useful for logging, debugging, and implementing additional logic based on the agent&#8217;s operations.</p>



<h3 class="wp-block-heading">Example of Function-Invocation Middleware in C</h3>



<p class="wp-block-paragraph">Here’s a simple example of how to implement function-invocation middleware for a single agent:</p>



<pre class="wp-block-code"><code>public class FunctionInvocationMiddleware
{
    public async Task InvokeAsync(AgentRunContext context, Func&lt;AgentRunContext, Task&gt; next)
    {
        // Before the function call
        Console.WriteLine($"Before function call: {context.FunctionName}");

        // Call the next middleware in the pipeline
        await next(context);

        // After the function call
        Console.WriteLine($"After function call: {context.Result}");
    }
}

// Usage
var agent = new ChatClientAgent(middlewareEnabledChatClient, instructions: "You are a helpful assistant.")
    .AsBuilder()
    .Use(FunctionInvocationMiddleware.InvokeAsync)
    .Build();</code></pre>



<p class="wp-block-paragraph">In this example, the <code>FunctionInvocationMiddleware</code> class defines an <code>InvokeAsync</code> method that logs the function name before and after the function call. This middleware can be used to track the execution flow of the agent&#8217;s operations, providing valuable insights into its behavior.</p>



<p class="wp-block-paragraph">In the demonstration program we modify the creation of the ResearcherAgent to ad this bit of code:</p>



<pre class="wp-block-code"><code>.Use(async (agent, context, next, cancellationToken) =>
        {
            if (context.Function.Name == tavilyTool.Name)
            {
                _logger.LogInformation(
                    "Researcher invoking Tavily tool '{Tool}' with arguments {Arguments}",
                    context.Function.Name,
                    context.Arguments);
            }

            return await next(context, cancellationToken);
        })</code></pre>



<p class="wp-block-paragraph">That&#8217;s the only change necessary to have the middleware capture the calls to Tavily tool by the Researcher agent.  None of the other agents change.<br /><br />The trace from this change looks like this:</p>



<pre class="wp-block-code"><code>&#91;trace] → execute_tool tavily_search
info: BlogWriter.ResearcherAgent&#91;0]
      Researcher invoking Tavily tool 'tavily_search' with arguments &#91;query, ChatClient middleware vs Agent middleware Microsoft Agent Framework]
&#91;trace] ← execute_tool tavily_search (1796 ms)</code></pre>



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



<p class="wp-block-paragraph">In summary, the Microsoft Agent Framework offers two distinct types of middleware: <strong>ChatClient Middleware</strong> and <strong>Agent Middleware</strong>.</p>



<ul class="wp-block-list">
<li><strong>ChatClient Middleware</strong> focuses on the interaction with the chat client, allowing for the logging and modification of messages exchanged with the LLM.</li>



<li><strong>Agent Middleware</strong> deals with the overall operations of the agent, enabling developers to manage session information, identity, and resource usage.</li>
</ul>



<p class="wp-block-paragraph">Additionally, function-invocation middleware can be implemented to intercept function calls, allowing for detailed control over the agent&#8217;s behavior.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Long-term memory in Microsoft Agent Framework</title>
		<link>https://jesseliberty.com/2026/08/05/long-term-memory-in-microsoft-agent-framework/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Wed, 05 Aug 2026 19:05:59 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13474</guid>

					<description><![CDATA[Long-term memory in AI agents refers to the ability to retain information across multiple interactions and sessions. This is essential for creating a more personalized user experience, as it allows agents to recall user preferences, past conversations, and contextual information. &#8230; <a href="https://jesseliberty.com/2026/08/05/long-term-memory-in-microsoft-agent-framework/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Long-term memory in AI agents refers to the ability to retain information across multiple interactions and sessions. This is essential for creating a more personalized user experience, as it allows agents to recall user preferences, past conversations, and contextual information. The Microsoft Agent Framework employs a dual memory architecture that includes both short-term and long-term memory.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="761" height="674" src="https://jesseliberty.com/wp-content/uploads/2026/08/memory-brain.jpg" alt="" class="wp-image-13475" style="aspect-ratio:1.1290781262342997;width:341px;height:auto" srcset="https://jesseliberty.com/wp-content/uploads/2026/08/memory-brain.jpg 761w, https://jesseliberty.com/wp-content/uploads/2026/08/memory-brain-300x266.jpg 300w, https://jesseliberty.com/wp-content/uploads/2026/08/memory-brain-150x133.jpg 150w" sizes="auto, (max-width: 761px) 100vw, 761px" /></figure>



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



<h3 class="wp-block-heading">Memory Architecture</h3>



<ol class="wp-block-list">
<li><strong>Short-Term Memory</strong>: This component tracks ongoing interactions and is typically volatile, meaning it is cleared after the session ends. It allows the agent to respond to immediate queries and maintain a fluid conversation.</li>



<li><strong>Long-Term Memory</strong>: In contrast, long-term memory retains information across sessions, enabling the agent to remember details that can enhance future interactions. This memory is crucial for building a relationship with users, as it allows the agent to provide continuity and context in conversations.</li>
</ol>



<h3 class="wp-block-heading">Context Providers</h3>



<p class="wp-block-paragraph">In MAF, long-term memory is managed through ContextProviders. These components allow agents to access relevant past interactions, user preferences, and other contextual information. By leveraging ContextProviders, agents can provide more relevant responses based on historical data, making interactions feel more natural and engaging.</p>



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



<p class="wp-block-paragraph">To effectively manage long-term memory, AI agents require a reliable storage solution. Databases play a critical role in this process. Popular databases such as Neo4j and Azure Cosmos DB are commonly used to store long-term memory.</p>



<ul class="wp-block-list">
<li><strong>Neo4j</strong>: This graph database allows for the storage of entities extracted from conversations. It enables the classification and linking of these entities back to the original messages, facilitating complex queries and relationships.</li>



<li><strong>Azure Cosmos DB</strong>: This database offers a unified solution for memory systems, providing speed and scalability essential for AI agents. Its multi-model capabilities allow for the storage of various data types, making it a versatile choice for long-term memory management.</li>
</ul>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/08/20/memory-in-microsoft-agent-framework-an-overview/">Also, please see my post on Agent Memory for .NET</a></p>



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



<p class="wp-block-paragraph">The integration of databases into the Microsoft Agent Framework opens up a plethora of possibilities for AI agents. Here are some real-world use cases that illustrate the benefits of long-term memory:</p>



<h3 class="wp-block-heading">Personalized Recommendations</h3>



<p class="wp-block-paragraph">With long-term memory an AI agent can remember user preferences and past interactions to suggest tailored options. If a user frequently inquires about travel destinations, the agent can store this information and offer relevant suggestions in future conversations. This not only enhances user satisfaction but also fosters a sense of connection between the user and the agent.</p>



<h3 class="wp-block-heading">Contextual Awareness</h3>



<p class="wp-block-paragraph">Long-term memory enables agents to maintain context over multiple sessions. For example, if a user mentions a specific project during one interaction, the agent can recall details about that project in subsequent conversations. This continuity enhances the overall user experience, as it allows for more meaningful and relevant interactions. Users are more likely to engage with an agent that remembers their interests and past discussions.</p>



<h2 class="wp-block-heading">Supporting Data and Quotes</h2>



<p class="wp-block-paragraph">According to a blog post on Neo4j, &#8220;Long-term memory consists of entities which can be automatically extracted from conversations using the LLM and classified with the POLE+O schema.&#8221; This highlights the need for a systematic approach to data storage that allows for easy retrieval and classification.</p>



<p class="wp-block-paragraph">POLE+O schema is a framework used to analyze systems by breaking them into five interacting dimensions:</p>



<ul class="wp-block-list">
<li>P)eople &#8211; Human actors</li>



<li>O)bjects &#8211; tangible or digital artifacts</li>



<li>L)ocation &#8211; spatial or contextual setting</li>



<li>E)vents &#8211; actions that trigger change</li>



<li>O)rganization &#8211; the structure or procedural layer that connects everything</li>
</ul>



<p class="wp-block-paragraph">In essence, this is the <em>Who, What, Where, When </em>and <em>How</em>.</p>



<p class="wp-block-paragraph">A Microsoft Community Hub article states, &#8220;Long-term memory is typically shared across sessions,&#8221; emphasizing the necessity of a database that can persist data beyond individual interactions. This persistence is crucial for building a comprehensive understanding of user preferences and behaviors.</p>



<p class="wp-block-paragraph">When an agent interacts with a user, it can save important information (like preferences or past conversations) in a database. The next time the user interacts with the agent, it can retrieve this information to provide a more personalized experience. This process is fundamental to creating a seamless and engaging interaction between users and AI agents.</p>



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



<p class="wp-block-paragraph">To illustrate how an AI agent might store and retrieve user preferences using a database, here’s a simple example in C#:</p>



<pre class="wp-block-code"><code>public class UserPreferences
{
    public string UserId { get; set; }
    public string Preference { get; set; }
}

public class MemoryDatabase
{
    private List&lt;UserPreferences&gt; preferencesStore = new List&lt;UserPreferences&gt;();

    public void SavePreference(string userId, string preference)
    {
        preferencesStore.Add(new UserPreferences { UserId = userId, Preference = preference });
    }

    public List&lt;string&gt; GetPreferences(string userId)
    {
        return preferencesStore.Where(p =&gt; p.UserId == userId).Select(p =&gt; p.Preference).ToList();
    }
}

// Usage
var memoryDb = new MemoryDatabase();
memoryDb.SavePreference("user123", "likes travel");
var userPreferences = memoryDb.GetPreferences("user123");</code></pre>



<p class="wp-block-paragraph">In this code snippet, we define a <code>UserPreferences</code> class to represent user preferences and a <code>MemoryDatabase</code> class to manage the storage and retrieval of these preferences. The <code>SavePreference</code> method allows the agent to store user preferences, while the <code>GetPreferences</code> method retrieves them for future interactions. </p>



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



<p class="wp-block-paragraph">The integration of databases into the Microsoft Agent Framework is crucial for enabling long-term memory in AI agents. By leveraging structured data storage, agents can provide personalized and contextually aware interactions, significantly enhancing user experience. As AI technology continues to advance, the ability to remember and learn from past interactions will become increasingly important, making the role of databases in AI development more critical than ever. By understanding and implementing these concepts, developers can create more intelligent and responsive AI agents that truly understand and cater to user needs.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>LangChain vs Microsoft Agent Framework</title>
		<link>https://jesseliberty.com/2026/08/01/langchain-vs-microsoft-agent-framework/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Sat, 01 Aug 2026 18:44:39 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13466</guid>

					<description><![CDATA[In the rapidly evolving landscape of artificial intelligence, developers are presented with a myriad of frameworks to build applications that leverage the power of large language models (LLMs) and multi-agent systems. Among these, LangChain, LangGraph, and the Microsoft Agent Framework &#8230; <a href="https://jesseliberty.com/2026/08/01/langchain-vs-microsoft-agent-framework/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In the rapidly evolving landscape of artificial intelligence, developers are presented with a myriad of frameworks to build applications that leverage the power of large language models (LLMs) and multi-agent systems. Among these, LangChain, LangGraph, and the Microsoft Agent Framework stand out for their unique capabilities and target use cases. This post aims to examine the differences between these frameworks, helping developers make informed decisions based on their specific needs and environments.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="575" height="419" src="https://jesseliberty.com/wp-content/uploads/2026/08/chained-computer.jpg" alt="" class="wp-image-13467" style="aspect-ratio:1.3723662129405183;width:303px;height:auto" srcset="https://jesseliberty.com/wp-content/uploads/2026/08/chained-computer.jpg 575w, https://jesseliberty.com/wp-content/uploads/2026/08/chained-computer-300x219.jpg 300w, https://jesseliberty.com/wp-content/uploads/2026/08/chained-computer-150x109.jpg 150w" sizes="auto, (max-width: 575px) 100vw, 575px" /></figure>



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



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



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



<p class="wp-block-paragraph">LangChain is a comprehensive framework designed for building applications that utilize large language models. It provides a rich set of tools for creating chains, retrievers, and tool-calling agents, making it particularly suitable for rapid prototyping and a wide array of use cases. The framework is primarily Python-based, which aligns well with the preferences of many data scientists and AI developers.</p>



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



<p class="wp-block-paragraph">LangGraph, on the other hand, is a lower-level orchestration framework that focuses on building stateful multi-agent systems. It is tailored for workflows that require loops, persistence, and cyclic reasoning, making it ideal for complex agent architectures. LangGraph is particularly useful in scenarios where explicit state management is crucial, allowing developers to create intricate workflows that can adapt and respond to changing conditions.</p>



<p class="wp-block-paragraph">These are not incompatible and many (most?) AI applications using one will use the other as well. I started my demonstration program starting <a href="https://jesseliberty.com/2026/06/11/creating-a-multi-agent-application/">here</a> using LangChain and LangGraph and then translated it to C# starting <a href="https://jesseliberty.com/2026/06/19/migrating-agentic-code-python-c-part-1/">here</a>, and finally migrated it to Microsoft Agent Framework starting <a href="https://jesseliberty.com/2026/06/22/migrating-agentic-code-python-c-part-6-final/">here</a>.</p>



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



<p class="wp-block-paragraph">The Microsoft Agent Framework is a robust solution designed specifically for .NET environments and Azure integration. It supports multi-agent orchestration and is built for enterprise-grade applications, providing first-class support for C# and Python. This framework is particularly advantageous for organizations that are heavily invested in the Microsoft ecosystem, as it offers seamless integration with Azure services and tools.</p>



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



<h3 class="wp-block-heading">1. Ecosystem Fit</h3>



<ul class="wp-block-list">
<li><strong>LangChain</strong>: This framework is favored by teams that require flexibility and rapid iteration, especially in Python environments. Its extensive library of integrations (over 1,000) allows developers to quickly adapt and extend their applications.</li>



<li><strong>LangGraph</strong>: LangGraph is the choice for applications that necessitate explicit state management and complex workflows. It excels in scenarios where persistent memory and human-in-the-loop control are essential.</li>



<li><strong>Microsoft Agent Framework</strong>: This framework is ideal for .NET developers and organizations that rely on Azure services.</li>
</ul>



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



<ul class="wp-block-list">
<li><strong>LangChain</strong>: The architecture of LangChain emphasizes building agent capabilities, focusing on the skills layer. It is designed for rapid development, allowing developers to create and iterate on applications quickly.</li>



<li><strong>LangGraph</strong>: In contrast, LangGraph serves as the control layer, defining how agents think and manage workflows. It employs structured logic, such as state machines and loops, to facilitate complex decision-making processes.</li>



<li><strong>Microsoft Agent Framework</strong>: This framework orchestrates multiple agents into a cohesive system, making it particularly suitable for enterprise applications that require coordination among various agents.</li>
</ul>



<h3 class="wp-block-heading">3. Integration and Support</h3>



<ul class="wp-block-list">
<li><strong>LangChain</strong>: With its vast ecosystem of integrations, LangChain is versatile and can be applied to a wide range of applications, from simple chatbots to complex data processing pipelines.</li>



<li><strong>LangGraph</strong>: Designed for complex, cloud-agnostic workflows, LangGraph excels in scenarios that require checkpointing and debugging, making it a powerful tool for developers working on intricate systems.</li>



<li><strong>Microsoft Agent Framework</strong>: The deep integration with Azure services and the focus on enterprise-level orchestration make the Microsoft Agent Framework a strong choice for organizations looking to leverage cloud capabilities in their applications.</li>
</ul>



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



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



<p class="wp-block-paragraph">LangChain is particularly well-suited for projects that require quick iterations and flexibility. Some common use cases include:</p>



<ul class="wp-block-list">
<li><strong>Retrieval-Augmented Generation (RAG) Pipelines</strong>: These pipelines combine retrieval mechanisms with generative models to produce contextually relevant responses.</li>



<li><strong>Multi-Step Workflows</strong>: LangChain can efficiently manage workflows that involve multiple steps, allowing for seamless transitions between tasks.</li>
</ul>



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



<p class="wp-block-paragraph">LangGraph shines in applications that require persistent memory and complex task automation. Typical use cases include:</p>



<ul class="wp-block-list">
<li><strong>Human-in-the-Loop Control</strong>: Scenarios where human oversight is necessary, such as in decision-making processes that require validation or input from users.</li>



<li><strong>Complex Task Automation</strong>: Applications that involve intricate workflows, such as automated customer support systems or multi-agent negotiation platforms.</li>
</ul>



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



<p class="wp-block-paragraph">The Microsoft Agent Framework is ideal for enterprise applications, particularly in sectors that demand robust orchestration and compliance. Use cases include:</p>



<ul class="wp-block-list">
<li><strong>Healthcare Applications</strong>: Systems that require secure and compliant handling of sensitive patient data, where multiple agents must work together to provide accurate and timely information.</li>



<li><strong>Financial Services</strong>: Applications that need to adhere to strict regulatory requirements while managing complex workflows involving multiple agents.</li>
</ul>



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



<p class="wp-block-paragraph">To illustrate the capabilities of each framework, here are simple code snippets demonstrating their usage.</p>



<h3 class="wp-block-heading">LangChain (Python)</h3>



<pre class="wp-block-code"><code>from langchain import LLMChain, OpenAI

# Create a simple LLM chain
llm = OpenAI(model="text-davinci-003")
chain = LLMChain(llm=llm, prompt="What is the capital of France?")
response = chain.run()
print(response)  # Output: Paris</code></pre>



<h3 class="wp-block-heading">LangGraph (Python)</h3>



<pre class="wp-block-code"><code>from langgraph import StateMachine

# Define a simple state machine
sm = StateMachine()
sm.add_state("start", on_enter=lambda: print("Starting..."))
sm.add_state("end", on_enter=lambda: print("Ending..."))
sm.add_transition("start", "end")
sm.run("start")  # Output: Starting...</code></pre>



<h3 class="wp-block-heading">Microsoft Agent Framework (C#)</h3>



<pre class="wp-block-code"><code>using Microsoft.AgentFramework;

// Create a simple agent
var agent = new Agent("MyAgent");
agent.OnMessageReceived += (sender, message) =&gt; {
    Console.WriteLine($"Received: {message.Content}");
};
agent.Start();</code></pre>



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



<p class="wp-block-paragraph">Choosing between LangChain, LangGraph, and the Microsoft Agent Framework ultimately depends on your specific needs, including the programming environment, the complexity of the agent workflows, and the level of integration required with cloud services. Each framework has its strengths, making them suitable for different types of AI applications. </p>



<ul class="wp-block-list">
<li><strong>LangChain</strong> is ideal for rapid development and flexibility in Python environments.</li>



<li><strong>LangGraph</strong> excels in scenarios requiring complex workflows and state management.</li>



<li><strong>Microsoft Agent Framework</strong> is the best choice for enterprise applications, particularly for organizations leveraging the Microsoft ecosystem.</li>
</ul>



<p class="wp-block-paragraph">That said, I suspect that the driving factor will be which environment the developer (team?) is comfortable with. .NET developers will be driven to Microsoft Agent Framework and most others will use LangChain/LangGraph or another Python framework.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>OpenTelemetry in Microsoft Agent Framework Apps</title>
		<link>https://jesseliberty.com/2026/07/31/opentelemetry-in-microsoft-agent-framework-apps/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Fri, 31 Jul 2026 15:28:11 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13462</guid>

					<description><![CDATA[Observability has become a critical component for ensuring the performance and reliability of applications. OpenTelemetry, an open-source observability framework, provides developers with the tools necessary to collect and export telemetry data from their applications. When integrated with the Microsoft Agent &#8230; <a href="https://jesseliberty.com/2026/07/31/opentelemetry-in-microsoft-agent-framework-apps/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Observability has become a critical component for ensuring the performance and reliability of applications. OpenTelemetry, an open-source observability framework, provides developers with the tools necessary to collect and export telemetry data from their applications. When integrated with the Microsoft Agent Framework (MAF), OpenTelemetry offers profound insights into the performance and behavior of AI agents. This post will explore how to effectively use OpenTelemetry in a Microsoft Agent Framework application, highlighting key trends, real-world use cases, challenges, and providing practical code examples.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="559" height="535" src="https://jesseliberty.com/wp-content/uploads/2026/07/OpenTelemetry.jpg" alt="" class="wp-image-13463" style="aspect-ratio:1.0448611232804697;width:308px;height:auto" srcset="https://jesseliberty.com/wp-content/uploads/2026/07/OpenTelemetry.jpg 559w, https://jesseliberty.com/wp-content/uploads/2026/07/OpenTelemetry-300x287.jpg 300w, https://jesseliberty.com/wp-content/uploads/2026/07/OpenTelemetry-150x144.jpg 150w" sizes="auto, (max-width: 559px) 100vw, 559px" /></figure>



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



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



<p class="wp-block-paragraph">OpenTelemetry is a set of APIs, libraries, agents, and instrumentation that enables developers to collect telemetry data from their applications. This data can include traces, metrics, and logs, which are essential for monitoring application performance and diagnosing issues. OpenTelemetry is designed to be vendor-agnostic, allowing developers to send their telemetry data to various backends for analysis.</p>



<h2 class="wp-block-heading">Key Trends and Innovations in OpenTelemetry and MAF</h2>



<h3 class="wp-block-heading">1. Built-in Support for OpenTelemetry</h3>



<p class="wp-block-paragraph">One of the most significant advancements in the Microsoft Agent Framework is its built-in support for OpenTelemetry. This integration allows developers to automatically emit spans and metrics without the need for manual wrapping of every agent call. This feature simplifies the process of adding observability to applications, enabling developers to focus on building functionality rather than instrumentation.</p>



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



<p class="wp-block-paragraph">OpenTelemetry employs semantic conventions that help structure telemetry data in a meaningful way. In the context of AI agents, the OpenTelemetry GenAI semantic conventions ensure that the telemetry data collected is relevant and useful for analysis. This structured approach aids developers in understanding the performance and behavior of their agents more effectively.</p>



<h3 class="wp-block-heading">3. Support for Multi-Agent Systems</h3>



<p class="wp-block-paragraph">The Microsoft Agent Framework is designed to support multi-agent architectures, allowing for complex interactions and behaviors to be monitored effectively. This capability is particularly beneficial in scenarios where multiple agents work together to complete tasks, as it provides a comprehensive view of the system&#8217;s performance.</p>



<p class="wp-block-paragraph">By integrating OpenTelemetry, developers can monitor agent performance and interactions, gaining insights into usage patterns, error rates, and overall system efficiency. This data can be invaluable for optimizing the application and enhancing user experience.</p>



<h2 class="wp-block-heading">Challenges in Integration</h2>



<p class="wp-block-paragraph">While the integration of OpenTelemetry with the Microsoft Agent Framework offers numerous benefits, there are challenges that developers may encounter. One notable issue is the missing Activity Events. Reports indicate that while spans and metrics are emitted correctly, some expected Activity Events, such as <code>gen_ai.client.inference.operation.details</code>, are not being generated. This limitation can restrict the granularity of observability, making it difficult to gain a complete understanding of agent interactions and performance.</p>



<h2 class="wp-block-heading">Code Example: Setting Up OpenTelemetry in a Microsoft Agent Framework Application</h2>



<p class="wp-block-paragraph">To illustrate how to set up OpenTelemetry in a Microsoft Agent Framework application, consider the following code example:</p>



<pre class="wp-block-code"><code>using Microsoft.Extensions.AI;

// Create OpenAI client
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
var apiKey = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY");
var deploymentName = "gpt-4o-mini";

using var client = new AzureOpenAIClient(new Uri(endpoint), new AzureKeyCredential(apiKey))
    .GetChatClient(deploymentName)
    .AsIChatClient()
    .AsBuilder()
    .UseOpenTelemetry(sourceName: "MyAgent", configure: (cfg) =&gt; cfg.EnableSensitiveData = true)
    .Build();

var thread = client.GetNewThread();
logger.LogInformation("Agent created successfully with ID: {AgentId}", client.Id);</code></pre>



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



<ol class="wp-block-list">
<li><strong>Environment Variables</strong>: The code begins by retrieving the Azure OpenAI endpoint and API key from environment variables. This approach ensures that sensitive information is not hard-coded into the application.</li>



<li><strong>Creating the OpenAI Client</strong>: An instance of <code>AzureOpenAIClient</code> is created using the retrieved endpoint and API key. This client is responsible for interacting with the OpenAI service.</li>



<li><strong>Using OpenTelemetry</strong>: The <code>UseOpenTelemetry</code> method is called on the chat client builder. This method configures OpenTelemetry for the agent, allowing it to emit telemetry data. The <code>sourceName</code> parameter is set to &#8220;MyAgent,&#8221; and sensitive data emission is enabled.</li>



<li><strong>Creating a New Thread</strong>: Finally, a new thread is created for the chat client, and a log message is generated to confirm the successful creation of the agent.</li>
</ol>



<p class="wp-block-paragraph">You can use OpenTelemetry on each agent, or you can instrument the model calls. To do the latter you only need to update Program.cs</p>



<pre class="wp-block-code"><code>IChatClient llm = openAIClient
    .GetChatClient(modelName)
    .AsIChatClient()
    .AsBuilder()
    .UseFunctionInvocation()
    .UseOpenTelemetry(sourceName: "BlogWriter.Agents")
    .Use(inner => new TokenCapChatClient(inner, maxTotalTokens: 10000))
    .Build();</code></pre>



<p class="wp-block-paragraph">Per agent allows you to capture which agent ran and agent-level timing. Per model call allows you to track model name, token usage, tool calls and per-round-trip latency.</p>



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



<p class="wp-block-paragraph">Integrating OpenTelemetry with the Microsoft Agent Framework significantly enhances the observability of AI agents, providing developers with valuable insights into their performance and interactions. The built-in support for OpenTelemetry, along with semantic conventions and multi-agent system capabilities, makes it a robust choice for monitoring complex applications. </p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Agentic Table of Contents (so far)</title>
		<link>https://jesseliberty.com/2026/07/30/agentic-table-of-contents-so-far/</link>
		
		<dc:creator><![CDATA[Jesse Liberty]]></dc:creator>
		<pubDate>Thu, 30 Jul 2026 20:01:06 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Essentials]]></category>
		<guid isPermaLink="false">https://jesseliberty.com/?p=13458</guid>

					<description><![CDATA[RAG &#8211; A quick example RAG in detail Deeper into RAG The R in RAG PEAS for Agentic AI AI Reasoning and Planning REACT and Agents in AI Creating a multi-agent system (Python &#38; LangChain/LangGraph) part 1 of 6 Migrating &#8230; <a href="https://jesseliberty.com/2026/07/30/agentic-table-of-contents-so-far/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="482" height="462" src="https://jesseliberty.com/wp-content/uploads/2026/07/agentic-logo.jpg" alt="" class="wp-image-13459" style="width:144px;height:auto" srcset="https://jesseliberty.com/wp-content/uploads/2026/07/agentic-logo.jpg 482w, https://jesseliberty.com/wp-content/uploads/2026/07/agentic-logo-300x288.jpg 300w, https://jesseliberty.com/wp-content/uploads/2026/07/agentic-logo-150x144.jpg 150w" sizes="auto, (max-width: 482px) 100vw, 482px" /></figure>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/04/19/rag-a-quick-example/">RAG &#8211; A quick example</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/04/21/rag-in-detail/">RAG in detail</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/04/25/deeper-into-rag/">Deeper into RAG</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/04/25/deeper-into-rag/">The R in RAG</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/05/11/peas-for-agent-ai/">PEAS for Agentic AI</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/05/18/ai-reasoning-and-planning/">AI Reasoning and Planning</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/05/22/react-and-agents-in-ai/">REACT and Agents in AI</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/06/11/creating-a-multi-agent-application/">Creating a multi-agent system (Python &amp; LangChain/LangGraph) part 1 of 6</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/06/19/migrating-agentic-code-python-c-part-1/">Migrating Agentic Code Python -&gt; C# Part 1 of </a>6</p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/06/26/dependency-injection-agent-framework/">Dependency Injection &amp; Microsoft Agentic Framework</a><br /><br /><a href="https://jesseliberty.com/2026/06/28/migrating-c-microsoft-agent-framework/">Migrating C# to Microsoft Agentic Framework</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/07/07/transparency-in-agentics/">Transparency in Agentics</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/07/10/ensuring-agent-safety-in-ai-development/">Ensuring Agent Safety</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/07/21/logging-opentelemetry-in-maf/">Logging &amp; OpenTelemetry in Microsoft Agentic Framework</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/07/21/activity-source-in-microsoft-agent-framework/">Activity Source in Microsoft Agentic Framework</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/07/23/middleware-in-microsoft-agent-framework/">Middleware in Microsoft Agentic Framework</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/07/29/limit-token-usage-in-microsoft-agent-framework/">Limit token usage in Microsoft Agentic Framework</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/07/31/opentelemetry-in-microsoft-agent-framework-apps/">Using OpenTelemetry in Microsoft Agent Framework</a> </p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/08/01/langchain-vs-microsoft-agent-framework/">LangChain/LangGraph vs. Microsoft Agent Framework</a> </p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/08/05/long-term-memory-in-microsoft-agent-framework/">Long term memory in Microsoft Agent Framework</a> </p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/08/08/chatclient-middleware-vs-agent-middleware/">Agent vs ChatClient Middleware</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/08/11/configuration-management-in-microsoft-agent-framework/">Managing Secrets </a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/08/13/microsoft-agent-framework-and-foundry/">Microsoft Agent Framework and Foundry</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/08/20/memory-in-microsoft-agent-framework-an-overview/">Agent Memory for .NET</a></p>



<p class="wp-block-paragraph"><a href="https://jesseliberty.com/2026/08/21/about-nodejs/">About Neo4j</a></p>



<p class="wp-block-paragraph"><em>Note: many of these blog posts had initial research and drafts done by the <a href="https://github.com/JesseLiberty/blogMigration---public">Blog Writer multi-agent application </a>that serves as a demo for these articles. All were then edited by me.</em></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>