@rfxlamia/skillkit 1.0.0 → 1.2.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 (269) hide show
  1. package/agents/agents/creative-copywriter.md +212 -0
  2. package/agents/agents/dario-amodei.md +135 -0
  3. package/agents/agents/doc-simplifier.md +63 -0
  4. package/agents/agents/kotlin-pro.md +433 -0
  5. package/agents/agents/red-team.md +136 -0
  6. package/agents/agents/sam-altman.md +121 -0
  7. package/agents/agents/seo-manager.md +184 -0
  8. package/package.json +7 -2
  9. package/skills/quick-spec/tests/__pycache__/test_skill.cpython-314-pytest-9.0.2.pyc +0 -0
  10. package/skills/skillkit/.claude/settings.local.json +7 -0
  11. package/skills/skillkit/scripts/__pycache__/decision_helper.cpython-314.pyc +0 -0
  12. package/skills/skillkit/scripts/__pycache__/quick_validate.cpython-312.pyc +0 -0
  13. package/skills/skillkit/scripts/__pycache__/quick_validate.cpython-314.pyc +0 -0
  14. package/skills/skillkit/scripts/__pycache__/test_generator.cpython-314-pytest-9.0.2.pyc +0 -0
  15. package/skills/skillkit/scripts/utils/__pycache__/__init__.cpython-312.pyc +0 -0
  16. package/skills/skillkit/scripts/utils/__pycache__/__init__.cpython-314.pyc +0 -0
  17. package/skills/skillkit/scripts/utils/__pycache__/budget_tracker.cpython-312.pyc +0 -0
  18. package/skills/skillkit/scripts/utils/__pycache__/budget_tracker.cpython-314.pyc +0 -0
  19. package/skills/skillkit/scripts/utils/__pycache__/output_formatter.cpython-312.pyc +0 -0
  20. package/skills/skillkit/scripts/utils/__pycache__/output_formatter.cpython-314.pyc +0 -0
  21. package/skills/skillkit/scripts/utils/__pycache__/reference_validator.cpython-312.pyc +0 -0
  22. package/skills/skillkit/scripts/utils/__pycache__/reference_validator.cpython-314.pyc +0 -0
  23. package/skills/skillkit-help/SKILL.md +81 -0
  24. package/skills/skillkit-help/knowledge/application/09-case-studies.md +257 -0
  25. package/skills/skillkit-help/knowledge/application/12-testing-and-validation.md +276 -0
  26. package/skills/skillkit-help/knowledge/foundation/01-why-skills-exist.md +246 -0
  27. package/skills/skillkit-help/knowledge/foundation/02-skills-vs-subagents-comparison.md +312 -0
  28. package/skills/skillkit-help/knowledge/foundation/03-skills-vs-subagents-decision-tree.md +346 -0
  29. package/skills/skillkit-help/knowledge/foundation/06-platform-constraints.md +237 -0
  30. package/skills/skillkit-help/knowledge/foundation/08-when-not-to-use-skills.md +270 -0
  31. package/skills/skillkit-help/template/SKILL.md +52 -0
  32. package/skills/skills/adversarial-review/SKILL.md +219 -0
  33. package/skills/skills/baby-education/SKILL.md +260 -0
  34. package/skills/skills/baby-education/references/advanced-techniques.md +323 -0
  35. package/skills/skills/baby-education/references/transformations.md +345 -0
  36. package/skills/skills/been-there-done-that/SKILL.md +455 -0
  37. package/skills/skills/been-there-done-that/references/analysis-patterns.md +162 -0
  38. package/skills/skills/been-there-done-that/references/git-commands.md +132 -0
  39. package/skills/skills/been-there-done-that/references/tree-insertion-logic.md +145 -0
  40. package/skills/skills/coolhunter/SKILL.md +270 -0
  41. package/skills/skills/coolhunter/assets/elicitation-methods.csv +51 -0
  42. package/skills/skills/coolhunter/knowledge/elicitation-methods.md +312 -0
  43. package/skills/skills/coolhunter/references/workflow-execution.md +238 -0
  44. package/skills/skills/coolhunter/workflow-plan-coolhunter.md +232 -0
  45. package/skills/skills/creative-copywriting/SKILL.md +324 -0
  46. package/skills/skills/creative-copywriting/databases/README.md +60 -0
  47. package/skills/skills/creative-copywriting/databases/carousel-structures.csv +16 -0
  48. package/skills/skills/creative-copywriting/databases/emotional-arcs.csv +11 -0
  49. package/skills/skills/creative-copywriting/databases/hook-formulas.csv +51 -0
  50. package/skills/skills/creative-copywriting/databases/power-words.csv +201 -0
  51. package/skills/skills/creative-copywriting/databases/psychological-triggers.csv +21 -0
  52. package/skills/skills/creative-copywriting/databases/read-more-patterns.csv +26 -0
  53. package/skills/skills/creative-copywriting/databases/swipe-triggers.csv +31 -0
  54. package/skills/skills/creative-copywriting/references/carousel-psychology.md +223 -0
  55. package/skills/skills/creative-copywriting/references/hook-anatomy.md +169 -0
  56. package/skills/skills/creative-copywriting/references/power-word-science.md +134 -0
  57. package/skills/skills/creative-copywriting/references/storytelling-frameworks.md +157 -0
  58. package/skills/skills/diverse-content-gen/SKILL.md +201 -0
  59. package/skills/skills/diverse-content-gen/references/advanced-techniques.md +320 -0
  60. package/skills/skills/diverse-content-gen/references/research-findings.md +379 -0
  61. package/skills/skills/diverse-content-gen/references/task-workflows.md +241 -0
  62. package/skills/skills/diverse-content-gen/references/tool-integration.md +419 -0
  63. package/skills/skills/diverse-content-gen/references/troubleshooting.md +426 -0
  64. package/skills/skills/diverse-content-gen/references/vs-core-technique.md +240 -0
  65. package/skills/skills/framework-critical-thinking/SKILL.md +220 -0
  66. package/skills/skills/framework-critical-thinking/references/bias_detector.md +375 -0
  67. package/skills/skills/framework-critical-thinking/references/fallback_handler.md +239 -0
  68. package/skills/skills/framework-critical-thinking/references/memory_curator.md +161 -0
  69. package/skills/skills/framework-critical-thinking/references/metacognitive_monitor.md +297 -0
  70. package/skills/skills/framework-critical-thinking/references/producer_critic_orchestrator.md +333 -0
  71. package/skills/skills/framework-critical-thinking/references/reasoning_router.md +235 -0
  72. package/skills/skills/framework-critical-thinking/references/reasoning_validator.md +97 -0
  73. package/skills/skills/framework-critical-thinking/references/reflection_trigger.md +78 -0
  74. package/skills/skills/framework-critical-thinking/references/self_verification.md +388 -0
  75. package/skills/skills/framework-critical-thinking/references/uncertainty_quantifier.md +207 -0
  76. package/skills/skills/framework-initiative/SKILL.md +231 -0
  77. package/skills/skills/framework-initiative/references/examples.md +150 -0
  78. package/skills/skills/framework-initiative/references/impact-analysis.md +157 -0
  79. package/skills/skills/framework-initiative/references/intent-patterns.md +145 -0
  80. package/skills/skills/framework-initiative/references/star-framework.md +165 -0
  81. package/skills/skills/humanize-docs/SKILL.md +203 -0
  82. package/skills/skills/humanize-docs/references/advanced-techniques.md +13 -0
  83. package/skills/skills/humanize-docs/references/core-transformations.md +368 -0
  84. package/skills/skills/humanize-docs/references/detection-patterns.md +400 -0
  85. package/skills/skills/humanize-docs/references/examples-gallery.md +374 -0
  86. package/skills/skills/imagine/SKILL.md +190 -0
  87. package/skills/skills/imagine/references/artstyle-corporate-memphis.md +625 -0
  88. package/skills/skills/imagine/references/artstyle-crewdson-hyperrealism.md +295 -0
  89. package/skills/skills/imagine/references/artstyle-iphone-social-media.md +426 -0
  90. package/skills/skills/imagine/references/artstyle-sciencesaru.md +276 -0
  91. package/skills/skills/pre-deploy-checklist/README.md +26 -0
  92. package/skills/skills/pre-deploy-checklist/SKILL.md +153 -0
  93. package/skills/skills/pre-deploy-checklist/references/checklist-categories.md +174 -0
  94. package/skills/skills/pre-deploy-checklist/references/domain-prompts.md +216 -0
  95. package/skills/skills/prompt-engineering/SKILL.md +209 -0
  96. package/skills/skills/prompt-engineering/references/advanced-combinations.md +444 -0
  97. package/skills/skills/prompt-engineering/references/chain-of-thought.md +140 -0
  98. package/skills/skills/prompt-engineering/references/decision_matrix.md +220 -0
  99. package/skills/skills/prompt-engineering/references/few-shot.md +346 -0
  100. package/skills/skills/prompt-engineering/references/json-format.md +270 -0
  101. package/skills/skills/prompt-engineering/references/natural-language.md +420 -0
  102. package/skills/skills/prompt-engineering/references/pitfalls.md +365 -0
  103. package/skills/skills/prompt-engineering/references/prompt-chaining.md +498 -0
  104. package/skills/skills/prompt-engineering/references/react.md +108 -0
  105. package/skills/skills/prompt-engineering/references/self-consistency.md +322 -0
  106. package/skills/skills/prompt-engineering/references/tree-of-thoughts.md +386 -0
  107. package/skills/skills/prompt-engineering/references/xml-format.md +220 -0
  108. package/skills/skills/prompt-engineering/references/yaml-format.md +488 -0
  109. package/skills/skills/prompt-engineering/references/zero-shot.md +74 -0
  110. package/skills/skills/quick-spec/SKILL.md +280 -0
  111. package/skills/skills/quick-spec/assets/tech-spec-template.md +74 -0
  112. package/skills/skills/quick-spec/references/step-01-understand.md +189 -0
  113. package/skills/skills/quick-spec/references/step-02-investigate.md +144 -0
  114. package/skills/skills/quick-spec/references/step-03-generate.md +128 -0
  115. package/skills/skills/quick-spec/references/step-04-review.md +173 -0
  116. package/skills/skills/quick-spec/tests/__pycache__/test_skill.cpython-314-pytest-9.0.2.pyc +0 -0
  117. package/skills/skills/quick-spec/tests/test_scenarios.md +83 -0
  118. package/skills/skills/quick-spec/tests/test_skill.py +136 -0
  119. package/skills/skills/readme-expert/SKILL.md +538 -0
  120. package/skills/skills/readme-expert/knowledge/INDEX.md +192 -0
  121. package/skills/skills/readme-expert/knowledge/application/quality-standards.md +470 -0
  122. package/skills/skills/readme-expert/knowledge/application/script-executor.md +604 -0
  123. package/skills/skills/readme-expert/knowledge/application/template-library.md +822 -0
  124. package/skills/skills/readme-expert/knowledge/foundation/codebase-scanner.md +361 -0
  125. package/skills/skills/readme-expert/knowledge/foundation/validation-checklist.md +481 -0
  126. package/skills/skills/red-teaming/SKILL.md +321 -0
  127. package/skills/skills/red-teaming/references/ai-llm-redteam.md +517 -0
  128. package/skills/skills/red-teaming/references/attack-techniques.md +410 -0
  129. package/skills/skills/red-teaming/references/cybersecurity-redteam.md +383 -0
  130. package/skills/skills/red-teaming/references/tools-frameworks.md +446 -0
  131. package/skills/skills/releasing/.skillkit-mode +1 -0
  132. package/skills/skills/releasing/SKILL.md +225 -0
  133. package/skills/skills/releasing/references/version-detection.md +108 -0
  134. package/skills/skills/screenwriter/SKILL.md +273 -0
  135. package/skills/skills/screenwriter/references/advanced-techniques.md +216 -0
  136. package/skills/skills/screenwriter/references/pipeline-integration.md +266 -0
  137. package/skills/skills/skillkit/.claude/settings.local.json +7 -0
  138. package/skills/skills/skillkit/.claude-plugin/plugin.json +27 -0
  139. package/skills/skills/skillkit/CHANGELOG.md +484 -0
  140. package/skills/skills/skillkit/SKILL.md +511 -0
  141. package/skills/skills/skillkit/commands/skillkit.md +6 -0
  142. package/skills/skills/skillkit/commands/validate-plan.md +6 -0
  143. package/skills/skills/skillkit/commands/verify.md +6 -0
  144. package/skills/skills/skillkit/knowledge/INDEX.md +352 -0
  145. package/skills/skills/skillkit/knowledge/application/09-case-studies.md +257 -0
  146. package/skills/skills/skillkit/knowledge/application/10-technical-architecture.md +324 -0
  147. package/skills/skills/skillkit/knowledge/application/11-adoption-strategy.md +267 -0
  148. package/skills/skills/skillkit/knowledge/application/12-testing-and-validation.md +276 -0
  149. package/skills/skills/skillkit/knowledge/application/13-competitive-landscape.md +198 -0
  150. package/skills/skills/skillkit/knowledge/foundation/01-why-skills-exist.md +246 -0
  151. package/skills/skills/skillkit/knowledge/foundation/02-skills-vs-subagents-comparison.md +312 -0
  152. package/skills/skills/skillkit/knowledge/foundation/03-skills-vs-subagents-decision-tree.md +346 -0
  153. package/skills/skills/skillkit/knowledge/foundation/04-hybrid-patterns.md +308 -0
  154. package/skills/skills/skillkit/knowledge/foundation/05-token-economics.md +275 -0
  155. package/skills/skills/skillkit/knowledge/foundation/06-platform-constraints.md +237 -0
  156. package/skills/skills/skillkit/knowledge/foundation/07-security-concerns.md +322 -0
  157. package/skills/skills/skillkit/knowledge/foundation/08-when-not-to-use-skills.md +270 -0
  158. package/skills/skills/skillkit/knowledge/plugin-guide.md +614 -0
  159. package/skills/skills/skillkit/knowledge/tools/14-validation-tools-guide.md +150 -0
  160. package/skills/skills/skillkit/knowledge/tools/15-cost-tools-guide.md +157 -0
  161. package/skills/skills/skillkit/knowledge/tools/16-security-tools-guide.md +122 -0
  162. package/skills/skills/skillkit/knowledge/tools/17-pattern-tools-guide.md +161 -0
  163. package/skills/skills/skillkit/knowledge/tools/18-decision-helper-guide.md +243 -0
  164. package/skills/skills/skillkit/knowledge/tools/19-test-generator-guide.md +275 -0
  165. package/skills/skills/skillkit/knowledge/tools/20-split-skill-guide.md +149 -0
  166. package/skills/skills/skillkit/knowledge/tools/21-quality-scorer-guide.md +226 -0
  167. package/skills/skills/skillkit/knowledge/tools/22-migration-helper-guide.md +356 -0
  168. package/skills/skills/skillkit/knowledge/tools/23-subagent-creation-guide.md +448 -0
  169. package/skills/skills/skillkit/knowledge/tools/24-behavioral-testing-guide.md +122 -0
  170. package/skills/skills/skillkit/references/proposal-generation.md +982 -0
  171. package/skills/skills/skillkit/references/rationalization-catalog.md +75 -0
  172. package/skills/skills/skillkit/references/research-methodology.md +661 -0
  173. package/skills/skills/skillkit/references/section-2-full-creation-workflow.md +452 -0
  174. package/skills/skills/skillkit/references/section-3-validation-workflow-existing-skill.md +63 -0
  175. package/skills/skills/skillkit/references/section-4-decision-workflow-skills-vs-subagents.md +64 -0
  176. package/skills/skills/skillkit/references/section-5-migration-workflow-doc-to-skill.md +58 -0
  177. package/skills/skills/skillkit/references/section-6-subagent-creation-workflow.md +499 -0
  178. package/skills/skills/skillkit/references/section-7-knowledge-reference-map.md +72 -0
  179. package/skills/skills/skillkit/scripts/__pycache__/decision_helper.cpython-314.pyc +0 -0
  180. package/skills/skills/skillkit/scripts/__pycache__/quick_validate.cpython-312.pyc +0 -0
  181. package/skills/skills/skillkit/scripts/__pycache__/quick_validate.cpython-314.pyc +0 -0
  182. package/skills/skills/skillkit/scripts/__pycache__/test_generator.cpython-314-pytest-9.0.2.pyc +0 -0
  183. package/skills/skills/skillkit/scripts/decision_helper.py +799 -0
  184. package/skills/skills/skillkit/scripts/init_skill.py +400 -0
  185. package/skills/skills/skillkit/scripts/init_subagent.py +231 -0
  186. package/skills/skills/skillkit/scripts/migration_helper.py +669 -0
  187. package/skills/skills/skillkit/scripts/package_skill.py +211 -0
  188. package/skills/skills/skillkit/scripts/pattern_detector.py +381 -0
  189. package/skills/skills/skillkit/scripts/pattern_detector_new.py +382 -0
  190. package/skills/skills/skillkit/scripts/pressure_tester.py +157 -0
  191. package/skills/skills/skillkit/scripts/quality_scorer.py +999 -0
  192. package/skills/skills/skillkit/scripts/quick_validate.py +100 -0
  193. package/skills/skills/skillkit/scripts/security_scanner.py +474 -0
  194. package/skills/skills/skillkit/scripts/split_skill.py +540 -0
  195. package/skills/skills/skillkit/scripts/test_generator.py +695 -0
  196. package/skills/skills/skillkit/scripts/token_estimator.py +493 -0
  197. package/skills/skills/skillkit/scripts/utils/__init__.py +49 -0
  198. package/skills/skills/skillkit/scripts/utils/__pycache__/__init__.cpython-312.pyc +0 -0
  199. package/skills/skills/skillkit/scripts/utils/__pycache__/__init__.cpython-314.pyc +0 -0
  200. package/skills/skills/skillkit/scripts/utils/__pycache__/budget_tracker.cpython-312.pyc +0 -0
  201. package/skills/skills/skillkit/scripts/utils/__pycache__/budget_tracker.cpython-314.pyc +0 -0
  202. package/skills/skills/skillkit/scripts/utils/__pycache__/output_formatter.cpython-312.pyc +0 -0
  203. package/skills/skills/skillkit/scripts/utils/__pycache__/output_formatter.cpython-314.pyc +0 -0
  204. package/skills/skills/skillkit/scripts/utils/__pycache__/reference_validator.cpython-312.pyc +0 -0
  205. package/skills/skills/skillkit/scripts/utils/__pycache__/reference_validator.cpython-314.pyc +0 -0
  206. package/skills/skills/skillkit/scripts/utils/budget_tracker.py +388 -0
  207. package/skills/skills/skillkit/scripts/utils/output_formatter.py +263 -0
  208. package/skills/skills/skillkit/scripts/utils/reference_validator.py +401 -0
  209. package/skills/skills/skillkit/scripts/validate_skill.py +594 -0
  210. package/skills/skills/skillkit/tests/test_behavioral.py +39 -0
  211. package/skills/skills/skillkit/tests/test_scenarios.md +83 -0
  212. package/skills/skills/skillkit/tests/test_skill.py +136 -0
  213. package/skills/skills/skillkit-help/SKILL.md +81 -0
  214. package/skills/skills/skillkit-help/knowledge/application/09-case-studies.md +257 -0
  215. package/skills/skills/skillkit-help/knowledge/application/12-testing-and-validation.md +276 -0
  216. package/skills/skills/skillkit-help/knowledge/foundation/01-why-skills-exist.md +246 -0
  217. package/skills/skills/skillkit-help/knowledge/foundation/02-skills-vs-subagents-comparison.md +312 -0
  218. package/skills/skills/skillkit-help/knowledge/foundation/03-skills-vs-subagents-decision-tree.md +346 -0
  219. package/skills/skills/skillkit-help/knowledge/foundation/06-platform-constraints.md +237 -0
  220. package/skills/skills/skillkit-help/knowledge/foundation/08-when-not-to-use-skills.md +270 -0
  221. package/skills/skills/skillkit-help/template/SKILL.md +52 -0
  222. package/skills/skills/social-media-seo/SKILL.md +278 -0
  223. package/skills/skills/social-media-seo/databases/caption-styles.csv +31 -0
  224. package/skills/skills/social-media-seo/databases/engagement-tactics.csv +16 -0
  225. package/skills/skills/social-media-seo/databases/hashtag-strategies.csv +21 -0
  226. package/skills/skills/social-media-seo/databases/hook-formulas.csv +26 -0
  227. package/skills/skills/social-media-seo/databases/keyword-clusters.csv +11 -0
  228. package/skills/skills/social-media-seo/databases/thread-structures.csv +26 -0
  229. package/skills/skills/social-media-seo/databases/viral-patterns.csv +21 -0
  230. package/skills/skills/social-media-seo/references/analytics-guide.md +321 -0
  231. package/skills/skills/social-media-seo/references/instagram-seo.md +235 -0
  232. package/skills/skills/social-media-seo/references/threads-seo.md +305 -0
  233. package/skills/skills/social-media-seo/references/x-twitter-seo.md +337 -0
  234. package/skills/skills/social-media-seo/scripts/query_database.py +191 -0
  235. package/skills/skills/storyteller/SKILL.md +241 -0
  236. package/skills/skills/storyteller/references/transformation-methodology.md +293 -0
  237. package/skills/skills/storyteller/references/visual-vocabulary.md +177 -0
  238. package/skills/skills/thread-pro/SKILL.md +162 -0
  239. package/skills/skills/thread-pro/anti-ai-patterns.md +120 -0
  240. package/skills/skills/thread-pro/hook-formulas.md +138 -0
  241. package/skills/skills/thread-pro/references/anti-ai-patterns.md +120 -0
  242. package/skills/skills/thread-pro/references/hook-formulas.md +138 -0
  243. package/skills/skills/thread-pro/references/thread-structures.md +240 -0
  244. package/skills/skills/thread-pro/references/voice-injection.md +130 -0
  245. package/skills/skills/thread-pro/thread-structures.md +240 -0
  246. package/skills/skills/thread-pro/voice-injection.md +130 -0
  247. package/skills/skills/tinkering/SKILL.md +251 -0
  248. package/skills/skills/tinkering/references/graduation-checklist.md +100 -0
  249. package/skills/skills/validate-plan/.skillkit-mode +1 -0
  250. package/skills/skills/validate-plan/SKILL.md +406 -0
  251. package/skills/skills/validate-plan/references/dry-principles.md +251 -0
  252. package/skills/skills/validate-plan/references/gap-analysis-guide.md +320 -0
  253. package/skills/skills/validate-plan/references/tdd-patterns.md +413 -0
  254. package/skills/skills/validate-plan/references/yagni-checklist.md +330 -0
  255. package/skills/skills/verify-before-ship/.skillkit-mode +1 -0
  256. package/skills/skills/verify-before-ship/SKILL.md +116 -0
  257. package/skills/skills/verify-before-ship/references/anti-rationalization.md +212 -0
  258. package/skills/skills/verify-before-ship/references/verification-gates.md +305 -0
  259. package/skills-manifest.json +8 -2
  260. package/src/banner.js +1 -1
  261. package/src/cli.js +15 -4
  262. package/src/install.js +45 -29
  263. package/src/install.test.js +75 -7
  264. package/src/picker.js +15 -4
  265. package/src/picker.test.js +36 -1
  266. package/src/scope.js +8 -39
  267. package/src/scope.test.js +9 -13
  268. package/src/tools.js +76 -0
  269. package/src/tools.test.js +80 -0
