Semantic Kernel

July 28, 2026 · View on GitHub

Bridges Microsoft Semantic Kernel plugins. If you already have classes with [KernelFunction]-annotated methods, hand them straight to SemanticKernelAgent.From and each function becomes a tool.

Packageconductor-ai-semantic-kernel
NamespaceConductor.AI.SemanticKernel
Entry pointSemanticKernelAgent.From(...)
dotnet add package conductor-ai-semantic-kernel

Inside this repo, reference Conductor.AI.SemanticKernel/Conductor.AI.SemanticKernel.csproj directly.

This adapter is specific to the .NET SDK — Semantic Kernel is a .NET-first framework and has no counterpart in the Python or Java SDK docs.

From a [KernelFunction] object

using System.ComponentModel;
using Conductor.AI;
using Conductor.AI.SemanticKernel;
using Microsoft.SemanticKernel;

internal sealed class CalculatorPlugin
{
    [KernelFunction, Description("Add two integers and return their sum.")]
    public int Add(
        [Description("first number")]  int a,
        [Description("second number")] int b) => a + b;
}

var agent = SemanticKernelAgent.From(
    name:         "sk_calc_agent",
    model:        "anthropic/claude-sonnet-4-6",
    instructions: "You are a calculator. Use the tools to answer math questions.",
    new CalculatorPlugin());

await using var runtime = new AgentRuntime();
var result = await runtime.RunAsync(agent, "What is 17 + 25?");
result.PrintResult();

From a prebuilt KernelPlugin

KernelPlugin plugin = KernelPluginFactory.CreateFromObject(new CalculatorPlugin(), "calc");

var agent = SemanticKernelAgent.From(
    name:         "sk_kernelplugin",
    model:        "anthropic/claude-sonnet-4-6",
    instructions: "Solve arithmetic using the calc plugin.",
    plugin);

SemanticKernelAgent.From(name, model, instructions, params object[] plugins) accepts any mix of [KernelFunction] objects and KernelPlugin instances. SemanticKernelAgent.IsSemanticKernelPlugin(obj) reports whether an object qualifies.

How it differs from the other adapters

This adapter builds a plain Agent with no Framework tag — there is no server-side normalizer involved. The kernel functions run as local worker tools, invoked through the KernelFunction itself, so Semantic Kernel's own argument coercion and async unwrapping apply.

Because the tools are local workers, these agents must run through AgentRuntime rather than the bare IAgentClient — see ../concepts/deploy-serve-run.md.