compact-agent 1.10.1 → 1.11.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 (697) hide show
  1. package/bin/ecc-hooks.cjs +110 -0
  2. package/dist/ecc.d.ts +11 -0
  3. package/dist/ecc.js +142 -27
  4. package/dist/ecc.js.map +1 -1
  5. package/dist/index.js +47 -7
  6. package/dist/index.js.map +1 -1
  7. package/package.json +1 -1
  8. package/resources/ecc/agents/a11y-architect.md +149 -0
  9. package/resources/ecc/agents/architect.md +11 -3
  10. package/resources/ecc/agents/build-error-resolver.md +11 -4
  11. package/resources/ecc/agents/chief-of-staff.md +11 -4
  12. package/resources/ecc/agents/code-architect.md +80 -0
  13. package/resources/ecc/agents/code-explorer.md +78 -0
  14. package/resources/ecc/agents/code-reviewer.md +89 -4
  15. package/resources/ecc/agents/code-simplifier.md +56 -0
  16. package/resources/ecc/agents/comment-analyzer.md +54 -0
  17. package/resources/ecc/agents/conversation-analyzer.md +61 -0
  18. package/resources/ecc/agents/cpp-build-resolver.md +99 -0
  19. package/resources/ecc/agents/cpp-reviewer.md +81 -0
  20. package/resources/ecc/agents/csharp-reviewer.md +110 -0
  21. package/resources/ecc/agents/dart-build-resolver.md +210 -0
  22. package/resources/ecc/agents/database-reviewer.md +11 -3
  23. package/resources/ecc/agents/django-build-resolver.md +252 -0
  24. package/resources/ecc/agents/django-reviewer.md +169 -0
  25. package/resources/ecc/agents/doc-updater.md +11 -3
  26. package/resources/ecc/agents/docs-lookup.md +77 -0
  27. package/resources/ecc/agents/e2e-runner.md +11 -4
  28. package/resources/ecc/agents/fastapi-reviewer.md +79 -0
  29. package/resources/ecc/agents/flutter-reviewer.md +252 -0
  30. package/resources/ecc/agents/fsharp-reviewer.md +109 -0
  31. package/resources/ecc/agents/gan-evaluator.md +218 -0
  32. package/resources/ecc/agents/gan-generator.md +140 -0
  33. package/resources/ecc/agents/gan-planner.md +108 -0
  34. package/resources/ecc/agents/go-build-resolver.md +11 -4
  35. package/resources/ecc/agents/go-reviewer.md +11 -3
  36. package/resources/ecc/agents/harmonyos-app-resolver.md +182 -0
  37. package/resources/ecc/agents/harness-optimizer.md +12 -2
  38. package/resources/ecc/agents/healthcare-reviewer.md +92 -0
  39. package/resources/ecc/agents/homelab-architect.md +107 -0
  40. package/resources/ecc/agents/java-build-resolver.md +275 -0
  41. package/resources/ecc/agents/java-reviewer.md +190 -0
  42. package/resources/ecc/agents/kotlin-build-resolver.md +127 -0
  43. package/resources/ecc/agents/kotlin-reviewer.md +168 -0
  44. package/resources/ecc/agents/loop-operator.md +12 -3
  45. package/resources/ecc/agents/mle-reviewer.md +162 -0
  46. package/resources/ecc/agents/network-architect.md +106 -0
  47. package/resources/ecc/agents/network-config-reviewer.md +106 -0
  48. package/resources/ecc/agents/network-troubleshooter.md +128 -0
  49. package/resources/ecc/agents/opensource-forker.md +207 -0
  50. package/resources/ecc/agents/opensource-packager.md +258 -0
  51. package/resources/ecc/agents/opensource-sanitizer.md +197 -0
  52. package/resources/ecc/agents/performance-optimizer.md +455 -0
  53. package/resources/ecc/agents/planner.md +11 -2
  54. package/resources/ecc/agents/pr-test-analyzer.md +54 -0
  55. package/resources/ecc/agents/python-reviewer.md +11 -3
  56. package/resources/ecc/agents/pytorch-build-resolver.md +129 -0
  57. package/resources/ecc/agents/refactor-cleaner.md +11 -4
  58. package/resources/ecc/agents/rust-build-resolver.md +157 -0
  59. package/resources/ecc/agents/rust-reviewer.md +103 -0
  60. package/resources/ecc/agents/security-reviewer.md +11 -3
  61. package/resources/ecc/agents/seo-specialist.md +71 -0
  62. package/resources/ecc/agents/silent-failure-hunter.md +59 -0
  63. package/resources/ecc/agents/swift-build-resolver.md +170 -0
  64. package/resources/ecc/agents/swift-reviewer.md +116 -0
  65. package/resources/ecc/agents/tdd-guide.md +11 -4
  66. package/resources/ecc/agents/type-design-analyzer.md +50 -0
  67. package/resources/ecc/agents/typescript-reviewer.md +121 -0
  68. package/resources/ecc/commands/aside.md +164 -0
  69. package/resources/ecc/commands/auto-update.md +28 -0
  70. package/resources/ecc/commands/build-fix.md +66 -0
  71. package/resources/ecc/commands/checkpoint.md +78 -0
  72. package/resources/ecc/commands/code-review.md +289 -0
  73. package/resources/ecc/commands/cost-report.md +107 -0
  74. package/resources/ecc/commands/cpp-build.md +173 -0
  75. package/resources/ecc/commands/cpp-review.md +132 -0
  76. package/resources/ecc/commands/cpp-test.md +251 -0
  77. package/resources/ecc/commands/ecc-guide.md +93 -0
  78. package/resources/ecc/commands/evolve.md +178 -0
  79. package/resources/ecc/commands/fastapi-review.md +39 -0
  80. package/resources/ecc/commands/feature-dev.md +49 -0
  81. package/resources/ecc/commands/flutter-build.md +164 -0
  82. package/resources/ecc/commands/flutter-review.md +116 -0
  83. package/resources/ecc/commands/flutter-test.md +144 -0
  84. package/resources/ecc/commands/gan-build.md +103 -0
  85. package/resources/ecc/commands/gan-design.md +39 -0
  86. package/resources/ecc/commands/go-build.md +183 -0
  87. package/resources/ecc/commands/go-review.md +148 -0
  88. package/resources/ecc/commands/go-test.md +268 -0
  89. package/resources/ecc/commands/gradle-build.md +70 -0
  90. package/resources/ecc/commands/harness-audit.md +77 -0
  91. package/resources/ecc/commands/hookify-configure.md +14 -0
  92. package/resources/ecc/commands/hookify-help.md +46 -0
  93. package/resources/ecc/commands/hookify-list.md +21 -0
  94. package/resources/ecc/commands/hookify.md +50 -0
  95. package/resources/ecc/commands/instinct-export.md +66 -0
  96. package/resources/ecc/commands/instinct-import.md +114 -0
  97. package/resources/ecc/commands/instinct-status.md +59 -0
  98. package/resources/ecc/commands/jira.md +106 -0
  99. package/resources/ecc/commands/kotlin-build.md +174 -0
  100. package/resources/ecc/commands/kotlin-review.md +140 -0
  101. package/resources/ecc/commands/kotlin-test.md +312 -0
  102. package/resources/ecc/commands/learn-eval.md +116 -0
  103. package/resources/ecc/commands/learn.md +74 -0
  104. package/resources/ecc/commands/loop-start.md +36 -0
  105. package/resources/ecc/commands/loop-status.md +77 -0
  106. package/resources/ecc/commands/model-route.md +30 -0
  107. package/resources/ecc/commands/multi-backend.md +162 -0
  108. package/resources/ecc/commands/multi-execute.md +319 -0
  109. package/resources/ecc/commands/multi-frontend.md +162 -0
  110. package/resources/ecc/commands/multi-plan.md +272 -0
  111. package/resources/ecc/commands/multi-workflow.md +195 -0
  112. package/resources/ecc/commands/plan-prd.md +160 -0
  113. package/resources/ecc/commands/plan.md +200 -0
  114. package/resources/ecc/commands/pm2.md +276 -0
  115. package/resources/ecc/commands/pr.md +184 -0
  116. package/resources/ecc/commands/project-init.md +86 -0
  117. package/resources/ecc/commands/projects.md +39 -0
  118. package/resources/ecc/commands/promote.md +41 -0
  119. package/resources/ecc/commands/prp-commit.md +112 -0
  120. package/resources/ecc/commands/prp-implement.md +385 -0
  121. package/resources/ecc/commands/prp-plan.md +502 -0
  122. package/resources/ecc/commands/prp-pr.md +184 -0
  123. package/resources/ecc/commands/prp-prd.md +447 -0
  124. package/resources/ecc/commands/prune.md +31 -0
  125. package/resources/ecc/commands/python-review.md +297 -0
  126. package/resources/ecc/commands/quality-gate.md +33 -0
  127. package/resources/ecc/commands/refactor-clean.md +84 -0
  128. package/resources/ecc/commands/resume-session.md +156 -0
  129. package/resources/ecc/commands/review-pr.md +37 -0
  130. package/resources/ecc/commands/rust-build.md +187 -0
  131. package/resources/ecc/commands/rust-review.md +142 -0
  132. package/resources/ecc/commands/rust-test.md +308 -0
  133. package/resources/ecc/commands/santa-loop.md +175 -0
  134. package/resources/ecc/commands/save-session.md +275 -0
  135. package/resources/ecc/commands/security-scan.md +92 -0
  136. package/resources/ecc/commands/sessions.md +339 -0
  137. package/resources/ecc/commands/setup-pm.md +80 -0
  138. package/resources/ecc/commands/skill-create.md +174 -0
  139. package/resources/ecc/commands/skill-health.md +54 -0
  140. package/resources/ecc/commands/test-coverage.md +73 -0
  141. package/resources/ecc/commands/update-codemaps.md +76 -0
  142. package/resources/ecc/commands/update-docs.md +88 -0
  143. package/resources/ecc/rules/README.md +120 -0
  144. package/resources/ecc/rules/angular/coding-style.md +182 -0
  145. package/resources/ecc/rules/angular/hooks.md +25 -0
  146. package/resources/ecc/rules/angular/patterns.md +249 -0
  147. package/resources/ecc/rules/angular/security.md +87 -0
  148. package/resources/ecc/rules/angular/testing.md +164 -0
  149. package/resources/ecc/rules/arkts/coding-style.md +153 -0
  150. package/resources/ecc/rules/arkts/hooks.md +135 -0
  151. package/resources/ecc/rules/arkts/patterns.md +236 -0
  152. package/resources/ecc/rules/arkts/security.md +141 -0
  153. package/resources/ecc/rules/arkts/testing.md +126 -0
  154. package/resources/ecc/rules/{common-agents.md → common/agents.md} +2 -4
  155. package/resources/ecc/rules/common/code-review.md +124 -0
  156. package/resources/ecc/rules/{common-coding-style.md → common/coding-style.md} +42 -4
  157. package/resources/ecc/rules/common/development-workflow.md +44 -0
  158. package/resources/ecc/rules/{common-git-workflow.md → common/git-workflow.md} +1 -5
  159. package/resources/ecc/rules/{common-hooks.md → common/hooks.md} +0 -4
  160. package/resources/ecc/rules/{common-patterns.md → common/patterns.md} +0 -4
  161. package/resources/ecc/rules/{common-performance.md → common/performance.md} +0 -4
  162. package/resources/ecc/rules/{common-security.md → common/security.md} +0 -4
  163. package/resources/ecc/rules/{common-testing.md → common/testing.md} +28 -4
  164. package/resources/ecc/rules/cpp/coding-style.md +44 -0
  165. package/resources/ecc/rules/cpp/hooks.md +39 -0
  166. package/resources/ecc/rules/cpp/patterns.md +51 -0
  167. package/resources/ecc/rules/cpp/security.md +51 -0
  168. package/resources/ecc/rules/cpp/testing.md +44 -0
  169. package/resources/ecc/rules/csharp/coding-style.md +72 -0
  170. package/resources/ecc/rules/csharp/hooks.md +25 -0
  171. package/resources/ecc/rules/csharp/patterns.md +50 -0
  172. package/resources/ecc/rules/csharp/security.md +58 -0
  173. package/resources/ecc/rules/csharp/testing.md +46 -0
  174. package/resources/ecc/rules/dart/coding-style.md +159 -0
  175. package/resources/ecc/rules/dart/hooks.md +66 -0
  176. package/resources/ecc/rules/dart/patterns.md +261 -0
  177. package/resources/ecc/rules/dart/security.md +135 -0
  178. package/resources/ecc/rules/dart/testing.md +215 -0
  179. package/resources/ecc/rules/fsharp/coding-style.md +112 -0
  180. package/resources/ecc/rules/fsharp/hooks.md +26 -0
  181. package/resources/ecc/rules/fsharp/patterns.md +111 -0
  182. package/resources/ecc/rules/fsharp/security.md +76 -0
  183. package/resources/ecc/rules/fsharp/testing.md +62 -0
  184. package/resources/ecc/rules/{golang-coding-style.md → golang/coding-style.md} +6 -5
  185. package/resources/ecc/rules/{golang-hooks.md → golang/hooks.md} +5 -4
  186. package/resources/ecc/rules/{golang-patterns.md → golang/patterns.md} +5 -4
  187. package/resources/ecc/rules/{golang-security.md → golang/security.md} +5 -4
  188. package/resources/ecc/rules/{golang-testing.md → golang/testing.md} +5 -4
  189. package/resources/ecc/rules/java/coding-style.md +114 -0
  190. package/resources/ecc/rules/java/hooks.md +18 -0
  191. package/resources/ecc/rules/java/patterns.md +147 -0
  192. package/resources/ecc/rules/java/security.md +101 -0
  193. package/resources/ecc/rules/java/testing.md +133 -0
  194. package/resources/ecc/rules/kotlin/coding-style.md +86 -0
  195. package/resources/ecc/rules/{kotlin-hooks.md → kotlin/hooks.md} +5 -4
  196. package/resources/ecc/rules/kotlin/patterns.md +146 -0
  197. package/resources/ecc/rules/kotlin/security.md +82 -0
  198. package/resources/ecc/rules/kotlin/testing.md +128 -0
  199. package/resources/ecc/rules/perl/coding-style.md +46 -0
  200. package/resources/ecc/rules/perl/hooks.md +22 -0
  201. package/resources/ecc/rules/perl/patterns.md +76 -0
  202. package/resources/ecc/rules/perl/security.md +69 -0
  203. package/resources/ecc/rules/perl/testing.md +54 -0
  204. package/resources/ecc/rules/php/coding-style.md +40 -0
  205. package/resources/ecc/rules/{php-hooks.md → php/hooks.md} +7 -4
  206. package/resources/ecc/rules/php/patterns.md +33 -0
  207. package/resources/ecc/rules/php/security.md +37 -0
  208. package/resources/ecc/rules/php/testing.md +39 -0
  209. package/resources/ecc/rules/{python-coding-style.md → python/coding-style.md} +4 -4
  210. package/resources/ecc/rules/python/fastapi.md +58 -0
  211. package/resources/ecc/rules/{python-hooks.md → python/hooks.md} +4 -4
  212. package/resources/ecc/rules/{python-patterns.md → python/patterns.md} +4 -4
  213. package/resources/ecc/rules/{python-security.md → python/security.md} +4 -4
  214. package/resources/ecc/rules/{python-testing.md → python/testing.md} +4 -4
  215. package/resources/ecc/rules/ruby/coding-style.md +46 -0
  216. package/resources/ecc/rules/ruby/hooks.md +37 -0
  217. package/resources/ecc/rules/ruby/patterns.md +44 -0
  218. package/resources/ecc/rules/ruby/security.md +51 -0
  219. package/resources/ecc/rules/ruby/testing.md +51 -0
  220. package/resources/ecc/rules/rust/coding-style.md +151 -0
  221. package/resources/ecc/rules/rust/hooks.md +16 -0
  222. package/resources/ecc/rules/rust/patterns.md +168 -0
  223. package/resources/ecc/rules/rust/security.md +141 -0
  224. package/resources/ecc/rules/rust/testing.md +154 -0
  225. package/resources/ecc/rules/{swift-coding-style.md → swift/coding-style.md} +6 -6
  226. package/resources/ecc/rules/swift/hooks.md +20 -0
  227. package/resources/ecc/rules/{swift-patterns.md → swift/patterns.md} +5 -5
  228. package/resources/ecc/rules/{swift-security.md → swift/security.md} +7 -7
  229. package/resources/ecc/rules/{swift-testing.md → swift/testing.md} +5 -5
  230. package/resources/ecc/rules/typescript/coding-style.md +199 -0
  231. package/resources/ecc/rules/{typescript-hooks.md → typescript/hooks.md} +6 -4
  232. package/resources/ecc/rules/{typescript-patterns.md → typescript/patterns.md} +6 -4
  233. package/resources/ecc/rules/{typescript-security.md → typescript/security.md} +6 -4
  234. package/resources/ecc/rules/typescript/testing.md +18 -0
  235. package/resources/ecc/rules/web/coding-style.md +96 -0
  236. package/resources/ecc/rules/web/design-quality.md +63 -0
  237. package/resources/ecc/rules/web/hooks.md +129 -0
  238. package/resources/ecc/rules/web/patterns.md +79 -0
  239. package/resources/ecc/rules/web/performance.md +64 -0
  240. package/resources/ecc/rules/web/security.md +57 -0
  241. package/resources/ecc/rules/web/testing.md +55 -0
  242. package/resources/ecc/rules/zh/README.md +108 -0
  243. package/resources/ecc/rules/zh/agents.md +50 -0
  244. package/resources/ecc/rules/zh/code-review.md +124 -0
  245. package/resources/ecc/rules/zh/coding-style.md +48 -0
  246. package/resources/ecc/rules/zh/development-workflow.md +44 -0
  247. package/resources/ecc/rules/zh/git-workflow.md +24 -0
  248. package/resources/ecc/rules/zh/hooks.md +30 -0
  249. package/resources/ecc/rules/zh/patterns.md +31 -0
  250. package/resources/ecc/rules/zh/performance.md +55 -0
  251. package/resources/ecc/rules/zh/security.md +29 -0
  252. package/resources/ecc/rules/zh/testing.md +29 -0
  253. package/resources/ecc/skills/accessibility/SKILL.md +146 -0
  254. package/resources/ecc/skills/agent-architecture-audit/SKILL.md +256 -0
  255. package/resources/ecc/skills/agent-eval/SKILL.md +145 -0
  256. package/resources/ecc/skills/agent-harness-construction/SKILL.md +73 -0
  257. package/resources/ecc/skills/agent-introspection-debugging/SKILL.md +1 -0
  258. package/resources/ecc/skills/agent-payment-x402/SKILL.md +224 -0
  259. package/resources/ecc/skills/agent-sort/SKILL.md +1 -0
  260. package/resources/ecc/skills/agentic-engineering/SKILL.md +63 -0
  261. package/resources/ecc/skills/agentic-os/SKILL.md +387 -0
  262. package/resources/ecc/skills/ai-first-engineering/SKILL.md +51 -0
  263. package/resources/ecc/skills/ai-regression-testing/SKILL.md +385 -0
  264. package/resources/ecc/skills/android-clean-architecture/SKILL.md +339 -0
  265. package/resources/ecc/skills/angular-developer/SKILL.md +154 -0
  266. package/resources/ecc/skills/angular-developer/references/angular-animations.md +160 -0
  267. package/resources/ecc/skills/angular-developer/references/angular-aria.md +410 -0
  268. package/resources/ecc/skills/angular-developer/references/cli.md +86 -0
  269. package/resources/ecc/skills/angular-developer/references/component-harnesses.md +59 -0
  270. package/resources/ecc/skills/angular-developer/references/component-styling.md +91 -0
  271. package/resources/ecc/skills/angular-developer/references/components.md +117 -0
  272. package/resources/ecc/skills/angular-developer/references/creating-services.md +97 -0
  273. package/resources/ecc/skills/angular-developer/references/data-resolvers.md +69 -0
  274. package/resources/ecc/skills/angular-developer/references/define-routes.md +67 -0
  275. package/resources/ecc/skills/angular-developer/references/defining-providers.md +72 -0
  276. package/resources/ecc/skills/angular-developer/references/di-fundamentals.md +120 -0
  277. package/resources/ecc/skills/angular-developer/references/e2e-testing.md +56 -0
  278. package/resources/ecc/skills/angular-developer/references/effects.md +83 -0
  279. package/resources/ecc/skills/angular-developer/references/hierarchical-injectors.md +43 -0
  280. package/resources/ecc/skills/angular-developer/references/host-elements.md +80 -0
  281. package/resources/ecc/skills/angular-developer/references/injection-context.md +63 -0
  282. package/resources/ecc/skills/angular-developer/references/inputs.md +101 -0
  283. package/resources/ecc/skills/angular-developer/references/linked-signal.md +59 -0
  284. package/resources/ecc/skills/angular-developer/references/loading-strategies.md +61 -0
  285. package/resources/ecc/skills/angular-developer/references/mcp.md +108 -0
  286. package/resources/ecc/skills/angular-developer/references/navigate-to-routes.md +69 -0
  287. package/resources/ecc/skills/angular-developer/references/outputs.md +86 -0
  288. package/resources/ecc/skills/angular-developer/references/reactive-forms.md +122 -0
  289. package/resources/ecc/skills/angular-developer/references/rendering-strategies.md +44 -0
  290. package/resources/ecc/skills/angular-developer/references/resource.md +77 -0
  291. package/resources/ecc/skills/angular-developer/references/route-animations.md +56 -0
  292. package/resources/ecc/skills/angular-developer/references/route-guards.md +52 -0
  293. package/resources/ecc/skills/angular-developer/references/router-lifecycle.md +45 -0
  294. package/resources/ecc/skills/angular-developer/references/router-testing.md +87 -0
  295. package/resources/ecc/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
  296. package/resources/ecc/skills/angular-developer/references/signal-forms.md +795 -0
  297. package/resources/ecc/skills/angular-developer/references/signals-overview.md +94 -0
  298. package/resources/ecc/skills/angular-developer/references/tailwind-css.md +69 -0
  299. package/resources/ecc/skills/angular-developer/references/template-driven-forms.md +114 -0
  300. package/resources/ecc/skills/angular-developer/references/testing-fundamentals.md +65 -0
  301. package/resources/ecc/skills/api-connector-builder/SKILL.md +120 -0
  302. package/resources/ecc/skills/api-design/SKILL.md +1 -0
  303. package/resources/ecc/skills/architecture-decision-records/SKILL.md +179 -0
  304. package/resources/ecc/skills/article-writing/SKILL.md +1 -0
  305. package/resources/ecc/skills/automation-audit-ops/SKILL.md +142 -0
  306. package/resources/ecc/skills/autonomous-agent-harness/SKILL.md +273 -0
  307. package/resources/ecc/skills/autonomous-loops/SKILL.md +610 -0
  308. package/resources/ecc/skills/backend-patterns/SKILL.md +8 -44
  309. package/resources/ecc/skills/benchmark/SKILL.md +93 -0
  310. package/resources/ecc/skills/blueprint/SKILL.md +105 -0
  311. package/resources/ecc/skills/brand-voice/SKILL.md +1 -0
  312. package/resources/ecc/skills/browser-qa/SKILL.md +87 -0
  313. package/resources/ecc/skills/bun-runtime/SKILL.md +1 -0
  314. package/resources/ecc/skills/canary-watch/SKILL.md +99 -0
  315. package/resources/ecc/skills/carrier-relationship-management/SKILL.md +212 -0
  316. package/resources/ecc/skills/cisco-ios-patterns/SKILL.md +163 -0
  317. package/resources/ecc/skills/ck/SKILL.md +147 -0
  318. package/resources/ecc/skills/ck/commands/forget.mjs +44 -0
  319. package/resources/ecc/skills/ck/commands/info.mjs +24 -0
  320. package/resources/ecc/skills/ck/commands/init.mjs +143 -0
  321. package/resources/ecc/skills/ck/commands/list.mjs +40 -0
  322. package/resources/ecc/skills/ck/commands/migrate.mjs +202 -0
  323. package/resources/ecc/skills/ck/commands/resume.mjs +36 -0
  324. package/resources/ecc/skills/ck/commands/save.mjs +210 -0
  325. package/resources/ecc/skills/ck/commands/shared.mjs +387 -0
  326. package/resources/ecc/skills/ck/hooks/session-start.mjs +224 -0
  327. package/resources/ecc/skills/claude-devfleet/SKILL.md +103 -0
  328. package/resources/ecc/skills/click-path-audit/SKILL.md +244 -0
  329. package/resources/ecc/skills/clickhouse-io/SKILL.md +439 -0
  330. package/resources/ecc/skills/code-tour/SKILL.md +236 -0
  331. package/resources/ecc/skills/codebase-onboarding/SKILL.md +233 -0
  332. package/resources/ecc/skills/coding-standards/SKILL.md +1 -0
  333. package/resources/ecc/skills/compose-multiplatform-patterns/SKILL.md +299 -0
  334. package/resources/ecc/skills/configure-ecc/SKILL.md +384 -0
  335. package/resources/ecc/skills/connections-optimizer/SKILL.md +189 -0
  336. package/resources/ecc/skills/content-engine/SKILL.md +1 -0
  337. package/resources/ecc/skills/content-hash-cache-pattern/SKILL.md +161 -0
  338. package/resources/ecc/skills/context-budget/SKILL.md +135 -0
  339. package/resources/ecc/skills/continuous-agent-loop/SKILL.md +45 -0
  340. package/resources/ecc/skills/continuous-learning/SKILL.md +131 -0
  341. package/resources/ecc/skills/continuous-learning/config.json +18 -0
  342. package/resources/ecc/skills/continuous-learning/evaluate-session.sh +69 -0
  343. package/resources/ecc/skills/continuous-learning-v2/SKILL.md +360 -0
  344. package/resources/ecc/skills/continuous-learning-v2/agents/observer-loop.sh +322 -0
  345. package/resources/ecc/skills/continuous-learning-v2/agents/observer.md +198 -0
  346. package/resources/ecc/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
  347. package/resources/ecc/skills/continuous-learning-v2/agents/start-observer.sh +248 -0
  348. package/resources/ecc/skills/continuous-learning-v2/config.json +8 -0
  349. package/resources/ecc/skills/continuous-learning-v2/hooks/observe.sh +476 -0
  350. package/resources/ecc/skills/continuous-learning-v2/scripts/detect-project.sh +288 -0
  351. package/resources/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +1519 -0
  352. package/resources/ecc/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
  353. package/resources/ecc/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
  354. package/resources/ecc/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1018 -0
  355. package/resources/ecc/skills/cost-aware-llm-pipeline/SKILL.md +183 -0
  356. package/resources/ecc/skills/cost-tracking/SKILL.md +147 -0
  357. package/resources/ecc/skills/council/SKILL.md +203 -0
  358. package/resources/ecc/skills/cpp-coding-standards/SKILL.md +723 -0
  359. package/resources/ecc/skills/cpp-testing/SKILL.md +324 -0
  360. package/resources/ecc/skills/crosspost/SKILL.md +1 -0
  361. package/resources/ecc/skills/csharp-testing/SKILL.md +321 -0
  362. package/resources/ecc/skills/customer-billing-ops/SKILL.md +140 -0
  363. package/resources/ecc/skills/customs-trade-compliance/SKILL.md +263 -0
  364. package/resources/ecc/skills/dart-flutter-patterns/SKILL.md +563 -0
  365. package/resources/ecc/skills/dashboard-builder/SKILL.md +108 -0
  366. package/resources/ecc/skills/data-scraper-agent/SKILL.md +764 -0
  367. package/resources/ecc/skills/database-migrations/SKILL.md +429 -0
  368. package/resources/ecc/skills/deep-research/SKILL.md +5 -0
  369. package/resources/ecc/skills/defi-amm-security/SKILL.md +166 -0
  370. package/resources/ecc/skills/deployment-patterns/SKILL.md +427 -0
  371. package/resources/ecc/skills/design-system/SKILL.md +82 -0
  372. package/resources/ecc/skills/django-celery/SKILL.md +457 -0
  373. package/resources/ecc/skills/django-patterns/SKILL.md +734 -0
  374. package/resources/ecc/skills/django-security/SKILL.md +593 -0
  375. package/resources/ecc/skills/django-tdd/SKILL.md +729 -0
  376. package/resources/ecc/skills/django-verification/SKILL.md +469 -0
  377. package/resources/ecc/skills/dmux-workflows/SKILL.md +52 -4
  378. package/resources/ecc/skills/docker-patterns/SKILL.md +364 -0
  379. package/resources/ecc/skills/documentation-lookup/SKILL.md +1 -0
  380. package/resources/ecc/skills/dotnet-patterns/SKILL.md +321 -0
  381. package/resources/ecc/skills/e2e-testing/SKILL.md +1 -0
  382. package/resources/ecc/skills/ecc-guide/SKILL.md +189 -0
  383. package/resources/ecc/skills/ecc-tools-cost-audit/SKILL.md +160 -0
  384. package/resources/ecc/skills/email-ops/SKILL.md +121 -0
  385. package/resources/ecc/skills/energy-procurement/SKILL.md +228 -0
  386. package/resources/ecc/skills/enterprise-agent-ops/SKILL.md +50 -0
  387. package/resources/ecc/skills/error-handling/SKILL.md +376 -0
  388. package/resources/ecc/skills/eval-harness/SKILL.md +36 -1
  389. package/resources/ecc/skills/evm-token-decimals/SKILL.md +130 -0
  390. package/resources/ecc/skills/exa-search/SKILL.md +18 -80
  391. package/resources/ecc/skills/fal-ai-media/SKILL.md +32 -20
  392. package/resources/ecc/skills/fastapi-patterns/SKILL.md +327 -0
  393. package/resources/ecc/skills/finance-billing-ops/SKILL.md +127 -0
  394. package/resources/ecc/skills/flox-environments/SKILL.md +496 -0
  395. package/resources/ecc/skills/flutter-dart-code-review/SKILL.md +435 -0
  396. package/resources/ecc/skills/foundation-models-on-device/SKILL.md +243 -0
  397. package/resources/ecc/skills/frontend-design-direction/SKILL.md +92 -0
  398. package/resources/ecc/skills/frontend-patterns/SKILL.md +1 -6
  399. package/resources/ecc/skills/frontend-slides/SKILL.md +2 -1
  400. package/resources/ecc/skills/frontend-slides/animation-patterns.md +122 -0
  401. package/resources/ecc/skills/frontend-slides/html-template.md +419 -0
  402. package/resources/ecc/skills/frontend-slides/scripts/export-pdf.sh +418 -0
  403. package/resources/ecc/skills/frontend-slides/scripts/extract-pptx.py +96 -0
  404. package/resources/ecc/skills/frontend-slides/viewport-base.css +153 -0
  405. package/resources/ecc/skills/fsharp-testing/SKILL.md +280 -0
  406. package/resources/ecc/skills/gan-style-harness/SKILL.md +278 -0
  407. package/resources/ecc/skills/gateguard/SKILL.md +125 -0
  408. package/resources/ecc/skills/git-workflow/SKILL.md +715 -0
  409. package/resources/ecc/skills/github-ops/SKILL.md +144 -0
  410. package/resources/ecc/skills/golang-patterns/SKILL.md +674 -0
  411. package/resources/ecc/skills/golang-testing/SKILL.md +720 -0
  412. package/resources/ecc/skills/google-workspace-ops/SKILL.md +95 -0
  413. package/resources/ecc/skills/healthcare-cdss-patterns/SKILL.md +245 -0
  414. package/resources/ecc/skills/healthcare-emr-patterns/SKILL.md +159 -0
  415. package/resources/ecc/skills/healthcare-eval-harness/SKILL.md +207 -0
  416. package/resources/ecc/skills/healthcare-phi-compliance/SKILL.md +145 -0
  417. package/resources/ecc/skills/hermes-imports/SKILL.md +88 -0
  418. package/resources/ecc/skills/hexagonal-architecture/SKILL.md +276 -0
  419. package/resources/ecc/skills/hipaa-compliance/SKILL.md +78 -0
  420. package/resources/ecc/skills/homelab-network-readiness/SKILL.md +169 -0
  421. package/resources/ecc/skills/homelab-network-setup/SKILL.md +129 -0
  422. package/resources/ecc/skills/homelab-pihole-dns/SKILL.md +274 -0
  423. package/resources/ecc/skills/homelab-vlan-segmentation/SKILL.md +311 -0
  424. package/resources/ecc/skills/homelab-wireguard-vpn/SKILL.md +305 -0
  425. package/resources/ecc/skills/hookify-rules/SKILL.md +128 -0
  426. package/resources/ecc/skills/inventory-demand-planning/SKILL.md +247 -0
  427. package/resources/ecc/skills/investor-materials/SKILL.md +1 -0
  428. package/resources/ecc/skills/investor-outreach/SKILL.md +1 -0
  429. package/resources/ecc/skills/ios-icon-gen/SKILL.md +157 -0
  430. package/resources/ecc/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
  431. package/resources/ecc/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
  432. package/resources/ecc/skills/iterative-retrieval/SKILL.md +211 -0
  433. package/resources/ecc/skills/java-coding-standards/SKILL.md +383 -0
  434. package/resources/ecc/skills/jira-integration/SKILL.md +293 -0
  435. package/resources/ecc/skills/jpa-patterns/SKILL.md +151 -0
  436. package/resources/ecc/skills/knowledge-ops/SKILL.md +154 -0
  437. package/resources/ecc/skills/kotlin-coroutines-flows/SKILL.md +284 -0
  438. package/resources/ecc/skills/kotlin-exposed-patterns/SKILL.md +719 -0
  439. package/resources/ecc/skills/kotlin-ktor-patterns/SKILL.md +689 -0
  440. package/resources/ecc/skills/kotlin-patterns/SKILL.md +711 -0
  441. package/resources/ecc/skills/kotlin-testing/SKILL.md +824 -0
  442. package/resources/ecc/skills/laravel-patterns/SKILL.md +415 -0
  443. package/resources/ecc/skills/laravel-plugin-discovery/SKILL.md +229 -0
  444. package/resources/ecc/skills/laravel-security/SKILL.md +285 -0
  445. package/resources/ecc/skills/laravel-tdd/SKILL.md +283 -0
  446. package/resources/ecc/skills/laravel-verification/SKILL.md +179 -0
  447. package/resources/ecc/skills/lead-intelligence/SKILL.md +321 -0
  448. package/resources/ecc/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
  449. package/resources/ecc/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
  450. package/resources/ecc/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
  451. package/resources/ecc/skills/lead-intelligence/agents/signal-scorer.md +60 -0
  452. package/resources/ecc/skills/liquid-glass-design/SKILL.md +279 -0
  453. package/resources/ecc/skills/llm-trading-agent-security/SKILL.md +146 -0
  454. package/resources/ecc/skills/logistics-exception-management/SKILL.md +222 -0
  455. package/resources/ecc/skills/make-interfaces-feel-better/SKILL.md +151 -0
  456. package/resources/ecc/skills/manim-video/SKILL.md +89 -0
  457. package/resources/ecc/skills/manim-video/assets/network_graph_scene.py +52 -0
  458. package/resources/ecc/skills/market-research/SKILL.md +1 -0
  459. package/resources/ecc/skills/mcp-server-patterns/SKILL.md +3 -0
  460. package/resources/ecc/skills/messages-ops/SKILL.md +104 -0
  461. package/resources/ecc/skills/mle-workflow/SKILL.md +1 -1
  462. package/resources/ecc/skills/motion-advanced/SKILL.md +596 -0
  463. package/resources/ecc/skills/motion-foundations/SKILL.md +299 -0
  464. package/resources/ecc/skills/motion-patterns/SKILL.md +435 -0
  465. package/resources/ecc/skills/motion-ui/SKILL.md +575 -0
  466. package/resources/ecc/skills/mysql-patterns/SKILL.md +412 -0
  467. package/resources/ecc/skills/nanoclaw-repl/SKILL.md +33 -0
  468. package/resources/ecc/skills/nestjs-patterns/SKILL.md +230 -0
  469. package/resources/ecc/skills/netmiko-ssh-automation/SKILL.md +173 -0
  470. package/resources/ecc/skills/network-bgp-diagnostics/SKILL.md +167 -0
  471. package/resources/ecc/skills/network-config-validation/SKILL.md +210 -0
  472. package/resources/ecc/skills/network-interface-health/SKILL.md +152 -0
  473. package/resources/ecc/skills/nextjs-turbopack/SKILL.md +1 -0
  474. package/resources/ecc/skills/nodejs-keccak256/SKILL.md +102 -0
  475. package/resources/ecc/skills/nutrient-document-processing/SKILL.md +167 -0
  476. package/resources/ecc/skills/nuxt4-patterns/SKILL.md +100 -0
  477. package/resources/ecc/skills/openclaw-persona-forge/SKILL.md +288 -0
  478. package/resources/ecc/skills/openclaw-persona-forge/gacha.py +224 -0
  479. package/resources/ecc/skills/openclaw-persona-forge/gacha.sh +5 -0
  480. package/resources/ecc/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
  481. package/resources/ecc/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
  482. package/resources/ecc/skills/openclaw-persona-forge/references/error-handling.md +53 -0
  483. package/resources/ecc/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
  484. package/resources/ecc/skills/openclaw-persona-forge/references/naming-system.md +39 -0
  485. package/resources/ecc/skills/openclaw-persona-forge/references/output-template.md +166 -0
  486. package/resources/ecc/skills/opensource-pipeline/SKILL.md +255 -0
  487. package/resources/ecc/skills/perl-patterns/SKILL.md +504 -0
  488. package/resources/ecc/skills/perl-security/SKILL.md +503 -0
  489. package/resources/ecc/skills/perl-testing/SKILL.md +475 -0
  490. package/resources/ecc/skills/plan-orchestrate/SKILL.md +262 -0
  491. package/resources/ecc/skills/plankton-code-quality/SKILL.md +236 -0
  492. package/resources/ecc/skills/postgres-patterns/SKILL.md +147 -0
  493. package/resources/ecc/skills/product-capability/SKILL.md +1 -0
  494. package/resources/ecc/skills/product-lens/SKILL.md +92 -0
  495. package/resources/ecc/skills/production-audit/SKILL.md +206 -0
  496. package/resources/ecc/skills/production-scheduling/SKILL.md +238 -0
  497. package/resources/ecc/skills/project-flow-ops/SKILL.md +111 -0
  498. package/resources/ecc/skills/prompt-optimizer/SKILL.md +398 -0
  499. package/resources/ecc/skills/python-patterns/SKILL.md +750 -0
  500. package/resources/ecc/skills/python-testing/SKILL.md +816 -0
  501. package/resources/ecc/skills/pytorch-patterns/SKILL.md +396 -0
  502. package/resources/ecc/skills/quality-nonconformance/SKILL.md +260 -0
  503. package/resources/ecc/skills/quarkus-patterns/SKILL.md +722 -0
  504. package/resources/ecc/skills/quarkus-security/SKILL.md +467 -0
  505. package/resources/ecc/skills/quarkus-tdd/SKILL.md +811 -0
  506. package/resources/ecc/skills/quarkus-verification/SKILL.md +479 -0
  507. package/resources/ecc/skills/ralphinho-rfc-pipeline/SKILL.md +67 -0
  508. package/resources/ecc/skills/redis-patterns/SKILL.md +403 -0
  509. package/resources/ecc/skills/regex-vs-llm-structured-text/SKILL.md +220 -0
  510. package/resources/ecc/skills/remotion-video-creation/SKILL.md +43 -0
  511. package/resources/ecc/skills/remotion-video-creation/rules/3d.md +86 -0
  512. package/resources/ecc/skills/remotion-video-creation/rules/animations.md +29 -0
  513. package/resources/ecc/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
  514. package/resources/ecc/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
  515. package/resources/ecc/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
  516. package/resources/ecc/skills/remotion-video-creation/rules/assets.md +78 -0
  517. package/resources/ecc/skills/remotion-video-creation/rules/audio.md +172 -0
  518. package/resources/ecc/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
  519. package/resources/ecc/skills/remotion-video-creation/rules/can-decode.md +75 -0
  520. package/resources/ecc/skills/remotion-video-creation/rules/charts.md +58 -0
  521. package/resources/ecc/skills/remotion-video-creation/rules/compositions.md +146 -0
  522. package/resources/ecc/skills/remotion-video-creation/rules/display-captions.md +126 -0
  523. package/resources/ecc/skills/remotion-video-creation/rules/extract-frames.md +229 -0
  524. package/resources/ecc/skills/remotion-video-creation/rules/fonts.md +152 -0
  525. package/resources/ecc/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
  526. package/resources/ecc/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
  527. package/resources/ecc/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
  528. package/resources/ecc/skills/remotion-video-creation/rules/gifs.md +138 -0
  529. package/resources/ecc/skills/remotion-video-creation/rules/images.md +130 -0
  530. package/resources/ecc/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
  531. package/resources/ecc/skills/remotion-video-creation/rules/lottie.md +67 -0
  532. package/resources/ecc/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
  533. package/resources/ecc/skills/remotion-video-creation/rules/measuring-text.md +143 -0
  534. package/resources/ecc/skills/remotion-video-creation/rules/sequencing.md +106 -0
  535. package/resources/ecc/skills/remotion-video-creation/rules/tailwind.md +11 -0
  536. package/resources/ecc/skills/remotion-video-creation/rules/text-animations.md +20 -0
  537. package/resources/ecc/skills/remotion-video-creation/rules/timing.md +179 -0
  538. package/resources/ecc/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
  539. package/resources/ecc/skills/remotion-video-creation/rules/transitions.md +122 -0
  540. package/resources/ecc/skills/remotion-video-creation/rules/trimming.md +52 -0
  541. package/resources/ecc/skills/remotion-video-creation/rules/videos.md +171 -0
  542. package/resources/ecc/skills/repo-scan/SKILL.md +78 -0
  543. package/resources/ecc/skills/research-ops/SKILL.md +112 -0
  544. package/resources/ecc/skills/returns-reverse-logistics/SKILL.md +240 -0
  545. package/resources/ecc/skills/rules-distill/SKILL.md +264 -0
  546. package/resources/ecc/skills/rules-distill/scripts/scan-rules.sh +58 -0
  547. package/resources/ecc/skills/rules-distill/scripts/scan-skills.sh +129 -0
  548. package/resources/ecc/skills/rust-patterns/SKILL.md +499 -0
  549. package/resources/ecc/skills/rust-testing/SKILL.md +500 -0
  550. package/resources/ecc/skills/safety-guard/SKILL.md +75 -0
  551. package/resources/ecc/skills/santa-method/SKILL.md +306 -0
  552. package/resources/ecc/skills/scientific-db-pubmed-database/SKILL.md +175 -0
  553. package/resources/ecc/skills/scientific-db-uspto-database/SKILL.md +177 -0
  554. package/resources/ecc/skills/scientific-pkg-gget/SKILL.md +166 -0
  555. package/resources/ecc/skills/scientific-thinking-literature-review/SKILL.md +192 -0
  556. package/resources/ecc/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
  557. package/resources/ecc/skills/search-first/SKILL.md +182 -0
  558. package/resources/ecc/skills/security-bounty-hunter/SKILL.md +99 -0
  559. package/resources/ecc/skills/security-review/SKILL.md +11 -2
  560. package/resources/ecc/skills/security-review/cloud-infrastructure-security.md +361 -0
  561. package/resources/ecc/skills/security-scan/SKILL.md +165 -0
  562. package/resources/ecc/skills/seo/SKILL.md +154 -0
  563. package/resources/ecc/skills/skill-comply/SKILL.md +58 -0
  564. package/resources/ecc/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
  565. package/resources/ecc/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
  566. package/resources/ecc/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
  567. package/resources/ecc/skills/skill-comply/prompts/classifier.md +24 -0
  568. package/resources/ecc/skills/skill-comply/prompts/scenario_generator.md +62 -0
  569. package/resources/ecc/skills/skill-comply/prompts/spec_generator.md +42 -0
  570. package/resources/ecc/skills/skill-comply/pyproject.toml +15 -0
  571. package/resources/ecc/skills/skill-comply/scripts/__init__.py +0 -0
  572. package/resources/ecc/skills/skill-comply/scripts/classifier.py +85 -0
  573. package/resources/ecc/skills/skill-comply/scripts/grader.py +124 -0
  574. package/resources/ecc/skills/skill-comply/scripts/parser.py +107 -0
  575. package/resources/ecc/skills/skill-comply/scripts/report.py +170 -0
  576. package/resources/ecc/skills/skill-comply/scripts/run.py +127 -0
  577. package/resources/ecc/skills/skill-comply/scripts/runner.py +186 -0
  578. package/resources/ecc/skills/skill-comply/scripts/scenario_generator.py +70 -0
  579. package/resources/ecc/skills/skill-comply/scripts/spec_generator.py +72 -0
  580. package/resources/ecc/skills/skill-comply/scripts/utils.py +13 -0
  581. package/resources/ecc/skills/skill-comply/tests/test_grader.py +197 -0
  582. package/resources/ecc/skills/skill-comply/tests/test_parser.py +90 -0
  583. package/resources/ecc/skills/skill-comply/tests/test_runner.py +172 -0
  584. package/resources/ecc/skills/skill-scout/SKILL.md +140 -0
  585. package/resources/ecc/skills/skill-stocktake/SKILL.md +194 -0
  586. package/resources/ecc/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
  587. package/resources/ecc/skills/skill-stocktake/scripts/save-results.sh +56 -0
  588. package/resources/ecc/skills/skill-stocktake/scripts/scan.sh +170 -0
  589. package/resources/ecc/skills/social-graph-ranker/SKILL.md +154 -0
  590. package/resources/ecc/skills/springboot-patterns/SKILL.md +314 -0
  591. package/resources/ecc/skills/springboot-security/SKILL.md +272 -0
  592. package/resources/ecc/skills/springboot-tdd/SKILL.md +158 -0
  593. package/resources/ecc/skills/springboot-verification/SKILL.md +231 -0
  594. package/resources/ecc/skills/strategic-compact/SKILL.md +31 -2
  595. package/resources/ecc/skills/strategic-compact/suggest-compact.sh +54 -0
  596. package/resources/ecc/skills/swift-actor-persistence/SKILL.md +143 -0
  597. package/resources/ecc/skills/swift-concurrency-6-2/SKILL.md +216 -0
  598. package/resources/ecc/skills/swift-protocol-di-testing/SKILL.md +190 -0
  599. package/resources/ecc/skills/swiftui-patterns/SKILL.md +259 -0
  600. package/resources/ecc/skills/tdd-workflow/SKILL.md +54 -0
  601. package/resources/ecc/skills/team-builder/SKILL.md +168 -0
  602. package/resources/ecc/skills/terminal-ops/SKILL.md +109 -0
  603. package/resources/ecc/skills/tinystruct-patterns/SKILL.md +131 -0
  604. package/resources/ecc/skills/tinystruct-patterns/references/architecture.md +77 -0
  605. package/resources/ecc/skills/tinystruct-patterns/references/data-handling.md +35 -0
  606. package/resources/ecc/skills/tinystruct-patterns/references/routing.md +57 -0
  607. package/resources/ecc/skills/tinystruct-patterns/references/system-usage.md +74 -0
  608. package/resources/ecc/skills/tinystruct-patterns/references/testing.md +59 -0
  609. package/resources/ecc/skills/token-budget-advisor/SKILL.md +133 -0
  610. package/resources/ecc/skills/ui-demo/SKILL.md +465 -0
  611. package/resources/ecc/skills/ui-to-vue/SKILL.md +134 -0
  612. package/resources/ecc/skills/unified-notifications-ops/SKILL.md +187 -0
  613. package/resources/ecc/skills/verification-loop/SKILL.md +1 -0
  614. package/resources/ecc/skills/video-editing/SKILL.md +4 -1
  615. package/resources/ecc/skills/videodb/SKILL.md +374 -0
  616. package/resources/ecc/skills/videodb/reference/api-reference.md +550 -0
  617. package/resources/ecc/skills/videodb/reference/capture-reference.md +407 -0
  618. package/resources/ecc/skills/videodb/reference/capture.md +101 -0
  619. package/resources/ecc/skills/videodb/reference/editor.md +443 -0
  620. package/resources/ecc/skills/videodb/reference/generative.md +331 -0
  621. package/resources/ecc/skills/videodb/reference/rtstream-reference.md +564 -0
  622. package/resources/ecc/skills/videodb/reference/rtstream.md +65 -0
  623. package/resources/ecc/skills/videodb/reference/search.md +230 -0
  624. package/resources/ecc/skills/videodb/reference/streaming.md +406 -0
  625. package/resources/ecc/skills/videodb/reference/use-cases.md +118 -0
  626. package/resources/ecc/skills/videodb/scripts/ws_listener.py +282 -0
  627. package/resources/ecc/skills/visa-doc-translate/README.md +86 -0
  628. package/resources/ecc/skills/visa-doc-translate/SKILL.md +117 -0
  629. package/resources/ecc/skills/vite-patterns/SKILL.md +449 -0
  630. package/resources/ecc/skills/windows-desktop-e2e/SKILL.md +788 -0
  631. package/resources/ecc/skills/workspace-surface-audit/SKILL.md +125 -0
  632. package/resources/ecc/skills/x-api/SKILL.md +5 -0
  633. package/resources/ecc/agents/architect.json +0 -16
  634. package/resources/ecc/agents/build-error-resolver.json +0 -17
  635. package/resources/ecc/agents/chief-of-staff.json +0 -17
  636. package/resources/ecc/agents/code-reviewer.json +0 -16
  637. package/resources/ecc/agents/database-reviewer.json +0 -16
  638. package/resources/ecc/agents/doc-updater.json +0 -16
  639. package/resources/ecc/agents/e2e-runner.json +0 -17
  640. package/resources/ecc/agents/go-build-resolver.json +0 -17
  641. package/resources/ecc/agents/go-reviewer.json +0 -16
  642. package/resources/ecc/agents/harness-optimizer.json +0 -15
  643. package/resources/ecc/agents/loop-operator.json +0 -16
  644. package/resources/ecc/agents/planner.json +0 -15
  645. package/resources/ecc/agents/python-reviewer.json +0 -16
  646. package/resources/ecc/agents/refactor-cleaner.json +0 -17
  647. package/resources/ecc/agents/security-reviewer.json +0 -16
  648. package/resources/ecc/agents/tdd-guide.json +0 -17
  649. package/resources/ecc/commands/add-language-rules.md +0 -39
  650. package/resources/ecc/commands/database-migration.md +0 -36
  651. package/resources/ecc/commands/feature-development.md +0 -38
  652. package/resources/ecc/rules/common-development-workflow.md +0 -33
  653. package/resources/ecc/rules/kotlin-coding-style.md +0 -39
  654. package/resources/ecc/rules/kotlin-patterns.md +0 -50
  655. package/resources/ecc/rules/kotlin-security.md +0 -58
  656. package/resources/ecc/rules/kotlin-testing.md +0 -38
  657. package/resources/ecc/rules/php-coding-style.md +0 -25
  658. package/resources/ecc/rules/php-patterns.md +0 -23
  659. package/resources/ecc/rules/php-security.md +0 -24
  660. package/resources/ecc/rules/php-testing.md +0 -26
  661. package/resources/ecc/rules/swift-hooks.md +0 -20
  662. package/resources/ecc/rules/typescript-coding-style.md +0 -63
  663. package/resources/ecc/rules/typescript-testing.md +0 -16
  664. package/resources/ecc/skills/agent-introspection-debugging/agents/openai.yaml +0 -7
  665. package/resources/ecc/skills/agent-sort/agents/openai.yaml +0 -7
  666. package/resources/ecc/skills/api-design/agents/openai.yaml +0 -7
  667. package/resources/ecc/skills/article-writing/agents/openai.yaml +0 -7
  668. package/resources/ecc/skills/backend-patterns/agents/openai.yaml +0 -7
  669. package/resources/ecc/skills/brand-voice/agents/openai.yaml +0 -7
  670. package/resources/ecc/skills/bun-runtime/agents/openai.yaml +0 -7
  671. package/resources/ecc/skills/coding-standards/agents/openai.yaml +0 -7
  672. package/resources/ecc/skills/content-engine/agents/openai.yaml +0 -7
  673. package/resources/ecc/skills/crosspost/agents/openai.yaml +0 -7
  674. package/resources/ecc/skills/deep-research/agents/openai.yaml +0 -7
  675. package/resources/ecc/skills/dmux-workflows/agents/openai.yaml +0 -7
  676. package/resources/ecc/skills/documentation-lookup/agents/openai.yaml +0 -7
  677. package/resources/ecc/skills/e2e-testing/agents/openai.yaml +0 -7
  678. package/resources/ecc/skills/eval-harness/agents/openai.yaml +0 -7
  679. package/resources/ecc/skills/everything-claude-code/SKILL.md +0 -442
  680. package/resources/ecc/skills/everything-claude-code/agents/openai.yaml +0 -7
  681. package/resources/ecc/skills/exa-search/agents/openai.yaml +0 -7
  682. package/resources/ecc/skills/fal-ai-media/agents/openai.yaml +0 -7
  683. package/resources/ecc/skills/frontend-patterns/agents/openai.yaml +0 -7
  684. package/resources/ecc/skills/frontend-slides/agents/openai.yaml +0 -7
  685. package/resources/ecc/skills/investor-materials/agents/openai.yaml +0 -7
  686. package/resources/ecc/skills/investor-outreach/agents/openai.yaml +0 -7
  687. package/resources/ecc/skills/market-research/agents/openai.yaml +0 -7
  688. package/resources/ecc/skills/mcp-server-patterns/agents/openai.yaml +0 -7
  689. package/resources/ecc/skills/mle-workflow/agents/openai.yaml +0 -7
  690. package/resources/ecc/skills/nextjs-turbopack/agents/openai.yaml +0 -7
  691. package/resources/ecc/skills/product-capability/agents/openai.yaml +0 -7
  692. package/resources/ecc/skills/security-review/agents/openai.yaml +0 -7
  693. package/resources/ecc/skills/strategic-compact/agents/openai.yaml +0 -7
  694. package/resources/ecc/skills/tdd-workflow/agents/openai.yaml +0 -7
  695. package/resources/ecc/skills/verification-loop/agents/openai.yaml +0 -7
  696. package/resources/ecc/skills/video-editing/agents/openai.yaml +0 -7
  697. package/resources/ecc/skills/x-api/agents/openai.yaml +0 -7
