<feed xmlns="http://www.w3.org/2005/Atom">
<title>Laurent Kempé</title>
<subtitle>One of the Tech Head Brothers</subtitle>
<link href="https://laurentkempe.com/atom.xml" rel="self"/>
<link href="https://laurentkempe.com"/>
<updated>2026-09-19T16:40:31.074Z</updated>
<id>https://laurentkempe.com/</id>
<author>
<name>Laurent Kempé</name>
</author>
<generator uri="https://astro.build/">Astro</generator>
  <entry>
    <title>TypeSafe's Jev AI Model in .NET: A Community SDK for Structured AI Output in C#</title>
    <link href="https://laurentkempe.com/2026/09/19/typesafe-jev-dotnet-sdk-introduction/"/>
    <id>https://laurentkempe.com/2026/09/19/typesafe-jev-dotnet-sdk-introduction/</id>
    <published>2026-09-19T18:27:12.000Z</published>
    <updated>2026-09-19T18:27:12.000Z</updated>
    <summary type="html">&lt;p&gt;Most AI tooling I&apos;ve used in the last couple of years follows the same pattern. You send a prompt, get back text, and then write brittle code to turn that text into something your app can actually use. JSON mode helps. Function calling helps more. Even then, you are still asking a model trained to write for people to produce machine-readable output, and hoping it doesn&apos;t wrap the JSON in a markdown fence, drop a field, or invent a category that is not in your enum.&lt;/p&gt;
&lt;p&gt;Two days ago I found &lt;a href=&quot;https://typesafe.ai&quot;&gt;TypeSafe&lt;/a&gt; and its model, Jev. It takes a different approach. Instead of generating text, it evaluates typed questions against a piece of input and returns structured, typed decisions. No parsing. No &amp;quot;please respond only with valid JSON.&amp;quot; I liked the idea enough that I had GitHub Copilot with HydraFusion port TypeSafe&apos;s official TypeScript SDK to .NET 11 and C# 15. This post is part introduction to the model and part walkthrough of the ported TypeSafe .NET SDK, so you can try it in C# yourself.&lt;/p&gt;
</summary>
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term=".NET" scheme="https://laurentkempe.com/tags/dotnet" />
    <category term="AI" scheme="https://laurentkempe.com/tags/ai" />
  </entry>
  <entry>
    <title>Installing Omarchy on My Surface Book for .NET Development</title>
    <link href="https://laurentkempe.com/2026/09/05/installing-omarchy-on-my-surface-book/"/>
    <id>https://laurentkempe.com/2026/09/05/installing-omarchy-on-my-surface-book/</id>
    <published>2026-09-05T12:25:32.000Z</published>
    <updated>2026-09-05T12:25:32.000Z</updated>
    <summary type="html">&lt;p&gt;I installed Omarchy on my first-generation Microsoft Surface Book, mostly to find out whether this 2015 laptop could still make a good .NET development machine.&lt;/p&gt;
&lt;p&gt;The installation took about two minutes.&lt;/p&gt;
&lt;p&gt;That was the first surprise. It is my timing on my machine, not a benchmark, but it matches &lt;a href=&quot;https://github.com/basecamp/omarchy/blob/quattro/manual/02-getting-started.md&quot;&gt;Omarchy&apos;s own guidance&lt;/a&gt;. The documentation says installation can take less than a minute on fast hardware and no more than five minutes on older computers.&lt;/p&gt;
&lt;p&gt;Two minutes on an original Surface Book certainly works for me.&lt;/p&gt;
</summary>
    <category term="Omarchy" scheme="https://laurentkempe.com/tags/omarchy" />
    <category term=".NET" scheme="https://laurentkempe.com/tags/dotnet" />
    <category term="Linux" scheme="https://laurentkempe.com/tags/linux" />
    <category term="GitHub Copilot" scheme="https://laurentkempe.com/tags/github-copilot" />
  </entry>
  <entry>
    <title>Automate Astro Upgrades with GitHub Agentic Workflows</title>
    <link href="https://laurentkempe.com/2026/04/11/github-agentic-workflows-astro-upgrade/"/>
    <id>https://laurentkempe.com/2026/04/11/github-agentic-workflows-astro-upgrade/</id>
    <published>2026-04-11T09:09:16.000Z</published>
    <updated>2026-04-11T09:09:16.000Z</updated>
    <summary type="html">&lt;p&gt;I opened GitHub on my phone before my morning coffee had finished brewing. There it was — a pull request, freshly opened, titled &lt;strong&gt;&amp;quot;chore: upgrade astro to v6.1.2&amp;quot;&lt;/strong&gt;. I hadn&apos;t asked anyone to do it. I hadn&apos;t filed an issue, assigned a task, or written a single command. An agent had woken up, checked the npm registry, read the Astro changelog, inspected my codebase, applied the changes, run &lt;code&gt;pnpm install&lt;/code&gt;, and handed me a PR to review. All I had to do was drink my coffee and click Merge.&lt;/p&gt;
