@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,375 @@
1
+ # Claude API — PHP
2
+
3
+ > **Note:** The PHP SDK is the official Anthropic SDK for PHP. A beta tool runner is available via `$client->beta->messages->toolRunner()`. Structured output helpers are supported via `StructuredOutputModel` classes. Agent SDK is not available. Bedrock, Vertex AI, and Foundry clients are supported.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ composer require "anthropic-ai/sdk"
9
+ ```
10
+
11
+ ## Client Initialization
12
+
13
+ ```php
14
+ use Anthropic\Client;
15
+
16
+ // Using API key from environment variable
17
+ $client = new Client(apiKey: getenv("ANTHROPIC_API_KEY"));
18
+ ```
19
+
20
+ ### Amazon Bedrock
21
+
22
+ ```php
23
+ use Anthropic\Bedrock;
24
+
25
+ // Constructor is private — use the static factory. Reads AWS credentials from env.
26
+ $client = Bedrock\Client::fromEnvironment(region: 'us-east-1');
27
+ ```
28
+
29
+ ### Google Vertex AI
30
+
31
+ ```php
32
+ use Anthropic\Vertex;
33
+
34
+ // Constructor is private. Parameter is `location`, not `region`.
35
+ $client = Vertex\Client::fromEnvironment(
36
+ location: 'us-east5',
37
+ projectId: 'my-project-id',
38
+ );
39
+ ```
40
+
41
+ ### Anthropic Foundry
42
+
43
+ ```php
44
+ use Anthropic\Foundry;
45
+
46
+ // Constructor is private. baseUrl or resource is required.
47
+ $client = Foundry\Client::withCredentials(
48
+ authToken: getenv('ANTHROPIC_FOUNDRY_AUTH_TOKEN'),
49
+ baseUrl: 'https://<resource>.services.ai.azure.com/anthropic',
50
+ );
51
+ ```
52
+
53
+ ---
54
+
55
+ ## Basic Message Request
56
+
57
+ ```php
58
+ $message = $client->messages->create(
59
+ model: 'claude-opus-4-7',
60
+ maxTokens: 16000,
61
+ messages: [
62
+ ['role' => 'user', 'content' => 'What is the capital of France?'],
63
+ ],
64
+ );
65
+
66
+ // content is an array of polymorphic blocks (TextBlock, ToolUseBlock,
67
+ // ThinkingBlock). Accessing ->text on content[0] without checking the block
68
+ // type will throw if the first block is not a TextBlock (e.g., when extended
69
+ // thinking is enabled and a ThinkingBlock comes first). Always guard:
70
+ foreach ($message->content as $block) {
71
+ if ($block->type === 'text') {
72
+ echo $block->text;
73
+ }
74
+ }
75
+ ```
76
+
77
+ If you only want the first text block:
78
+
79
+ ```php
80
+ foreach ($message->content as $block) {
81
+ if ($block->type === 'text') {
82
+ echo $block->text;
83
+ break;
84
+ }
85
+ }
86
+ ```
87
+
88
+ ---
89
+
90
+ ## Streaming
91
+
92
+ > **Requires SDK v0.5.0+.** v0.4.0 and earlier used a single `$params` array; calling with named parameters throws `Unknown named parameter $model`. Upgrade: `composer require "anthropic-ai/sdk:^0.7"`
93
+
94
+ ```php
95
+ use Anthropic\Messages\RawContentBlockDeltaEvent;
96
+ use Anthropic\Messages\TextDelta;
97
+
98
+ $stream = $client->messages->createStream(
99
+ model: 'claude-opus-4-7',
100
+ maxTokens: 64000,
101
+ messages: [
102
+ ['role' => 'user', 'content' => 'Write a haiku'],
103
+ ],
104
+ );
105
+
106
+ foreach ($stream as $event) {
107
+ if ($event instanceof RawContentBlockDeltaEvent && $event->delta instanceof TextDelta) {
108
+ echo $event->delta->text;
109
+ }
110
+ }
111
+ ```
112
+
113
+ ---
114
+
115
+ ## Tool Use
116
+
117
+ ### Tool Runner (Beta)
118
+
119
+ **Beta:** The PHP SDK provides a tool runner via `$client->beta->messages->toolRunner()`. Define tools with `BetaRunnableTool` — a definition array plus a `run` closure:
120
+
121
+ ```php
122
+ use Anthropic\Lib\Tools\BetaRunnableTool;
123
+
124
+ $weatherTool = new BetaRunnableTool(
125
+ definition: [
126
+ 'name' => 'get_weather',
127
+ 'description' => 'Get the current weather for a location.',
128
+ 'input_schema' => [
129
+ 'type' => 'object',
130
+ 'properties' => [
131
+ 'location' => ['type' => 'string', 'description' => 'City and state'],
132
+ ],
133
+ 'required' => ['location'],
134
+ ],
135
+ ],
136
+ run: function (array $input): string {
137
+ return "The weather in {$input['location']} is sunny and 72°F.";
138
+ },
139
+ );
140
+
141
+ $runner = $client->beta->messages->toolRunner(
142
+ maxTokens: 16000,
143
+ messages: [['role' => 'user', 'content' => 'What is the weather in Paris?']],
144
+ model: 'claude-opus-4-7',
145
+ tools: [$weatherTool],
146
+ );
147
+
148
+ foreach ($runner as $message) {
149
+ foreach ($message->content as $block) {
150
+ if ($block->type === 'text') {
151
+ echo $block->text;
152
+ }
153
+ }
154
+ }
155
+ ```
156
+
157
+ ### Manual Loop
158
+
159
+ Tools are passed as arrays. **The SDK uses camelCase keys** (`inputSchema`, `toolUseID`, `stopReason`) and auto-maps to the API's snake_case on the wire — since v0.5.0. See [shared tool use concepts](../shared/tool-use-concepts.md) for the loop pattern.
160
+
161
+ ```php
162
+ use Anthropic\Messages\ToolUseBlock;
163
+
164
+ $tools = [
165
+ [
166
+ 'name' => 'get_weather',
167
+ 'description' => 'Get the current weather in a given location',
168
+ 'inputSchema' => [ // camelCase, not input_schema
169
+ 'type' => 'object',
170
+ 'properties' => [
171
+ 'location' => ['type' => 'string', 'description' => 'City and state'],
172
+ ],
173
+ 'required' => ['location'],
174
+ ],
175
+ ],
176
+ ];
177
+
178
+ $messages = [['role' => 'user', 'content' => 'What is the weather in SF?']];
179
+
180
+ $response = $client->messages->create(
181
+ model: 'claude-opus-4-7',
182
+ maxTokens: 16000,
183
+ tools: $tools,
184
+ messages: $messages,
185
+ );
186
+
187
+ while ($response->stopReason === 'tool_use') { // camelCase property
188
+ $toolResults = [];
189
+ foreach ($response->content as $block) {
190
+ if ($block instanceof ToolUseBlock) {
191
+ // $block->name : string — tool name to dispatch on
192
+ // $block->input : array<string,mixed> — parsed JSON input
193
+ // $block->id : string — pass back as toolUseID
194
+ $result = executeYourTool($block->name, $block->input);
195
+ $toolResults[] = [
196
+ 'type' => 'tool_result',
197
+ 'toolUseID' => $block->id, // camelCase, not tool_use_id
198
+ 'content' => $result,
199
+ ];
200
+ }
201
+ }
202
+
203
+ // Append assistant turn + user turn with tool results
204
+ $messages[] = ['role' => 'assistant', 'content' => $response->content];
205
+ $messages[] = ['role' => 'user', 'content' => $toolResults];
206
+
207
+ $response = $client->messages->create(
208
+ model: 'claude-opus-4-7',
209
+ maxTokens: 16000,
210
+ tools: $tools,
211
+ messages: $messages,
212
+ );
213
+ }
214
+
215
+ // Final text response
216
+ foreach ($response->content as $block) {
217
+ if ($block->type === 'text') {
218
+ echo $block->text;
219
+ }
220
+ }
221
+ ```
222
+
223
+ `$block->type === 'tool_use'` also works; `instanceof ToolUseBlock` narrows for PHPStan.
224
+
225
+
226
+ ---
227
+
228
+ ## Extended Thinking
229
+
230
+ **Adaptive thinking is the recommended mode for Claude 4.6+ models.** Claude decides dynamically when and how much to think.
231
+
232
+ ```php
233
+ use Anthropic\Messages\ThinkingBlock;
234
+
235
+ $message = $client->messages->create(
236
+ model: 'claude-opus-4-7',
237
+ maxTokens: 16000,
238
+ thinking: ['type' => 'adaptive'],
239
+ messages: [
240
+ ['role' => 'user', 'content' => 'Solve: 27 * 453'],
241
+ ],
242
+ );
243
+
244
+ // ThinkingBlock(s) precede TextBlock in content
245
+ foreach ($message->content as $block) {
246
+ if ($block instanceof ThinkingBlock) {
247
+ echo "Thinking:\n{$block->thinking}\n\n";
248
+ // $block->signature is an opaque string — preserve verbatim if
249
+ // passing thinking blocks back in multi-turn conversations
250
+ } elseif ($block->type === 'text') {
251
+ echo "Answer: {$block->text}\n";
252
+ }
253
+ }
254
+ ```
255
+
256
+ > **Deprecated:** `['type' => 'enabled', 'budgetTokens' => N]` (fixed-budget extended thinking) still works on Claude 4.6 but is deprecated. Use adaptive thinking above.
257
+
258
+ `$block->type === 'thinking'` also works for the check; `instanceof` narrows for PHPStan.
259
+
260
+ ---
261
+
262
+ ## Prompt Caching
263
+
264
+ `system:` takes an array of text blocks; set `cacheControl` on the last block. Array-shape syntax (camelCase keys) is idiomatic. For placement patterns and the silent-invalidator audit checklist, see `shared/prompt-caching.md`.
265
+
266
+ ```php
267
+ $message = $client->messages->create(
268
+ model: 'claude-opus-4-7',
269
+ maxTokens: 16000,
270
+ system: [
271
+ ['type' => 'text', 'text' => $longSystemPrompt, 'cacheControl' => ['type' => 'ephemeral']],
272
+ ],
273
+ messages: [['role' => 'user', 'content' => 'Summarize the key points']],
274
+ );
275
+ ```
276
+
277
+ For 1-hour TTL: `'cacheControl' => ['type' => 'ephemeral', 'ttl' => '1h']`. There's also a top-level `cacheControl:` on `messages->create(...)` that auto-places on the last cacheable block.
278
+
279
+ Verify hits via `$message->usage->cacheCreationInputTokens` / `$message->usage->cacheReadInputTokens`.
280
+
281
+ ---
282
+
283
+ ## Structured Outputs
284
+
285
+ ### Using StructuredOutputModel (Recommended)
286
+
287
+ Define a PHP class implementing `StructuredOutputModel` and pass it as `outputConfig`:
288
+
289
+ ```php
290
+ use Anthropic\Lib\Contracts\StructuredOutputModel;
291
+ use Anthropic\Lib\Concerns\StructuredOutputModelTrait;
292
+ use Anthropic\Lib\Attributes\Constrained;
293
+
294
+ class Person implements StructuredOutputModel
295
+ {
296
+ use StructuredOutputModelTrait;
297
+
298
+ #[Constrained(description: 'Full name')]
299
+ public string $name;
300
+
301
+ public int $age;
302
+
303
+ public ?string $email = null; // nullable = optional field
304
+ }
305
+
306
+ $message = $client->messages->create(
307
+ model: 'claude-opus-4-7',
308
+ maxTokens: 16000,
309
+ messages: [['role' => 'user', 'content' => 'Generate a profile for Alice, age 30']],
310
+ outputConfig: ['format' => Person::class],
311
+ );
312
+
313
+ $person = $message->parsedOutput(); // Person instance
314
+ echo $person->name;
315
+ ```
316
+
317
+ Types are inferred from PHP type hints. Use `#[Constrained(description: '...')]` to add descriptions. Nullable properties (`?string`) become optional fields.
318
+
319
+ ### Raw Schema
320
+
321
+ ```php
322
+ $message = $client->messages->create(
323
+ model: 'claude-opus-4-7',
324
+ maxTokens: 16000,
325
+ messages: [['role' => 'user', 'content' => 'Extract: John (john@co.com), Enterprise plan']],
326
+ outputConfig: [
327
+ 'format' => [
328
+ 'type' => 'json_schema',
329
+ 'schema' => [
330
+ 'type' => 'object',
331
+ 'properties' => [
332
+ 'name' => ['type' => 'string'],
333
+ 'email' => ['type' => 'string'],
334
+ 'plan' => ['type' => 'string'],
335
+ ],
336
+ 'required' => ['name', 'email', 'plan'],
337
+ 'additionalProperties' => false,
338
+ ],
339
+ ],
340
+ ],
341
+ );
342
+
343
+ // First text block contains valid JSON
344
+ foreach ($message->content as $block) {
345
+ if ($block->type === 'text') {
346
+ $data = json_decode($block->text, true);
347
+ break;
348
+ }
349
+ }
350
+ ```
351
+
352
+ ---
353
+
354
+ ## Beta Features & Server-Side Tools
355
+
356
+ **`betas:` is NOT a param on `$client->messages->create()`** — it only exists on the beta namespace. Use it for features that need an explicit opt-in header:
357
+
358
+ ```php
359
+ use Anthropic\Beta\Messages\BetaRequestMCPServerURLDefinition;
360
+
361
+ $response = $client->beta->messages->create(
362
+ model: 'claude-opus-4-7',
363
+ maxTokens: 16000,
364
+ mcpServers: [
365
+ BetaRequestMCPServerURLDefinition::with(
366
+ name: 'my-server',
367
+ url: 'https://example.com/mcp',
368
+ ),
369
+ ],
370
+ betas: ['mcp-client-2025-11-20'], // only valid on ->beta->messages
371
+ messages: [['role' => 'user', 'content' => 'Use the MCP tools']],
372
+ );
373
+ ```
374
+
375
+ **Server-side tools** (bash, web_search, text_editor, code_execution) are GA and work on both paths — `Anthropic\Messages\ToolBash20250124` / `WebSearchTool20260209` / `ToolTextEditor20250728` / `CodeExecutionTool20260120` for non-beta, `Anthropic\Beta\Messages\BetaToolBash20250124` / `BetaWebSearchTool20260209` / `BetaToolTextEditor20250728` / `BetaCodeExecutionTool20260120` for beta. No `betas:` header needed for these.