@@ -0,0 +1,154 @@
1
+ ---
2
+ name: seo
3
+ description: Audit, plan, and implement SEO improvements across technical SEO, on-page optimization, structured data, Core Web Vitals, and content strategy. Use when the user wants better search visibility, SEO remediation, schema markup, sitemap/robots work, or keyword mapping.
4
+ origin: ECC
5
+ ---
6
+
7
+ # SEO
8
+
9
+ Improve search visibility through technical correctness, performance, and content relevance, not gimmicks.
10
+
11
+ ## When to Use
12
+
13
+ Use this skill when:
14
+ - auditing crawlability, indexability, canonicals, or redirects
15
+ - improving title tags, meta descriptions, and heading structure
16
+ - adding or validating structured data
17
+ - improving Core Web Vitals
18
+ - doing keyword research and mapping keywords to URLs
19
+ - planning internal linking or sitemap / robots changes
20
+
21
+ ## How It Works
22
+
23
+ ### Principles
24
+
25
+ 1. Fix technical blockers before content optimization.
26
+ 2. One page should have one clear primary search intent.
27
+ 3. Prefer long-term quality signals over manipulative patterns.
28
+ 4. Mobile-first assumptions matter because indexing is mobile-first.
29
+ 5. Recommendations should be page-specific and implementable.
30
+
31
+ ### Technical SEO checklist
32
+
33
+ #### Crawlability
34
+
35
+ - `robots.txt` should allow important pages and block low-value surfaces
36
+ - no important page should be unintentionally `noindex`
37
+ - important pages should be reachable within a shallow click depth
38
+ - avoid redirect chains longer than two hops
39
+ - canonical tags should be self-consistent and non-looping
40
+
41
+ #### Indexability
42
+
43
+ - preferred URL format should be consistent
44
+ - multilingual pages need correct hreflang if used
45
+ - sitemaps should reflect the intended public surface
46
+ - no duplicate URLs should compete without canonical control
47
+
48
+ #### Performance
49
+
50
+ - LCP < 2.5s
51
+ - INP < 200ms
52
+ - CLS < 0.1
53
+ - common fixes: preload hero assets, reduce render-blocking work, reserve layout space, trim heavy JS
54
+
55
+ #### Structured data
56
+
57
+ - homepage: organization or business schema where appropriate
58
+ - editorial pages: `Article` / `BlogPosting`
59
+ - product pages: `Product` and `Offer`
60
+ - interior pages: `BreadcrumbList`
61
+ - Q&A sections: `FAQPage` only when the content truly matches
62
+
63
+ ### On-page rules
64
+
65
+ #### Title tags
66
+
67
+ - aim for roughly 50-60 characters
68
+ - put the primary keyword or concept near the front
69
+ - make the title legible to humans, not stuffed for bots
70
+
71
+ #### Meta descriptions
72
+
73
+ - aim for roughly 120-160 characters
74
+ - describe the page honestly
75
+ - include the main topic naturally
76
+
77
+ #### Heading structure
78
+
79
+ - one clear `H1`
80
+ - `H2` and `H3` should reflect actual content hierarchy
81
+ - do not skip structure just for visual styling
82
+
83
+ ### Keyword mapping
84
+
85
+ 1. define the search intent
86
+ 2. gather realistic keyword variants
87
+ 3. prioritize by intent match, likely value, and competition
88
+ 4. map one primary keyword/theme to one URL
89
+ 5. detect and avoid cannibalization
90
+
91
+ ### Internal linking
92
+
93
+ - link from strong pages to pages you want to rank
94
+ - use descriptive anchor text
95
+ - avoid generic anchors when a more specific one is possible
96
+ - backfill links from new pages to relevant existing ones
97
+
98
+ ## Examples
99
+
100
+ ### Title formula
101
+
102
+ ```text
103
+ Primary Topic - Specific Modifier | Brand
104
+ ```
105
+
106
+ ### Meta description formula
107
+
108
+ ```text
109
+ Action + topic + value proposition + one supporting detail
110
+ ```
111
+
112
+ ### JSON-LD example
113
+
114
+ ```json
115
+ {
116
+ "@context": "https://schema.org",
117
+ "@type": "Article",
118
+ "headline": "Page Title Here",
119
+ "author": {
120
+ "@type": "Person",
121
+ "name": "Author Name"
122
+ },
123
+ "publisher": {
124
+ "@type": "Organization",
125
+ "name": "Brand Name"
126
+ }
127
+ }
128
+ ```
129
+
130
+ ### Audit output shape
131
+
132
+ ```text
133
+ [HIGH] Duplicate title tags on product pages
134
+ Location: src/routes/products/[slug].tsx
135
+ Issue: Dynamic titles collapse to the same default string, which weakens relevance and creates duplicate signals.
136
+ Fix: Generate a unique title per product using the product name and primary category.
137
+ ```
138
+
139
+ ## Anti-Patterns
140
+
141
+ | Anti-pattern | Fix |
142
+ | --- | --- |
143
+ | keyword stuffing | write for users first |
144
+ | thin near-duplicate pages | consolidate or differentiate them |
145
+ | schema for content that is not actually present | match schema to reality |
146
+ | content advice without checking the actual page | read the real page first |
147
+ | generic “improve SEO” outputs | tie every recommendation to a page or asset |
148
+
149
+ ## Related Skills
150
+
151
+ - `seo-specialist`
152
+ - `frontend-patterns`
153
+ - `brand-voice`
154
+ - `market-research`
@@ -0,0 +1,58 @@
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
+ origin: ECC
5
+ tools: Read, Bash
6
+ ---
7
+
8
+ # skill-comply: Automated Compliance Measurement
9
+
10
+ Measures whether coding agents actually follow skills, rules, or agent definitions by:
11
+ 1. Auto-generating expected behavioral sequences (specs) from any .md file
12
+ 2. Auto-generating scenarios with decreasing prompt strictness (supportive → neutral → competing)
13
+ 3. Running `claude -p` and capturing tool call traces via stream-json
14
+ 4. Classifying tool calls against spec steps using LLM (not regex)
15
+ 5. Checking temporal ordering deterministically
16
+ 6. Generating self-contained reports with spec, prompts, and timelines
17
+
18
+ ## Supported Targets
19
+
20
+ - **Skills** (`skills/*/SKILL.md`): Workflow skills like search-first, TDD guides
21
+ - **Rules** (`rules/common/*.md`): Mandatory rules like testing.md, security.md, git-workflow.md
22
+ - **Agent definitions** (`agents/*.md`): Whether an agent gets invoked when expected (internal workflow verification not yet supported)
23
+
24
+ ## When to Activate
25
+
26
+ - User runs `/skill-comply <path>`
27
+ - User asks "is this rule actually being followed?"
28
+ - After adding new rules/skills, to verify agent compliance
29
+ - Periodically as part of quality maintenance
30
+
31
+ ## Usage
32
+
33
+ ```bash
34
+ # Full run
35
+ uv run python -m scripts.run ~/.claude/rules/common/testing.md
36
+
37
+ # Dry run (no cost, spec + scenarios only)
38
+ uv run python -m scripts.run --dry-run ~/.claude/skills/search-first/SKILL.md
39
+
40
+ # Custom models
41
+ uv run python -m scripts.run --gen-model haiku --model sonnet <path>
42
+ ```
43
+
44
+ ## Key Concept: Prompt Independence
45
+
46
+ Measures whether a skill/rule is followed even when the prompt doesn't explicitly support it.
47
+
48
+ ## Report Contents
49
+
50
+ Reports are self-contained and include:
51
+ 1. Expected behavioral sequence (auto-generated spec)
52
+ 2. Scenario prompts (what was asked at each strictness level)
53
+ 3. Compliance scores per scenario
54
+ 4. Tool call timelines with LLM classification labels
55
+
56
+ ### Advanced (optional)
57
+
58
+ 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.
@@ -0,0 +1,5 @@
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"}
@@ -0,0 +1,3 @@
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"}
@@ -0,0 +1,44 @@
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
@@ -0,0 +1,24 @@
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
@@ -0,0 +1,62 @@
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
+ ---
@@ -0,0 +1,42 @@
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
+ ---
@@ -0,0 +1,15 @@
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
+ ]
@@ -0,0 +1,85 @@
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 {}
@@ -0,0 +1,124 @@
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
+ )