ClaudeCodeSdk 0.10.1
See the version list below for details.
dotnet add package ClaudeCodeSdk --version 0.10.1
NuGet\Install-Package ClaudeCodeSdk -Version 0.10.1
<PackageReference Include="ClaudeCodeSdk" Version="0.10.1" />
<PackageVersion Include="ClaudeCodeSdk" Version="0.10.1" />
<PackageReference Include="ClaudeCodeSdk" />
paket add ClaudeCodeSdk --version 0.10.1
#r "nuget: ClaudeCodeSdk, 0.10.1"
#:package ClaudeCodeSdk@0.10.1
#addin nuget:?package=ClaudeCodeSdk&version=0.10.1
#tool nuget:?package=ClaudeCodeSdk&version=0.10.1
Claude Code SDK for C#
A .NET SDK for interacting with Claude through the Claude Code CLI, providing both one-shot queries and interactive client sessions with full Microsoft Agent Framework (MAF) integration.
Features
- ✅ One-shot Queries - Simple request/response pattern via
ClaudeQuery.QueryAsync - ✅ Interactive Client - Bidirectional communication with
ClaudeSdkClient - ✅ Streaming Support - Real-time response streaming via
IAsyncEnumerable<T> - ✅ Microsoft Agent Framework Integration - Use Claude as an
AIAgent(ClaudeCodeSdk.MAF) - ✅ Session Management - Multi-turn conversations with thread support and automatic session lifecycle management
- ✅ Thread Persistence - Serialize/deserialize conversation threads for storage
- ✅ Tool Integration - Full support for Claude Code tools and MCP servers
- ✅ Thinking Blocks - Extended reasoning with configurable thinking tokens
- ✅ Usage Tracking - Token usage and cost monitoring
- ✅ .NET 10.0 Ready - Built on the latest .NET platform (compatible with .NET 8.0+)
- ✅ Modern Async/Await - Full
IAsyncDisposablesupport with proper resource management
Version
Current Version: 0.10.1-preview1
Status
This is a preview release. APIs may change between versions.
Installation
Core SDK
Install via NuGet:
dotnet add package ClaudeCodeSdk
Microsoft Agent Framework Integration (Optional)
For Microsoft Agent Framework support:
dotnet add package ClaudeCodeSdk.MAF
Prerequisites
- .NET 10.0 SDK
- Claude Code CLI: Install globally via npm:
npm install -g @anthropic-ai/claude-code - API Key: Set
ANTHROPIC_AUTH_TOKENenvironment variable with your Anthropic API key
Quick Start
One-shot Query
using ClaudeCodeSdk;
var messages = ClaudeQuery.QueryAsync("What is the capital of France?");
await foreach (var message in messages)
{
Console.WriteLine(message.Content);
}
Interactive Client
using ClaudeCodeSdk;
using var client = new ClaudeSdkClient();
await client.ConnectAsync();
await client.SendMessageAsync("Hello Claude!");
await foreach (var message in client.ReceiveMessagesAsync())
{
if (message is AssistantMessage assistantMsg)
{
Console.WriteLine($"Claude: {assistantMsg.Content}");
}
}
Microsoft Agent Framework Integration
using ClaudeCodeSdk.MAF;
using Microsoft.Extensions.AI;
// Create Claude as an AIAgent
await using var agent = new ClaudeCodeAIAgent();
// Simple query
var response = await agent.RunAsync("Explain async/await in C#");
Console.WriteLine(response.Text);
// Multi-turn conversation with thread
var thread = agent.GetNewThread();
var response1 = await agent.RunAsync(
[new ChatMessage(ChatRole.User, "What is dependency injection?")],
thread: thread
);
// Context is automatically preserved across turns
var response2 = await agent.RunAsync(
[new ChatMessage(ChatRole.User, "Show me an example in C#")],
thread: thread
);
// Streaming with real-time updates
await foreach (var update in agent.RunStreamingAsync("Tell me a story", thread: thread))
{
if (update.Contents != null)
{
foreach (var content in update.Contents)
{
if (content is TextContent text)
{
Console.Write(text.Text);
}
}
}
}
See ClaudeCodeSdk.MAF README for complete MAF integration documentation.
Architecture
The SDK implements a simplified dual-pattern architecture for Claude Code interactions:
Core Components
ClaudeProcess - Unified subprocess manager
- Direct subprocess communication with Claude Code CLI
- JSON-based message protocol with strongly-typed parsing
- Automatic CLI discovery and process lifecycle management
- Shared by both
ClaudeQueryandClaudeSdkClient
ClaudeQuery - One-shot query API
- Fire-and-forget pattern for simple queries
- Streams responses as
IAsyncEnumerable<IMessage> - Automatically handles connection lifecycle
- Ideal for single-request scenarios
ClaudeSdkClient - Interactive client API
- Long-lived bidirectional communication
- Manual connection control via
ConnectAsync/DisconnectAsync - Session management with multi-turn conversations
- Interrupt support and resource cleanup
Message Types
All messages implement IMessage:
AssistantMessage- Claude's responses with content blocksUserMessage- User inputSystemMessage- System notifications and metadataResultMessage- End-of-conversation marker with cost/usage data
Content Blocks
All content blocks implement IContentBlock:
TextBlock- Plain text contentThinkingBlock- Claude's reasoning (when extended thinking is enabled)ToolUseBlock- Tool invocationsToolResultBlock- Tool execution resultsErrorContentBlock- Error information
Exception Hierarchy
Custom exceptions inherit from ClaudeSDKException:
CLINotFoundException- Claude Code CLI not foundCLIConnectionException- Transport connection issuesProcessException- Subprocess execution failuresCLIJsonDecodeException- Message parsing errorsMessageParseException- Type conversion failures
Microsoft Agent Framework Integration
The MAF integration (ClaudeCodeSdk.MAF) provides:
ClaudeCodeAIAgent
- Full
AIAgentimplementation from Microsoft.Agents.AI - Streaming and non-streaming execution modes
- Thread-based conversation management
- Automatic session persistence via
ClaudeSdkClientManager - System prompt extraction and configuration
ClaudeCodeAgentThread
- Thread serialization/deserialization for persistence
- Session ID management for conversation continuity
- Compatible with MAF's
AIConversationState
ClaudeSdkClientManager
- Automatic client lifecycle management
- Disposes old clients when switching sessions
- Thread-safe with proper async resource management
- Optimizes resource usage across multiple threads
Configuration
Environment Variables
The SDK automatically configures these environment variables for the Claude Code CLI:
ANTHROPIC_AUTH_TOKEN- API authentication (fromClaudeCodeOptions.ApiKeyor environment)ANTHROPIC_BASE_URL- Custom API endpoint (fromClaudeCodeOptions.BaseUrl)CLAUDE_CODE_ENTRYPOINT- SDK identifier (always "sdk-csharp")
ClaudeCodeOptions
Key configuration options:
var options = new ClaudeCodeOptions
{
ApiKey = "sk-ant-...", // Anthropic API key
BaseUrl = "https://api.anthropic.com", // Custom API endpoint
MaxThinkingTokens = 10000, // Extended thinking budget
SystemPrompt = "You are a helpful assistant",
Model = "claude-sonnet-4",
PermissionMode = PermissionMode.Auto, // Tool approval mode
WorkingDirectory = "/path/to/project",
MaxTurns = 10,
EnvironmentVariables = new Dictionary<string, string?>
{
{ "HTTP_PROXY", "http://proxy:8080" }
}
};
Development
Building
# Build the entire solution
dotnet build
# Build specific project
dotnet build src/ClaudeCodeSdk/ClaudeCodeSdk.csproj
Testing
# Run all tests
dotnet test
# Run with verbose output
dotnet test --verbosity normal
# Run specific test
dotnet test --filter "FullyQualifiedName~ExceptionsTests"
Running Examples
# Run all examples
dotnet run --project examples/ClaudeCodeSdk.Examples.csproj
# Run specific example class
dotnet run --project examples/ClaudeCodeSdk.Examples.csproj -- --example QuickStart
Packaging NuGet Packages
# Pack both SDK and MAF packages
dotnet pack src/ClaudeCodeSdk/ClaudeCodeSdk.csproj -c Release
dotnet pack src/ClaudeCodeSdk.MAF/ClaudeCodeSdk.MAF.csproj -c Release
# Pack with symbols
dotnet pack src/ClaudeCodeSdk/ClaudeCodeSdk.csproj -c Release -p:IncludeSymbols=true
Examples
The examples/ folder contains complete working examples:
- QuickStartExamples - Basic one-shot queries and interactive client usage
- StreamingExamples - Real-time response streaming patterns
- MafExample - Microsoft Agent Framework integration examples
Running Examples
Make sure you have:
- Installed Claude Code CLI:
npm install -g @anthropic-ai/claude-code - Set
ANTHROPIC_AUTH_TOKENenvironment variable
Then run:
dotnet run --project examples/ClaudeCodeSdk.Examples.csproj
Key Behaviors
Message Streaming and Termination
ClaudeProcess.ReceiveAsync()automatically terminates when receiving aResultMessage- Both
ClaudeQueryandClaudeSdkClientrely on this automatic termination ClaudeSdkClient.ReceiveResponseAsync()provides convenience method that yields until ResultMessage
JSON Serialization
- Uses
snake_case_lowernaming policy viaJsonUtilfor Claude Code CLI compatibility - Consistent serialization across all message exchanges
Resource Management
- All process-managing classes implement
IAsyncDisposable ClaudeProcesshandles subprocess lifecycle (start, kill, cleanup)- Use
await usingfor automatic cleanup
MAF Session Management
ClaudeSdkClientManagerautomatically handles client creation/disposal when switching threads- Thread session IDs map to Claude Code's
Resumeparameter for conversation continuity - Session state persists via the thread's
SessionId
Troubleshooting
"Claude Code CLI not found"
Ensure Claude Code CLI is installed globally:
npm install -g @anthropic-ai/claude-code
Authentication Errors
Set your API key:
# macOS/Linux
export ANTHROPIC_AUTH_TOKEN="your-api-key"
# Windows PowerShell
$env:ANTHROPIC_AUTH_TOKEN="your-api-key"
# Windows Command Prompt
set ANTHROPIC_AUTH_TOKEN=your-api-key
Or pass it via options:
var options = new ClaudeCodeOptions { ApiKey = "your-api-key" };
Process Lifecycle Issues
Always dispose of SDK objects properly:
await using var client = new ClaudeSdkClient();
await client.ConnectAsync();
// ... use client
// Automatic disposal on scope exit
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT License - see LICENSE.txt for details
Links
| Product | Versions 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. |
-
net10.0
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.2)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on ClaudeCodeSdk:
| Package | Downloads |
|---|---|
|
ClaudeCodeSdk.MAF
.NET SDK for Claude Code |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.10.2-preview1 | 63 | 2/6/2026 |
| 0.10.1 | 115 | 1/31/2026 |
| 0.10.1-preview1 | 86 | 1/29/2026 |
| 0.10.0-preview3 | 81 | 1/26/2026 |
| 0.10.0-preview2 | 90 | 1/11/2026 |
| 0.10.0-preview1 | 88 | 1/6/2026 |
| 0.0.1 | 321 | 8/26/2025 |