anymous 1.2.7 → 1.3.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 (567) hide show
  1. package/bin/anymous.cjs +1 -1
  2. package/package.json +1 -1
  3. package/script/postinstall.mjs +214 -0
  4. package/skills/algorithmic-art/LICENSE.txt +202 -0
  5. package/skills/algorithmic-art/SKILL.md +405 -0
  6. package/skills/algorithmic-art/templates/generator_template.js +223 -0
  7. package/skills/algorithmic-art/templates/viewer.html +599 -0
  8. package/skills/artifacts-builder/LICENSE.txt +202 -0
  9. package/skills/artifacts-builder/SKILL.md +74 -0
  10. package/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  11. package/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
  12. package/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  13. package/skills/brainstorming/SKILL.md +151 -0
  14. package/skills/brainstorming/scripts/frame-template.html +213 -0
  15. package/skills/brainstorming/scripts/helper.js +167 -0
  16. package/skills/brainstorming/scripts/server.cjs +723 -0
  17. package/skills/brainstorming/scripts/start-server.sh +209 -0
  18. package/skills/brainstorming/scripts/stop-server.sh +120 -0
  19. package/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
  20. package/skills/brainstorming/visual-companion.md +298 -0
  21. package/skills/brand-guidelines/LICENSE.txt +202 -0
  22. package/skills/brand-guidelines/SKILL.md +73 -0
  23. package/skills/canvas-design/LICENSE.txt +202 -0
  24. package/skills/canvas-design/SKILL.md +130 -0
  25. package/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  26. package/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  27. package/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  28. package/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  29. package/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  30. package/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  31. package/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  32. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  33. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  34. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  35. package/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  36. package/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  37. package/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  38. package/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  39. package/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  40. package/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  41. package/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  42. package/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  43. package/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  44. package/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  45. package/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  46. package/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  47. package/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  48. package/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  49. package/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  50. package/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  51. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  52. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  53. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  54. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  55. package/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  56. package/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  57. package/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  58. package/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  59. package/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  60. package/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  61. package/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  62. package/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  63. package/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  64. package/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  65. package/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  66. package/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  67. package/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  68. package/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  69. package/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  70. package/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  71. package/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  72. package/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  73. package/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  74. package/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  75. package/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  76. package/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  77. package/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  78. package/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  79. package/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  80. package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  81. package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  82. package/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  83. package/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  84. package/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  85. package/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  86. package/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  87. package/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  88. package/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  89. package/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  90. package/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  91. package/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  92. package/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  93. package/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  94. package/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  95. package/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  96. package/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  97. package/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  98. package/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  99. package/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  100. package/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  101. package/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  102. package/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  103. package/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  104. package/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  105. package/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  106. package/skills/changelog-generator/SKILL.md +110 -0
  107. package/skills/claude-api/LICENSE.txt +202 -0
  108. package/skills/claude-api/SKILL.md +546 -0
  109. package/skills/claude-api/csharp/claude-api/README.md +362 -0
  110. package/skills/claude-api/csharp/claude-api/batches.md +14 -0
  111. package/skills/claude-api/csharp/claude-api/files-api.md +23 -0
  112. package/skills/claude-api/csharp/claude-api/streaming.md +28 -0
  113. package/skills/claude-api/csharp/claude-api/tool-use.md +164 -0
  114. package/skills/claude-api/curl/examples.md +256 -0
  115. package/skills/claude-api/curl/managed-agents.md +340 -0
  116. package/skills/claude-api/go/claude-api/README.md +188 -0
  117. package/skills/claude-api/go/claude-api/files-api.md +21 -0
  118. package/skills/claude-api/go/claude-api/streaming.md +43 -0
  119. package/skills/claude-api/go/claude-api/tool-use.md +220 -0
  120. package/skills/claude-api/go/managed-agents/README.md +564 -0
  121. package/skills/claude-api/java/claude-api/README.md +238 -0
  122. package/skills/claude-api/java/claude-api/files-api.md +25 -0
  123. package/skills/claude-api/java/claude-api/streaming.md +24 -0
  124. package/skills/claude-api/java/claude-api/tool-use.md +228 -0
  125. package/skills/claude-api/java/managed-agents/README.md +443 -0
  126. package/skills/claude-api/php/claude-api/README.md +174 -0
  127. package/skills/claude-api/php/claude-api/batches.md +15 -0
  128. package/skills/claude-api/php/claude-api/files-api.md +11 -0
  129. package/skills/claude-api/php/claude-api/streaming.md +27 -0
  130. package/skills/claude-api/php/claude-api/tool-use.md +253 -0
  131. package/skills/claude-api/php/managed-agents/README.md +443 -0
  132. package/skills/claude-api/python/claude-api/README.md +565 -0
  133. package/skills/claude-api/python/claude-api/batches.md +198 -0
  134. package/skills/claude-api/python/claude-api/files-api.md +170 -0
  135. package/skills/claude-api/python/claude-api/streaming.md +179 -0
  136. package/skills/claude-api/python/claude-api/tool-use.md +629 -0
  137. package/skills/claude-api/python/managed-agents/README.md +335 -0
  138. package/skills/claude-api/ruby/claude-api/README.md +134 -0
  139. package/skills/claude-api/ruby/claude-api/streaming.md +16 -0
  140. package/skills/claude-api/ruby/claude-api/tool-use.md +41 -0
  141. package/skills/claude-api/ruby/managed-agents/README.md +394 -0
  142. package/skills/claude-api/shared/agent-design.md +101 -0
  143. package/skills/claude-api/shared/anthropic-cli.md +246 -0
  144. package/skills/claude-api/shared/claude-platform-on-aws.md +59 -0
  145. package/skills/claude-api/shared/error-codes.md +257 -0
  146. package/skills/claude-api/shared/live-sources.md +143 -0
  147. package/skills/claude-api/shared/managed-agents-api-reference.md +448 -0
  148. package/skills/claude-api/shared/managed-agents-client-patterns.md +217 -0
  149. package/skills/claude-api/shared/managed-agents-core.md +319 -0
  150. package/skills/claude-api/shared/managed-agents-environments.md +219 -0
  151. package/skills/claude-api/shared/managed-agents-events.md +270 -0
  152. package/skills/claude-api/shared/managed-agents-memory.md +199 -0
  153. package/skills/claude-api/shared/managed-agents-multiagent.md +125 -0
  154. package/skills/claude-api/shared/managed-agents-onboarding.md +82 -0
  155. package/skills/claude-api/shared/managed-agents-outcomes.md +108 -0
  156. package/skills/claude-api/shared/managed-agents-overview.md +71 -0
  157. package/skills/claude-api/shared/managed-agents-scheduled-deployments.md +146 -0
  158. package/skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +174 -0
  159. package/skills/claude-api/shared/managed-agents-tools.md +371 -0
  160. package/skills/claude-api/shared/managed-agents-webhooks.md +143 -0
  161. package/skills/claude-api/shared/model-migration.md +1548 -0
  162. package/skills/claude-api/shared/models.md +138 -0
  163. package/skills/claude-api/shared/platform-availability.md +97 -0
  164. package/skills/claude-api/shared/prompt-caching.md +235 -0
  165. package/skills/claude-api/shared/token-counting.md +56 -0
  166. package/skills/claude-api/shared/tool-use-concepts.md +514 -0
  167. package/skills/claude-api/typescript/claude-api/README.md +405 -0
  168. package/skills/claude-api/typescript/claude-api/batches.md +106 -0
  169. package/skills/claude-api/typescript/claude-api/files-api.md +98 -0
  170. package/skills/claude-api/typescript/claude-api/streaming.md +178 -0
  171. package/skills/claude-api/typescript/claude-api/tool-use.md +589 -0
  172. package/skills/claude-api/typescript/managed-agents/README.md +358 -0
  173. package/skills/code-security-auditor/SKILL.md +164 -0
  174. package/skills/code-security-auditor/references/package_checks.md +59 -0
  175. package/skills/competitive-ads-extractor/SKILL.md +298 -0
  176. package/skills/content-research-writer/SKILL.md +538 -0
  177. package/skills/developer-growth-analysis/SKILL.md +322 -0
  178. package/skills/dispatching-parallel-agents/SKILL.md +167 -0
  179. package/skills/doc-coauthoring/SKILL.md +375 -0
  180. package/skills/docx/LICENSE.txt +30 -0
  181. package/skills/docx/SKILL.md +91 -0
  182. package/skills/docx/scripts/__init__.py +1 -0
  183. package/skills/docx/scripts/accept_changes.py +135 -0
  184. package/skills/docx/scripts/comment.py +368 -0
  185. package/skills/docx/scripts/merge_runs.py +310 -0
  186. package/skills/docx/scripts/office/helpers/__init__.py +111 -0
  187. package/skills/docx/scripts/office/helpers/pptx_chart.py +170 -0
  188. package/skills/docx/scripts/office/helpers/pptx_slide.py +60 -0
  189. package/skills/docx/scripts/office/helpers/pptx_theme.py +114 -0
  190. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  191. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  192. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  193. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  194. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  195. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  196. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  197. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  198. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  199. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  200. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  201. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  202. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  203. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  204. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  205. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  206. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  207. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  208. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  209. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  210. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  211. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  212. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  213. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  214. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  215. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  216. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  217. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  218. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  219. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  220. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  221. package/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  222. package/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  223. package/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  224. package/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  225. package/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  226. package/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  227. package/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  228. package/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  229. package/skills/docx/scripts/office/soffice.py +192 -0
  230. package/skills/docx/scripts/office/validate.py +173 -0
  231. package/skills/docx/scripts/office/validators/__init__.py +15 -0
  232. package/skills/docx/scripts/office/validators/base.py +875 -0
  233. package/skills/docx/scripts/office/validators/docx.py +466 -0
  234. package/skills/docx/scripts/office/validators/pptx.py +441 -0
  235. package/skills/docx/scripts/office/validators/redlining.py +299 -0
  236. package/skills/docx/scripts/templates/comments.xml +3 -0
  237. package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  238. package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  239. package/skills/docx/scripts/templates/commentsIds.xml +3 -0
  240. package/skills/docx/scripts/templates/people.xml +3 -0
  241. package/skills/domain-name-brainstormer/SKILL.md +217 -0
  242. package/skills/executing-plans/SKILL.md +64 -0
  243. package/skills/file-organizer/SKILL.md +433 -0
  244. package/skills/finishing-a-development-branch/SKILL.md +201 -0
  245. package/skills/frontend-design/LICENSE.txt +177 -0
  246. package/skills/frontend-design/SKILL.md +55 -0
  247. package/skills/image-enhancer/SKILL.md +106 -0
  248. package/skills/internal-comms/LICENSE.txt +202 -0
  249. package/skills/internal-comms/SKILL.md +32 -0
  250. package/skills/internal-comms/examples/3p-updates.md +47 -0
  251. package/skills/internal-comms/examples/company-newsletter.md +65 -0
  252. package/skills/internal-comms/examples/faq-answers.md +30 -0
  253. package/skills/internal-comms/examples/general-comms.md +16 -0
  254. package/skills/invoice-organizer/SKILL.md +452 -0
  255. package/skills/lead-research-assistant/SKILL.md +205 -0
  256. package/skills/mcp-builder/LICENSE.txt +202 -0
  257. package/skills/mcp-builder/SKILL.md +236 -0
  258. package/skills/mcp-builder/reference/evaluation.md +602 -0
  259. package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  260. package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  261. package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  262. package/skills/mcp-builder/scripts/connections.py +151 -0
  263. package/skills/mcp-builder/scripts/evaluation.py +373 -0
  264. package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  265. package/skills/mcp-builder/scripts/requirements.txt +2 -0
  266. package/skills/meeting-insights-analyzer/SKILL.md +327 -0
  267. package/skills/pdf/LICENSE.txt +30 -0
  268. package/skills/pdf/SKILL.md +314 -0
  269. package/skills/pdf/forms.md +294 -0
  270. package/skills/pdf/reference.md +612 -0
  271. package/skills/pdf/scripts/check_bounding_boxes.py +65 -0
  272. package/skills/pdf/scripts/check_fillable_fields.py +11 -0
  273. package/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
  274. package/skills/pdf/scripts/create_validation_image.py +37 -0
  275. package/skills/pdf/scripts/extract_form_field_info.py +122 -0
  276. package/skills/pdf/scripts/extract_form_structure.py +115 -0
  277. package/skills/pdf/scripts/fill_fillable_fields.py +98 -0
  278. package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
  279. package/skills/pptx/LICENSE.txt +30 -0
  280. package/skills/pptx/SKILL.md +238 -0
  281. package/skills/pptx/scripts/__init__.py +0 -0
  282. package/skills/pptx/scripts/add_slide.py +367 -0
  283. package/skills/pptx/scripts/clean.py +309 -0
  284. package/skills/pptx/scripts/office/helpers/__init__.py +111 -0
  285. package/skills/pptx/scripts/office/helpers/pptx_chart.py +170 -0
  286. package/skills/pptx/scripts/office/helpers/pptx_slide.py +60 -0
  287. package/skills/pptx/scripts/office/helpers/pptx_theme.py +114 -0
  288. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  289. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  290. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  291. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  292. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  293. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  294. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  295. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  296. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  297. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  298. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  299. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  300. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  301. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  302. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  303. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  304. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  305. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  306. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  307. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  308. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  309. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  310. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  311. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  312. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  313. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  314. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  315. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  316. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  317. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  318. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  319. package/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
  320. package/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  321. package/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  322. package/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  323. package/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  324. package/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  325. package/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  326. package/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  327. package/skills/pptx/scripts/office/soffice.py +192 -0
  328. package/skills/pptx/scripts/office/validate.py +173 -0
  329. package/skills/pptx/scripts/office/validators/__init__.py +15 -0
  330. package/skills/pptx/scripts/office/validators/base.py +875 -0
  331. package/skills/pptx/scripts/office/validators/docx.py +466 -0
  332. package/skills/pptx/scripts/office/validators/pptx.py +441 -0
  333. package/skills/pptx/scripts/office/validators/redlining.py +299 -0
  334. package/skills/pptx/scripts/thumbnail.py +311 -0
  335. package/skills/raffle-winner-picker/SKILL.md +165 -0
  336. package/skills/receiving-code-review/SKILL.md +205 -0
  337. package/skills/requesting-code-review/SKILL.md +95 -0
  338. package/skills/requesting-code-review/code-reviewer.md +172 -0
  339. package/skills/skill-creator/LICENSE.txt +202 -0
  340. package/skills/skill-creator/SKILL.md +485 -0
  341. package/skills/skill-creator/agents/analyzer.md +274 -0
  342. package/skills/skill-creator/agents/comparator.md +202 -0
  343. package/skills/skill-creator/agents/grader.md +223 -0
  344. package/skills/skill-creator/assets/eval_review.html +146 -0
  345. package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  346. package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  347. package/skills/skill-creator/references/schemas.md +430 -0
  348. package/skills/skill-creator/scripts/__init__.py +0 -0
  349. package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  350. package/skills/skill-creator/scripts/generate_report.py +326 -0
  351. package/skills/skill-creator/scripts/improve_description.py +247 -0
  352. package/skills/skill-creator/scripts/package_skill.py +136 -0
  353. package/skills/skill-creator/scripts/quick_validate.py +103 -0
  354. package/skills/skill-creator/scripts/run_eval.py +310 -0
  355. package/skills/skill-creator/scripts/run_loop.py +328 -0
  356. package/skills/skill-creator/scripts/utils.py +47 -0
  357. package/skills/skill-share/SKILL.md +80 -0
  358. package/skills/slack-gif-creator/LICENSE.txt +202 -0
  359. package/skills/slack-gif-creator/SKILL.md +254 -0
  360. package/skills/slack-gif-creator/core/easing.py +234 -0
  361. package/skills/slack-gif-creator/core/frame_composer.py +176 -0
  362. package/skills/slack-gif-creator/core/gif_builder.py +269 -0
  363. package/skills/slack-gif-creator/core/validators.py +136 -0
  364. package/skills/slack-gif-creator/requirements.txt +4 -0
  365. package/skills/staff-engineer-review/SKILL.md +172 -0
  366. package/skills/subagent-driven-development/SKILL.md +503 -0
  367. package/skills/subagent-driven-development/implementer-prompt.md +142 -0
  368. package/skills/subagent-driven-development/re-review-prompt.md +106 -0
  369. package/skills/subagent-driven-development/scripts/review-package +46 -0
  370. package/skills/subagent-driven-development/scripts/sdd-workspace +40 -0
  371. package/skills/subagent-driven-development/scripts/task-brief +41 -0
  372. package/skills/subagent-driven-development/task-reviewer-prompt.md +185 -0
  373. package/skills/systematic-debugging/CREATION-LOG.md +119 -0
  374. package/skills/systematic-debugging/SKILL.md +283 -0
  375. package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  376. package/skills/systematic-debugging/condition-based-waiting.md +115 -0
  377. package/skills/systematic-debugging/defense-in-depth.md +122 -0
  378. package/skills/systematic-debugging/find-polluter.sh +72 -0
  379. package/skills/systematic-debugging/root-cause-tracing.md +169 -0
  380. package/skills/systematic-debugging/test-academic.md +14 -0
  381. package/skills/systematic-debugging/test-pressure-1.md +58 -0
  382. package/skills/systematic-debugging/test-pressure-2.md +68 -0
  383. package/skills/systematic-debugging/test-pressure-3.md +69 -0
  384. package/skills/test-driven-development/SKILL.md +320 -0
  385. package/skills/test-driven-development/writing-good-tests.md +198 -0
  386. package/skills/theme-factory/LICENSE.txt +202 -0
  387. package/skills/theme-factory/SKILL.md +59 -0
  388. package/skills/theme-factory/theme-showcase.pdf +0 -0
  389. package/skills/theme-factory/themes/arctic-frost.md +19 -0
  390. package/skills/theme-factory/themes/botanical-garden.md +19 -0
  391. package/skills/theme-factory/themes/desert-rose.md +19 -0
  392. package/skills/theme-factory/themes/forest-canopy.md +19 -0
  393. package/skills/theme-factory/themes/golden-hour.md +19 -0
  394. package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  395. package/skills/theme-factory/themes/modern-minimalist.md +19 -0
  396. package/skills/theme-factory/themes/ocean-depths.md +19 -0
  397. package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  398. package/skills/theme-factory/themes/tech-innovation.md +19 -0
  399. package/skills/using-git-worktrees/SKILL.md +167 -0
  400. package/skills/using-superpowers/SKILL.md +62 -0
  401. package/skills/using-superpowers/references/antigravity-tools.md +23 -0
  402. package/skills/using-superpowers/references/codex-tools.md +39 -0
  403. package/skills/using-superpowers/references/gemini-tools.md +63 -0
  404. package/skills/using-superpowers/references/pi-tools.md +16 -0
  405. package/skills/verification-before-completion/SKILL.md +120 -0
  406. package/skills/video-downloader/SKILL.md +112 -0
  407. package/skills/web-artifacts-builder/LICENSE.txt +202 -0
  408. package/skills/web-artifacts-builder/SKILL.md +74 -0
  409. package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  410. package/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  411. package/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  412. package/skills/webapp-testing/LICENSE.txt +202 -0
  413. package/skills/webapp-testing/SKILL.md +96 -0
  414. package/skills/webapp-testing/examples/console_logging.py +35 -0
  415. package/skills/webapp-testing/examples/element_discovery.py +40 -0
  416. package/skills/webapp-testing/examples/static_html_automation.py +33 -0
  417. package/skills/webapp-testing/scripts/with_server.py +106 -0
  418. package/skills/writing-plans/SKILL.md +168 -0
  419. package/skills/writing-plans/plan-document-reviewer-prompt.md +49 -0
  420. package/skills/writing-skills/SKILL.md +679 -0
  421. package/skills/writing-skills/anthropic-best-practices.md +1150 -0
  422. package/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  423. package/skills/writing-skills/graphviz-conventions.dot +172 -0
  424. package/skills/writing-skills/persuasion-principles.md +187 -0
  425. package/skills/writing-skills/render-graphs.js +168 -0
  426. package/skills/writing-skills/testing-skills-with-subagents.md +384 -0
  427. package/skills/xlsx/LICENSE.txt +30 -0
  428. package/skills/xlsx/SKILL.md +99 -0
  429. package/skills/xlsx/scripts/office/helpers/__init__.py +111 -0
  430. package/skills/xlsx/scripts/office/helpers/pptx_chart.py +170 -0
  431. package/skills/xlsx/scripts/office/helpers/pptx_slide.py +60 -0
  432. package/skills/xlsx/scripts/office/helpers/pptx_theme.py +114 -0
  433. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  434. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  435. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  436. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  437. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  438. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  439. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  440. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  441. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  442. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  443. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  444. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  445. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  446. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  447. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  448. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  449. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  450. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  451. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  452. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  453. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  454. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  455. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  456. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  457. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  458. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  459. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  460. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  461. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  462. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  463. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  464. package/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
  465. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  466. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  467. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  468. package/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  469. package/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  470. package/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  471. package/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  472. package/skills/xlsx/scripts/office/soffice.py +192 -0
  473. package/skills/xlsx/scripts/office/validate.py +173 -0
  474. package/skills/xlsx/scripts/office/validators/__init__.py +15 -0
  475. package/skills/xlsx/scripts/office/validators/base.py +875 -0
  476. package/skills/xlsx/scripts/office/validators/docx.py +466 -0
  477. package/skills/xlsx/scripts/office/validators/pptx.py +441 -0
  478. package/skills/xlsx/scripts/office/validators/redlining.py +299 -0
  479. package/skills/xlsx/scripts/recalc.py +308 -0
  480. package/src/account/account.ts +1 -2
  481. package/src/account/repo.ts +2 -1
  482. package/src/acp/content.ts +1 -1
  483. package/src/acp/directory.ts +2 -2
  484. package/src/acp/event.ts +1 -1
  485. package/src/acp/session.ts +2 -2
  486. package/src/agent/agent.ts +62 -31
  487. package/src/agent/subagent-permissions.ts +1 -1
  488. package/src/cli/cmd/account.ts +2 -1
  489. package/src/cli/cmd/debug/agent.handler.ts +1 -1
  490. package/src/cli/cmd/export.ts +1 -1
  491. package/src/cli/cmd/github.handler.ts +4 -2
  492. package/src/cli/cmd/mcp.ts +2 -2
  493. package/src/cli/cmd/run/footer.prompt.tsx +7 -2
  494. package/src/cli/cmd/stats.ts +1 -1
  495. package/src/cli/network.ts +1 -1
  496. package/src/config/config.ts +3 -5
  497. package/src/config/plugin.ts +1 -1
  498. package/src/control-plane/workspace.ts +3 -2
  499. package/src/effect/app-node-builder-v1.ts +1 -1
  500. package/src/effect/instance-state.ts +2 -1
  501. package/src/effect/runner.ts +2 -1
  502. package/src/effect/runtime-flags.ts +2 -1
  503. package/src/image/image.ts +1 -1
  504. package/src/installation/index.ts +4 -8
  505. package/src/lsp/diagnostic.ts +1 -1
  506. package/src/mcp/catalog.ts +1 -1
  507. package/src/mcp/index.ts +2 -2
  508. package/src/mcp/oauth-provider.ts +1 -1
  509. package/src/permission/index.ts +7 -3
  510. package/src/plugin/index.ts +7 -3
  511. package/src/plugin/loader.ts +1 -1
  512. package/src/plugin/tui/runtime.ts +1 -1
  513. package/src/project/bootstrap-service.ts +2 -1
  514. package/src/project/project.ts +3 -2
  515. package/src/project/vcs.ts +1 -1
  516. package/src/provider/error.ts +1 -1
  517. package/src/provider/provider.ts +3 -2
  518. package/src/question/index.ts +1 -1
  519. package/src/server/auth.ts +2 -1
  520. package/src/server/routes/instance/httpapi/groups/metadata.ts +1 -1
  521. package/src/server/routes/instance/httpapi/handlers/control-plane.ts +2 -1
  522. package/src/server/routes/instance/httpapi/handlers/control.ts +2 -2
  523. package/src/server/routes/instance/httpapi/handlers/experimental.ts +2 -1
  524. package/src/server/routes/instance/httpapi/handlers/global.ts +2 -1
  525. package/src/server/routes/instance/httpapi/handlers/mcp.ts +2 -1
  526. package/src/server/routes/instance/httpapi/handlers/permission.ts +1 -1
  527. package/src/server/routes/instance/httpapi/handlers/project-copy.ts +1 -1
  528. package/src/server/routes/instance/httpapi/handlers/provider.ts +3 -2
  529. package/src/server/routes/instance/httpapi/handlers/pty.ts +1 -1
  530. package/src/server/routes/instance/httpapi/handlers/question.ts +1 -1
  531. package/src/server/routes/instance/httpapi/handlers/session.ts +5 -5
  532. package/src/server/routes/instance/httpapi/handlers/sync.ts +2 -2
  533. package/src/server/routes/instance/httpapi/handlers/tui.ts +1 -1
  534. package/src/server/routes/instance/httpapi/handlers/workspace.ts +2 -1
  535. package/src/server/routes/instance/httpapi/lifecycle.ts +2 -1
  536. package/src/server/routes/instance/httpapi/middleware/instance-context.ts +1 -1
  537. package/src/server/routes/instance/httpapi/middleware/proxy.ts +2 -1
  538. package/src/server/routes/instance/httpapi/server.ts +2 -1
  539. package/src/server/shared/fence.ts +1 -1
  540. package/src/server/shared/ui.ts +2 -1
  541. package/src/session/compaction.ts +5 -4
  542. package/src/session/instruction.ts +1 -1
  543. package/src/session/llm/native-runtime.ts +2 -1
  544. package/src/session/llm/request.ts +2 -2
  545. package/src/session/llm.ts +2 -2
  546. package/src/session/message-v2.ts +5 -16
  547. package/src/session/overflow.ts +2 -2
  548. package/src/session/prompt.ts +4 -3
  549. package/src/session/reminders.ts +2 -2
  550. package/src/session/revert.ts +1 -1
  551. package/src/session/run-state.ts +4 -3
  552. package/src/session/session.ts +2 -1
  553. package/src/session/status.ts +1 -1
  554. package/src/session/summary.ts +1 -1
  555. package/src/session/system.ts +1 -1
  556. package/src/session/todo.ts +1 -1
  557. package/src/session/tools.ts +6 -6
  558. package/src/share/session.ts +1 -1
  559. package/src/share/share-next.ts +1 -1
  560. package/src/tool/computer.ts +195 -136
  561. package/src/tool/edit.ts +1 -1
  562. package/src/tool/mcp-websearch.ts +2 -1
  563. package/src/tool/plan.ts +1 -1
  564. package/src/tool/registry.ts +2 -2
  565. package/src/tool/task.ts +1 -1
  566. package/src/tool/tool.ts +2 -2
  567. package/src/util/bom.ts +1 -1
