JD.SemanticKernel.Extensions.Plugins
Load Claude Code .claude-plugin directories into Semantic Kernel. Orchestrates skill, hook, and MCP server loading from plugin manifests with dependency resolution.
Ask AI about JD.SemanticKernel.Extensions.Plugins
Powered by Claude Β· Grounded in docs
I know everything about JD.SemanticKernel.Extensions.Plugins. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
JD.SemanticKernel.Extensions
An extensible toolkit for Microsoft Semantic Kernel that bridges Claude Code skills, plugins, and hooks into SK applications, and adds context management primitives (compaction, semantic memory) for building production-grade AI agents.
Features
- π Skills β Parse
SKILL.mdfiles (YAML frontmatter + markdown) intoKernelFunctionorPromptTemplate - π Hooks β Map Claude Code lifecycle events (
PreToolUse,PostToolUse, etc.) to SK'sIFunctionInvocationFilterandIPromptRenderFilter - π¦ Plugins β Load
.claude-plugin/directories with skills, hooks, and MCP configs - ποΈ Compaction β Transparent context window management with configurable triggers and hierarchical summarization
- π§ Memory β Semantic memory with MMR reranking, temporal decay scoring, and query expansion
- πΎ Memory.Sqlite β SQLite-backed persistent memory storage
- π― Fluent API β
UseSkills(),UseHooks(),UsePlugins(),AddCompaction(),AddSemanticMemory()extension methods
Packages
Quick Start
dotnet add package JD.SemanticKernel.Extensions
Load Skills
using JD.SemanticKernel.Extensions.Skills;
var kernel = Kernel.CreateBuilder()
.AddOpenAIChatCompletion("gpt-4o", apiKey)
.UseSkills("./skills/") // Scans for SKILL.md files
.Build();
A SKILL.md file follows the Claude Code / AgentSkills.io format:
---
name: code-reviewer
description: Reviews code for quality issues
allowed-tools: [Read, Grep, Glob]
---
# Code Reviewer
Review the provided code for:
1. Bug risks
2. Security vulnerabilities
3. Performance issues
Input: $ARGUMENTS
Configure Hooks
using JD.SemanticKernel.Extensions.Hooks;
var kernel = Kernel.CreateBuilder()
.AddOpenAIChatCompletion("gpt-4o", apiKey)
.UseHooks(hooks =>
{
hooks.OnFunctionInvoking("Bash|Execute", async ctx =>
{
Console.WriteLine($"Validating: {ctx.Function.Name}");
});
hooks.OnFunctionInvoked("Write|Edit", async ctx =>
{
Console.WriteLine($"Post-edit hook: {ctx.Function.Name}");
});
hooks.OnPromptRendering(async ctx =>
{
Console.WriteLine("Prompt is about to render...");
});
})
.Build();
Load Plugins
using JD.SemanticKernel.Extensions.Plugins;
var kernel = Kernel.CreateBuilder()
.AddOpenAIChatCompletion("gpt-4o", apiKey)
.UsePlugins("./my-plugin/") // Single plugin directory
.UseAllPlugins("./plugins/") // All plugins in directory
.Build();
Plugin directories follow the .claude-plugin/ convention:
my-plugin/
βββ .claude-plugin/
β βββ plugin.json # Manifest
βββ skills/
β βββ reviewer/SKILL.md # Skills
βββ hooks/
β βββ hooks.json # Hooks
βββ .mcp.json # MCP servers (future)
Meta-Package (All-in-One)
using JD.SemanticKernel.Extensions;
var kernel = Kernel.CreateBuilder()
.AddOpenAIChatCompletion("gpt-4o", apiKey)
.AddClaudeCodeSkills("./skills/")
.AddClaudeCodePlugin("./my-plugin/")
.AddClaudeCodeHooks(hooks => hooks.OnFunctionInvoking(".*", _ => Task.CompletedTask))
.Build();
Context Compaction
Automatically compress chat history when it grows too large, preserving key context while staying within token limits.
using JD.SemanticKernel.Extensions.Compaction;
var kernel = Kernel.CreateBuilder()
.AddOpenAIChatCompletion("gpt-4o", apiKey)
.Build();
// Register compaction as transparent middleware
kernel.Services.AddCompaction(options =>
{
options.TriggerMode = CompactionTriggerMode.ContextPercentage;
options.Threshold = 0.70; // Compact at 70% of context window
options.MaxContextWindowTokens = 128_000; // Model's context limit
options.PreserveLastMessages = 10; // Always keep recent messages
options.MinMessagesBeforeCompaction = 5; // Don't compact short conversations
});
Trigger modes:
TokenThresholdβ Compact when estimated tokens exceed an absolute countContextPercentageβ Compact when usage exceeds a percentage of the context window
Token estimation:
var tokens = TokenEstimator.EstimateTokens("Hello world"); // ~2 tokens
var historyTokens = TokenEstimator.EstimateTokens(chatHistory); // Includes overhead
Semantic Memory
Store, search, and retrieve context-relevant information with embedding-based similarity, MMR diversity reranking, and temporal decay scoring.
using JD.SemanticKernel.Extensions.Memory;
// Register with in-memory backend
kernel.Services.AddSemanticMemory(options =>
{
options.DefaultSearchOptions = new MemorySearchOptions
{
TopK = 10,
MinRelevanceScore = 0.7,
UseMmrReranking = true,
MmrLambda = 0.7, // Balance relevance vs diversity
UseTemporalDecay = true,
TemporalDecayRate = 0.01,
};
});
SQLite persistence:
using JD.SemanticKernel.Extensions.Memory.Sqlite;
kernel.Services.AddSqliteMemoryBackend("Data Source=memory.db");
Key capabilities:
- MMR reranking β Maximal Marginal Relevance for diverse search results
- Temporal decay β Recent memories rank higher with configurable decay rate
- Query expansion β Automatically generate alternative queries for broader recall
- Pluggable backends β
InMemoryBackend(default),SqliteMemoryBackend, or implementIMemoryBackend
Hook Event Mapping
| Claude Code Event | SK Filter |
|---|---|
PreToolUse | IFunctionInvocationFilter.OnFunctionInvokingAsync |
PostToolUse | IFunctionInvocationFilter.OnFunctionInvokedAsync |
UserPromptSubmit | IPromptRenderFilter.OnPromptRenderingAsync |
Stop / SubagentStop | IAutoFunctionInvocationFilter |
SessionStart / SessionEnd | IExtensionEventBus (custom) |
PreCompact / Notification | IExtensionEventBus (custom) |
Related Projects
| Project | Description |
|---|---|
| JD.SemanticKernel.Connectors.ClaudeCode | Claude Code authentication provider for SK |
| JD.SemanticKernel.Connectors.GitHubCopilot | GitHub Copilot authentication provider for SK |
Building
dotnet restore
dotnet build
dotnet test
License
MIT Β© JD
