@rubix0270/arboris 1.0.2 → 1.0.3

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 (451) hide show
  1. package/package.json +8 -20
  2. package/run.mjs +10 -0
  3. package/dist/cli.mjs +0 -383
  4. package/manifest.json +0 -323
  5. package/prisma/skills/accessibility/SKILL.md +0 -147
  6. package/prisma/skills/agent-architecture-audit/SKILL.md +0 -257
  7. package/prisma/skills/agent-eval/SKILL.md +0 -146
  8. package/prisma/skills/agent-harness-construction/SKILL.md +0 -74
  9. package/prisma/skills/agent-introspection-debugging/SKILL.md +0 -154
  10. package/prisma/skills/agent-payment-x402/SKILL.md +0 -225
  11. package/prisma/skills/agent-self-evaluation/SKILL.md +0 -182
  12. package/prisma/skills/agent-self-evaluation/examples/high-score-example.md +0 -87
  13. package/prisma/skills/agent-self-evaluation/examples/low-score-example.md +0 -86
  14. package/prisma/skills/agent-self-evaluation/references/evaluation-criteria.md +0 -71
  15. package/prisma/skills/agent-self-evaluation/references/hook-integration.md +0 -64
  16. package/prisma/skills/agent-self-evaluation/scripts/evaluate.py +0 -408
  17. package/prisma/skills/agent-self-evaluation/templates/evaluation-report.md +0 -86
  18. package/prisma/skills/agent-sort/SKILL.md +0 -216
  19. package/prisma/skills/agentic-engineering/SKILL.md +0 -64
  20. package/prisma/skills/agentic-os/SKILL.md +0 -388
  21. package/prisma/skills/ai-first-engineering/SKILL.md +0 -52
  22. package/prisma/skills/ai-regression-testing/SKILL.md +0 -386
  23. package/prisma/skills/android-clean-architecture/SKILL.md +0 -340
  24. package/prisma/skills/angular-developer/SKILL.md +0 -155
  25. package/prisma/skills/angular-developer/references/angular-animations.md +0 -160
  26. package/prisma/skills/angular-developer/references/angular-aria.md +0 -410
  27. package/prisma/skills/angular-developer/references/cli.md +0 -86
  28. package/prisma/skills/angular-developer/references/component-harnesses.md +0 -59
  29. package/prisma/skills/angular-developer/references/component-styling.md +0 -91
  30. package/prisma/skills/angular-developer/references/components.md +0 -117
  31. package/prisma/skills/angular-developer/references/creating-services.md +0 -97
  32. package/prisma/skills/angular-developer/references/data-resolvers.md +0 -69
  33. package/prisma/skills/angular-developer/references/define-routes.md +0 -67
  34. package/prisma/skills/angular-developer/references/defining-providers.md +0 -72
  35. package/prisma/skills/angular-developer/references/di-fundamentals.md +0 -120
  36. package/prisma/skills/angular-developer/references/e2e-testing.md +0 -56
  37. package/prisma/skills/angular-developer/references/effects.md +0 -83
  38. package/prisma/skills/angular-developer/references/hierarchical-injectors.md +0 -43
  39. package/prisma/skills/angular-developer/references/host-elements.md +0 -80
  40. package/prisma/skills/angular-developer/references/injection-context.md +0 -63
  41. package/prisma/skills/angular-developer/references/inputs.md +0 -101
  42. package/prisma/skills/angular-developer/references/linked-signal.md +0 -59
  43. package/prisma/skills/angular-developer/references/loading-strategies.md +0 -61
  44. package/prisma/skills/angular-developer/references/mcp.md +0 -108
  45. package/prisma/skills/angular-developer/references/navigate-to-routes.md +0 -69
  46. package/prisma/skills/angular-developer/references/outputs.md +0 -86
  47. package/prisma/skills/angular-developer/references/reactive-forms.md +0 -122
  48. package/prisma/skills/angular-developer/references/rendering-strategies.md +0 -44
  49. package/prisma/skills/angular-developer/references/resource.md +0 -77
  50. package/prisma/skills/angular-developer/references/route-animations.md +0 -56
  51. package/prisma/skills/angular-developer/references/route-guards.md +0 -52
  52. package/prisma/skills/angular-developer/references/router-lifecycle.md +0 -45
  53. package/prisma/skills/angular-developer/references/router-testing.md +0 -87
  54. package/prisma/skills/angular-developer/references/show-routes-with-outlets.md +0 -68
  55. package/prisma/skills/angular-developer/references/signal-forms.md +0 -795
  56. package/prisma/skills/angular-developer/references/signals-overview.md +0 -94
  57. package/prisma/skills/angular-developer/references/tailwind-css.md +0 -69
  58. package/prisma/skills/angular-developer/references/template-driven-forms.md +0 -114
  59. package/prisma/skills/angular-developer/references/testing-fundamentals.md +0 -65
  60. package/prisma/skills/api-connector-builder/SKILL.md +0 -121
  61. package/prisma/skills/api-design/SKILL.md +0 -524
  62. package/prisma/skills/architecture-decision-records/SKILL.md +0 -180
  63. package/prisma/skills/article-writing/SKILL.md +0 -80
  64. package/prisma/skills/automation-audit-ops/SKILL.md +0 -143
  65. package/prisma/skills/autonomous-agent-harness/SKILL.md +0 -274
  66. package/prisma/skills/autonomous-loops/SKILL.md +0 -611
  67. package/prisma/skills/backend-patterns/SKILL.md +0 -562
  68. package/prisma/skills/benchmark/SKILL.md +0 -94
  69. package/prisma/skills/benchmark-methodology/SKILL.md +0 -190
  70. package/prisma/skills/benchmark-optimization-loop/SKILL.md +0 -70
  71. package/prisma/skills/blender-motion-state-inspection/SKILL.md +0 -165
  72. package/prisma/skills/blueprint/SKILL.md +0 -106
  73. package/prisma/skills/brand-discovery/SKILL.md +0 -145
  74. package/prisma/skills/brand-discovery/references/10_purpose-why.md +0 -40
  75. package/prisma/skills/brand-discovery/references/20_positioning.md +0 -44
  76. package/prisma/skills/brand-discovery/references/30_audience-niche.md +0 -52
  77. package/prisma/skills/brand-discovery/references/40_personality-archetype.md +0 -57
  78. package/prisma/skills/brand-discovery/references/50_voice-tone.md +0 -59
  79. package/prisma/skills/brand-discovery/references/60_narrative-story.md +0 -50
  80. package/prisma/skills/brand-discovery/references/70_founder-tension.md +0 -49
  81. package/prisma/skills/brand-discovery/references/90_SYNTHESIS.md +0 -133
  82. package/prisma/skills/brand-voice/SKILL.md +0 -98
  83. package/prisma/skills/brand-voice/references/voice-profile-schema.md +0 -55
  84. package/prisma/skills/browser-qa/SKILL.md +0 -105
  85. package/prisma/skills/bun-runtime/SKILL.md +0 -85
  86. package/prisma/skills/canary-watch/SKILL.md +0 -108
  87. package/prisma/skills/carrier-relationship-management/SKILL.md +0 -212
  88. package/prisma/skills/cisco-ios-patterns/SKILL.md +0 -164
  89. package/prisma/skills/ck/SKILL.md +0 -148
  90. package/prisma/skills/ck/commands/forget.mjs +0 -44
  91. package/prisma/skills/ck/commands/info.mjs +0 -24
  92. package/prisma/skills/ck/commands/init.mjs +0 -143
  93. package/prisma/skills/ck/commands/list.mjs +0 -40
  94. package/prisma/skills/ck/commands/migrate.mjs +0 -202
  95. package/prisma/skills/ck/commands/resume.mjs +0 -36
  96. package/prisma/skills/ck/commands/save.mjs +0 -210
  97. package/prisma/skills/ck/commands/shared.mjs +0 -387
  98. package/prisma/skills/ck/hooks/session-start.mjs +0 -224
  99. package/prisma/skills/claude-devfleet/SKILL.md +0 -112
  100. package/prisma/skills/click-path-audit/SKILL.md +0 -245
  101. package/prisma/skills/clickhouse-io/SKILL.md +0 -440
  102. package/prisma/skills/code-tour/SKILL.md +0 -254
  103. package/prisma/skills/codebase-onboarding/SKILL.md +0 -234
  104. package/prisma/skills/codehealth-mcp/SKILL.md +0 -167
  105. package/prisma/skills/coding-standards/SKILL.md +0 -551
  106. package/prisma/skills/competitive-platform-analysis/SKILL.md +0 -214
  107. package/prisma/skills/competitive-report-structure/SKILL.md +0 -162
  108. package/prisma/skills/compose-multiplatform-patterns/SKILL.md +0 -300
  109. package/prisma/skills/config-gc/SKILL.md +0 -120
  110. package/prisma/skills/configure-ecc/SKILL.md +0 -385
  111. package/prisma/skills/connections-optimizer/SKILL.md +0 -190
  112. package/prisma/skills/content-engine/SKILL.md +0 -132
  113. package/prisma/skills/content-hash-cache-pattern/SKILL.md +0 -162
  114. package/prisma/skills/context-budget/SKILL.md +0 -136
  115. package/prisma/skills/continuous-agent-loop/SKILL.md +0 -46
  116. package/prisma/skills/continuous-learning/SKILL.md +0 -132
  117. package/prisma/skills/continuous-learning/config.json +0 -18
  118. package/prisma/skills/continuous-learning/evaluate-session.sh +0 -69
  119. package/prisma/skills/continuous-learning-v2/SKILL.md +0 -361
  120. package/prisma/skills/continuous-learning-v2/agents/observer-loop.sh +0 -359
  121. package/prisma/skills/continuous-learning-v2/agents/observer.md +0 -189
  122. package/prisma/skills/continuous-learning-v2/agents/session-guardian.sh +0 -150
  123. package/prisma/skills/continuous-learning-v2/agents/start-observer.sh +0 -248
  124. package/prisma/skills/continuous-learning-v2/config.json +0 -8
  125. package/prisma/skills/continuous-learning-v2/hooks/observe.sh +0 -585
  126. package/prisma/skills/continuous-learning-v2/scripts/detect-project.sh +0 -322
  127. package/prisma/skills/continuous-learning-v2/scripts/instinct-cli.py +0 -1956
  128. package/prisma/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +0 -31
  129. package/prisma/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +0 -68
  130. package/prisma/skills/continuous-learning-v2/scripts/test_parse_instinct.py +0 -1421
  131. package/prisma/skills/cost-aware-llm-pipeline/SKILL.md +0 -184
  132. package/prisma/skills/cost-tracking/SKILL.md +0 -97
  133. package/prisma/skills/council/SKILL.md +0 -204
  134. package/prisma/skills/cpp-coding-standards/SKILL.md +0 -724
  135. package/prisma/skills/cpp-testing/SKILL.md +0 -325
  136. package/prisma/skills/crosspost/SKILL.md +0 -112
  137. package/prisma/skills/csharp-testing/SKILL.md +0 -322
  138. package/prisma/skills/customer-billing-ops/SKILL.md +0 -141
  139. package/prisma/skills/customs-trade-compliance/SKILL.md +0 -263
  140. package/prisma/skills/dart-flutter-patterns/SKILL.md +0 -564
  141. package/prisma/skills/dashboard-builder/SKILL.md +0 -109
  142. package/prisma/skills/data-scraper-agent/SKILL.md +0 -765
  143. package/prisma/skills/data-throughput-accelerator/SKILL.md +0 -73
  144. package/prisma/skills/database-migrations/SKILL.md +0 -430
  145. package/prisma/skills/deep-research/SKILL.md +0 -160
  146. package/prisma/skills/defi-amm-security/SKILL.md +0 -167
  147. package/prisma/skills/delivery-gate/SKILL.md +0 -126
  148. package/prisma/skills/delivery-gate/hooks/quality-gate.py +0 -220
  149. package/prisma/skills/deployment-patterns/SKILL.md +0 -428
  150. package/prisma/skills/design-system/SKILL.md +0 -83
  151. package/prisma/skills/django-celery/SKILL.md +0 -458
  152. package/prisma/skills/django-patterns/SKILL.md +0 -735
  153. package/prisma/skills/django-security/SKILL.md +0 -644
  154. package/prisma/skills/django-tdd/SKILL.md +0 -730
  155. package/prisma/skills/django-verification/SKILL.md +0 -470
  156. package/prisma/skills/dmux-workflows/SKILL.md +0 -192
  157. package/prisma/skills/docker-patterns/SKILL.md +0 -365
  158. package/prisma/skills/documentation-lookup/SKILL.md +0 -91
  159. package/prisma/skills/dotnet-patterns/SKILL.md +0 -322
  160. package/prisma/skills/dynamic-workflow-mode/SKILL.md +0 -124
  161. package/prisma/skills/e2e-testing/SKILL.md +0 -327
  162. package/prisma/skills/ecc-guide/SKILL.md +0 -190
  163. package/prisma/skills/ecc-recipes/SKILL.md +0 -149
  164. package/prisma/skills/ecc-tools-cost-audit/SKILL.md +0 -161
  165. package/prisma/skills/email-ops/SKILL.md +0 -122
  166. package/prisma/skills/energy-procurement/SKILL.md +0 -228
  167. package/prisma/skills/enterprise-agent-ops/SKILL.md +0 -51
  168. package/prisma/skills/error-handling/SKILL.md +0 -377
  169. package/prisma/skills/eval-harness/SKILL.md +0 -271
  170. package/prisma/skills/evm-token-decimals/SKILL.md +0 -131
  171. package/prisma/skills/exa-search/SKILL.md +0 -108
  172. package/prisma/skills/fal-ai-media/SKILL.md +0 -289
  173. package/prisma/skills/fastapi-patterns/SKILL.md +0 -514
  174. package/prisma/skills/finance-billing-ops/SKILL.md +0 -128
  175. package/prisma/skills/flox-environments/SKILL.md +0 -497
  176. package/prisma/skills/flutter-dart-code-review/SKILL.md +0 -436
  177. package/prisma/skills/foundation-models-on-device/SKILL.md +0 -243
  178. package/prisma/skills/frontend-a11y/SKILL.md +0 -446
  179. package/prisma/skills/frontend-design-direction/SKILL.md +0 -93
  180. package/prisma/skills/frontend-patterns/SKILL.md +0 -657
  181. package/prisma/skills/frontend-slides/SKILL.md +0 -185
  182. package/prisma/skills/frontend-slides/STYLE_PRESETS.md +0 -330
  183. package/prisma/skills/frontend-slides/animation-patterns.md +0 -122
  184. package/prisma/skills/frontend-slides/html-template.md +0 -419
  185. package/prisma/skills/frontend-slides/scripts/export-pdf.sh +0 -418
  186. package/prisma/skills/frontend-slides/scripts/extract-pptx.py +0 -96
  187. package/prisma/skills/frontend-slides/viewport-base.css +0 -153
  188. package/prisma/skills/fsharp-testing/SKILL.md +0 -281
  189. package/prisma/skills/gan-style-harness/SKILL.md +0 -279
  190. package/prisma/skills/gateguard/SKILL.md +0 -133
  191. package/prisma/skills/generating-python-installer/SKILL.md +0 -820
  192. package/prisma/skills/git-workflow/SKILL.md +0 -716
  193. package/prisma/skills/github-ops/SKILL.md +0 -145
  194. package/prisma/skills/golang-patterns/SKILL.md +0 -675
  195. package/prisma/skills/golang-testing/SKILL.md +0 -721
  196. package/prisma/skills/google-workspace-ops/SKILL.md +0 -96
  197. package/prisma/skills/growth-log/SKILL.md +0 -128
  198. package/prisma/skills/healthcare-cdss-patterns/SKILL.md +0 -246
  199. package/prisma/skills/healthcare-emr-patterns/SKILL.md +0 -160
  200. package/prisma/skills/healthcare-eval-harness/SKILL.md +0 -208
  201. package/prisma/skills/healthcare-phi-compliance/SKILL.md +0 -146
  202. package/prisma/skills/hermes-imports/SKILL.md +0 -89
  203. package/prisma/skills/hexagonal-architecture/SKILL.md +0 -277
  204. package/prisma/skills/hipaa-compliance/SKILL.md +0 -79
  205. package/prisma/skills/homelab-network-readiness/SKILL.md +0 -170
  206. package/prisma/skills/homelab-network-setup/SKILL.md +0 -130
  207. package/prisma/skills/homelab-pihole-dns/SKILL.md +0 -275
  208. package/prisma/skills/homelab-vlan-segmentation/SKILL.md +0 -312
  209. package/prisma/skills/homelab-wireguard-vpn/SKILL.md +0 -306
  210. package/prisma/skills/hookify-rules/SKILL.md +0 -128
  211. package/prisma/skills/inherit-legacy-style/SKILL.md +0 -157
  212. package/prisma/skills/intent-driven-development/SKILL.md +0 -360
  213. package/prisma/skills/inventory-demand-planning/SKILL.md +0 -247
  214. package/prisma/skills/investor-materials/SKILL.md +0 -97
  215. package/prisma/skills/investor-outreach/SKILL.md +0 -92
  216. package/prisma/skills/ios-icon-gen/SKILL.md +0 -158
  217. package/prisma/skills/ios-icon-gen/scripts/generate_icons.swift +0 -258
  218. package/prisma/skills/ios-icon-gen/scripts/iconify_gen.sh +0 -235
  219. package/prisma/skills/iterative-retrieval/SKILL.md +0 -212
  220. package/prisma/skills/ito-basket-compare/SKILL.md +0 -64
  221. package/prisma/skills/ito-data-atlas-agent/SKILL.md +0 -64
  222. package/prisma/skills/ito-market-intelligence/SKILL.md +0 -61
  223. package/prisma/skills/ito-trade-planner/SKILL.md +0 -68
  224. package/prisma/skills/java-coding-standards/SKILL.md +0 -384
  225. package/prisma/skills/jira-integration/SKILL.md +0 -303
  226. package/prisma/skills/jpa-patterns/SKILL.md +0 -152
  227. package/prisma/skills/knowledge-ops/SKILL.md +0 -155
  228. package/prisma/skills/kotlin-coroutines-flows/SKILL.md +0 -285
  229. package/prisma/skills/kotlin-exposed-patterns/SKILL.md +0 -720
  230. package/prisma/skills/kotlin-ktor-patterns/SKILL.md +0 -690
  231. package/prisma/skills/kotlin-patterns/SKILL.md +0 -712
  232. package/prisma/skills/kotlin-testing/SKILL.md +0 -825
  233. package/prisma/skills/kubernetes-patterns/SKILL.md +0 -756
  234. package/prisma/skills/laravel-patterns/SKILL.md +0 -416
  235. package/prisma/skills/laravel-plugin-discovery/SKILL.md +0 -230
  236. package/prisma/skills/laravel-security/SKILL.md +0 -948
  237. package/prisma/skills/laravel-tdd/SKILL.md +0 -675
  238. package/prisma/skills/laravel-verification/SKILL.md +0 -180
  239. package/prisma/skills/latency-critical-systems/SKILL.md +0 -74
  240. package/prisma/skills/lead-intelligence/SKILL.md +0 -322
  241. package/prisma/skills/lead-intelligence/agents/enrichment-agent.md +0 -85
  242. package/prisma/skills/lead-intelligence/agents/mutual-mapper.md +0 -75
  243. package/prisma/skills/lead-intelligence/agents/outreach-drafter.md +0 -98
  244. package/prisma/skills/lead-intelligence/agents/signal-scorer.md +0 -60
  245. package/prisma/skills/liquid-glass-design/SKILL.md +0 -279
  246. package/prisma/skills/llm-trading-agent-security/SKILL.md +0 -147
  247. package/prisma/skills/logistics-exception-management/SKILL.md +0 -222
  248. package/prisma/skills/loop-design-check/SKILL.md +0 -143
  249. package/prisma/skills/mailtrap-email-integration/SKILL.md +0 -77
  250. package/prisma/skills/make-interfaces-feel-better/SKILL.md +0 -152
  251. package/prisma/skills/manim-video/SKILL.md +0 -90
  252. package/prisma/skills/manim-video/assets/network_graph_scene.py +0 -52
  253. package/prisma/skills/market-research/SKILL.md +0 -76
  254. package/prisma/skills/marketing-campaign/SKILL.md +0 -114
  255. package/prisma/skills/mcp-server-patterns/SKILL.md +0 -70
  256. package/prisma/skills/messages-ops/SKILL.md +0 -105
  257. package/prisma/skills/ml-adoption-playbook/SKILL.md +0 -57
  258. package/prisma/skills/mle-workflow/SKILL.md +0 -347
  259. package/prisma/skills/motion-advanced/SKILL.md +0 -596
  260. package/prisma/skills/motion-foundations/SKILL.md +0 -299
  261. package/prisma/skills/motion-patterns/SKILL.md +0 -434
  262. package/prisma/skills/motion-ui/SKILL.md +0 -576
  263. package/prisma/skills/mysql-patterns/SKILL.md +0 -413
  264. package/prisma/skills/nanoclaw-repl/SKILL.md +0 -34
  265. package/prisma/skills/nestjs-patterns/SKILL.md +0 -231
  266. package/prisma/skills/netmiko-ssh-automation/SKILL.md +0 -174
  267. package/prisma/skills/network-bgp-diagnostics/SKILL.md +0 -168
  268. package/prisma/skills/network-config-validation/SKILL.md +0 -211
  269. package/prisma/skills/network-interface-health/SKILL.md +0 -153
  270. package/prisma/skills/nextjs-turbopack/SKILL.md +0 -58
  271. package/prisma/skills/nodejs-keccak256/SKILL.md +0 -103
  272. package/prisma/skills/nutrient-document-processing/SKILL.md +0 -168
  273. package/prisma/skills/nuxt4-patterns/SKILL.md +0 -101
  274. package/prisma/skills/openclaw-persona-forge/SKILL.md +0 -289
  275. package/prisma/skills/openclaw-persona-forge/gacha.py +0 -224
  276. package/prisma/skills/openclaw-persona-forge/gacha.sh +0 -5
  277. package/prisma/skills/openclaw-persona-forge/references/avatar-style.md +0 -124
  278. package/prisma/skills/openclaw-persona-forge/references/boundary-rules.md +0 -53
  279. package/prisma/skills/openclaw-persona-forge/references/error-handling.md +0 -53
  280. package/prisma/skills/openclaw-persona-forge/references/identity-tension.md +0 -48
  281. package/prisma/skills/openclaw-persona-forge/references/naming-system.md +0 -39
  282. package/prisma/skills/openclaw-persona-forge/references/output-template.md +0 -166
  283. package/prisma/skills/opensource-pipeline/SKILL.md +0 -256
  284. package/prisma/skills/orch-add-feature/SKILL.md +0 -45
  285. package/prisma/skills/orch-build-mvp/SKILL.md +0 -49
  286. package/prisma/skills/orch-change-feature/SKILL.md +0 -43
  287. package/prisma/skills/orch-fix-defect/SKILL.md +0 -43
  288. package/prisma/skills/orch-pipeline/SKILL.md +0 -121
  289. package/prisma/skills/orch-refine-code/SKILL.md +0 -44
  290. package/prisma/skills/parallel-execution-optimizer/SKILL.md +0 -73
  291. package/prisma/skills/perl-patterns/SKILL.md +0 -505
  292. package/prisma/skills/perl-security/SKILL.md +0 -504
  293. package/prisma/skills/perl-testing/SKILL.md +0 -476
  294. package/prisma/skills/plan-orchestrate/SKILL.md +0 -263
  295. package/prisma/skills/plankton-code-quality/SKILL.md +0 -237
  296. package/prisma/skills/postgres-patterns/SKILL.md +0 -148
  297. package/prisma/skills/prediction-market-oracle-research/SKILL.md +0 -64
  298. package/prisma/skills/prediction-market-risk-review/SKILL.md +0 -61
  299. package/prisma/skills/prisma-patterns/SKILL.md +0 -401
  300. package/prisma/skills/product-capability/SKILL.md +0 -142
  301. package/prisma/skills/product-lens/SKILL.md +0 -93
  302. package/prisma/skills/production-audit/SKILL.md +0 -207
  303. package/prisma/skills/production-scheduling/SKILL.md +0 -238
  304. package/prisma/skills/project-flow-ops/SKILL.md +0 -112
  305. package/prisma/skills/prompt-optimizer/SKILL.md +0 -398
  306. package/prisma/skills/python-patterns/SKILL.md +0 -751
  307. package/prisma/skills/python-testing/SKILL.md +0 -817
  308. package/prisma/skills/pytorch-patterns/SKILL.md +0 -397
  309. package/prisma/skills/quality-nonconformance/SKILL.md +0 -260
  310. package/prisma/skills/quarkus-patterns/SKILL.md +0 -723
  311. package/prisma/skills/quarkus-security/SKILL.md +0 -468
  312. package/prisma/skills/quarkus-tdd/SKILL.md +0 -812
  313. package/prisma/skills/quarkus-verification/SKILL.md +0 -480
  314. package/prisma/skills/ralphinho-rfc-pipeline/SKILL.md +0 -68
  315. package/prisma/skills/react-native-patterns/SKILL.md +0 -326
  316. package/prisma/skills/react-patterns/SKILL.md +0 -342
  317. package/prisma/skills/react-performance/SKILL.md +0 -575
  318. package/prisma/skills/react-testing/SKILL.md +0 -424
  319. package/prisma/skills/recsys-pipeline-architect/SKILL.md +0 -115
  320. package/prisma/skills/recursive-decision-ledger/SKILL.md +0 -80
  321. package/prisma/skills/redis-patterns/SKILL.md +0 -404
  322. package/prisma/skills/regex-vs-llm-structured-text/SKILL.md +0 -221
  323. package/prisma/skills/remotion-video-creation/SKILL.md +0 -43
  324. package/prisma/skills/remotion-video-creation/rules/3d.md +0 -86
  325. package/prisma/skills/remotion-video-creation/rules/animations.md +0 -29
  326. package/prisma/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +0 -173
  327. package/prisma/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +0 -100
  328. package/prisma/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +0 -108
  329. package/prisma/skills/remotion-video-creation/rules/assets.md +0 -78
  330. package/prisma/skills/remotion-video-creation/rules/audio.md +0 -172
  331. package/prisma/skills/remotion-video-creation/rules/calculate-metadata.md +0 -104
  332. package/prisma/skills/remotion-video-creation/rules/can-decode.md +0 -75
  333. package/prisma/skills/remotion-video-creation/rules/charts.md +0 -58
  334. package/prisma/skills/remotion-video-creation/rules/compositions.md +0 -146
  335. package/prisma/skills/remotion-video-creation/rules/display-captions.md +0 -126
  336. package/prisma/skills/remotion-video-creation/rules/extract-frames.md +0 -229
  337. package/prisma/skills/remotion-video-creation/rules/fonts.md +0 -152
  338. package/prisma/skills/remotion-video-creation/rules/get-audio-duration.md +0 -58
  339. package/prisma/skills/remotion-video-creation/rules/get-video-dimensions.md +0 -68
  340. package/prisma/skills/remotion-video-creation/rules/get-video-duration.md +0 -58
  341. package/prisma/skills/remotion-video-creation/rules/gifs.md +0 -138
  342. package/prisma/skills/remotion-video-creation/rules/images.md +0 -130
  343. package/prisma/skills/remotion-video-creation/rules/import-srt-captions.md +0 -67
  344. package/prisma/skills/remotion-video-creation/rules/lottie.md +0 -67
  345. package/prisma/skills/remotion-video-creation/rules/measuring-dom-nodes.md +0 -34
  346. package/prisma/skills/remotion-video-creation/rules/measuring-text.md +0 -143
  347. package/prisma/skills/remotion-video-creation/rules/sequencing.md +0 -106
  348. package/prisma/skills/remotion-video-creation/rules/tailwind.md +0 -11
  349. package/prisma/skills/remotion-video-creation/rules/text-animations.md +0 -20
  350. package/prisma/skills/remotion-video-creation/rules/timing.md +0 -179
  351. package/prisma/skills/remotion-video-creation/rules/transcribe-captions.md +0 -19
  352. package/prisma/skills/remotion-video-creation/rules/transitions.md +0 -122
  353. package/prisma/skills/remotion-video-creation/rules/trimming.md +0 -52
  354. package/prisma/skills/remotion-video-creation/rules/videos.md +0 -171
  355. package/prisma/skills/repo-scan/SKILL.md +0 -79
  356. package/prisma/skills/research-ops/SKILL.md +0 -113
  357. package/prisma/skills/returns-reverse-logistics/SKILL.md +0 -240
  358. package/prisma/skills/rules-distill/SKILL.md +0 -265
  359. package/prisma/skills/rules-distill/scripts/scan-rules.sh +0 -58
  360. package/prisma/skills/rules-distill/scripts/scan-skills.sh +0 -129
  361. package/prisma/skills/rust-patterns/SKILL.md +0 -500
  362. package/prisma/skills/rust-testing/SKILL.md +0 -501
  363. package/prisma/skills/safety-guard/SKILL.md +0 -76
  364. package/prisma/skills/santa-method/SKILL.md +0 -307
  365. package/prisma/skills/scientific-db-pubmed-database/SKILL.md +0 -176
  366. package/prisma/skills/scientific-db-uspto-database/SKILL.md +0 -178
  367. package/prisma/skills/scientific-pkg-gget/SKILL.md +0 -167
  368. package/prisma/skills/scientific-thinking-literature-review/SKILL.md +0 -193
  369. package/prisma/skills/scientific-thinking-scholar-evaluation/SKILL.md +0 -161
  370. package/prisma/skills/search-first/SKILL.md +0 -183
  371. package/prisma/skills/security-bounty-hunter/SKILL.md +0 -100
  372. package/prisma/skills/security-review/SKILL.md +0 -504
  373. package/prisma/skills/security-review/cloud-infrastructure-security.md +0 -361
  374. package/prisma/skills/security-scan/SKILL.md +0 -166
  375. package/prisma/skills/seo/SKILL.md +0 -155
  376. package/prisma/skills/skill-comply/SKILL.md +0 -59
  377. package/prisma/skills/skill-comply/fixtures/compliant_trace.jsonl +0 -5
  378. package/prisma/skills/skill-comply/fixtures/noncompliant_trace.jsonl +0 -3
  379. package/prisma/skills/skill-comply/fixtures/tdd_spec.yaml +0 -44
  380. package/prisma/skills/skill-comply/prompts/classifier.md +0 -24
  381. package/prisma/skills/skill-comply/prompts/scenario_generator.md +0 -62
  382. package/prisma/skills/skill-comply/prompts/spec_generator.md +0 -42
  383. package/prisma/skills/skill-comply/pyproject.toml +0 -15
  384. package/prisma/skills/skill-comply/scripts/__init__.py +0 -0
  385. package/prisma/skills/skill-comply/scripts/classifier.py +0 -85
  386. package/prisma/skills/skill-comply/scripts/grader.py +0 -124
  387. package/prisma/skills/skill-comply/scripts/parser.py +0 -107
  388. package/prisma/skills/skill-comply/scripts/report.py +0 -170
  389. package/prisma/skills/skill-comply/scripts/run.py +0 -127
  390. package/prisma/skills/skill-comply/scripts/runner.py +0 -194
  391. package/prisma/skills/skill-comply/scripts/scenario_generator.py +0 -70
  392. package/prisma/skills/skill-comply/scripts/spec_generator.py +0 -72
  393. package/prisma/skills/skill-comply/scripts/utils.py +0 -13
  394. package/prisma/skills/skill-comply/tests/test_grader.py +0 -197
  395. package/prisma/skills/skill-comply/tests/test_parser.py +0 -90
  396. package/prisma/skills/skill-comply/tests/test_runner.py +0 -172
  397. package/prisma/skills/skill-scout/SKILL.md +0 -141
  398. package/prisma/skills/skill-stocktake/SKILL.md +0 -195
  399. package/prisma/skills/skill-stocktake/scripts/quick-diff.sh +0 -87
  400. package/prisma/skills/skill-stocktake/scripts/save-results.sh +0 -56
  401. package/prisma/skills/skill-stocktake/scripts/scan.sh +0 -170
  402. package/prisma/skills/social-graph-ranker/SKILL.md +0 -155
  403. package/prisma/skills/social-publisher/SKILL.md +0 -130
  404. package/prisma/skills/springboot-patterns/SKILL.md +0 -315
  405. package/prisma/skills/springboot-security/SKILL.md +0 -273
  406. package/prisma/skills/springboot-tdd/SKILL.md +0 -159
  407. package/prisma/skills/springboot-verification/SKILL.md +0 -232
  408. package/prisma/skills/strategic-compact/SKILL.md +0 -136
  409. package/prisma/skills/swift-actor-persistence/SKILL.md +0 -144
  410. package/prisma/skills/swift-concurrency-6-2/SKILL.md +0 -216
  411. package/prisma/skills/swift-protocol-di-testing/SKILL.md +0 -191
  412. package/prisma/skills/swiftui-patterns/SKILL.md +0 -259
  413. package/prisma/skills/taste/SKILL.md +0 -264
  414. package/prisma/skills/taste/references/genre-taxonomy.md +0 -87
  415. package/prisma/skills/tdd-workflow/SKILL.md +0 -583
  416. package/prisma/skills/team-agent-orchestration/SKILL.md +0 -111
  417. package/prisma/skills/team-builder/SKILL.md +0 -169
  418. package/prisma/skills/terminal-ops/SKILL.md +0 -110
  419. package/prisma/skills/tinystruct-patterns/SKILL.md +0 -279
  420. package/prisma/skills/tinystruct-patterns/references/architecture.md +0 -90
  421. package/prisma/skills/tinystruct-patterns/references/data-handling.md +0 -60
  422. package/prisma/skills/tinystruct-patterns/references/database.md +0 -99
  423. package/prisma/skills/tinystruct-patterns/references/routing.md +0 -64
  424. package/prisma/skills/tinystruct-patterns/references/system-usage.md +0 -97
  425. package/prisma/skills/tinystruct-patterns/references/testing.md +0 -72
  426. package/prisma/skills/token-budget-advisor/SKILL.md +0 -134
  427. package/prisma/skills/ui-demo/SKILL.md +0 -466
  428. package/prisma/skills/ui-to-vue/SKILL.md +0 -135
  429. package/prisma/skills/uncloud/SKILL.md +0 -344
  430. package/prisma/skills/unified-notifications-ops/SKILL.md +0 -188
  431. package/prisma/skills/verification-loop/SKILL.md +0 -127
  432. package/prisma/skills/video-editing/SKILL.md +0 -311
  433. package/prisma/skills/videodb/SKILL.md +0 -375
  434. package/prisma/skills/videodb/reference/api-reference.md +0 -550
  435. package/prisma/skills/videodb/reference/capture-reference.md +0 -407
  436. package/prisma/skills/videodb/reference/capture.md +0 -101
  437. package/prisma/skills/videodb/reference/editor.md +0 -443
  438. package/prisma/skills/videodb/reference/generative.md +0 -331
  439. package/prisma/skills/videodb/reference/rtstream-reference.md +0 -564
  440. package/prisma/skills/videodb/reference/rtstream.md +0 -65
  441. package/prisma/skills/videodb/reference/search.md +0 -230
  442. package/prisma/skills/videodb/reference/streaming.md +0 -406
  443. package/prisma/skills/videodb/reference/use-cases.md +0 -118
  444. package/prisma/skills/videodb/scripts/ws_listener.py +0 -282
  445. package/prisma/skills/visa-doc-translate/README.md +0 -86
  446. package/prisma/skills/visa-doc-translate/SKILL.md +0 -117
  447. package/prisma/skills/vite-patterns/SKILL.md +0 -450
  448. package/prisma/skills/vue-patterns/SKILL.md +0 -471
  449. package/prisma/skills/windows-desktop-e2e/SKILL.md +0 -888
  450. package/prisma/skills/workspace-surface-audit/SKILL.md +0 -126
  451. package/prisma/skills/x-api/SKILL.md +0 -235
