skilldrop-cli 0.13.2 → 0.13.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 (403) hide show
  1. package/README.md +82 -80
  2. package/agents/README.md +3 -3
  3. package/bin/skilldrop.js +78 -17
  4. package/catalogue.json +111 -0
  5. package/contracts/catalogue.schema.json +32 -0
  6. package/contracts/loop.schema.json +2 -2
  7. package/contracts/pack.schema.json +34 -34
  8. package/package.json +3 -4
  9. package/packs/ai-engineering/pack.json +22 -0
  10. package/{skills → packs/ai-engineering/skills}/agent-adoption-stage/SKILL.md +2 -2
  11. package/packs/claude-api/pack.json +21 -0
  12. package/{skills → packs/claude-api/skills}/eval-harness-generator/SKILL.md +2 -2
  13. package/{skills → packs/claude-api/skills}/eval-harness-generator/manifest.json +1 -1
  14. package/{loops → packs/core/loops}/ship-a-draft/LOOP.md +1 -1
  15. package/packs/core/pack.json +21 -0
  16. package/{skills → packs/core/skills}/council-review/SKILL.md +1 -1
  17. package/{skills → packs/core/skills}/council-review/reference.md +2 -2
  18. package/{loops → packs/dev-team/loops}/build/LOOP.md +3 -3
  19. package/{loops → packs/dev-team/loops}/build/loop.json +1 -1
  20. package/{loops → packs/dev-team/loops}/release/LOOP.md +2 -2
  21. package/packs/dev-team/pack.json +22 -0
  22. package/{skills → packs/dev-team/skills}/agents-md-generator/reference.md +1 -1
  23. package/{skills → packs/dev-team/skills}/contribution-wizard/SKILL.md +5 -5
  24. package/{skills → packs/dev-team/skills}/contribution-wizard/manifest.json +1 -1
  25. package/{skills → packs/dev-team/skills}/devils-advocate/SKILL.md +1 -1
  26. package/{skills → packs/dev-team/skills}/pre-merge-review/SKILL.md +1 -1
  27. package/{loops → packs/product-manager/loops}/discover/LOOP.md +3 -3
  28. package/packs/product-manager/pack.json +22 -0
  29. package/{loops → packs/solution-architect/loops}/design/LOOP.md +2 -2
  30. package/packs/solution-architect/pack.json +22 -0
  31. package/{loops → packs/sre-oncall/loops}/operate/LOOP.md +1 -1
  32. package/packs/sre-oncall/pack.json +22 -0
  33. package/packs/stakeholder-comms/pack.json +22 -0
  34. package/{skills → packs/stakeholder-comms/skills}/deck-builder/SKILL.md +1 -1
  35. package/packs.json +0 -229
  36. /package/{skills → packs/ai-engineering/skills}/agent-adoption-stage/evals/eval_queries.json +0 -0
  37. /package/{skills → packs/ai-engineering/skills}/agent-adoption-stage/evals/evals.json +0 -0
  38. /package/{skills → packs/ai-engineering/skills}/agent-adoption-stage/manifest.json +0 -0
  39. /package/{skills → packs/ai-engineering/skills}/agent-budget/SKILL.md +0 -0
  40. /package/{skills → packs/ai-engineering/skills}/agent-budget/evals/eval_queries.json +0 -0
  41. /package/{skills → packs/ai-engineering/skills}/agent-budget/evals/evals.json +0 -0
  42. /package/{skills → packs/ai-engineering/skills}/agent-budget/manifest.json +0 -0
  43. /package/{skills → packs/ai-engineering/skills}/agent-budget/templates/budget-spec.md +0 -0
  44. /package/{skills → packs/ai-engineering/skills}/agent-loop-design/SKILL.md +0 -0
  45. /package/{skills → packs/ai-engineering/skills}/agent-loop-design/evals/eval_queries.json +0 -0
  46. /package/{skills → packs/ai-engineering/skills}/agent-loop-design/evals/evals.json +0 -0
  47. /package/{skills → packs/ai-engineering/skills}/agent-loop-design/manifest.json +0 -0
  48. /package/{skills → packs/ai-engineering/skills}/agent-loop-design/templates/loop-spec.md +0 -0
  49. /package/{skills → packs/ai-engineering/skills}/agent-threat-model/SKILL.md +0 -0
  50. /package/{skills → packs/ai-engineering/skills}/agent-threat-model/evals/eval_queries.json +0 -0
  51. /package/{skills → packs/ai-engineering/skills}/agent-threat-model/evals/evals.json +0 -0
  52. /package/{skills → packs/ai-engineering/skills}/agent-threat-model/examples/support-triage-agent.md +0 -0
  53. /package/{skills → packs/ai-engineering/skills}/agent-threat-model/manifest.json +0 -0
  54. /package/{skills → packs/ai-engineering/skills}/agent-threat-model/reference.md +0 -0
  55. /package/{skills → packs/ai-engineering/skills}/agent-threat-model/templates/agent-threat-model.md +0 -0
  56. /package/{skills → packs/ai-engineering/skills}/ai-adoption-rollout/SKILL.md +0 -0
  57. /package/{skills → packs/ai-engineering/skills}/ai-adoption-rollout/evals/eval_queries.json +0 -0
  58. /package/{skills → packs/ai-engineering/skills}/ai-adoption-rollout/evals/evals.json +0 -0
  59. /package/{skills → packs/ai-engineering/skills}/ai-adoption-rollout/manifest.json +0 -0
  60. /package/{skills → packs/ai-engineering/skills}/ai-readiness-assessment/SKILL.md +0 -0
  61. /package/{skills → packs/ai-engineering/skills}/ai-readiness-assessment/evals/eval_queries.json +0 -0
  62. /package/{skills → packs/ai-engineering/skills}/ai-readiness-assessment/evals/evals.json +0 -0
  63. /package/{skills → packs/ai-engineering/skills}/ai-readiness-assessment/manifest.json +0 -0
  64. /package/{skills → packs/ai-engineering/skills}/ai-usage-policy/SKILL.md +0 -0
  65. /package/{skills → packs/ai-engineering/skills}/ai-usage-policy/evals/eval_queries.json +0 -0
  66. /package/{skills → packs/ai-engineering/skills}/ai-usage-policy/evals/evals.json +0 -0
  67. /package/{skills → packs/ai-engineering/skills}/ai-usage-policy/manifest.json +0 -0
  68. /package/{skills → packs/ai-engineering/skills}/ai-usage-report/SKILL.md +0 -0
  69. /package/{skills → packs/ai-engineering/skills}/ai-usage-report/examples/weekly-engineering-team.md +0 -0
  70. /package/{skills → packs/ai-engineering/skills}/ai-usage-report/manifest.json +0 -0
  71. /package/{skills → packs/ai-engineering/skills}/ai-usage-report/scripts/build_report.py +0 -0
  72. /package/{skills → packs/ai-engineering/skills}/ai-usage-report/templates/report-per-user.md +0 -0
  73. /package/{skills → packs/ai-engineering/skills}/ai-usage-report/templates/report-team-rollup.md +0 -0
  74. /package/{skills → packs/ai-engineering/skills}/ai-usage-report/templates/usage-event-schema.md +0 -0
  75. /package/{skills → packs/ai-engineering/skills}/ai-use-case-triage/SKILL.md +0 -0
  76. /package/{skills → packs/ai-engineering/skills}/ai-use-case-triage/evals/eval_queries.json +0 -0
  77. /package/{skills → packs/ai-engineering/skills}/ai-use-case-triage/evals/evals.json +0 -0
  78. /package/{skills → packs/ai-engineering/skills}/ai-use-case-triage/manifest.json +0 -0
  79. /package/{skills → packs/ai-engineering/skills}/llm-eval-harness/SKILL.md +0 -0
  80. /package/{skills → packs/ai-engineering/skills}/llm-eval-harness/manifest.json +0 -0
  81. /package/{skills → packs/ai-engineering/skills}/llm-eval-harness/reference.md +0 -0
  82. /package/{skills → packs/ai-engineering/skills}/llm-eval-harness/templates/eval-plan.md +0 -0
  83. /package/{skills → packs/ai-engineering/skills}/llm-eval-harness/templates/golden-case.jsonl +0 -0
  84. /package/{skills → packs/ai-engineering/skills}/subagent-design/SKILL.md +0 -0
  85. /package/{skills → packs/ai-engineering/skills}/subagent-design/evals/eval_queries.json +0 -0
  86. /package/{skills → packs/ai-engineering/skills}/subagent-design/evals/evals.json +0 -0
  87. /package/{skills → packs/ai-engineering/skills}/subagent-design/manifest.json +0 -0
  88. /package/{skills → packs/ai-engineering/skills}/subagent-design/templates/orchestration-plan.md +0 -0
  89. /package/{skills → packs/claude-api/skills}/prompt-caching-advisor/SKILL.md +0 -0
  90. /package/{skills → packs/claude-api/skills}/prompt-caching-advisor/manifest.json +0 -0
  91. /package/{skills → packs/claude-api/skills}/token-budget-estimator/SKILL.md +0 -0
  92. /package/{skills → packs/claude-api/skills}/token-budget-estimator/manifest.json +0 -0
  93. /package/{skills → packs/claude-api/skills}/tool-use-schema-writer/SKILL.md +0 -0
  94. /package/{skills → packs/claude-api/skills}/tool-use-schema-writer/manifest.json +0 -0
  95. /package/{loops → packs/core/loops}/ship-a-draft/evals/eval_queries.json +0 -0
  96. /package/{loops → packs/core/loops}/ship-a-draft/evals/evals.json +0 -0
  97. /package/{loops → packs/core/loops}/ship-a-draft/loop.json +0 -0
  98. /package/{skills → packs/core/skills}/brief-intake/SKILL.md +0 -0
  99. /package/{skills → packs/core/skills}/brief-intake/evals/eval_queries.json +0 -0
  100. /package/{skills → packs/core/skills}/brief-intake/evals/evals.json +0 -0
  101. /package/{skills → packs/core/skills}/brief-intake/manifest.json +0 -0
  102. /package/{skills → packs/core/skills}/brief-intake/templates/brief-adr.md +0 -0
  103. /package/{skills → packs/core/skills}/brief-intake/templates/brief-decision-log.md +0 -0
  104. /package/{skills → packs/core/skills}/brief-intake/templates/brief-deck.md +0 -0
  105. /package/{skills → packs/core/skills}/brief-intake/templates/brief-design-doc.md +0 -0
  106. /package/{skills → packs/core/skills}/brief-intake/templates/brief-exec-summary.md +0 -0
  107. /package/{skills → packs/core/skills}/brief-intake/templates/brief-generic.md +0 -0
  108. /package/{skills → packs/core/skills}/brief-intake/templates/brief-runbook.md +0 -0
  109. /package/{skills → packs/core/skills}/brief-intake/templates/brief-tech-comparison.md +0 -0
  110. /package/{skills → packs/core/skills}/council-review/evals/eval_queries.json +0 -0
  111. /package/{skills → packs/core/skills}/council-review/evals/evals.json +0 -0
  112. /package/{skills → packs/core/skills}/council-review/examples/redis-cache-decision.md +0 -0
  113. /package/{skills → packs/core/skills}/council-review/manifest.json +0 -0
  114. /package/{skills → packs/core/skills}/council-review/seats/architect.md +0 -0
  115. /package/{skills → packs/core/skills}/council-review/seats/bench.md +0 -0
  116. /package/{skills → packs/core/skills}/council-review/seats/operator.md +0 -0
  117. /package/{skills → packs/core/skills}/council-review/seats/pragmatist.md +0 -0
  118. /package/{skills → packs/core/skills}/council-review/seats/security-engineer.md +0 -0
  119. /package/{skills → packs/core/skills}/council-review/seats/user-advocate.md +0 -0
  120. /package/{skills → packs/core/skills}/council-review/templates/council-review.md +0 -0
  121. /package/{skills → packs/core/skills}/doc-critique/SKILL.md +0 -0
  122. /package/{skills → packs/core/skills}/doc-critique/evals/eval_queries.json +0 -0
  123. /package/{skills → packs/core/skills}/doc-critique/evals/evals.json +0 -0
  124. /package/{skills → packs/core/skills}/doc-critique/examples/design-doc-critique.md +0 -0
  125. /package/{skills → packs/core/skills}/doc-critique/manifest.json +0 -0
  126. /package/{skills → packs/core/skills}/doc-critique/rubrics/adr.md +0 -0
  127. /package/{skills → packs/core/skills}/doc-critique/rubrics/decision-log.md +0 -0
  128. /package/{skills → packs/core/skills}/doc-critique/rubrics/deck.md +0 -0
  129. /package/{skills → packs/core/skills}/doc-critique/rubrics/design-doc.md +0 -0
  130. /package/{skills → packs/core/skills}/doc-critique/rubrics/exec-summary.md +0 -0
  131. /package/{skills → packs/core/skills}/doc-critique/rubrics/generic.md +0 -0
  132. /package/{skills → packs/core/skills}/doc-critique/rubrics/runbook.md +0 -0
  133. /package/{skills → packs/core/skills}/doc-critique/rubrics/tech-comparison.md +0 -0
  134. /package/{skills → packs/core/skills}/doc-critique/templates/critique.md +0 -0
  135. /package/{skills → packs/core/skills}/output-hygiene/SKILL.md +0 -0
  136. /package/{skills → packs/core/skills}/output-hygiene/evals/eval_queries.json +0 -0
  137. /package/{skills → packs/core/skills}/output-hygiene/evals/evals.json +0 -0
  138. /package/{skills → packs/core/skills}/output-hygiene/manifest.json +0 -0
  139. /package/{skills → packs/core/skills}/output-hygiene/reference.md +0 -0
  140. /package/{skills → packs/core/skills}/output-hygiene/scripts/scrub.py +0 -0
  141. /package/{loops → packs/dev-team/loops}/build/evals/eval_queries.json +0 -0
  142. /package/{loops → packs/dev-team/loops}/build/evals/evals.json +0 -0
  143. /package/{loops → packs/dev-team/loops}/release/loop.json +0 -0
  144. /package/{skills → packs/dev-team/skills}/accessibility-audit/SKILL.md +0 -0
  145. /package/{skills → packs/dev-team/skills}/accessibility-audit/examples/login-form.md +0 -0
  146. /package/{skills → packs/dev-team/skills}/accessibility-audit/manifest.json +0 -0
  147. /package/{skills → packs/dev-team/skills}/accessibility-audit/reference.md +0 -0
  148. /package/{skills → packs/dev-team/skills}/agents-md-generator/SKILL.md +0 -0
  149. /package/{skills → packs/dev-team/skills}/agents-md-generator/evals/eval_queries.json +0 -0
  150. /package/{skills → packs/dev-team/skills}/agents-md-generator/evals/evals.json +0 -0
  151. /package/{skills → packs/dev-team/skills}/agents-md-generator/manifest.json +0 -0
  152. /package/{skills → packs/dev-team/skills}/agents-md-generator/templates/agents-md.md +0 -0
  153. /package/{skills → packs/dev-team/skills}/bug-triage/SKILL.md +0 -0
  154. /package/{skills → packs/dev-team/skills}/bug-triage/evals/eval_queries.json +0 -0
  155. /package/{skills → packs/dev-team/skills}/bug-triage/evals/evals.json +0 -0
  156. /package/{skills → packs/dev-team/skills}/bug-triage/manifest.json +0 -0
  157. /package/{skills → packs/dev-team/skills}/bug-triage/templates/bug-ticket.md +0 -0
  158. /package/{skills → packs/dev-team/skills}/devils-advocate/evals/eval_queries.json +0 -0
  159. /package/{skills → packs/dev-team/skills}/devils-advocate/evals/evals.json +0 -0
  160. /package/{skills → packs/dev-team/skills}/devils-advocate/examples/rate-limiter-review.md +0 -0
  161. /package/{skills → packs/dev-team/skills}/devils-advocate/lenses/adversarial-review.md +0 -0
  162. /package/{skills → packs/dev-team/skills}/devils-advocate/lenses/edge-cases.md +0 -0
  163. /package/{skills → packs/dev-team/skills}/devils-advocate/lenses/future-proofing.md +0 -0
  164. /package/{skills → packs/dev-team/skills}/devils-advocate/lenses/test-coverage.md +0 -0
  165. /package/{skills → packs/dev-team/skills}/devils-advocate/manifest.json +0 -0
  166. /package/{skills → packs/dev-team/skills}/devils-advocate/templates/challenge.md +0 -0
  167. /package/{skills → packs/dev-team/skills}/feature-implement-loop/SKILL.md +0 -0
  168. /package/{skills → packs/dev-team/skills}/feature-implement-loop/manifest.json +0 -0
  169. /package/{skills → packs/dev-team/skills}/launch-readiness/SKILL.md +0 -0
  170. /package/{skills → packs/dev-team/skills}/launch-readiness/evals/eval_queries.json +0 -0
  171. /package/{skills → packs/dev-team/skills}/launch-readiness/evals/evals.json +0 -0
  172. /package/{skills → packs/dev-team/skills}/launch-readiness/examples/schema-change-revise.md +0 -0
  173. /package/{skills → packs/dev-team/skills}/launch-readiness/manifest.json +0 -0
  174. /package/{skills → packs/dev-team/skills}/launch-readiness/templates/readiness-report.md +0 -0
  175. /package/{skills → packs/dev-team/skills}/migration-plan/SKILL.md +0 -0
  176. /package/{skills → packs/dev-team/skills}/migration-plan/evals/eval_queries.json +0 -0
  177. /package/{skills → packs/dev-team/skills}/migration-plan/evals/evals.json +0 -0
  178. /package/{skills → packs/dev-team/skills}/migration-plan/manifest.json +0 -0
  179. /package/{skills → packs/dev-team/skills}/migration-plan/templates/migration-plan.md +0 -0
  180. /package/{skills → packs/dev-team/skills}/pre-merge-review/evals/eval_queries.json +0 -0
  181. /package/{skills → packs/dev-team/skills}/pre-merge-review/evals/evals.json +0 -0
  182. /package/{skills → packs/dev-team/skills}/pre-merge-review/examples/pre-merge-verdict.md +0 -0
  183. /package/{skills → packs/dev-team/skills}/pre-merge-review/manifest.json +0 -0
  184. /package/{skills → packs/dev-team/skills}/pre-merge-review/scripts/gate.py +0 -0
  185. /package/{skills → packs/dev-team/skills}/release-notes/SKILL.md +0 -0
  186. /package/{skills → packs/dev-team/skills}/release-notes/manifest.json +0 -0
  187. /package/{skills → packs/dev-team/skills}/release-notes/templates/release-notes.md +0 -0
  188. /package/{skills → packs/dev-team/skills}/sonar-onboard/SKILL.md +0 -0
  189. /package/{skills → packs/dev-team/skills}/sonar-onboard/evals/eval_queries.json +0 -0
  190. /package/{skills → packs/dev-team/skills}/sonar-onboard/evals/evals.json +0 -0
  191. /package/{skills → packs/dev-team/skills}/sonar-onboard/manifest.json +0 -0
  192. /package/{skills → packs/dev-team/skills}/sonar-onboard/reference.md +0 -0
  193. /package/{skills → packs/dev-team/skills}/sonar-onboard/templates/github-actions-sonar-server.yml.tmpl +0 -0
  194. /package/{skills → packs/dev-team/skills}/sonar-onboard/templates/github-actions-sonarcloud.yml.tmpl +0 -0
  195. /package/{skills → packs/dev-team/skills}/sonar-onboard/templates/readme-snippet.md +0 -0
  196. /package/{skills → packs/dev-team/skills}/sonar-onboard/templates/sonar-project.properties.tmpl +0 -0
  197. /package/{skills → packs/dev-team/skills}/sonar-review/SKILL.md +0 -0
  198. /package/{skills → packs/dev-team/skills}/sonar-review/evals/eval_queries.json +0 -0
  199. /package/{skills → packs/dev-team/skills}/sonar-review/evals/evals.json +0 -0
  200. /package/{skills → packs/dev-team/skills}/sonar-review/lenses/bugs.md +0 -0
  201. /package/{skills → packs/dev-team/skills}/sonar-review/lenses/code-smells.md +0 -0
  202. /package/{skills → packs/dev-team/skills}/sonar-review/lenses/coverage-and-duplication.md +0 -0
  203. /package/{skills → packs/dev-team/skills}/sonar-review/lenses/security-hotspots.md +0 -0
  204. /package/{skills → packs/dev-team/skills}/sonar-review/lenses/vulnerabilities.md +0 -0
  205. /package/{skills → packs/dev-team/skills}/sonar-review/manifest.json +0 -0
  206. /package/{skills → packs/dev-team/skills}/sonar-review/reference.md +0 -0
  207. /package/{skills → packs/dev-team/skills}/sonar-review/templates/report.md +0 -0
  208. /package/{skills → packs/dev-team/skills}/test-plan-generator/SKILL.md +0 -0
  209. /package/{skills → packs/dev-team/skills}/test-plan-generator/evals/eval_queries.json +0 -0
  210. /package/{skills → packs/dev-team/skills}/test-plan-generator/evals/evals.json +0 -0
  211. /package/{skills → packs/dev-team/skills}/test-plan-generator/manifest.json +0 -0
  212. /package/{skills → packs/dev-team/skills}/test-plan-generator/templates/test-plan.md +0 -0
  213. /package/{skills → packs/dev-team/skills}/user-story-splitter/SKILL.md +0 -0
  214. /package/{skills → packs/dev-team/skills}/user-story-splitter/evals/eval_queries.json +0 -0
  215. /package/{skills → packs/dev-team/skills}/user-story-splitter/evals/evals.json +0 -0
  216. /package/{skills → packs/dev-team/skills}/user-story-splitter/examples/notifications-epic.md +0 -0
  217. /package/{skills → packs/dev-team/skills}/user-story-splitter/manifest.json +0 -0
  218. /package/{skills → packs/dev-team/skills}/user-story-splitter/templates/story.md +0 -0
  219. /package/{loops → packs/product-manager/loops}/discover/evals/eval_queries.json +0 -0
  220. /package/{loops → packs/product-manager/loops}/discover/evals/evals.json +0 -0
  221. /package/{loops → packs/product-manager/loops}/discover/loop.json +0 -0
  222. /package/{skills → packs/product-manager/skills}/business-case/SKILL.md +0 -0
  223. /package/{skills → packs/product-manager/skills}/business-case/examples/build-vs-buy-flags.md +0 -0
  224. /package/{skills → packs/product-manager/skills}/business-case/manifest.json +0 -0
  225. /package/{skills → packs/product-manager/skills}/business-case/templates/business-case.md +0 -0
  226. /package/{skills → packs/product-manager/skills}/okr-cascade/SKILL.md +0 -0
  227. /package/{skills → packs/product-manager/skills}/okr-cascade/evals/eval_queries.json +0 -0
  228. /package/{skills → packs/product-manager/skills}/okr-cascade/evals/evals.json +0 -0
  229. /package/{skills → packs/product-manager/skills}/okr-cascade/manifest.json +0 -0
  230. /package/{skills → packs/product-manager/skills}/okr-cascade/templates/okr-cascade.md +0 -0
  231. /package/{skills → packs/product-manager/skills}/prd-draft/SKILL.md +0 -0
  232. /package/{skills → packs/product-manager/skills}/prd-draft/evals/eval_queries.json +0 -0
  233. /package/{skills → packs/product-manager/skills}/prd-draft/evals/evals.json +0 -0
  234. /package/{skills → packs/product-manager/skills}/prd-draft/manifest.json +0 -0
  235. /package/{skills → packs/product-manager/skills}/prd-draft/templates/prd.md +0 -0
  236. /package/{skills → packs/product-manager/skills}/prfaq/SKILL.md +0 -0
  237. /package/{skills → packs/product-manager/skills}/prfaq/evals/eval_queries.json +0 -0
  238. /package/{skills → packs/product-manager/skills}/prfaq/evals/evals.json +0 -0
  239. /package/{skills → packs/product-manager/skills}/prfaq/manifest.json +0 -0
  240. /package/{skills → packs/product-manager/skills}/prfaq/templates/prfaq.md +0 -0
  241. /package/{skills → packs/product-manager/skills}/requirements-interview/SKILL.md +0 -0
  242. /package/{skills → packs/product-manager/skills}/requirements-interview/evals/eval_queries.json +0 -0
  243. /package/{skills → packs/product-manager/skills}/requirements-interview/evals/evals.json +0 -0
  244. /package/{skills → packs/product-manager/skills}/requirements-interview/manifest.json +0 -0
  245. /package/{skills → packs/product-manager/skills}/requirements-interview/templates/interview-kit.md +0 -0
  246. /package/{skills → packs/product-manager/skills}/strategy-analysis/SKILL.md +0 -0
  247. /package/{skills → packs/product-manager/skills}/strategy-analysis/evals/eval_queries.json +0 -0
  248. /package/{skills → packs/product-manager/skills}/strategy-analysis/evals/evals.json +0 -0
  249. /package/{skills → packs/product-manager/skills}/strategy-analysis/examples/market-entry-tows.md +0 -0
  250. /package/{skills → packs/product-manager/skills}/strategy-analysis/manifest.json +0 -0
  251. /package/{skills → packs/product-manager/skills}/success-metrics/SKILL.md +0 -0
  252. /package/{skills → packs/product-manager/skills}/success-metrics/evals/eval_queries.json +0 -0
  253. /package/{skills → packs/product-manager/skills}/success-metrics/evals/evals.json +0 -0
  254. /package/{skills → packs/product-manager/skills}/success-metrics/manifest.json +0 -0
  255. /package/{skills → packs/product-manager/skills}/success-metrics/templates/metrics-plan.md +0 -0
  256. /package/{skills → packs/product-manager/skills}/user-journey-map/SKILL.md +0 -0
  257. /package/{skills → packs/product-manager/skills}/user-journey-map/evals/eval_queries.json +0 -0
  258. /package/{skills → packs/product-manager/skills}/user-journey-map/evals/evals.json +0 -0
  259. /package/{skills → packs/product-manager/skills}/user-journey-map/examples/b2b-saas-onboarding.md +0 -0
  260. /package/{skills → packs/product-manager/skills}/user-journey-map/manifest.json +0 -0
  261. /package/{skills → packs/product-manager/skills}/user-journey-map/templates/journey-map.md +0 -0
  262. /package/{loops → packs/solution-architect/loops}/design/evals/eval_queries.json +0 -0
  263. /package/{loops → packs/solution-architect/loops}/design/evals/evals.json +0 -0
  264. /package/{loops → packs/solution-architect/loops}/design/loop.json +0 -0
  265. /package/{skills → packs/solution-architect/skills}/adr-generator/SKILL.md +0 -0
  266. /package/{skills → packs/solution-architect/skills}/adr-generator/evals/eval_queries.json +0 -0
  267. /package/{skills → packs/solution-architect/skills}/adr-generator/evals/evals.json +0 -0
  268. /package/{skills → packs/solution-architect/skills}/adr-generator/manifest.json +0 -0
  269. /package/{skills → packs/solution-architect/skills}/adr-generator/templates/madr.md +0 -0
  270. /package/{skills → packs/solution-architect/skills}/adr-generator/templates/nygard.md +0 -0
  271. /package/{skills → packs/solution-architect/skills}/api-contract-draft/SKILL.md +0 -0
  272. /package/{skills → packs/solution-architect/skills}/api-contract-draft/evals/eval_queries.json +0 -0
  273. /package/{skills → packs/solution-architect/skills}/api-contract-draft/evals/evals.json +0 -0
  274. /package/{skills → packs/solution-architect/skills}/api-contract-draft/manifest.json +0 -0
  275. /package/{skills → packs/solution-architect/skills}/api-contract-draft/reference.md +0 -0
  276. /package/{skills → packs/solution-architect/skills}/api-contract-draft/templates/openapi-skeleton.yaml +0 -0
  277. /package/{skills → packs/solution-architect/skills}/architecture-diagrams/SKILL.md +0 -0
  278. /package/{skills → packs/solution-architect/skills}/architecture-diagrams/evals/eval_queries.json +0 -0
  279. /package/{skills → packs/solution-architect/skills}/architecture-diagrams/evals/evals.json +0 -0
  280. /package/{skills → packs/solution-architect/skills}/architecture-diagrams/examples/aws-three-tier.md +0 -0
  281. /package/{skills → packs/solution-architect/skills}/architecture-diagrams/examples/c4-container-saas.md +0 -0
  282. /package/{skills → packs/solution-architect/skills}/architecture-diagrams/examples/microservices-sequence.md +0 -0
  283. /package/{skills → packs/solution-architect/skills}/architecture-diagrams/manifest.json +0 -0
  284. /package/{skills → packs/solution-architect/skills}/architecture-diagrams/templates/c4-container.puml +0 -0
  285. /package/{skills → packs/solution-architect/skills}/architecture-diagrams/templates/mermaid-aws.md +0 -0
  286. /package/{skills → packs/solution-architect/skills}/architecture-diagrams/templates/mermaid-flowchart.md +0 -0
  287. /package/{skills → packs/solution-architect/skills}/architecture-diagrams/templates/mermaid-sequence.md +0 -0
  288. /package/{skills → packs/solution-architect/skills}/data-contract/SKILL.md +0 -0
  289. /package/{skills → packs/solution-architect/skills}/data-contract/evals/eval_queries.json +0 -0
  290. /package/{skills → packs/solution-architect/skills}/data-contract/evals/evals.json +0 -0
  291. /package/{skills → packs/solution-architect/skills}/data-contract/manifest.json +0 -0
  292. /package/{skills → packs/solution-architect/skills}/data-contract/reference.md +0 -0
  293. /package/{skills → packs/solution-architect/skills}/data-contract/templates/data-contract.md +0 -0
  294. /package/{skills → packs/solution-architect/skills}/db-schema-design/SKILL.md +0 -0
  295. /package/{skills → packs/solution-architect/skills}/db-schema-design/evals/eval_queries.json +0 -0
  296. /package/{skills → packs/solution-architect/skills}/db-schema-design/evals/evals.json +0 -0
  297. /package/{skills → packs/solution-architect/skills}/db-schema-design/manifest.json +0 -0
  298. /package/{skills → packs/solution-architect/skills}/db-schema-design/reference.md +0 -0
  299. /package/{skills → packs/solution-architect/skills}/db-schema-design/templates/schema-design.md +0 -0
  300. /package/{skills → packs/solution-architect/skills}/design-doc/SKILL.md +0 -0
  301. /package/{skills → packs/solution-architect/skills}/design-doc/evals/eval_queries.json +0 -0
  302. /package/{skills → packs/solution-architect/skills}/design-doc/evals/evals.json +0 -0
  303. /package/{skills → packs/solution-architect/skills}/design-doc/manifest.json +0 -0
  304. /package/{skills → packs/solution-architect/skills}/design-doc/templates/design-doc.md +0 -0
  305. /package/{skills → packs/solution-architect/skills}/figma-diagrams/SKILL.md +0 -0
  306. /package/{skills → packs/solution-architect/skills}/figma-diagrams/evals/eval_queries.json +0 -0
  307. /package/{skills → packs/solution-architect/skills}/figma-diagrams/evals/evals.json +0 -0
  308. /package/{skills → packs/solution-architect/skills}/figma-diagrams/manifest.json +0 -0
  309. /package/{skills → packs/solution-architect/skills}/figma-diagrams/reference.md +0 -0
  310. /package/{skills → packs/solution-architect/skills}/figma-diagrams/requirements.txt +0 -0
  311. /package/{skills → packs/solution-architect/skills}/figma-diagrams/scripts/_figma_client.py +0 -0
  312. /package/{skills → packs/solution-architect/skills}/figma-diagrams/scripts/frame_to_mermaid.py +0 -0
  313. /package/{skills → packs/solution-architect/skills}/figma-diagrams/scripts/inspect_file.py +0 -0
  314. /package/{skills → packs/solution-architect/skills}/figma-diagrams/scripts/list_comments.py +0 -0
  315. /package/{skills → packs/solution-architect/skills}/figma-diagrams/scripts/post_comment.py +0 -0
  316. /package/{skills → packs/solution-architect/skills}/figma-diagrams/templates/figjam-import.json +0 -0
  317. /package/{skills → packs/solution-architect/skills}/nfr-spec/SKILL.md +0 -0
  318. /package/{skills → packs/solution-architect/skills}/nfr-spec/evals/eval_queries.json +0 -0
  319. /package/{skills → packs/solution-architect/skills}/nfr-spec/evals/evals.json +0 -0
  320. /package/{skills → packs/solution-architect/skills}/nfr-spec/manifest.json +0 -0
  321. /package/{skills → packs/solution-architect/skills}/nfr-spec/reference.md +0 -0
  322. /package/{skills → packs/solution-architect/skills}/nfr-spec/templates/nfr-spec.md +0 -0
  323. /package/{skills → packs/solution-architect/skills}/reverse-architecture/SKILL.md +0 -0
  324. /package/{skills → packs/solution-architect/skills}/reverse-architecture/evals/eval_queries.json +0 -0
  325. /package/{skills → packs/solution-architect/skills}/reverse-architecture/evals/evals.json +0 -0
  326. /package/{skills → packs/solution-architect/skills}/reverse-architecture/manifest.json +0 -0
  327. /package/{skills → packs/solution-architect/skills}/reverse-architecture/reference.md +0 -0
  328. /package/{skills → packs/solution-architect/skills}/reverse-architecture/templates/description.md +0 -0
  329. /package/{skills → packs/solution-architect/skills}/reverse-architecture/templates/extraction.md +0 -0
  330. /package/{skills → packs/solution-architect/skills}/tech-comparison-matrix/SKILL.md +0 -0
  331. /package/{skills → packs/solution-architect/skills}/tech-comparison-matrix/examples/queue-selection.md +0 -0
  332. /package/{skills → packs/solution-architect/skills}/tech-comparison-matrix/manifest.json +0 -0
  333. /package/{skills → packs/solution-architect/skills}/tech-comparison-matrix/templates/matrix.md +0 -0
  334. /package/{skills → packs/solution-architect/skills}/threat-model/SKILL.md +0 -0
  335. /package/{skills → packs/solution-architect/skills}/threat-model/evals/eval_queries.json +0 -0
  336. /package/{skills → packs/solution-architect/skills}/threat-model/evals/evals.json +0 -0
  337. /package/{skills → packs/solution-architect/skills}/threat-model/examples/document-upload.md +0 -0
  338. /package/{skills → packs/solution-architect/skills}/threat-model/manifest.json +0 -0
  339. /package/{skills → packs/solution-architect/skills}/threat-model/reference.md +0 -0
  340. /package/{loops → packs/sre-oncall/loops}/operate/evals/eval_queries.json +0 -0
  341. /package/{loops → packs/sre-oncall/loops}/operate/evals/evals.json +0 -0
  342. /package/{loops → packs/sre-oncall/loops}/operate/loop.json +0 -0
  343. /package/{skills → packs/sre-oncall/skills}/capacity-cost-model/SKILL.md +0 -0
  344. /package/{skills → packs/sre-oncall/skills}/capacity-cost-model/manifest.json +0 -0
  345. /package/{skills → packs/sre-oncall/skills}/capacity-cost-model/reference.md +0 -0
  346. /package/{skills → packs/sre-oncall/skills}/capacity-cost-model/templates/cost-model.md +0 -0
  347. /package/{skills → packs/sre-oncall/skills}/incident-comms/SKILL.md +0 -0
  348. /package/{skills → packs/sre-oncall/skills}/incident-comms/evals/eval_queries.json +0 -0
  349. /package/{skills → packs/sre-oncall/skills}/incident-comms/evals/evals.json +0 -0
  350. /package/{skills → packs/sre-oncall/skills}/incident-comms/manifest.json +0 -0
  351. /package/{skills → packs/sre-oncall/skills}/incident-comms/reference.md +0 -0
  352. /package/{skills → packs/sre-oncall/skills}/incident-comms/templates/messages.md +0 -0
  353. /package/{skills → packs/sre-oncall/skills}/observability-plan/SKILL.md +0 -0
  354. /package/{skills → packs/sre-oncall/skills}/observability-plan/evals/eval_queries.json +0 -0
  355. /package/{skills → packs/sre-oncall/skills}/observability-plan/evals/evals.json +0 -0
  356. /package/{skills → packs/sre-oncall/skills}/observability-plan/manifest.json +0 -0
  357. /package/{skills → packs/sre-oncall/skills}/observability-plan/reference.md +0 -0
  358. /package/{skills → packs/sre-oncall/skills}/observability-plan/templates/observability-plan.md +0 -0
  359. /package/{skills → packs/sre-oncall/skills}/postmortem-generator/SKILL.md +0 -0
  360. /package/{skills → packs/sre-oncall/skills}/postmortem-generator/evals/eval_queries.json +0 -0
  361. /package/{skills → packs/sre-oncall/skills}/postmortem-generator/evals/evals.json +0 -0
  362. /package/{skills → packs/sre-oncall/skills}/postmortem-generator/manifest.json +0 -0
  363. /package/{skills → packs/sre-oncall/skills}/postmortem-generator/templates/postmortem.md +0 -0
  364. /package/{skills → packs/sre-oncall/skills}/runbook-generator/SKILL.md +0 -0
  365. /package/{skills → packs/sre-oncall/skills}/runbook-generator/evals/eval_queries.json +0 -0
  366. /package/{skills → packs/sre-oncall/skills}/runbook-generator/evals/evals.json +0 -0
  367. /package/{skills → packs/sre-oncall/skills}/runbook-generator/manifest.json +0 -0
  368. /package/{skills → packs/sre-oncall/skills}/runbook-generator/templates/runbook.md +0 -0
  369. /package/{skills → packs/stakeholder-comms/skills}/audience-profile/SKILL.md +0 -0
  370. /package/{skills → packs/stakeholder-comms/skills}/audience-profile/evals/eval_queries.json +0 -0
  371. /package/{skills → packs/stakeholder-comms/skills}/audience-profile/evals/evals.json +0 -0
  372. /package/{skills → packs/stakeholder-comms/skills}/audience-profile/manifest.json +0 -0
  373. /package/{skills → packs/stakeholder-comms/skills}/audience-profile/reference.md +0 -0
  374. /package/{skills → packs/stakeholder-comms/skills}/decision-log/SKILL.md +0 -0
  375. /package/{skills → packs/stakeholder-comms/skills}/decision-log/evals/eval_queries.json +0 -0
  376. /package/{skills → packs/stakeholder-comms/skills}/decision-log/evals/evals.json +0 -0
  377. /package/{skills → packs/stakeholder-comms/skills}/decision-log/manifest.json +0 -0
  378. /package/{skills → packs/stakeholder-comms/skills}/deck-builder/evals/eval_queries.json +0 -0
  379. /package/{skills → packs/stakeholder-comms/skills}/deck-builder/evals/evals.json +0 -0
  380. /package/{skills → packs/stakeholder-comms/skills}/deck-builder/examples/exec-board-update.md +0 -0
  381. /package/{skills → packs/stakeholder-comms/skills}/deck-builder/examples/templated-brand-deck.md +0 -0
  382. /package/{skills → packs/stakeholder-comms/skills}/deck-builder/manifest.json +0 -0
  383. /package/{skills → packs/stakeholder-comms/skills}/deck-builder/reference.md +0 -0
  384. /package/{skills → packs/stakeholder-comms/skills}/deck-builder/requirements.txt +0 -0
  385. /package/{skills → packs/stakeholder-comms/skills}/deck-builder/scripts/build_deck.py +0 -0
  386. /package/{skills → packs/stakeholder-comms/skills}/deck-builder/templates/deck-spec.json +0 -0
  387. /package/{skills → packs/stakeholder-comms/skills}/deck-builder/templates/palettes.json +0 -0
  388. /package/{skills → packs/stakeholder-comms/skills}/exec-summary/SKILL.md +0 -0
  389. /package/{skills → packs/stakeholder-comms/skills}/exec-summary/evals/eval_queries.json +0 -0
  390. /package/{skills → packs/stakeholder-comms/skills}/exec-summary/evals/evals.json +0 -0
  391. /package/{skills → packs/stakeholder-comms/skills}/exec-summary/manifest.json +0 -0
  392. /package/{skills → packs/stakeholder-comms/skills}/exec-summary/templates/exec-summary.md +0 -0
  393. /package/{skills → packs/stakeholder-comms/skills}/guide-builder/SKILL.md +0 -0
  394. /package/{skills → packs/stakeholder-comms/skills}/guide-builder/examples/local-setup-guide.md +0 -0
  395. /package/{skills → packs/stakeholder-comms/skills}/guide-builder/manifest.json +0 -0
  396. /package/{skills → packs/stakeholder-comms/skills}/guide-builder/templates/api-reference.md +0 -0
  397. /package/{skills → packs/stakeholder-comms/skills}/guide-builder/templates/design-walkthrough.md +0 -0
  398. /package/{skills → packs/stakeholder-comms/skills}/guide-builder/templates/setup-guide.md +0 -0
  399. /package/{skills → packs/stakeholder-comms/skills}/slide-outliner/SKILL.md +0 -0
  400. /package/{skills → packs/stakeholder-comms/skills}/slide-outliner/evals/eval_queries.json +0 -0
  401. /package/{skills → packs/stakeholder-comms/skills}/slide-outliner/evals/evals.json +0 -0
  402. /package/{skills → packs/stakeholder-comms/skills}/slide-outliner/manifest.json +0 -0
  403. /package/{skills → packs/stakeholder-comms/skills}/slide-outliner/templates/deck-outline.md +0 -0
