Files
Chris 904a5b843e Python / .NET Samples - Restructure and Improve Samples (Feature Branc… (#4092)
* Python: .NET Samples - Restructure and Improve Samples (Feature Branch) (#4091)

* Moved by agent (#4094)

* Fix readme links

* .NET Samples - Create `04-hosting` learning path step (#4098)

* Agent move

* Agent reorderd

* Remove A2A section from README 

Removed A2A section from the Getting Started README.

* Agent fixed links

* Fix broken sample links in durable-agents README (#4101)

* Initial plan

* Fix broken internal links in documentation

Co-authored-by: crickman <66376200+crickman@users.noreply.github.com>

* Revert template link changes; keep only durable-agents README fix

Co-authored-by: crickman <66376200+crickman@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: crickman <66376200+crickman@users.noreply.github.com>

* .NET Samples - Create `03-workflows` learning path step (#4102)

* Fix solution project path

* Python: Fix broken markdown links to repo resources (outside /docs) (#4105)

* Initial plan

* Fix broken markdown links to repo resources

Co-authored-by: crickman <66376200+crickman@users.noreply.github.com>

* Update README to rename .NET Workflows Samples section

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: crickman <66376200+crickman@users.noreply.github.com>

* .NET Samples - Create `02-agents` learning path step (#4107)

* .NET: Fix broken relative link in GroupChatToolApproval README (#4108)

* Initial plan

* Fix broken link in GroupChatToolApproval README

Co-authored-by: crickman <66376200+crickman@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: crickman <66376200+crickman@users.noreply.github.com>

* Update labeler configuration for workflow samples

* .NET - Reorder Agents samples to start from Step01 instead of Step04 (#4110)

* Fix solution

* Resolve new sample paths

* Move new AgentSkills and AgentWithMemory_Step04 samples

* Fix link

* Fix readme path

* fix: update stale dotnet/samples/Durable path reference in AGENTS.md

Co-authored-by: crickman <66376200+crickman@users.noreply.github.com>

* Moved new sample

* Update solution

* Resolve merge (new sample)

* Sync to new sample - FoundryAgents_Step21_BingCustomSearch

* Updated README

* .NET Samples - Configuration Naming Update (#4149)

* .NET: Restore AzureFunctions index parity with ConsoleApps under DurableAgents samples (#4221)

* Clean-up `05_host_your_agent`

* Config setting consistency

* Refine samples

* AGENTS.md

* Move new samples

* Re-order samples

* Move new project and fixup solution

* Fixup model config

* Fix up new UT project

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
904a5b843e · 2026-02-26 00:56:10 +00:00
History
..

Using Anthropic Skills with agents

This sample demonstrates how to use Anthropic-managed Skills with AI agents. Skills are pre-built capabilities provided by Anthropic that can be used with the Claude API.

What this sample demonstrates

  • Listing available Anthropic-managed skills
  • Creating an AI agent with Anthropic Claude Skills support using the simplified AsAITool() approach
  • Using the pptx skill to create PowerPoint presentations
  • Downloading and saving generated files to disk
  • Handling agent responses with generated content

Prerequisites

Before you begin, ensure you have the following prerequisites:

  • .NET 10.0 SDK or later
  • Anthropic API key configured
  • Access to Anthropic Claude models with Skills support

Note: This sample uses Anthropic Claude models with Skills. Skills are a beta feature. For more information, see Anthropic documentation.

Set the following environment variables:

$env:ANTHROPIC_API_KEY="your-anthropic-api-key"  # Replace with your Anthropic API key
$env:ANTHROPIC_CHAT_MODEL_NAME="your-anthropic-model"  # Replace with your Anthropic model (e.g., claude-sonnet-4-5-20250929)

Run the sample

Navigate to the AgentWithAnthropic sample directory and run:

cd dotnet\samples\02-agents\AgentWithAnthropic
dotnet run --project .\Agent_Anthropic_Step04_UsingSkills

Available Anthropic Skills

Anthropic provides several managed skills that can be used with the Claude API:

  • pptx - Create PowerPoint presentations
  • xlsx - Create Excel spreadsheets
  • docx - Create Word documents
  • pdf - Create and analyze PDF documents

You can list available skills using the Anthropic SDK:

SkillListPage skills = await anthropicClient.Beta.Skills.List(
    new SkillListParams { Source = "anthropic", Betas = [AnthropicBeta.Skills2025_10_02] });

foreach (var skill in skills.Items)
{
    Console.WriteLine($"{skill.Source}: {skill.ID} (version: {skill.LatestVersion})");
}

Expected behavior

The sample will:

  1. List all available Anthropic-managed skills
  2. Create an agent with the pptx skill enabled
  3. Run the agent with a request to create a presentation
  4. Display the agent's response text
  5. Download any generated files and save them to disk
  6. Display token usage statistics

Code highlights

Simplified skill configuration

The Anthropic SDK handles all beta flags and container configuration automatically when using AsAITool():

// Define the pptx skill
BetaSkillParams pptxSkill = new()
{
    Type = BetaSkillParamsType.Anthropic,
    SkillID = "pptx",
    Version = "latest"
};

// Create an agent - the SDK handles beta flags automatically!
ChatClientAgent agent = anthropicClient.Beta.AsAIAgent(
    model: model,
    instructions: "You are a helpful agent for creating PowerPoint presentations.",
    tools: [pptxSkill.AsAITool()]);

Note: No manual RawRepresentationFactory, Betas, or Container configuration is needed. The SDK automatically adds the required beta headers (skills-2025-10-02, code-execution-2025-08-25) and configures the container with the skill.

Handling generated files

Generated files are returned as HostedFileContent within CodeInterpreterToolResultContent:

// Collect generated files from response
List<HostedFileContent> hostedFiles = response.Messages
    .SelectMany(m => m.Contents.OfType<CodeInterpreterToolResultContent>())
    .Where(c => c.Outputs is not null)
    .SelectMany(c => c.Outputs!.OfType<HostedFileContent>())
    .ToList();

// Download and save each file
foreach (HostedFileContent file in hostedFiles)
{
    using HttpResponse fileResponse = await anthropicClient.Beta.Files.Download(
        file.FileId,
        new FileDownloadParams { Betas = ["files-api-2025-04-14"] });

    string fileName = $"presentation_{file.FileId.Substring(0, 8)}.pptx";
    await using FileStream fileStream = File.Create(fileName);
    Stream contentStream = await fileResponse.ReadAsStream();
    await contentStream.CopyToAsync(fileStream);
}