@prismer/runtime 2.0.6 → 2.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/CHANGELOG.md +201 -0
  2. package/built-in-skills/agent-coordination/SKILL.md +235 -0
  3. package/built-in-skills/agent-meta/SKILL.md +52 -0
  4. package/built-in-skills/assets/SKILL.md +131 -0
  5. package/built-in-skills/canvas-design/LICENSE.txt +202 -0
  6. package/built-in-skills/canvas-design/SKILL.md +156 -0
  7. package/built-in-skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  8. package/built-in-skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  9. package/built-in-skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  10. package/built-in-skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  11. package/built-in-skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  12. package/built-in-skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  13. package/built-in-skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  14. package/built-in-skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  15. package/built-in-skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  16. package/built-in-skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  17. package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  18. package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  19. package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  20. package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  21. package/built-in-skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  22. package/built-in-skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  23. package/built-in-skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  24. package/built-in-skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  25. package/built-in-skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  26. package/built-in-skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  27. package/built-in-skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  28. package/built-in-skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  29. package/built-in-skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  30. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  31. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  32. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  33. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  34. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  35. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  36. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  37. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  38. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  39. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  40. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  41. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  42. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  43. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  44. package/built-in-skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  45. package/built-in-skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  46. package/built-in-skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  47. package/built-in-skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  48. package/built-in-skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  49. package/built-in-skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  50. package/built-in-skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  51. package/built-in-skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  52. package/built-in-skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  53. package/built-in-skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  54. package/built-in-skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  55. package/built-in-skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  56. package/built-in-skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  57. package/built-in-skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  58. package/built-in-skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  59. package/built-in-skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  60. package/built-in-skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  61. package/built-in-skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  62. package/built-in-skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  63. package/built-in-skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  64. package/built-in-skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  65. package/built-in-skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  66. package/built-in-skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  67. package/built-in-skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  68. package/built-in-skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  69. package/built-in-skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  70. package/built-in-skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  71. package/built-in-skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  72. package/built-in-skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  73. package/built-in-skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  74. package/built-in-skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  75. package/built-in-skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  76. package/built-in-skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  77. package/built-in-skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  78. package/built-in-skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  79. package/built-in-skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  80. package/built-in-skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  81. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  82. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  83. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  84. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  85. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  86. package/built-in-skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  87. package/built-in-skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  88. package/built-in-skills/claim-agent-ownership/SKILL.md +254 -0
  89. package/built-in-skills/claude-api/LICENSE.txt +202 -0
  90. package/built-in-skills/claude-api/SKILL.md +324 -0
  91. package/built-in-skills/claude-api/csharp/claude-api.md +402 -0
  92. package/built-in-skills/claude-api/curl/examples.md +216 -0
  93. package/built-in-skills/claude-api/curl/managed-agents.md +336 -0
  94. package/built-in-skills/claude-api/go/claude-api.md +421 -0
  95. package/built-in-skills/claude-api/go/managed-agents/README.md +561 -0
  96. package/built-in-skills/claude-api/java/claude-api.md +432 -0
  97. package/built-in-skills/claude-api/java/managed-agents/README.md +442 -0
  98. package/built-in-skills/claude-api/php/claude-api.md +375 -0
  99. package/built-in-skills/claude-api/php/managed-agents/README.md +435 -0
  100. package/built-in-skills/claude-api/python/claude-api/README.md +420 -0
  101. package/built-in-skills/claude-api/python/claude-api/batches.md +185 -0
  102. package/built-in-skills/claude-api/python/claude-api/files-api.md +165 -0
  103. package/built-in-skills/claude-api/python/claude-api/streaming.md +162 -0
  104. package/built-in-skills/claude-api/python/claude-api/tool-use.md +590 -0
  105. package/built-in-skills/claude-api/python/managed-agents/README.md +332 -0
  106. package/built-in-skills/claude-api/ruby/claude-api.md +113 -0
  107. package/built-in-skills/claude-api/ruby/managed-agents/README.md +389 -0
  108. package/built-in-skills/claude-api/shared/agent-design.md +101 -0
  109. package/built-in-skills/claude-api/shared/error-codes.md +213 -0
  110. package/built-in-skills/claude-api/shared/live-sources.md +135 -0
  111. package/built-in-skills/claude-api/shared/managed-agents-api-reference.md +378 -0
  112. package/built-in-skills/claude-api/shared/managed-agents-client-patterns.md +209 -0
  113. package/built-in-skills/claude-api/shared/managed-agents-core.md +238 -0
  114. package/built-in-skills/claude-api/shared/managed-agents-environments.md +215 -0
  115. package/built-in-skills/claude-api/shared/managed-agents-events.md +195 -0
  116. package/built-in-skills/claude-api/shared/managed-agents-memory.md +197 -0
  117. package/built-in-skills/claude-api/shared/managed-agents-multiagent.md +99 -0
  118. package/built-in-skills/claude-api/shared/managed-agents-onboarding.md +114 -0
  119. package/built-in-skills/claude-api/shared/managed-agents-outcomes.md +106 -0
  120. package/built-in-skills/claude-api/shared/managed-agents-overview.md +68 -0
  121. package/built-in-skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +173 -0
  122. package/built-in-skills/claude-api/shared/managed-agents-tools.md +321 -0
  123. package/built-in-skills/claude-api/shared/managed-agents-webhooks.md +110 -0
  124. package/built-in-skills/claude-api/shared/model-migration.md +779 -0
  125. package/built-in-skills/claude-api/shared/models.md +121 -0
  126. package/built-in-skills/claude-api/shared/prompt-caching.md +171 -0
  127. package/built-in-skills/claude-api/shared/tool-use-concepts.md +327 -0
  128. package/built-in-skills/claude-api/typescript/claude-api/README.md +333 -0
  129. package/built-in-skills/claude-api/typescript/claude-api/batches.md +106 -0
  130. package/built-in-skills/claude-api/typescript/claude-api/files-api.md +98 -0
  131. package/built-in-skills/claude-api/typescript/claude-api/streaming.md +178 -0
  132. package/built-in-skills/claude-api/typescript/claude-api/tool-use.md +527 -0
  133. package/built-in-skills/claude-api/typescript/managed-agents/README.md +359 -0
  134. package/built-in-skills/doc-coauthoring/SKILL.md +375 -0
  135. package/built-in-skills/frontend-design/LICENSE.txt +177 -0
  136. package/built-in-skills/frontend-design/SKILL.md +42 -0
  137. package/built-in-skills/human-approval/SKILL.md +114 -0
  138. package/built-in-skills/image-generate/SKILL.md +327 -0
  139. package/built-in-skills/ingest/SKILL.md +105 -0
  140. package/built-in-skills/internal-comms/LICENSE.txt +202 -0
  141. package/built-in-skills/internal-comms/SKILL.md +32 -0
  142. package/built-in-skills/internal-comms/examples/3p-updates.md +47 -0
  143. package/built-in-skills/internal-comms/examples/company-newsletter.md +65 -0
  144. package/built-in-skills/internal-comms/examples/faq-answers.md +30 -0
  145. package/built-in-skills/internal-comms/examples/general-comms.md +16 -0
  146. package/built-in-skills/liteparse/SKILL.md +156 -0
  147. package/built-in-skills/mcp-builder/LICENSE.txt +202 -0
  148. package/built-in-skills/mcp-builder/SKILL.md +236 -0
  149. package/built-in-skills/mcp-builder/reference/evaluation.md +602 -0
  150. package/built-in-skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  151. package/built-in-skills/mcp-builder/reference/node_mcp_server.md +970 -0
  152. package/built-in-skills/mcp-builder/reference/python_mcp_server.md +719 -0
  153. package/built-in-skills/mcp-builder/scripts/connections.py +151 -0
  154. package/built-in-skills/mcp-builder/scripts/evaluation.py +373 -0
  155. package/built-in-skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  156. package/built-in-skills/mcp-builder/scripts/requirements.txt +2 -0
  157. package/built-in-skills/memory/SKILL.md +106 -0
  158. package/built-in-skills/memory-curation/SKILL.md +135 -0
  159. package/built-in-skills/office-artifacts/SKILL.md +198 -0
  160. package/built-in-skills/prismer-im-collab/SKILL.md +148 -0
  161. package/built-in-skills/skill-authoring/SKILL.md +124 -0
  162. package/built-in-skills/skill-authoring/skill.json +74 -0
  163. package/built-in-skills/skill-creator/LICENSE.txt +202 -0
  164. package/built-in-skills/skill-creator/SKILL.md +485 -0
  165. package/built-in-skills/skill-creator/agents/analyzer.md +274 -0
  166. package/built-in-skills/skill-creator/agents/comparator.md +202 -0
  167. package/built-in-skills/skill-creator/agents/grader.md +223 -0
  168. package/built-in-skills/skill-creator/assets/eval_review.html +146 -0
  169. package/built-in-skills/skill-creator/eval-viewer/generate_review.py +471 -0
  170. package/built-in-skills/skill-creator/eval-viewer/viewer.html +1325 -0
  171. package/built-in-skills/skill-creator/references/schemas.md +430 -0
  172. package/built-in-skills/skill-creator/scripts/__init__.py +0 -0
  173. package/built-in-skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  174. package/built-in-skills/skill-creator/scripts/generate_report.py +326 -0
  175. package/built-in-skills/skill-creator/scripts/improve_description.py +247 -0
  176. package/built-in-skills/skill-creator/scripts/package_skill.py +136 -0
  177. package/built-in-skills/skill-creator/scripts/quick_validate.py +103 -0
  178. package/built-in-skills/skill-creator/scripts/run_eval.py +310 -0
  179. package/built-in-skills/skill-creator/scripts/run_loop.py +328 -0
  180. package/built-in-skills/skill-creator/scripts/utils.py +47 -0
  181. package/built-in-skills/slack-gif-creator/LICENSE.txt +202 -0
  182. package/built-in-skills/slack-gif-creator/SKILL.md +271 -0
  183. package/built-in-skills/slack-gif-creator/core/easing.py +234 -0
  184. package/built-in-skills/slack-gif-creator/core/frame_composer.py +176 -0
  185. package/built-in-skills/slack-gif-creator/core/gif_builder.py +269 -0
  186. package/built-in-skills/slack-gif-creator/core/validators.py +136 -0
  187. package/built-in-skills/slack-gif-creator/requirements.txt +4 -0
  188. package/built-in-skills/tasks/SKILL.md +398 -0
  189. package/built-in-skills/team/SKILL.md +76 -0
  190. package/built-in-skills/web-artifacts-builder/LICENSE.txt +202 -0
  191. package/built-in-skills/web-artifacts-builder/SKILL.md +104 -0
  192. package/built-in-skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  193. package/built-in-skills/web-artifacts-builder/scripts/init-artifact.sh +334 -0
  194. package/built-in-skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  195. package/built-in-skills/webapp-testing/LICENSE.txt +202 -0
  196. package/built-in-skills/webapp-testing/SKILL.md +96 -0
  197. package/built-in-skills/webapp-testing/examples/console_logging.py +35 -0
  198. package/built-in-skills/webapp-testing/examples/element_discovery.py +40 -0
  199. package/built-in-skills/webapp-testing/examples/static_html_automation.py +33 -0
  200. package/built-in-skills/webapp-testing/scripts/with_server.py +106 -0
  201. package/dist/cli.cjs +10239 -3309
  202. package/dist/cli.js +10111 -3183
  203. package/dist/index.cjs +11275 -4344
  204. package/dist/index.d.cts +932 -43
  205. package/dist/index.d.ts +932 -43
  206. package/dist/index.js +13087 -6158
  207. package/package.json +4 -2
