hive-skills 0.1.0

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 (238) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +235 -0
  3. package/assets/LICENSE +32 -0
  4. package/assets/THIRD_PARTY_NOTICES.md +72 -0
  5. package/assets/manifest.json +1290 -0
  6. package/assets/skills/authored/code-review/composable/BUNDLE.md +192 -0
  7. package/assets/skills/authored/code-review/composable/INDEX.md +13 -0
  8. package/assets/skills/authored/code-review/composable/VERSION +1 -0
  9. package/assets/skills/authored/code-review/composable/mini/01-review-method.md +34 -0
  10. package/assets/skills/authored/code-review/composable/mini/02-security-review.md +20 -0
  11. package/assets/skills/authored/code-review/composable/mini/03-correctness-bugs.md +19 -0
  12. package/assets/skills/authored/code-review/composable/mini/04-concurrency.md +16 -0
  13. package/assets/skills/authored/code-review/composable/mini/05-error-handling.md +12 -0
  14. package/assets/skills/authored/code-review/composable/mini/06-performance.md +11 -0
  15. package/assets/skills/authored/code-review/composable/mini/07-api-design.md +20 -0
  16. package/assets/skills/authored/code-review/composable/mini/08-missing-tests.md +25 -0
  17. package/assets/skills/authored/code-review/composable/mini/09-refactoring-and-communication.md +32 -0
  18. package/assets/skills/authored/data-analysis/composable/BUNDLE.md +186 -0
  19. package/assets/skills/authored/data-analysis/composable/INDEX.md +13 -0
  20. package/assets/skills/authored/data-analysis/composable/VERSION +1 -0
  21. package/assets/skills/authored/data-analysis/composable/mini/01-data-quality-profiling.md +26 -0
  22. package/assets/skills/authored/data-analysis/composable/mini/02-aggregation-pitfalls.md +21 -0
  23. package/assets/skills/authored/data-analysis/composable/mini/03-time-series.md +19 -0
  24. package/assets/skills/authored/data-analysis/composable/mini/04-segmentation.md +23 -0
  25. package/assets/skills/authored/data-analysis/composable/mini/05-discount-pricing.md +17 -0
  26. package/assets/skills/authored/data-analysis/composable/mini/06-insight-generation.md +25 -0
  27. package/assets/skills/authored/data-analysis/composable/mini/07-executive-writing.md +26 -0
  28. package/assets/skills/authored/data-analysis/composable/mini/08-recommendations.md +20 -0
  29. package/assets/skills/authored/data-analysis/composable/mini/09-reproducibility-assumptions.md +20 -0
  30. package/assets/skills/authored/financial-analysis/composable/BUNDLE.md +1293 -0
  31. package/assets/skills/authored/financial-analysis/composable/INDEX.md +17 -0
  32. package/assets/skills/authored/financial-analysis/composable/VERSION +1 -0
  33. package/assets/skills/authored/financial-analysis/composable/mini/00-core.md +69 -0
  34. package/assets/skills/authored/financial-analysis/composable/mini/01-profitability-efficiency-ratios.md +173 -0
  35. package/assets/skills/authored/financial-analysis/composable/mini/02-liquidity-leverage-ratios.md +120 -0
  36. package/assets/skills/authored/financial-analysis/composable/mini/03-valuation-ratios-interpretation.md +107 -0
  37. package/assets/skills/authored/financial-analysis/composable/mini/04-dcf-projection-wacc.md +122 -0
  38. package/assets/skills/authored/financial-analysis/composable/mini/05-dcf-terminal-value-sensitivity.md +75 -0
  39. package/assets/skills/authored/financial-analysis/composable/mini/06-comparables-precedents.md +78 -0
  40. package/assets/skills/authored/financial-analysis/composable/mini/07-budget-variance-analysis.md +47 -0
  41. package/assets/skills/authored/financial-analysis/composable/mini/08-driver-based-forecasting-scenarios.md +111 -0
  42. package/assets/skills/authored/financial-analysis/composable/mini/09-rolling-forecasts-accuracy.md +114 -0
  43. package/assets/skills/authored/financial-analysis/composable/mini/10-reporting-exec-summary.md +58 -0
  44. package/assets/skills/authored/financial-analysis/composable/mini/11-industry-adaptations.md +130 -0
  45. package/assets/skills/authored/financial-analysis/composable/mini/12-toolkit-scripts-io.md +102 -0
  46. package/assets/skills/authored/python-api/composable/BUNDLE.md +389 -0
  47. package/assets/skills/authored/python-api/composable/INDEX.md +13 -0
  48. package/assets/skills/authored/python-api/composable/VERSION +1 -0
  49. package/assets/skills/authored/python-api/composable/mini/01-project-structure.md +44 -0
  50. package/assets/skills/authored/python-api/composable/mini/02-routing-and-app.md +38 -0
  51. package/assets/skills/authored/python-api/composable/mini/03-pydantic-models.md +45 -0
  52. package/assets/skills/authored/python-api/composable/mini/04-validation-and-errors.md +59 -0
  53. package/assets/skills/authored/python-api/composable/mini/05-dependencies-and-auth.md +60 -0
  54. package/assets/skills/authored/python-api/composable/mini/06-pagination-filtering.md +44 -0
  55. package/assets/skills/authored/python-api/composable/mini/07-async-performance.md +30 -0
  56. package/assets/skills/authored/python-api/composable/mini/08-testing.md +45 -0
  57. package/assets/skills/authored/python-api/composable/mini/09-middleware-observability.md +29 -0
  58. package/assets/skills/authored/tech-writing/composable/BUNDLE.md +220 -0
  59. package/assets/skills/authored/tech-writing/composable/INDEX.md +12 -0
  60. package/assets/skills/authored/tech-writing/composable/VERSION +1 -0
  61. package/assets/skills/authored/tech-writing/composable/mini/01-audience-analysis.md +26 -0
  62. package/assets/skills/authored/tech-writing/composable/mini/02-document-types.md +27 -0
  63. package/assets/skills/authored/tech-writing/composable/mini/03-readme-quickstart-changelog.md +22 -0
  64. package/assets/skills/authored/tech-writing/composable/mini/04-information-architecture.md +21 -0
  65. package/assets/skills/authored/tech-writing/composable/mini/05-style-clarity.md +29 -0
  66. package/assets/skills/authored/tech-writing/composable/mini/06-breaking-changes-migrations.md +33 -0
  67. package/assets/skills/authored/tech-writing/composable/mini/07-troubleshooting-security.md +30 -0
  68. package/assets/skills/authored/tech-writing/composable/mini/08-faq-voice-tone.md +32 -0
  69. package/assets/skills/converted/claude-api/composable/BUNDLE.md +14996 -0
  70. package/assets/skills/converted/claude-api/composable/INDEX.md +98 -0
  71. package/assets/skills/converted/claude-api/composable/VERSION +1 -0
  72. package/assets/skills/converted/claude-api/composable/mini/00-core.md +235 -0
  73. package/assets/skills/converted/claude-api/composable/mini/01-model-api-quick-reference.md +258 -0
  74. package/assets/skills/converted/claude-api/composable/mini/02-common-pitfalls.md +42 -0
  75. package/assets/skills/converted/claude-api/composable/mini/10-models.md +135 -0
  76. package/assets/skills/converted/claude-api/composable/mini/11-platform-availability.md +96 -0
  77. package/assets/skills/converted/claude-api/composable/mini/12-claude-platform-on-aws.md +59 -0
  78. package/assets/skills/converted/claude-api/composable/mini/13-live-sources.md +143 -0
  79. package/assets/skills/converted/claude-api/composable/mini/14-error-codes.md +256 -0
  80. package/assets/skills/converted/claude-api/composable/mini/15-prompt-caching.md +223 -0
  81. package/assets/skills/converted/claude-api/composable/mini/16-token-counting.md +56 -0
  82. package/assets/skills/converted/claude-api/composable/mini/17-tool-use-concepts.md +444 -0
  83. package/assets/skills/converted/claude-api/composable/mini/18-agent-design.md +101 -0
  84. package/assets/skills/converted/claude-api/composable/mini/19-anthropic-cli.md +246 -0
  85. package/assets/skills/converted/claude-api/composable/mini/20-model-migration.md +1301 -0
  86. package/assets/skills/converted/claude-api/composable/mini/30-managed-agents-overview.md +71 -0
  87. package/assets/skills/converted/claude-api/composable/mini/31-managed-agents-core.md +278 -0
  88. package/assets/skills/converted/claude-api/composable/mini/32-managed-agents-environments.md +219 -0
  89. package/assets/skills/converted/claude-api/composable/mini/33-managed-agents-tools.md +366 -0
  90. package/assets/skills/converted/claude-api/composable/mini/34-managed-agents-events.md +252 -0
  91. package/assets/skills/converted/claude-api/composable/mini/35-managed-agents-outcomes.md +106 -0
  92. package/assets/skills/converted/claude-api/composable/mini/36-managed-agents-multiagent.md +101 -0
  93. package/assets/skills/converted/claude-api/composable/mini/37-managed-agents-webhooks.md +123 -0
  94. package/assets/skills/converted/claude-api/composable/mini/38-managed-agents-memory.md +197 -0
  95. package/assets/skills/converted/claude-api/composable/mini/39-managed-agents-scheduled-deployments.md +146 -0
  96. package/assets/skills/converted/claude-api/composable/mini/40-managed-agents-client-patterns.md +211 -0
  97. package/assets/skills/converted/claude-api/composable/mini/41-managed-agents-onboarding.md +82 -0
  98. package/assets/skills/converted/claude-api/composable/mini/42-managed-agents-api-reference.md +441 -0
  99. package/assets/skills/converted/claude-api/composable/mini/43-managed-agents-self-hosted-sandboxes.md +174 -0
  100. package/assets/skills/converted/claude-api/composable/mini/50-python-readme.md +564 -0
  101. package/assets/skills/converted/claude-api/composable/mini/51-python-tool-use.md +590 -0
  102. package/assets/skills/converted/claude-api/composable/mini/52-python-streaming-batches-files.md +549 -0
  103. package/assets/skills/converted/claude-api/composable/mini/53-python-managed-agents.md +335 -0
  104. package/assets/skills/converted/claude-api/composable/mini/55-typescript-readme.md +404 -0
  105. package/assets/skills/converted/claude-api/composable/mini/56-typescript-tool-use.md +548 -0
  106. package/assets/skills/converted/claude-api/composable/mini/57-typescript-streaming-batches-files.md +384 -0
  107. package/assets/skills/converted/claude-api/composable/mini/58-typescript-managed-agents.md +358 -0
  108. package/assets/skills/converted/claude-api/composable/mini/60-csharp-readme.md +361 -0
  109. package/assets/skills/converted/claude-api/composable/mini/61-csharp-tool-use.md +163 -0
  110. package/assets/skills/converted/claude-api/composable/mini/62-csharp-streaming-batches-files.md +64 -0
  111. package/assets/skills/converted/claude-api/composable/mini/65-go-readme.md +185 -0
  112. package/assets/skills/converted/claude-api/composable/mini/66-go-tool-use.md +219 -0
  113. package/assets/skills/converted/claude-api/composable/mini/67-go-streaming-files.md +63 -0
  114. package/assets/skills/converted/claude-api/composable/mini/68-go-managed-agents.md +564 -0
  115. package/assets/skills/converted/claude-api/composable/mini/70-java-readme.md +237 -0
  116. package/assets/skills/converted/claude-api/composable/mini/71-java-tool-use.md +227 -0
  117. package/assets/skills/converted/claude-api/composable/mini/72-java-streaming-files.md +49 -0
  118. package/assets/skills/converted/claude-api/composable/mini/73-java-managed-agents.md +443 -0
  119. package/assets/skills/converted/claude-api/composable/mini/75-php-readme.md +173 -0
  120. package/assets/skills/converted/claude-api/composable/mini/76-php-tool-use.md +252 -0
  121. package/assets/skills/converted/claude-api/composable/mini/77-php-streaming-batches-files.md +53 -0
  122. package/assets/skills/converted/claude-api/composable/mini/78-php-managed-agents.md +443 -0
  123. package/assets/skills/converted/claude-api/composable/mini/80-ruby-readme.md +133 -0
  124. package/assets/skills/converted/claude-api/composable/mini/81-ruby-tool-use-streaming.md +56 -0
  125. package/assets/skills/converted/claude-api/composable/mini/82-ruby-managed-agents.md +394 -0
  126. package/assets/skills/converted/claude-api/composable/mini/85-curl-examples.md +255 -0
  127. package/assets/skills/converted/claude-api/composable/mini/86-curl-managed-agents.md +340 -0
  128. package/assets/skills/converted/claude-api/composable/presets/csharp.md +1151 -0
  129. package/assets/skills/converted/claude-api/composable/presets/curl.md +1154 -0
  130. package/assets/skills/converted/claude-api/composable/presets/go.md +1598 -0
  131. package/assets/skills/converted/claude-api/composable/presets/java.md +1523 -0
  132. package/assets/skills/converted/claude-api/composable/presets/php.md +1488 -0
  133. package/assets/skills/converted/claude-api/composable/presets/python.md +2605 -0
  134. package/assets/skills/converted/claude-api/composable/presets/ruby.md +1146 -0
  135. package/assets/skills/converted/claude-api/composable/presets/shared.md +6478 -0
  136. package/assets/skills/converted/claude-api/composable/presets/typescript.md +2261 -0
  137. package/assets/skills/converted/docx/composable/BUNDLE.md +617 -0
  138. package/assets/skills/converted/docx/composable/INDEX.md +12 -0
  139. package/assets/skills/converted/docx/composable/VERSION +1 -0
  140. package/assets/skills/converted/docx/composable/mini/00-core.md +26 -0
  141. package/assets/skills/converted/docx/composable/mini/01-reading-converting.md +36 -0
  142. package/assets/skills/converted/docx/composable/mini/02-creating-setup-layout.md +85 -0
  143. package/assets/skills/converted/docx/composable/mini/03-creating-elements.md +257 -0
  144. package/assets/skills/converted/docx/composable/mini/04-editing-existing.md +57 -0
  145. package/assets/skills/converted/docx/composable/mini/05-xml-reference.md +128 -0
  146. package/assets/skills/converted/internal-comms/composable/BUNDLE.md +220 -0
  147. package/assets/skills/converted/internal-comms/composable/INDEX.md +11 -0
  148. package/assets/skills/converted/internal-comms/composable/VERSION +1 -0
  149. package/assets/skills/converted/internal-comms/composable/mini/00-core.md +30 -0
  150. package/assets/skills/converted/internal-comms/composable/mini/01-3p-updates.md +49 -0
  151. package/assets/skills/converted/internal-comms/composable/mini/02-company-newsletter.md +67 -0
  152. package/assets/skills/converted/internal-comms/composable/mini/03-faq-answers.md +32 -0
  153. package/assets/skills/converted/internal-comms/composable/mini/04-general-comms.md +18 -0
  154. package/assets/skills/converted/mcp-builder/composable/BUNDLE.md +2460 -0
  155. package/assets/skills/converted/mcp-builder/composable/INDEX.md +23 -0
  156. package/assets/skills/converted/mcp-builder/composable/VERSION +1 -0
  157. package/assets/skills/converted/mcp-builder/composable/mini/00-core.md +43 -0
  158. package/assets/skills/converted/mcp-builder/composable/mini/01-workflow-research-planning.md +54 -0
  159. package/assets/skills/converted/mcp-builder/composable/mini/02-implementation-process.md +78 -0
  160. package/assets/skills/converted/mcp-builder/composable/mini/03-naming-conventions.md +33 -0
  161. package/assets/skills/converted/mcp-builder/composable/mini/04-response-formats.md +21 -0
  162. package/assets/skills/converted/mcp-builder/composable/mini/05-pagination.md +24 -0
  163. package/assets/skills/converted/mcp-builder/composable/mini/06-transport.md +47 -0
  164. package/assets/skills/converted/mcp-builder/composable/mini/07-annotations.md +20 -0
  165. package/assets/skills/converted/mcp-builder/composable/mini/08-security.md +35 -0
  166. package/assets/skills/converted/mcp-builder/composable/mini/09-error-handling.md +32 -0
  167. package/assets/skills/converted/mcp-builder/composable/mini/10-testing-and-documentation.md +21 -0
  168. package/assets/skills/converted/mcp-builder/composable/mini/11-python-implementation.md +432 -0
  169. package/assets/skills/converted/mcp-builder/composable/mini/12-python-advanced-and-checklist.md +233 -0
  170. package/assets/skills/converted/mcp-builder/composable/mini/13-node-implementation.md +717 -0
  171. package/assets/skills/converted/mcp-builder/composable/mini/14-node-advanced-and-checklist.md +200 -0
  172. package/assets/skills/converted/mcp-builder/composable/mini/15-evaluation-design.md +200 -0
  173. package/assets/skills/converted/mcp-builder/composable/mini/16-evaluation-running.md +198 -0
  174. package/assets/skills/converted/mcp-builder/composable/presets/node-server.md +1381 -0
  175. package/assets/skills/converted/mcp-builder/composable/presets/python-server.md +1129 -0
  176. package/assets/skills/converted/pdf/composable/BUNDLE.md +1284 -0
  177. package/assets/skills/converted/pdf/composable/INDEX.md +14 -0
  178. package/assets/skills/converted/pdf/composable/VERSION +1 -0
  179. package/assets/skills/converted/pdf/composable/mini/00-core.md +46 -0
  180. package/assets/skills/converted/pdf/composable/mini/01-creation.md +176 -0
  181. package/assets/skills/converted/pdf/composable/mini/02-extraction.md +178 -0
  182. package/assets/skills/converted/pdf/composable/mini/03-merge-split-manipulate.md +240 -0
  183. package/assets/skills/converted/pdf/composable/mini/04-images-ocr.md +168 -0
  184. package/assets/skills/converted/pdf/composable/mini/05-encryption.md +51 -0
  185. package/assets/skills/converted/pdf/composable/mini/06-forms.md +300 -0
  186. package/assets/skills/converted/pdf/composable/mini/07-libraries-reference.md +89 -0
  187. package/assets/skills/converted/pptx/composable/BUNDLE.md +911 -0
  188. package/assets/skills/converted/pptx/composable/INDEX.md +12 -0
  189. package/assets/skills/converted/pptx/composable/VERSION +1 -0
  190. package/assets/skills/converted/pptx/composable/mini/00-core.md +37 -0
  191. package/assets/skills/converted/pptx/composable/mini/01-reading.md +37 -0
  192. package/assets/skills/converted/pptx/composable/mini/02-creating-from-scratch.md +422 -0
  193. package/assets/skills/converted/pptx/composable/mini/03-editing-templates.md +207 -0
  194. package/assets/skills/converted/pptx/composable/mini/04-design.md +89 -0
  195. package/assets/skills/converted/pptx/composable/mini/05-qa-and-rendering.md +91 -0
  196. package/assets/skills/converted/pptx/composable/presets/creating.md +659 -0
  197. package/assets/skills/converted/pptx/composable/presets/editing.md +485 -0
  198. package/assets/skills/converted/skill-creator/composable/BUNDLE.md +1681 -0
  199. package/assets/skills/converted/skill-creator/composable/INDEX.md +21 -0
  200. package/assets/skills/converted/skill-creator/composable/VERSION +1 -0
  201. package/assets/skills/converted/skill-creator/composable/mini/00-core.md +59 -0
  202. package/assets/skills/converted/skill-creator/composable/mini/01-creating-a-skill.md +27 -0
  203. package/assets/skills/converted/skill-creator/composable/mini/02-skill-writing-guide.md +71 -0
  204. package/assets/skills/converted/skill-creator/composable/mini/03-test-cases.md +21 -0
  205. package/assets/skills/converted/skill-creator/composable/mini/04-running-and-evaluating.md +128 -0
  206. package/assets/skills/converted/skill-creator/composable/mini/05-improving-the-skill.md +30 -0
  207. package/assets/skills/converted/skill-creator/composable/mini/06-blind-comparison.md +5 -0
  208. package/assets/skills/converted/skill-creator/composable/mini/07-description-optimization.md +74 -0
  209. package/assets/skills/converted/skill-creator/composable/mini/08-packaging.md +11 -0
  210. package/assets/skills/converted/skill-creator/composable/mini/09-environment-specific.md +38 -0
  211. package/assets/skills/converted/skill-creator/composable/mini/10-scripts-and-references.md +34 -0
  212. package/assets/skills/converted/skill-creator/composable/mini/11-json-schemas.md +414 -0
  213. package/assets/skills/converted/skill-creator/composable/mini/12-agent-grader.md +225 -0
  214. package/assets/skills/converted/skill-creator/composable/mini/13-agent-comparator.md +204 -0
  215. package/assets/skills/converted/skill-creator/composable/mini/14-agent-analyzer.md +276 -0
  216. package/assets/skills/converted/skill-creator/composable/presets/authoring.md +198 -0
  217. package/assets/skills/converted/skill-creator/composable/presets/evaluating.md +1334 -0
  218. package/assets/skills/converted/skill-creator/composable/presets/optimizing.md +160 -0
  219. package/assets/skills/converted/skill-creator/composable/presets.json +5 -0
  220. package/assets/skills/meta/ccs-skill-creator/composable/BUNDLE.md +465 -0
  221. package/assets/skills/meta/ccs-skill-creator/composable/INDEX.md +8 -0
  222. package/assets/skills/meta/ccs-skill-creator/composable/VERSION +1 -0
  223. package/assets/skills/meta/ccs-skill-creator/composable/mini/00-core.md +46 -0
  224. package/assets/skills/meta/ccs-skill-creator/composable/mini/01-create-new-skill.md +167 -0
  225. package/assets/skills/meta/ccs-skill-creator/composable/mini/02-convert-existing-skill.md +120 -0
  226. package/assets/skills/meta/ccs-skill-creator/composable/mini/03-review-and-maintain.md +112 -0
  227. package/assets/skills/sources/anthropic/PROVENANCE.md +3 -0
  228. package/assets/skills/sources/anthropic/claude-api/LICENSE.txt +202 -0
  229. package/assets/skills/sources/anthropic/docx/LICENSE.txt +30 -0
  230. package/assets/skills/sources/anthropic/internal-comms/LICENSE.txt +202 -0
  231. package/assets/skills/sources/anthropic/mcp-builder/LICENSE.txt +202 -0
  232. package/assets/skills/sources/anthropic/pdf/LICENSE.txt +30 -0
  233. package/assets/skills/sources/anthropic/pptx/LICENSE.txt +30 -0
  234. package/assets/skills/sources/anthropic/skill-creator/LICENSE.txt +202 -0
  235. package/assets/skills/sources/financial-analyst/PROVENANCE.md +1 -0
  236. package/assets/tools/hive.py +728 -0
  237. package/dist/cli.js +7494 -0
  238. package/package.json +40 -0
