Agent skill

Writing Csharp Code

by microsoft-foundry in microsoft-foundry/foundry-agent-webapp

Provides C and ASP.NET Core coding standards for this repository.

MITAuto-check: notesBackend & APIs

Install Writing Csharp Code

skills CLI
$ npx skills add microsoft-foundry/foundry-agent-webapp --skill writing-csharp-code -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install microsoft-foundry/foundry-agent-webapp writing-csharp-code --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/microsoft-foundry/foundry-agent-webapp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/writing-csharp-code .claude/skills/writing-csharp-code && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
writing-csharp-code
GitHub stars
127
Token cost
~3.2k tokens
SKILL.md length
649 words
Files
1
Skills in repo
19
Repo updated
First seen
Licence
MIT

At a glance

Provides C and ASP.NET Core coding standards for this repository.

  • Works in 3 steps: Save the file - .NET automatically… → Check the terminal - Look for… → Verify via console logs - New requests…
  • Modifying C code
  • SKILL.md covers Hot Reload Development Workflow, Minimal API Patterns, Authentication Setup and Async Best Practices, plus 10 more sections
  • Calls dotnet

What it does

Writing Csharp Code is an agent skill from microsoft-foundry/foundry-agent-webapp. Provides C and ASP.NET Core coding standards for this repository. Use when writing or modifying C code, implementing API endpoints, configuring middleware, or working with authentication in the backend.

Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Backend & APIs, covering Code quality, Authentication and REST APIs. It works with C#, ASP.NET Core, Azure AI Foundry and OpenAI. The repository describes itself as: GitHub Copilot enabled repo for building and deploying a web application with Entra ID authentication and integrated with Azure AI Foundry Agents. The licence is MIT.

When your agent uses it

  • Modifying C code
  • Implementing API endpoints
  • Configuring middleware
  • Working with authentication in the backend

Example prompts

  • “Use the writing-csharp-code skill to provide C and ASP.NET Core coding standards for this repository”
  • “/writing-csharp-code”

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Save the file - .NET automatically recompiles
  2. Check the terminal - Look for compilation output in the "Backend: ASP.NET Core API" terminal
  3. Verify via console logs - New requests will use updated code immediately

What it can do on your machine

Read from SKILL.md and the folder at commit f6cb362. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • dotnet

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Writing Csharp Code loads about 3.2k tokens when it runs. Until then it costs about 56 tokens; SKILL.md has 649 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~56
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:246
    Auto-load `.env` file before building configuration:
  • NoteMentions a .env fileSKILL.md:249
    ombine(Directory.GetCurrentDirectory(), ".env");

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from microsoft-foundry/foundry-agent-webapp at commit f6cb362, republished under its MIT licence (© microsoft-foundry). 649 words, ~3,200 tokens.

