用于的Claude代理SDK。网
 
现代。NET库,用于与Claude Code CLI交互,提供简单的一次性操作 QueryAsync() API和完全双向客户端,支持控制协议。
概述
建造。NET应用程序,利用Claude Code CLI——从简单的一次性查询到与工具控件、钩子、MCP服务器和自定义代理的完整多轮对话。
特性
- 简单
Claude.QueryAsync()用于一次性请求的API ClaudeSDKClient用于多回合双向对话- 控制协议支持(中断、模式、动态模型切换)
- 挂钩系统(PreToolUse、PostToolUse、UserPromptSubmit)
- 具有允许/拒绝控制的工具权限回调
- 过程中MCP服务器支持(工具、提示、资源)
- 跨平台:Windows、Linux、macOS
- 消息类型的源代码生成JSON模型
- 测试良好:128个测试(123个单元+5个集成;默认情况下禁用集成测试)
先决条件
- .NET 8.0或更高版本
- 克劳德代码CLI>=2.0.0(https://code.claude.com/docs/en/setup)
SDK按以下顺序发现Claude Code CLI: 1.ClaudeAgentOptions.CliPath(显式路径) 1.CLAUDE_CLI_PATH环境变量 1.PATH搜索claude(或claude.cmd在Windows上)
快速开始
单次查询
using EasyReasy.Claude.AgentSdk;
await foreach (Message message in Claude.QueryAsync("What is 2+2?"))
{
if (message is AssistantMessage assistantMessage)
foreach (ContentBlock block in assistantMessage.Content)
if (block is TextBlock textBlock)
Console.Write(textBlock.Text);
}多回合对话
using EasyReasy.Claude.AgentSdk;
await using ClaudeSDKClient client = new ClaudeSDKClient();
await client.ConnectAsync();
await client.QueryAsync("Write a Python hello world");
await foreach (Message message in client.ReceiveResponseAsync())
{
if (message is AssistantMessage assistantMessage)
foreach (ContentBlock block in assistantMessage.Content)
if (block is TextBlock textBlock)
Console.Write(textBlock.Text);
}带选项
ClaudeAgentOptions options = Claude.Options()
.SystemPrompt("You are a helpful coding assistant.")
.MaxTurns(5)
.Model("claude-sonnet-4-20250514")
.AcceptEdits()
.Build();
await foreach (Message message in Claude.QueryAsync("Explain async/await", options))
{
// handle messages
}核心概念
消息类型
AssistantMessage-克劳德的回应Content块UserMessage-用户输入SystemMessage-系统通知ResultMessage-查询完成,包含成本/工期信息
内容块
TextBlock-文本内容ThinkingBlock-扩展思维(附签名)ToolUseBlock-工具调用ToolResultBlock-刀具输出
配置
ClaudeAgentOptions 镜像Python SDK的选项:
| 属性 | 类型 | 描述 |
|---|---|---|
SystemPrompt | string? | 替换默认系统提示 |
AppendSystemPrompt | string? | 附加到默认系统提示 |
MaxTurns | int? | 最大对话次数 |
MaxBudgetUsd | decimal? | 美元支出限额 |
Model | string? | 要使用的模型 |
FallbackModel | string? | 回退模型 |
PermissionMode | PermissionMode? | 默认、接受编辑、计划、旁路权限(不能将旁路权限与CanUseTool组合使用) |
McpServers | object? | MCP服务器配置 |
CanUseTool | CanUseToolCallback? | 工具权限回调(不能与BypassPermissions结合使用) |
Hooks | IReadOnlyDictionary? | 事件挂钩 |
AllowedTools | IReadOnlyList | 白名单工具 |
DisallowedTools | IReadOnlyList | 黑名单工具 |
Cwd | string? | 工作目录 |
CliPath | string? | 显式CLI路径 |
高级用法
工具权限回调
警告:CanUseTool不能与BypassPermissions()绕过模式使CLI在不咨询回调的情况下自动允许所有工具,从而使其无效。建造者将投掷InvalidOperationException如果两者都已设置。
ClaudeAgentOptions options = Claude.Options()
.CanUseTool(async (toolName, input, context, cancellationToken) =>
{
if (toolName == "Bash" && input.GetProperty("command").GetString()?.Contains("rm") == true)
return new PermissionResultDeny("Destructive commands not allowed");
return new PermissionResultAllow();
})
.Build();钩子
ClaudeAgentOptions options = Claude.Options()
.AllowTools("Bash")
.Hooks(hooks => hooks
.PreToolUse("Bash", (input, toolUseId, context, cancellationToken) =>
{
Console.WriteLine($"[Hook] Bash: {input}");
return Task.FromResult(new HookOutput { Continue = true });
}))
.Build();MCP工具(进行中)
using EasyReasy.Claude.AgentSdk;
using EasyReasy.Claude.AgentSdk.Mcp;
ClaudeAgentOptions options = Claude.Options()
.McpServers(servers => servers.AddSdk("calculator", sdk => sdk
.Tool("add", (double left, double right) => left + right, "Add two numbers")))
.AllowAllTools()
.Build();自定义代理
ClaudeAgentOptions options = Claude.Options()
.Agents(agents => agents
.Add("reviewer", "Reviews code", "You are a code reviewer.", "Read", "Grep")
.Add("writer", "Writes code", "You are a clean coder.", tools: ["Read", "Write"]))
.Build();沙盒配置
ClaudeAgentOptions options = Claude.Options()
.Sandbox(sandbox => sandbox
.Enable()
.AutoAllowBash()
.ExcludeCommands("rm", "sudo")
.Network(network => network.AllowLocalBinding()))
.Build();安装
NuGet包(即将推出)
dotnet add package EasyReasy.Claude.AgentSdk来自源头
git clone https://github.com/anthropics/claude-agent-sdk-dotnet.git
cd claude-agent-sdk-dotnet
dotnet build状态和奇偶校验
- 当前版本: 0.1.0
- 状态: 预览(API和行为可能会更改)
- 对等: 设计用于匹配Python-Claude Agent SDK API、行为和人体工程学
- 测验: 128个测试(123个单元+5个集成;默认情况下禁用集成测试)
规范规则: 蟒蛇 claude-agent-sdk 是规范参考。这个。NET端口跟踪其行为和API。已知限制
control_cancel_request当前被忽略(取消正在进行的控制请求尚未实现;与Python SDK TODO匹配)。
运行集成测试
集成测试需要一个可用的Claude Code CLI,默认情况下是禁用的。
通过以下方式启用它们: CLAUDE_AGENT_SDK_RUN_INTEGRATION_TESTS=1 dotnet test相关项目
| 项目 | 语言 | 描述 |
|---|---|---|
| claude代理sdk python | Python | 官方Python SDK(规范参考) |
| 克劳德特工sdk-cpp | 具有全功能奇偶校验的C++ | C++端口 |
免责声明
这是一个独立的、非官方的港口,与Anthropic、PBC无关或不受其认可。
该存储库最初基于Elias Bachaalany的麻省理工学院授权作品。 如果感兴趣,请在此处查看原始存储库: https://github.com/0xeb/claude-agent-sdk-dotnet
这个存储库现在已经出现了相当大的分歧。
许可证
根据MIT许可证获得许可。看 LICENSE 了解详情。
这是一个。NET端口 claude代理sdk python 中国人民银行Anthropic。 从Python移植这个库后,它也略有发展,因此可能不是100%匹配。
开始建造克劳德动力。NET应用程序今天!
