Follow Discord
Sweep 22 Oct 2026 · 04:32Z Build v2.1.308 527 read Stable v2.1.308 Latest v2.1.308 Next v2.1.308 Feeds RSS JSON llms.txt llms-full.txt Unofficial
One capture · api

One read of Claude Developer Platformapi-20261021T163725Z

121 pages moved out of 808 read.

Pages moved 121 significant first
Pages read 808 in this capture
Captured 16:37 UTC
Corpus hash 8d3bd0be75f5 corpus-hash

What this read moved

1-25 of 121, page 1 of 5

This capture is too large to show at once. Changes 1-25 of 121 are below, significant first; the rest are on the following screens.

about-claude/use-case-guides/content-moderation Changed · +4 / -4 lines

from line 546
546546 {
547547 Model = Model.ClaudeHaiku4_5_20251001, // Using the Haiku model for lower costs
548548 MaxTokens = 200,
549 Messages = [new() { Role = Role.User, Content = assessmentPrompt }],
549 Messages = [new UserMessageParam { Content = assessmentPrompt }],
550550 }
551551 );
552552 
from line 1077
10771077 {
10781078 Model = Model.ClaudeHaiku4_5_20251001, // Using the Haiku model for lower costs
10791079 MaxTokens = 200,
1080 Messages = [new() { Role = Role.User, Content = assessmentPrompt }],
1080 Messages = [new UserMessageParam { Content = assessmentPrompt }],
10811081 }
10821082 );
10831083 
from line 1726
17261726 {
17271727 Model = Model.ClaudeHaiku4_5_20251001, // Using the Haiku model for lower costs
17281728 MaxTokens = 200,
1729 Messages = [new() { Role = Role.User, Content = assessmentPrompt }],
1729 Messages = [new UserMessageParam { Content = assessmentPrompt }],
17301730 }
17311731 );
17321732 
from line 2384
23842384 {
23852385 Model = Model.ClaudeHaiku4_5_20251001, // Using the Haiku model for lower costs
23862386 MaxTokens = 2048, // Increased max token count to handle batches
2387 Messages = [new() { Role = Role.User, Content = assessmentPrompt }],
2387 Messages = [new UserMessageParam { Content = assessmentPrompt }],
23882388 }
23892389 );
23902390 

about-claude/use-case-guides/customer-support-chat Changed · +24 / -40 lines