package/bin/skilldrop.js CHANGED
@@ -3,7 +3,8 @@
3
3
  * or any directory, from the bundled catalog or any third-party catalog
4
4
  * (--from <path | git-url[#ref]>). Zero dependencies; copy-only, never executes
5
5
  * catalog content at install time.
6
- * Reads two catalog shapes: skilldrop (flat skills/) and agentbundle (packs/<p>/.apm/skills).
6
+ * Reads three catalog shapes: skilldrop pack folders (packs/<p>/pack.json + packs/<p>/skills/),
7
+ * flat skilldrop (skills/ + packs.json), and agentbundle (packs/<p>/pack.toml + .apm/skills).
7
8
  * Design: skilldrop-cli-design/skilldrop-cli-design.md
8
9
  * Scope: docs/rfcs/0002-skilldrop-cli.md, docs/rfcs/0003-third-party-catalogs.md,
9
10
  * docs/rfcs/0014-agentbundle-interop.md (the agentbundle reader)
@@ -36,6 +37,7 @@ const HELP = `skilldrop — portable AI-agent skills for Claude Code, Cursor, Ki
36
37
  Usage:
37
38
  skilldrop list [--from <src>] all skills in a catalog (name, version, tier)
38
39
  skilldrop info <skill> [--from <src>] description, related, packs, deps
40
+ skilldrop info --pack <name> a pack's skills, loops, and what to try first (RFC-0032)
39
41
  skilldrop packs [--from <src>] role-based packs
40
42
  skilldrop agents [--from <src>] reviewer subagents in a catalog
41
43
  skilldrop loops [--from <src>] loops — sequenced stages over skills (RFC-0028)
@@ -65,8 +67,8 @@ Usage:
65
67
 
66
68
  Catalogs:
67
69
  (default) the catalog bundled with this package
68
- --from <dir|url> a skilldrop catalog (skills/<name>/{SKILL.md,manifest.json}) OR an
69
- agentbundle one (packs/<pack>/.apm/skills/<name>/SKILL.md); a git URL
70
+ --from <dir|url> a skilldrop catalog (packs/<pack>/skills/<name>/ or flat skills/<name>/) OR
71
+ an agentbundle one (packs/<pack>/.apm/skills/<name>/SKILL.md); a git URL
70
72
  works for either — append #<branch-or-tag> to pin
71
73
 
72
74
  Install/update/uninstall targets (pick one):
@@ -107,7 +109,7 @@ function parseArgs(argv) {
107
109
  const out = { _: [], flags: {} };
108
110
  for (let i = 0; i < argv.length; i++) {
109
111
  const a = argv[i];
110
- if (a === "--pack" || a === "--ide" || a === "--dest" || a === "--from" || a === "--panel") out.flags[a.slice(2)] = argv[++i];
112
+ if (a === "--pack" || a === "--ide" || a === "--dest" || a === "--from" || a === "--panel" || a === "--profile") out.flags[a.slice(2)] = argv[++i];
111
113
  else if (a.startsWith("--")) out.flags[a.slice(2)] = true;
112
114
  else out._.push(a);
113
115
  }
@@ -115,15 +117,18 @@ function parseArgs(argv) {
115
117
  }
116
118
 
117
119
  /* ---------- catalogs ----------
118
- Two on-disk shapes are read (RFC-0003, RFC-0014):
119
- "skilldrop" — flat skills/<name>/{SKILL.md,manifest.json} + optional packs.json
120
+ Three on-disk shapes are read (RFC-0003, RFC-0014, RFC-0034):
121
+ "packs" — skilldrop's own layout since RFC-0034: packs/<pack>/{pack.json,
122
+ skills/<name>/{SKILL.md,manifest.json}, loops/<name>/} + catalogue.json
123
+ "skilldrop" — flat skills/<name>/{SKILL.md,manifest.json} + optional packs.json; what
124
+ skilldrop shipped before RFC-0034, and what most third-party catalogs use
120
125
  "apm" — agentbundle (agent-ready-repo): packs/<pack>/{pack.toml,
121
126
  .apm/skills/<name>/SKILL.md, .apm/agents/<name>.md}
122
127
  The apm reader normalizes into the same accessors the native path uses — skills keyed by
123
128
  folder name, a per-skill manifest synthesized from the SKILL.md frontmatter + the pack.toml
124
129
  version, each pack.toml's [pack] table a virtual pack — so `--from git+https://…/agent-ready-repo`
125
130
  installs his packs through this same CLI. Skill accessors: skillsIn / skillDir / skillExists /
126
- manifestOf; never touch cat.skillsDir directly (it exists only on the skilldrop shape). */
131
+ manifestOf; never touch cat.skillsDir directly (it exists only on the flat skilldrop shape). */
127
132
 
128
133
  const catalogCache = {};
129
134
  function resolveCatalog(source) {
@@ -142,11 +147,36 @@ function resolveCatalog(source) {
142
147
  }
143
148
  }
144
149
  const src = source || BUNDLED;
150
+ const packsDir = path.join(dir, "packs");
151
+ if (fs.existsSync(packsDir) && fs.readdirSync(packsDir).some((p) => fs.existsSync(path.join(packsDir, p, "pack.json"))))
152
+ return (catalogCache[key] = readPacksCatalog(dir, src));
145
153
  if (fs.existsSync(path.join(dir, "skills")))
146
154
  return (catalogCache[key] = { dir, source: src, shape: "skilldrop", skillsDir: path.join(dir, "skills") });
147
155
  if (fs.existsSync(path.join(dir, "packs")))
148
156
  return (catalogCache[key] = readApmCatalog(dir, src));
149
- die(`'${src}' is not a catalog — expected a skills/ (skilldrop) or packs/ (agentbundle) directory`);
157
+ die(`'${src}' is not a catalog — expected packs/<pack>/pack.json, a skills/ directory, or packs/<pack>/pack.toml (agentbundle)`);
158
+ }
159
+
160
+ /* RFC-0034: membership is the folder. A skill is in a pack because it sits at
161
+ packs/<pack>/skills/<name>/; catalogue.json only sets the order packs are listed in. */
162
+ function readPacksCatalog(dir, source) {
163
+ const packsDir = path.join(dir, "packs");
164
+ const children = (d, marker) => fs.existsSync(d)
165
+ ? fs.readdirSync(d).filter((x) => fs.existsSync(path.join(d, x, marker))).sort() : [];
166
+ const onDisk = children(packsDir, "pack.json");
167
+ const idx = path.join(dir, "catalogue.json");
168
+ const listed = fs.existsSync(idx) ? (readJSON(idx).packs || []).filter((p) => onDisk.includes(p)) : [];
169
+ const order = [...listed, ...onDisk.filter((p) => !listed.includes(p))];
170
+ const skillIndex = {}, loopIndex = {}, packsData = {};
171
+ for (const pack of order) {
172
+ const pdir = path.join(packsDir, pack);
173
+ const skills = children(path.join(pdir, "skills"), "SKILL.md");
174
+ const loops = children(path.join(pdir, "loops"), "loop.json");
175
+ for (const s of skills) if (!skillIndex[s]) skillIndex[s] = { dir: path.join(pdir, "skills", s) };
176
+ for (const l of loops) if (!loopIndex[l]) loopIndex[l] = path.join(pdir, "loops", l);
177
+ packsData[pack] = Object.assign({}, readJSON(path.join(pdir, "pack.json")), { skills, loops });
178
+ }
179
+ return { dir, source, shape: "packs", skillIndex, loopIndex, packsData };
150
180
  }
151
181
 
152
182
  /* Minimal TOML read — the [pack] table's basic-string scalars (name, version, description).
@@ -208,11 +238,11 @@ function readApmCatalog(dir, source) {
208
238
  }
209
239
 
210
240
  function skillsIn(cat) {
211
- if (cat.shape === "apm") return Object.keys(cat.skillIndex).sort();
241
+ if (cat.skillIndex) return Object.keys(cat.skillIndex).sort();
212
242
  return fs.readdirSync(cat.skillsDir).filter((d) => fs.statSync(path.join(cat.skillsDir, d)).isDirectory()).sort();
213
243
  }
214
244
  function skillDir(cat, s) {
215
- if (cat.shape === "apm") return cat.skillIndex[s] && cat.skillIndex[s].dir;
245
+ if (cat.skillIndex) return cat.skillIndex[s] && cat.skillIndex[s].dir;
216
246
  return path.join(cat.skillsDir, s);
217
247
  }
218
248
  // Skill names reach RegExp when unwiring hooks. skillExists() proves a directory exists; it
@@ -231,7 +261,7 @@ function manifestOf(cat, s) {
231
261
  if (!cat.skillIndex[s]) throw new Error(`no such skill '${s}'`);
232
262
  return cat.skillIndex[s].manifest;
233
263
  }
234
- return readJSON(path.join(cat.skillsDir, s, "manifest.json"));
264
+ return readJSON(path.join(skillDir(cat, s), "manifest.json"));
235
265
  }
236
266
 
237
267
  /* Agents (RFC-0012): single markdown files, frontmatter is already Claude Code's format.
@@ -263,7 +293,7 @@ function checkAgent(cat, a) {
263
293
  return problems;
264
294
  }
265
295
  function packsOf(cat) {
266
- if (cat.shape === "apm") return Object.keys(cat.packsData).length ? cat.packsData : null;
296
+ if (cat.packsData) return Object.keys(cat.packsData).length ? cat.packsData : null;
267
297
  const p = path.join(cat.dir, "packs.json");
268
298
  return fs.existsSync(p) ? readJSON(p).packs : null;
269
299
  }
@@ -718,7 +748,7 @@ function expandNames(args, cat) {
718
748
  if (args.flags.all) return skillsIn(cat);
719
749
  if (args.flags.pack) {
720
750
  const ps = packsOf(cat);
721
- if (!ps) die(`catalog '${cat.source}' has no packs.json — install skills by name`);
751
+ if (!ps) die(`catalog '${cat.source}' defines no packs — install skills by name`);
722
752
  const p = ps[args.flags.pack];
723
753
  if (!p) die(`unknown pack '${args.flags.pack}' in catalog '${cat.source}'`);
724
754
  return packMembers(ps, args.flags.pack, "skills");
@@ -920,6 +950,8 @@ function install(args) {
920
950
  console.log(`deps: ${s} needs Python packages — run: cd ${path.join(dest, s)} && python3 -m pip install -r requirements.txt`);
921
951
  if (suggestions.size)
922
952
  console.log(`related (not installed): ${[...suggestions].sort().join(", ")} — add --with-related or install by name.`);
953
+ const pk = args.flags.pack && (packsOf(cat) || {})[args.flags.pack];
954
+ if (pk && pk["first-value"]) console.log("\n" + firstValueLines(pk).join("\n"));
923
955
  }
924
956
 
925
957
  function installedRows(flags) {
@@ -1030,11 +1062,12 @@ function listAgents(args) {
1030
1062
  stages name, unless --no-skills. Optional in a catalog. */
1031
1063
  function loopsIn(cat) {
1032
1064
  if (cat.shape === "apm") return [];
1065
+ if (cat.loopIndex) return Object.keys(cat.loopIndex).sort();
1033
1066
  const d = path.join(cat.dir, "loops");
1034
1067
  if (!fs.existsSync(d)) return [];
1035
1068
  return fs.readdirSync(d).filter((x) => fs.existsSync(path.join(d, x, "loop.json"))).sort();
1036
1069
  }
1037
- function loopDir(cat, n) { return path.join(cat.dir, "loops", n); }
1070
+ function loopDir(cat, n) { return cat.loopIndex ? cat.loopIndex[n] : path.join(cat.dir, "loops", n); }
1038
1071
  function loopSpec(cat, n) { return readJSON(path.join(loopDir(cat, n), "loop.json")); }
1039
1072
 
1040
1073
  function loopSkills(cat, n) {
@@ -1088,7 +1121,7 @@ function installLoops(args) {
1088
1121
  let names = args._.slice();
1089
1122
  if (!names.length && args.flags.pack) {
1090
1123
  const ps = packsOf(cat);
1091
- if (!ps) die(`catalog '${cat.source}' has no packs.json`);
1124
+ if (!ps) die(`catalog '${cat.source}' defines no packs`);
1092
1125
  const pk = ps[args.flags.pack];
1093
1126
  if (!pk) die(`unknown pack '${args.flags.pack}' in catalog '${cat.source}'`);
1094
1127
  names = packMembers(ps, args.flags.pack, "loops");
@@ -1221,9 +1254,37 @@ function list(args) {
1221
1254
  console.log(`\n${rows.length} skills in catalog '${cat.source}'. Details: skilldrop info <skill>`);
1222
1255
  }
1223
1256
 
1257
+ /* RFC-0032: what to try first after installing a pack, how to tell it worked, what to do
1258
+ if it didn't — the same first-value block the pack's site page renders. */
1259
+ function firstValueLines(p) {
1260
+ const fv = p["first-value"];
1261
+ if (!fv) return [];
1262
+ const out = [`Start here: ${fv["starter-task"]}`, "", ` ${fv["starter-prompt"]}`, ""];
1263
+ for (const pre of fv.prerequisites || []) out.push(` before you start: ${pre}`);
1264
+ out.push(` worked if: ${fv.verification}`, ` if nothing happens: ${fv.recovery}`);
1265
+ return out;
1266
+ }
1267
+
1268
+ function infoPack(args) {
1269
+ const cat = resolveCatalog(args.flags.from);
1270
+ const ps = packsOf(cat) || die(`catalog '${cat.source}' has no packs`);
1271
+ const name = args.flags.pack;
1272
+ const p = ps[name] || die(`unknown pack '${name}' — available: ${Object.keys(ps).join(", ")}`);
1273
+ if (args.flags.json)
1274
+ return emitJSON({ catalog: cat.source, name, ...p });
1275
+ console.log(`${p.display_name || name} (${name})\n\n${p.description}\n`);
1276
+ console.log(`skills: ${p.skills.join(", ")}`);
1277
+ if ((p.requires || []).length) console.log(`requires: ${p.requires.join(", ")} (installed with it)`);
1278
+ if ((p.loops || []).length) console.log(`loops: ${p.loops.join(", ")}`);
1279
+ if (p.links && p.links.documentation) console.log(`page: ${p.links.documentation}`);
1280
+ const fv = firstValueLines(p);
1281
+ if (fv.length) console.log("\n" + fv.join("\n"));
1282
+ }
1283
+
1224
1284
  function info(args) {
1285
+ if (args.flags.pack) return infoPack(args);
1225
1286
  const cat = resolveCatalog(args.flags.from);
1226
- const s = args._[0] || die("pass a skill name");
1287
+ const s = args._[0] || die("pass a skill name, or --pack <name>");
1227
1288
  if (!skillExists(cat, s)) die(`unknown skill '${s}' in catalog '${cat.source}'`);
1228
1289
  const m = manifestOf(cat, s);
1229
1290
  const ps = packsOf(cat) || {};
@@ -1283,7 +1344,7 @@ function validateCmd(args) {
1283
1344
  if (ps)
1284
1345
  for (const [n, p] of Object.entries(ps))
1285
1346
  for (const s of p.skills)
1286
- if (!names.includes(s)) { console.log(`FAIL packs.json: pack '${n}' lists unknown skill '${s}'`); bad++; }
1347
+ if (!names.includes(s)) { console.log(`FAIL packs: pack '${n}' lists unknown skill '${s}'`); bad++; }
1287
1348
  if (bad) { console.log(`\n${bad} problem(s) in catalog '${cat.source}'.`); process.exit(1); }
1288
1349
  console.log(`OK: ${names.length} skills in catalog '${cat.source}' pass the structural check.`);
1289
1350
  }
package/catalogue.json ADDED
@@ -0,0 +1,111 @@
1
+ {
2
+ "$comment": "RFC-0034. The catalogue index: pack display order and the outcome browse axis (RFC-0026). Pack metadata lives in packs/<pack>/pack.json; membership is the folders — a skill is in a pack because it sits at packs/<pack>/skills/<name>/.",
3
+ "version": "1.0.0",
4
+ "packs": ["core", "solution-architect", "product-manager", "dev-team", "sre-oncall", "stakeholder-comms", "ai-engineering", "claude-api"],
5
+ "outcomes": {
6
+ "decide-what-to-build": {
7
+ "description": "Turn a direction into a committed, measurable plan: press releases, strategy frameworks, OKRs, business cases, requirements, PRDs, and the metrics that will say whether it worked.",
8
+ "skills": [
9
+ "prfaq",
10
+ "strategy-analysis",
11
+ "okr-cascade",
12
+ "business-case",
13
+ "capacity-cost-model",
14
+ "requirements-interview",
15
+ "prd-draft",
16
+ "nfr-spec",
17
+ "success-metrics",
18
+ "user-story-splitter",
19
+ "user-journey-map"
20
+ ]
21
+ },
22
+ "design-the-system": {
23
+ "description": "Commit the shape before the code: decision records, design docs, diagrams, contracts, schemas, migration and threat models, and the design of any agentic parts.",
24
+ "skills": [
25
+ "adr-generator",
26
+ "design-doc",
27
+ "architecture-diagrams",
28
+ "reverse-architecture",
29
+ "figma-diagrams",
30
+ "api-contract-draft",
31
+ "db-schema-design",
32
+ "data-contract",
33
+ "tech-comparison-matrix",
34
+ "threat-model",
35
+ "agent-threat-model",
36
+ "migration-plan",
37
+ "agent-loop-design",
38
+ "subagent-design",
39
+ "agent-budget"
40
+ ]
41
+ },
42
+ "build-and-review-software": {
43
+ "description": "The loop around the code itself: supervised implementation, adversarial review panels, test plans, triage, accessibility and static-analysis passes, and the policy files agents read.",
44
+ "skills": [
45
+ "feature-implement-loop",
46
+ "pre-merge-review",
47
+ "devils-advocate",
48
+ "council-review",
49
+ "accessibility-audit",
50
+ "sonar-onboard",
51
+ "sonar-review",
52
+ "test-plan-generator",
53
+ "bug-triage",
54
+ "agents-md-generator",
55
+ "llm-eval-harness",
56
+ "eval-harness-generator",
57
+ "contribution-wizard"
58
+ ]
59
+ },
60
+ "build-on-the-claude-api": {
61
+ "description": "Skills for teams building directly on the Anthropic API — prompt caching strategy, token budgeting, eval generation, and tool-use schema writing.",
62
+ "skills": [
63
+ "prompt-caching-advisor",
64
+ "token-budget-estimator",
65
+ "eval-harness-generator",
66
+ "tool-use-schema-writer"
67
+ ]
68
+ },
69
+ "run-and-recover-the-service": {
70
+ "description": "Operate what shipped: runbooks, observability design, release notes, incident communication, and the postmortem that closes the loop.",
71
+ "skills": [
72
+ "runbook-generator",
73
+ "observability-plan",
74
+ "release-notes",
75
+ "incident-comms",
76
+ "postmortem-generator",
77
+ "launch-readiness"
78
+ ]
79
+ },
80
+ "explain-it-to-decision-makers": {
81
+ "description": "Get a non-technical audience to a decision: audience profiling, deck outlines and real decks, exec summaries, decision logs, and how-to guides.",
82
+ "skills": [
83
+ "audience-profile",
84
+ "slide-outliner",
85
+ "deck-builder",
86
+ "exec-summary",
87
+ "decision-log",
88
+ "guide-builder"
89
+ ]
90
+ },
91
+ "govern-ai-use": {
92
+ "description": "Adopt AI deliberately and prove what it is doing: readiness assessment, use-case triage, rollout plans, acceptable-use policy, adoption staging, and usage reporting.",
93
+ "skills": [
94
+ "ai-readiness-assessment",
95
+ "ai-use-case-triage",
96
+ "ai-adoption-rollout",
97
+ "ai-usage-policy",
98
+ "agent-adoption-stage",
99
+ "ai-usage-report"
100
+ ]
101
+ },
102
+ "get-a-draft-ready-to-ship": {
103
+ "description": "The passes either side of a generator: collect a messy input into a structured brief, critique the argument, and strip the machine artifacts before it leaves the building.",
104
+ "skills": [
105
+ "brief-intake",
106
+ "doc-critique",
107
+ "output-hygiene"
108
+ ]
109
+ }
110
+ }
111
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/sananthanarayan/skilldrop/contracts/catalogue.schema.json",
4
+ "title": "skilldrop catalogue.json",
5
+ "$comment": "RFC-0026 / RFC-0034. The catalogue index: pack display order, and the outcome axis. Packs answer WHO needs a skill (the folder it sits in); outcomes answer WHY someone opened the catalogue.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["version", "packs", "outcomes"],
9
+ "properties": {
10
+ "$comment": { "type": "string" },
11
+ "version": { "type": "string" },
12
+ "packs": {
13
+ "type": "array",
14
+ "items": { "type": "string" },
15
+ "minItems": 1,
16
+ "description": "Every pack folder under packs/, in display order. validate.py checks both directions."
17
+ },
18
+ "outcomes": {
19
+ "type": "object",
20
+ "description": "The catalogue's second browse axis. A browse aid only — never an install unit; the CLI takes no --outcome.",
21
+ "additionalProperties": {
22
+ "type": "object",
23
+ "additionalProperties": false,
24
+ "required": ["description", "skills"],
25
+ "properties": {
26
+ "description": { "type": "string", "description": "The chip's tooltip on the catalogue site." },
27
+ "skills": { "type": "array", "items": { "type": "string" }, "minItems": 1 }
28
+ }
29
+ }
30
+ }
31
+ }
32
+ }
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://github.com/sananthanarayan/skilldrop/contracts/loop.schema.json",
4
4
  "title": "skilldrop loop",
5
- "$comment": "RFC-0028. A loop sequences existing skills; it never contains one. Skills stay in flat skills/<name> folders and stay independently installable — a loop is a named order plus the gates between stages. Enforced by validate.py with hand-rolled stdlib checks: skilldrop ships zero runtime dependencies and this file must not become a reason to add `jsonschema`.",
5
+ "$comment": "RFC-0028. A loop sequences existing skills; it never contains one. Skills stay in their own packs/<pack>/skills/<name> folders and stay independently installable — a loop is a named order plus the gates between stages. Enforced by validate.py with hand-rolled stdlib checks: skilldrop ships zero runtime dependencies and this file must not become a reason to add `jsonschema`.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "required": ["name", "description", "entrypoint", "kind", "stages"],
@@ -48,7 +48,7 @@
48
48
  "type": "array",
49
49
  "minItems": 1,
50
50
  "items": { "type": "string" },
51
- "description": "Skill folder names, in order. Each must be a real skills/<name>. `*` means any generator, and is legal only in a wrapper."
51
+ "description": "Skill folder names, in order. Each must be a real skill folder (packs/<pack>/skills/<name>). `*` means any generator, and is legal only in a wrapper."
52
52
  },
53
53
  "gate": {
54
54
  "type": "object",
@@ -1,49 +1,49 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://github.com/sananthanarayan/skilldrop/contracts/pack.schema.json",
4
- "title": "skilldrop packs.json",
5
- "$comment": "RFC-0001 / RFC-0026 / RFC-0029 / RFC-0033. Packs and outcomes are METADATA ONLY — skills never move out of flat skills/<name> folders. RFC-0033: each skill and loop sits in exactly one pack; shared skills live in `core`, which other packs pull in via `requires`. Packs answer WHO needs a skill; outcomes answer WHY someone opened the catalogue. Both get the same two-way membership check in validate.py.",
4
+ "title": "skilldrop packs/<pack>/pack.json",
5
+ "$comment": "RFC-0001 / RFC-0032 / RFC-0033 / RFC-0034. One pack's metadata. Membership is not listed here: a skill is in this pack because it sits at packs/<pack>/skills/<name>/, and a loop because it sits at packs/<pack>/loops/<name>/. Key names follow agent-ready-repo's pack.toml so the two stay mechanically convertible.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
- "required": ["version", "packs", "outcomes"],
8
+ "required": ["description"],
9
9
  "properties": {
10
10
  "$comment": { "type": "string" },
11
- "version": { "type": "string" },
12
- "packs": {
11
+ "description": { "type": "string", "description": "One line — who this pack is for." },
12
+ "display_name": { "type": "string", "description": "RFC-0032. Human title for the pack's page and plugin entry." },
13
+ "keywords": { "type": "array", "items": { "type": "string" }, "description": "RFC-0032. Search terms, copied into the plugin entry." },
14
+ "links": {
13
15
  "type": "object",
14
- "description": "Role-based bundles. Keys are pack names.",
15
- "additionalProperties": {
16
- "type": "object",
17
- "additionalProperties": false,
18
- "required": ["description", "skills"],
19
- "properties": {
20
- "description": { "type": "string", "description": "One line — who this pack is for." },
21
- "skills": { "type": "array", "items": { "type": "string" }, "minItems": 1,
22
- "description": "Real skill folders. Every skill must appear in at least one pack." },
23
- "requires": {
24
- "type": "array",
25
- "items": {
26
- "type": "string"
27
- },
28
- "description": "RFC-0033. Packs installed together with this one (in practice, `core`). One level only: a required pack may not itself require."
29
- },
30
- "loops": { "type": "array", "items": { "type": "string" },
31
- "description": "RFC-0028. Real loops/ folders. Every loop must appear in at least one pack." }
32
- }
16
+ "additionalProperties": false,
17
+ "description": "RFC-0032. Catalogue-facing links; `documentation` is the pack's page.",
18
+ "properties": {
19
+ "homepage": { "type": "string" },
20
+ "repository": { "type": "string" },
21
+ "documentation": { "type": "string" }
33
22
  }
34
23
  },
35
- "outcomes": {
24
+ "maintainers": {
25
+ "type": "array",
26
+ "description": "RFC-0032.",
27
+ "items": { "type": "object", "additionalProperties": false, "required": ["name"], "properties": { "name": { "type": "string" } } }
28
+ },
29
+ "first-value": {
36
30
  "type": "object",
37
- "description": "The catalogue's second browse axis. A browse aid only — never an install unit; the CLI takes no --outcome.",
38
- "additionalProperties": {
39
- "type": "object",
40
- "additionalProperties": false,
41
- "required": ["description", "skills"],
42
- "properties": {
43
- "description": { "type": "string", "description": "The chip's tooltip on the catalogue site." },
44
- "skills": { "type": "array", "items": { "type": "string" }, "minItems": 1 }
45
- }
31
+ "additionalProperties": false,
32
+ "description": "RFC-0032. What to try first after installing, how to tell it worked, and what to do if it didn't. Key names match agent-ready-repo's [pack.first-value].",
33
+ "required": ["audience-posture", "prerequisites", "starter-task", "starter-prompt", "verification", "recovery"],
34
+ "properties": {
35
+ "audience-posture": { "type": "string", "enum": ["technical", "non-technical"] },
36
+ "prerequisites": { "type": "array", "items": { "type": "string" } },
37
+ "starter-task": { "type": "string" },
38
+ "starter-prompt": { "type": "string" },
39
+ "verification": { "type": "string" },
40
+ "recovery": { "type": "string" }
46
41
  }
42
+ },
43
+ "requires": {
44
+ "type": "array",
45
+ "items": { "type": "string" },
46
+ "description": "RFC-0033. Packs installed together with this one (in practice, `core`). One level only: a required pack may not itself require."
47
47
  }
48
48
  }
49
49
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skilldrop-cli",
3
- "version": "0.13.2",
3
+ "version": "0.13.3",
4
4
  "description": "Portable AI-agent skills for the deliverables knowledge workers ship \u2014 diagrams, ADRs, PRDs, runbooks, decks, reviews \u2014 installable into Claude Code, Cursor, Kiro, and any IDE that takes custom instructions. One command per skill or per role-based pack.",
5
5
  "author": {
6
6
  "name": "Sanjay Ananthanarayan",
@@ -11,11 +11,10 @@
11
11
  },
12
12
  "files": [
13
13
  "bin/",
14
- "skills/",
14
+ "packs/",
15
15
  "agents/",
16
- "loops/",
17
16
  "contracts/",
18
- "packs.json",
17
+ "catalogue.json",
19
18
  "model-routing.json"
20
19
  ],
21
20
  "engines": {
@@ -0,0 +1,22 @@
1
+ {
2
+ "description": "Adopt and build AI systems: readiness assessment, use-case triage, rollout and acceptable-use policy, plus agent loop design, subagent orchestration, spend budgets, agent security review, eval harnesses, and AI-usage reporting.",
3
+ "display_name": "AI engineering",
4
+ "keywords": ["ai-adoption", "agents", "evals", "governance", "budgets"],
5
+ "links": {
6
+ "documentation": "https://sananthanarayan.github.io/skilldrop/packs/ai-engineering/"
7
+ },
8
+ "maintainers": [
9
+ {
10
+ "name": "sananthanarayan"
11
+ }
12
+ ],
13
+ "first-value": {
14
+ "audience-posture": "non-technical",
15
+ "prerequisites": [],
16
+ "starter-task": "Find out whether a team is ready to adopt AI tools, and what blocks it first",
17
+ "starter-prompt": "Are we ready for AI? Our support team has 12 people on Zendesk, no AI tools today, and a legal team worried about customer data.",
18
+ "verification": "ai-readiness-assessment scores six dimensions (data, tooling, skills, governance, process, culture) with evidence for each, and ranks the gaps that block adoption first.",
19
+ "recovery": "If ai-readiness-assessment does not activate, ask for it by name and check that its folder exists in your skills folder (`~/.claude/skills/` by default)."
20
+ },
21
+ "requires": ["core"]
22
+ }
@@ -41,12 +41,12 @@ The load-bearing idea: **the bottleneck moves.** Each stage is limited by someth
41
41
 
42
42
  | Unlock | Where it's implemented |
43
43
  |---|---|
44
- | a trusted self-verification loop | [`pre-merge-review`](../pre-merge-review/SKILL.md) — a mechanical gate whose exit code decides, plus the reviewer panel |
44
+ | a trusted self-verification loop | [`pre-merge-review`](../../../dev-team/skills/pre-merge-review/SKILL.md) — a mechanical gate whose exit code decides, plus the reviewer panel |
45
45
  | automated review that isn't the queue | the reviewer panel (`devils-advocate`, `security-reviewer`, `code-quality`) |
46
46
  | loops and routines | [`agent-loop-design`](../agent-loop-design/SKILL.md) — generate→verify→gate with exit criteria and a cap |
47
47
  | parallel agents without collision | [`subagent-design`](../subagent-design/SKILL.md) — topology, isolation, typed contracts |
48
48
  | token efficiency as volume climbs | [`agent-budget`](../agent-budget/SKILL.md) + a provider-neutral model tier per task |
49
- | encoding standards so agents inherit them | [`agents-md-generator`](../agents-md-generator/SKILL.md) and skills themselves |
49
+ | encoding standards so agents inherit them | [`agents-md-generator`](../../../dev-team/skills/agents-md-generator/SKILL.md) and skills themselves |
50
50
  | guardrails for autonomous work | [`agent-threat-model`](../agent-threat-model/SKILL.md) |
51
51
 
52
52
  7. **End with the re-measure date and what would prove the unlock landed.** An observable: "median agents-in-flight ≥ 3 and engineers stop reading intermediate diffs, in 6 weeks."
@@ -0,0 +1,21 @@
1
+ {
2
+ "description": "Skills for teams building on the Anthropic API — prompt caching, token budgeting, eval generation for skills, and tool-use schema writing.",
3
+ "display_name": "Claude API",
4
+ "keywords": ["anthropic", "prompt-caching", "tokens", "tool-use", "evals"],
5
+ "links": {
6
+ "documentation": "https://sananthanarayan.github.io/skilldrop/packs/claude-api/"
7
+ },
8
+ "maintainers": [
9
+ {
10
+ "name": "sananthanarayan"
11
+ }
12
+ ],
13
+ "first-value": {
14
+ "audience-posture": "technical",
15
+ "prerequisites": ["A system prompt and a typical request from your Claude API integration"],
16
+ "starter-task": "Find where prompt caching will cut your input costs",
17
+ "starter-prompt": "Here is our system prompt and a typical request: <paste them>. Where should the cache_control breakpoints go, and what hit rate should we expect?",
18
+ "verification": "prompt-caching-advisor marks where each cache_control checkpoint goes and estimates the cache hit rate.",
19
+ "recovery": "If prompt-caching-advisor does not activate, ask for it by name and check that its folder exists in your skills folder (`~/.claude/skills/` by default)."
20
+ }
21
+ }
@@ -5,7 +5,7 @@ description: Takes a skill's SKILL.md and generates a set of eval cases — trig
5
5
 
6
6
  # eval-harness-generator
7
7
 
8
- Reads a SKILL.md and generates eval cases that cover the skill's happy path, edge cases, and known failure modes. The output is JSON that drops directly into `skills/<name>/evals/cases.json`. Unlike `llm-eval-harness` (which designs eval harnesses for arbitrary LLM features), this skill specifically targets the skilldrop eval format and the patterns that skilldrop skills routinely get wrong.
8
+ Reads a SKILL.md and generates eval cases that cover the skill's happy path, edge cases, and known failure modes. The output is JSON that drops directly into the skill's `evals/cases.json` (in skilldrop, `packs/<pack>/skills/<name>/evals/`). Unlike `llm-eval-harness` (which designs eval harnesses for arbitrary LLM features), this skill specifically targets the skilldrop eval format and the patterns that skilldrop skills routinely get wrong.
9
9
 
10
10
  ## How to respond
11
11
 
@@ -64,7 +64,7 @@ After the JSON array, add a brief eval strategy note (3–5 sentences) explainin
64
64
 
65
65
  Tell the user:
66
66
  ```
67
- Drop this into skills/<skill-name>/evals/cases.json
67
+ Drop this into packs/<pack>/skills/<skill-name>/evals/cases.json
68
68
  Run: python3 validate.py # confirms the file is found
69
69
  ```
70
70
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eval-harness-generator",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Takes a skill's SKILL.md and generates a set of eval cases — trigger queries, expected output shape, and pass/fail criteria — ready to drop into the skill's evals/ directory. Use when adding evals to a new or existing skill, verifying a skill behaves as documented, or building a regression gate before modifying a skill.",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": { "npm": [], "pip": [] },
@@ -37,7 +37,7 @@ check the argument and the surface after.
37
37
 
38
38
  ## Verdicts
39
39
 
40
- Defined in [`contracts/terminals.json`](../../contracts/terminals.json). G4 emits the critique
40
+ Defined in [`contracts/terminals.json`](../../../../contracts/terminals.json). G4 emits the critique
41
41
  vocabulary. `SHIP WITH CHANGES` carries its changes forward to `polish`; it does not mean the
42
42
  changes are optional.
43
43
 
@@ -0,0 +1,21 @@
1
+ {
2
+ "description": "The cross-role toolkit every pack builds on: structured intake, document critique, the review council, and output hygiene, plus the ship-a-draft wrapper. Installed automatically with every role pack.",
3
+ "display_name": "Core",
4
+ "keywords": ["intake", "critique", "review", "hygiene"],
5
+ "links": {
6
+ "documentation": "https://sananthanarayan.github.io/skilldrop/packs/core/"
7
+ },
8
+ "maintainers": [
9
+ {
10
+ "name": "sananthanarayan"
11
+ }
12
+ ],
13
+ "first-value": {
14
+ "audience-posture": "non-technical",
15
+ "prerequisites": [],
16
+ "starter-task": "Turn rough notes into a structured brief, then get a verdict on the draft",
17
+ "starter-prompt": "Here are my notes from today's planning call: <paste them>. Turn them into a brief, then critique the draft you write from it.",
18
+ "verification": "brief-intake returns a structured brief with gaps tagged, and doc-critique ends with a verdict: SHIP IT, SHIP WITH CHANGES, MAJOR REWRITE or WRONG ARTIFACT.",
19
+ "recovery": "If neither skill activates, check that `brief-intake/SKILL.md` and `doc-critique/SKILL.md` exist in your skills folder (`~/.claude/skills/` by default). In Claude Code, start a new session after installing."
20
+ }
21
+ }
@@ -7,7 +7,7 @@ description: Convene a council of distinct senior-engineer personas (Architect,
7
7
 
8
8
  You convene a **council of distinct expert personas** to deliberate something consequential, then reconcile their views into a decision. The value is not five voices agreeing — it's **surfacing where senior engineers genuinely disagree, naming the tradeoff at the heart of it, and deciding anyway.**
9
9
 
10
- This is the deliberation counterpart to the single-voice reviewers. Use [`devils-advocate`](../devils-advocate/SKILL.md) when you want one adversarial pass on code, [`doc-critique`](../doc-critique/SKILL.md) for one pass on a doc, [`tech-comparison-matrix`](../tech-comparison-matrix/SKILL.md) for a weighted scoring of named options. Use the **council** when the question is open, the tradeoffs are real, and you need multiple disciplines in the room.
10
+ This is the deliberation counterpart to the single-voice reviewers. Use [`devils-advocate`](../../../dev-team/skills/devils-advocate/SKILL.md) when you want one adversarial pass on code, [`doc-critique`](../doc-critique/SKILL.md) for one pass on a doc, [`tech-comparison-matrix`](../../../solution-architect/skills/tech-comparison-matrix/SKILL.md) for a weighted scoring of named options. Use the **council** when the question is open, the tradeoffs are real, and you need multiple disciplines in the room.
11
11
 
12
12
  ## What the council reviews
13
13