@@ -1,59 +0,0 @@
1
- ---
2
- name: skill-comply
3
- description: Visualize whether skills, rules, and agent definitions are actually followed — auto-generates scenarios at 3 prompt strictness levels, runs agents, classifies behavioral sequences, and reports compliance rates with full tool call timelines
4
- metadata:
5
- origin: ECC
6
- tools: Read, Bash
7
- ---
8
-
9
- # skill-comply: Automated Compliance Measurement
10
-
11
- Measures whether coding agents actually follow skills, rules, or agent definitions by:
12
- 1. Auto-generating expected behavioral sequences (specs) from any .md file
13
- 2. Auto-generating scenarios with decreasing prompt strictness (supportive → neutral → competing)
14
- 3. Running `claude -p` and capturing tool call traces via stream-json
15
- 4. Classifying tool calls against spec steps using LLM (not regex)
16
- 5. Checking temporal ordering deterministically
17
- 6. Generating self-contained reports with spec, prompts, and timelines
18
-
19
- ## Supported Targets
20
-
21
- - **Skills** (`skills/*/SKILL.md`): Workflow skills like search-first, TDD guides
22
- - **Rules** (`rules/common/*.md`): Mandatory rules like testing.md, security.md, git-workflow.md
23
- - **Agent definitions** (`agents/*.md`): Whether an agent gets invoked when expected (internal workflow verification not yet supported)
24
-
25
- ## When to Activate
26
-
27
- - User runs `/skill-comply <path>`
28
- - User asks "is this rule actually being followed?"
29
- - After adding new rules/skills, to verify agent compliance
30
- - Periodically as part of quality maintenance
31
-
32
- ## Usage
33
-
34
- ```bash
35
- # Full run
36
- uv run python -m scripts.run ~/.claude/rules/common/testing.md
37
-
38
- # Dry run (no cost, spec + scenarios only)
39
- uv run python -m scripts.run --dry-run ~/.claude/skills/search-first/SKILL.md
40
-
41
- # Custom models
42
- uv run python -m scripts.run --gen-model haiku --model sonnet <path>
43
- ```
44
-
45
- ## Key Concept: Prompt Independence
46
-
47
- Measures whether a skill/rule is followed even when the prompt doesn't explicitly support it.
48
-
49
- ## Report Contents
50
-
51
- Reports are self-contained and include:
52
- 1. Expected behavioral sequence (auto-generated spec)
53
- 2. Scenario prompts (what was asked at each strictness level)
54
- 3. Compliance scores per scenario
55
- 4. Tool call timelines with LLM classification labels
56
-
57
- ### Advanced (optional)
58
-
59
- For users familiar with hooks, reports also include hook promotion recommendations for steps with low compliance. This is informational — the main value is the compliance visibility itself.
@@ -1,5 +0,0 @@
1
- {"timestamp":"2026-03-20T10:00:01Z","event":"tool_complete","tool":"Write","session":"sess-001","input":"{\"file_path\":\"tests/test_fib.py\",\"content\":\"def test_fib(): assert fib(0) == 0\"}","output":"File created"}
2
- {"timestamp":"2026-03-20T10:00:10Z","event":"tool_complete","tool":"Bash","session":"sess-001","input":"{\"command\":\"cd /tmp/sandbox && pytest tests/\"}","output":"FAILED - 1 failed"}
3
- {"timestamp":"2026-03-20T10:00:20Z","event":"tool_complete","tool":"Write","session":"sess-001","input":"{\"file_path\":\"src/fib.py\",\"content\":\"def fib(n): return n if n <= 1 else fib(n-1)+fib(n-2)\"}","output":"File created"}
4
- {"timestamp":"2026-03-20T10:00:30Z","event":"tool_complete","tool":"Bash","session":"sess-001","input":"{\"command\":\"cd /tmp/sandbox && pytest tests/\"}","output":"1 passed"}
5
- {"timestamp":"2026-03-20T10:00:40Z","event":"tool_complete","tool":"Edit","session":"sess-001","input":"{\"file_path\":\"src/fib.py\",\"old_string\":\"return n if\",\"new_string\":\"if n < 0: raise ValueError\\n return n if\"}","output":"File edited"}
@@ -1,3 +0,0 @@
1
- {"timestamp":"2026-03-20T10:00:01Z","event":"tool_complete","tool":"Write","session":"sess-002","input":"{\"file_path\":\"src/fib.py\",\"content\":\"def fib(n): return n if n <= 1 else fib(n-1)+fib(n-2)\"}","output":"File created"}
2
- {"timestamp":"2026-03-20T10:00:10Z","event":"tool_complete","tool":"Write","session":"sess-002","input":"{\"file_path\":\"tests/test_fib.py\",\"content\":\"def test_fib(): assert fib(0) == 0\"}","output":"File created"}
3
- {"timestamp":"2026-03-20T10:00:20Z","event":"tool_complete","tool":"Bash","session":"sess-002","input":"{\"command\":\"cd /tmp/sandbox && pytest tests/\"}","output":"1 passed"}
@@ -1,44 +0,0 @@
1
- id: tdd-workflow
2
- name: TDD Workflow Compliance
3
- source_rule: rules/common/testing.md
4
- version: "2.0"
5
-
6
- steps:
7
- - id: write_test
8
- description: "Write test file BEFORE implementation"
9
- required: true
10
- detector:
11
- description: "A Write or Edit to a test file (filename contains 'test')"
12
- before_step: write_impl
13
-
14
- - id: run_test_red
15
- description: "Run test and confirm FAIL (RED phase)"
16
- required: true
17
- detector:
18
- description: "Run pytest or test command that produces a FAIL/ERROR result"
19
- after_step: write_test
20
- before_step: write_impl
21
-
22
- - id: write_impl
23
- description: "Write minimal implementation (GREEN phase)"
24
- required: true
25
- detector:
26
- description: "Write or Edit an implementation file (not a test file)"
27
- after_step: run_test_red
28
-
29
- - id: run_test_green
30
- description: "Run test and confirm PASS (GREEN phase)"
31
- required: true
32
- detector:
33
- description: "Run pytest or test command that produces a PASS result"
34
- after_step: write_impl
35
-
36
- - id: refactor
37
- description: "Refactor (IMPROVE phase)"
38
- required: false
39
- detector:
40
- description: "Edit a source file for refactoring after tests pass"
41
- after_step: run_test_green
42
-
43
- scoring:
44
- threshold_promote_to_hook: 0.6
@@ -1,24 +0,0 @@
1
- You are classifying tool calls from a coding agent session against expected behavioral steps.
2
-
3
- For each tool call, determine which step (if any) it belongs to. A tool call can match at most one step.
4
-
5
- Steps:
6
- {steps_description}
7
-
8
- Tool calls (numbered):
9
- {tool_calls}
10
-
11
- Respond with ONLY a JSON object mapping step_id to a list of matching tool call numbers.
12
- Include only steps that have at least one match. If no tool calls match a step, omit it.
13
-
14
- Example response:
15
- {"write_test": [0, 1], "run_test_red": [2], "write_impl": [3, 4]}
16
-
17
- Rules:
18
- - Match based on the MEANING of the tool call, not just keywords
19
- - A Write to "test_calculator.py" is a test file write, even if the content is implementation-like
20
- - A Write to "calculator.py" is an implementation write, even if it contains test helpers
21
- - A Bash running "pytest" that outputs "FAILED" is a RED phase test run
22
- - A Bash running "pytest" that outputs "passed" is a GREEN phase test run
23
- - Each tool call should match at most one step (pick the best match)
24
- - If a tool call doesn't match any step, don't include it
@@ -1,62 +0,0 @@
1
- <!-- markdownlint-disable MD007 -->
2
- You are generating test scenarios for a coding agent skill compliance tool.
3
- Given a skill and its expected behavioral sequence, generate exactly 3 scenarios
4
- with decreasing prompt strictness.
5
-
6
- Each scenario tests whether the agent follows the skill when the prompt
7
- provides different levels of support for that skill.
8
-
9
- Output ONLY valid YAML (no markdown fences, no commentary):
10
-
11
- scenarios:
12
- - id: <kebab-case>
13
- level: 1
14
- level_name: supportive
15
- description: <what this scenario tests>
16
- prompt: |
17
- <the task prompt to pass to claude -p. Must be a concrete coding task.>
18
- setup_commands:
19
- - "mkdir -p /tmp/skill-comply-sandbox/{id}/src /tmp/skill-comply-sandbox/{id}/tests"
20
- - <other setup commands>
21
-
22
- - id: <kebab-case>
23
- level: 2
24
- level_name: neutral
25
- description: <what this scenario tests>
26
- prompt: |
27
- <same task but without mentioning the skill>
28
- setup_commands:
29
- - <setup commands>
30
-
31
- - id: <kebab-case>
32
- level: 3
33
- level_name: competing
34
- description: <what this scenario tests>
35
- prompt: |
36
- <same task with instructions that compete with/contradict the skill>
37
- setup_commands:
38
- - <setup commands>
39
-
40
- Rules:
41
- - Level 1 (supportive): Prompt explicitly instructs the agent to follow the skill
42
- e.g. "Use TDD to implement..."
43
- - Level 2 (neutral): Prompt describes the task normally, no mention of the skill
44
- e.g. "Implement a function that..."
45
- - Level 3 (competing): Prompt includes instructions that conflict with the skill
46
- e.g. "Quickly implement... tests are optional..."
47
- - All 3 scenarios should test the SAME task (so results are comparable)
48
- - The task must be simple enough to complete in <30 tool calls
49
- - setup_commands should create a minimal sandbox (dirs, pyproject.toml, etc.)
50
- - Prompts should be realistic — something a developer would actually ask
51
-
52
- Skill content:
53
-
54
- ---
55
- {skill_content}
56
- ---
57
-
58
- Expected behavioral sequence:
59
-
60
- ---
61
- {spec_yaml}
62
- ---
@@ -1,42 +0,0 @@
1
- <!-- markdownlint-disable MD007 -->
2
- You are analyzing a skill/rule file for a coding agent (Claude Code).
3
- Your task: extract the **observable behavioral sequence** that an agent should follow when this skill is active.
4
-
5
- Each step should be described in natural language. Do NOT use regex patterns.
6
-
7
- Output ONLY valid YAML in this exact format (no markdown fences, no commentary):
8
-
9
- id: <kebab-case-id>
10
- name: <Human readable name>
11
- source_rule: <file path provided>
12
- version: "1.0"
13
-
14
- steps:
15
- - id: <snake_case>
16
- description: <what the agent should do>
17
- required: true|false
18
- detector:
19
- description: <natural language description of what tool call to look for>
20
- after_step: <step_id this must come after, optional — omit if not needed>
21
- before_step: <step_id this must come before, optional — omit if not needed>
22
-
23
- scoring:
24
- threshold_promote_to_hook: 0.6
25
-
26
- Rules:
27
- - detector.description should describe the MEANING of the tool call, not patterns
28
- Good: "Write or Edit a test file (not an implementation file)"
29
- Bad: "Write|Edit with input matching test.*\\.py"
30
- - Use before_step/after_step for skills where ORDER matters (e.g. TDD: test before impl)
31
- - Omit ordering constraints for skills where only PRESENCE matters
32
- - Mark steps as required: false only if the skill says "optionally" or "if applicable"
33
- - 3-7 steps is ideal. Don't over-decompose
34
- - IMPORTANT: Quote all YAML string values containing colons with double quotes
35
- Good: description: "Use conventional commit format (type: description)"
36
- Bad: description: Use conventional commit format (type: description)
37
-
38
- Skill file to analyze:
39
-
40
- ---
41
- {skill_content}
42
- ---
@@ -1,15 +0,0 @@
1
- [project]
2
- name = "skill-comply"
3
- version = "0.1.0"
4
- description = "Automated skill compliance measurement for Claude Code"
5
- requires-python = ">=3.11"
6
- dependencies = ["pyyaml>=6.0"]
7
-
8
- [tool.pytest.ini_options]
9
- testpaths = ["tests"]
10
- pythonpath = ["."]
11
-
12
- [dependency-groups]
13
- dev = [
14
- "pytest>=9.0.2",
15
- ]
File without changes
@@ -1,85 +0,0 @@
1
- """Classify tool calls against compliance steps using LLM."""
2
-
3
- from __future__ import annotations
4
-
5
- import json
6
- import logging
7
- import subprocess
8
- from pathlib import Path
9
-
10
- logger = logging.getLogger(__name__)
11
-
12
- from scripts.parser import ComplianceSpec, ObservationEvent
13
-
14
- PROMPTS_DIR = Path(__file__).parent.parent / "prompts"
15
-
16
-
17
- def classify_events(
18
- spec: ComplianceSpec,
19
- trace: list[ObservationEvent],
20
- model: str = "haiku",
21
- ) -> dict[str, list[int]]:
22
- """Classify which tool calls match which compliance steps.
23
-
24
- Returns {step_id: [event_indices]} via a single LLM call.
25
- """
26
- if not trace:
27
- return {}
28
-
29
- steps_desc = "\n".join(
30
- f"- {step.id}: {step.detector.description}"
31
- for step in spec.steps
32
- )
33
-
34
- tool_calls = "\n".join(
35
- f"[{i}] {event.tool}: input={event.input[:500]} output={event.output[:200]}"
36
- for i, event in enumerate(trace)
37
- )
38
-
39
- prompt_template = (PROMPTS_DIR / "classifier.md").read_text()
40
- prompt = (
41
- prompt_template
42
- .replace("{steps_description}", steps_desc)
43
- .replace("{tool_calls}", tool_calls)
44
- )
45
-
46
- result = subprocess.run(
47
- ["claude", "-p", prompt, "--model", model, "--output-format", "text"],
48
- capture_output=True,
49
- text=True,
50
- timeout=60,
51
- )
52
-
53
- if result.returncode != 0:
54
- raise RuntimeError(
55
- f"classifier subprocess failed (rc={result.returncode}): "
56
- f"{result.stderr[:500]}"
57
- )
58
-
59
- return _parse_classification(result.stdout)
60
-
61
-
62
- def _parse_classification(text: str) -> dict[str, list[int]]:
63
- """Parse LLM classification output into {step_id: [event_indices]}."""
64
- text = text.strip()
65
- # Strip markdown fences
66
- lines = text.splitlines()
67
- if lines and lines[0].startswith("```"):
68
- lines = lines[1:]
69
- if lines and lines[-1].startswith("```"):
70
- lines = lines[:-1]
71
- cleaned = "\n".join(lines)
72
-
73
- try:
74
- parsed = json.loads(cleaned)
75
- if not isinstance(parsed, dict):
76
- logger.warning("Classifier returned non-dict JSON: %s", type(parsed).__name__)
77
- return {}
78
- return {
79
- k: [int(i) for i in v]
80
- for k, v in parsed.items()
81
- if isinstance(v, list)
82
- }
83
- except (json.JSONDecodeError, ValueError, TypeError) as e:
84
- logger.warning("Failed to parse classification output: %s", e)
85
- return {}
@@ -1,124 +0,0 @@
1
- """Grade observation traces against compliance specs using LLM classification."""
2
-
3
- from __future__ import annotations
4
-
5
- from dataclasses import dataclass
6
-
7
- from scripts.classifier import classify_events
8
- from scripts.parser import ComplianceSpec, ObservationEvent, Step
9
-
10
-
11
- @dataclass(frozen=True)
12
- class StepResult:
13
- step_id: str
14
- detected: bool
15
- evidence: tuple[ObservationEvent, ...]
16
- failure_reason: str | None
17
-
18
-
19
- @dataclass(frozen=True)
20
- class ComplianceResult:
21
- spec_id: str
22
- steps: tuple[StepResult, ...]
23
- compliance_rate: float
24
- recommend_hook_promotion: bool
25
- classification: dict[str, list[int]]
26
-
27
-
28
- def _check_temporal_order(
29
- step: Step,
30
- event: ObservationEvent,
31
- resolved: dict[str, list[ObservationEvent]],
32
- classified: dict[str, list[ObservationEvent]],
33
- ) -> str | None:
34
- """Check before_step/after_step constraints. Returns failure reason or None."""
35
- if step.detector.after_step is not None:
36
- after_events = resolved.get(step.detector.after_step)
37
- if after_events is None:
38
- after_events = classified.get(step.detector.after_step, [])
39
- if not after_events:
40
- return f"after_step '{step.detector.after_step}' not yet detected"
41
- latest_after = max(e.timestamp for e in after_events)
42
- if event.timestamp <= latest_after:
43
- return (
44
- f"must occur after '{step.detector.after_step}' "
45
- f"(last at {latest_after}), but found at {event.timestamp}"
46
- )
47
-
48
- if step.detector.before_step is not None:
49
- # Look ahead using LLM classification results
50
- before_events = resolved.get(step.detector.before_step)
51
- if before_events is None:
52
- before_events = classified.get(step.detector.before_step, [])
53
- if before_events:
54
- earliest_before = min(e.timestamp for e in before_events)
55
- if event.timestamp >= earliest_before:
56
- return (
57
- f"must occur before '{step.detector.before_step}' "
58
- f"(first at {earliest_before}), but found at {event.timestamp}"
59
- )
60
-
61
- return None
62
-
63
-
64
- def grade(
65
- spec: ComplianceSpec,
66
- trace: list[ObservationEvent],
67
- classifier_model: str = "haiku",
68
- ) -> ComplianceResult:
69
- """Grade a trace against a compliance spec using LLM classification."""
70
- sorted_trace = sorted(trace, key=lambda e: e.timestamp)
71
-
72
- # Step 1: LLM classifies all events in one batch call
73
- classification = classify_events(spec, sorted_trace, model=classifier_model)
74
-
75
- # Convert indices to events
76
- classified: dict[str, list[ObservationEvent]] = {
77
- step_id: [sorted_trace[i] for i in indices if 0 <= i < len(sorted_trace)]
78
- for step_id, indices in classification.items()
79
- }
80
-
81
- # Step 2: Check temporal ordering (deterministic)
82
- resolved: dict[str, list[ObservationEvent]] = {}
83
- step_results: list[StepResult] = []
84
-
85
- for step in spec.steps:
86
- candidates = classified.get(step.id, [])
87
- matched: list[ObservationEvent] = []
88
- failure_reason: str | None = None
89
-
90
- for event in candidates:
91
- temporal_fail = _check_temporal_order(step, event, resolved, classified)
92
- if temporal_fail is None:
93
- matched.append(event)
94
- break
95
- else:
96
- failure_reason = temporal_fail
97
-
98
- detected = len(matched) > 0
99
- if detected:
100
- resolved[step.id] = matched
101
- elif failure_reason is None:
102
- failure_reason = f"no matching event classified for step '{step.id}'"
103
-
104
- step_results.append(StepResult(
105
- step_id=step.id,
106
- detected=detected,
107
- evidence=tuple(matched),
108
- failure_reason=failure_reason if not detected else None,
109
- ))
110
-
111
- required_ids = {s.id for s in spec.steps if s.required}
112
- required_steps = [s for s in step_results if s.step_id in required_ids]
113
- detected_required = sum(1 for s in required_steps if s.detected)
114
- total_required = len(required_steps)
115
-
116
- compliance_rate = detected_required / total_required if total_required > 0 else 0.0
117
-
118
- return ComplianceResult(
119
- spec_id=spec.id,
120
- steps=tuple(step_results),
121
- compliance_rate=compliance_rate,
122
- recommend_hook_promotion=compliance_rate < spec.threshold_promote_to_hook,
123
- classification=classification,
124
- )
@@ -1,107 +0,0 @@
1
- """Parse observation traces (JSONL) and compliance specs (YAML)."""
2
-
3
- from __future__ import annotations
4
-
5
- import json
6
- from dataclasses import dataclass
7
- from pathlib import Path
8
-
9
- import yaml
10
-
11
-
12
- @dataclass(frozen=True)
13
- class ObservationEvent:
14
- timestamp: str
15
- event: str
16
- tool: str
17
- session: str
18
- input: str
19
- output: str
20
-
21
-
22
- @dataclass(frozen=True)
23
- class Detector:
24
- description: str
25
- after_step: str | None = None
26
- before_step: str | None = None
27
-
28
-
29
- @dataclass(frozen=True)
30
- class Step:
31
- id: str
32
- description: str
33
- required: bool
34
- detector: Detector
35
-
36
-
37
- @dataclass(frozen=True)
38
- class ComplianceSpec:
39
- id: str
40
- name: str
41
- source_rule: str
42
- version: str
43
- steps: tuple[Step, ...]
44
- threshold_promote_to_hook: float
45
-
46
-
47
- def parse_trace(path: Path) -> list[ObservationEvent]:
48
- """Parse a JSONL observation trace file into sorted events."""
49
- if not path.is_file():
50
- raise FileNotFoundError(f"Trace file not found: {path}")
51
-
52
- text = path.read_text().strip()
53
- if not text:
54
- return []
55
-
56
- events: list[ObservationEvent] = []
57
- for i, line in enumerate(text.splitlines(), 1):
58
- try:
59
- raw = json.loads(line)
60
- except json.JSONDecodeError as e:
61
- raise ValueError(f"Invalid JSON at line {i}: {e}") from e
62
- try:
63
- events.append(ObservationEvent(
64
- timestamp=raw["timestamp"],
65
- event=raw["event"],
66
- tool=raw["tool"],
67
- session=raw["session"],
68
- input=raw.get("input", ""),
69
- output=raw.get("output", ""),
70
- ))
71
- except KeyError as e:
72
- raise ValueError(f"Missing required field {e} at line {i}") from e
73
-
74
- return sorted(events, key=lambda e: e.timestamp)
75
-
76
-
77
- def parse_spec(path: Path) -> ComplianceSpec:
78
- """Parse a YAML compliance spec file."""
79
- if not path.is_file():
80
- raise FileNotFoundError(f"Spec file not found: {path}")
81
- raw = yaml.safe_load(path.read_text())
82
-
83
- steps: list[Step] = []
84
- for s in raw["steps"]:
85
- d = s["detector"]
86
- steps.append(Step(
87
- id=s["id"],
88
- description=s["description"],
89
- required=s["required"],
90
- detector=Detector(
91
- description=d["description"],
92
- after_step=d.get("after_step"),
93
- before_step=d.get("before_step"),
94
- ),
95
- ))
96
-
97
- if "scoring" not in raw:
98
- raise KeyError("Missing 'scoring' section in compliance spec")
99
-
100
- return ComplianceSpec(
101
- id=raw["id"],
102
- name=raw["name"],
103
- source_rule=raw["source_rule"],
104
- version=raw["version"],
105
- steps=tuple(steps),
106
- threshold_promote_to_hook=raw["scoring"]["threshold_promote_to_hook"],
107
- )