devskill 2.0.5 → 2.0.7

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 (438) hide show
  1. package/landing/app/[locale]/page.tsx +68 -2
  2. package/landing/messages/en.json +12 -2
  3. package/landing/messages/vi.json +13 -3
  4. package/meta.ts +18 -1
  5. package/package.json +5 -1
  6. package/scripts/cli.ts +175 -46
  7. package/skills/algorithmic-art/LICENSE.txt +202 -0
  8. package/skills/algorithmic-art/SKILL.md +405 -0
  9. package/skills/algorithmic-art/SYNC.md +5 -0
  10. package/skills/algorithmic-art/templates/generator_template.js +223 -0
  11. package/skills/algorithmic-art/templates/viewer.html +599 -0
  12. package/skills/brand-guidelines/LICENSE.txt +202 -0
  13. package/skills/brand-guidelines/SKILL.md +73 -0
  14. package/skills/brand-guidelines/SYNC.md +5 -0
  15. package/skills/canvas-design/LICENSE.txt +202 -0
  16. package/skills/canvas-design/SKILL.md +130 -0
  17. package/skills/canvas-design/SYNC.md +5 -0
  18. package/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  19. package/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  20. package/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  21. package/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  22. package/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  23. package/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  24. package/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  25. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  26. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  27. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  28. package/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  29. package/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  30. package/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  31. package/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  32. package/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  33. package/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  34. package/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  35. package/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  36. package/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  37. package/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  38. package/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  39. package/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  40. package/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  41. package/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  42. package/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  43. package/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  44. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  45. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  46. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  47. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  48. package/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  49. package/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  50. package/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  51. package/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  52. package/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  53. package/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  54. package/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  55. package/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  56. package/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  57. package/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  58. package/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  59. package/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  60. package/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  61. package/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  62. package/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  63. package/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  64. package/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  65. package/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  66. package/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  67. package/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  68. package/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  69. package/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  70. package/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  71. package/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  72. package/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  73. package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  74. package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  75. package/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  76. package/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  77. package/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  78. package/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  79. package/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  80. package/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  81. package/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  82. package/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  83. package/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  84. package/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  85. package/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  86. package/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  87. package/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  88. package/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  89. package/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  90. package/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  91. package/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  92. package/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  93. package/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  94. package/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  95. package/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  96. package/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  97. package/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  98. package/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  99. package/skills/claude-api/LICENSE.txt +202 -0
  100. package/skills/claude-api/SKILL.md +246 -0
  101. package/skills/claude-api/SYNC.md +5 -0
  102. package/skills/claude-api/csharp/claude-api.md +400 -0
  103. package/skills/claude-api/curl/examples.md +193 -0
  104. package/skills/claude-api/go/claude-api.md +404 -0
  105. package/skills/claude-api/java/claude-api.md +430 -0
  106. package/skills/claude-api/php/claude-api.md +241 -0
  107. package/skills/claude-api/python/agent-sdk/README.md +345 -0
  108. package/skills/claude-api/python/agent-sdk/patterns.md +359 -0
  109. package/skills/claude-api/python/claude-api/README.md +410 -0
  110. package/skills/claude-api/python/claude-api/batches.md +185 -0
  111. package/skills/claude-api/python/claude-api/files-api.md +165 -0
  112. package/skills/claude-api/python/claude-api/streaming.md +162 -0
  113. package/skills/claude-api/python/claude-api/tool-use.md +590 -0
  114. package/skills/claude-api/ruby/claude-api.md +92 -0
  115. package/skills/claude-api/shared/error-codes.md +206 -0
  116. package/skills/claude-api/shared/live-sources.md +121 -0
  117. package/skills/claude-api/shared/models.md +119 -0
  118. package/skills/claude-api/shared/tool-use-concepts.md +305 -0
  119. package/skills/claude-api/typescript/agent-sdk/README.md +296 -0
  120. package/skills/claude-api/typescript/agent-sdk/patterns.md +209 -0
  121. package/skills/claude-api/typescript/claude-api/README.md +321 -0
  122. package/skills/claude-api/typescript/claude-api/batches.md +106 -0
  123. package/skills/claude-api/typescript/claude-api/files-api.md +98 -0
  124. package/skills/claude-api/typescript/claude-api/streaming.md +178 -0
  125. package/skills/claude-api/typescript/claude-api/tool-use.md +527 -0
  126. package/skills/doc-coauthoring/SKILL.md +375 -0
  127. package/skills/doc-coauthoring/SYNC.md +5 -0
  128. package/skills/docx/LICENSE.txt +30 -0
  129. package/skills/docx/SKILL.md +590 -0
  130. package/skills/docx/SYNC.md +5 -0
  131. package/skills/docx/scripts/__init__.py +1 -0
  132. package/skills/docx/scripts/accept_changes.py +135 -0
  133. package/skills/docx/scripts/comment.py +318 -0
  134. package/skills/docx/scripts/office/helpers/__init__.py +0 -0
  135. package/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
  136. package/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
  137. package/skills/docx/scripts/office/pack.py +159 -0
  138. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  139. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  140. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  141. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  142. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  143. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  144. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  145. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  146. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  147. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  148. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  149. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  150. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  151. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  152. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  153. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  154. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  155. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  156. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  157. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  158. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  159. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  160. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  161. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  162. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  163. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  164. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  165. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  166. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  167. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  168. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  169. package/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  170. package/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  171. package/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  172. package/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  173. package/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  174. package/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  175. package/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  176. package/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  177. package/skills/docx/scripts/office/soffice.py +183 -0
  178. package/skills/docx/scripts/office/unpack.py +132 -0
  179. package/skills/docx/scripts/office/validate.py +111 -0
  180. package/skills/docx/scripts/office/validators/__init__.py +15 -0
  181. package/skills/docx/scripts/office/validators/base.py +847 -0
  182. package/skills/docx/scripts/office/validators/docx.py +446 -0
  183. package/skills/docx/scripts/office/validators/pptx.py +275 -0
  184. package/skills/docx/scripts/office/validators/redlining.py +247 -0
  185. package/skills/docx/scripts/templates/comments.xml +3 -0
  186. package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  187. package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  188. package/skills/docx/scripts/templates/commentsIds.xml +3 -0
  189. package/skills/docx/scripts/templates/people.xml +3 -0
  190. package/skills/frontend-design/LICENSE.txt +177 -0
  191. package/skills/frontend-design/SKILL.md +42 -0
  192. package/skills/frontend-design/SYNC.md +5 -0
  193. package/skills/internal-comms/LICENSE.txt +202 -0
  194. package/skills/internal-comms/SKILL.md +32 -0
  195. package/skills/internal-comms/SYNC.md +5 -0
  196. package/skills/internal-comms/examples/3p-updates.md +47 -0
  197. package/skills/internal-comms/examples/company-newsletter.md +65 -0
  198. package/skills/internal-comms/examples/faq-answers.md +30 -0
  199. package/skills/internal-comms/examples/general-comms.md +16 -0
  200. package/skills/mcp-builder/LICENSE.txt +202 -0
  201. package/skills/mcp-builder/SKILL.md +236 -0
  202. package/skills/mcp-builder/SYNC.md +5 -0
  203. package/skills/mcp-builder/reference/evaluation.md +602 -0
  204. package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  205. package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  206. package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  207. package/skills/mcp-builder/scripts/connections.py +151 -0
  208. package/skills/mcp-builder/scripts/evaluation.py +373 -0
  209. package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  210. package/skills/mcp-builder/scripts/requirements.txt +2 -0
  211. package/skills/next-best-practices/SKILL.md +153 -0
  212. package/skills/next-best-practices/SYNC.md +5 -0
  213. package/skills/next-best-practices/async-patterns.md +87 -0
  214. package/skills/next-best-practices/bundling.md +180 -0
  215. package/skills/next-best-practices/data-patterns.md +297 -0
  216. package/skills/next-best-practices/debug-tricks.md +105 -0
  217. package/skills/next-best-practices/directives.md +73 -0
  218. package/skills/next-best-practices/error-handling.md +227 -0
  219. package/skills/next-best-practices/file-conventions.md +140 -0
  220. package/skills/next-best-practices/font.md +245 -0
  221. package/skills/next-best-practices/functions.md +108 -0
  222. package/skills/next-best-practices/hydration-error.md +91 -0
  223. package/skills/next-best-practices/image.md +173 -0
  224. package/skills/next-best-practices/metadata.md +301 -0
  225. package/skills/next-best-practices/parallel-routes.md +287 -0
  226. package/skills/next-best-practices/route-handlers.md +146 -0
  227. package/skills/next-best-practices/rsc-boundaries.md +159 -0
  228. package/skills/next-best-practices/runtime-selection.md +39 -0
  229. package/skills/next-best-practices/scripts.md +141 -0
  230. package/skills/next-best-practices/self-hosting.md +371 -0
  231. package/skills/next-best-practices/suspense-boundaries.md +67 -0
  232. package/skills/next-cache-components/SKILL.md +411 -0
  233. package/skills/next-cache-components/SYNC.md +5 -0
  234. package/skills/next-upgrade/SKILL.md +50 -0
  235. package/skills/next-upgrade/SYNC.md +5 -0
  236. package/skills/pdf/LICENSE.txt +30 -0
  237. package/skills/pdf/SKILL.md +314 -0
  238. package/skills/pdf/SYNC.md +5 -0
  239. package/skills/pdf/forms.md +294 -0
  240. package/skills/pdf/reference.md +612 -0
  241. package/skills/pdf/scripts/check_bounding_boxes.py +65 -0
  242. package/skills/pdf/scripts/check_fillable_fields.py +11 -0
  243. package/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
  244. package/skills/pdf/scripts/create_validation_image.py +37 -0
  245. package/skills/pdf/scripts/extract_form_field_info.py +122 -0
  246. package/skills/pdf/scripts/extract_form_structure.py +115 -0
  247. package/skills/pdf/scripts/fill_fillable_fields.py +98 -0
  248. package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
  249. package/skills/pptx/LICENSE.txt +30 -0
  250. package/skills/pptx/SKILL.md +232 -0
  251. package/skills/pptx/SYNC.md +5 -0
  252. package/skills/pptx/editing.md +205 -0
  253. package/skills/pptx/pptxgenjs.md +420 -0
  254. package/skills/pptx/scripts/__init__.py +0 -0
  255. package/skills/pptx/scripts/add_slide.py +195 -0
  256. package/skills/pptx/scripts/clean.py +286 -0
  257. package/skills/pptx/scripts/office/helpers/__init__.py +0 -0
  258. package/skills/pptx/scripts/office/helpers/merge_runs.py +199 -0
  259. package/skills/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
  260. package/skills/pptx/scripts/office/pack.py +159 -0
  261. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  262. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  263. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  264. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  265. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  266. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  267. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  268. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  269. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  270. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  271. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  272. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  273. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  274. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  275. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  276. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  277. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  278. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  279. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  280. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  281. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  282. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  283. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  284. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  285. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  286. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  287. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  288. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  289. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  290. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  291. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  292. package/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
  293. package/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  294. package/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  295. package/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  296. package/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  297. package/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  298. package/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  299. package/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  300. package/skills/pptx/scripts/office/soffice.py +183 -0
  301. package/skills/pptx/scripts/office/unpack.py +132 -0
  302. package/skills/pptx/scripts/office/validate.py +111 -0
  303. package/skills/pptx/scripts/office/validators/__init__.py +15 -0
  304. package/skills/pptx/scripts/office/validators/base.py +847 -0
  305. package/skills/pptx/scripts/office/validators/docx.py +446 -0
  306. package/skills/pptx/scripts/office/validators/pptx.py +275 -0
  307. package/skills/pptx/scripts/office/validators/redlining.py +247 -0
  308. package/skills/pptx/scripts/thumbnail.py +289 -0
  309. package/skills/shadcn/LICENSE.md +21 -0
  310. package/skills/shadcn/SKILL.md +242 -0
  311. package/skills/shadcn/SYNC.md +5 -0
  312. package/skills/shadcn/agents/openai.yml +5 -0
  313. package/skills/shadcn/assets/shadcn-small.png +0 -0
  314. package/skills/shadcn/assets/shadcn.png +0 -0
  315. package/skills/shadcn/cli.md +257 -0
  316. package/skills/shadcn/customization.md +202 -0
  317. package/skills/shadcn/evals/evals.json +47 -0
  318. package/skills/shadcn/mcp.md +94 -0
  319. package/skills/shadcn/rules/base-vs-radix.md +306 -0
  320. package/skills/shadcn/rules/composition.md +195 -0
  321. package/skills/shadcn/rules/forms.md +192 -0
  322. package/skills/shadcn/rules/icons.md +101 -0
  323. package/skills/shadcn/rules/styling.md +162 -0
  324. package/skills/skill-creator/LICENSE.txt +202 -0
  325. package/skills/skill-creator/SKILL.md +485 -0
  326. package/skills/skill-creator/SYNC.md +5 -0
  327. package/skills/skill-creator/agents/analyzer.md +274 -0
  328. package/skills/skill-creator/agents/comparator.md +202 -0
  329. package/skills/skill-creator/agents/grader.md +223 -0
  330. package/skills/skill-creator/assets/eval_review.html +146 -0
  331. package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  332. package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  333. package/skills/skill-creator/references/schemas.md +430 -0
  334. package/skills/skill-creator/scripts/__init__.py +0 -0
  335. package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  336. package/skills/skill-creator/scripts/generate_report.py +326 -0
  337. package/skills/skill-creator/scripts/improve_description.py +247 -0
  338. package/skills/skill-creator/scripts/package_skill.py +136 -0
  339. package/skills/skill-creator/scripts/quick_validate.py +103 -0
  340. package/skills/skill-creator/scripts/run_eval.py +310 -0
  341. package/skills/skill-creator/scripts/run_loop.py +328 -0
  342. package/skills/skill-creator/scripts/utils.py +47 -0
  343. package/skills/slack-gif-creator/LICENSE.txt +202 -0
  344. package/skills/slack-gif-creator/SKILL.md +254 -0
  345. package/skills/slack-gif-creator/SYNC.md +5 -0
  346. package/skills/slack-gif-creator/core/easing.py +234 -0
  347. package/skills/slack-gif-creator/core/frame_composer.py +176 -0
  348. package/skills/slack-gif-creator/core/gif_builder.py +269 -0
  349. package/skills/slack-gif-creator/core/validators.py +136 -0
  350. package/skills/slack-gif-creator/requirements.txt +4 -0
  351. package/skills/theme-factory/LICENSE.txt +202 -0
  352. package/skills/theme-factory/SKILL.md +59 -0
  353. package/skills/theme-factory/SYNC.md +5 -0
  354. package/skills/theme-factory/theme-showcase.pdf +0 -0
  355. package/skills/theme-factory/themes/arctic-frost.md +19 -0
  356. package/skills/theme-factory/themes/botanical-garden.md +19 -0
  357. package/skills/theme-factory/themes/desert-rose.md +19 -0
  358. package/skills/theme-factory/themes/forest-canopy.md +19 -0
  359. package/skills/theme-factory/themes/golden-hour.md +19 -0
  360. package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  361. package/skills/theme-factory/themes/modern-minimalist.md +19 -0
  362. package/skills/theme-factory/themes/ocean-depths.md +19 -0
  363. package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  364. package/skills/theme-factory/themes/tech-innovation.md +19 -0
  365. package/skills/vue-best-practices/SYNC.md +1 -1
  366. package/skills/vue-jsx-best-practices/SYNC.md +1 -1
  367. package/skills/vue-options-api-best-practices/SYNC.md +1 -1
  368. package/skills/vue-pinia-best-practices/SYNC.md +1 -1
  369. package/skills/vue-router-best-practices/SYNC.md +1 -1
  370. package/skills/vue-testing-best-practices/SYNC.md +1 -1
  371. package/skills/web-artifacts-builder/LICENSE.txt +202 -0
  372. package/skills/web-artifacts-builder/SKILL.md +74 -0
  373. package/skills/web-artifacts-builder/SYNC.md +5 -0
  374. package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  375. package/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  376. package/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  377. package/skills/webapp-testing/LICENSE.txt +202 -0
  378. package/skills/webapp-testing/SKILL.md +96 -0
  379. package/skills/webapp-testing/SYNC.md +5 -0
  380. package/skills/webapp-testing/examples/console_logging.py +35 -0
  381. package/skills/webapp-testing/examples/element_discovery.py +40 -0
  382. package/skills/webapp-testing/examples/static_html_automation.py +33 -0
  383. package/skills/webapp-testing/scripts/with_server.py +106 -0
  384. package/skills/xlsx/LICENSE.txt +30 -0
  385. package/skills/xlsx/SKILL.md +292 -0
  386. package/skills/xlsx/SYNC.md +5 -0
  387. package/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
  388. package/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
  389. package/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
  390. package/skills/xlsx/scripts/office/pack.py +159 -0
  391. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  392. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  393. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  394. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  395. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  396. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  397. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  398. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  399. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  400. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  401. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  402. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  403. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  404. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  405. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  406. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  407. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  408. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  409. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  410. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  411. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  412. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  413. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  414. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  415. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  416. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  417. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  418. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  419. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  420. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  421. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  422. package/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
  423. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  424. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  425. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  426. package/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  427. package/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  428. package/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  429. package/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  430. package/skills/xlsx/scripts/office/soffice.py +183 -0
  431. package/skills/xlsx/scripts/office/unpack.py +132 -0
  432. package/skills/xlsx/scripts/office/validate.py +111 -0
  433. package/skills/xlsx/scripts/office/validators/__init__.py +15 -0
  434. package/skills/xlsx/scripts/office/validators/base.py +847 -0
  435. package/skills/xlsx/scripts/office/validators/docx.py +446 -0
  436. package/skills/xlsx/scripts/office/validators/pptx.py +275 -0
  437. package/skills/xlsx/scripts/office/validators/redlining.py +247 -0
  438. package/skills/xlsx/scripts/recalc.py +184 -0