@@ -0,0 +1,361 @@
1
+ # Claude API — C#
2
+
3
+ > **Note:** The C# SDK is the official Anthropic SDK for C#. Tool use is supported via the Messages API with a beta `BetaToolRunner` for automatic tool execution loops. The SDK also supports Microsoft.Extensions.AI IChatClient integration with function invocation and Managed Agents (beta).
4
+
5
+ ## Namespace Reference
6
+
7
+ Types are organized by namespace. If a type you need isn't shown in an example below, locate it via this table first — don't block on fetching SDK source over the network.
8
+
9
+ | `using` | Contains |
10
+ |---|---|
11
+ | `Anthropic` | `AnthropicClient`, top-level options |
12
+ | `Anthropic.Models.Messages` | non-beta request/response types — `MessageCreateParams`, `Model`, `Role`, `ContentBlock`, `TextBlock`, `ToolUseBlock`, `ToolResultBlockParam`, `Tool*` (tool definition classes) |
13
+ | `Anthropic.Models.Beta.Messages` | beta-endpoint equivalents — `MessageCreateParams`, `BetaMessage`, `BetaTool*`, `Speed`, `BetaRequestMcpServerUrlDefinition`, context-editing/compaction configs |
14
+ | `Anthropic.Models.Beta` | shared beta constants |
15
+ | `Anthropic.Models.Beta.Files` | Files API types |
16
+ | `Anthropic.Models.Messages.Batches` | Batch API types |
17
+ | `Anthropic.Helpers.Beta` | `BetaToolRunner`, beta helper utilities |
18
+ | `Anthropic.Exceptions` | `AnthropicApiException`, `AnthropicRateLimitException`, `Anthropic5xxException`, etc. — see `shared/error-codes.md` |
19
+ | `Anthropic.Bedrock` / `Anthropic.Vertex` / `Anthropic.Foundry` / `Anthropic.Aws` | platform clients (separate NuGet packages): `AnthropicBedrockMantleClient`, `AnthropicFoundryClient`, `AnthropicAwsClient` |
20
+
21
+ `client.Messages.*` uses non-beta types; `client.Beta.Messages.*` uses the `Anthropic.Models.Beta.Messages` types. Both namespaces define a `MessageCreateParams` — pick the one matching the client path you call.
22
+
23
+ ### Key types per feature
24
+
25
+ Write from this table instead of reflecting the SDK assembly. Endpoint column tells you whether to use `client.Messages.*` or `client.Beta.Messages.*`.
26
+
27
+ | Feature | Endpoint | Key C# types (namespace per table above) |
28
+ |---|---|---|
29
+ | User profiles | beta | `client.Beta.UserProfiles.Create(...)` / `.Retrieve(id)` / `.List()`. Pass the returned profile id on the beta messages call. Requires a beta header — check the SDK's beta-headers reference for the current flag. |
30
+ | Agent Skills | beta | `BetaContainerParams` (with `Skills = [new BetaSkillParams { ... }]`), `BetaCodeExecutionTool20250825`. `Betas = ["code-execution-2025-08-25", "skills-2025-10-02"]`. Download the output via `client.Beta.Files.Download(fileId)`. |
31
+ | Advisor tool | beta | `BetaAdvisorTool20260301` — may not be in all SDK releases yet |
32
+ | Cache diagnostics | beta | `Diagnostics = new() { PreviousMessageID = … }`, `BetaCacheControlEphemeral`, `BetaContentBlockParam` |
33
+ | Context editing | beta | `ContextManagement = new BetaContextManagementConfig { Edits = [new BetaClearToolUses20250919Edit()] }`. `Betas = ["context-management-2025-06-27"]` (not `compact-2026-01-12` — that's for `BetaCompact20260112Edit`). |
34
+ | Memory tool | non-beta | `Tools = [new ToolUnion(new MemoryTool20250818())]` |
35
+ | Programmatic tool calling | non-beta | `CodeExecutionTool20260120`, `ToolResultBlockParam`, `ContentBlockParam` |
36
+ | Task budgets | beta | `BetaOutputConfig` with `TaskBudget = new BetaTokenTaskBudget { ... }` |
37
+ | Tool search | non-beta | `new ToolUnion(new ToolSearchToolRegex20251119 { Type = ToolSearchToolRegex20251119Type.ToolSearchToolRegex20251119 })` — `Type` must be set explicitly. |
38
+ | Web search | non-beta | `new ToolUnion(new WebSearchTool20260209())` — the latest variant with dynamic filtering (Opus 4.8/4.7/4.6 + Sonnet 4.6). For older models or Vertex, use `WebSearchTool20250305()` |
39
+
40
+ ### Discovering type and member names
41
+
42
+ If a type or member you need isn't in the tables above, `strings ~/.nuget/packages/anthropic/*/lib/*/Anthropic.dll | grep -i <term>` is fast and sufficient for locating class and property names. **Do not escalate to a `dotnet run` reflection probe** to dump members precisely — the first compile is slow enough to be backgrounded in many environments, trapping you in a polling loop. Instead, write `Program.cs` using the names `strings | grep` found; if a member name is wrong the compiler error (`error CS1061: 'X' does not contain a definition for 'Y'`) points at it in a few seconds, faster than any reflection probe.
43
+
44
+ Note that `strings` will not surface wire-format snake_case field names (`output_tokens`, `stop_reason`) — those are stored in the DLL differently. **C# properties are the PascalCase equivalent of the wire field** (`response.Usage.OutputTokens`, `response.StopReason`). If you know the wire field name from the docs, write the PascalCase property and compile; do not probe for the snake_case string.
45
+
46
+ ### Minimal working skeleton
47
+
48
+ **Write a plain `Program.cs` body** — `using` statements followed by top-level statements, as below. Do **not** add a `#!/usr/bin/env dotnet` shebang or `#:package Anthropic@*` directive: those are .NET file-based-app syntax and fail with `CS1024: Preprocessor directive expected` when the file is compiled via an existing `.csproj`. The standard project setup (per the [C# quickstart](https://docs.claude.com/en/docs/get-started): `dotnet new console` → `dotnet add package Anthropic` → edit `Program.cs` → `dotnet run`) provides the `.csproj` and package reference.
49
+
50
+ Start from this — it compiles as-is. Fill in the feature-specific fields; do not spend turns running reflection or XML-doc inspection to discover type names first.
51
+
52
+ ```csharp
53
+ using System;
54
+ using Anthropic;
55
+ using Anthropic.Models.Messages; // or Anthropic.Models.Beta.Messages for beta endpoints
56
+
57
+ AnthropicClient client = new();
58
+
59
+ var message = await client.Messages.Create(new MessageCreateParams
60
+ {
61
+ Model = Model.ClaudeOpus4_8,
62
+ MaxTokens = 1024,
63
+ Messages = [ new() { Role = Role.User, Content = "Hello, Claude" } ],
64
+ });
65
+
66
+ Console.WriteLine(message);
67
+ ```
68
+
69
+ For beta features (anything behind an `anthropic-beta` header), use the beta client path and namespace — same overall shape:
70
+
71
+ ```csharp
72
+ using System;
73
+ using Anthropic;
74
+ using Anthropic.Models.Beta.Messages;
75
+
76
+ AnthropicClient client = new();
77
+
78
+ var response = await client.Beta.Messages.Create(new MessageCreateParams
79
+ {
80
+ Model = "claude-opus-4-8",
81
+ MaxTokens = 4096,
82
+ Betas = ["<beta-flag>"],
83
+ Messages = [ new() { Role = Role.User, Content = "…" } ],
84
+ // Tools = new BetaToolUnion[] { new BetaSomeTool { … } }, // for tool features
85
+ });
86
+
87
+ Console.WriteLine(response);
88
+ ```
89
+
90
+ If a type name the feature needs isn't in this file, write it following the naming pattern in the Namespace Reference above and fix from compiler output — producing a `Program.cs` and iterating beats researching.
91
+
92
+ ### Common C# compile errors
93
+
94
+ - **CS8803 (top-level statements must precede type declarations):** put any `record`/`class`/`struct` definitions **after** the last top-level statement, at the end of the file. A record defined above `var client = new AnthropicClient()` will not compile.
95
+ - **`await foreach` on a `Task<…Page>`:** `client.Models.List()` returns a `Task<ModelListPage>`, which is not directly async-enumerable. Await it first, then iterate: `var page = await client.Models.List(); foreach (var m in page.Items) {…}`. For auto-pagination, check whether the page type exposes `AutoPagingEachAsync()` or similar before reaching for `await foreach`.
96
+
97
+ ## Installation
98
+
99
+ ```bash
100
+ dotnet add package Anthropic
101
+ ```
102
+
103
+ ## Client Initialization
104
+
105
+ ```csharp
106
+ using Anthropic;
107
+
108
+ // Default (uses ANTHROPIC_API_KEY env var)
109
+ AnthropicClient client = new();
110
+
111
+ // Explicit API key (use environment variables — never hardcode keys)
112
+ AnthropicClient client = new() {
113
+ ApiKey = Environment.GetEnvironmentVariable("ANTHROPIC_API_KEY")
114
+ };
115
+ ```
116
+
117
+ ---
118
+
119
+ ## Basic Message Request
120
+
121
+ ```csharp
122
+ using Anthropic.Models.Messages;
123
+
124
+ var parameters = new MessageCreateParams
125
+ {
126
+ Model = Model.ClaudeOpus4_8,
127
+ MaxTokens = 16000,
128
+ Messages = [new() { Role = Role.User, Content = "What is the capital of France?" }]
129
+ };
130
+ var response = await client.Messages.Create(parameters);
131
+
132
+ // ContentBlock is a union wrapper. .Value unwraps to the variant object,
133
+ // then OfType<T> filters to the type you want. Or use the TryPick* idiom
134
+ // shown in the Thinking section below.
135
+ foreach (var text in response.Content.Select(b => b.Value).OfType<TextBlock>())
136
+ {
137
+ Console.WriteLine(text.Text);
138
+ }
139
+ ```
140
+
141
+ ---
142
+
143
+ ## Thinking
144
+
145
+ **Adaptive thinking is the recommended mode for Claude 4.6+ models.** Claude decides dynamically when and how much to think.
146
+
147
+ > **Fable 5, Opus 4.8, Opus 4.7, Opus 4.6, and Sonnet 4.6:** Use adaptive thinking (below). `new ThinkingConfigEnabled { BudgetTokens = N }` is removed on Fable 5, Opus 4.8, and 4.7 (400 if sent); deprecated on Opus 4.6 and Sonnet 4.6.
148
+ > **Older models:** Use `new ThinkingConfigEnabled { BudgetTokens = N }` (budget must be < `MaxTokens`, min 1024).
149
+
150
+ ```csharp
151
+ using Anthropic.Models.Messages;
152
+
153
+ var response = await client.Messages.Create(new MessageCreateParams
154
+ {
155
+ Model = Model.ClaudeOpus4_8,
156
+ MaxTokens = 16000,
157
+ // ThinkingConfigParam? implicitly converts from the concrete variant classes —
158
+ // no wrapper needed.
159
+ // display opt-in: default is omitted (empty thinking text) on Fable 5 / Mythos 5 / Opus 4.8 / 4.7
160
+ Thinking = new ThinkingConfigAdaptive { Display = Display.Summarized },
161
+ Messages =
162
+ [
163
+ new() { Role = Role.User, Content = "Solve: 27 * 453" },
164
+ ],
165
+ });
166
+
167
+ // ThinkingBlock(s) precede TextBlock in Content. TryPick* narrows the union.
168
+ foreach (var block in response.Content)
169
+ {
170
+ if (block.TryPickThinking(out ThinkingBlock? t))
171
+ {
172
+ Console.WriteLine($"[thinking] {t.Thinking}");
173
+ }
174
+ else if (block.TryPickText(out TextBlock? text))
175
+ {
176
+ Console.WriteLine(text.Text);
177
+ }
178
+ }
179
+ ```
180
+
181
+ Alternative to `TryPick*`: `.Select(b => b.Value).OfType<ThinkingBlock>()` (same LINQ pattern as the Basic Message example).
182
+
183
+ ---
184
+
185
+ ## Context Editing / Compaction (Beta)
186
+
187
+ **Beta-namespace prefix is inconsistent** (source-verified against `src/Anthropic/Models/Beta/Messages/*.cs` @ 12.9.0). No prefix: `MessageCreateParams`, `MessageCountTokensParams`, `Role`, `Speed`. **Everything else has the `Beta` prefix**: `BetaMessageParam`, `BetaMessage`, `BetaContentBlock`, `BetaToolUseBlock`, all block param types. The unprefixed `Role` WILL collide with `Anthropic.Models.Messages.Role` if you import both namespaces (CS0104). Safest: import only Beta; if mixing, alias the beta `Role`:
188
+
189
+ ```csharp
190
+ using Anthropic.Models.Beta.Messages;
191
+ using NonBeta = Anthropic.Models.Messages; // only if you also need non-beta types
192
+ // Now: MessageCreateParams, BetaMessageParam, Role (beta's), NonBeta.Role (if needed)
193
+ ```
194
+
195
+
196
+ `BetaMessage.Content` is `IReadOnlyList<BetaContentBlock>` — a 15-variant discriminated union. Narrow with `TryPick*`. **Response `BetaContentBlock` is NOT assignable to param `BetaContentBlockParam`** — there's no `.ToParam()` in C#. Round-trip by converting each block:
197
+
198
+ ```csharp
199
+ using Anthropic.Models.Beta.Messages;
200
+
201
+ var betaParams = new MessageCreateParams // no Beta prefix — see unprefixed list above
202
+ {
203
+ Model = Model.ClaudeOpus4_8,
204
+ MaxTokens = 16000,
205
+ Betas = ["compact-2026-01-12"],
206
+ ContextManagement = new BetaContextManagementConfig
207
+ {
208
+ Edits = [new BetaCompact20260112Edit()],
209
+ },
210
+ Messages = messages,
211
+ };
212
+ BetaMessage resp = await client.Beta.Messages.Create(betaParams);
213
+
214
+ foreach (BetaContentBlock block in resp.Content)
215
+ {
216
+ if (block.TryPickCompaction(out BetaCompactionBlock? compaction))
217
+ {
218
+ // Content is nullable — compaction can fail server-side
219
+ Console.WriteLine($"compaction summary: {compaction.Content}");
220
+ }
221
+ }
222
+
223
+ // Context-edit metadata lives on a separate nullable field
224
+ if (resp.ContextManagement is { } ctx)
225
+ {
226
+ foreach (var edit in ctx.AppliedEdits)
227
+ Console.WriteLine($"cleared {edit.ClearedInputTokens} tokens");
228
+ }
229
+
230
+ // ROUND-TRIP: BetaMessageParam.Content is BetaMessageParamContent (a string|list
231
+ // union). It implicit-converts from List<BetaContentBlockParam>, NOT from the
232
+ // response's IReadOnlyList<BetaContentBlock>. Convert each block:
233
+ List<BetaContentBlockParam> paramBlocks = [];
234
+ foreach (var b in resp.Content)
235
+ {
236
+ if (b.TryPickText(out var t)) paramBlocks.Add(new BetaTextBlockParam { Text = t.Text });
237
+ else if (b.TryPickCompaction(out var c)) paramBlocks.Add(new BetaCompactionBlockParam { Content = c.Content });
238
+ // ... other variants as needed
239
+ }
240
+ messages.Add(new BetaMessageParam { Role = Role.Assistant, Content = paramBlocks });
241
+ ```
242
+
243
+ All 15 `BetaContentBlock.TryPick*` variants: `Text`, `Thinking`, `RedactedThinking`, `ToolUse`, `ServerToolUse`, `WebSearchToolResult`, `WebFetchToolResult`, `CodeExecutionToolResult`, `BashCodeExecutionToolResult`, `TextEditorCodeExecutionToolResult`, `ToolSearchToolResult`, `McpToolUse`, `McpToolResult`, `ContainerUpload`, `Compaction`.
244
+
245
+ **`BetaToolUseBlock.Input` is `IReadOnlyDictionary<string, JsonElement>`** — index by key then call the `JsonElement` extractor:
246
+
247
+ ```csharp
248
+ if (block.TryPickToolUse(out BetaToolUseBlock? tu))
249
+ {
250
+ int a = tu.Input["a"].GetInt32();
251
+ string s = tu.Input["name"].GetString()!;
252
+ }
253
+ ```
254
+
255
+ ---
256
+
257
+ ## Effort Parameter
258
+
259
+ Effort is nested under `OutputConfig`, NOT a top-level property. `ApiEnum<string, Effort>` has an implicit conversion from the enum, so assign `Effort.High` directly.
260
+
261
+ ```csharp
262
+ OutputConfig = new OutputConfig { Effort = Effort.High },
263
+ ```
264
+
265
+ Values: `Effort.Low`, `Effort.Medium`, `Effort.High`, `Effort.Max`. Combine with `Thinking = new ThinkingConfigAdaptive()` for cost-quality control.
266
+
267
+ ---
268
+
269
+ ## Prompt Caching
270
+
271
+ `System` takes `MessageCreateParamsSystem?` — a union of `string` or `List<TextBlockParam>`. There is no `SystemTextBlockParam`; use plain `TextBlockParam`. The implicit conversion needs the concrete `List<TextBlockParam>` type (array literals won't convert). For placement patterns and the silent-invalidator audit checklist, see `shared/prompt-caching.md`.
272
+
273
+ ```csharp
274
+ System = new List<TextBlockParam> {
275
+ new() {
276
+ Text = longSystemPrompt,
277
+ CacheControl = new CacheControlEphemeral(), // auto-sets Type = "ephemeral"
278
+ },
279
+ },
280
+ ```
281
+
282
+ Optional `Ttl` on `CacheControlEphemeral`: `new() { Ttl = Ttl.Ttl1h }` or `Ttl.Ttl5m`. `CacheControl` also exists on `Tool.CacheControl` and top-level `MessageCreateParams.CacheControl`.
283
+
284
+ Verify hits via `response.Usage.CacheCreationInputTokens` / `response.Usage.CacheReadInputTokens`.
285
+
286
+ ---
287
+
288
+ ## Token Counting
289
+
290
+ ```csharp
291
+ MessageTokensCount result = await client.Messages.CountTokens(new MessageCountTokensParams {
292
+ Model = Model.ClaudeOpus4_8,
293
+ Messages = [new() { Role = Role.User, Content = "Hello" }],
294
+ });
295
+ long tokens = result.InputTokens;
296
+ ```
297
+
298
+ `MessageCountTokensParams.Tools` uses a different union type (`MessageCountTokensTool`) than `MessageCreateParams.Tools` (`ToolUnion`) — if you're passing tools, the compiler will tell you when it matters.
299
+
300
+ ---
301
+
302
+ ## PDF / Document Input
303
+
304
+ `DocumentBlockParam` takes a `DocumentBlockParamSource` union: `Base64PdfSource` / `UrlPdfSource` / `PlainTextSource` / `ContentBlockSource`. `Base64PdfSource` auto-sets `MediaType = "application/pdf"` and `Type = "base64"`.
305
+
306
+ ```csharp
307
+ new MessageParam {
308
+ Role = Role.User,
309
+ Content = new List<ContentBlockParam> {
310
+ new DocumentBlockParam { Source = new Base64PdfSource { Data = base64String } },
311
+ new TextBlockParam { Text = "Summarize this PDF" },
312
+ },
313
+ }
314
+ ```
315
+
316
+ ---
317
+
318
+ ## Fast Mode (Beta)
319
+
320
+ ```csharp
321
+ var response = await client.Beta.Messages.Create(new MessageCreateParams {
322
+ Model = "claude-opus-4-8", MaxTokens = 4096,
323
+ Speed = Speed.Fast,
324
+ Betas = ["fast-mode-2026-02-01"],
325
+ Messages = [...],
326
+ });
327
+ ```
328
+
329
+ ## Models API
330
+
331
+ ```csharp
332
+ var page = await client.Models.List();
333
+ foreach (var m in page.Items) { Console.WriteLine(m.ID); }
334
+ var one = await client.Models.Retrieve("claude-opus-4-8");
335
+ ```
336
+
337
+ ## Long Output (128k) + Prefill
338
+
339
+ Set `MaxTokens = 128000` on `client.Messages` and use the streaming path (see `streaming.md`). On Claude 4+ models, 128k output is native — no `output-128k-*` beta header or beta namespace is needed.
340
+
341
+ **Prefilling the assistant message** (putting a trailing `Role.Assistant` message in the input) is **not supported** on Claude Fable 5, Opus 4.8, Opus 4.7, Opus 4.6, and Sonnet 4.6 — requests return a 400. Use `OutputConfig.Format` (structured outputs) instead.
342
+
343
+ ## Stop Details
344
+
345
+ When `StopReason` is `"refusal"`, the response includes structured `StopDetails`:
346
+
347
+ ```csharp
348
+ if (response.StopReason == "refusal" && response.StopDetails is { } details)
349
+ {
350
+ Console.WriteLine($"Category: {details.Category}");
351
+ Console.WriteLine($"Explanation: {details.Explanation}");
352
+ }
353
+ ```
354
+
355
+ **Refusal fallbacks (Claude Fable 5) — opt in by default.** Fallbacks are opt-in: without them a refused request simply stops. In `claude-fable-5` code, include `Fallbacks = [new(Model.ClaudeOpus4_8)]` plus the `AnthropicBeta.ServerSideFallback2026_06_01` beta on the beta messages call by default — a policy decline is re-served by the fallback model inside the same call. Not available on Amazon Bedrock, Vertex AI, or Microsoft Foundry — use the client-side handler there: `new AnthropicClient { Handlers = [new BetaRefusalFallbackHandler { Fallbacks = [new(Model.ClaudeOpus4_8)] }] }` (namespace `Anthropic.Helpers`), with per-conversation state via `BetaFallbackState.Create()` scoped with `using (fallbackState.Use()) { ... }`. Full semantics (billing, sticky routing, streaming) and a runnable example: `shared/model-migration.md` → Migrating to Claude Fable 5 → `refusal` stop reason, and the C# SDK repo's `examples/` (WebFetch via `shared/live-sources.md`).
356
+
357
+ ---
358
+
359
+ ## Managed Agents (Beta)
360
+
361
+ The C# SDK supports Managed Agents via `client.Beta.Agents`, `client.Beta.Sessions`, `client.Beta.Environments`, and related namespaces. See `shared/managed-agents-overview.md` for the architecture and `curl/managed-agents.md` for the wire-level reference.
@@ -0,0 +1,163 @@
1
+ # Tool Use — C#
2
+
3
+ For conceptual overview (tool definitions, tool choice, tips), see [shared/tool-use-concepts.md](../../shared/tool-use-concepts.md).
4
+
5
+ ## Tool Use
6
+
7
+ ### Defining a tool
8
+
9
+ `Tool` (NOT `ToolParam`) with an `InputSchema` record. `InputSchema.Type` is auto-set to `"object"` by the constructor — don't set it. `ToolUnion` has an implicit conversion from `Tool`, triggered by the collection expression `[...]`.
10
+
11
+ ```csharp
12
+ using System.Text.Json;
13
+ using Anthropic.Models.Messages;
14
+
15
+ var parameters = new MessageCreateParams
16
+ {
17
+ Model = Model.ClaudeSonnet4_6,
18
+ MaxTokens = 16000,
19
+ Tools = [
20
+ new Tool {
21
+ Name = "get_weather",
22
+ Description = "Get the current weather in a given location",
23
+ InputSchema = new() {
24
+ Properties = new Dictionary<string, JsonElement> {
25
+ ["location"] = JsonSerializer.SerializeToElement(
26
+ new { type = "string", description = "City name" }),
27
+ },
28
+ Required = ["location"],
29
+ },
30
+ },
31
+ ],
32
+ Messages = [new() { Role = Role.User, Content = "Weather in Paris?" }],
33
+ };
34
+ ```
35
+
36
+ Derived from `anthropic-sdk-csharp/src/Anthropic/Models/Messages/Tool.cs` and `ToolUnion.cs:799` (implicit conversion).
37
+
38
+ See [shared tool use concepts](../../shared/tool-use-concepts.md) for the loop pattern.
39
+ ### Converting response content to the follow-up assistant message
40
+
41
+ When echoing Claude's response back in the assistant turn, **there is no `.ToParam()` helper** — manually reconstruct each `ContentBlock` variant as its `*Param` counterpart. Do NOT use `new ContentBlockParam(block.Json)`: it compiles and serializes, but `.Value` stays `null` so `TryPick*`/`Validate()` fail (degraded JSON pass-through, not the typed path).
42
+
43
+ ```csharp
44
+ using Anthropic.Models.Messages;
45
+
46
+ Message response = await client.Messages.Create(parameters);
47
+
48
+ // No .ToParam() — reconstruct per variant. Implicit conversions from each
49
+ // *Param type to ContentBlockParam mean no explicit wrapper.
50
+ List<ContentBlockParam> assistantContent = [];
51
+ List<ContentBlockParam> toolResults = [];
52
+ foreach (ContentBlock block in response.Content)
53
+ {
54
+ if (block.TryPickText(out TextBlock? text))
55
+ {
56
+ assistantContent.Add(new TextBlockParam { Text = text.Text });
57
+ }
58
+ else if (block.TryPickThinking(out ThinkingBlock? thinking))
59
+ {
60
+ // Signature MUST be preserved — the API rejects tampering
61
+ assistantContent.Add(new ThinkingBlockParam
62
+ {
63
+ Thinking = thinking.Thinking,
64
+ Signature = thinking.Signature,
65
+ });
66
+ }
67
+ else if (block.TryPickRedactedThinking(out RedactedThinkingBlock? redacted))
68
+ {
69
+ assistantContent.Add(new RedactedThinkingBlockParam { Data = redacted.Data });
70
+ }
71
+ else if (block.TryPickToolUse(out ToolUseBlock? toolUse))
72
+ {
73
+ // ToolUseBlock has required Caller; ToolUseBlockParam.Caller is optional — don't copy it
74
+ assistantContent.Add(new ToolUseBlockParam
75
+ {
76
+ ID = toolUse.ID,
77
+ Name = toolUse.Name,
78
+ Input = toolUse.Input,
79
+ });
80
+ // Execute the tool; collect ONE result per tool_use block — the API
81
+ // rejects the follow-up if any tool_use ID lacks a matching tool_result.
82
+ string result = ExecuteYourTool(toolUse.Name, toolUse.Input);
83
+ toolResults.Add(new ToolResultBlockParam
84
+ {
85
+ ToolUseID = toolUse.ID,
86
+ Content = result,
87
+ });
88
+ }
89
+ }
90
+
91
+ // Follow-up: prior messages + assistant echo + user tool_result(s)
92
+ List<MessageParam> followUpMessages =
93
+ [
94
+ .. parameters.Messages,
95
+ new() { Role = Role.Assistant, Content = assistantContent },
96
+ new() { Role = Role.User, Content = toolResults },
97
+ ];
98
+ ```
99
+
100
+ `ToolResultBlockParam` has no tuple constructor — use the object initializer. `Content` is a string-or-list union; a plain `string` implicitly converts.
101
+
102
+ ---
103
+
104
+ ## Structured Output
105
+
106
+ ```csharp
107
+ OutputConfig = new OutputConfig {
108
+ Format = new JsonOutputFormat {
109
+ Schema = new Dictionary<string, JsonElement> {
110
+ ["type"] = JsonSerializer.SerializeToElement("object"),
111
+ ["properties"] = JsonSerializer.SerializeToElement(
112
+ new { name = new { type = "string" } }),
113
+ ["required"] = JsonSerializer.SerializeToElement(new[] { "name" }),
114
+ },
115
+ },
116
+ },
117
+ ```
118
+
119
+ `JsonOutputFormat.Type` is auto-set to `"json_schema"` by the constructor. `Schema` is `required`.
120
+
121
+ ---
122
+
123
+ ## Anthropic-Defined Tools
124
+
125
+ Web search, bash, text editor, and code execution are Anthropic-defined tools with built-in schemas. Web search and code execution are server-executed; bash and text editor are client-executed (you handle the `tool_use` locally — see `shared/tool-use-concepts.md`). Type names are version-suffixed; constructors auto-set `name`/`type`. **Wrap each in `new ToolUnion(...)` explicitly.**
126
+
127
+ ```csharp
128
+ Tools = [
129
+ new ToolUnion(new WebSearchTool20260209()),
130
+ new ToolUnion(new ToolBash20250124()),
131
+ new ToolUnion(new ToolTextEditor20250728()),
132
+ new ToolUnion(new CodeExecutionTool20260120()),
133
+ ],
134
+ ```
135
+
136
+ Also available: `new ToolUnion(new WebFetchTool20260209())`, `new ToolUnion(new MemoryTool20250818())`. `WebSearchTool20260209` optionals: `AllowedDomains`, `BlockedDomains`, `MaxUses`, `UserLocation`.
137
+
138
+ ---
139
+
140
+ ## Tool Runner (Beta)
141
+
142
+ The C# SDK provides a `BetaToolRunner` for automatic tool execution loops. Define tools with raw JSON schemas, and the runner handles the API call → tool execution → result feedback loop.
143
+
144
+ ```csharp
145
+ using Anthropic.Models.Beta.Messages;
146
+
147
+ // Define tools and create params as shown in the Tool Use section above,
148
+ // but using the beta namespace types (BetaToolUnion, etc.)
149
+ var runner = client.Beta.Messages.ToolRunner(betaParams);
150
+
151
+ await foreach (BetaMessage message in runner)
152
+ {
153
+ foreach (var block in message.Content)
154
+ {
155
+ if (block.TryPickText(out var text))
156
+ {
157
+ Console.WriteLine(text.Text);
158
+ }
159
+ }
160
+ }
161
+ ```
162
+
163
+ ---
@@ -0,0 +1,64 @@
1
+ # Streaming — C#
2
+
3
+ ## Streaming
4
+
5
+ ```csharp
6
+ using Anthropic.Models.Messages;
7
+
8
+ var parameters = new MessageCreateParams
9
+ {
10
+ Model = Model.ClaudeOpus4_8,
11
+ MaxTokens = 64000,
12
+ Messages = [new() { Role = Role.User, Content = "Write a haiku" }]
13
+ };
14
+
15
+ await foreach (RawMessageStreamEvent streamEvent in client.Messages.CreateStreaming(parameters))
16
+ {
17
+ if (streamEvent.TryPickContentBlockDelta(out var delta) &&
18
+ delta.Delta.TryPickText(out var text))
19
+ {
20
+ Console.Write(text.Text);
21
+ }
22
+ }
23
+ ```
24
+
25
+ **`RawMessageStreamEvent` TryPick methods** (naming drops the `Message`/`Raw` prefix): `TryPickStart`, `TryPickDelta`, `TryPickStop`, `TryPickContentBlockStart`, `TryPickContentBlockDelta`, `TryPickContentBlockStop`. There is no `TryPickMessageStop` — use `TryPickStop`.
26
+
27
+ ---
28
+
29
+ # Message Batches — C#
30
+
31
+ ## Message Batches API
32
+
33
+ ```csharp
34
+ var batch = await client.Messages.Batches.Create(new() {
35
+ Requests = [
36
+ new() { CustomID = "req-1", Params = new() { Model = "claude-opus-4-8", MaxTokens = 1024, Messages = [...] } },
37
+ ],
38
+ });
39
+ // Poll client.Messages.Batches.Retrieve(batch.ID) until ProcessingStatus == "ended",
40
+ // then iterate client.Messages.Batches.Results(batch.ID).
41
+ ```
42
+
43
+ # Files API — C#
44
+
45
+ ## Files API (Beta)
46
+
47
+ Files live under `client.Beta.Files` (namespace `Anthropic.Models.Beta.Files`). `BinaryContent` implicit-converts from `Stream` and `byte[]`.
48
+
49
+ ```csharp
50
+ using Anthropic.Models.Beta.Files;
51
+ using Anthropic.Models.Beta.Messages;
52
+
53
+ FileMetadata meta = await client.Beta.Files.Upload(
54
+ new FileUploadParams { File = File.OpenRead("doc.pdf") });
55
+
56
+ // Referencing the uploaded file requires Beta message types:
57
+ new BetaRequestDocumentBlock {
58
+ Source = new BetaFileDocumentSource { FileID = meta.ID },
59
+ }
60
+ ```
61
+
62
+ The non-beta `DocumentBlockParamSource` union has no file-ID variant — file references need `client.Beta.Messages.Create()`.
63
+
64
+ ---