&lt;p&gt;This is the promise of what GitHub Next is calling &lt;strong&gt;Continuous AI&lt;/strong&gt; — and it&apos;s already working on my blog.&lt;/p&gt;
</summary>
    <category term="GitHub Actions" scheme="https://laurentkempe.com/tags/github-actions" />
    <category term="AI" scheme="https://laurentkempe.com/tags/ai" />
    <category term="Astro" scheme="https://laurentkempe.com/tags/astro" />
    <category term="GitHub Copilot" scheme="https://laurentkempe.com/tags/github-copilot" />
    <category term="Automation" scheme="https://laurentkempe.com/tags/automation" />
    <category term="GitHub Next" scheme="https://laurentkempe.com/tags/github-next" />
  </entry>
  <entry>
    <title>From 3 Worktrees to N: How AI Agents Changed My Parallel Development Workflow on Windows</title>
    <link href="https://laurentkempe.com/2026/03/31/from-3-worktrees-to-n-ai-powered-parallel-development-on-windows/"/>
    <id>https://laurentkempe.com/2026/03/31/from-3-worktrees-to-n-ai-powered-parallel-development-on-windows/</id>
    <published>2026-03-31T22:56:05.000Z</published>
    <updated>2026-03-31T22:56:05.000Z</updated>
    <summary type="html">&lt;p&gt;For years, my git worktree setup was modest: two worktrees for active development, and one more for code reviews. Three worktrees, tops. It worked. I never questioned it.&lt;/p&gt;
&lt;p&gt;Then AI coding agents arrived — tools that write code, run tests, and iterate autonomously — and suddenly three worktrees felt like a bottleneck. Each agent needs its own isolated workspace. Each task deserves its own branch, its own directory, its own terminal. The question shifted from &amp;quot;how many worktrees can I manage?&amp;quot; to &amp;quot;how many can I run in parallel?&amp;quot;&lt;/p&gt;
</summary>
    <category term="Git" scheme="https://laurentkempe.com/tags/git" />
    <category term="AI" scheme="https://laurentkempe.com/tags/ai" />
    <category term="Developer Tools" scheme="https://laurentkempe.com/tags/developer-tools" />
    <category term="GitHub Copilot" scheme="https://laurentkempe.com/tags/github-copilot" />
    <category term="CLI" scheme="https://laurentkempe.com/tags/cli" />
    <category term="Windows" scheme="https://laurentkempe.com/tags/windows" />
  </entry>
  <entry>
    <title>Automate Rider Search and Replace Patterns with Agent Skills</title>
    <link href="https://laurentkempe.com/2026/02/16/automate-rider-search-replace-patterns-with-agent-skills/"/>
    <id>https://laurentkempe.com/2026/02/16/automate-rider-search-replace-patterns-with-agent-skills/</id>
    <published>2026-02-16T14:01:17.000Z</published>
    <updated>2026-02-16T14:01:17.000Z</updated>
    <summary type="html">&lt;p&gt;A few years ago, I wrote about how &lt;a href=&quot;/2023/02/20/refactoring-huge-csharp-code-base-in-minutes/&quot;&gt;ReSharper&apos;s Search with Pattern feature&lt;/a&gt; helped me refactor a massive C# codebase in minutes. The technique was powerful, but creating those custom search and replace patterns meant using ReSharper to define them. Alternatively, you could hand-craft XML in DotSettings files—tedious work that required memorizing the exact structure, generating GUIDs, and configuring placeholder properties correctly.&lt;/p&gt;
