@biggora/claude-plugins 1.2.0 → 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 (265) hide show
  1. package/README.md +13 -4
  2. package/package.json +1 -1
  3. package/registry/registry.json +334 -244
  4. package/specs/coding.md +30 -0
  5. package/specs/pod.md +2 -0
  6. package/src/commands/skills/add.js +63 -7
  7. package/src/commands/skills/list.js +23 -52
  8. package/src/commands/skills/remove.js +26 -27
  9. package/src/commands/skills/resolve.js +155 -0
  10. package/src/commands/skills/update.js +58 -74
  11. package/src/skills/captcha/README.md +221 -0
  12. package/src/skills/captcha/SKILL.md +355 -0
  13. package/src/skills/captcha/references/captcha-types.md +254 -0
  14. package/src/skills/captcha/references/services.md +172 -0
  15. package/src/skills/captcha/references/stealth.md +238 -0
  16. package/src/skills/captcha/scripts/solve_captcha.py +323 -0
  17. package/src/skills/captcha/scripts/solve_image_grid.py +350 -0
  18. package/src/skills/google-merchant-api/SKILL.md +581 -0
  19. package/src/skills/google-merchant-api/references/accounts.md +247 -0
  20. package/src/skills/google-merchant-api/references/content-api-legacy.md +216 -0
  21. package/src/skills/google-merchant-api/references/datasources.md +233 -0
  22. package/src/skills/google-merchant-api/references/inventories.md +201 -0
  23. package/src/skills/google-merchant-api/references/migration.md +267 -0
  24. package/src/skills/google-merchant-api/references/products.md +316 -0
  25. package/src/skills/google-merchant-api/references/promotions.md +201 -0
  26. package/src/skills/google-merchant-api/references/reports.md +240 -0
  27. package/src/skills/lv-aggregators-api/SKILL.md +113 -0
  28. package/src/skills/lv-aggregators-api/references/integration-guide.md +368 -0
  29. package/src/skills/lv-aggregators-api/references/kurpirkt.md +103 -0
  30. package/src/skills/lv-aggregators-api/references/salidzini.md +122 -0
  31. package/src/skills/nest-best-practices/SKILL.md +251 -0
  32. package/src/skills/nest-best-practices/references/best-practices-request-lifecycle.md +158 -0
  33. package/src/skills/nest-best-practices/references/cli-monorepo.md +106 -0
  34. package/src/skills/nest-best-practices/references/cli-overview.md +157 -0
  35. package/src/skills/nest-best-practices/references/core-controllers.md +165 -0
  36. package/src/skills/nest-best-practices/references/core-dependency-injection.md +179 -0
  37. package/src/skills/nest-best-practices/references/core-middleware.md +139 -0
  38. package/src/skills/nest-best-practices/references/core-modules.md +138 -0
  39. package/src/skills/nest-best-practices/references/core-providers.md +188 -0
  40. package/src/skills/nest-best-practices/references/faq-raw-body-hybrid.md +122 -0
  41. package/src/skills/nest-best-practices/references/fundamentals-circular-dependency.md +89 -0
  42. package/src/skills/nest-best-practices/references/fundamentals-custom-decorators.md +107 -0
  43. package/src/skills/nest-best-practices/references/fundamentals-dynamic-modules.md +125 -0
  44. package/src/skills/nest-best-practices/references/fundamentals-exception-filters.md +202 -0
  45. package/src/skills/nest-best-practices/references/fundamentals-execution-context.md +107 -0
  46. package/src/skills/nest-best-practices/references/fundamentals-guards.md +136 -0
  47. package/src/skills/nest-best-practices/references/fundamentals-interceptors.md +187 -0
  48. package/src/skills/nest-best-practices/references/fundamentals-lazy-loading.md +89 -0
  49. package/src/skills/nest-best-practices/references/fundamentals-lifecycle-events.md +87 -0
  50. package/src/skills/nest-best-practices/references/fundamentals-module-reference.md +107 -0
  51. package/src/skills/nest-best-practices/references/fundamentals-pipes.md +197 -0
  52. package/src/skills/nest-best-practices/references/fundamentals-provider-scopes.md +92 -0
  53. package/src/skills/nest-best-practices/references/fundamentals-testing.md +142 -0
  54. package/src/skills/nest-best-practices/references/graphql-overview.md +233 -0
  55. package/src/skills/nest-best-practices/references/graphql-resolvers-mutations.md +199 -0
  56. package/src/skills/nest-best-practices/references/graphql-scalars-unions-enums.md +180 -0
  57. package/src/skills/nest-best-practices/references/graphql-subscriptions.md +228 -0
  58. package/src/skills/nest-best-practices/references/microservices-grpc.md +175 -0
  59. package/src/skills/nest-best-practices/references/microservices-overview.md +221 -0
  60. package/src/skills/nest-best-practices/references/microservices-transports.md +119 -0
  61. package/src/skills/nest-best-practices/references/openapi-swagger.md +207 -0
  62. package/src/skills/nest-best-practices/references/recipes-authentication.md +97 -0
  63. package/src/skills/nest-best-practices/references/recipes-cqrs.md +176 -0
  64. package/src/skills/nest-best-practices/references/recipes-crud-generator.md +87 -0
  65. package/src/skills/nest-best-practices/references/recipes-documentation.md +93 -0
  66. package/src/skills/nest-best-practices/references/recipes-mongoose.md +153 -0
  67. package/src/skills/nest-best-practices/references/recipes-prisma.md +98 -0
  68. package/src/skills/nest-best-practices/references/recipes-terminus.md +148 -0
  69. package/src/skills/nest-best-practices/references/recipes-typeorm.md +122 -0
  70. package/src/skills/nest-best-practices/references/security-authorization.md +196 -0
  71. package/src/skills/nest-best-practices/references/security-cors-helmet-rate-limiting.md +204 -0
  72. package/src/skills/nest-best-practices/references/security-encryption-hashing.md +93 -0
  73. package/src/skills/nest-best-practices/references/techniques-caching.md +142 -0
  74. package/src/skills/nest-best-practices/references/techniques-compression-streaming-sse.md +194 -0
  75. package/src/skills/nest-best-practices/references/techniques-configuration.md +132 -0
  76. package/src/skills/nest-best-practices/references/techniques-database.md +153 -0
  77. package/src/skills/nest-best-practices/references/techniques-events.md +163 -0
  78. package/src/skills/nest-best-practices/references/techniques-fastify.md +137 -0
  79. package/src/skills/nest-best-practices/references/techniques-file-upload.md +140 -0
  80. package/src/skills/nest-best-practices/references/techniques-http-module.md +176 -0
  81. package/src/skills/nest-best-practices/references/techniques-logging.md +146 -0
  82. package/src/skills/nest-best-practices/references/techniques-mvc-serve-static.md +132 -0
  83. package/src/skills/nest-best-practices/references/techniques-queues.md +162 -0
  84. package/src/skills/nest-best-practices/references/techniques-serialization.md +158 -0
  85. package/src/skills/nest-best-practices/references/techniques-sessions-cookies.md +167 -0
  86. package/src/skills/nest-best-practices/references/techniques-task-scheduling.md +166 -0
  87. package/src/skills/nest-best-practices/references/techniques-validation.md +126 -0
  88. package/src/skills/nest-best-practices/references/techniques-versioning.md +153 -0
  89. package/src/skills/nest-best-practices/references/websockets-advanced.md +96 -0
  90. package/src/skills/nest-best-practices/references/websockets-gateways.md +215 -0
  91. package/src/skills/tailwindcss-best-practices/SKILL.md +180 -0
  92. package/src/skills/tailwindcss-best-practices/references/best-practices-utility-patterns.md +87 -0
  93. package/src/skills/tailwindcss-best-practices/references/core-installation.md +109 -0
  94. package/src/skills/tailwindcss-best-practices/references/core-preflight.md +200 -0
  95. package/src/skills/tailwindcss-best-practices/references/core-responsive.md +163 -0
  96. package/src/skills/tailwindcss-best-practices/references/core-source-detection.md +114 -0
  97. package/src/skills/tailwindcss-best-practices/references/core-theme.md +108 -0
  98. package/src/skills/tailwindcss-best-practices/references/core-utility-classes.md +59 -0
  99. package/src/skills/tailwindcss-best-practices/references/core-variants.md +204 -0
  100. package/src/skills/tailwindcss-best-practices/references/effects-form-controls.md +76 -0
  101. package/src/skills/tailwindcss-best-practices/references/effects-mask.md +91 -0
  102. package/src/skills/tailwindcss-best-practices/references/effects-scroll-snap.md +59 -0
  103. package/src/skills/tailwindcss-best-practices/references/effects-text-shadow.md +78 -0
  104. package/src/skills/tailwindcss-best-practices/references/effects-transition-animation.md +80 -0
  105. package/src/skills/tailwindcss-best-practices/references/effects-visibility-interactivity.md +82 -0
  106. package/src/skills/tailwindcss-best-practices/references/features-content-detection.md +175 -0
  107. package/src/skills/tailwindcss-best-practices/references/features-custom-styles.md +203 -0
  108. package/src/skills/tailwindcss-best-practices/references/features-dark-mode.md +137 -0
  109. package/src/skills/tailwindcss-best-practices/references/features-functions-directives.md +241 -0
  110. package/src/skills/tailwindcss-best-practices/references/features-upgrade.md +160 -0
  111. package/src/skills/tailwindcss-best-practices/references/layout-aspect-ratio.md +39 -0
  112. package/src/skills/tailwindcss-best-practices/references/layout-columns.md +80 -0
  113. package/src/skills/tailwindcss-best-practices/references/layout-display.md +110 -0
  114. package/src/skills/tailwindcss-best-practices/references/layout-flexbox.md +112 -0
  115. package/src/skills/tailwindcss-best-practices/references/layout-grid.md +87 -0
  116. package/src/skills/tailwindcss-best-practices/references/layout-height.md +97 -0
  117. package/src/skills/tailwindcss-best-practices/references/layout-inset.md +103 -0
  118. package/src/skills/tailwindcss-best-practices/references/layout-logical-properties.md +92 -0
  119. package/src/skills/tailwindcss-best-practices/references/layout-margin.md +126 -0
  120. package/src/skills/tailwindcss-best-practices/references/layout-min-max-sizing.md +63 -0
  121. package/src/skills/tailwindcss-best-practices/references/layout-object-fit-position.md +64 -0
  122. package/src/skills/tailwindcss-best-practices/references/layout-overflow.md +57 -0
  123. package/src/skills/tailwindcss-best-practices/references/layout-padding.md +77 -0
  124. package/src/skills/tailwindcss-best-practices/references/layout-position.md +85 -0
  125. package/src/skills/tailwindcss-best-practices/references/layout-tables.md +67 -0
  126. package/src/skills/tailwindcss-best-practices/references/layout-width.md +102 -0
  127. package/src/skills/tailwindcss-best-practices/references/transform-base.md +68 -0
  128. package/src/skills/tailwindcss-best-practices/references/transform-rotate.md +70 -0
  129. package/src/skills/tailwindcss-best-practices/references/transform-scale.md +83 -0
  130. package/src/skills/tailwindcss-best-practices/references/transform-skew.md +62 -0
  131. package/src/skills/tailwindcss-best-practices/references/transform-translate.md +77 -0
  132. package/src/skills/tailwindcss-best-practices/references/typography-font-text.md +142 -0
  133. package/src/skills/tailwindcss-best-practices/references/typography-list-style.md +65 -0
  134. package/src/skills/tailwindcss-best-practices/references/typography-text-align.md +60 -0
  135. package/src/skills/tailwindcss-best-practices/references/visual-background.md +76 -0
  136. package/src/skills/tailwindcss-best-practices/references/visual-border.md +108 -0
  137. package/src/skills/tailwindcss-best-practices/references/visual-effects.md +111 -0
  138. package/src/skills/tailwindcss-best-practices/references/visual-svg.md +82 -0
  139. package/src/skills/test-mobile-app/SKILL.md +11 -6
  140. package/src/skills/test-mobile-app/scripts/analyze_apk.py +15 -4
  141. package/src/skills/test-mobile-app/scripts/check_environment.py +5 -5
  142. package/src/skills/test-mobile-app/scripts/run_tests.py +1 -1
  143. package/src/skills/test-web-ui/SKILL.md +264 -84
  144. package/src/skills/test-web-ui/scripts/discover.py +25 -12
  145. package/src/skills/test-web-ui/scripts/run_tests.py +3 -2
  146. package/src/skills/typescript-expert/SKILL.md +145 -0
  147. package/src/skills/typescript-expert/commands/typescript-fix.md +65 -0
  148. package/src/skills/typescript-expert/references/advanced-conditional-types.md +190 -0
  149. package/src/skills/typescript-expert/references/advanced-decorators.md +243 -0
  150. package/src/skills/typescript-expert/references/advanced-mapped-types.md +223 -0
  151. package/src/skills/typescript-expert/references/advanced-template-literals.md +209 -0
  152. package/src/skills/typescript-expert/references/advanced-type-guards.md +308 -0
  153. package/src/skills/typescript-expert/references/best-practices-patterns.md +313 -0
  154. package/src/skills/typescript-expert/references/best-practices-performance.md +185 -0
  155. package/src/skills/typescript-expert/references/best-practices-tsconfig.md +242 -0
  156. package/src/skills/typescript-expert/references/core-generics.md +246 -0
  157. package/src/skills/typescript-expert/references/core-interfaces-types.md +231 -0
  158. package/src/skills/typescript-expert/references/core-type-system.md +261 -0
  159. package/src/skills/typescript-expert/references/core-utility-types.md +235 -0
  160. package/src/skills/typescript-expert/references/features-ts5x.md +370 -0
  161. package/src/skills/vite-best-practices/SKILL.md +115 -0
  162. package/src/skills/vite-best-practices/references/build-and-ssr.md +255 -0
  163. package/src/skills/vite-best-practices/references/core-config.md +231 -0
  164. package/src/skills/vite-best-practices/references/core-features.md +222 -0
  165. package/src/skills/vite-best-practices/references/core-plugin-api.md +294 -0
  166. package/src/skills/vite-best-practices/references/environment-api.md +108 -0
  167. package/src/skills/vite-best-practices/references/rolldown-migration.md +242 -0
  168. package/codex-cli-workspace/iteration-1/benchmark.json +0 -122
  169. package/codex-cli-workspace/iteration-1/eval-1-ci-integration/eval_metadata.json +0 -13
  170. package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/grading.json +0 -52
  171. package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/outputs/response.md +0 -163
  172. package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/timing.json +0 -5
  173. package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/grading.json +0 -58
  174. package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/outputs/response.md +0 -151
  175. package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/timing.json +0 -5
  176. package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/eval_metadata.json +0 -13
  177. package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/grading.json +0 -52
  178. package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/outputs/response.md +0 -86
  179. package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/timing.json +0 -5
  180. package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/grading.json +0 -58
  181. package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/outputs/response.md +0 -164
  182. package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/timing.json +0 -5
  183. package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/eval_metadata.json +0 -13
  184. package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/grading.json +0 -52
  185. package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/outputs/response.md +0 -130
  186. package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/timing.json +0 -5
  187. package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/grading.json +0 -64
  188. package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/outputs/response.md +0 -209
  189. package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/timing.json +0 -5
  190. package/codex-cli-workspace/iteration-1/review.html +0 -1325
  191. package/gemini-cli-workspace/iteration-1/benchmark.json +0 -86
  192. package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/eval_metadata.json +0 -37
  193. package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/grading.json +0 -37
  194. package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/outputs/response.md +0 -401
  195. package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/timing.json +0 -5
  196. package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/grading.json +0 -37
  197. package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/outputs/response.md +0 -405
  198. package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/timing.json +0 -5
  199. package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/eval_metadata.json +0 -37
  200. package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/grading.json +0 -37
  201. package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/outputs/response.md +0 -212
  202. package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/timing.json +0 -5
  203. package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/grading.json +0 -37
  204. package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/outputs/response.md +0 -427
  205. package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/timing.json +0 -5
  206. package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/eval_metadata.json +0 -32
  207. package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/grading.json +0 -32
  208. package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/outputs/response.md +0 -171
  209. package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/timing.json +0 -5
  210. package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/grading.json +0 -32
  211. package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/outputs/response.md +0 -199
  212. package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/timing.json +0 -5
  213. package/gemini-cli-workspace/iteration-1/review.html +0 -1325
  214. package/gemini-cli-workspace/iteration-2/benchmark.json +0 -173
  215. package/gemini-cli-workspace/iteration-2/benchmark.md +0 -28
  216. package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/eval_metadata.json +0 -37
  217. package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/grading.json +0 -37
  218. package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/outputs/response.md +0 -195
  219. package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/timing.json +0 -5
  220. package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/grading.json +0 -37
  221. package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/outputs/response.md +0 -377
  222. package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/timing.json +0 -5
  223. package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/eval_metadata.json +0 -37
  224. package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/grading.json +0 -37
  225. package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/outputs/response.md +0 -127
  226. package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/timing.json +0 -5
  227. package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/grading.json +0 -37
  228. package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/outputs/response.md +0 -164
  229. package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/timing.json +0 -5
  230. package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/eval_metadata.json +0 -32
  231. package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/grading.json +0 -32
  232. package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/outputs/response.md +0 -91
  233. package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/timing.json +0 -5
  234. package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/grading.json +0 -32
  235. package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/outputs/response.md +0 -112
  236. package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/timing.json +0 -5
  237. package/gemini-cli-workspace/iteration-2/eval-viewer.html +0 -1325
  238. package/screen-recording-workspace/evals.json +0 -41
  239. package/screen-recording-workspace/iteration-1/benchmark.json +0 -102
  240. package/screen-recording-workspace/iteration-1/eval-0-fullscreen/eval_metadata.json +0 -31
  241. package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/grading.json +0 -11
  242. package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/outputs/demo.mp4 +0 -0
  243. package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/timing.json +0 -5
  244. package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/grading.json +0 -11
  245. package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/outputs/demo.mp4 +0 -0
  246. package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/timing.json +0 -5
  247. package/screen-recording-workspace/iteration-1/eval-1-region-audio/eval_metadata.json +0 -31
  248. package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/grading.json +0 -11
  249. package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/outputs/region_capture.mp4 +0 -0
  250. package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/timing.json +0 -5
  251. package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/grading.json +0 -11
  252. package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/outputs/region_capture.mp4 +0 -0
  253. package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/timing.json +0 -5
  254. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/eval_metadata.json +0 -31
  255. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/grading.json +0 -11
  256. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/outputs/fallback_recording.mp4 +0 -0
  257. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/timing.json +0 -5
  258. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/grading.json +0 -11
  259. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/outputs/fallback_recording.mp4 +0 -0
  260. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/outputs/record_screen.py +0 -67
  261. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/timing.json +0 -5
  262. package/screen-recording-workspace/iteration-1/review.html +0 -1325
  263. package/src/skills/codex-cli/evals/evals.json +0 -47
  264. package/src/skills/gemini-cli/evals/evals.json +0 -46
  265. package/src/skills/tm-search/evals/evals.json +0 -23