from line 660
660660 
661661 public async Task<string> ProcessUserInput(string userInput)
662662 {
663 Messages.Add(new() { Role = Role.User, Content = userInput });
663 Messages.Add(new UserMessageParam { Content = userInput });
664664 
665665 var responseMessage = await GenerateMessage(Messages, maxTokens: 2048);
666666 
from line 668
668668 {
669669 var toolResult = HandleToolUse(toolUse.Name, toolUse.Input);
670670 
671 Messages.Add(new()
671 Messages.Add(new AssistantMessageParam
672672 {
673 Role = Role.Assistant,
674673 Content = responseMessage.Content
675674 .Select(contentBlock => new ContentBlockParam(contentBlock.Json))
676675 .ToList(),
677676 });
678 Messages.Add(new()
677 Messages.Add(new UserMessageParam
679678 {
680 Role = Role.User,
681679 Content = new List<ContentBlockParam>
682680 {
683681 new ToolResultBlockParam { ToolUseID = toolUse.ID, Content = toolResult },
from line 688
690688 {
691689 if (block.TryPickText(out var followUpText))
692690 {
693 Messages.Add(new() { Role = Role.Assistant, Content = followUpText.Text });
691 Messages.Add(new AssistantMessageParam { Content = followUpText.Text });
694692 return followUpText.Text;
695693 }
696694 }
from line 700
702700 {
703701 if (block.TryPickText(out var textBlock))
704702 {
705 Messages.Add(new() { Role = Role.Assistant, Content = textBlock.Text });
703 Messages.Add(new AssistantMessageParam { Content = textBlock.Text });
706704 return textBlock.Text;
707705 }
708706 }
from line 857
859857 }
860858 
861859 String processUserInput(String userInput) {
862 messages.add(MessageParam.builder()
863 .role(MessageParam.Role.USER)
864 .content(userInput)
865 .build());
860 messages.add(MessageParam.ofUser(userInput));
866861 
867862 Message responseMessage = generateMessage(messages, 2048);
868863 
from line 869
874869 (Map<String, JsonValue>) toolUse._input().asObject().orElseThrow();
875870 String result = handleToolUse(toolUse.name(), toolInput);
876871 
877 messages.add(MessageParam.builder()
878 .role(MessageParam.Role.ASSISTANT)
879 .contentOfBlockParams(content.stream().map(ContentBlock::toParam).toList())
880 .build());
881 messages.add(MessageParam.builder()
882 .role(MessageParam.Role.USER)
883 .contentOfBlockParams(List.of(ContentBlockParam.ofToolResult(
884 ToolResultBlockParam.builder()
885 .toolUseId(toolUse.id())
886 .content(result)
887 .build())))
888 .build());
872 messages.add(MessageParam.ofAssistantOfContentBlockParams(
873 content.stream().map(ContentBlock::toParam).toList()));
874 messages.add(MessageParam.ofUserOfContentBlockParams(List.of(ContentBlockParam.ofToolResult(
875 ToolResultBlockParam.builder()
876 .toolUseId(toolUse.id())
877 .content(result)
878 .build()))));
889879 
890880 Message followUpResponse = generateMessage(messages, 2048);
891881 
from line 884
894884 .findFirst()
895885 .orElseThrow(() -> new IllegalStateException("An error occurred: Unexpected response type"));
896886 String responseText = followUpBlock.asText().text();
897 messages.add(MessageParam.builder()
898 .role(MessageParam.Role.ASSISTANT)
899 .content(responseText)
900 .build());
887 messages.add(MessageParam.ofAssistant(responseText));
901888 return responseText;
902889 } else {
903890 ContentBlock textBlock = content.stream()
from line 892
905892 .findFirst()
906893 .orElseThrow(() -> new IllegalStateException("An error occurred: Unexpected response type"));
907894 String responseText = textBlock.asText().text();
908 messages.add(MessageParam.builder()
909 .role(MessageParam.Role.ASSISTANT)
910 .content(responseText)
911 .build());
895 messages.add(MessageParam.ofAssistant(responseText));
912896 return responseText;
913897 }
914898 }
from line 916
932916 
933917 ```php PHP
934918 use Anthropic\Client;
919 use Anthropic\Messages\AssistantMessageParam;
935920 use Anthropic\Messages\Message;
936 use Anthropic\Messages\MessageParam;
937921 use Anthropic\Messages\TextBlock;
938922 use Anthropic\Messages\ToolResultBlockParam;
939923 use Anthropic\Messages\ToolUseBlock;
924 use Anthropic\Messages\UserMessageParam;
940925 
941926 class ChatBot
942927 {
from line 928
943928 // MODEL, IDENTITY, TOOLS, and get_quote() mirror the config.py values
944929 // defined earlier in this guide (shown in Python).
945930 
946 /** @var list<MessageParam> */
931 /** @var list<UserMessageParam|AssistantMessageParam> */
947932 public private(set) array $messages = [];
948933 
949934 public function __construct(
from line 936
951936 ) {}
952937 
953938 /**
954 * @param list<MessageParam> $messages
939 * @param list<UserMessageParam|AssistantMessageParam> $messages
955940 */
956941 public function generateMessage(array $messages, int $maxTokens): Message
957942 {
from line 951
966951 
967952 public function processUserInput(string $userInput): string
968953 {
969 $this->messages[] = MessageParam::with(role: 'user', content: $userInput);
954 $this->messages[] = UserMessageParam::with(content: $userInput);
970955 
971956 $responseMessage = $this->generateMessage($this->messages, maxTokens: 2048);
972957 
from line 961
976961 if ($lastBlock instanceof ToolUseBlock) {
977962 $toolResult = $this->handleToolUse($lastBlock->name, $lastBlock->input);
978963 
979 $this->messages[] = MessageParam::with(role: 'assistant', content: $content);
980 $this->messages[] = MessageParam::with(
981 role: 'user',
964 $this->messages[] = AssistantMessageParam::with(content: $content);
965 $this->messages[] = UserMessageParam::with(
982966 content: [
983967 ToolResultBlockParam::with(toolUseID: $lastBlock->id, content: $toolResult),
984968 ],
from line 978
994978 throw new \RuntimeException('An error occurred: Unexpected response type');
995979 }
996980 
997 $this->messages[] = MessageParam::with(role: 'assistant', content: $firstBlock->text);
981 $this->messages[] = AssistantMessageParam::with(content: $firstBlock->text);
998982 
999983 return $firstBlock->text;
1000984 }
from line 985
1001985 
1002986 $firstBlock = array_find($content, static fn ($block): bool => $block instanceof TextBlock);
1003987 if ($firstBlock instanceof TextBlock) {
1004 $this->messages[] = MessageParam::with(role: 'assistant', content: $firstBlock->text);
988 $this->messages[] = AssistantMessageParam::with(content: $firstBlock->text);
1005989 
1006990 return $firstBlock->text;
1007991 }

agents-and-tools/agent-skills/quickstart Changed · +4 / -14 lines

from line 223
223223 },
224224 Messages =
225225 [
226 new MessageParam
226 new UserMessageParam
227227 {
228 Role = Role.User,
229228 Content = "Create a presentation about renewable energy with 5 slides",
230229 },
231230 ],
from line 684
685684 },
686685 Messages =
687686 [
688 new MessageParam
687 new UserMessageParam
689688 {
690 Role = Role.User,
691689 Content = "Create a quarterly sales tracking spreadsheet with sample data",
692690 },
693691 ],
from line 876
878876 },
879877 Messages =
880878 [
881 new MessageParam
879 new UserMessageParam
882880 {
883 Role = Role.User,
884881 Content = "Write a 2-page report on the benefits of renewable energy",
885882 },
886883 ],
from line 1066
10691066 },
10701067 ],
10711068 },
1072 Messages =
1073 [
1074 new MessageParam
1075 {
1076 Role = Role.User,
1077 Content = "Generate a PDF invoice template",
1078 },
1079 ],
1069 Messages = [new UserMessageParam { Content = "Generate a PDF invoice template" }],
10801070 Tools = [new CodeExecutionTool20260521()],
10811071 }
10821072 );

agents-and-tools/mcp-connector Changed · +12 / -22 lines

from line 160
160160 MaxTokens = 1000,
161161 Messages = new List<BetaMessageParam>
162162 {
163 new() { Role = Role.User, Content = "What tools do you have available?" }
163 new BetaUserMessageParam { Content = "What tools do you have available?" }
164164 },
165165 McpServers = new List<BetaRequestMcpServerUrlDefinition>
166166 {
from line 835
835835 ];
836836 List<BetaMessageParam> messages =
837837 [
838 new() { Role = Role.User, Content = "What tools do you have available?" },
838 new BetaUserMessageParam { Content = "What tools do you have available?" },
839839 ];
840840 
841841 // First request: the toolset isn't pinned, so the API asks the server for
from line 883
883883 });
884884 
885885 // With a pinned toolset, the response has no mcp_tool_listing block.
886 Console.WriteLine(string.Join(", ", second.Content.Select(block => block.Type)));
886 Console.WriteLine(string.Join(", ", second.Content.Select(block => block.Type.Raw())));
887887 ```
888888 
889889 ```go Go
from line 1276
12761276 <Tabs>
12771277 <Tab title="Gradle">
12781278 ```kotlin
1279 implementation("com.anthropic:anthropic-java:2.75.0")
1280 implementation("com.anthropic:anthropic-java-mcp:2.75.0")
1279 implementation("com.anthropic:anthropic-java:3.0.0")
1280 implementation("com.anthropic:anthropic-java-mcp:3.0.0")
12811281 ```
12821282 </Tab>
12831283 
from line 1286
12861286 <dependency>
12871287 <groupId>com.anthropic</groupId>
12881288 <artifactId>anthropic-java</artifactId>
1289 <version>2.75.0</version>
1289 <version>3.0.0</version>
12901290 </dependency>
12911291 <dependency>
12921292 <groupId>com.anthropic</groupId>
12931293 <artifactId>anthropic-java-mcp</artifactId>
1294 <version>2.75.0</version>
1294 <version>3.0.0</version>
12951295 </dependency>
12961296 ```
12971297 </Tab>
from line 1466
14661466 {
14671467 Model = Messages::Model.ClaudeOpus5_5,
14681468 MaxTokens = 1024,
1469 Messages =
1470 [
1471 new BetaMessageParam
1472 {
1473 Role = Role.User,
1474 Content = "What tools do you have available?",
1475 },
1476 ],
1469 Messages = [new BetaUserMessageParam { Content = "What tools do you have available?" }],
14771470 },
14781471 tools
14791472 );
from line 1802
18091802 MaxTokens = 1024,
18101803 Messages =
18111804 [
1812 new BetaMessageParam
1805 new BetaUserMessageParam
18131806 {
1814 Role = Role.User,
1815 Content = new BetaMessageParamContent(
1807 Content = new BetaMessageContentParam(
18161808 [
18171809 BetaMcp.ResourceToContent(resource),
18181810 new BetaTextBlockParam { Text = "Summarize this document" },
from line 1895
19031895 BetaMessage response = anthropic.beta().messages().create(MessageCreateParams.builder()
19041896 .model(Model.CLAUDE_OPUS_5_5)
19051897 .maxTokens(1024L)
1906 .addUserMessageOfBetaContentBlockParams(content)
1898 .addUserMessageOfContentBlockParams(content)
19071899 .build());
19081900 
19091901 IO.println(response);
from line 1911
19191911 MultipartField.Builder<InputStream> fileField = MultipartField.<InputStream>builder()
19201912 .value(new ByteArrayInputStream(resourceFile.content()))
19211913 .filename(resourceFile.filename());
1922 if (resourceFile.mimeType() != null) {
1923 fileField.contentType(resourceFile.mimeType());
1924 }
1914 resourceFile.mimeType().ifPresent(fileField::contentType);
19251915 
19261916 var uploaded = anthropic.files().upload(FileUploadParams.builder()
19271917 .file(fileField.build())

agents-and-tools/tool-use/advisor-tool Changed · +17 / -43 lines

from line 153
153153 },
154154 Messages =
155155 [
156 new BetaMessageParam
156 new BetaUserMessageParam
157157 {
158 Role = Role.User,
159158 Content = "Build a concurrent worker pool in Go with graceful shutdown."
160159 }
161160 ],
from line 510
511510 
512511 var messages = new List<BetaMessageParam>
513512 {
514 new() { Role = Role.User, Content = "Build a concurrent worker pool in Go with graceful shutdown." }
513 new BetaUserMessageParam { Content = "Build a concurrent worker pool in Go with graceful shutdown." }
515514 };
516515 
517516 var response = await client.Beta.Messages.Create(new MessageCreateParams
from line 523
524523 });
525524 
526525 // Append the full response content, including any advisor_tool_result blocks
527 messages.Add(new BetaMessageParam
526 messages.Add(new BetaAssistantMessageParam
528527 {
529 Role = Role.Assistant,
530528 Content = response.Content.Select(block => new BetaContentBlockParam(block.Json)).ToList()
531529 });
532530 
533531 // Continue the conversation
534 messages.Add(new BetaMessageParam { Role = Role.User, Content = "Now add a max-in-flight limit of 10." });
532 messages.Add(new BetaUserMessageParam { Content = "Now add a max-in-flight limit of 10." });
535533 
536534 var followUp = await client.Beta.Messages.Create(new MessageCreateParams
537535 {
from line 589
591589 
592590 ```java Java
593591 import com.anthropic.models.beta.messages.BetaAdvisorTool20260301;
594 import com.anthropic.models.beta.messages.BetaContentBlock;
595592 import com.anthropic.models.beta.messages.BetaMessage;
596593 import com.anthropic.models.beta.messages.BetaMessageParam;
597594 import com.anthropic.models.beta.messages.BetaToolUnion;
from line 603
606603 BetaAdvisorTool20260301.builder().model(Model.CLAUDE_OPUS_5_5).build()));
607604 
608605 List<BetaMessageParam> messages = new ArrayList<>();
609 messages.add(BetaMessageParam.builder()
610 .role(BetaMessageParam.Role.USER)
611 .content("Build a concurrent worker pool in Go with graceful shutdown.")
612 .build());
606 messages.add(BetaMessageParam.ofUser(
607 "Build a concurrent worker pool in Go with graceful shutdown."));
613608 
614609 BetaMessage response = client.beta().messages().create(MessageCreateParams.builder()
615610 .model(Model.CLAUDE_SONNET_5)
from line 615
620615 .build());
621616 
622617 // Append the full response content, including any advisor_tool_result blocks
623 messages.add(BetaMessageParam.builder()
624 .role(BetaMessageParam.Role.ASSISTANT)
625 .contentOfBetaContentBlockParams(
626 response.content().stream().map(BetaContentBlock::toParam).toList())
627 .build());
618 messages.add(response.toParam());
628619 
629620 // Continue the conversation
630 messages.add(BetaMessageParam.builder()
631 .role(BetaMessageParam.Role.USER)
632 .content("Now add a max-in-flight limit of 10.")
633 .build());
621 messages.add(BetaMessageParam.ofUser("Now add a max-in-flight limit of 10."));
634622 
635623 BetaMessage followUp = client.beta().messages().create(MessageCreateParams.builder()
636624 .model(Model.CLAUDE_SONNET_5)
from line 893
905893 // ... your other tools
906894 };
907895 var task = "Build a concurrent worker pool in Go with graceful shutdown.";
908 var messages = new List<BetaMessageParam> { new() { Role = Role.User, Content = task } };
896 var messages = new List<BetaMessageParam> { new BetaUserMessageParam { Content = task } };
909897 var advisorCalled = false;
910898 
911899 for (var turn = 1; turn <= MaxTurns; turn++)
from line 906
918906 Messages = messages,
919907 Betas = ["advisor-tool-2026-03-01"]
920908 });
921 messages.Add(new BetaMessageParam
909 messages.Add(new BetaAssistantMessageParam
922910 {
923 Role = Role.Assistant,
924911 Content = response.Content.Select(block => new BetaContentBlockParam(block.Json)).ToList()
925912 });
926913 advisorCalled =
from line 928
941928 var results = RunYourTools(response.Content); // list of tool_result blocks
942929 if (results.Count > 0)
943930 {
944 messages.Add(new BetaMessageParam { Role = Role.User, Content = results });
931 messages.Add(new BetaUserMessageParam { Content = results });
945932 }
946933 // Skip this if your system prompt already tells the model to call sparingly.
947934 if (turn == NudgeTurn - 1 && !advisorCalled)
948935 {
949 messages.Add(new BetaMessageParam { Role = Role.User, Content = NudgeText });
936 messages.Add(new BetaUserMessageParam { Content = NudgeText });
950937 }
951938 }
952939 ```
from line 1061
10741061 );
10751062 String task = "Build a concurrent worker pool in Go with graceful shutdown.";
10761063 List<BetaMessageParam> messages = new ArrayList<>();
1077 messages.add(BetaMessageParam.builder()
1078 .role(BetaMessageParam.Role.USER)
1079 .content(task)
1080 .build());
1064 messages.add(BetaMessageParam.ofUser(task));
10811065 boolean advisorCalled = false;
10821066 
10831067 for (int turn = 1; turn <= MAX_TURNS; turn++) {
from line 1072
10881072 .messages(messages)
10891073 .addBeta("advisor-tool-2026-03-01")
10901074 .build());
1091 messages.add(BetaMessageParam.builder()
1092 .role(BetaMessageParam.Role.ASSISTANT)
1093 .contentOfBetaContentBlockParams(
1094 response.content().stream().map(BetaContentBlock::toParam).toList())
1095 .build());
1075 messages.add(response.toParam());
10961076 advisorCalled = advisorCalled
10971077 || response.content().stream().anyMatch(block ->
10981078 block.isServerToolUse()
from line 1087
11071087 
11081088 List<BetaContentBlockParam> results = runYourTools(response.content()); // list of tool_result blocks
11091089 if (!results.isEmpty()) {
1110 messages.add(BetaMessageParam.builder()
1111 .role(BetaMessageParam.Role.USER)
1112 .contentOfBetaContentBlockParams(results)
1113 .build());
1090 messages.add(BetaMessageParam.ofUserOfContentBlockParams(results));
11141091 }
11151092 // Skip this if your system prompt already tells the model to call sparingly.
11161093 if (turn == NUDGE_TURN - 1 && !advisorCalled) {
1117 messages.add(BetaMessageParam.builder()
1118 .role(BetaMessageParam.Role.USER)
1119 .content(NUDGE_TEXT)
1120 .build());
1094 messages.add(BetaMessageParam.ofUser(NUDGE_TEXT));
11211095 }
11221096 }
11231097 }

agents-and-tools/tool-use/bash-tool Changed · +10 / -20 lines

from line 99
9999 Tools = [new ToolBash20250124()],
100100 Messages =
101101 [
102 new()
103 {
104 Role = Role.User,
105 Content = "List all Python files in the current directory.",
106 },
102 new UserMessageParam { Content = "List all Python files in the current directory." },
107103 ],
108104 }
109105 );
from line 990
994990 Tools = [new ToolBash20250124()],
995991 Messages =
996992 [
997 new()
993 new UserMessageParam { Content = "List all Python files in the current directory." },
994 new AssistantMessageParam
998995 {
999 Role = Role.User,
1000 Content = "List all Python files in the current directory.",
1001 },
1002 new()
1003 {
1004 Role = Role.Assistant,
1005 Content = new MessageParamContent(new List<ContentBlockParam>
996 Content = new List<ContentBlockParam>
1006997 {
1007998 new ContentBlockParam(new ToolUseBlockParam()
1008999 {
from line 1004
10131004 ["command"] = JsonSerializer.SerializeToElement("ls *.py"),
10141005 },
10151006 }),
1016 }),
1007 },
10171008 },
1018 new()
1009 new UserMessageParam
10191010 {
1020 Role = Role.User,
1021 Content = new MessageParamContent(new List<ContentBlockParam>
1011 Content = new List<ContentBlockParam>
10221012 {
10231013 new ContentBlockParam(new ToolResultBlockParam()
10241014 {
from line 1015
10251015 ToolUseID = "toolu_01A09q90qw90lq917835lq9",
10261016 Content = "analysis.py\nprocess_data.py\n",
10271017 }),
1028 }),
1018 },
10291019 },
10301020 ],
10311021 }
from line 1073
10831073 .maxTokens(1024)
10841074 .addTool(ToolBash20250124.builder().build())
10851075 .addUserMessage("List all Python files in the current directory.")
1086 .addAssistantMessageOfBlockParams(
1076 .addAssistantMessageOfContentBlockParams(
10871077 List.of(
10881078 ContentBlockParam.ofToolUse(
10891079 ToolUseBlockParam.builder()
from line 1088
10981088 )
10991089 )
11001090 )
1101 .addUserMessageOfBlockParams(
1091 .addUserMessageOfContentBlockParams(
11021092 List.of(
11031093 ContentBlockParam.ofToolResult(
11041094 ToolResultBlockParam.builder()

agents-and-tools/tool-use/browser-use-tool Changed · +1 / -5 lines

from line 119
119119 Tools = [new BrowserToolset20260801()],
120120 Messages =
121121 [
122 new MessageParam
123 {
124 Role = Role.User,
125 Content = "Open example.com/docs and tell me how to get started.",
126 },
122 new UserMessageParam { Content = "Open example.com/docs and tell me how to get started." },
127123 ],
128124 };
129125 

agents-and-tools/tool-use/build-a-tool-using-agent Changed · +35 / -58 lines

from line 304
304304 MaxTokens = 1024,
305305 Tools = tools,
306306 ToolChoice = toolChoice,
307 Messages = [new() { Role = Role.User, Content = userPrompt }],
307 Messages = [new UserMessageParam { Content = userPrompt }],
308308 });
309309 
310310 // When Claude calls a tool, the response has stop_reason "tool_use"
from line 349
349349 ToolChoice = toolChoice,
350350 Messages =
351351 [
352 new() { Role = Role.User, Content = userPrompt },
353 new() { Role = Role.Assistant, Content = response.Content.Select(block => new ContentBlockParam(block.Json)).ToList() },
354 new() { Role = Role.User, Content = new MessageParamContent(toolResults) },
352 new UserMessageParam { Content = userPrompt },
353 new AssistantMessageParam { Content = response.Content.Select(block => new ContentBlockParam(block.Json)).ToList() },
354 new UserMessageParam { Content = toolResults },
355355 ],
356356 });
357357 
from line 588
588588 .toolChoice(toolChoice)
589589 .addUserMessage(userPrompt)
590590 .addMessage(response)
591 .addUserMessageOfBlockParams(List.of(ContentBlockParam.ofToolResult(
591 .addUserMessageOfContentBlockParams(List.of(ContentBlockParam.ofToolResult(
592592 ToolResultBlockParam.builder()
593593 .toolUseId(toolUse.id())
594594 .content(result)
from line 1100
11001100 // Keep the full conversation history in a list so each turn sees prior context.
11011101 List<MessageParam> messages =
11021102 [
1103 new()
1103 new UserMessageParam
11041104 {
1105 Role = Role.User,
11061105 Content = "Schedule a weekly team standup every Monday at 9am for the next 4 weeks, starting Monday, March 30, 2026. Invite the whole team: [email protected], [email protected], [email protected].",
11071106 },
11081107 ];
from line 1130
11311130 }
11321131 var result = RunTool(toolUse!);
11331132 
1134 messages.Add(new()
1133 messages.Add(new AssistantMessageParam
11351134 {
1136 Role = Role.Assistant,
11371135 Content = response.Content.Select(block => new ContentBlockParam(block.Json)).ToList(),
11381136 });
1139 messages.Add(new()
1137 messages.Add(new UserMessageParam
11401138 {
1141 Role = Role.User,
1142 Content = new MessageParamContent(
1139 Content = new MessageContentParam(
11431140 [
11441141 new ContentBlockParam(new ToolResultBlockParam() { ToolUseID = toolUse!.ID, Content = result }),
11451142 ]),
from line 1345
13481345 
13491346 // Keep the full conversation history in a list so each turn sees prior context.
13501347 List<MessageParam> messages = new ArrayList<>();
1351 messages.add(MessageParam.builder()
1352 .role(MessageParam.Role.USER)
1353 .content("Schedule a weekly team standup every Monday at 9am for the next 4 weeks, starting Monday, March 30, 2026. Invite the whole team: [email protected], [email protected], [email protected].")
1354 .build());
1348 messages.add(MessageParam.ofUser(
1349 "Schedule a weekly team standup every Monday at 9am for the next 4 weeks, starting Monday, March 30, 2026. Invite the whole team: [email protected], [email protected], [email protected]."));
13551350 
13561351 Message response = client.messages().create(MessageCreateParams.builder()
13571352 .model(Model.CLAUDE_OPUS_5_5)
from line 1367
13721367 String result = runTool(toolUse);
13731368 
13741369 messages.add(response.toParam());
1375 messages.add(MessageParam.builder()
1376 .role(MessageParam.Role.USER)
1377 .contentOfBlockParams(List.of(ContentBlockParam.ofToolResult(
1378 ToolResultBlockParam.builder()
1379 .toolUseId(toolUse.id())
1380 .content(result)
1381 .build())))
1382 .build());
1370 messages.add(MessageParam.ofUserOfContentBlockParams(List.of(ContentBlockParam.ofToolResult(
1371 ToolResultBlockParam.builder()
1372 .toolUseId(toolUse.id())
1373 .content(result)
1374 .build()))));
13831375 
13841376 response = client.messages().create(MessageCreateParams.builder()
13851377 .model(Model.CLAUDE_OPUS_5_5)
from line 1899
19071899 
19081900 List<MessageParam> messages =
19091901 [
1910 new()
1902 new UserMessageParam
19111903 {
1912 Role = Role.User,
19131904 Content = "Check what I have on Monday, March 30, 2026, then schedule a one-hour planning session that day that avoids any conflicts.",
19141905 },
19151906 ];
from line 1930
19391930 }
19401931 }
19411932 
1942 messages.Add(new()
1933 messages.Add(new AssistantMessageParam
19431934 {
1944 Role = Role.Assistant,
19451935 Content = response.Content.Select(block => new ContentBlockParam(block.Json)).ToList(),
19461936 });
1947 messages.Add(new() { Role = Role.User, Content = new MessageParamContent(toolResults) });
1937 messages.Add(new UserMessageParam { Content = toolResults });
19481938 
19491939 response = await client.Messages.Create(new MessageCreateParams
19501940 {
from line 2149
21592149 .build();
21602150 
21612151 List<MessageParam> messages = new ArrayList<>();
2162 messages.add(MessageParam.builder()
2163 .role(MessageParam.Role.USER)
2164 .content("Check what I have on Monday, March 30, 2026, then schedule a one-hour planning session that day that avoids any conflicts.")
2165 .build());
2152 messages.add(MessageParam.ofUser(
2153 "Check what I have on Monday, March 30, 2026, then schedule a one-hour planning session that day that avoids any conflicts."));
21662154 
21672155 Message response = client.messages().create(MessageCreateParams.builder()
21682156 .model(Model.CLAUDE_OPUS_5_5)
from line 2177
21892177 }
21902178 
21912179 messages.add(response.toParam());
2192 messages.add(MessageParam.builder()
2193 .role(MessageParam.Role.USER)
2194 .contentOfBlockParams(toolResults)
2195 .build());
2180 messages.add(MessageParam.ofUserOfContentBlockParams(toolResults));
21962181 
21972182 response = client.messages().create(MessageCreateParams.builder()
21982183 .model(Model.CLAUDE_OPUS_5_5)
from line 2740
27552740 
27562741 List<MessageParam> messages =
27572742 [
2758 new() { Role = Role.User, Content = $"Schedule a one-hour all-hands on Monday, March 30, 2026 at 10am with everyone: {emails}" },
2743 new UserMessageParam { Content = $"Schedule a one-hour all-hands on Monday, March 30, 2026 at 10am with everyone: {emails}" },
27592744 ];
27602745 
27612746 var response = await client.Messages.Create(new MessageCreateParams
from line 2777
27922777 }
27932778 }
27942779 
2795 messages.Add(new()
2780 messages.Add(new AssistantMessageParam
27962781 {
2797 Role = Role.Assistant,
27982782 Content = response.Content.Select(block => new ContentBlockParam(block.Json)).ToList(),
27992783 });
2800 messages.Add(new() { Role = Role.User, Content = new MessageParamContent(toolResults) });
2784 messages.Add(new UserMessageParam { Content = toolResults });
28012785 
28022786 response = await client.Messages.Create(new MessageCreateParams
28032787 {
from line 3021
30373021 .collect(Collectors.joining(", "));
30383022 
30393023 List<MessageParam> messages = new ArrayList<>();
3040 messages.add(MessageParam.builder()
3041 .role(MessageParam.Role.USER)
3042 .content("Schedule a one-hour all-hands on Monday, March 30, 2026 at 10am with everyone: " + emails)
3043 .build());
3024 messages.add(MessageParam.ofUser(
3025 "Schedule a one-hour all-hands on Monday, March 30, 2026 at 10am with everyone: " + emails));
30443026 
30453027 Message response = client.messages().create(MessageCreateParams.builder()
30463028 .model(Model.CLAUDE_OPUS_5_5)
from line 3051
30693051 }
30703052 
30713053 messages.add(response.toParam());
3072 messages.add(MessageParam.builder()
3073 .role(MessageParam.Role.USER)
3074 .contentOfBlockParams(toolResults)
3075 .build());
3054 messages.add(MessageParam.ofUserOfContentBlockParams(toolResults));
30763055 
30773056 response = client.messages().create(MessageCreateParams.builder()
30783057 .model(Model.CLAUDE_OPUS_5_5)
from line 3469
34903469 using Anthropic.Models.Beta.Messages;
34913470 using MessageCreateParams = Anthropic.Models.Beta.Messages.MessageCreateParams;
34923471 using InputSchema = Anthropic.Models.Beta.Messages.InputSchema;
3493 using Role = Anthropic.Models.Beta.Messages.Role;
34943472 using Model = Anthropic.Models.Messages.Model;
34953473 
34963474 AnthropicClient client = new();
from line 3552
35743552 MaxTokens = 1024,
35753553 Messages =
35763554 [
3577 new()
3555 new BetaUserMessageParam
35783556 {
3579 Role = Role.User,
35803557 Content = "Check what I have on Monday, March 30, 2026, then schedule a one-hour planning session that day that avoids any conflicts.",
35813558 },
35823559 ],

agents-and-tools/tool-use/code-execution-tool Changed · +6 / -7 lines

from line 147
147147 {
148148 Model = Model.ClaudeOpus5_5,
149149 MaxTokens = 4096,
150 Messages = [new() { Role = Role.User, Content = "Use the code execution tool to calculate the mean and standard deviation of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]" }],
150 Messages = [new UserMessageParam { Content = "Use the code execution tool to calculate the mean and standard deviation of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]" }],
151151 Tools = [new CodeExecutionTool20250825()]
152152 });
153153 
from line 412
412412 Model = Model.ClaudeOpus5_5,
413413 MaxTokens = 4096,
414414 Messages = [
415 new()
415 new UserMessageParam
416416 {
417 Role = Role.User,
418417 Content = new([
419418 new TextBlockParam { Text = "Analyze this CSV data" },
420419 new ContainerUploadBlockParam { FileID = fileObject.ID }
from line 481
482481 MessageCreateParams.builder()
483482 .model(Model.CLAUDE_OPUS_5_5)
484483 .maxTokens(4096L)
485 .addUserMessageOfBlockParams(List.of(
484 .addUserMessageOfContentBlockParams(List.of(
486485 ContentBlockParam.ofText(TextBlockParam.builder()
487486 .text("Analyze this CSV data")
488487 .build()),
from line 651
652651 {
653652 Model = Model.ClaudeOpus5_5,
654653 MaxTokens = 4096,
655 Messages = [new() { Role = Role.User, Content = "Create a matplotlib visualization and save it as output.png" }],
654 Messages = [new UserMessageParam { Content = "Create a matplotlib visualization and save it as output.png" }],
656655 Tools = [new CodeExecutionTool20250825()]
657656 };
658657 
from line 1271
12721271 {
12731272 Model = Model.ClaudeOpus5_5,
12741273 MaxTokens = 4096,
1275 Messages = [new() { Role = Role.User, Content = "Write a file with a random number and save it to '/tmp/number.txt'" }],
1274 Messages = [new UserMessageParam { Content = "Write a file with a random number and save it to '/tmp/number.txt'" }],
12761275 Tools = [new CodeExecutionTool20250825()]
12771276 });
12781277 
from line 1281
12821281 Container = response1.Container!.ID,
12831282 Model = Model.ClaudeOpus5_5,
12841283 MaxTokens = 4096,
1285 Messages = [new() { Role = Role.User, Content = "Read the number from '/tmp/number.txt' and calculate its square" }],
1284 Messages = [new UserMessageParam { Content = "Read the number from '/tmp/number.txt' and calculate its square" }],
12861285 Tools = [new CodeExecutionTool20250825()]
12871286 });
12881287 

agents-and-tools/tool-use/computer-use-tool Changed · +5 / -19 lines

from line 173
173173 new ToolTextEditor20250728(),
174174 new ToolBash20250124(),
175175 ],
176 Messages =
177 [
178 new MessageParam
179 {
180 Role = Role.User,
181 Content = "Save a picture of a cat to my desktop.",
182 },
183 ],
176 Messages = [new UserMessageParam { Content = "Save a picture of a cat to my desktop." }],
184177 };
185178 
186179 var response = await client.Messages.Create(parameters);
from line 555
562555 
563556 // Add Claude's response to the conversation history
564557 messages.Add(
565 new()
558 new AssistantMessageParam
566559 {
567 Role = Role.Assistant,
568560 Content = response
569561 .Content.Select(block => new ContentBlockParam(block.Json))
570562 .ToList(),
from line 571
579571 }
580572 
581573 // Send tool results back to Claude for the next iteration
582 messages.Add(new() { Role = Role.User, Content = toolResults });
574 messages.Add(new UserMessageParam { Content = toolResults });
583575 }
584576 
585577 return messages;
from line 624
632624 .build());
633625 
634626 // Add Claude's response to the conversation history
635 messages.add(MessageParam.builder()
636 .role(MessageParam.Role.ASSISTANT)
637 .contentOfBlockParams(response.content().stream().map(ContentBlock::toParam).toList())
638 .build());
627 messages.add(response.toParam());
639628 
640629 // Run any tools Claude requested and collect results
641630 List<ContentBlockParam> toolResults = processToolCalls(response);
from line 633
644633 }
645634 
646635 // Send tool results back to Claude for the next iteration
647 messages.add(MessageParam.builder()
648 .role(MessageParam.Role.USER)
649 .contentOfBlockParams(toolResults)
650 .build());
636 messages.add(MessageParam.ofUserOfContentBlockParams(toolResults));
651637 }
652638 return messages;
653639 }

agents-and-tools/tool-use/define-tools Changed · +2 / -6 lines

from line 338
338338 ],
339339 }),
340340 ],
341 Messages = [
342 new() { Role = Role.User, Content = "What's the weather like in San Francisco?" }
343 ]
341 Messages = [new UserMessageParam { Content = "What's the weather like in San Francisco?" }]
344342 };
345343 
346344 var message = await client.Messages.Create(parameters);
from line 699
701699 }),
702700 ],
703701 ToolChoice = new ToolChoiceTool { Name = "get_weather" },
704 Messages = [
705 new() { Role = Role.User, Content = "What's the weather like in San Francisco?" }
706 ]
702 Messages = [new UserMessageParam { Content = "What's the weather like in San Francisco?" }]
707703 };
708704 
709705 var message = await client.Messages.Create(parameters);

agents-and-tools/tool-use/fine-grained-tool-streaming Changed · +2 / -3 lines

from line 212
212212 ],
213213 Messages =
214214 [
215 new()
215 new UserMessageParam
216216 {
217 Role = Role.User,
218217 Content = "Can you write a long poem and make a file called poem.txt?",
219218 },
220219 ],
from line 621
622621 },
623622 },
624623 ],
625 Messages = [new() { Role = Role.User, Content = "Weather in Paris?" }],
624 Messages = [new UserMessageParam { Content = "Weather in Paris?" }],
626625 };
627626 
628627 // Block index -> accumulated JSON fragments

agents-and-tools/tool-use/memory-tool Changed · +2 / -7 lines

from line 192
192192 MaxTokens = 2048,
193193 Messages =
194194 [
195 new()
196 {
197 Role = Role.User,
198 Content = "Help me respond to this customer service ticket.",
199 },
195 new UserMessageParam { Content = "Help me respond to this customer service ticket." },
200196 ],
201197 Tools = [new MemoryTool20250818()],
202198 }
from line 352
356352 MaxTokens = 1024,
357353 Messages =
358354 [
359 new()
355 new BetaUserMessageParam
360356 {
361 Role = Role.User,
362357 Content = "Remember that customer Acme Corp prefers email follow-ups.",
363358 },
364359 ],

agents-and-tools/tool-use/overview Changed · +6 / -6 lines

from line 60
6060 Model = Model.ClaudeOpus5_5,
6161 MaxTokens = 1024,
6262 Tools = [new ToolUnion(new WebSearchTool20260209())],
63 Messages = [new() { Role = Role.User, Content = "What's the latest on the Mars rover?" }]
63 Messages = [new UserMessageParam { Content = "What's the latest on the Mars rover?" }]
6464 };
6565 
6666 var message = await client.Messages.Create(parameters);
from line 298
298298 MaxTokens = 1024,
299299 Tools = tools,
300300 ToolChoice = toolChoice,
301 Messages = [new() { Role = Role.User, Content = userPrompt }],
301 Messages = [new UserMessageParam { Content = userPrompt }],
302302 });
303303 ToolUseBlock? toolUse = null;
304304 foreach (var block in response.Content)
from line 329
329329 ToolChoice = toolChoice,
330330 Messages =
331331 [
332 new() { Role = Role.User, Content = userPrompt },
333 new() { Role = Role.Assistant, Content = response.Content.Select(block => new ContentBlockParam(block.Json)).ToList() },
334 new() { Role = Role.User, Content = new MessageParamContent(toolResults) },
332 new UserMessageParam { Content = userPrompt },
333 new AssistantMessageParam { Content = response.Content.Select(block => new ContentBlockParam(block.Json)).ToList() },
334 new UserMessageParam { Content = toolResults },
335335 ],
336336 });
337337 
from line 479
479479 .toolChoice(toolChoice)
480480 .addUserMessage(userPrompt)
481481 .addMessage(response)
482 .addUserMessageOfBlockParams(List.of(ContentBlockParam.ofToolResult(
482 .addUserMessageOfContentBlockParams(List.of(ContentBlockParam.ofToolResult(
483483 ToolResultBlockParam.builder()
484484 .toolUseId(toolUse.id())
485485 .content(weather)

agents-and-tools/tool-use/parallel-tool-use Changed · +7 / -7 lines

from line 298
298298 {
299299 Model = Model.ClaudeOpus5_5,
300300 MaxTokens = 1024,
301 Messages = [new() { Role = Role.User, Content = "What's the weather in SF and NYC, and what time is it there?" }],
301 Messages = [new UserMessageParam { Content = "What's the weather in SF and NYC, and what time is it there?" }],
302302 Tools = tools
303303 };
304304 
from line 357
357357 Model = Model.ClaudeOpus5_5,
358358 MaxTokens = 1024,
359359 Messages = [
360 new() { Role = Role.User, Content = "What's the weather in SF and NYC, and what time is it there?" },
361 new() { Role = Role.Assistant, Content = response.Content.Select(block => new ContentBlockParam(block.Json)).ToList() },
362 new() { Role = Role.User, Content = new MessageParamContent(toolResults) }
360 new UserMessageParam { Content = "What's the weather in SF and NYC, and what time is it there?" },
361 new AssistantMessageParam { Content = response.Content.Select(block => new ContentBlockParam(block.Json)).ToList() },
362 new UserMessageParam { Content = toolResults }
363363 ],
364364 Tools = tools
365365 };
from line 592
592592 .addTool(timeTool)
593593 .addUserMessage("What's the weather in SF and NYC, and what time is it there?")
594594 .addMessage(response)
595 .addUserMessageOfBlockParams(toolResults)
595 .addUserMessageOfContentBlockParams(toolResults)
596596 .build();
597597 
598598 Message finalResponse = client.messages().create(finalParams);
from line 986
986986 }),
987987 ],
988988 ToolChoice = new ToolChoiceAuto { DisableParallelToolUse = true },
989 Messages = [new() { Role = Role.User, Content = "What is the weather in San Francisco and New York?" }]
989 Messages = [new UserMessageParam { Content = "What is the weather in San Francisco and New York?" }]
990990 };
991991 
992992 var response = await client.Messages.Create(parameters);
from line 1267
12671267 }),
12681268 ],
12691269 ToolChoice = new ToolChoiceAny { DisableParallelToolUse = true },
1270 Messages = [new() { Role = Role.User, Content = "What is the weather in San Francisco and New York?" }]
1270 Messages = [new UserMessageParam { Content = "What is the weather in San Francisco and New York?" }]
12711271 };
12721272 
12731273 var response = await client.Messages.Create(parameters);

