Netclaw.SkillClient 0.3.0

dotnet add package Netclaw.SkillClient --version 0.3.0
                    
NuGet\Install-Package Netclaw.SkillClient -Version 0.3.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Netclaw.SkillClient" Version="0.3.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Netclaw.SkillClient" Version="0.3.0" />
                    
Directory.Packages.props
<PackageReference Include="Netclaw.SkillClient" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Netclaw.SkillClient --version 0.3.0
                    
#r "nuget: Netclaw.SkillClient, 0.3.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Netclaw.SkillClient@0.3.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Netclaw.SkillClient&version=0.3.0
                    
Install as a Cake Addin
#tool nuget:?package=Netclaw.SkillClient&version=0.3.0
                    
Install as a Cake Tool

Netclaw.SkillClient

.NET client library for SkillServer, a self-hosted skill registry for AI agents.

SkillServer implements the Cloudflare Agent Skills Discovery RFC v0.2.0 and the AgentSkills.io SKILL.md format.

Installation

dotnet add package Netclaw.SkillClient

Usage

Direct Instantiation

using Netclaw.SkillClient;

// Read-only access (no auth needed for discovery and downloads)
using var client = new SkillServerClient("http://localhost:8080");

// With API key for write operations (publish, delete)
using var client = new SkillServerClient("http://localhost:8080", apiKey: "sk-your-api-key");

Dependency Injection

// Read-only
services.AddSkillServerClient("http://localhost:8080");

// With API key
services.AddSkillServerClient("http://localhost:8080", "sk-your-api-key");

Discovering Skills

// Get the RFC-compliant skill index (/.well-known/agent-skills/index.json)
var index = await client.GetRfcIndexAsync();

foreach (var skill in index.Skills)
{
    Console.WriteLine($"{skill.Name} - {skill.Description}");
    Console.WriteLine($"  URL: {skill.Url}");
    Console.WriteLine($"  Digest: {skill.Digest}");
}

Listing and Browsing Skills

// List all skills (paginated)
var skills = await client.ListSkillsAsync();
var page = await client.ListSkillsAsync(skip: 10, take: 5);

// Get all versions of a skill
var versions = await client.GetSkillVersionsAsync("my-skill");

// Get a specific version
var version = await client.GetVersionAsync("my-skill", "1.0.0");

Searching Skills

// Full-text search across skill names, descriptions, and categories
var results = await client.SearchSkillsAsync("kubernetes deployment");
var page = await client.SearchSkillsAsync("kubernetes", skip: 0, take: 10);

Getting the Latest Version

// Get the latest version of a specific skill
var latest = await client.GetLatestVersionAsync("my-skill");
Console.WriteLine($"Latest: {latest.Version} ({latest.Sha256})");

Checking for Updates

// Check if any of your cached skills have newer versions
var updates = await client.CheckUpdatesAsync([
    new CheckUpdateRequest { Name = "my-skill", Version = "1.0.0" },
    new CheckUpdateRequest { Name = "other-skill", Version = "2.1.0" }
]);

foreach (var item in updates.Where(u => u.HasUpdate))
{
    Console.WriteLine($"{item.Name}: {item.CurrentVersion} -> {item.LatestVersion}");
}

Downloading Skills

// Download SKILL.md as a string
var content = await client.GetSkillFileAsStringAsync("my-skill", "1.0.0");

// Download SKILL.md as a stream
await using var stream = await client.GetSkillFileAsync("my-skill", "1.0.0");

// Download a resource file from a skill archive
await using var resource = await client.GetSkillFileAsync("my-skill", "1.0.0", "prompts/system.md");

// Download a blob by its SHA-256 digest
await using var blob = await client.GetBlobAsync("sha256:abc123...");

Verifying Integrity

// Verify a downloaded skill matches its published digest
var isValid = await client.VerifyDigestAsync("my-skill", "1.0.0", "sha256:abc123...");

Publishing Skills

Requires an API key with write access.

await using var file = File.OpenRead("SKILL.md");
var result = await client.UploadSkillAsync("my-skill", "1.0.0", file, category: "coding");

Console.WriteLine($"Published: {result.Url}");
Console.WriteLine($"Digest: {result.Sha256}");

Deleting Skills

await client.DeleteVersionAsync("my-skill", "1.0.0");

AOT Compatibility

This library is fully AOT-compatible. All JSON serialization uses source-generated System.Text.Json contexts with no runtime reflection.

License

Apache-2.0 - Copyright 2025 Petabridge, LLC

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.3.0 71 5/5/2026
0.2.1 809 4/29/2026
0.2.0 421 4/27/2026
0.1.2 88 4/27/2026
0.1.1 93 4/24/2026
0.1.0 91 4/23/2026

**New Features**
- Add `skillserver` CLI tool for publishing and managing skills from the command line (#56)
 - Commands: `publish`, `publish-all`, `delete`, `list`, `versions`, `verify`, `config`, `api-key`
 - Distributed as a .NET global tool (`dotnet tool install -g Netclaw.SkillServer.Cli`) and standalone trimmed binaries for linux-x64, linux-arm64, osx-arm64, and win-x64
 - Install scripts for Linux/macOS (`install-skillserver.sh`) and Windows (`install-skillserver.ps1`)
- Add `UploadSkillWithResourcesAsync` and `UploadSkillIfNotExistsAsync` to `Netclaw.SkillClient` for idempotent publishing with resource file support (#56)

**Improvements**
- Consolidate `publish_nuget.yml` and `publish_container.yml` into a unified `release.yml` workflow — NuGet packages, CLI binaries, and container images build in parallel with a single coordinated publish stage (#56)
- Add CLI publish dry-run, trim warning checks, and install script linting to PR validation (#56)

**Dependency Updates**
- Bump YamlDotNet from 17.0.1 to 17.1.0 (#55)