@@ -1,41 +0,0 @@
1
- {
2
- "skill_name": "screen-recording",
3
- "evals": [
4
- {
5
- "id": 0,
6
- "prompt": "Record my screen for 5 seconds and save it as demo.mp4",
7
- "expected_output": "A working MP4 file captured from the actual screen using FFmpeg gdigrab (on Windows). File should be non-zero size and playable.",
8
- "files": [],
9
- "assertions": [
10
- {"name": "output_file_exists", "description": "demo.mp4 was created"},
11
- {"name": "output_file_nonzero", "description": "File size > 0 bytes"},
12
- {"name": "used_ffmpeg_gdigrab", "description": "Used FFmpeg with gdigrab backend"},
13
- {"name": "recording_duration_reasonable", "description": "File > 10KB (actual frames captured)"}
14
- ]
15
- },
16
- {
17
- "id": 1,
18
- "prompt": "I need to capture just the top-left 800x600 area of my screen with audio for 5 seconds. Save to region_capture.mp4",
19
- "expected_output": "An MP4 file recording a specific 800x600 region of the screen. Should use FFmpeg with -offset_x 0 -offset_y 0 -video_size 800x600 flags. Audio capture attempted.",
20
- "files": [],
21
- "assertions": [
22
- {"name": "output_file_exists", "description": "region_capture.mp4 was created"},
23
- {"name": "output_file_nonzero", "description": "File size > 0 bytes"},
24
- {"name": "used_region_flags", "description": "Used region capture parameters"},
25
- {"name": "attempted_audio", "description": "Attempted audio capture"}
26
- ]
27
- },
28
- {
29
- "id": 2,
30
- "prompt": "Record my screen for 3 seconds but I don't have FFmpeg installed. Use a Python-only approach. Save to fallback_recording.mp4",
31
- "expected_output": "An MP4 file created using mss + OpenCV (Python fallback). Should capture actual screen content without requiring FFmpeg. File playable despite lower quality.",
32
- "files": [],
33
- "assertions": [
34
- {"name": "output_file_exists", "description": "fallback_recording.mp4 was created"},
35
- {"name": "output_file_nonzero", "description": "File size > 0 bytes"},
36
- {"name": "used_mss_opencv", "description": "Used mss + cv2 Python approach"},
37
- {"name": "no_ffmpeg_used", "description": "Did not invoke FFmpeg binary"}
38
- ]
39
- }
40
- ]
41
- }
@@ -1,102 +0,0 @@
1
- {
2
- "skill_name": "screen-recording",
3
- "iteration": 1,
4
- "timestamp": "2026-03-11T21:25:00Z",
5
- "configurations": [
6
- {
7
- "name": "with_skill",
8
- "evals": [
9
- {
10
- "eval_id": 0,
11
- "eval_name": "fullscreen-ffmpeg-recording",
12
- "pass_rate": 1.0,
13
- "passed": 4,
14
- "total": 4,
15
- "tokens": 71461,
16
- "duration_seconds": 53.3
17
- },
18
- {
19
- "eval_id": 1,
20
- "eval_name": "region-audio-recording",
21
- "pass_rate": 1.0,
22
- "passed": 4,
23
- "total": 4,
24
- "tokens": 74129,
25
- "duration_seconds": 63.7
26
- },
27
- {
28
- "eval_id": 2,
29
- "eval_name": "python-fallback-recording",
30
- "pass_rate": 1.0,
31
- "passed": 4,
32
- "total": 4,
33
- "tokens": 68990,
34
- "duration_seconds": 51.1
35
- }
36
- ],
37
- "aggregate": {
38
- "mean_pass_rate": 1.0,
39
- "stddev_pass_rate": 0.0,
40
- "mean_tokens": 71527,
41
- "stddev_tokens": 2570,
42
- "mean_duration_seconds": 56.0,
43
- "stddev_duration_seconds": 6.7
44
- }
45
- },
46
- {
47
- "name": "without_skill",
48
- "evals": [
49
- {
50
- "eval_id": 0,
51
- "eval_name": "fullscreen-ffmpeg-recording",
52
- "pass_rate": 1.0,
53
- "passed": 4,
54
- "total": 4,
55
- "tokens": 67092,
56
- "duration_seconds": 52.6
57
- },
58
- {
59
- "eval_id": 1,
60
- "eval_name": "region-audio-recording",
61
- "pass_rate": 1.0,
62
- "passed": 4,
63
- "total": 4,
64
- "tokens": 69002,
65
- "duration_seconds": 51.1
66
- },
67
- {
68
- "eval_id": 2,
69
- "eval_name": "python-fallback-recording",
70
- "pass_rate": 1.0,
71
- "passed": 4,
72
- "total": 4,
73
- "tokens": 64484,
74
- "duration_seconds": 51.6
75
- }
76
- ],
77
- "aggregate": {
78
- "mean_pass_rate": 1.0,
79
- "stddev_pass_rate": 0.0,
80
- "mean_tokens": 66859,
81
- "stddev_tokens": 2272,
82
- "mean_duration_seconds": 51.8,
83
- "stddev_duration_seconds": 0.8
84
- }
85
- }
86
- ],
87
- "delta": {
88
- "pass_rate": 0.0,
89
- "tokens": 4668,
90
- "duration_seconds": 4.2
91
- },
92
- "analysis": {
93
- "observations": [
94
- "Both with-skill and without-skill achieved 100% pass rate across all assertions — Claude already has strong baseline knowledge of FFmpeg screen recording.",
95
- "The skill adds ~4,668 tokens overhead (7%) due to reading the skill file, but this is minimal.",
96
- "The skill version took ~4.2s longer on average, mostly from reading reference files. The actual recording time is identical.",
97
- "All assertions are non-discriminating in this iteration — both configurations pass everything. This suggests the current test cases are too straightforward for Claude's existing knowledge.",
98
- "The skill's real value likely shows up in edge cases: Wayland detection, audio device fallback, window capture geometry — scenarios not yet tested.",
99
- "Recommendation: Add harder test cases (Wayland, window title capture, post-processing pipeline) to differentiate skill vs baseline."
100
- ]
101
- }
102
- }
@@ -1,31 +0,0 @@
1
- {
2
- "eval_id": 0,
3
- "eval_name": "fullscreen-ffmpeg-recording",
4
- "prompt": "Record my screen for 5 seconds and save it as demo.mp4",
5
- "assertions": [
6
- {
7
- "name": "output_file_exists",
8
- "description": "demo.mp4 was created in the outputs directory",
9
- "type": "file_exists",
10
- "check": "outputs directory contains demo.mp4"
11
- },
12
- {
13
- "name": "output_file_nonzero",
14
- "description": "Output file is non-empty (has actual video content)",
15
- "type": "file_size",
16
- "check": "demo.mp4 size > 0 bytes"
17
- },
18
- {
19
- "name": "used_ffmpeg_gdigrab",
20
- "description": "Used FFmpeg with gdigrab backend (correct for Windows)",
21
- "type": "command_check",
22
- "check": "Script or command includes 'gdigrab' input format"
23
- },
24
- {
25
- "name": "recording_duration_reasonable",
26
- "description": "File is large enough to contain actual screen frames (>10KB)",
27
- "type": "file_size",
28
- "check": "demo.mp4 size > 10000 bytes"
29
- }
30
- ]
31
- }
@@ -1,11 +0,0 @@
1
- {
2
- "eval_id": 0,
3
- "run_id": "eval-0-with_skill",
4
- "configuration": "with_skill",
5
- "expectations": [
6
- {"text": "output_file_exists", "passed": true, "evidence": "demo.mp4 exists at outputs/demo.mp4 (5,931,176 bytes)"},
7
- {"text": "output_file_nonzero", "passed": true, "evidence": "File size is 5,931,176 bytes (5.8 MB)"},
8
- {"text": "used_ffmpeg_gdigrab", "passed": true, "evidence": "Used ffmpeg -f gdigrab -framerate 30 -draw_mouse 1 -i desktop (Windows gdigrab backend)"},
9
- {"text": "recording_duration_reasonable", "passed": true, "evidence": "5.8 MB file with 97 frames at 30fps — well above 10KB threshold"}
10
- ]
11
- }
@@ -1,5 +0,0 @@
1
- {
2
- "total_tokens": 71461,
3
- "duration_ms": 53348,
4
- "total_duration_seconds": 53.3
5
- }
@@ -1,11 +0,0 @@
1
- {
2
- "eval_id": 0,
3
- "run_id": "eval-0-without_skill",
4
- "configuration": "without_skill",
5
- "expectations": [
6
- {"text": "output_file_exists", "passed": true, "evidence": "demo.mp4 exists at outputs/demo.mp4 (5,861,260 bytes)"},
7
- {"text": "output_file_nonzero", "passed": true, "evidence": "File size is 5,861,260 bytes (5.7 MB)"},
8
- {"text": "used_ffmpeg_gdigrab", "passed": true, "evidence": "Used ffmpeg -f gdigrab -framerate 30 -i desktop (baseline also knew gdigrab)"},
9
- {"text": "recording_duration_reasonable", "passed": true, "evidence": "5.7 MB file with 99 frames at 30fps — well above 10KB threshold"}
10
- ]
11
- }
@@ -1,5 +0,0 @@
1
- {
2
- "total_tokens": 67092,
3
- "duration_ms": 52606,
4
- "total_duration_seconds": 52.6
5
- }
@@ -1,31 +0,0 @@
1
- {
2
- "eval_id": 1,
3
- "eval_name": "region-audio-recording",
4
- "prompt": "I need to capture just the top-left 800x600 area of my screen with audio for 5 seconds. Save to region_capture.mp4",
5
- "assertions": [
6
- {
7
- "name": "output_file_exists",
8
- "description": "region_capture.mp4 was created in the outputs directory",
9
- "type": "file_exists",
10
- "check": "outputs directory contains region_capture.mp4"
11
- },
12
- {
13
- "name": "output_file_nonzero",
14
- "description": "Output file is non-empty (has actual video content)",
15
- "type": "file_size",
16
- "check": "region_capture.mp4 size > 0 bytes"
17
- },
18
- {
19
- "name": "used_region_flags",
20
- "description": "Used region capture flags (offset_x/offset_y/video_size or equivalent)",
21
- "type": "command_check",
22
- "check": "Command includes region parameters like -offset_x, -offset_y, -video_size, or 800x600"
23
- },
24
- {
25
- "name": "attempted_audio",
26
- "description": "Attempted audio capture (dshow/Stereo Mix or audio input flag)",
27
- "type": "command_check",
28
- "check": "Command includes audio device reference (dshow, Stereo Mix, or audio flag)"
29
- }
30
- ]
31
- }
@@ -1,11 +0,0 @@
1
- {
2
- "eval_id": 1,
3
- "run_id": "eval-1-with_skill",
4
- "configuration": "with_skill",
5
- "expectations": [
6
- {"text": "output_file_exists", "passed": true, "evidence": "region_capture.mp4 exists at outputs/region_capture.mp4 (192,448 bytes)"},
7
- {"text": "output_file_nonzero", "passed": true, "evidence": "File size is 192,448 bytes (188 KB)"},
8
- {"text": "used_region_flags", "passed": true, "evidence": "Used -offset_x 0 -offset_y 0 -video_size 800x600 flags as documented in skill"},
9
- {"text": "attempted_audio", "passed": true, "evidence": "Used -f dshow -i audio=\"Microphone (USB DONGLE)\" — attempted Stereo Mix first, fell back to available mic"}
10
- ]
11
- }
@@ -1,5 +0,0 @@
1
- {
2
- "total_tokens": 74129,
3
- "duration_ms": 63718,
4
- "total_duration_seconds": 63.7
5
- }
@@ -1,11 +0,0 @@
1
- {
2
- "eval_id": 1,
3
- "run_id": "eval-1-without_skill",
4
- "configuration": "without_skill",
5
- "expectations": [
6
- {"text": "output_file_exists", "passed": true, "evidence": "region_capture.mp4 exists at outputs/region_capture.mp4 (185,953 bytes)"},
7
- {"text": "output_file_nonzero", "passed": true, "evidence": "File size is 185,953 bytes (182 KB)"},
8
- {"text": "used_region_flags", "passed": true, "evidence": "Used -offset_x 0 -offset_y 0 -video_size 800x600 — baseline also knew region flags"},
9
- {"text": "attempted_audio", "passed": true, "evidence": "Used -f dshow -i audio=\"Microphone (USB DONGLE)\" for audio capture"}
10
- ]
11
- }
@@ -1,5 +0,0 @@
1
- {
2
- "total_tokens": 69002,
3
- "duration_ms": 51072,
4
- "total_duration_seconds": 51.1
5
- }
@@ -1,31 +0,0 @@
1
- {
2
- "eval_id": 2,
3
- "eval_name": "python-fallback-recording",
4
- "prompt": "Record my screen for 3 seconds but I don't have FFmpeg installed. Use a Python-only approach. Save to fallback_recording.mp4",
5
- "assertions": [
6
- {
7
- "name": "output_file_exists",
8
- "description": "fallback_recording.mp4 was created in the outputs directory",
9
- "type": "file_exists",
10
- "check": "outputs directory contains fallback_recording.mp4"
11
- },
12
- {
13
- "name": "output_file_nonzero",
14
- "description": "Output file is non-empty (has actual video content)",
15
- "type": "file_size",
16
- "check": "fallback_recording.mp4 size > 0 bytes"
17
- },
18
- {
19
- "name": "used_mss_opencv",
20
- "description": "Used mss + OpenCV approach (Python-only screen capture)",
21
- "type": "code_check",
22
- "check": "Script imports mss and cv2 (not subprocess calling ffmpeg)"
23
- },
24
- {
25
- "name": "no_ffmpeg_used",
26
- "description": "Did not invoke FFmpeg binary (respects the Python-only constraint)",
27
- "type": "command_check",
28
- "check": "No subprocess call to ffmpeg executable"
29
- }
30
- ]
31
- }
@@ -1,11 +0,0 @@
1
- {
2
- "eval_id": 2,
3
- "run_id": "eval-2-with_skill",
4
- "configuration": "with_skill",
5
- "expectations": [
6
- {"text": "output_file_exists", "passed": true, "evidence": "fallback_recording.mp4 exists at outputs/fallback_recording.mp4 (2,911,684 bytes)"},
7
- {"text": "output_file_nonzero", "passed": true, "evidence": "File size is 2,911,684 bytes (2.8 MB)"},
8
- {"text": "used_mss_opencv", "passed": true, "evidence": "Script used mss.mss() for capture and cv2.VideoWriter for encoding — Python-only approach"},
9
- {"text": "no_ffmpeg_used", "passed": true, "evidence": "FFmpeg mentioned in skill text but never invoked as subprocess — pure Python recording"}
10
- ]
11
- }
@@ -1,5 +0,0 @@
1
- {
2
- "total_tokens": 68990,
3
- "duration_ms": 51054,
4
- "total_duration_seconds": 51.1
5
- }
@@ -1,11 +0,0 @@
1
- {
2
- "eval_id": 2,
3
- "run_id": "eval-2-without_skill",
4
- "configuration": "without_skill",
5
- "expectations": [
6
- {"text": "output_file_exists", "passed": true, "evidence": "fallback_recording.mp4 exists at outputs/fallback_recording.mp4 (2,833,616 bytes)"},
7
- {"text": "output_file_nonzero", "passed": true, "evidence": "File size is 2,833,616 bytes (2.8 MB)"},
8
- {"text": "used_mss_opencv", "passed": true, "evidence": "Script used import mss, import cv2, mss.mss() and VideoWriter — Python-only approach"},
9
- {"text": "no_ffmpeg_used", "passed": true, "evidence": "No ffmpeg references in transcript beyond initial instruction — pure Python recording"}
10
- ]
11
- }
@@ -1,67 +0,0 @@
1
- """
2
- Screen recorder using mss + opencv-python + numpy.
3
- Records the primary monitor for 3 seconds and saves to fallback_recording.mp4
4
- """
5
-
6
- import time
7
- import numpy as np
8
- import cv2
9
- import mss
10
-
11
- OUTPUT_FILE = "fallback_recording.mp4"
12
- DURATION = 3 # seconds
13
- FPS = 15
14
-
15
- def main():
16
- with mss.mss() as sct:
17
- monitor = sct.monitors[1] # primary monitor
18
- width = monitor["width"]
19
- height = monitor["height"]
20
-
21
- # Use mp4v codec for .mp4 output (built into OpenCV, no FFmpeg needed)
22
- fourcc = cv2.VideoWriter_fourcc(*"mp4v")
23
- out = cv2.VideoWriter(OUTPUT_FILE, fourcc, FPS, (width, height))
24
-
25
- if not out.isOpened():
26
- print("ERROR: VideoWriter failed to open. Trying XVID with .avi fallback...")
27
- OUTPUT_AVI = "fallback_recording.avi"
28
- fourcc = cv2.VideoWriter_fourcc(*"XVID")
29
- out = cv2.VideoWriter(OUTPUT_AVI, fourcc, FPS, (width, height))
30
- if not out.isOpened():
31
- print("ERROR: Could not open any VideoWriter.")
32
- return
33
-
34
- frame_interval = 1.0 / FPS
35
- start_time = time.time()
36
- frame_count = 0
37
-
38
- print(f"Recording screen ({width}x{height}) for {DURATION}s at {FPS} FPS...")
39
-
40
- while True:
41
- frame_start = time.time()
42
- elapsed = frame_start - start_time
43
- if elapsed >= DURATION:
44
- break
45
-
46
- # Capture screen
47
- img = sct.grab(monitor)
48
- # Convert to numpy array (BGRA format from mss)
49
- frame = np.array(img)
50
- # Convert BGRA to BGR for OpenCV
51
- frame_bgr = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)
52
- out.write(frame_bgr)
53
- frame_count += 1
54
-
55
- # Maintain target FPS
56
- capture_time = time.time() - frame_start
57
- sleep_time = frame_interval - capture_time
58
- if sleep_time > 0:
59
- time.sleep(sleep_time)
60
-
61
- out.release()
62
- actual_duration = time.time() - start_time
63
- print(f"Done. Captured {frame_count} frames in {actual_duration:.2f}s")
64
- print(f"Saved to {OUTPUT_FILE}")
65
-
66
- if __name__ == "__main__":
67
- main()
@@ -1,5 +0,0 @@
1
- {
2
- "total_tokens": 64484,
3
- "duration_ms": 51560,
4
- "total_duration_seconds": 51.6
5
- }