Notes on .NET, XAF, and building things

Twenty years of XPO, application frameworks, and lately a lot of applied AI. 233 articles and counting.

Browse by topic

All topics →

Latest articles

View all →
Jun 1, 20269 min read

Integrating Keycloak Authentication into a DevExpress XAF Blazor App

A complete, working recipe for wiring Keycloak OpenID Connect into a DevExpress XAF Blazor Server app — the auth provider, the bridge middleware, the three-layer logout, and the one checkbox (PKCE) that wastes everyone's afternoon. Full source on GitHub.

May 28, 20264 min read

Getting Started with the GitHub Copilot SDK — Part 11: Bring Your Own Key (BYOK) with OpenRouter

The final part of the series: point the Copilot SDK at any model — OpenRouter, Anthropic, Azure OpenAI, xAI — through Bring Your Own Key. No new SDK, no direct API calls. Custom models just show up in your model list.

May 24, 20264 min read

Getting Started with the GitHub Copilot SDK — Part 10: A Full-Stack Blazor Chat App

Part 10 wires everything together — a Blazor Server chat app that talks to the GitHub Copilot SDK, calls real EF Core tools against a Northwind database, and renders markdown answers in the browser.

May 21, 20264 min read

Getting Started with the GitHub Copilot SDK — Part 9: MCP Servers & Custom Agents

Part 9 of the GitHub Copilot SDK series: wire external MCP tool servers into a session and define named custom agents with their own prompts, tool limits, and isolated MCP connections — then combine both into a real agent architecture.

May 19, 20264 min read

Getting Started with the GitHub Copilot SDK — Part 8: Skill Loading & Configuration

Part 8 of the GitHub Copilot SDK series. Skills are plain Markdown files that reshape how the model behaves — no code changes, no system-prompt surgery. We load one, prove it works, disable it by name, and build one at runtime.

More topics

All topics →
May 16, 20264 min read

Getting Started with the GitHub Copilot SDK — Part 7: Infinite Sessions & Context Compaction

Every LLM has a finite context window, so long chats eventually run out of room. The Copilot SDK fixes this with Infinite Sessions — it automatically compacts old messages so a conversation can run forever.

May 14, 20264 min read

Getting Started with the GitHub Copilot SDK — Part 6: Asking the User for Input

Part 6 of the GitHub Copilot SDK series. Sometimes the model needs something only the user can give it — a preference, a confirmation, a choice. Here's how the ask_user tool turns a one-way chat into a real back-and-forth.

May 12, 20264 min read

Getting Started with the GitHub Copilot SDK — Part 5: Permission Request Handling

Part 5 of the GitHub Copilot SDK series. When the model wants to write a file or run a command, the SDK asks you first. This is the OnPermissionRequest handler — your safety gate between the model and the real world.

May 9, 20264 min read

Getting Started with the GitHub Copilot SDK — Part 4: Pre/Post Tool-Use Hooks

Part 4 of the GitHub Copilot SDK series. Hooks let you sit in the middle of every tool call — log it, allow it, or deny it outright — for auditing, access control, and human-in-the-loop approval.

May 7, 20264 min read

Getting Started with the GitHub Copilot SDK — Part 3: Custom Tools with AIFunction

Part 3 of the GitHub Copilot SDK series: turn plain C# methods into tools the model can call — simple functions, multiple tools, complex record types, safe error handling, and filtering the built-in tools.