&lt;p&gt;Recently, I explored how &lt;a href=&quot;/2026/01/27/Agent-Skills-From-Claude-to-Open-Standard/&quot;&gt;Agent Skills are becoming an open standard&lt;/a&gt; that works across different AI coding assistants like GitHub Copilot, Cursor, and JetBrains Junie. This got me thinking: what if I could combine these two powerful developer tools? What if an Agent Skill could automate the tedious part of creating ReSharper and Rider patterns?&lt;/p&gt;
&lt;p&gt;This post shows how I built exactly that—a practical Agent Skill that generates properly formatted DotSettings XML for custom search and replace patterns in Rider and ReSharper, just by describing what you want in natural language to your AI coding assistant.&lt;/p&gt;
</summary>
    <category term="AI" scheme="https://laurentkempe.com/tags/ai" />
    <category term="Rider" scheme="https://laurentkempe.com/tags/rider" />
    <category term="ReSharper" scheme="https://laurentkempe.com/tags/resharper" />
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term=".NET" scheme="https://laurentkempe.com/tags/dotnet" />
  </entry>
  <entry>
    <title>Exploring .NET 11 Preview 1 Runtime Async: A dive into the Future of Async in .NET</title>
    <link href="https://laurentkempe.com/2026/02/14/exploring-net-11-preview-1-runtime-async-a-dive-into-the-future-of-async-in-net/"/>
    <id>https://laurentkempe.com/2026/02/14/exploring-net-11-preview-1-runtime-async-a-dive-into-the-future-of-async-in-net/</id>
    <published>2026-02-14T22:32:40.000Z</published>
    <updated>2026-02-14T22:32:40.000Z</updated>
    <summary type="html">&lt;p&gt;.NET 11 Preview 1 ships a groundbreaking feature: &lt;strong&gt;Runtime Async&lt;/strong&gt;. Instead of relying solely on the C# compiler to rewrite &lt;code&gt;async&lt;/code&gt;/&lt;code&gt;await&lt;/code&gt; methods into state machines, the .NET runtime itself now understands async methods as a first-class concept. This article explores what Runtime Async is, why it matters, what changed in Preview 1, and how you can experiment with it today.&lt;/p&gt;
</summary>
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term=".NET" scheme="https://laurentkempe.com/tags/dotnet" />
  </entry>
  <entry>
    <title>Agent Skills: From Claude to Open Standard to Your Daily Coding Workflow</title>
    <link href="https://laurentkempe.com/2026/01/27/Agent-Skills-From-Claude-to-Open-Standard/"/>
    <id>https://laurentkempe.com/2026/01/27/Agent-Skills-From-Claude-to-Open-Standard/</id>
    <published>2026-01-27T11:38:27.000Z</published>
    <updated>2026-01-27T11:38:27.000Z</updated>
    <summary type="html">&lt;p&gt;When Anthropic introduced Agent Skills for Claude, it appeared to be another proprietary AI customization feature. Today, we&apos;re witnessing something far more significant: an open standard reshaping how people across roles—developers, designers, product managers, and operations—work with AI assistants. AI coding agents&apos; adoption of Agent Skills has transformed this technology from an interesting experiment into an essential developer tool.&lt;/p&gt;
&lt;p&gt;If you&apos;ve been using custom instructions or wondering how to make your AI assistant truly understand your project&apos;s workflows, Agent Skills provides a compelling solution.&lt;/p&gt;
</summary>
    <category term="AI" scheme="https://laurentkempe.com/tags/ai" />
    <category term="DevX" scheme="https://laurentkempe.com/tags/devx" />
    <category term="GitHub Copilot" scheme="https://laurentkempe.com/tags/github-copilot" />
    <category term="VS Code" scheme="https://laurentkempe.com/tags/vs-code" />
  </entry>
  <entry>
    <title>C# 14 More Partial Members: Partial Events and Partial Constructors</title>
    <link href="https://laurentkempe.com/2026/01/03/csharp-14-more-partial-members-partial-events-and-constructors/"/>
    <id>https://laurentkempe.com/2026/01/03/csharp-14-more-partial-members-partial-events-and-constructors/</id>
    <published>2026-01-03T13:16:41.000Z</published>
    <updated>2026-01-03T13:16:41.000Z</updated>
    <summary type="html">&lt;p&gt;In C#, &lt;code&gt;partial&lt;/code&gt; has long been a practical bridge between human-authored code and tool-generated code. With C# 14, that bridge gets wider: &lt;strong&gt;instance constructors&lt;/strong&gt; and &lt;strong&gt;events&lt;/strong&gt; can now be declared as partial members.&lt;/p&gt;