package/src/scope.js CHANGED
@@ -1,57 +1,26 @@
1
+ // installer/src/scope.js
1
2
  import { select, log } from '@clack/prompts'
2
- import { homedir } from 'os'
3
- import { join } from 'path'
4
- import { existsSync } from 'fs'
5
-
6
- export async function selectScope() {
7
- const userSkillsPath = join(homedir(), '.claude', 'skills')
8
- const projectSkillsPath = join(process.cwd(), '.claude', 'skills')
9
- const projectExists = existsSync(join(process.cwd(), '.claude', 'skills'))
10
3
 
4
+ export async function selectScope(selectedTools = []) {
11
5
  const scope = await select({
12
6
  message: 'Install to:',
13
7
  options: [
14
8
  {
15
9
  value: 'user',
16
- label: `User scope ~/.claude/skills/`,
10
+ label: 'User scope',
17
11
  hint: 'available in all projects'
18
12
  },
19
13
  {
20
14
  value: 'project',
21
- label: `Project scope ./.claude/skills/`,
22
- hint: projectExists ? 'detected .claude/skills/ here' : `will create ${projectSkillsPath}`
15
+ label: 'Project scope',
16
+ hint: 'this project only'
23
17
  }
24
18
  ]
25
19
  })
26
20
 
27
- if (scope === 'user') {
28
- return {
29
- scope: 'user',
30
- skillsDir: userSkillsPath,
31
- agentsDir: join(homedir(), '.claude', 'agents')
32
- }
33
- }
34
-
35
- return {
36
- scope: 'project',
37
- skillsDir: projectSkillsPath,
38
- agentsDir: join(process.cwd(), '.claude', 'agents')
39
- }
40
- }
41
-
42
- // Export for testing
43
- export function getUserScope() {
44
- return {
45
- scope: 'user',
46
- skillsDir: join(homedir(), '.claude', 'skills'),
47
- agentsDir: join(homedir(), '.claude', 'agents')
21
+ if (selectedTools.includes('codex') && scope === 'project') {
22
+ log.warn('Codex does not support project scope — skills will be installed to ~/.agents/skills/skillkit/')
48
23
  }
49
- }
50
24
 
51
- export function getProjectScope() {
52
- return {
53
- scope: 'project',
54
- skillsDir: join(process.cwd(), '.claude', 'skills'),
55
- agentsDir: join(process.cwd(), '.claude', 'agents')
56
- }
25
+ return scope
57
26
  }
package/src/scope.test.js CHANGED
@@ -1,19 +1,15 @@
1
+ // installer/src/scope.test.js
1
2
  import { test } from 'node:test'
2
3
  import assert from 'node:assert'
3
- import { homedir } from 'os'
4
- import { join } from 'path'
5
- import { getUserScope, getProjectScope } from './scope.js'
4
+ import { selectScope } from './scope.js'
6
5
 
7
- test('getUserScope returns correct paths', () => {
8
- const scope = getUserScope()
9
- assert.strictEqual(scope.scope, 'user')
10
- assert.strictEqual(scope.skillsDir, join(homedir(), '.claude', 'skills'))
11
- assert.strictEqual(scope.agentsDir, join(homedir(), '.claude', 'agents'))
6
+ test('selectScope is an async function', () => {
7
+ const AsyncFunction = (async () => {}).constructor
8
+ assert.ok(selectScope instanceof AsyncFunction)
12
9
  })
13
10
 
14
- test('getProjectScope returns correct paths', () => {
15
- const scope = getProjectScope()
16
- assert.strictEqual(scope.scope, 'project')
17
- assert.strictEqual(scope.skillsDir, join(process.cwd(), '.claude', 'skills'))
18
- assert.strictEqual(scope.agentsDir, join(process.cwd(), '.claude', 'agents'))
11
+ test('getUserScope and getProjectScope are no longer exported', async () => {
12
+ const mod = await import('./scope.js')
13
+ assert.strictEqual(mod.getUserScope, undefined)
14
+ assert.strictEqual(mod.getProjectScope, undefined)
19
15
  })
package/src/tools.js ADDED
@@ -0,0 +1,76 @@
1
+ // installer/src/tools.js
2
+ import { multiselect } from '@clack/prompts'
3
+ import { homedir } from 'os'
4
+ import { join } from 'path'
5
+
6
+ export async function selectTools() {
7
+ return multiselect({
8
+ message: 'Install to which tools?',
9
+ options: [
10
+ { value: 'claude-code', label: 'Claude Code', hint: '~/.claude/skills/' },
11
+ { value: 'opencode', label: 'OpenCode', hint: '~/.config/opencode/skills/' },
12
+ { value: 'codex', label: 'Codex', hint: '~/.agents/skills/' },
13
+ { value: 'copilot', label: 'GitHub Copilot', hint: '~/.copilot/skills/' }
14
+ ],
15
+ required: true
16
+ })
17
+ }
18
+
19
+ export function getToolTargets(selectedTools, scope) {
20
+ if (!selectedTools.length) return []
21
+
22
+ const home = homedir()
23
+ const cwd = process.cwd()
24
+ const isUser = scope === 'user'
25
+
26
+ const resolve = {
27
+ 'claude-code': {
28
+ name: 'Claude Code',
29
+ scope,
30
+ skillsDir: isUser ? join(home, '.claude', 'skills') : join(cwd, '.claude', 'skills'),
31
+ agentsDir: isUser ? join(home, '.claude', 'agents') : join(cwd, '.claude', 'agents')
32
+ },
33
+ 'opencode': {
34
+ name: 'OpenCode',
35
+ scope,
36
+ skillsDir: isUser
37
+ ? join(home, '.config', 'opencode', 'skills', 'skillkit')
38
+ : join(cwd, '.opencode', 'skills'),
39
+ agentsDir: isUser
40
+ ? join(home, '.config', 'opencode', 'agents')
41
+ : join(cwd, '.opencode', 'agents')
42
+ },
43
+ 'codex': {
44
+ name: 'Codex',
45
+ scope: 'user',
46
+ skillsDir: join(home, '.agents', 'skills', 'skillkit'),
47
+ agentsDir: null
48
+ },
49
+ 'copilot': {
50
+ name: 'GitHub Copilot',
51
+ scope: isUser ? 'user' : 'project',
52
+ skillsDir: join(home, '.copilot', 'skills'),
53
+ agentsDir: isUser
54
+ ? join(home, '.claude', 'agents')
55
+ : join(cwd, '.github', 'agents')
56
+ }
57
+ }
58
+
59
+ const targets = selectedTools
60
+ .filter(id => resolve[id])
61
+ .map(id => ({ ...resolve[id] }))
62
+
63
+ // Dedup: if skillsDir or agentsDir appears more than once, null it in later targets
64
+ const seenSkills = new Set()
65
+ const seenAgents = new Set()
66
+
67
+ for (const t of targets) {
68
+ if (seenSkills.has(t.skillsDir)) t.skillsDir = null
69
+ else seenSkills.add(t.skillsDir)
70
+
71
+ if (t.agentsDir && seenAgents.has(t.agentsDir)) t.agentsDir = null
72
+ else if (t.agentsDir) seenAgents.add(t.agentsDir)
73
+ }
74
+
75
+ return targets.filter(t => t.skillsDir || t.agentsDir)
76
+ }
@@ -0,0 +1,80 @@
1
+ // installer/src/tools.test.js
2
+ import { test } from 'node:test'
3
+ import assert from 'node:assert'
4
+ import { homedir } from 'os'
5
+ import { join } from 'path'
6
+ import { getToolTargets } from './tools.js'
7
+
8
+ const home = homedir()
9
+ const cwd = process.cwd()
10
+
11
+ test('getToolTargets returns empty array for empty selection', () => {
12
+ const result = getToolTargets([], 'user')
13
+ assert.deepStrictEqual(result, [])
14
+ })
15
+
16
+ test('getToolTargets claude-code user scope', () => {
17
+ const [t] = getToolTargets(['claude-code'], 'user')
18
+ assert.strictEqual(t.name, 'Claude Code')
19
+ assert.strictEqual(t.scope, 'user')
20
+ assert.strictEqual(t.skillsDir, join(home, '.claude', 'skills'))
21
+ assert.strictEqual(t.agentsDir, join(home, '.claude', 'agents'))
22
+ })
23
+
24
+ test('getToolTargets claude-code project scope', () => {
25
+ const [t] = getToolTargets(['claude-code'], 'project')
26
+ assert.strictEqual(t.scope, 'project')
27
+ assert.strictEqual(t.skillsDir, join(cwd, '.claude', 'skills'))
28
+ assert.strictEqual(t.agentsDir, join(cwd, '.claude', 'agents'))
29
+ })
30
+
31
+ test('getToolTargets opencode user scope', () => {
32
+ const [t] = getToolTargets(['opencode'], 'user')
33
+ assert.strictEqual(t.name, 'OpenCode')
34
+ assert.strictEqual(t.skillsDir, join(home, '.config', 'opencode', 'skills', 'skillkit'))
35
+ assert.strictEqual(t.agentsDir, join(home, '.config', 'opencode', 'agents'))
36
+ })
37
+
38
+ test('getToolTargets opencode project scope', () => {
39
+ const [t] = getToolTargets(['opencode'], 'project')
40
+ assert.strictEqual(t.skillsDir, join(cwd, '.opencode', 'skills'))
41
+ assert.strictEqual(t.agentsDir, join(cwd, '.opencode', 'agents'))
42
+ })
43
+
44
+ test('getToolTargets codex user scope — agentsDir is null', () => {
45
+ const [t] = getToolTargets(['codex'], 'user')
46
+ assert.strictEqual(t.name, 'Codex')
47
+ assert.strictEqual(t.skillsDir, join(home, '.agents', 'skills', 'skillkit'))
48
+ assert.strictEqual(t.agentsDir, null)
49
+ })
50
+
51
+ test('getToolTargets codex project scope — still resolves to user path', () => {
52
+ const [t] = getToolTargets(['codex'], 'project')
53
+ assert.strictEqual(t.scope, 'user')
54
+ assert.strictEqual(t.skillsDir, join(home, '.agents', 'skills', 'skillkit'))
55
+ assert.strictEqual(t.agentsDir, null)
56
+ })
57
+
58
+ test('getToolTargets copilot user scope', () => {
59
+ const [t] = getToolTargets(['copilot'], 'user')
60
+ assert.strictEqual(t.name, 'GitHub Copilot')
61
+ assert.strictEqual(t.skillsDir, join(home, '.copilot', 'skills'))
62
+ assert.strictEqual(t.agentsDir, join(home, '.claude', 'agents'))
63
+ })
64
+
65
+ test('getToolTargets copilot project scope — skills still user path, agents project path', () => {
66
+ const [t] = getToolTargets(['copilot'], 'project')
67
+ assert.strictEqual(t.skillsDir, join(home, '.copilot', 'skills'))
68
+ assert.strictEqual(t.agentsDir, join(cwd, '.github', 'agents'))
69
+ })
70
+
71
+ test('getToolTargets deduplicates agentsDir for claude-code + copilot (user)', () => {
72
+ const targets = getToolTargets(['claude-code', 'copilot'], 'user')
73
+ assert.strictEqual(targets.length, 2)
74
+ const agentsDirs = targets.map(t => t.agentsDir).filter(Boolean)
75
+ const uniqueAgentsDirs = [...new Set(agentsDirs)]
76
+ assert.strictEqual(agentsDirs.length, uniqueAgentsDirs.length, 'no duplicate agentsDirs')
77
+ // Claude Code gets agentsDir, Copilot gets null (deduped)
78
+ assert.strictEqual(targets[0].agentsDir, join(home, '.claude', 'agents'))
79
+ assert.strictEqual(targets[1].agentsDir, null)
80
+ })