I opened GitHub on my phone before my morning coffee had finished brewing. There it was — a pull request, freshly opened, titled "chore: upgrade astro to v6.1.2" . I hadn't asked anyone to do it. I hadn'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 pnpm…
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. 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…
A few years ago, I wrote about how ReSharper's Search with Pattern feature 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…
.NET 11 Preview 1 ships a groundbreaking feature: Runtime Async . Instead of relying solely on the C# compiler to rewrite async / await 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.
When Anthropic introduced Agent Skills for Claude, it appeared to be another proprietary AI customization feature. Today, we'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' adoption of Agent Skills has transformed this technology from an interesting…
In C#, partial has long been a practical bridge between human-authored code and tool-generated code. With C# 14, that bridge gets wider: instance constructors and events can now be declared as partial members. This article explains what “more partial members” means in C# 14, the rules that keep it predictable, and the generator-heavy scenarios it's intended to support.
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 extension members —a powerful enhancement that extends beyond methods to include properties, operators, and static members. This comprehensive guide explores how C# 14 extension members enable you to add…
If you've been working with C# since the introduction of null-conditional operators in C# 6.0, you've likely appreciated how ?. and ?[] simplified null-checking when reading values. But what about writing values conditionally? That's where C# 14's null-conditional assignment comes in—and it's a nice improvement for modern C# development.
C# 14 introduces the field 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's explore how this powerful addition simplifies C# code and improves developer productivity.
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'll explore how to decouple ourselves from LLM commodities by leveraging Dapr's Conversation building block. This approach allows us to switch between different LLM providers seamlessly,…
Now that we'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's time to take a step further and explore how…
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'll leverage the knowledge acquired from my previous posts to explore how to dockerize your .NET C# MCP server.
In my previous post, I demonstrated how to use C# with Microsoft.Extensions.AI , Ollama, and a nuget package called mcpdotnet to interact with an existing MCP Server. Since then, mcpdotnet has been elevated to become the " official C# SDK for Model Context Protocol servers and clients, maintained by Microsoft ". The Model Context Protocol (MCP) is an open standard that enables seamless integration…
In the previous post " Leveraging Microsoft.Extensions.AI for Tool Calling in C# ", 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. In this post, we'll take a step further and explore…
.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 Dev Containers . 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.
In my previous post, we saw how to build the simplest Semantic Kernel local AI agent using Semantic Kernel and Ollama in C# . 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.
The recent release of Microsoft's Semantic Kernel Agents Framework RC1 provides an excellent opportunity to explore its capabilities with C#. In this post, we'll walk through creating a simple agent using this framework and running it locally with Ollama. Let's dive in!
In my earlier posts, I've demonstrated how to install Ollama using the Windows installer. However, for developers, there's a more streamlined method to set up Ollama on your machine. In this blog post, we'll explore how to run DeepSeek-R1 by harnessing the capabilities of .NET Aspire alongside Ollama on your local environment.
In the previous post " Learning AI function calling in C# with Llama 3.2 SLM and Ollama running on your machine ", we wrapped our head around the concept of tool calling and implemented a C# source generator enabling our functions to be called by Llama 3.2 SLM using Ollama. In this post, we will explore how to use Microsoft Extensions AI for tool calling in a simple .NET CLI application. We will…
I've been trying to wrap my head around function/tool calling for a while now, and I'm excited to share what I've learned with you. It's a powerful way to let developers integrate advanced AI features directly into their applications. We'll walk through understanding the core concepts, setting up your environment, and implementing a practical example using a C# source generator.