&lt;p&gt;This article explains what “more partial members” means in C# 14, the rules that keep it predictable, and the generator-heavy scenarios it&apos;s intended to support.&lt;/p&gt;
</summary>
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term=".NET" scheme="https://laurentkempe.com/tags/dotnet" />
  </entry>
  <entry>
    <title>C# 14 Extension Members: Complete Guide to Properties, Operators, and Static Extensions</title>
    <link href="https://laurentkempe.com/2025/12/29/csharp-14-extension-members-complete-guide/"/>
    <id>https://laurentkempe.com/2025/12/29/csharp-14-extension-members-complete-guide/</id>
    <published>2025-12-29T15:32:57.000Z</published>
    <updated>2025-12-29T15:32:57.000Z</updated>
    <summary type="html">&lt;p&gt;Extension methods have been a core C# feature since version 3.0, enabling developers to add methods to types without modifying source code. With C# 14 and .NET 10, Microsoft introduces &lt;strong&gt;extension members&lt;/strong&gt;—a powerful enhancement that extends beyond methods to include properties, operators, and static members.&lt;/p&gt;
&lt;p&gt;This comprehensive guide explores how C# 14 extension members enable you to add mathematical operators to &lt;code&gt;Point&lt;/code&gt;, create static factory properties for &lt;code&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/code&gt;, and organize extensions more elegantly than ever before.&lt;/p&gt;
</summary>
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term=".NET" scheme="https://laurentkempe.com/tags/dotnet" />
  </entry>
  <entry>
    <title>C# 14 Null-conditional Assignment: Complete Guide to Elegant Null Handling</title>
    <link href="https://laurentkempe.com/2025/12/28/csharp-14-null-conditional-assignment-complete-guide/"/>
    <id>https://laurentkempe.com/2025/12/28/csharp-14-null-conditional-assignment-complete-guide/</id>
    <published>2025-12-28T10:08:51.000Z</published>
    <updated>2025-12-28T10:08:51.000Z</updated>
    <summary type="html">&lt;p&gt;If you&apos;ve been working with C# since the introduction of null-conditional operators in C# 6.0, you&apos;ve likely appreciated how &lt;code&gt;?.&lt;/code&gt; and &lt;code&gt;?[]&lt;/code&gt; simplified null-checking when &lt;em&gt;reading&lt;/em&gt; values. But what about &lt;em&gt;writing&lt;/em&gt; values conditionally? That&apos;s where C# 14&apos;s null-conditional assignment comes in—and it&apos;s a nice improvement for modern C# development.&lt;/p&gt;
</summary>
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term=".NET" scheme="https://laurentkempe.com/tags/dotnet" />
  </entry>
  <entry>
    <title>C# 14 Field Keyword: Simplifying Property Accessors</title>
    <link href="https://laurentkempe.com/2025/12/27/csharp-14-field-keyword-simplifying-property-accessors/"/>
    <id>https://laurentkempe.com/2025/12/27/csharp-14-field-keyword-simplifying-property-accessors/</id>
    <published>2025-12-27T14:12:15.000Z</published>
    <updated>2025-12-27T14:12:15.000Z</updated>
    <summary type="html">&lt;p&gt;C# 14 introduces the &lt;code&gt;field&lt;/code&gt; keyword, a contextual keyword that reshapes how we write property accessors. This feature eliminates the need for explicit backing fields while maintaining full control over property logic. Let&apos;s explore how this powerful addition simplifies C# code and improves developer productivity.&lt;/p&gt;
</summary>
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term=".NET" scheme="https://laurentkempe.com/tags/dotnet" />
  </entry>
  <entry>
    <title>Decouple yourself from your LLM commodities using Dapr Conversation</title>
    <link href="https://laurentkempe.com/2025/09/24/decouple-yourself-from-your-llm-commodities-using-dapr-conversation/"/>
    <id>https://laurentkempe.com/2025/09/24/decouple-yourself-from-your-llm-commodities-using-dapr-conversation/</id>
    <published>2025-09-24T07:07:56.000Z</published>
    <updated>2025-09-24T07:07:56.000Z</updated>
    <summary type="html">&lt;p&gt;As developers, we often find ourselves tied to specific providers. The same applies to Large Language Model (LLM) providers. This can limit our flexibility and control over our applications. In this blog post, we&apos;ll explore how to decouple ourselves from LLM commodities by leveraging Dapr&apos;s Conversation building block. This approach allows us to switch between different LLM providers seamlessly, ensuring that our applications remain adaptable and future-proof.&lt;/p&gt;