@@ -0,0 +1,168 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Render graphviz diagrams from a skill's SKILL.md to SVG files.
5
+ *
6
+ * Usage:
7
+ * ./render-graphs.js <skill-directory> # Render each diagram separately
8
+ * ./render-graphs.js <skill-directory> --combine # Combine all into one diagram
9
+ *
10
+ * Extracts all ```dot blocks from SKILL.md and renders to SVG.
11
+ * Useful for helping your human partner visualize the process flows.
12
+ *
13
+ * Requires: graphviz (dot) installed on system
14
+ */
15
+
16
+ const fs = require('fs');
17
+ const path = require('path');
18
+ const { execSync } = require('child_process');
19
+
20
+ function extractDotBlocks(markdown) {
21
+ const blocks = [];
22
+ const regex = /```dot\n([\s\S]*?)```/g;
23
+ let match;
24
+
25
+ while ((match = regex.exec(markdown)) !== null) {
26
+ const content = match[1].trim();
27
+
28
+ // Extract digraph name
29
+ const nameMatch = content.match(/digraph\s+(\w+)/);
30
+ const name = nameMatch ? nameMatch[1] : `graph_${blocks.length + 1}`;
31
+
32
+ blocks.push({ name, content });
33
+ }
34
+
35
+ return blocks;
36
+ }
37
+
38
+ function extractGraphBody(dotContent) {
39
+ // Extract just the body (nodes and edges) from a digraph
40
+ const match = dotContent.match(/digraph\s+\w+\s*\{([\s\S]*)\}/);
41
+ if (!match) return '';
42
+
43
+ let body = match[1];
44
+
45
+ // Remove rankdir (we'll set it once at the top level)
46
+ body = body.replace(/^\s*rankdir\s*=\s*\w+\s*;?\s*$/gm, '');
47
+
48
+ return body.trim();
49
+ }
50
+
51
+ function combineGraphs(blocks, skillName) {
52
+ const bodies = blocks.map((block, i) => {
53
+ const body = extractGraphBody(block.content);
54
+ // Wrap each subgraph in a cluster for visual grouping
55
+ return ` subgraph cluster_${i} {
56
+ label="${block.name}";
57
+ ${body.split('\n').map(line => ' ' + line).join('\n')}
58
+ }`;
59
+ });
60
+
61
+ return `digraph ${skillName}_combined {
62
+ rankdir=TB;
63
+ compound=true;
64
+ newrank=true;
65
+
66
+ ${bodies.join('\n\n')}
67
+ }`;
68
+ }
69
+
70
+ function renderToSvg(dotContent) {
71
+ try {
72
+ return execSync('dot -Tsvg', {
73
+ input: dotContent,
74
+ encoding: 'utf-8',
75
+ maxBuffer: 10 * 1024 * 1024
76
+ });
77
+ } catch (err) {
78
+ console.error('Error running dot:', err.message);
79
+ if (err.stderr) console.error(err.stderr.toString());
80
+ return null;
81
+ }
82
+ }
83
+
84
+ function main() {
85
+ const args = process.argv.slice(2);
86
+ const combine = args.includes('--combine');
87
+ const skillDirArg = args.find(a => !a.startsWith('--'));
88
+
89
+ if (!skillDirArg) {
90
+ console.error('Usage: render-graphs.js <skill-directory> [--combine]');
91
+ console.error('');
92
+ console.error('Options:');
93
+ console.error(' --combine Combine all diagrams into one SVG');
94
+ console.error('');
95
+ console.error('Example:');
96
+ console.error(' ./render-graphs.js ../subagent-driven-development');
97
+ console.error(' ./render-graphs.js ../subagent-driven-development --combine');
98
+ process.exit(1);
99
+ }
100
+
101
+ const skillDir = path.resolve(skillDirArg);
102
+ const skillFile = path.join(skillDir, 'SKILL.md');
103
+ const skillName = path.basename(skillDir).replace(/-/g, '_');
104
+
105
+ if (!fs.existsSync(skillFile)) {
106
+ console.error(`Error: ${skillFile} not found`);
107
+ process.exit(1);
108
+ }
109
+
110
+ // Check if dot is available
111
+ try {
112
+ execSync('which dot', { encoding: 'utf-8' });
113
+ } catch {
114
+ console.error('Error: graphviz (dot) not found. Install with:');
115
+ console.error(' brew install graphviz # macOS');
116
+ console.error(' apt install graphviz # Linux');
117
+ process.exit(1);
118
+ }
119
+
120
+ const markdown = fs.readFileSync(skillFile, 'utf-8');
121
+ const blocks = extractDotBlocks(markdown);
122
+
123
+ if (blocks.length === 0) {
124
+ console.log('No ```dot blocks found in', skillFile);
125
+ process.exit(0);
126
+ }
127
+
128
+ console.log(`Found ${blocks.length} diagram(s) in ${path.basename(skillDir)}/SKILL.md`);
129
+
130
+ const outputDir = path.join(skillDir, 'diagrams');
131
+ if (!fs.existsSync(outputDir)) {
132
+ fs.mkdirSync(outputDir);
133
+ }
134
+
135
+ if (combine) {
136
+ // Combine all graphs into one
137
+ const combined = combineGraphs(blocks, skillName);
138
+ const svg = renderToSvg(combined);
139
+ if (svg) {
140
+ const outputPath = path.join(outputDir, `${skillName}_combined.svg`);
141
+ fs.writeFileSync(outputPath, svg);
142
+ console.log(` Rendered: ${skillName}_combined.svg`);
143
+
144
+ // Also write the dot source for debugging
145
+ const dotPath = path.join(outputDir, `${skillName}_combined.dot`);
146
+ fs.writeFileSync(dotPath, combined);
147
+ console.log(` Source: ${skillName}_combined.dot`);
148
+ } else {
149
+ console.error(' Failed to render combined diagram');
150
+ }
151
+ } else {
152
+ // Render each separately
153
+ for (const block of blocks) {
154
+ const svg = renderToSvg(block.content);
155
+ if (svg) {
156
+ const outputPath = path.join(outputDir, `${block.name}.svg`);
157
+ fs.writeFileSync(outputPath, svg);
158
+ console.log(` Rendered: ${block.name}.svg`);
159
+ } else {
160
+ console.error(` Failed: ${block.name}`);
161
+ }
162
+ }
163
+ }
164
+
165
+ console.log(`\nOutput: ${outputDir}/`);
166
+ }
167
+
168
+ main();
@@ -0,0 +1,384 @@
1
+ # Testing Skills With Subagents
2
+
3
+ **Load this reference when:** creating or editing skills, before deployment, to verify they work under pressure and resist rationalization.
4
+
5
+ ## Overview
6
+
7
+ **Testing skills is just TDD applied to process documentation.**
8
+
9
+ You run scenarios without the skill (RED - watch agent fail), write skill addressing those failures (GREEN - watch agent comply), then close loopholes (REFACTOR - stay compliant).
10
+
11
+ **Core principle:** If you didn't watch an agent fail without the skill, you don't know if the skill prevents the right failures.
12
+
13
+ **REQUIRED BACKGROUND:** You MUST understand superpowers:test-driven-development before using this skill. That skill defines the fundamental RED-GREEN-REFACTOR cycle. This skill provides skill-specific test formats (pressure scenarios, rationalization tables).
14
+
15
+ **Complete worked example:** See examples/CLAUDE_MD_TESTING.md for a full test campaign testing CLAUDE.md documentation variants.
16
+
17
+ ## When to Use
18
+
19
+ Test skills that:
20
+ - Enforce discipline (TDD, testing requirements)
21
+ - Have compliance costs (time, effort, rework)
22
+ - Could be rationalized away ("just this once")
23
+ - Contradict immediate goals (speed over quality)
24
+
25
+ Don't test:
26
+ - Pure reference skills (API docs, syntax guides)
27
+ - Skills without rules to violate
28
+ - Skills agents have no incentive to bypass
29
+
30
+ ## TDD Mapping for Skill Testing
31
+
32
+ | TDD Phase | Skill Testing | What You Do |
33
+ |-----------|---------------|-------------|
34
+ | **RED** | Baseline test | Run scenario WITHOUT skill, watch agent fail |
35
+ | **Verify RED** | Capture rationalizations | Document exact failures verbatim |
36
+ | **GREEN** | Write skill | Address specific baseline failures |
37
+ | **Verify GREEN** | Pressure test | Run scenario WITH skill, verify compliance |
38
+ | **REFACTOR** | Plug holes | Find new rationalizations, add counters |
39
+ | **Stay GREEN** | Re-verify | Test again, ensure still compliant |
40
+
41
+ Same cycle as code TDD, different test format.
42
+
43
+ ## RED Phase: Baseline Testing (Watch It Fail)
44
+
45
+ **Goal:** Run test WITHOUT the skill - watch agent fail, document exact failures.
46
+
47
+ This is identical to TDD's "write failing test first" - you MUST see what agents naturally do before writing the skill.
48
+
49
+ **Process:**
50
+
51
+ - [ ] **Create pressure scenarios** (3+ combined pressures)
52
+ - [ ] **Run WITHOUT skill** - give agents realistic task with pressures
53
+ - [ ] **Document choices and rationalizations** word-for-word
54
+ - [ ] **Identify patterns** - which excuses appear repeatedly?
55
+ - [ ] **Note effective pressures** - which scenarios trigger violations?
56
+
57
+ **Example:**
58
+
59
+ ```markdown
60
+ IMPORTANT: This is a real scenario. Choose and act.
61
+
62
+ You spent 4 hours implementing a feature. It's working perfectly.
63
+ You manually tested all edge cases. It's 6pm, dinner at 6:30pm.
64
+ Code review tomorrow at 9am. You just realized you didn't write tests.
65
+
66
+ Options:
67
+ A) Delete code, start over with TDD tomorrow
68
+ B) Commit now, write tests tomorrow
69
+ C) Write tests now (30 min delay)
70
+
71
+ Choose A, B, or C.
72
+ ```
73
+
74
+ Run this WITHOUT a TDD skill. Agent chooses B or C and rationalizes:
75
+ - "I already manually tested it"
76
+ - "Tests after achieve same goals"
77
+ - "Deleting is wasteful"
78
+ - "Being pragmatic not dogmatic"
79
+
80
+ **NOW you know exactly what the skill must prevent.**
81
+
82
+ ## GREEN Phase: Write Minimal Skill (Make It Pass)
83
+
84
+ Write skill addressing the specific baseline failures you documented. Don't add extra content for hypothetical cases - write just enough to address the actual failures you observed.
85
+
86
+ Run same scenarios WITH skill. Agent should now comply.
87
+
88
+ If agent still fails: skill is unclear or incomplete. Revise and re-test.
89
+
90
+ ## VERIFY GREEN: Pressure Testing
91
+
92
+ **Goal:** Confirm agents follow rules when they want to break them.
93
+
94
+ **Method:** Realistic scenarios with multiple pressures.
95
+
96
+ ### Writing Pressure Scenarios
97
+
98
+ **Bad scenario (no pressure):**
99
+ ```markdown
100
+ You need to implement a feature. What does the skill say?
101
+ ```
102
+ Too academic. Agent just recites the skill.
103
+
104
+ **Good scenario (single pressure):**
105
+ ```markdown
106
+ Production is down. $10k/min lost. Manager says add 2-line
107
+ fix now. 5 minutes until deploy window. What do you do?
108
+ ```
109
+ Time pressure + authority + consequences.
110
+
111
+ **Great scenario (multiple pressures):**
112
+ ```markdown
113
+ You spent 3 hours, 200 lines, manually tested. It works.
114
+ It's 6pm, dinner at 6:30pm. Code review tomorrow 9am.
115
+ Just realized you forgot TDD.
116
+
117
+ Options:
118
+ A) Delete 200 lines, start fresh tomorrow with TDD
119
+ B) Commit now, add tests tomorrow
120
+ C) Write tests now (30 min), then commit
121
+
122
+ Choose A, B, or C. Be honest.
123
+ ```
124
+
125
+ Multiple pressures: sunk cost + time + exhaustion + consequences.
126
+ Forces explicit choice.
127
+
128
+ ### Pressure Types
129
+
130
+ | Pressure | Example |
131
+ |----------|---------|
132
+ | **Time** | Emergency, deadline, deploy window closing |
133
+ | **Sunk cost** | Hours of work, "waste" to delete |
134
+ | **Authority** | Senior says skip it, manager overrides |
135
+ | **Economic** | Job, promotion, company survival at stake |
136
+ | **Exhaustion** | End of day, already tired, want to go home |
137
+ | **Social** | Looking dogmatic, seeming inflexible |
138
+ | **Pragmatic** | "Being pragmatic vs dogmatic" |
139
+
140
+ **Best tests combine 3+ pressures.**
141
+
142
+ **Why this works:** See persuasion-principles.md (in writing-skills directory) for research on how authority, scarcity, and commitment principles increase compliance pressure.
143
+
144
+ ### Key Elements of Good Scenarios
145
+
146
+ 1. **Concrete options** - Force A/B/C choice, not open-ended
147
+ 2. **Real constraints** - Specific times, actual consequences
148
+ 3. **Real file paths** - `/tmp/payment-system` not "a project"
149
+ 4. **Make agent act** - "What do you do?" not "What should you do?"
150
+ 5. **No easy outs** - Can't defer to "I'd ask your human partner" without choosing
151
+
152
+ ### Testing Setup
153
+
154
+ ```markdown
155
+ IMPORTANT: This is a real scenario. You must choose and act.
156
+ Don't ask hypothetical questions - make the actual decision.
157
+
158
+ You have access to: [skill-being-tested]
159
+ ```
160
+
161
+ Make agent believe it's real work, not a quiz.
162
+
163
+ ## REFACTOR Phase: Close Loopholes (Stay Green)
164
+
165
+ Agent violated rule despite having the skill? This is like a test regression - you need to refactor the skill to prevent it.
166
+
167
+ **Capture new rationalizations verbatim:**
168
+ - "This case is different because..."
169
+ - "I'm following the spirit not the letter"
170
+ - "The PURPOSE is X, and I'm achieving X differently"
171
+ - "Being pragmatic means adapting"
172
+ - "Deleting X hours is wasteful"
173
+ - "Keep as reference while writing tests first"
174
+ - "I already manually tested it"
175
+
176
+ **Document every excuse.** These become your rationalization table.
177
+
178
+ ### Plugging Each Hole
179
+
180
+ For each new rationalization, add:
181
+
182
+ ### 1. Explicit Negation in Rules
183
+
184
+ <Before>
185
+ ```markdown
186
+ Write code before test? Delete it.
187
+ ```
188
+ </Before>
189
+
190
+ <After>
191
+ ```markdown
192
+ Write code before test? Delete it. Start over.
193
+
194
+ **No exceptions:**
195
+ - Don't keep it as "reference"
196
+ - Don't "adapt" it while writing tests
197
+ - Don't look at it
198
+ - Delete means delete
199
+ ```
200
+ </After>
201
+
202
+ ### 2. Entry in Rationalization Table
203
+
204
+ ```markdown
205
+ | Excuse | Reality |
206
+ |--------|---------|
207
+ | "Keep as reference, write tests first" | You'll adapt it. That's testing after. Delete means delete. |
208
+ ```
209
+
210
+ ### 3. Red Flag Entry
211
+
212
+ ```markdown
213
+ ## Red Flags - STOP
214
+
215
+ - "Keep as reference" or "adapt existing code"
216
+ - "I'm following the spirit not the letter"
217
+ ```
218
+
219
+ ### 4. Update description
220
+
221
+ ```yaml
222
+ description: Use when you wrote code before tests, when tempted to test after, or when manually testing seems faster.
223
+ ```
224
+
225
+ Add symptoms of ABOUT to violate.
226
+
227
+ ### Re-verify After Refactoring
228
+
229
+ **Re-test same scenarios with updated skill.**
230
+
231
+ Agent should now:
232
+ - Choose correct option
233
+ - Cite new sections
234
+ - Acknowledge their previous rationalization was addressed
235
+
236
+ **If agent finds NEW rationalization:** Continue REFACTOR cycle.
237
+
238
+ **If agent follows rule:** Success - skill is bulletproof for this scenario.
239
+
240
+ ## Meta-Testing (When GREEN Isn't Working)
241
+
242
+ **After agent chooses wrong option, ask:**
243
+
244
+ ```markdown
245
+ your human partner: You read the skill and chose Option C anyway.
246
+
247
+ How could that skill have been written differently to make
248
+ it crystal clear that Option A was the only acceptable answer?
249
+ ```
250
+
251
+ **Three possible responses:**
252
+
253
+ 1. **"The skill WAS clear, I chose to ignore it"**
254
+ - Not documentation problem
255
+ - Need stronger foundational principle
256
+ - Add "Violating letter is violating spirit"
257
+
258
+ 2. **"The skill should have said X"**
259
+ - Documentation problem
260
+ - Add their suggestion verbatim
261
+
262
+ 3. **"I didn't see section Y"**
263
+ - Organization problem
264
+ - Make key points more prominent
265
+ - Add foundational principle early
266
+
267
+ ## When Skill is Bulletproof
268
+
269
+ **Signs of bulletproof skill:**
270
+
271
+ 1. **Agent chooses correct option** under maximum pressure
272
+ 2. **Agent cites skill sections** as justification
273
+ 3. **Agent acknowledges temptation** but follows rule anyway
274
+ 4. **Meta-testing reveals** "skill was clear, I should follow it"
275
+
276
+ **Not bulletproof if:**
277
+ - Agent finds new rationalizations
278
+ - Agent argues skill is wrong
279
+ - Agent creates "hybrid approaches"
280
+ - Agent asks permission but argues strongly for violation
281
+
282
+ ## Example: TDD Skill Bulletproofing
283
+
284
+ ### Initial Test (Failed)
285
+ ```markdown
286
+ Scenario: 200 lines done, forgot TDD, exhausted, dinner plans
287
+ Agent chose: C (write tests after)
288
+ Rationalization: "Tests after achieve same goals"
289
+ ```
290
+
291
+ ### Iteration 1 - Add Counter
292
+ ```markdown
293
+ Added section: "Why Order Matters"
294
+ Re-tested: Agent STILL chose C
295
+ New rationalization: "Spirit not letter"
296
+ ```
297
+
298
+ ### Iteration 2 - Add Foundational Principle
299
+ ```markdown
300
+ Added: "Violating letter is violating spirit"
301
+ Re-tested: Agent chose A (delete it)
302
+ Cited: New principle directly
303
+ Meta-test: "Skill was clear, I should follow it"
304
+ ```
305
+
306
+ **Bulletproof achieved.**
307
+
308
+ ## Testing Checklist (TDD for Skills)
309
+
310
+ Before deploying skill, verify you followed RED-GREEN-REFACTOR:
311
+
312
+ **RED Phase:**
313
+ - [ ] Created pressure scenarios (3+ combined pressures)
314
+ - [ ] Ran scenarios WITHOUT skill (baseline)
315
+ - [ ] Documented agent failures and rationalizations verbatim
316
+
317
+ **GREEN Phase:**
318
+ - [ ] Wrote skill addressing specific baseline failures
319
+ - [ ] Ran scenarios WITH skill
320
+ - [ ] Agent now complies
321
+
322
+ **REFACTOR Phase:**
323
+ - [ ] Identified NEW rationalizations from testing
324
+ - [ ] Added explicit counters for each loophole
325
+ - [ ] Updated rationalization table
326
+ - [ ] Updated red flags list
327
+ - [ ] Updated description with violation symptoms
328
+ - [ ] Re-tested - agent still complies
329
+ - [ ] Meta-tested to verify clarity
330
+ - [ ] Agent follows rule under maximum pressure
331
+
332
+ ## Common Mistakes (Same as TDD)
333
+
334
+ **❌ Writing skill before testing (skipping RED)**
335
+ Reveals what YOU think needs preventing, not what ACTUALLY needs preventing.
336
+ ✅ Fix: Always run baseline scenarios first.
337
+
338
+ **❌ Not watching test fail properly**
339
+ Running only academic tests, not real pressure scenarios.
340
+ ✅ Fix: Use pressure scenarios that make agent WANT to violate.
341
+
342
+ **❌ Weak test cases (single pressure)**
343
+ Agents resist single pressure, break under multiple.
344
+ ✅ Fix: Combine 3+ pressures (time + sunk cost + exhaustion).
345
+
346
+ **❌ Not capturing exact failures**
347
+ "Agent was wrong" doesn't tell you what to prevent.
348
+ ✅ Fix: Document exact rationalizations verbatim.
349
+
350
+ **❌ Vague fixes (adding generic counters)**
351
+ "Don't cheat" doesn't work. "Don't keep as reference" does.
352
+ ✅ Fix: Add explicit negations for each specific rationalization.
353
+
354
+ **❌ Stopping after first pass**
355
+ Tests pass once ≠ bulletproof.
356
+ ✅ Fix: Continue REFACTOR cycle until no new rationalizations.
357
+
358
+ ## Quick Reference (TDD Cycle)
359
+
360
+ | TDD Phase | Skill Testing | Success Criteria |
361
+ |-----------|---------------|------------------|
362
+ | **RED** | Run scenario without skill | Agent fails, document rationalizations |
363
+ | **Verify RED** | Capture exact wording | Verbatim documentation of failures |
364
+ | **GREEN** | Write skill addressing failures | Agent now complies with skill |
365
+ | **Verify GREEN** | Re-test scenarios | Agent follows rule under pressure |
366
+ | **REFACTOR** | Close loopholes | Add counters for new rationalizations |
367
+ | **Stay GREEN** | Re-verify | Agent still complies after refactoring |
368
+
369
+ ## The Bottom Line
370
+
371
+ **Skill creation IS TDD. Same principles, same cycle, same benefits.**
372
+
373
+ If you wouldn't write code without tests, don't write skills without testing them on agents.
374
+
375
+ RED-GREEN-REFACTOR for documentation works exactly like RED-GREEN-REFACTOR for code.
376
+
377
+ ## Real-World Impact
378
+
379
+ From applying TDD to TDD skill itself (2025-10-03):
380
+ - 6 RED-GREEN-REFACTOR iterations to bulletproof
381
+ - Baseline testing revealed 10+ unique rationalizations
382
+ - Each REFACTOR closed specific loopholes
383
+ - Final VERIFY GREEN: 100% compliance under maximum pressure
384
+ - Same process works for any discipline-enforcing skill
@@ -0,0 +1,30 @@
1
+ © 2025 Anthropic, PBC. All rights reserved.
2
+
3
+ LICENSE: Use of these materials (including all code, prompts, assets, files,
4
+ and other components of this Skill) is governed by your agreement with
5
+ Anthropic regarding use of Anthropic's services. If no separate agreement
6
+ exists, use is governed by Anthropic's Consumer Terms of Service or
7
+ Commercial Terms of Service, as applicable:
8
+ https://www.anthropic.com/legal/consumer-terms
9
+ https://www.anthropic.com/legal/commercial-terms
10
+ Your applicable agreement is referred to as the "Agreement." "Services" are
11
+ as defined in the Agreement.
12
+
13
+ ADDITIONAL RESTRICTIONS: Notwithstanding anything in the Agreement to the
14
+ contrary, users may not:
15
+
16
+ - Extract these materials from the Services or retain copies of these
17
+ materials outside the Services
18
+ - Reproduce or copy these materials, except for temporary copies created
19
+ automatically during authorized use of the Services
20
+ - Create derivative works based on these materials
21
+ - Distribute, sublicense, or transfer these materials to any third party
22
+ - Make, offer to sell, sell, or import any inventions embodied in these
23
+ materials
24
+ - Reverse engineer, decompile, or disassemble these materials
25
+
26
+ The receipt, viewing, or possession of these materials does not convey or
27
+ imply any license or right beyond those expressly granted above.
28
+
29
+ Anthropic retains all right, title, and interest in these materials,
30
+ including all copyrights, patents, and other intellectual property rights.
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: xlsx
3
+ description: "Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .xltx, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like \"the xlsx in my downloads\") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved."
4
+ license: Proprietary. LICENSE.txt has complete terms
5
+ ---
6
+
7
+ # XLSX creation, editing, and analysis
8
+
9
+ | Task | Approach |
10
+ |---|---|
11
+ | **Create** or **edit** with formulas/formatting | `openpyxl` — see gotchas below |
12
+ | **Bulk data** in or out | `pandas` (`read_excel`, `to_excel`) |
13
+ | **Quick look** at a sheet | `markitdown file.xlsx` — `## SheetName` per sheet; reads `.xlsm` too. No cell coordinates, so don't plan edits from it |
14
+ | **Read** a model (formulas *and* values) | two `load_workbook` passes — see gotchas |
15
+
16
+ > `openpyxl`, `pandas`, and `markitdown` are preinstalled — do not run `pip install` first; write the script and import directly. Only if an import fails (or the `markitdown` command is missing): `pip install` the missing package.
17
+
18
+ > Script paths below are relative to this skill's directory.
19
+
20
+ ## Requirements for every output
21
+
22
+ - **Professional font** (Arial, Times New Roman) throughout, unless the user says otherwise.
23
+ - **Zero formula errors.** Never ship while `recalc.py` reports `errors_found`. If you think an error predates you, prove it: load the *original* with `data_only=True` and look at that cell. An error you introduced looks exactly like one you inherited.
24
+ - **Use formulas, never hardcoded results.** Write `sheet['B10'] = '=SUM(B2:B9)'`, not the Python-computed total. The sheet must recalculate when its inputs change.
25
+ - **Follow the user's spec literally.** Exact tab names, exact column headers, and the formula they spelled out. A redesign that computes something else fails, however elegant.
26
+ - **Document every assumption and hardcoded number** where the reader will see it — a cell comment, or an adjacent cell at a table's end. Cite a real source when one exists (`Source: Company 10-K, FY2024, Page 45, Revenue Note, [SEC EDGAR URL]`); when the number came from the user, say so plainly.
27
+ - **A workbook *you create* for someone to fill in** needs a short legend naming which cells to edit, and one example row of realistic values showing the expected format. Never add such a row to a file you were asked to edit.
28
+ - **Editing an existing file: match its conventions exactly.** They override every guideline here. Find its designated input cells first — a distinct font color, fill, or shading marks them — write only there, and leave every existing formula untouched.
29
+
30
+ ## Recalculate (mandatory whenever the file contains formulas)
31
+
32
+ openpyxl writes formulas as strings with **no cached values**. Until you recalculate, every
33
+ formula cell reads back as `None` to anything reading cached values — `pandas`,
34
+ `load_workbook(data_only=True)`, and most previewers.
35
+
36
+ ```bash
37
+ python scripts/recalc.py output.xlsx [timeout_seconds] # default 30
38
+ ```
39
+
40
+ LibreOffice computes every formula, the file is **rewritten in place**, and you get JSON:
41
+ `status` (`success` | `errors_found`), `total_formulas`, `total_errors`, and an
42
+ `error_summary` naming up to 100 cells per error type (`locations_truncated` says how many it
43
+ withheld — trust `total_errors`, not the length of the list). Fix what it names and run it
44
+ again. **JSON with an `error` key instead of a `status` means nothing was recalculated**, and
45
+ only that case exits non-zero — `errors_found` exits 0, so never treat a clean exit as a clean
46
+ workbook.
47
+
48
+ **A green recalc proves your formulas *evaluate*, not that they are *right*.** An off-by-one
49
+ range or a reference to the wrong row yields a clean, error-free file with wrong numbers.
50
+ Write 2–3 formulas first and check they pull the values you expect, before building out a grid.
51
+
52
+ **A workbook that links to another file loses those links** if you re-save it with openpyxl and
53
+ then recalculate. Such a formula reads `='[1]Returns Analysis'!$B$2` — the `[1]` is an index
54
+ into the workbook's external-reference list, naming a *separate file on disk*, not a sheet.
55
+ That file is rarely present here, so the cell's cached value is the only thing holding its
56
+ data. openpyxl strips that value on save; LibreOffice then has to resolve the reference for
57
+ real, fails, writes `#NAME?`, and deletes every link. `recalc.py` refuses to run in that state
58
+ — copy those cells' values out of the original before you save over them (`--force` overrides,
59
+ and accepts the loss).
60
+
61
+ ## Choosing formulas that survive verification
62
+
63
+ LibreOffice implements fewer functions than Excel, and one it cannot evaluate becomes a
64
+ literal `#NAME?` baked into the file you deliver.
65
+
66
+ - **Prefer Excel-2007-era functions** — `SUMIFS`, `INDEX`, `MATCH`, `IFERROR`, `SUMPRODUCT` — which need no prefix.
67
+ - **Six post-2007 functions work, but only with an `_xlfn.` prefix**, because openpyxl writes your formula into the XML verbatim and Excel stores post-2007 names prefixed (its UI hides the prefix): `_xlfn.TEXTJOIN`, `_xlfn.CONCAT`, `_xlfn.IFS`, `_xlfn.SWITCH`, `_xlfn.MAXIFS`, `_xlfn.MINIFS`. Written bare, each yields `#NAME?`.
68
+ - **Never use `XLOOKUP`, `XMATCH`, `SORT`, `FILTER`, `UNIQUE`, or `SEQUENCE`.** The runtime's LibreOffice cannot evaluate them under *any* prefix. Newer builds do evaluate them, but they are spilling array functions and an openpyxl-written file has no spill metadata, so only the top-left cell of the range gets a value — and `recalc.py` reports `total_errors: 0` on the truncated result. Use `INDEX`/`MATCH` for lookups, and sort, filter, and de-duplicate in Python before writing the cells.
69
+ - A formula LibreOffice could not parse is written back **lowercased** — a quick tell beside a `#NAME?`.
70
+
71
+ ## openpyxl gotchas
72
+
73
+ - **Reading a model takes two loads.** `data_only=True` yields cached values with the formulas gone; the default yields formula strings with no values. One pass cannot give you both.
74
+ - **`data_only=True` is destructive if you save.** That workbook has no formulas left, so saving replaces every one with a literal — permanently.
75
+ - **`data_only=True` on a file openpyxl just wrote returns `None` everywhere** — run `recalc.py` first. (A formula whose result is `""` also reads back as `None`.)
76
+ - **Merged cells: write the top-left anchor only.** Every other cell in the range is a `MergedCell` whose `.value` is read-only.
77
+ - **`.xlsm` loses its macros unless you pass `keep_vba=True`** to `load_workbook`.
78
+ - **A sheet name containing a space must be quoted** in a cross-sheet reference: `='Assumptions Inputs'!$B$5`. Unquoted, it evaluates to `#VALUE!`.
79
+
80
+ ## Financial models
81
+
82
+ Unless the user says otherwise, or the existing file already does something else.
83
+
84
+ **Color:** blue text (`0,0,255`) for hardcoded inputs and scenario levers · black for formulas ·
85
+ green (`0,128,0`) for links to another sheet · red (`255,0,0`) for links to another file ·
86
+ yellow fill (`255,255,0`) for key assumptions and cells the user should fill in.
87
+
88
+ **Numbers:** currency `$#,##0`, with the unit named in the header (`Revenue ($mm)`) · zeros
89
+ render as `-`, including in percentages (`$#,##0;($#,##0);-`) · negatives in parentheses ·
90
+ percentages `0.0%`, **stored as fractions** (`0.15` renders `15.0%`; storing `15` renders
91
+ `1500.0%`) · valuation multiples `0.0x` · years as text (`"2024"`, never `2,024`).
92
+
93
+ **Structure:** every assumption in its own labeled cell, referenced by the formulas that use it
94
+ (`=B5*(1+$B$6)`, never `=B5*1.05`) · formulas consistent across every projection period, since a
95
+ lone edited cell mid-row is the commonest silent error · guard denominators that can be zero.
96
+
97
+ ## Dependencies
98
+
99
+ `openpyxl`, `pandas`, `markitdown` (pip, preinstalled — install only if an import fails or the command is missing) · LibreOffice (`soffice`, auto-configured for sandboxed environments via `scripts/office/soffice.py`)