agents-and-tools/tool-use/programmatic-tool-calling Changed · +10 / -14 lines

from line 194
194194 Model = Model.ClaudeOpus5_5,
195195 MaxTokens = 4096,
196196 Messages = [
197 new() {
198 Role = Role.User,
197 new UserMessageParam {
199198 Content = "Query sales data for the West, East, and Central regions, then tell me which region had the highest revenue"
200199 }
201200 ],
from line 803
804803 Container = "container_xyz789",
805804 Messages =
806805 [
807 new()
806 new UserMessageParam
808807 {
809 Role = Role.User,
810808 Content = "Query customer purchase history from the last quarter and identify our top 5 customers by revenue"
811809 },
812 new()
810 new AssistantMessageParam
813811 {
814 Role = Role.Assistant,
815812 Content = new ContentBlock[]
816813 {
817814 new TextBlock { Text = "I'll query the purchase history and analyze the results." },
from line 831
834831 }
835832 }
836833 },
837 new()
834 new UserMessageParam
838835 {
839 Role = Role.User,
840836 Content = new ContentBlockParam[]
841837 {
842838 new ToolResultBlockParam
from line 950
954950 .maxTokens(4096L)
955951 .container("container_xyz789")
956952 .addUserMessage("Query customer purchase history from the last quarter and identify our top 5 customers by revenue")
957 .addAssistantMessageOfBlockParams(List.of(
953 .addAssistantMessageOfContentBlockParams(List.of(
958954 ContentBlockParam.ofText(
959955 TextBlockParam.builder()
960956 .text("I'll query the purchase history and analyze the results.")
from line 958
962958 ContentBlockParam.ofServerToolUse(
963959 ServerToolUseBlockParam.builder()
964960 .id("srvtoolu_abc123")
965 .name("code_execution")
961 .name(ServerToolUseBlockParam.Name.CODE_EXECUTION)
966962 .input(JsonValue.from(Map.of("code", "...")))
967963 .build()),
968964 ContentBlockParam.ofToolUse(
from line 969
973969 .codeExecution20260120Caller("srvtoolu_abc123")
974970 .build())
975971 ))
976 .addUserMessageOfBlockParams(List.of(
972 .addUserMessageOfContentBlockParams(List.of(
977973 ContentBlockParam.ofToolResult(
978974 ToolResultBlockParam.builder()
979975 .toolUseId("toolu_def456")

agents-and-tools/tool-use/server-tools Changed · +7 / -12 lines

from line 164
164164 Model = Model.ClaudeOpus5_5,
165165 MaxTokens = 1024,
166166 Messages = [
167 new() {
168 Role = Role.User,
167 new UserMessageParam {
169168 Content = "Search for comprehensive information about quantum computing breakthroughs in 2025"
170169 }
171170 ],
from line 181
182181 Model = Model.ClaudeOpus5_5,
183182 MaxTokens = 1024,
184183 Messages = [
185 new() {
186 Role = Role.User,
184 new UserMessageParam {
187185 Content = "Search for comprehensive information about quantum computing breakthroughs in 2025"
188186 },
189 new() {
190 Role = Role.Assistant,
187 new AssistantMessageParam {
191188 Content = response.Content.Select(block => new ContentBlockParam(block.Json)).ToList()
192189 }
193190 ],
from line 700
703700 },
704701 }),
705702 ];
706 MessageParam userMessage = new()
703 MessageParam userMessage = new UserMessageParam
707704 {
708 Role = Role.User,
709705 Content = "Summarize https://example.com/article and run uname -a to tell me what system this is on."
710706 };
711707 
from line 739
743739 Messages =
744740 [
745741 userMessage,
746 new()
742 new AssistantMessageParam
747743 {
748 Role = Role.Assistant,
749744 Content = response.Content.Select(block => new ContentBlockParam(block.Json)).ToList()
750745 },
751 new() { Role = Role.User, Content = new MessageParamContent(toolResults) }
746 new UserMessageParam { Content = toolResults }
752747 ]
753748 });
754749 // If a web_fetch was deferred, it runs on this request and its
from line 870
875870 .addTool(runCommandTool)
876871 .addUserMessage(prompt)
877872 .addMessage(response)
878 .addUserMessageOfBlockParams(toolResults)
873 .addUserMessageOfContentBlockParams(toolResults)
879874 .build());
880875 // If a web_fetch was deferred, it runs on this request and its
881876 // web_fetch_tool_result is the first block of continuation.content().

agents-and-tools/tool-use/strict-tool-use Changed · +3 / -3 lines

from line 172
172172 {
173173 Model = Model.ClaudeOpus5_5,
174174 MaxTokens = 1024,
175 Messages = [new() { Role = Role.User, Content = "What's the weather like in San Francisco?" }],
175 Messages = [new UserMessageParam { Content = "What's the weather like in San Francisco?" }],
176176 Tools = [
177177 new ToolUnion(new Tool()
178178 {
from line 517
517517 {
518518 Model = Model.ClaudeOpus5_5,
519519 MaxTokens = 1024,
520 Messages = [new() { Role = Role.User, Content = "Search for flights to Tokyo departing June 1, 2026" }],
520 Messages = [new UserMessageParam { Content = "Search for flights to Tokyo departing June 1, 2026" }],
521521 Tools = [
522522 new ToolUnion(new Tool()
523523 {
from line 878
878878 {
879879 Model = Model.ClaudeOpus5_5,
880880 MaxTokens = 1024,
881 Messages = [new() { Role = Role.User, Content = "Help me plan a trip from New York to Paris for 2 people, departing June 1, 2026" }],
881 Messages = [new UserMessageParam { Content = "Help me plan a trip from New York to Paris for 2 people, departing June 1, 2026" }],
882882 Tools = [
883883 new ToolUnion(new Tool()
884884 {

agents-and-tools/tool-use/text-editor-tool Changed · +19 / -26 lines

from line 123
123123 Tools = [new ToolTextEditor20250728 { MaxCharacters = 10000 }],
124124 Messages =
125125 [
126 new()
126 new UserMessageParam
127127 {
128 Role = Role.User,
129128 Content = "There's a syntax error in my primes.py file. Can you help me fix it?",
130129 },
131130 ],
from line 470
471470 Tools = [new ToolTextEditor20250728()],
472471 Messages =
473472 [
474 new()
473 new UserMessageParam
475474 {
476 Role = Role.User,
477475 Content = "There's a syntax error in my primes.py file. Can you help me fix it?",
478476 },
479477 ],
from line 805
807805 Tools = [new ToolTextEditor20250728()],
808806 Messages =
809807 [
810 new()
808 new UserMessageParam
811809 {
812 Role = Role.User,
813810 Content = "There's a syntax error in my primes.py file. Can you help me fix it?",
814811 },
815 new()
812 new AssistantMessageParam
816813 {
817 Role = Role.Assistant,
818 Content = new MessageParamContent(new List<ContentBlockParam>
814 Content = new List<ContentBlockParam>
819815 {
820816 new ContentBlockParam(new TextBlockParam()
821817 {
from line 827
831827 ["path"] = JsonSerializer.SerializeToElement("primes.py"),
832828 },
833829 }),
834 }),
830 },
835831 },
836 new()
832 new UserMessageParam
837833 {
838 Role = Role.User,
839 Content = new MessageParamContent(new List<ContentBlockParam>
834 Content = new List<ContentBlockParam>
840835 {
841836 new ContentBlockParam(new ToolResultBlockParam()
842837 {
from line 838
843838 ToolUseID = "toolu_01AbCdEfGhIjKlMnOpQrStU",
844839 Content = "1: def is_prime(n):\n2: \"\"\"Check if a number is prime.\"\"\"\n3: if n <= 1:\n4: return False\n5: if n <= 3:\n6: return True\n7: if n % 2 == 0 or n % 3 == 0:\n8: return False\n9: i = 5\n10: while i * i <= n:\n11: if n % i == 0 or n % (i + 2) == 0:\n12: return False\n13: i += 6\n14: return True\n15: \n16: def get_primes(limit):\n17: \"\"\"Generate a list of prime numbers up to the given limit.\"\"\"\n18: primes = []\n19: for num in range(2, limit + 1)\n20: if is_prime(num):\n21: primes.append(num)\n22: return primes\n23: \n24: def main():\n25: \"\"\"Main function to demonstrate prime number generation.\"\"\"\n26: limit = 100\n27: prime_list = get_primes(limit)\n28: print(f\"Prime numbers up to {limit}:\")\n29: print(prime_list)\n30: print(f\"Found {len(prime_list)} prime numbers.\")\n31: \n32: if __name__ == \"__main__\":\n33: main()",
845840 }),
846 }),
841 },
847842 },
848843 ],
849844 }
from line 889
894889 .maxTokens(1024)
895890 .addTool(ToolTextEditor20250728.builder().build())
896891 .addUserMessage("There's a syntax error in my primes.py file. Can you help me fix it?")
897 .addAssistantMessageOfBlockParams(
892 .addAssistantMessageOfContentBlockParams(
898893 List.of(
899894 ContentBlockParam.ofText(
900895 TextBlockParam.builder()
from line 910
915910 )
916911 )
917912 )
918 .addUserMessageOfBlockParams(
913 .addUserMessageOfContentBlockParams(
919914 List.of(
920915 ContentBlockParam.ofToolResult(
921916 ToolResultBlockParam.builder()
from line 1234
12391234 Messages =
12401235 [
12411236 // Previous messages...
1242 new()
1237 new AssistantMessageParam
12431238 {
1244 Role = Role.Assistant,
1245 Content = new MessageParamContent(new List<ContentBlockParam>
1239 Content = new List<ContentBlockParam>
12461240 {
12471241 new ContentBlockParam(new TextBlockParam()
12481242 {
from line 1254
12601254 ["new_str"] = JsonSerializer.SerializeToElement(" for num in range(2, limit + 1):"),
12611255 },
12621256 }),
1263 }),
1257 },
12641258 },
1265 new()
1259 new UserMessageParam
12661260 {
1267 Role = Role.User,
1268 Content = new MessageParamContent(new List<ContentBlockParam>
1261 Content = new List<ContentBlockParam>
12691262 {
12701263 new ContentBlockParam(new ToolResultBlockParam()
12711264 {
from line 1265
12721265 ToolUseID = "toolu_01PqRsTuVwXyZAbCdEfGh",
12731266 Content = "Successfully replaced text at exactly one location.",
12741267 }),
1275 }),
1268 },
12761269 },
12771270 ],
12781271 }
from line 1321
13281321 .maxTokens(1024)
13291322 .addTool(ToolTextEditor20250728.builder().build())
13301323 // Previous messages would go here
1331 .addAssistantMessageOfBlockParams(
1324 .addAssistantMessageOfContentBlockParams(
13321325 List.of(
13331326 ContentBlockParam.ofText(
13341327 TextBlockParam.builder()
from line 1352
13591352 )
13601353 )
13611354 )
1362 .addUserMessageOfBlockParams(
1355 .addUserMessageOfContentBlockParams(
13631356 List.of(
13641357 ContentBlockParam.ofToolResult(
13651358 ToolResultBlockParam.builder()

agents-and-tools/tool-use/tool-runner Changed · +9 / -29 lines

from line 171
171171 using Anthropic.Models.Beta.Messages;
172172 using MessageCreateParams = Anthropic.Models.Beta.Messages.MessageCreateParams;
173173 using InputSchema = Anthropic.Models.Beta.Messages.InputSchema;
174 using Role = Anthropic.Models.Beta.Messages.Role;
175174 using Model = Anthropic.Models.Messages.Model;
176175 
177176 var client = new AnthropicClient();
from line 234
235234 MaxTokens = 1024,
236235 Messages =
237236 [
238 new()
237 new BetaUserMessageParam
239238 {
240 Role = Role.User,
241239 Content = "What's the weather like in Paris? Also, what's 15 + 27?",
242240 },
243241 ],
from line 649
651649 {
652650 Model = Model.ClaudeOpus5_5,
653651 MaxTokens = 1024,
654 Messages =
655 [
656 new()
657 {
658 Role = Role.User,
659 Content = "What's the weather like in Paris?",
660 },
661 ],
652 Messages = [new BetaUserMessageParam { Content = "What's the weather like in Paris?" }],
662653 },
663654 [getWeatherTool]
664655 );
from line 900
909900 {
910901 Model = Model.ClaudeOpus5_5,
911902 MaxTokens = 1024,
912 Messages = [new() { Role = Role.User, Content = "What's the weather in San Francisco?" }],
903 Messages = [new BetaUserMessageParam { Content = "What's the weather in San Francisco?" }],
913904 },
914905 [getWeatherTool],
915906 maxIterations: 10
from line 927
936927 // PushMessages() flags state as modified; the runner skips its auto-append.
937928 // Supply the assistant turn and the tool result yourself, then add a follow-up.
938929 runner.PushMessages(
939 new()
930 new BetaAssistantMessageParam
940931 {
941 Role = Role.Assistant,
942 Content = new BetaMessageParamContent(
932 Content = new BetaMessageContentParam(
943933 JsonSerializer.SerializeToElement(
944934 message.Content.Select(block => block.Json).ToArray()
945935 )
946936 ),
947937 },
948 new()
949 {
950 Role = Role.User,
951 Content = new List<BetaContentBlockParam> { toolResult },
952 },
953 new() { Role = Role.User, Content = "Please be concise in your response." }
938 new BetaUserMessageParam { Content = new List<BetaContentBlockParam> { toolResult } },
939 new BetaUserMessageParam { Content = "Please be concise in your response." }
954940 );
955941 }
956942 ```
from line 1240
12541240 {
12551241 Model = Model.ClaudeOpus5_5,
12561242 MaxTokens = 1024,
1257 Messages =
1258 [
1259 new() { Role = Role.User, Content = "What's the weather in San Francisco?" },
1260 ],
1243 Messages = [new BetaUserMessageParam { Content = "What's the weather in San Francisco?" }],
12611244 },
12621245 [getWeatherTool]
12631246 );
from line 1638
16551638 {
16561639 Model = Model.ClaudeOpus5_5,
16571640 MaxTokens = 1024,
1658 Messages =
1659 [
1660 new() { Role = Role.User, Content = "What is 15 + 27?" },
1661 ],
1641 Messages = [new BetaUserMessageParam { Content = "What is 15 + 27?" }],
16621642 },
16631643 [calculateSumTool]
16641644 );

agents-and-tools/tool-use/tool-search-tool Changed · +1 / -6 lines

from line 278
278278 {
279279 Model = Model.ClaudeOpus5_5,
280280 MaxTokens = 2048,
281 Messages = [
282 new() {
283 Role = Role.User,
284 Content = "What is the weather in San Francisco?"
285 }
286 ],
281 Messages = [new UserMessageParam { Content = "What is the weather in San Francisco?" }],
287282 Tools = [
288283 new ToolUnion(new ToolSearchToolRegex20251119
289284 {

agents-and-tools/tool-use/web-fetch-tool Changed · +3 / -3 lines

from line 162
162162 {
163163 Model = Model.ClaudeOpus5_5,
164164 MaxTokens = 4096,
165 Messages = [new() { Role = Role.User, Content = "Fetch the content at https://example.com/research-paper and extract the key findings." }],
165 Messages = [new UserMessageParam { Content = "Fetch the content at https://example.com/research-paper and extract the key findings." }],
166166 Tools = [new ToolUnion(new WebFetchTool20260318())]
167167 };
168168 
from line 325
325325 {
326326 Model = Model.ClaudeOpus5_5,
327327 MaxTokens = 1024,
328 Messages = [new() { Role = Role.User, Content = "Please analyze the content at https://example.com/article" }],
328 Messages = [new UserMessageParam { Content = "Please analyze the content at https://example.com/article" }],
329329 Tools = [new ToolUnion(new WebFetchTool20250910() { MaxUses = 5 })]
330330 };
331331 
from line 823
823823 {
824824 Model = Model.ClaudeOpus5_5,
825825 MaxTokens = 4096,
826 Messages = [new() { Role = Role.User, Content = "Find recent articles about quantum computing and analyze the most relevant one in detail" }],
826 Messages = [new UserMessageParam { Content = "Find recent articles about quantum computing and analyze the most relevant one in detail" }],
827827 Tools = [
828828 new ToolUnion(new WebSearchTool20250305() { MaxUses = 3 }),
829829 new ToolUnion(new WebFetchTool20250910() { MaxUses = 5, Citations = new() { Enabled = true } })

build-with-claude/batch-processing Changed · +8 / -13 lines

from line 258
258258 {
259259 Model = Model.ClaudeOpus5_5,
260260 MaxTokens = 1024,
261 Messages =
262 [
263 new() { Role = Role.User, Content = "Hello, world" }
264 ]
261 Messages = [new UserMessageParam { Content = "Hello, world" }]
265262 }
266263 },
267264 new()
from line 268
271268 {
272269 Model = Model.ClaudeOpus5_5,
273270 MaxTokens = 1024,
274 Messages =
275 [
276 new() { Role = Role.User, Content = "Hi again, friend" }
277 ]
271 Messages = [new UserMessageParam { Content = "Hi again, friend" }]
278272 }
279273 }
280274 ]
from line 784
790784 
791785 await foreach (var result in client.Messages.Batches.ResultsStreaming("msgbatch_01HkcTjaV5uDC8jWR4ZsDV8d"))
792786 {
793 switch (result.Result.Type)
787 switch (result.Result.Type.Raw())
794788 {
795789 case "succeeded":
796790 Console.WriteLine($"Success! {result.CustomID}");
797791 break;
798792 case "errored":
799 if (result.Result.Error?.Type == "invalid_request")
793 if (result.Result.TryPickErrored(out var errored)
794 && errored.Error.Error.Type.Raw() == "invalid_request_error")
800795 {
801796 Console.WriteLine($"Validation error: {result.CustomID}");
802797 }
from line 1285
12901285 },
12911286 Messages =
12921287 [
1293 new() { Role = Role.User, Content = "Analyze the major themes in Pride and Prejudice." }
1288 new UserMessageParam { Content = "Analyze the major themes in Pride and Prejudice." }
12941289 ]
12951290 }
12961291 },
from line 1310
13151310 },
13161311 Messages =
13171312 [
1318 new() { Role = Role.User, Content = "Write a summary of Pride and Prejudice." }
1313 new UserMessageParam { Content = "Write a summary of Pride and Prejudice." }
13191314 ]
13201315 }
13211316 }
from line 1673
16781673 MaxTokens = 300_000,
16791674 Messages =
16801675 [
1681 new() { Role = Role.User, Content = "Write a comprehensive technical guide to building distributed systems, covering architecture patterns, consistency models, fault tolerance, and operational best practices." }
1676 new BetaUserMessageParam { Content = "Write a comprehensive technical guide to building distributed systems, covering architecture patterns, consistency models, fault tolerance, and operational best practices." }
16821677 ]
16831678 }
16841679 }

build-with-claude/cache-diagnostics Changed · +13 / -24 lines

from line 185
185185 MaxTokens = 1024,
186186 CacheControl = new(),
187187 System = system,
188 Messages =
189 [
190 new() { Role = Role.User, Content = "Summarize section 1." },
191 ],
188 Messages = [new BetaUserMessageParam { Content = "Summarize section 1." }],
192189 Diagnostics = new() { PreviousMessageID = null },
193190 }
194191 );
from line 199
202199 System = system,
203200 Messages =
204201 [
205 new() { Role = Role.User, Content = "Summarize section 1." },
206 new()
202 new BetaUserMessageParam { Content = "Summarize section 1." },
203 new BetaAssistantMessageParam
207204 {
208 Role = Role.Assistant,
209205 Content = r1.Content.Select(block => new BetaContentBlockParam(block.Json)).ToList(),
210206 },
211 new() { Role = Role.User, Content = "Now summarize section 2." },
207 new BetaUserMessageParam { Content = "Now summarize section 2." },
212208 ],
213209 Diagnostics = new() { PreviousMessageID = r1.ID },
214210 }
from line 214
218214 {
219215 null => "No divergence detected.",
220216 { CacheMissReason: null } => "Comparison still pending.",
221 { CacheMissReason.Type: var type } => $"cache_miss_reason: {type.GetString()}",
217 { CacheMissReason.Type: var type } => $"cache_miss_reason: {type.Raw()}",
222218 });
223219 ```
224220 
from line 511
515511 System = system,
516512 Messages =
517513 [
518 new() { Role = Role.User, Content = "Summarize section 1." },
519 new()
514 new BetaUserMessageParam { Content = "Summarize section 1." },
515 new BetaAssistantMessageParam
520516 {
521 Role = Role.Assistant,
522517 Content = r1.Content.Select(block => new BetaContentBlockParam(block.Json)).ToList(),
523518 },
524 new() { Role = Role.User, Content = "Now summarize section 2." },
519 new BetaUserMessageParam { Content = "Now summarize section 2." },
525520 ],
526521 Diagnostics = new() { PreviousMessageID = r1.ID },
527522 }
from line 540
545540 {
546541 null => "No divergence detected.",
547542 { CacheMissReason: null } => "Comparison still pending.",
548 { CacheMissReason.Type: var type } => $"cache_miss_reason: {type.GetString()}",
543 { CacheMissReason.Type: var type } => $"cache_miss_reason: {type.Raw()}",
549544 });
550545 ```
551546 
from line 788
793788 
794789 for (int i = 0; i < prompts.Length; i++)
795790 {
796 messages.Add(new() { Role = Role.User, Content = prompts[i] });
791 messages.Add(new BetaUserMessageParam { Content = prompts[i] });
797792 
798793 var r = await client.Beta.Messages.Create(
799794 new()
from line 804
809804 
810805 if (r.Diagnostics?.CacheMissReason is { Type: var type })
811806 {
812 Console.WriteLine($"Turn {i + 1} cache_miss_reason: {type.GetString()}");
807 Console.WriteLine($"Turn {i + 1} cache_miss_reason: {type.Raw()}");
813808 }
814809 
815810 messages.Add(
816 new()
811 new BetaAssistantMessageParam
817812 {
818 Role = Role.Assistant,
819813 Content = r.Content.Select(block => new BetaContentBlockParam(block.Json)).ToList(),
820814 }
821815 );
from line 870
876870 String prevId = null;
877871 
878872 for (var turn = 0; turn < prompts.size(); turn++) {
879 messages.add(
880 BetaMessageParam.builder()
881 .role(BetaMessageParam.Role.USER)
882 .content(prompts.get(turn))
883 .build()
884 );
873 messages.add(BetaMessageParam.ofUser(prompts.get(turn)));
885874 
886875 var r = client.beta().messages().create(
887876 MessageCreateParams.builder()

build-with-claude/citations Changed · +24 / -31 lines

from line 151
151151 MaxTokens = 1024,
152152 Messages =
153153 [
154 new()
154 new UserMessageParam
155155 {
156 Role = Role.User,
157 Content = new MessageParamContent(new List<ContentBlockParam>
156 Content = new List<ContentBlockParam>
158157 {
159158 new ContentBlockParam(new DocumentBlockParam(
160159 new DocumentBlockParamSource(new PlainTextSource()
from line 167
168167 Citations = new CitationsConfigParam { Enabled = true },
169168 }),
170169 new ContentBlockParam(new TextBlockParam("What color is the grass and sky?")),
171 }),
170 },
172171 },
173172 ],
174173 }
from line 227
228227 MessageCreateParams params = MessageCreateParams.builder()
229228 .model(Model.CLAUDE_OPUS_5_5)
230229 .maxTokens(1024)
231 .addUserMessageOfBlockParams(
230 .addUserMessageOfContentBlockParams(
232231 List.of(
233232 ContentBlockParam.ofDocument(documentParam),
234233 ContentBlockParam.ofText(textBlockParam)
from line 535
536535 MaxTokens = 1024,
537536 Messages =
538537 [
539 new()
538 new UserMessageParam
540539 {
541 Role = Role.User,
542 Content = new MessageParamContent(new List<ContentBlockParam>
540 Content = new List<ContentBlockParam>
543541 {
544542 new ContentBlockParam(new DocumentBlockParam(
545543 new DocumentBlockParamSource(new PlainTextSource() { Data = longDocument })
from line 547
549547 CacheControl = new CacheControlEphemeral(), // Cache the document content
550548 }),
551549 new ContentBlockParam(new TextBlockParam("What does this document say about API features?")),
552 }),
550 },
553551 },
554552 ],
555553 }
from line 608
610608 MessageCreateParams params = MessageCreateParams.builder()
611609 .model(Model.CLAUDE_OPUS_5_5)
612610 .maxTokens(1024)
613 .addUserMessageOfBlockParams(
611 .addUserMessageOfContentBlockParams(
614612 List.of(
615613 ContentBlockParam.ofDocument(documentParam),
616614 ContentBlockParam.ofText(textBlockParam)
from line 851
853851 MaxTokens = 1024,
854852 Messages =
855853 [
856 new MessageParam
854 new UserMessageParam
857855 {
858 Role = Role.User,
859856 Content = new List<ContentBlockParam>
860857 {
861858 new DocumentBlockParam
from line 902
905902 MessageCreateParams citedParams = MessageCreateParams.builder()
906903 .model(Model.CLAUDE_OPUS_5_5)
907904 .maxTokens(1024)
908 .addUserMessageOfBlockParams(List.of(
905 .addUserMessageOfContentBlockParams(List.of(
909906 ContentBlockParam.ofDocument(DocumentBlockParam.builder()
910907 .fileSource(fileId)
911908 .title("Document Title")
from line 1128
11311128 MaxTokens = 1024,
11321129 Messages =
11331130 [
1134 new()
1131 new UserMessageParam
11351132 {
1136 Role = Role.User,
1137 Content = new MessageParamContent(new List<ContentBlockParam>
1133 Content = new List<ContentBlockParam>
11381134 {
11391135 new ContentBlockParam(new DocumentBlockParam(
11401136 new DocumentBlockParamSource(new Base64PdfSource() { Data = pdfBase64 })
from line 1141
11451141 Citations = new CitationsConfigParam { Enabled = true },
11461142 }),
11471143 new ContentBlockParam(new TextBlockParam("Summarize this document.")),
1148 }),
1144 },
11491145 },
11501146 ],
11511147 }
from line 1202
12061202 MessageCreateParams params = MessageCreateParams.builder()
12071203 .model(Model.CLAUDE_OPUS_5_5)
12081204 .maxTokens(1024)
1209 .addUserMessageOfBlockParams(
1205 .addUserMessageOfContentBlockParams(
12101206 List.of(
12111207 ContentBlockParam.ofDocument(documentParam),
12121208 ContentBlockParam.ofText(TextBlockParam.builder().text("Summarize this document.").build())
from line 1409
14131409 MaxTokens = 1024,
14141410 Messages =
14151411 [
1416 new()
1412 new UserMessageParam
14171413 {
1418 Role = Role.User,
1419 Content = new MessageParamContent(new List<ContentBlockParam>
1414 Content = new List<ContentBlockParam>
14201415 {
14211416 new ContentBlockParam(new DocumentBlockParam(
14221417 new DocumentBlockParamSource(new UrlPdfSource()
from line 1425
14301425 Citations = new CitationsConfigParam { Enabled = true },
14311426 }),
14321427 new ContentBlockParam(new TextBlockParam("Summarize this document.")),
1433 }),
1428 },
14341429 },
14351430 ],
14361431 }
from line 1479
14841479 MessageCreateParams params = MessageCreateParams.builder()
14851480 .model(Model.CLAUDE_OPUS_5_5)
14861481 .maxTokens(1024)
1487 .addUserMessageOfBlockParams(
1482 .addUserMessageOfContentBlockParams(
14881483 List.of(
14891484 ContentBlockParam.ofDocument(documentParam),
14901485 ContentBlockParam.ofText(TextBlockParam.builder().text("Summarize this document.").build())
from line 1667
16721667 MaxTokens = 1024,
16731668 Messages =
16741669 [
1675 new MessageParam
1670 new UserMessageParam
16761671 {
1677 Role = Role.User,
16781672 Content = new List<ContentBlockParam>
16791673 {
16801674 new DocumentBlockParam
from line 1718
17241718 MessageCreateParams citedParams = MessageCreateParams.builder()
17251719 .model(Model.CLAUDE_OPUS_5_5)
17261720 .maxTokens(1024)
1727 .addUserMessageOfBlockParams(List.of(
1721 .addUserMessageOfContentBlockParams(List.of(
17281722 ContentBlockParam.ofDocument(DocumentBlockParam.builder()
17291723 .fileSource(fileId)
17301724 .title("Document Title")
from line 1941
19471941 MaxTokens = 1024,
19481942 Messages =
19491943 [
1950 new()
1944 new UserMessageParam
19511945 {
1952 Role = Role.User,
1953 Content = new MessageParamContent(new List<ContentBlockParam>
1946 Content = new List<ContentBlockParam>
19541947 {
19551948 new ContentBlockParam(new DocumentBlockParam(
19561949 new DocumentBlockParamSource(new ContentBlockSource()
from line 1961
19681961 Citations = new CitationsConfigParam { Enabled = true },
19691962 }),
19701963 new ContentBlockParam(new TextBlockParam("Summarize this document.")),
1971 }),
1964 },
19721965 },
19731966 ],
19741967 }
from line 2025
20322025 MessageCreateParams params = MessageCreateParams.builder()
20332026 .model(Model.CLAUDE_OPUS_5_5)
20342027 .maxTokens(1024)
2035 .addUserMessageOfBlockParams(
2028 .addUserMessageOfContentBlockParams(
20362029 List.of(
20372030 ContentBlockParam.ofDocument(documentParam),
20382031 ContentBlockParam.ofText(TextBlockParam.builder().text("Summarize this document.").build())
Feedback