</summary>
    <category term="AI" scheme="https://laurentkempe.com/tags/ai" />
    <category term="Azure" scheme="https://laurentkempe.com/tags/azure" />
    <category term="Dapr" scheme="https://laurentkempe.com/tags/dapr" />
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term="LLM" scheme="https://laurentkempe.com/tags/llm" />
    <category term="SLM" scheme="https://laurentkempe.com/tags/slm" />
  </entry>
  <entry>
    <title>SSE-Powered MCP Server with C# and .NET in 15.7MB executable</title>
    <link href="https://laurentkempe.com/2025/04/05/sse-powered-mcp-server-with-csharp-and-dotnet-in-157mb-executable/"/>
    <id>https://laurentkempe.com/2025/04/05/sse-powered-mcp-server-with-csharp-and-dotnet-in-157mb-executable/</id>
    <published>2025-04-05T10:35:19.000Z</published>
    <updated>2025-04-05T10:35:19.000Z</updated>
    <summary type="html">&lt;p&gt;Now that we&apos;ve explored how to leverage Model Context Protocol (MCP) servers to utilize external Tools and AI models in C# applications, how to write your own Standard Input/Output (STDIO) MCP server in C# using the modelcontextprotocol / csharp-sdk, and how we can dockerize your .NET C# MCP server to be able to distribute it for use by AI clients.
It&apos;s time to take a step further and explore how to leverage Server-Sent Events (SSE) MCP servers so that we can deploy them remotely, for example on a Raspberry Pi.&lt;/p&gt;
</summary>
    <category term="AI" scheme="https://laurentkempe.com/tags/ai" />
    <category term="ASP.NET Core" scheme="https://laurentkempe.com/tags/asp-dotnet-core" />
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term="LLM" scheme="https://laurentkempe.com/tags/llm" />
    <category term="SLM" scheme="https://laurentkempe.com/tags/slm" />
    <category term="MCP" scheme="https://laurentkempe.com/tags/mcp" />
  </entry>
  <entry>
    <title>Dockerizing your .NET C# MCP Server for AI Clients like Claude Desktop</title>
    <link href="https://laurentkempe.com/2025/03/27/dockerizing-your-dotnet-csharp-mcp-server-for-ai-clients-like-claude-desktop/"/>
    <id>https://laurentkempe.com/2025/03/27/dockerizing-your-dotnet-csharp-mcp-server-for-ai-clients-like-claude-desktop/</id>
    <published>2025-03-27T23:48:15.000Z</published>
    <updated>2025-03-27T23:48:15.000Z</updated>
    <summary type="html">&lt;p&gt;My previous post showed how easy it is to develop a .NET C# MCP server and write a client able to communicate with it. Now, the question is how we can distribute our MCP server to be used by AI clients. In this post, we&apos;ll leverage the knowledge acquired from my previous posts to explore how to dockerize your .NET C# MCP server.&lt;/p&gt;
</summary>
    <category term="AI" scheme="https://laurentkempe.com/tags/ai" />
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term="Docker" scheme="https://laurentkempe.com/tags/docker" />
    <category term="LLM" scheme="https://laurentkempe.com/tags/llm" />
    <category term="SLM" scheme="https://laurentkempe.com/tags/slm" />
    <category term="MCP" scheme="https://laurentkempe.com/tags/mcp" />
  </entry>
  <entry>
    <title>Model Context Protocol Made Easy: Building an MCP Server in C#</title>
    <link href="https://laurentkempe.com/2025/03/22/model-context-protocol-made-easy-building-an-mcp-server-in-csharp/"/>
    <id>https://laurentkempe.com/2025/03/22/model-context-protocol-made-easy-building-an-mcp-server-in-csharp/</id>
    <published>2025-03-22T10:08:37.000Z</published>
    <updated>2025-03-22T10:08:37.000Z</updated>
    <summary type="html">&lt;p&gt;In my previous post, I demonstrated how to use C# with &lt;code&gt;Microsoft.Extensions.AI&lt;/code&gt;, Ollama, and a nuget package called &lt;code&gt;mcpdotnet&lt;/code&gt; to interact with an existing MCP Server. Since then, &lt;code&gt;mcpdotnet&lt;/code&gt; has been elevated to become the &amp;quot;&lt;strong&gt;official C# SDK for Model Context Protocol servers and clients, maintained by Microsoft&lt;/strong&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;The Model Context Protocol (MCP) is an open standard that enables seamless integration between AI systems and various data sources, allowing developers to create context-aware applications. In this post, we&apos;ll explore how to build a simple MCP server using C# and the &lt;strong&gt;modelcontextprotocol / csharp-sdk&lt;/strong&gt; library, which simplifies the process of creating and managing MCP servers.&lt;/p&gt;