@@ -0,0 +1,432 @@
1
+ # Claude API — Java
2
+
3
+ > **Note:** The Java SDK supports the Claude API and beta tool use with annotated classes. Agent SDK is not yet available for Java.
4
+
5
+ ## Installation
6
+
7
+ Maven:
8
+
9
+ ```xml
10
+ <dependency>
11
+ <groupId>com.anthropic</groupId>
12
+ <artifactId>anthropic-java</artifactId>
13
+ <version>2.17.0</version>
14
+ </dependency>
15
+ ```
16
+
17
+ Gradle:
18
+
19
+ ```groovy
20
+ implementation("com.anthropic:anthropic-java:2.17.0")
21
+ ```
22
+
23
+ ## Client Initialization
24
+
25
+ ```java
26
+ import com.anthropic.client.AnthropicClient;
27
+ import com.anthropic.client.okhttp.AnthropicOkHttpClient;
28
+
29
+ // Default (reads ANTHROPIC_API_KEY from environment)
30
+ AnthropicClient client = AnthropicOkHttpClient.fromEnv();
31
+
32
+ // Explicit API key
33
+ AnthropicClient client = AnthropicOkHttpClient.builder()
34
+ .apiKey("your-api-key")
35
+ .build();
36
+ ```
37
+
38
+ ---
39
+
40
+ ## Basic Message Request
41
+
42
+ ```java
43
+ import com.anthropic.models.messages.MessageCreateParams;
44
+ import com.anthropic.models.messages.Message;
45
+ import com.anthropic.models.messages.Model;
46
+
47
+ MessageCreateParams params = MessageCreateParams.builder()
48
+ .model(Model.CLAUDE_OPUS_4_6)
49
+ .maxTokens(16000L)
50
+ .addUserMessage("What is the capital of France?")
51
+ .build();
52
+
53
+ Message response = client.messages().create(params);
54
+ response.content().stream()
55
+ .flatMap(block -> block.text().stream())
56
+ .forEach(textBlock -> System.out.println(textBlock.text()));
57
+ ```
58
+
59
+ ---
60
+
61
+ ## Streaming
62
+
63
+ ```java
64
+ import com.anthropic.core.http.StreamResponse;
65
+ import com.anthropic.models.messages.RawMessageStreamEvent;
66
+
67
+ MessageCreateParams params = MessageCreateParams.builder()
68
+ .model(Model.CLAUDE_OPUS_4_6)
69
+ .maxTokens(64000L)
70
+ .addUserMessage("Write a haiku")
71
+ .build();
72
+
73
+ try (StreamResponse<RawMessageStreamEvent> streamResponse = client.messages().createStreaming(params)) {
74
+ streamResponse.stream()
75
+ .flatMap(event -> event.contentBlockDelta().stream())
76
+ .flatMap(deltaEvent -> deltaEvent.delta().text().stream())
77
+ .forEach(textDelta -> System.out.print(textDelta.text()));
78
+ }
79
+ ```
80
+
81
+ ---
82
+
83
+ ## Thinking
84
+
85
+ **Adaptive thinking is the recommended mode for Claude 4.6+ models.** Claude decides dynamically when and how much to think. The builder has a direct `.thinking(ThinkingConfigAdaptive)` overload — no manual union wrapping.
86
+
87
+ ```java
88
+ import com.anthropic.models.messages.ContentBlock;
89
+ import com.anthropic.models.messages.MessageCreateParams;
90
+ import com.anthropic.models.messages.Model;
91
+ import com.anthropic.models.messages.ThinkingConfigAdaptive;
92
+
93
+ MessageCreateParams params = MessageCreateParams.builder()
94
+ .model(Model.CLAUDE_SONNET_4_6)
95
+ .maxTokens(16000L)
96
+ .thinking(ThinkingConfigAdaptive.builder().build())
97
+ .addUserMessage("Solve this step by step: 27 * 453")
98
+ .build();
99
+
100
+ for (ContentBlock block : client.messages().create(params).content()) {
101
+ block.thinking().ifPresent(t -> System.out.println("[thinking] " + t.thinking()));
102
+ block.text().ifPresent(t -> System.out.println(t.text()));
103
+ }
104
+ ```
105
+
106
+ > **Deprecated:** `ThinkingConfigEnabled.builder().budgetTokens(N)` (and the `.enabledThinking(N)` shortcut) still works on Claude 4.6 but is deprecated. Use adaptive thinking above.
107
+
108
+ `ContentBlock` narrowing: `.thinking()` / `.text()` return `Optional<T>` — use `.ifPresent(...)` or `.stream().flatMap(...)`. Alternative: `isThinking()` / `asThinking()` boolean+unwrap pairs (throws on wrong variant).
109
+
110
+ ---
111
+
112
+ ## Tool Use (Beta)
113
+
114
+ The Java SDK supports beta tool use with annotated classes. Tool classes implement `Supplier<String>` for automatic execution via `BetaToolRunner`.
115
+
116
+ ### Tool Runner (automatic loop)
117
+
118
+ ```java
119
+ import com.anthropic.models.beta.messages.MessageCreateParams;
120
+ import com.anthropic.models.beta.messages.BetaMessage;
121
+ import com.anthropic.helpers.BetaToolRunner;
122
+ import com.fasterxml.jackson.annotation.JsonClassDescription;
123
+ import com.fasterxml.jackson.annotation.JsonPropertyDescription;
124
+ import java.util.function.Supplier;
125
+
126
+ @JsonClassDescription("Get the weather in a given location")
127
+ static class GetWeather implements Supplier<String> {
128
+ @JsonPropertyDescription("The city and state, e.g. San Francisco, CA")
129
+ public String location;
130
+
131
+ @Override
132
+ public String get() {
133
+ return "The weather in " + location + " is sunny and 72°F";
134
+ }
135
+ }
136
+
137
+ BetaToolRunner toolRunner = client.beta().messages().toolRunner(
138
+ MessageCreateParams.builder()
139
+ .model("claude-opus-4-7")
140
+ .maxTokens(16000L)
141
+ .putAdditionalHeader("anthropic-beta", "structured-outputs-2025-11-13")
142
+ .addTool(GetWeather.class)
143
+ .addUserMessage("What's the weather in San Francisco?")
144
+ .build());
145
+
146
+ for (BetaMessage message : toolRunner) {
147
+ System.out.println(message);
148
+ }
149
+ ```
150
+
151
+ ### Memory Tool
152
+
153
+ The Java SDK provides `BetaMemoryToolHandler` for implementing the memory tool backend. You supply a handler that manages file storage, and the `BetaToolRunner` handles memory tool calls automatically.
154
+
155
+ ```java
156
+ import com.anthropic.helpers.BetaMemoryToolHandler;
157
+ import com.anthropic.helpers.BetaToolRunner;
158
+ import com.anthropic.models.beta.messages.BetaMemoryTool20250818;
159
+ import com.anthropic.models.beta.messages.BetaMessage;
160
+ import com.anthropic.models.beta.messages.MessageCreateParams;
161
+ import com.anthropic.models.beta.messages.ToolRunnerCreateParams;
162
+
163
+ // Implement BetaMemoryToolHandler with your storage backend (e.g., filesystem)
164
+ BetaMemoryToolHandler memoryHandler = new FileSystemMemoryToolHandler(sandboxRoot);
165
+
166
+ MessageCreateParams createParams = MessageCreateParams.builder()
167
+ .model("claude-opus-4-7")
168
+ .maxTokens(4096L)
169
+ .addTool(BetaMemoryTool20250818.builder().build())
170
+ .addUserMessage("Remember that my favorite color is blue")
171
+ .build();
172
+
173
+ BetaToolRunner toolRunner = client.beta().messages().toolRunner(
174
+ ToolRunnerCreateParams.builder()
175
+ .betaMemoryToolHandler(memoryHandler)
176
+ .initialMessageParams(createParams)
177
+ .build());
178
+
179
+ for (BetaMessage message : toolRunner) {
180
+ System.out.println(message);
181
+ }
182
+ ```
183
+
184
+ See the [shared memory tool concepts](../shared/tool-use-concepts.md) for more details on the memory tool.
185
+
186
+ ### Non-Beta Tool Declaration (manual JSON schema)
187
+
188
+ `Tool.InputSchema.Properties` is a freeform `Map<String, JsonValue>` wrapper — build property schemas via `putAdditionalProperty`. `type: "object"` is the default. The builder has a direct `.addTool(Tool)` overload that wraps in `ToolUnion` automatically.
189
+
190
+ ```java
191
+ import com.anthropic.core.JsonValue;
192
+ import com.anthropic.models.messages.Tool;
193
+
194
+ Tool tool = Tool.builder()
195
+ .name("get_weather")
196
+ .description("Get the current weather in a given location")
197
+ .inputSchema(Tool.InputSchema.builder()
198
+ .properties(Tool.InputSchema.Properties.builder()
199
+ .putAdditionalProperty("location", JsonValue.from(Map.of("type", "string")))
200
+ .build())
201
+ .required(List.of("location"))
202
+ .build())
203
+ .build();
204
+
205
+ MessageCreateParams params = MessageCreateParams.builder()
206
+ .model(Model.CLAUDE_SONNET_4_6)
207
+ .maxTokens(16000L)
208
+ .addTool(tool)
209
+ .addUserMessage("Weather in Paris?")
210
+ .build();
211
+ ```
212
+
213
+ For manual tool loops, handle `tool_use` blocks in the response, send `tool_result` back, loop until `stop_reason` is `"end_turn"`. See [shared tool use concepts](../shared/tool-use-concepts.md).
214
+
215
+ ### Building `MessageParam` with Content Blocks (Tool Result Round-Trip)
216
+
217
+ `MessageParam.Content` is an inner union class (string | list). Use the builder's `.contentOfBlockParams(List<ContentBlockParam>)` alias — there is NO separate `MessageParamContent` class with a static `ofBlockParams`:
218
+
219
+ ```java
220
+ import com.anthropic.models.messages.MessageParam;
221
+ import com.anthropic.models.messages.ContentBlockParam;
222
+ import com.anthropic.models.messages.ToolResultBlockParam;
223
+
224
+ List<ContentBlockParam> results = List.of(
225
+ ContentBlockParam.ofToolResult(ToolResultBlockParam.builder()
226
+ .toolUseId(toolUseBlock.id())
227
+ .content(yourResultString)
228
+ .build())
229
+ );
230
+
231
+ MessageParam toolResultMsg = MessageParam.builder()
232
+ .role(MessageParam.Role.USER)
233
+ .contentOfBlockParams(results) // builder alias for Content.ofBlockParams(...)
234
+ .build();
235
+ ```
236
+
237
+ ---
238
+
239
+ ## Effort Parameter
240
+
241
+ Effort is nested inside `OutputConfig` — there is NO `.effort()` directly on `MessageCreateParams.Builder`.
242
+
243
+ ```java
244
+ import com.anthropic.models.messages.OutputConfig;
245
+
246
+ .outputConfig(OutputConfig.builder()
247
+ .effort(OutputConfig.Effort.HIGH) // or LOW, MEDIUM, MAX
248
+ .build())
249
+ ```
250
+
251
+ Combine with `Thinking = ThinkingConfigAdaptive` for cost-quality control.
252
+
253
+ ---
254
+
255
+ ## Prompt Caching
256
+
257
+ System message as a list of `TextBlockParam` with `CacheControlEphemeral`. Use `.systemOfTextBlockParams(...)` — the plain `.system(String)` overload can't carry cache control. For placement patterns and the silent-invalidator audit checklist, see `shared/prompt-caching.md`.
258
+
259
+ ```java
260
+ import com.anthropic.models.messages.TextBlockParam;
261
+ import com.anthropic.models.messages.CacheControlEphemeral;
262
+
263
+ .systemOfTextBlockParams(List.of(
264
+ TextBlockParam.builder()
265
+ .text(longSystemPrompt)
266
+ .cacheControl(CacheControlEphemeral.builder()
267
+ .ttl(CacheControlEphemeral.Ttl.TTL_1H) // optional; also TTL_5M
268
+ .build())
269
+ .build()))
270
+ ```
271
+
272
+ There's also a top-level `.cacheControl(CacheControlEphemeral)` on `MessageCreateParams.Builder` and on `Tool.builder()`.
273
+
274
+ Verify hits via `response.usage().cacheCreationInputTokens()` / `response.usage().cacheReadInputTokens()`.
275
+
276
+ ---
277
+
278
+ ## Token Counting
279
+
280
+ ```java
281
+ import com.anthropic.models.messages.MessageCountTokensParams;
282
+
283
+ long tokens = client.messages().countTokens(
284
+ MessageCountTokensParams.builder()
285
+ .model(Model.CLAUDE_SONNET_4_6)
286
+ .addUserMessage("Hello")
287
+ .build()
288
+ ).inputTokens();
289
+ ```
290
+
291
+ ---
292
+
293
+ ## Structured Output
294
+
295
+ The class-based overload auto-derives the JSON schema from your POJO and gives you a typed `.text()` return — no manual schema, no manual parsing.
296
+
297
+ ```java
298
+ import com.anthropic.models.messages.StructuredMessageCreateParams;
299
+
300
+ record Book(String title, String author) {}
301
+ record BookList(List<Book> books) {}
302
+
303
+ StructuredMessageCreateParams<BookList> params = MessageCreateParams.builder()
304
+ .model(Model.CLAUDE_SONNET_4_6)
305
+ .maxTokens(16000L)
306
+ .outputConfig(BookList.class) // returns a typed builder
307
+ .addUserMessage("List 3 classic novels")
308
+ .build();
309
+
310
+ client.messages().create(params).content().stream()
311
+ .flatMap(cb -> cb.text().stream())
312
+ .forEach(typed -> {
313
+ // typed.text() returns BookList, not String
314
+ for (Book b : typed.text().books()) System.out.println(b.title());
315
+ });
316
+ ```
317
+
318
+ Supports Jackson annotations: `@JsonPropertyDescription`, `@JsonIgnore`, `@ArraySchema(minItems=...)`. Manual schema path: `OutputConfig.builder().format(JsonOutputFormat.builder().schema(...).build())`.
319
+
320
+ ---
321
+
322
+ ## PDF / Document Input
323
+
324
+ `DocumentBlockParam` builder has source shortcuts. Wrap in `ContentBlockParam.ofDocument()` and pass via `.addUserMessageOfBlockParams()`.
325
+
326
+ ```java
327
+ import com.anthropic.models.messages.DocumentBlockParam;
328
+ import com.anthropic.models.messages.ContentBlockParam;
329
+ import com.anthropic.models.messages.TextBlockParam;
330
+
331
+ DocumentBlockParam doc = DocumentBlockParam.builder()
332
+ .base64Source(base64String) // or .urlSource("https://...") or .textSource("...")
333
+ .title("My Document") // optional
334
+ .build();
335
+
336
+ .addUserMessageOfBlockParams(List.of(
337
+ ContentBlockParam.ofDocument(doc),
338
+ ContentBlockParam.ofText(TextBlockParam.builder().text("Summarize this").build())))
339
+ ```
340
+
341
+ ---
342
+
343
+ ## Server-Side Tools
344
+
345
+ Version-suffixed types; `name`/`type` auto-set by builder. Direct `.addTool()` overloads exist for every type — no manual `ToolUnion` wrapping.
346
+
347
+ ```java
348
+ import com.anthropic.models.messages.WebSearchTool20260209;
349
+ import com.anthropic.models.messages.ToolBash20250124;
350
+ import com.anthropic.models.messages.ToolTextEditor20250728;
351
+ import com.anthropic.models.messages.CodeExecutionTool20260120;
352
+
353
+ .addTool(WebSearchTool20260209.builder()
354
+ .maxUses(5L) // optional
355
+ .allowedDomains(List.of("example.com")) // optional
356
+ .build())
357
+ .addTool(ToolBash20250124.builder().build())
358
+ .addTool(ToolTextEditor20250728.builder().build())
359
+ .addTool(CodeExecutionTool20260120.builder().build())
360
+ ```
361
+
362
+ Also available: `WebFetchTool20260209`, `MemoryTool20250818`, `ToolSearchToolBm25_20251119`.
363
+
364
+ ### Beta namespace (MCP, compaction)
365
+
366
+ For beta-only features use `com.anthropic.models.beta.messages.*` — class names have a `Beta` prefix AND live in the beta package. The beta `MessageCreateParams.Builder` has direct `.addTool(BetaToolBash20250124)` overloads AND `.addMcpServer()`:
367
+
368
+ ```java
369
+ import com.anthropic.models.beta.messages.MessageCreateParams;
370
+ import com.anthropic.models.beta.messages.BetaToolBash20250124;
371
+ import com.anthropic.models.beta.messages.BetaCodeExecutionTool20260120;
372
+ import com.anthropic.models.beta.messages.BetaRequestMcpServerUrlDefinition;
373
+
374
+ MessageCreateParams params = MessageCreateParams.builder()
375
+ .model(Model.CLAUDE_OPUS_4_6)
376
+ .maxTokens(16000L)
377
+ .addBeta("mcp-client-2025-11-20")
378
+ .addTool(BetaToolBash20250124.builder().build())
379
+ .addTool(BetaCodeExecutionTool20260120.builder().build())
380
+ .addMcpServer(BetaRequestMcpServerUrlDefinition.builder()
381
+ .name("my-server")
382
+ .url("https://example.com/mcp")
383
+ .build())
384
+ .addUserMessage("...")
385
+ .build();
386
+
387
+ client.beta().messages().create(params);
388
+ ```
389
+
390
+ `BetaTool*` types are NOT interchangeable with non-beta `Tool*` — pick one namespace per request.
391
+
392
+ **Reading server-tool blocks in the response:** `ServerToolUseBlock` has `.id()`, `.name()` (enum), and `._input()` returning raw `JsonValue` — there is NO typed `.input()`. For code execution results, unwrap two levels:
393
+
394
+ ```java
395
+ for (ContentBlock block : response.content()) {
396
+ block.serverToolUse().ifPresent(stu -> {
397
+ System.out.println("tool: " + stu.name() + " input: " + stu._input());
398
+ });
399
+ block.codeExecutionToolResult().ifPresent(r -> {
400
+ r.content().resultBlock().ifPresent(result -> {
401
+ System.out.println("stdout: " + result.stdout());
402
+ System.out.println("stderr: " + result.stderr());
403
+ System.out.println("exit: " + result.returnCode());
404
+ });
405
+ });
406
+ }
407
+ ```
408
+
409
+ ---
410
+
411
+ ## Files API (Beta)
412
+
413
+ Under `client.beta().files()`. File references in messages need the beta message types (non-beta `DocumentBlockParam.Source` has no file-ID variant).
414
+
415
+ ```java
416
+ import com.anthropic.models.beta.files.FileUploadParams;
417
+ import com.anthropic.models.beta.files.FileMetadata;
418
+ import com.anthropic.models.beta.messages.BetaRequestDocumentBlock;
419
+ import java.nio.file.Paths;
420
+
421
+ FileMetadata meta = client.beta().files().upload(
422
+ FileUploadParams.builder()
423
+ .file(Paths.get("/path/to/doc.pdf")) // or .file(InputStream) or .file(byte[])
424
+ .build());
425
+
426
+ // Reference in a beta message:
427
+ BetaRequestDocumentBlock doc = BetaRequestDocumentBlock.builder()
428
+ .fileSource(meta.id())
429
+ .build();
430
+ ```
431
+
432
+ Other methods: `.list()`, `.delete(String fileId)`, `.download(String fileId)`, `.retrieveMetadata(String fileId)`.