@@ -0,0 +1,590 @@
1
+ # Tool Use — Python
2
+
3
+ For conceptual overview (tool definitions, tool choice, tips), see [shared/tool-use-concepts.md](../../shared/tool-use-concepts.md).
4
+
5
+ ## Tool Runner (Recommended)
6
+
7
+ **Beta:** The tool runner is in beta in the Python SDK.
8
+
9
+ Use the `@beta_tool` decorator to define tools as typed functions, then pass them to `client.beta.messages.tool_runner()`:
10
+
11
+ ```python
12
+ import anthropic
13
+ from anthropic import beta_tool
14
+
15
+ client = anthropic.Anthropic()
16
+
17
+ @beta_tool
18
+ def get_weather(location: str, unit: str = "celsius") -> str:
19
+ """Get current weather for a location.
20
+
21
+ Args:
22
+ location: City and state, e.g., San Francisco, CA.
23
+ unit: Temperature unit, either "celsius" or "fahrenheit".
24
+ """
25
+ # Your implementation here
26
+ return f"72°F and sunny in {location}"
27
+
28
+ # The tool runner handles the agentic loop automatically
29
+ runner = client.beta.messages.tool_runner(
30
+ model="claude-opus-4-6",
31
+ max_tokens=16000,
32
+ tools=[get_weather],
33
+ messages=[{"role": "user", "content": "What's the weather in Paris?"}],
34
+ )
35
+
36
+ # Each iteration yields a BetaMessage; iteration stops when Claude is done
37
+ for message in runner:
38
+ print(message)
39
+ ```
40
+
41
+ For async usage, use `@beta_async_tool` with `async def` functions.
42
+
43
+ **Key benefits of the tool runner:**
44
+
45
+ - No manual loop — the SDK handles calling tools and feeding results back
46
+ - Type-safe tool inputs via decorators
47
+ - Tool schemas are generated automatically from function signatures
48
+ - Iteration stops automatically when Claude has no more tool calls
49
+
50
+ ---
51
+
52
+ ## MCP Tool Conversion Helpers
53
+
54
+ **Beta.** Convert [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) tools, prompts, and resources to Anthropic API types for use with the tool runner. Requires `pip install anthropic[mcp]` (Python 3.10+).
55
+
56
+ > **Note:** The Claude API also supports an `mcp_servers` parameter that lets Claude connect directly to remote MCP servers. Use these helpers instead when you need local MCP servers, prompts, resources, or more control over the MCP connection.
57
+
58
+ ### MCP Tools with Tool Runner
59
+
60
+ ```python
61
+ from anthropic import AsyncAnthropic
62
+ from anthropic.lib.tools.mcp import async_mcp_tool
63
+ from mcp import ClientSession
64
+ from mcp.client.stdio import stdio_client, StdioServerParameters
65
+
66
+ client = AsyncAnthropic()
67
+
68
+ async with stdio_client(StdioServerParameters(command="mcp-server")) as (read, write):
69
+ async with ClientSession(read, write) as mcp_client:
70
+ await mcp_client.initialize()
71
+
72
+ tools_result = await mcp_client.list_tools()
73
+ # tool_runner is sync — returns the runner, not a coroutine
74
+ runner = client.beta.messages.tool_runner(
75
+ model="claude-opus-4-6",
76
+ max_tokens=16000,
77
+ messages=[{"role": "user", "content": "Use the available tools"}],
78
+ tools=[async_mcp_tool(t, mcp_client) for t in tools_result.tools],
79
+ )
80
+ async for message in runner:
81
+ print(message)
82
+ ```
83
+
84
+ For sync usage, use `mcp_tool` instead of `async_mcp_tool`.
85
+
86
+ ### MCP Prompts
87
+
88
+ ```python
89
+ from anthropic.lib.tools.mcp import mcp_message
90
+
91
+ prompt = await mcp_client.get_prompt(name="my-prompt")
92
+ response = await client.beta.messages.create(
93
+ model="claude-opus-4-6",
94
+ max_tokens=16000,
95
+ messages=[mcp_message(m) for m in prompt.messages],
96
+ )
97
+ ```
98
+
99
+ ### MCP Resources as Content
100
+
101
+ ```python
102
+ from anthropic.lib.tools.mcp import mcp_resource_to_content
103
+
104
+ resource = await mcp_client.read_resource(uri="file:///path/to/doc.txt")
105
+ response = await client.beta.messages.create(
106
+ model="claude-opus-4-6",
107
+ max_tokens=16000,
108
+ messages=[{
109
+ "role": "user",
110
+ "content": [
111
+ mcp_resource_to_content(resource),
112
+ {"type": "text", "text": "Summarize this document"},
113
+ ],
114
+ }],
115
+ )
116
+ ```
117
+
118
+ ### Upload MCP Resources as Files
119
+
120
+ ```python
121
+ from anthropic.lib.tools.mcp import mcp_resource_to_file
122
+
123
+ resource = await mcp_client.read_resource(uri="file:///path/to/data.json")
124
+ uploaded = await client.beta.files.upload(file=mcp_resource_to_file(resource))
125
+ ```
126
+
127
+ Conversion functions raise `UnsupportedMCPValueError` if an MCP value cannot be converted (e.g., unsupported content types like audio, unsupported MIME types).
128
+
129
+ ---
130
+
131
+ ## Manual Agentic Loop
132
+
133
+ Use this when you need fine-grained control over the loop (e.g., custom logging, conditional tool execution, human-in-the-loop approval):
134
+
135
+ ```python
136
+ import anthropic
137
+
138
+ client = anthropic.Anthropic()
139
+ tools = [...] # Your tool definitions
140
+ messages = [{"role": "user", "content": user_input}]
141
+
142
+ # Agentic loop: keep going until Claude stops calling tools
143
+ while True:
144
+ response = client.messages.create(
145
+ model="claude-opus-4-6",
146
+ max_tokens=16000,
147
+ tools=tools,
148
+ messages=messages
149
+ )
150
+
151
+ # If Claude is done (no more tool calls), break
152
+ if response.stop_reason == "end_turn":
153
+ break
154
+
155
+ # Server-side tool hit iteration limit; re-send to continue
156
+ if response.stop_reason == "pause_turn":
157
+ messages = [
158
+ {"role": "user", "content": user_input},
159
+ {"role": "assistant", "content": response.content},
160
+ ]
161
+ continue
162
+
163
+ # Extract tool use blocks from the response
164
+ tool_use_blocks = [b for b in response.content if b.type == "tool_use"]
165
+
166
+ # Append assistant's response (including tool_use blocks)
167
+ messages.append({"role": "assistant", "content": response.content})
168
+
169
+ # Execute each tool and collect results
170
+ tool_results = []
171
+ for tool in tool_use_blocks:
172
+ result = execute_tool(tool.name, tool.input) # Your implementation
173
+ tool_results.append({
174
+ "type": "tool_result",
175
+ "tool_use_id": tool.id, # Must match the tool_use block's id
176
+ "content": result
177
+ })
178
+
179
+ # Append tool results as a user message
180
+ messages.append({"role": "user", "content": tool_results})
181
+
182
+ # Final response text
183
+ final_text = next(b.text for b in response.content if b.type == "text")
184
+ ```
185
+
186
+ ---
187
+
188
+ ## Handling Tool Results
189
+
190
+ ```python
191
+ response = client.messages.create(
192
+ model="claude-opus-4-6",
193
+ max_tokens=16000,
194
+ tools=tools,
195
+ messages=[{"role": "user", "content": "What's the weather in Paris?"}]
196
+ )
197
+
198
+ for block in response.content:
199
+ if block.type == "tool_use":
200
+ tool_name = block.name
201
+ tool_input = block.input
202
+ tool_use_id = block.id
203
+
204
+ result = execute_tool(tool_name, tool_input)
205
+
206
+ followup = client.messages.create(
207
+ model="claude-opus-4-6",
208
+ max_tokens=16000,
209
+ tools=tools,
210
+ messages=[
211
+ {"role": "user", "content": "What's the weather in Paris?"},
212
+ {"role": "assistant", "content": response.content},
213
+ {
214
+ "role": "user",
215
+ "content": [{
216
+ "type": "tool_result",
217
+ "tool_use_id": tool_use_id,
218
+ "content": result
219
+ }]
220
+ }
221
+ ]
222
+ )
223
+ ```
224
+
225
+ ---
226
+
227
+ ## Multiple Tool Calls
228
+
229
+ ```python
230
+ tool_results = []
231
+
232
+ for block in response.content:
233
+ if block.type == "tool_use":
234
+ result = execute_tool(block.name, block.input)
235
+ tool_results.append({
236
+ "type": "tool_result",
237
+ "tool_use_id": block.id,
238
+ "content": result
239
+ })
240
+
241
+ # Send all results back at once
242
+ if tool_results:
243
+ followup = client.messages.create(
244
+ model="claude-opus-4-6",
245
+ max_tokens=16000,
246
+ tools=tools,
247
+ messages=[
248
+ *previous_messages,
249
+ {"role": "assistant", "content": response.content},
250
+ {"role": "user", "content": tool_results}
251
+ ]
252
+ )
253
+ ```
254
+
255
+ ---
256
+
257
+ ## Error Handling in Tool Results
258
+
259
+ ```python
260
+ tool_result = {
261
+ "type": "tool_result",
262
+ "tool_use_id": tool_use_id,
263
+ "content": "Error: Location 'xyz' not found. Please provide a valid city name.",
264
+ "is_error": True
265
+ }
266
+ ```
267
+
268
+ ---
269
+
270
+ ## Tool Choice
271
+
272
+ ```python
273
+ response = client.messages.create(
274
+ model="claude-opus-4-6",
275
+ max_tokens=16000,
276
+ tools=tools,
277
+ tool_choice={"type": "tool", "name": "get_weather"}, # Force specific tool
278
+ messages=[{"role": "user", "content": "What's the weather in Paris?"}]
279
+ )
280
+ ```
281
+
282
+ ---
283
+
284
+ ## Code Execution
285
+
286
+ ### Basic Usage
287
+
288
+ ```python
289
+ import anthropic
290
+
291
+ client = anthropic.Anthropic()
292
+
293
+ response = client.messages.create(
294
+ model="claude-opus-4-6",
295
+ max_tokens=16000,
296
+ messages=[{
297
+ "role": "user",
298
+ "content": "Calculate the mean and standard deviation of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
299
+ }],
300
+ tools=[{
301
+ "type": "code_execution_20260120",
302
+ "name": "code_execution"
303
+ }]
304
+ )
305
+
306
+ for block in response.content:
307
+ if block.type == "text":
308
+ print(block.text)
309
+ elif block.type == "bash_code_execution_tool_result":
310
+ print(f"stdout: {block.content.stdout}")
311
+ ```
312
+
313
+ ### Upload Files for Analysis
314
+
315
+ ```python
316
+ # 1. Upload a file
317
+ uploaded = client.beta.files.upload(file=open("sales_data.csv", "rb"))
318
+
319
+ # 2. Pass to code execution via container_upload block
320
+ # Code execution is GA; Files API is still beta (pass via extra_headers)
321
+ response = client.messages.create(
322
+ model="claude-opus-4-6",
323
+ max_tokens=16000,
324
+ extra_headers={"anthropic-beta": "files-api-2025-04-14"},
325
+ messages=[{
326
+ "role": "user",
327
+ "content": [
328
+ {"type": "text", "text": "Analyze this sales data. Show trends and create a visualization."},
329
+ {"type": "container_upload", "file_id": uploaded.id}
330
+ ]
331
+ }],
332
+ tools=[{"type": "code_execution_20260120", "name": "code_execution"}]
333
+ )
334
+ ```
335
+
336
+ ### Retrieve Generated Files
337
+
338
+ ```python
339
+ import os
340
+
341
+ OUTPUT_DIR = "./claude_outputs"
342
+ os.makedirs(OUTPUT_DIR, exist_ok=True)
343
+
344
+ for block in response.content:
345
+ if block.type == "bash_code_execution_tool_result":
346
+ result = block.content
347
+ if result.type == "bash_code_execution_result" and result.content:
348
+ for file_ref in result.content:
349
+ if file_ref.type == "bash_code_execution_output":
350
+ metadata = client.beta.files.retrieve_metadata(file_ref.file_id)
351
+ file_content = client.beta.files.download(file_ref.file_id)
352
+ # Use basename to prevent path traversal; validate result
353
+ safe_name = os.path.basename(metadata.filename)
354
+ if not safe_name or safe_name in (".", ".."):
355
+ print(f"Skipping invalid filename: {metadata.filename}")
356
+ continue
357
+ output_path = os.path.join(OUTPUT_DIR, safe_name)
358
+ file_content.write_to_file(output_path)
359
+ print(f"Saved: {output_path}")
360
+ ```
361
+
362
+ ### Container Reuse
363
+
364
+ ```python
365
+ # First request: set up environment
366
+ response1 = client.messages.create(
367
+ model="claude-opus-4-6",
368
+ max_tokens=16000,
369
+ messages=[{"role": "user", "content": "Install tabulate and create data.json with sample data"}],
370
+ tools=[{"type": "code_execution_20260120", "name": "code_execution"}]
371
+ )
372
+
373
+ # Get container ID from response
374
+ container_id = response1.container.id
375
+
376
+ # Second request: reuse the same container
377
+ response2 = client.messages.create(
378
+ container=container_id,
379
+ model="claude-opus-4-6",
380
+ max_tokens=16000,
381
+ messages=[{"role": "user", "content": "Read data.json and display as a formatted table"}],
382
+ tools=[{"type": "code_execution_20260120", "name": "code_execution"}]
383
+ )
384
+ ```
385
+
386
+ ### Response Structure
387
+
388
+ ```python
389
+ for block in response.content:
390
+ if block.type == "text":
391
+ print(block.text) # Claude's explanation
392
+ elif block.type == "server_tool_use":
393
+ print(f"Running: {block.name} - {block.input}") # What Claude is doing
394
+ elif block.type == "bash_code_execution_tool_result":
395
+ result = block.content
396
+ if result.type == "bash_code_execution_result":
397
+ if result.return_code == 0:
398
+ print(f"Output: {result.stdout}")
399
+ else:
400
+ print(f"Error: {result.stderr}")
401
+ else:
402
+ print(f"Tool error: {result.error_code}")
403
+ elif block.type == "text_editor_code_execution_tool_result":
404
+ print(f"File operation: {block.content}")
405
+ ```
406
+
407
+ ---
408
+
409
+ ## Memory Tool
410
+
411
+ ### Basic Usage
412
+
413
+ ```python
414
+ import anthropic
415
+
416
+ client = anthropic.Anthropic()
417
+
418
+ response = client.messages.create(
419
+ model="claude-opus-4-6",
420
+ max_tokens=16000,
421
+ messages=[{"role": "user", "content": "Remember that my preferred language is Python."}],
422
+ tools=[{"type": "memory_20250818", "name": "memory"}],
423
+ )
424
+ ```
425
+
426
+ ### SDK Memory Helper
427
+
428
+ Subclass `BetaAbstractMemoryTool`:
429
+
430
+ ```python
431
+ from anthropic.lib.tools import BetaAbstractMemoryTool
432
+
433
+ class MyMemoryTool(BetaAbstractMemoryTool):
434
+ def view(self, command): ...
435
+ def create(self, command): ...
436
+ def str_replace(self, command): ...
437
+ def insert(self, command): ...
438
+ def delete(self, command): ...
439
+ def rename(self, command): ...
440
+
441
+ memory = MyMemoryTool()
442
+
443
+ # Use with tool runner
444
+ runner = client.beta.messages.tool_runner(
445
+ model="claude-opus-4-6",
446
+ max_tokens=16000,
447
+ tools=[memory],
448
+ messages=[{"role": "user", "content": "Remember my preferences"}],
449
+ )
450
+
451
+ for message in runner:
452
+ print(message)
453
+ ```
454
+
455
+ For full implementation examples, use WebFetch:
456
+
457
+ - `https://github.com/anthropics/anthropic-sdk-python/blob/main/examples/memory/basic.py`
458
+
459
+ ---
460
+
461
+ ## Structured Outputs
462
+
463
+ ### JSON Outputs (Pydantic — Recommended)
464
+
465
+ ```python
466
+ from pydantic import BaseModel
467
+ from typing import List
468
+ import anthropic
469
+
470
+ class ContactInfo(BaseModel):
471
+ name: str
472
+ email: str
473
+ plan: str
474
+ interests: List[str]
475
+ demo_requested: bool
476
+
477
+ client = anthropic.Anthropic()
478
+
479
+ response = client.messages.parse(
480
+ model="claude-opus-4-6",
481
+ max_tokens=16000,
482
+ messages=[{
483
+ "role": "user",
484
+ "content": "Extract: Jane Doe (jane@co.com) wants Enterprise, interested in API and SDKs, wants a demo."
485
+ }],
486
+ output_format=ContactInfo,
487
+ )
488
+
489
+ # response.parsed_output is a validated ContactInfo instance
490
+ contact = response.parsed_output
491
+ print(contact.name) # "Jane Doe"
492
+ print(contact.interests) # ["API", "SDKs"]
493
+ ```
494
+
495
+ ### Raw Schema
496
+
497
+ ```python
498
+ response = client.messages.create(
499
+ model="claude-opus-4-6",
500
+ max_tokens=16000,
501
+ messages=[{
502
+ "role": "user",
503
+ "content": "Extract info: John Smith (john@example.com) wants the Enterprise plan."
504
+ }],
505
+ output_config={
506
+ "format": {
507
+ "type": "json_schema",
508
+ "schema": {
509
+ "type": "object",
510
+ "properties": {
511
+ "name": {"type": "string"},
512
+ "email": {"type": "string"},
513
+ "plan": {"type": "string"},
514
+ "demo_requested": {"type": "boolean"}
515
+ },
516
+ "required": ["name", "email", "plan", "demo_requested"],
517
+ "additionalProperties": False
518
+ }
519
+ }
520
+ }
521
+ )
522
+
523
+ import json
524
+ # output_config.format guarantees the first block is text with valid JSON
525
+ text = next(b.text for b in response.content if b.type == "text")
526
+ data = json.loads(text)
527
+ ```
528
+
529
+ ### Strict Tool Use
530
+
531
+ ```python
532
+ response = client.messages.create(
533
+ model="claude-opus-4-6",
534
+ max_tokens=16000,
535
+ messages=[{"role": "user", "content": "Book a flight to Tokyo for 2 passengers on March 15"}],
536
+ tools=[{
537
+ "name": "book_flight",
538
+ "description": "Book a flight to a destination",
539
+ "strict": True,
540
+ "input_schema": {
541
+ "type": "object",
542
+ "properties": {
543
+ "destination": {"type": "string"},
544
+ "date": {"type": "string", "format": "date"},
545
+ "passengers": {"type": "integer", "enum": [1, 2, 3, 4, 5, 6, 7, 8]}
546
+ },
547
+ "required": ["destination", "date", "passengers"],
548
+ "additionalProperties": False
549
+ }
550
+ }]
551
+ )
552
+ ```
553
+
554
+ ### Using Both Together
555
+
556
+ ```python
557
+ response = client.messages.create(
558
+ model="claude-opus-4-6",
559
+ max_tokens=16000,
560
+ messages=[{"role": "user", "content": "Plan a trip to Paris next month"}],
561
+ output_config={
562
+ "format": {
563
+ "type": "json_schema",
564
+ "schema": {
565
+ "type": "object",
566
+ "properties": {
567
+ "summary": {"type": "string"},
568
+ "next_steps": {"type": "array", "items": {"type": "string"}}
569
+ },
570
+ "required": ["summary", "next_steps"],
571
+ "additionalProperties": False
572
+ }
573
+ }
574
+ },
575
+ tools=[{
576
+ "name": "search_flights",
577
+ "description": "Search for available flights",
578
+ "strict": True,
579
+ "input_schema": {
580
+ "type": "object",
581
+ "properties": {
582
+ "destination": {"type": "string"},
583
+ "date": {"type": "string", "format": "date"}
584
+ },
585
+ "required": ["destination", "date"],
586
+ "additionalProperties": False
587
+ }
588
+ }]
589
+ )
590
+ ```
@@ -0,0 +1,92 @@
1
+ # Claude API — Ruby
2
+
3
+ > **Note:** The Ruby SDK supports the Claude API. A tool runner is available in beta via `client.beta.messages.tool_runner()`. Agent SDK is not yet available for Ruby.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ gem install anthropic
9
+ ```
10
+
11
+ ## Client Initialization
12
+
13
+ ```ruby
14
+ require "anthropic"
15
+
16
+ # Default (uses ANTHROPIC_API_KEY env var)
17
+ client = Anthropic::Client.new
18
+
19
+ # Explicit API key
20
+ client = Anthropic::Client.new(api_key: "your-api-key")
21
+ ```
22
+
23
+ ---
24
+
25
+ ## Basic Message Request
26
+
27
+ ```ruby
28
+ message = client.messages.create(
29
+ model: :"claude-opus-4-6",
30
+ max_tokens: 16000,
31
+ messages: [
32
+ { role: "user", content: "What is the capital of France?" }
33
+ ]
34
+ )
35
+ # content is an array of polymorphic block objects (TextBlock, ThinkingBlock,
36
+ # ToolUseBlock, ...). .type is a Symbol — compare with :text, not "text".
37
+ # .text raises NoMethodError on non-TextBlock entries.
38
+ message.content.each do |block|
39
+ puts block.text if block.type == :text
40
+ end
41
+ ```
42
+
43
+ ---
44
+
45
+ ## Streaming
46
+
47
+ ```ruby
48
+ stream = client.messages.stream(
49
+ model: :"claude-opus-4-6",
50
+ max_tokens: 64000,
51
+ messages: [{ role: "user", content: "Write a haiku" }]
52
+ )
53
+
54
+ stream.text.each { |text| print(text) }
55
+ ```
56
+
57
+ ---
58
+
59
+ ## Tool Use
60
+
61
+ The Ruby SDK supports tool use via raw JSON schema definitions and also provides a beta tool runner for automatic tool execution.
62
+
63
+ ### Tool Runner (Beta)
64
+
65
+ ```ruby
66
+ class GetWeatherInput < Anthropic::BaseModel
67
+ required :location, String, doc: "City and state, e.g. San Francisco, CA"
68
+ end
69
+
70
+ class GetWeather < Anthropic::BaseTool
71
+ doc "Get the current weather for a location"
72
+
73
+ input_schema GetWeatherInput
74
+
75
+ def call(input)
76
+ "The weather in #{input.location} is sunny and 72°F."
77
+ end
78
+ end
79
+
80
+ client.beta.messages.tool_runner(
81
+ model: :"claude-opus-4-6",
82
+ max_tokens: 16000,
83
+ tools: [GetWeather.new],
84
+ messages: [{ role: "user", content: "What's the weather in San Francisco?" }]
85
+ ).each_message do |message|
86
+ puts message.content
87
+ end
88
+ ```
89
+
90
+ ### Manual Loop
91
+
92
+ See the [shared tool use concepts](../shared/tool-use-concepts.md) for the tool definition format and agentic loop pattern.