</summary>
    <category term="AI" scheme="https://laurentkempe.com/tags/ai" />
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term="MCP" scheme="https://laurentkempe.com/tags/mcp" />
    <category term="SLM" scheme="https://laurentkempe.com/tags/slm" />
    <category term="LLM" scheme="https://laurentkempe.com/tags/llm" />
    <category term="Ollama" scheme="https://laurentkempe.com/tags/ollama" />
  </entry>
  <entry>
    <title>Harnessing AI in C# with Microsoft.Extensions.AI, Ollama, and MCP Server</title>
    <link href="https://laurentkempe.com/2025/03/15/harnessing-ai-in-csharp-with-microsoftextensionsai-ollama-and-mcp-server/"/>
    <id>https://laurentkempe.com/2025/03/15/harnessing-ai-in-csharp-with-microsoftextensionsai-ollama-and-mcp-server/</id>
    <published>2025-03-15T15:36:00.000Z</published>
    <updated>2025-03-15T15:36:00.000Z</updated>
    <summary type="html">&lt;p&gt;In the previous post &amp;quot;&lt;a href=&quot;https://laurentkempe.com/2025/01/27/leveraging-microsoftextensionsai-for-tool-calling-in-csharp/&quot;&gt;Leveraging Microsoft.Extensions.AI for Tool Calling in C#&lt;/a&gt;&amp;quot;, we explored how to create custom tools that enhance the capabilities of Large Language Models (LLMs). We demonstrated how integrating these technologies enables developers to build applications with advanced AI capabilities, facilitating more complex interactions.&lt;/p&gt;
&lt;p&gt;In this post, we&apos;ll take a step further and explore how to leverage &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; servers to utilize external Tools and AI models in C# applications. We&apos;ll continue using Ollama to run local AI models.&lt;/p&gt;
</summary>
    <category term="AI" scheme="https://laurentkempe.com/tags/ai" />
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term="MCP" scheme="https://laurentkempe.com/tags/mcp" />
    <category term="SLM" scheme="https://laurentkempe.com/tags/slm" />
    <category term="Ollama" scheme="https://laurentkempe.com/tags/ollama" />
  </entry>
  <entry>
    <title>.NET Aspire and Dev Container</title>
    <link href="https://laurentkempe.com/2025/03/06/dotnet-aspire-and-dev-container/"/>
    <id>https://laurentkempe.com/2025/03/06/dotnet-aspire-and-dev-container/</id>
    <published>2025-03-06T22:59:39.000Z</published>
    <updated>2025-03-06T22:59:39.000Z</updated>
    <summary type="html">&lt;p&gt;.NET Aspire 9.1 was just released on February 25th, 2025. It comes with great new dashboard features, and there is more! One feature I am particularly interested in is the ability to use &lt;strong&gt;Dev Containers&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In this post, I will show you how to use the new .NET Aspire 9.1 with a Dev Container and JetBrains Rider. You could also use Visual Studio Code.&lt;/p&gt;