Download SKILL.mdSave it as .claude/skills/writing-csharp-code/SKILL.md (or your agent's skills folder).
name
writing-csharp-code
description
Provides C# and ASP.NET Core coding standards for this repository. Use when writing or modifying C# code, implementing API endpoints, configuring middleware, or working with authentication in the backend.

C# Coding Standards

Goal: Write clean, secure ASP.NET Core code with proper authentication

Hot Reload Development Workflow

The backend runs in watch mode (dotnet watch run). When you edit C# code:

  1. Save the file - .NET automatically recompiles
  2. Check the terminal - Look for compilation output in the "Backend: ASP.NET Core API" terminal
  3. Verify via console logs - New requests will use updated code immediately

VS Code Tasks (use Run Task command or check terminal panel):

  • Backend: ASP.NET Core API - Runs dotnet watch run with live recompilation
  • Logs are visible directly in VS Code terminal

No restart needed - Just edit, save, and test. Watch for compilation errors in the terminal.

Testing changes: Use Playwright browser tools to make requests and check browser console logs, or call endpoints directly.

Minimal API Patterns

Use typed request models, CancellationToken, and IHostEnvironment:

csharp
app.MapPost("/api/endpoint", async (
    RequestModel request,
    MyService service,
    IHostEnvironment env,
    CancellationToken cancellationToken) =>
{
    try
    {
        var result = await service.ProcessAsync(request, cancellationToken);
        return Results.Ok(result);
    }
    catch (Exception ex)
    {
        return ErrorResponseFactory.CreateFromException(ex, env);
    }
})
.RequireAuthorization("RequireChatScope")
.WithName("EndpointName");

Authentication Setup

JWT Bearer with Entra ID:

csharp
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(options =>
    {
        builder.Configuration.Bind("AzureAd", options);
        options.TokenValidationParameters.ValidAudiences = new[]
        {
            builder.Configuration["AzureAd:ClientId"],
            $"api://{builder.Configuration["AzureAd:ClientId"]}"
        };
    }, options => builder.Configuration.Bind("AzureAd", options));

Async Best Practices

csharp
// ✅ Use async/await with CancellationToken
public async Task<Result> ProcessAsync(Request req, CancellationToken ct)
{
    return await _service.ExecuteAsync(req, ct);
}

// ❌ Never block on async
var result = _service.ExecuteAsync(req).Result;  // WRONG

IAsyncEnumerable for Streaming

csharp
public async IAsyncEnumerable<string> StreamAsync(
    string input,
    [EnumeratorCancellation] CancellationToken cancellationToken = default)
{
    await foreach (var chunk in source.WithCancellation(cancellationToken))
    {
        yield return chunk;
    }
}

Credential Strategy

csharp
TokenCredential credential = env.IsDevelopment()
    ? new ChainedTokenCredential(
        new AzureCliCredential(),
        new AzureDeveloperCliCredential())  // Supports 'azd auth login'
    : new ManagedIdentityCredential(miClientId); // User-assigned MI in production

Why ChainedTokenCredential: Avoids DefaultAzureCredential's "fail fast" mode issues. Explicit, predictable credential chain.

IDisposable Pattern

csharp
public class MyService : IDisposable
{
    private readonly SemaphoreSlim _lock = new(1, 1);
    private readonly CancellationTokenSource _disposeCts = new();
    private bool _disposed;

    public void DoWork()
    {
        ObjectDisposedException.ThrowIf(_disposed, this);
        // ...
    }

    public void Dispose()
    {
        if (_disposed) return;
        _disposed = true;
        
        // Cancel pending operations first
        try { _disposeCts.Cancel(); }
        catch (ObjectDisposedException) { }
        
        _disposeCts.Dispose();
        _lock.Dispose();
    }
}

Error Responses (RFC 7807)

Use ErrorResponseFactory.CreateFromException() for consistent error responses.

See: backend/WebApp.Api/Models/ErrorResponse.cs

Common Mistakes

  • ❌ Using .Result or .Wait() on async methods
  • ❌ Forgetting CancellationToken parameter
  • ❌ Missing .RequireAuthorization() on endpoints
  • ❌ Exposing internal errors in production
  • ❌ Forgetting disposal guards in IDisposable

Project-Specific: Middleware Pipeline

Goal: Serve static files → validate auth → route APIs → SPA fallback

csharp
app.UseDefaultFiles();     // index.html for /
app.UseStaticFiles();      // wwwroot/* assets  
app.UseCors();             // Dev only
app.UseAuthentication();   // Validate JWT
app.UseAuthorization();    // Enforce scope
// Map endpoints here
app.MapFallbackToFile("index.html");  // MUST BE LAST

Project-Specific: AgentFrameworkService

See: backend/WebApp.Api/Services/AgentFrameworkService.cs

SDK Packages:

  • Azure.AI.Projects — Main entry point, v2 Agents API (see *.csproj for version)
  • Azure.AI.Projects.Agents — ProjectsAgentVersion, DeclarativeAgentDefinition, AgentAdministrationClient
  • Azure.AI.Extensions.OpenAI — ProjectOpenAIClient, ProjectConversationsClient, ProjectResponsesClient

Sub-namespaces: Azure.AI.Projects.Agents, Azure.AI.Extensions.OpenAI, OpenAI.Responses

Key patterns:

  • IDisposable implementation
  • Disposal guards (ObjectDisposedException.ThrowIf) in all public methods
  • Environment-aware credential selection (ChainedTokenCredential vs ManagedIdentityCredential vs OnBehalfOfCredential)
  • Static-cached ProjectsAgentVersion resolved once per process via SemaphoreSlim
  • Configuration validation (AI_AGENT_ENDPOINT, AI_AGENT_ID, optional AI_AGENT_VERSION)

Agent Loading (direct SDK):

csharp
// Load agent metadata directly from v2 Agents API.
// NOTE: the REST spec has no "latest" keyword — the agent_version path parameter is a
// plain string. To resolve the newest version, enumerate versions in descending order
// and take the first. Pin a specific version by passing its id to GetAgentVersionAsync.
ProjectsAgentVersion? agentVersion = null;
await foreach (var v in projectClient.AgentAdministrationClient.GetAgentVersionsAsync(
    agentName: agentId,
    limit: 1,
    order: AgentListOrder.Descending,
    after: null,
    before: null,
    cancellationToken: ct))
{
    agentVersion = v;
    break;
}

// Access definition for model/instructions/structured inputs
var definition = agentVersion?.Definition as DeclarativeAgentDefinition;

Streaming (direct ProjectResponsesClient — required for specialized types):

csharp
// Direct SDK for streaming — IChatClient doesn't expose MCP/annotations.
// Pin to the resolved agentVersion.Version so streaming and metadata stay in sync.
ProjectResponsesClient responsesClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(
    new AgentReference(agentId, agentVersion.Version), conversationId);

Why direct streaming? The IChatClient abstraction doesn't expose:

  • McpToolCallApprovalRequestItem for MCP approval flows
  • FileSearchCallResponseItem for file search quotes
  • MessageResponseItem.OutputTextAnnotations for citations

Streaming Pattern: Returns IAsyncEnumerable<StreamChunk> where StreamChunk contains either:

  • Text delta (chunk.IsText, chunk.TextDelta)
  • Annotations/citations (chunk.HasAnnotations, chunk.Annotations)

Streaming Response Types (from OpenAI.Responses):

  • StreamingResponseOutputTextDeltaUpdate - Text content delta
  • StreamingResponseOutputItemDoneUpdate - Item completion (has annotations)
  • StreamingResponseCompletedUpdate - Response completion with usage stats

Image Validation (in BuildUserMessage()):

  • Maximum 5 images per request
  • Maximum 5MB per image (decoded size)
  • Allowed: image/png, image/jpeg, image/gif, image/webp
  • Returns HTTP 400 with validation details if constraints violated

Annotation Types (from OpenAI.Responses):

  • UriCitationMessageAnnotation - Bing, Azure AI Search, SharePoint
  • FileCitationMessageAnnotation - File search (vector stores)
  • FilePathMessageAnnotation - Code interpreter output
  • ContainerFileCitationMessageAnnotation - Container file citations

Starter Prompts: Parsed from agent metadata (starterPrompts key, newline-separated).

Show full SKILL.md (241 more words)Show less

Project-Specific: Configuration Loading

Auto-load .env file before building configuration:

csharp
var envFile = Path.Combine(Directory.GetCurrentDirectory(), ".env");
if (File.Exists(envFile))
{
    foreach (var line in File.ReadAllLines(envFile)
        .Where(l => !string.IsNullOrWhiteSpace(l) && !l.StartsWith("#")))
    {
        var parts = line.Split('=', 2);
        if (parts.Length == 2)
            Environment.SetEnvironmentVariable(parts[0].Trim(), parts[1].Trim());
    }
}

Troubleshooting SDK Issues

When things break: SDK type mismatches and missing methods almost always happen after a package upgrade. Check backend/WebApp.Api/WebApp.Api.csproj for current versions:

  • Azure.AI.Projects - check WebApp.Api.csproj for current version
  • Azure.Identity - check WebApp.Api.csproj for current version

If types don't match documentation or samples, verify you're looking at docs for the same version installed in the project.

GitHub SDK Source (For Deep Dives)

When you need to understand SDK internals, fetch the actual source:

Quick Structure Checks (CLI)

For project-level overviews only—use sparingly:

powershell
# List public types in backend (overview, not deep exploration)
Get-ChildItem -Path backend -Recurse -Include *.cs | 
    Select-String -Pattern "^\s*(public|internal)\s+(class|record|interface)\s+(\w+)" |
    ForEach-Object { $_.Matches.Groups[3].Value } | Sort-Object -Unique

# Find IDisposable implementations
Get-ChildItem -Path backend -Recurse -Include *.cs |
    Select-String -Pattern ":\s*.*IDisposable"

Use for: Quick inventory of what exists. Follow up with pattern search or IDE navigation for understanding.

PowerShell Reflection for .NET Assemblies

Use when you need to discover exact type members on any .NET assembly (especially beta SDKs):

powershell
# 1. Build first to ensure DLLs are current
cd backend/WebApp.Api; dotnet build --no-restore

# 2. Find and load any assembly by name
$dll = Get-ChildItem -Path "bin/Debug" -Recurse -Filter "SomePackage.dll" | Select-Object -First 1
$asm = [System.Reflection.Assembly]::LoadFrom($dll.FullName)

# 3. Inspect a specific type's properties
$type = $asm.GetType("SomeNamespace.SomeClass")
Write-Host "Type: $($type.FullName)"
Write-Host "Assembly: $($asm.GetName().Name) v$($asm.GetName().Version)"
$type.GetProperties() | ForEach-Object { Write-Host "  $($_.PropertyType.Name) $($_.Name)" }

# 4. Check base type for inherited members
Write-Host "Base: $($type.BaseType.Name)"
$type.BaseType.GetProperties() | ForEach-Object { Write-Host "    $($_.PropertyType.Name) $($_.Name)" }

Finding types by pattern (when you don't know exact namespace):

powershell
# Search for types matching a pattern
$asm.GetTypes() | Where-Object { $_.Name -like "*Response*" } | ForEach-Object { Write-Host $_.FullName }

# Find methods on a type
$type.GetMethods() | Where-Object { $_.Name -like "*Async*" } | Select-Object Name, ReturnType

Common assemblies to inspect (after dotnet build):

AssemblyPathContains
Azure.AI.Projects.dllbin/Debug/net10.0/AIProjectClient, AgentReference
Azure.AI.Projects.Agents.dllbin/Debug/net10.0/AgentAdministrationClient, ProjectsAgentVersion, DeclarativeAgentDefinition
Azure.AI.Extensions.OpenAI.dllbin/Debug/net10.0/ProjectOpenAIClient, ProjectConversationsClient, ProjectResponsesClient
OpenAI.dllbin/Debug/net10.0/ResponseItem, StreamingResponse*, annotations
Azure.Identity.dllbin/Debug/net10.0/Credential types

When to use: Beta SDK properties aren't in docs, IDE tooltips are incomplete, or you need to verify a type's actual API surface.

Limitation: Returns raw API surface without intent or usage guidance. Combine with GitHub source for context.

  • implementing-chat-streaming - SSE streaming patterns and backend endpoint implementation
  • troubleshooting-authentication - MSAL/JWT debugging for 401 errors
  • researching-azure-ai-sdk - SDK research workflow and sample repositories

© microsoft-foundry, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .github/skills/writing-csharp-code of microsoft-foundry/foundry-agent-webapp.

Open the folder on GitHubat commit f6cb362

Compare with similar skills

Writing Csharp Code next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Writing Csharp Code compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Writing Csharp Code this skillmicrosoft-foundry/foundry-agent-webapp127—~3.2kAutomated safety check: NotesMIT
Using Dotnetnovotnyllc/dotnet-artisan233—~2.3kAutomated safety check: WarnMIT
C# and .NET DeveloperJeffallan/claude-skills12k—~1.3kAutomated safety check: PassMIT
Verify Authendpointsmadeyoga/AuthEndpoints121—~2.6kAutomated safety check: PassMIT
Dotnet Webapidotnet/skills5.6k2 repos~5.5kAutomated safety check: PassMIT
Dotnet ExpertLeoYeAI/openclaw-master-skills2.2k—~4.7kAutomated safety check: PassMIT

Similar skills

  • Using Dotnet

    novotnyllc/dotnet-artisan

    Detects .NET intent for any C, ASP.NET Core, EF Core, Blazor, MAUI, Uno Platform, WPF, WinUI, SignalR, gRPC, xUnit, NuGet, or MSBuild request from prompt keywords and repository signals (.sln…

    233 GitHub stars~2.3k tokensUpdated 1 mo ago
    Backend & APIsAuto-check: warnings
  • C# and .NET Developer

    Jeffallan/claude-skills

    Guides C# work on .NET 8+: ASP.NET Core APIs, Entity Framework Core data access, Blazor apps and CQRS with MediatR, following a five-step build workflow.

    12k GitHub stars~1.3k tokensUpdated 3 days ago
    Backend & APIsAuto-check passed
  • Verify Authendpoints

    madeyoga/AuthEndpoints

    Drive the AuthEndpoints HTTP API via the in-repo test host (cookie sessions, Identity bearer, Simple JWT, CSRF, ReAuth).

    121 GitHub stars~2.6k tokensUpdated 3 days ago
    Backend & APIsAuto-check passed
  • Dotnet Webapi

    dotnet/skills

    Official

    Guides creation and modification of ASP.NET Core Web API endpoints with correct HTTP semantics, OpenAPI metadata, and error handling.

    5.6k GitHub starsUsed in 2 repos~5.5k tokens
    Backend & APIsAuto-check passed
  • Dotnet Expert

    LeoYeAI/openclaw-master-skills

    A skill your agent uses when building .NET 8/9 applications, ASP.NET Core APIs, Entity Framework Core, MediatR CQRS, modular monolith architecture, FluentValidation, Result pattern, JWT…

    2.2k GitHub stars~4.7k tokensUpdated 2 mo ago
    Backend & APIsAuto-check passed
  • Dotnet Csharp

    novotnyllc/dotnet-artisan

    Baseline C skill loaded for every .NET code path. An agent skill from novotnyllc/dotnet-artisan.

    233 GitHub stars~1.7k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed

More from microsoft-foundry/foundry-agent-webapp

All 19 skills in this repo
  • Committing Code

    microsoft-foundry/foundry-agent-webapp

    Provides commit message format and workflow for this repository.

    127 GitHub stars~512 tokensUpdated 5 mo ago
    Auto-check passed
  • Implementing Chat Streaming

    microsoft-foundry/foundry-agent-webapp

    Provides SSE streaming patterns for the chat API and frontend.

    127 GitHub stars~1.9k tokensUpdated 5 mo ago
    Auto-check passed
  • Planning Features

    microsoft-foundry/foundry-agent-webapp

    Provides structured plan template for feature implementation.

    127 GitHub stars~548 tokensUpdated 5 mo ago
    Auto-check passed
  • Researching Azure AI SDK

    microsoft-foundry/foundry-agent-webapp

    Provides research patterns for Foundry Agent Service SDK. An agent skill from microsoft-foundry/foundry-agent-webapp.

    127 GitHub stars~4.7k tokensUpdated 5 mo ago
    Auto-check passed
  • Deploying To Azure

    microsoft-foundry/foundry-agent-webapp

    Provides deployment commands and troubleshooting for Azure Container Apps.

    127 GitHub stars~2.2k tokensUpdated 5 mo ago
    Auto-check: warnings
  • Syncing MCP Servers

    microsoft-foundry/foundry-agent-webapp

    Synchronize MCP server configuration between VS Code (.vscode/mcp.json) and Copilot CLI (~/.copilot/mcp-config.json).

    127 GitHub stars~1.3k tokensUpdated 5 mo ago
    Auto-check passed

Questions about Writing Csharp Code

What does Writing Csharp Code do?

Provides C and ASP.NET Core coding standards for this repository. Writing Csharp Code is an agent skill from microsoft-foundry/foundry-agent-webapp.NET Core coding standards for this repository.

When should I use Writing Csharp Code?

Writing Csharp Code fits situations like: modifying C code; implementing API endpoints; configuring middleware; working with authentication in the backend.

How do I install Writing Csharp Code in Claude Code?

Run `npx skills add microsoft-foundry/foundry-agent-webapp --skill writing-csharp-code -a claude-code`. Or copy the skill folder (.github/skills/writing-csharp-code in microsoft-foundry/foundry-agent-webapp) into .claude/skills/writing-csharp-code in your project. Claude Code loads it when a task matches its description.

How do I install Writing Csharp Code in Codex?

Run `npx skills add microsoft-foundry/foundry-agent-webapp --skill writing-csharp-code -a codex`. Or copy the skill folder (.github/skills/writing-csharp-code in microsoft-foundry/foundry-agent-webapp) into .agents/skills/writing-csharp-code in your project. Codex loads it when a task matches its description.

Can I use Writing Csharp Code in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add microsoft-foundry/foundry-agent-webapp --skill writing-csharp-code -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/writing-csharp-code, .gemini/skills/writing-csharp-code, .github/skills/writing-csharp-code and .opencode/skills/writing-csharp-code in your project.

What does Writing Csharp Code need to run?

Going by SKILL.md and its folder, Writing Csharp Code needs the command-line tools its instructions call (dotnet).

Does Writing Csharp Code access the network?

SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.

Is Writing Csharp Code safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Writing Csharp Code use?

Writing Csharp Code is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Writing Csharp Code use?

About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Writing Csharp Code?

Skills that share tags, products or a category with Writing Csharp Code: Using Dotnet (novotnyllc/dotnet-artisan, 233 stars), C# and .NET Developer (Jeffallan/claude-skills, 12k stars), Verify Authendpoints (madeyoga/AuthEndpoints, 121 stars) and Dotnet Webapi (dotnet/skills, 5.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Writing Csharp Code?

microsoft-foundry (a GitHub organization) maintains it in microsoft-foundry/foundry-agent-webapp, which has 127 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on April 21, 2026.

Source: microsoft-foundry/foundry-agent-webapp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.