</summary>
    <category term=".NET Aspire" scheme="https://laurentkempe.com/tags/.net-aspire" />
    <category term="Dev Container" scheme="https://laurentkempe.com/tags/dev-container" />
    <category term="Docker" scheme="https://laurentkempe.com/tags/docker" />
    <category term="Rider" scheme="https://laurentkempe.com/tags/rider" />
  </entry>
  <entry>
    <title>Building Local AI Agents: Semantic Kernel Agent with Functions in C# using Ollama</title>
    <link href="https://laurentkempe.com/2025/03/02/building-local-ai-agents-semantic-kernel-agent-with-functions-in-csharp-using-ollama/"/>
    <id>https://laurentkempe.com/2025/03/02/building-local-ai-agents-semantic-kernel-agent-with-functions-in-csharp-using-ollama/</id>
    <published>2025-03-02T11:19:46.000Z</published>
    <updated>2025-03-02T11:19:46.000Z</updated>
    <summary type="html">&lt;p&gt;In my previous post, we saw how to &lt;a href=&quot;https://laurentkempe.com/2025/03/01/building-local-ai-agents-semantic-kernel-and-ollama-in-csharp/&quot;&gt;build the simplest Semantic Kernel local AI agent using Semantic Kernel and Ollama in C#&lt;/a&gt;. In this short post, we will see how simple it is to extend the capabilities of the Semantic Kernel local AI agent by adding function calling.&lt;/p&gt;
</summary>
    <category term="AI" scheme="https://laurentkempe.com/tags/ai" />
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term="LLM" scheme="https://laurentkempe.com/tags/llm" />
    <category term="Ollama" scheme="https://laurentkempe.com/tags/ollama" />
    <category term="SLM" scheme="https://laurentkempe.com/tags/slm" />
    <category term="Semantic Kernel" scheme="https://laurentkempe.com/tags/semantic-kernel" />
  </entry>
  <entry>
    <title>Building Local AI Agents: Semantic Kernel and Ollama in C#</title>
    <link href="https://laurentkempe.com/2025/03/01/building-local-ai-agents-semantic-kernel-and-ollama-in-csharp/"/>
    <id>https://laurentkempe.com/2025/03/01/building-local-ai-agents-semantic-kernel-and-ollama-in-csharp/</id>
    <published>2025-03-01T15:08:16.000Z</published>
    <updated>2025-03-01T15:08:16.000Z</updated>
    <summary type="html">&lt;p&gt;The recent release of Microsoft&apos;s Semantic Kernel Agents Framework RC1 provides an excellent opportunity to explore its capabilities with C#. In this post, we&apos;ll walk through creating a simple agent using this framework and running it locally with Ollama.&lt;/p&gt;
&lt;p&gt;Let&apos;s dive in!&lt;/p&gt;
</summary>
    <category term="AI" scheme="https://laurentkempe.com/tags/ai" />
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term="LLM" scheme="https://laurentkempe.com/tags/llm" />
    <category term="Ollama" scheme="https://laurentkempe.com/tags/ollama" />
    <category term="Semantic Kernel" scheme="https://laurentkempe.com/tags/semantic-kernel" />
    <category term="SLM" scheme="https://laurentkempe.com/tags/slm" />
  </entry>
  <entry>
    <title>Harnessing DeepSeek-R1 distilled model with .NET Aspire and Ollama locally</title>
    <link href="https://laurentkempe.com/2025/02/01/harnessing-deepseek-r1-with-dotnet-aspire-and-ollama-locally/"/>
    <id>https://laurentkempe.com/2025/02/01/harnessing-deepseek-r1-with-dotnet-aspire-and-ollama-locally/</id>
    <published>2025-02-01T12:30:53.000Z</published>
    <updated>2025-02-01T12:30:53.000Z</updated>
    <summary type="html">&lt;p&gt;In my earlier posts, I&apos;ve demonstrated how to install Ollama using the Windows installer. However, for developers, there&apos;s a more streamlined method to set up Ollama on your machine.&lt;/p&gt;
&lt;p&gt;In this blog post, we&apos;ll explore how to run DeepSeek-R1 by harnessing the capabilities of .NET Aspire alongside Ollama on your local environment.&lt;/p&gt;
</summary>
    <category term=".NET Aspire" scheme="https://laurentkempe.com/tags/.net-aspire" />
    <category term="AI" scheme="https://laurentkempe.com/tags/ai" />
    <category term="C#" scheme="https://laurentkempe.com/tags/csharp" />
    <category term="Ollama" scheme="https://laurentkempe.com/tags/ollama" />
    <category term="LLM" scheme="https://laurentkempe.com/tags/llm" />
    <category term="SLM" scheme="https://laurentkempe.com/tags/slm" />
  </entry></feed>