@chankov/agent-skills 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/.claude/commands/{doctor.md → doctor-agent-skills.md} +1 -1
  2. package/.pi/extensions/agent-skills-update-check/README.md +58 -0
  3. package/.pi/extensions/agent-skills-update-check/index.ts +161 -0
  4. package/.pi/extensions/agent-skills-update-check/package.json +6 -0
  5. package/.pi/prompts/{doctor.md → doctor-agent-skills.md} +1 -1
  6. package/.versions/0.2.0/.claude/commands/build.md +18 -0
  7. package/.versions/0.2.0/.claude/commands/code-simplify.md +22 -0
  8. package/.versions/0.2.0/.claude/commands/design-agent.md +14 -0
  9. package/.versions/0.2.0/.claude/commands/doctor-agent-skills.md +13 -0
  10. package/.versions/0.2.0/.claude/commands/plan.md +16 -0
  11. package/.versions/0.2.0/.claude/commands/prime.md +22 -0
  12. package/.versions/0.2.0/.claude/commands/review.md +16 -0
  13. package/.versions/0.2.0/.claude/commands/setup-agent-skills.md +19 -0
  14. package/.versions/0.2.0/.claude/commands/ship.md +17 -0
  15. package/.versions/0.2.0/.claude/commands/spec.md +15 -0
  16. package/.versions/0.2.0/.claude/commands/test.md +19 -0
  17. package/.versions/0.2.0/.opencode/commands/as-build.md +17 -0
  18. package/.versions/0.2.0/.opencode/commands/as-code-simplify.md +16 -0
  19. package/.versions/0.2.0/.opencode/commands/as-design-agent.md +15 -0
  20. package/.versions/0.2.0/.opencode/commands/as-doctor-agent-skills.md +11 -0
  21. package/.versions/0.2.0/.opencode/commands/as-plan.md +16 -0
  22. package/.versions/0.2.0/.opencode/commands/as-prime.md +22 -0
  23. package/.versions/0.2.0/.opencode/commands/as-review.md +15 -0
  24. package/.versions/0.2.0/.opencode/commands/as-setup-agent-skills.md +11 -0
  25. package/.versions/0.2.0/.opencode/commands/as-ship.md +16 -0
  26. package/.versions/0.2.0/.opencode/commands/as-spec.md +16 -0
  27. package/.versions/0.2.0/.opencode/commands/as-test.md +21 -0
  28. package/.versions/0.2.0/.pi/agents/agent-chain.yaml +49 -0
  29. package/.versions/0.2.0/.pi/agents/bowser.md +19 -0
  30. package/.versions/0.2.0/.pi/agents/pi-pi/agent-expert.md +98 -0
  31. package/.versions/0.2.0/.pi/agents/pi-pi/cli-expert.md +41 -0
  32. package/.versions/0.2.0/.pi/agents/pi-pi/config-expert.md +63 -0
  33. package/.versions/0.2.0/.pi/agents/pi-pi/ext-expert.md +43 -0
  34. package/.versions/0.2.0/.pi/agents/pi-pi/keybinding-expert.md +134 -0
  35. package/.versions/0.2.0/.pi/agents/pi-pi/pi-orchestrator.md +57 -0
  36. package/.versions/0.2.0/.pi/agents/pi-pi/prompt-expert.md +70 -0
  37. package/.versions/0.2.0/.pi/agents/pi-pi/skill-expert.md +42 -0
  38. package/.versions/0.2.0/.pi/agents/pi-pi/theme-expert.md +40 -0
  39. package/.versions/0.2.0/.pi/agents/pi-pi/tui-expert.md +85 -0
  40. package/.versions/0.2.0/.pi/agents/teams.yaml +31 -0
  41. package/.versions/0.2.0/.pi/damage-control-rules.yaml +278 -0
  42. package/.versions/0.2.0/.pi/extensions/agent-skills-update-check/README.md +58 -0
  43. package/.versions/0.2.0/.pi/extensions/agent-skills-update-check/index.ts +161 -0
  44. package/.versions/0.2.0/.pi/extensions/agent-skills-update-check/package.json +6 -0
  45. package/.versions/0.2.0/.pi/extensions/chrome-devtools-mcp/README.md +39 -0
  46. package/.versions/0.2.0/.pi/extensions/chrome-devtools-mcp/index.ts +61 -0
  47. package/.versions/0.2.0/.pi/extensions/chrome-devtools-mcp/package.json +6 -0
  48. package/.versions/0.2.0/.pi/extensions/compact-and-continue/README.md +42 -0
  49. package/.versions/0.2.0/.pi/extensions/compact-and-continue/index.ts +120 -0
  50. package/.versions/0.2.0/.pi/extensions/compact-and-continue/package.json +6 -0
  51. package/.versions/0.2.0/.pi/extensions/mcp-bridge/README.md +46 -0
  52. package/.versions/0.2.0/.pi/extensions/mcp-bridge/index.ts +206 -0
  53. package/.versions/0.2.0/.pi/extensions/mcp-bridge/package.json +6 -0
  54. package/.versions/0.2.0/.pi/extensions/package-lock.json +1143 -0
  55. package/.versions/0.2.0/.pi/extensions/package.json +9 -0
  56. package/.versions/0.2.0/.pi/harnesses/agent-chain/README.md +37 -0
  57. package/.versions/0.2.0/.pi/harnesses/agent-chain/index.ts +795 -0
  58. package/.versions/0.2.0/.pi/harnesses/agent-chain/package.json +6 -0
  59. package/.versions/0.2.0/.pi/harnesses/agent-team/README.md +38 -0
  60. package/.versions/0.2.0/.pi/harnesses/agent-team/index.ts +732 -0
  61. package/.versions/0.2.0/.pi/harnesses/agent-team/package.json +6 -0
  62. package/.versions/0.2.0/.pi/harnesses/coms/README.md +36 -0
  63. package/.versions/0.2.0/.pi/harnesses/coms/index.ts +1595 -0
  64. package/.versions/0.2.0/.pi/harnesses/coms/package.json +6 -0
  65. package/.versions/0.2.0/.pi/harnesses/coms-net/README.md +46 -0
  66. package/.versions/0.2.0/.pi/harnesses/coms-net/index.ts +1637 -0
  67. package/.versions/0.2.0/.pi/harnesses/coms-net/package.json +6 -0
  68. package/.versions/0.2.0/.pi/harnesses/damage-control/README.md +38 -0
  69. package/.versions/0.2.0/.pi/harnesses/damage-control/index.ts +207 -0
  70. package/.versions/0.2.0/.pi/harnesses/damage-control/package.json +6 -0
  71. package/.versions/0.2.0/.pi/harnesses/damage-control-continue/README.md +37 -0
  72. package/.versions/0.2.0/.pi/harnesses/damage-control-continue/index.ts +234 -0
  73. package/.versions/0.2.0/.pi/harnesses/damage-control-continue/package.json +6 -0
  74. package/.versions/0.2.0/.pi/harnesses/minimal/README.md +27 -0
  75. package/.versions/0.2.0/.pi/harnesses/minimal/index.ts +32 -0
  76. package/.versions/0.2.0/.pi/harnesses/minimal/package.json +6 -0
  77. package/.versions/0.2.0/.pi/harnesses/package-lock.json +35 -0
  78. package/.versions/0.2.0/.pi/harnesses/package.json +9 -0
  79. package/.versions/0.2.0/.pi/harnesses/pi-pi/README.md +39 -0
  80. package/.versions/0.2.0/.pi/harnesses/pi-pi/index.ts +631 -0
  81. package/.versions/0.2.0/.pi/harnesses/pi-pi/package.json +6 -0
  82. package/.versions/0.2.0/.pi/harnesses/purpose-gate/README.md +27 -0
  83. package/.versions/0.2.0/.pi/harnesses/purpose-gate/index.ts +82 -0
  84. package/.versions/0.2.0/.pi/harnesses/purpose-gate/package.json +6 -0
  85. package/.versions/0.2.0/.pi/harnesses/session-replay/README.md +28 -0
  86. package/.versions/0.2.0/.pi/harnesses/session-replay/index.ts +214 -0
  87. package/.versions/0.2.0/.pi/harnesses/session-replay/package.json +6 -0
  88. package/.versions/0.2.0/.pi/harnesses/subagent-widget/README.md +36 -0
  89. package/.versions/0.2.0/.pi/harnesses/subagent-widget/index.ts +479 -0
  90. package/.versions/0.2.0/.pi/harnesses/subagent-widget/package.json +6 -0
  91. package/.versions/0.2.0/.pi/harnesses/system-select/README.md +39 -0
  92. package/.versions/0.2.0/.pi/harnesses/system-select/index.ts +165 -0
  93. package/.versions/0.2.0/.pi/harnesses/system-select/package.json +6 -0
  94. package/.versions/0.2.0/.pi/harnesses/tilldone/README.md +35 -0
  95. package/.versions/0.2.0/.pi/harnesses/tilldone/index.ts +724 -0
  96. package/.versions/0.2.0/.pi/harnesses/tilldone/package.json +6 -0
  97. package/.versions/0.2.0/.pi/harnesses/tool-counter/README.md +31 -0
  98. package/.versions/0.2.0/.pi/harnesses/tool-counter/index.ts +100 -0
  99. package/.versions/0.2.0/.pi/harnesses/tool-counter/package.json +6 -0
  100. package/.versions/0.2.0/.pi/harnesses/tool-counter-widget/README.md +27 -0
  101. package/.versions/0.2.0/.pi/harnesses/tool-counter-widget/index.ts +66 -0
  102. package/.versions/0.2.0/.pi/harnesses/tool-counter-widget/package.json +6 -0
  103. package/.versions/0.2.0/.pi/prompts/build.md +24 -0
  104. package/.versions/0.2.0/.pi/prompts/code-simplify.md +22 -0
  105. package/.versions/0.2.0/.pi/prompts/doctor-agent-skills.md +13 -0
  106. package/.versions/0.2.0/.pi/prompts/plan.md +16 -0
  107. package/.versions/0.2.0/.pi/prompts/review.md +16 -0
  108. package/.versions/0.2.0/.pi/prompts/setup-agent-skills.md +19 -0
  109. package/.versions/0.2.0/.pi/prompts/ship.md +17 -0
  110. package/.versions/0.2.0/.pi/prompts/spec.md +15 -0
  111. package/.versions/0.2.0/.pi/prompts/test.md +19 -0
  112. package/.versions/0.2.0/.pi/skills/bowser/SKILL.md +114 -0
  113. package/.versions/0.2.0/.version +1 -0
  114. package/.versions/0.2.0/agents/builder.md +6 -0
  115. package/.versions/0.2.0/agents/code-reviewer.md +93 -0
  116. package/.versions/0.2.0/agents/documenter.md +6 -0
  117. package/.versions/0.2.0/agents/plan-reviewer.md +22 -0
  118. package/.versions/0.2.0/agents/planner.md +6 -0
  119. package/.versions/0.2.0/agents/scout.md +6 -0
  120. package/.versions/0.2.0/agents/security-auditor.md +97 -0
  121. package/.versions/0.2.0/agents/test-engineer.md +89 -0
  122. package/.versions/0.2.0/hooks/SIMPLIFY-IGNORE.md +90 -0
  123. package/.versions/0.2.0/hooks/hooks.json +14 -0
  124. package/.versions/0.2.0/hooks/session-start.sh +74 -0
  125. package/.versions/0.2.0/hooks/simplify-ignore-test.sh +247 -0
  126. package/.versions/0.2.0/hooks/simplify-ignore.sh +302 -0
  127. package/.versions/0.2.0/references/accessibility-checklist.md +159 -0
  128. package/.versions/0.2.0/references/performance-checklist.md +121 -0
  129. package/.versions/0.2.0/references/prompting-patterns.md +380 -0
  130. package/.versions/0.2.0/references/security-checklist.md +134 -0
  131. package/.versions/0.2.0/references/testing-patterns.md +236 -0
  132. package/.versions/0.2.0/skills/api-and-interface-design/SKILL.md +294 -0
  133. package/.versions/0.2.0/skills/browser-testing-with-devtools/SKILL.md +335 -0
  134. package/.versions/0.2.0/skills/ci-cd-and-automation/SKILL.md +390 -0
  135. package/.versions/0.2.0/skills/code-review-and-quality/SKILL.md +347 -0
  136. package/.versions/0.2.0/skills/code-simplification/SKILL.md +331 -0
  137. package/.versions/0.2.0/skills/context-engineering/SKILL.md +291 -0
  138. package/.versions/0.2.0/skills/debugging-and-error-recovery/SKILL.md +300 -0
  139. package/.versions/0.2.0/skills/deprecation-and-migration/SKILL.md +206 -0
  140. package/.versions/0.2.0/skills/designing-agents/SKILL.md +394 -0
  141. package/.versions/0.2.0/skills/designing-agents/pi-harness-authoring.md +213 -0
  142. package/.versions/0.2.0/skills/documentation-and-adrs/SKILL.md +278 -0
  143. package/.versions/0.2.0/skills/frontend-ui-engineering/SKILL.md +322 -0
  144. package/.versions/0.2.0/skills/git-workflow-and-versioning/SKILL.md +316 -0
  145. package/.versions/0.2.0/skills/guided-workspace-setup/SKILL.md +331 -0
  146. package/.versions/0.2.0/skills/idea-refine/SKILL.md +178 -0
  147. package/.versions/0.2.0/skills/idea-refine/examples.md +238 -0
  148. package/.versions/0.2.0/skills/idea-refine/frameworks.md +99 -0
  149. package/.versions/0.2.0/skills/idea-refine/refinement-criteria.md +113 -0
  150. package/.versions/0.2.0/skills/idea-refine/scripts/idea-refine.sh +15 -0
  151. package/.versions/0.2.0/skills/incremental-implementation/SKILL.md +279 -0
  152. package/.versions/0.2.0/skills/performance-optimization/SKILL.md +350 -0
  153. package/.versions/0.2.0/skills/planning-and-task-breakdown/SKILL.md +237 -0
  154. package/.versions/0.2.0/skills/security-and-hardening/SKILL.md +349 -0
  155. package/.versions/0.2.0/skills/shipping-and-launch/SKILL.md +309 -0
  156. package/.versions/0.2.0/skills/source-driven-development/SKILL.md +194 -0
  157. package/.versions/0.2.0/skills/spec-driven-development/SKILL.md +237 -0
  158. package/.versions/0.2.0/skills/test-driven-development/SKILL.md +379 -0
  159. package/.versions/0.2.0/skills/using-agent-skills/SKILL.md +176 -0
  160. package/.versions/0.3.0/.claude/commands/build.md +18 -0
  161. package/.versions/0.3.0/.claude/commands/code-simplify.md +22 -0
  162. package/.versions/0.3.0/.claude/commands/design-agent.md +14 -0
  163. package/.versions/0.3.0/.claude/commands/doctor-agent-skills.md +13 -0
  164. package/.versions/0.3.0/.claude/commands/plan.md +16 -0
  165. package/.versions/0.3.0/.claude/commands/prime.md +22 -0
  166. package/.versions/0.3.0/.claude/commands/review.md +16 -0
  167. package/.versions/0.3.0/.claude/commands/setup-agent-skills.md +19 -0
  168. package/.versions/0.3.0/.claude/commands/ship.md +17 -0
  169. package/.versions/0.3.0/.claude/commands/spec.md +15 -0
  170. package/.versions/0.3.0/.claude/commands/test.md +19 -0
  171. package/.versions/0.3.0/.opencode/commands/as-build.md +17 -0
  172. package/.versions/0.3.0/.opencode/commands/as-code-simplify.md +16 -0
  173. package/.versions/0.3.0/.opencode/commands/as-design-agent.md +15 -0
  174. package/.versions/0.3.0/.opencode/commands/as-doctor-agent-skills.md +11 -0
  175. package/.versions/0.3.0/.opencode/commands/as-plan.md +16 -0
  176. package/.versions/0.3.0/.opencode/commands/as-prime.md +22 -0
  177. package/.versions/0.3.0/.opencode/commands/as-review.md +15 -0
  178. package/.versions/0.3.0/.opencode/commands/as-setup-agent-skills.md +11 -0
  179. package/.versions/0.3.0/.opencode/commands/as-ship.md +16 -0
  180. package/.versions/0.3.0/.opencode/commands/as-spec.md +16 -0
  181. package/.versions/0.3.0/.opencode/commands/as-test.md +21 -0
  182. package/.versions/0.3.0/.pi/agents/agent-chain.yaml +49 -0
  183. package/.versions/0.3.0/.pi/agents/bowser.md +19 -0
  184. package/.versions/0.3.0/.pi/agents/pi-pi/agent-expert.md +98 -0
  185. package/.versions/0.3.0/.pi/agents/pi-pi/cli-expert.md +41 -0
  186. package/.versions/0.3.0/.pi/agents/pi-pi/config-expert.md +63 -0
  187. package/.versions/0.3.0/.pi/agents/pi-pi/ext-expert.md +43 -0
  188. package/.versions/0.3.0/.pi/agents/pi-pi/keybinding-expert.md +134 -0
  189. package/.versions/0.3.0/.pi/agents/pi-pi/pi-orchestrator.md +57 -0
  190. package/.versions/0.3.0/.pi/agents/pi-pi/prompt-expert.md +70 -0
  191. package/.versions/0.3.0/.pi/agents/pi-pi/skill-expert.md +42 -0
  192. package/.versions/0.3.0/.pi/agents/pi-pi/theme-expert.md +40 -0
  193. package/.versions/0.3.0/.pi/agents/pi-pi/tui-expert.md +85 -0
  194. package/.versions/0.3.0/.pi/agents/teams.yaml +31 -0
  195. package/.versions/0.3.0/.pi/damage-control-rules.yaml +278 -0
  196. package/.versions/0.3.0/.pi/extensions/agent-skills-update-check/README.md +58 -0
  197. package/.versions/0.3.0/.pi/extensions/agent-skills-update-check/index.ts +161 -0
  198. package/.versions/0.3.0/.pi/extensions/agent-skills-update-check/package.json +6 -0
  199. package/.versions/0.3.0/.pi/extensions/chrome-devtools-mcp/README.md +39 -0
  200. package/.versions/0.3.0/.pi/extensions/chrome-devtools-mcp/index.ts +61 -0
  201. package/.versions/0.3.0/.pi/extensions/chrome-devtools-mcp/package.json +6 -0
  202. package/.versions/0.3.0/.pi/extensions/compact-and-continue/README.md +42 -0
  203. package/.versions/0.3.0/.pi/extensions/compact-and-continue/index.ts +120 -0
  204. package/.versions/0.3.0/.pi/extensions/compact-and-continue/package.json +6 -0
  205. package/.versions/0.3.0/.pi/extensions/mcp-bridge/README.md +46 -0
  206. package/.versions/0.3.0/.pi/extensions/mcp-bridge/index.ts +206 -0
  207. package/.versions/0.3.0/.pi/extensions/mcp-bridge/package.json +6 -0
  208. package/.versions/0.3.0/.pi/extensions/package-lock.json +1143 -0
  209. package/.versions/0.3.0/.pi/extensions/package.json +9 -0
  210. package/.versions/0.3.0/.pi/harnesses/agent-chain/README.md +37 -0
  211. package/.versions/0.3.0/.pi/harnesses/agent-chain/index.ts +795 -0
  212. package/.versions/0.3.0/.pi/harnesses/agent-chain/package.json +6 -0
  213. package/.versions/0.3.0/.pi/harnesses/agent-team/README.md +38 -0
  214. package/.versions/0.3.0/.pi/harnesses/agent-team/index.ts +732 -0
  215. package/.versions/0.3.0/.pi/harnesses/agent-team/package.json +6 -0
  216. package/.versions/0.3.0/.pi/harnesses/coms/README.md +36 -0
  217. package/.versions/0.3.0/.pi/harnesses/coms/index.ts +1595 -0
  218. package/.versions/0.3.0/.pi/harnesses/coms/package.json +6 -0
  219. package/.versions/0.3.0/.pi/harnesses/coms-net/README.md +46 -0
  220. package/.versions/0.3.0/.pi/harnesses/coms-net/index.ts +1637 -0
  221. package/.versions/0.3.0/.pi/harnesses/coms-net/package.json +6 -0
  222. package/.versions/0.3.0/.pi/harnesses/damage-control/README.md +38 -0
  223. package/.versions/0.3.0/.pi/harnesses/damage-control/index.ts +207 -0
  224. package/.versions/0.3.0/.pi/harnesses/damage-control/package.json +6 -0
  225. package/.versions/0.3.0/.pi/harnesses/damage-control-continue/README.md +37 -0
  226. package/.versions/0.3.0/.pi/harnesses/damage-control-continue/index.ts +234 -0
  227. package/.versions/0.3.0/.pi/harnesses/damage-control-continue/package.json +6 -0
  228. package/.versions/0.3.0/.pi/harnesses/minimal/README.md +27 -0
  229. package/.versions/0.3.0/.pi/harnesses/minimal/index.ts +32 -0
  230. package/.versions/0.3.0/.pi/harnesses/minimal/package.json +6 -0
  231. package/.versions/0.3.0/.pi/harnesses/package-lock.json +35 -0
  232. package/.versions/0.3.0/.pi/harnesses/package.json +9 -0
  233. package/.versions/0.3.0/.pi/harnesses/pi-pi/README.md +39 -0
  234. package/.versions/0.3.0/.pi/harnesses/pi-pi/index.ts +631 -0
  235. package/.versions/0.3.0/.pi/harnesses/pi-pi/package.json +6 -0
  236. package/.versions/0.3.0/.pi/harnesses/purpose-gate/README.md +27 -0
  237. package/.versions/0.3.0/.pi/harnesses/purpose-gate/index.ts +82 -0
  238. package/.versions/0.3.0/.pi/harnesses/purpose-gate/package.json +6 -0
  239. package/.versions/0.3.0/.pi/harnesses/session-replay/README.md +28 -0
  240. package/.versions/0.3.0/.pi/harnesses/session-replay/index.ts +214 -0
  241. package/.versions/0.3.0/.pi/harnesses/session-replay/package.json +6 -0
  242. package/.versions/0.3.0/.pi/harnesses/subagent-widget/README.md +36 -0
  243. package/.versions/0.3.0/.pi/harnesses/subagent-widget/index.ts +479 -0
  244. package/.versions/0.3.0/.pi/harnesses/subagent-widget/package.json +6 -0
  245. package/.versions/0.3.0/.pi/harnesses/system-select/README.md +39 -0
  246. package/.versions/0.3.0/.pi/harnesses/system-select/index.ts +165 -0
  247. package/.versions/0.3.0/.pi/harnesses/system-select/package.json +6 -0
  248. package/.versions/0.3.0/.pi/harnesses/tilldone/README.md +35 -0
  249. package/.versions/0.3.0/.pi/harnesses/tilldone/index.ts +724 -0
  250. package/.versions/0.3.0/.pi/harnesses/tilldone/package.json +6 -0
  251. package/.versions/0.3.0/.pi/harnesses/tool-counter/README.md +31 -0
  252. package/.versions/0.3.0/.pi/harnesses/tool-counter/index.ts +100 -0
  253. package/.versions/0.3.0/.pi/harnesses/tool-counter/package.json +6 -0
  254. package/.versions/0.3.0/.pi/harnesses/tool-counter-widget/README.md +27 -0
  255. package/.versions/0.3.0/.pi/harnesses/tool-counter-widget/index.ts +66 -0
  256. package/.versions/0.3.0/.pi/harnesses/tool-counter-widget/package.json +6 -0
  257. package/.versions/0.3.0/.pi/prompts/build.md +24 -0
  258. package/.versions/0.3.0/.pi/prompts/code-simplify.md +22 -0
  259. package/.versions/0.3.0/.pi/prompts/doctor-agent-skills.md +13 -0
  260. package/.versions/0.3.0/.pi/prompts/plan.md +16 -0
  261. package/.versions/0.3.0/.pi/prompts/review.md +16 -0
  262. package/.versions/0.3.0/.pi/prompts/setup-agent-skills.md +19 -0
  263. package/.versions/0.3.0/.pi/prompts/ship.md +17 -0
  264. package/.versions/0.3.0/.pi/prompts/spec.md +15 -0
  265. package/.versions/0.3.0/.pi/prompts/test.md +19 -0
  266. package/.versions/0.3.0/.pi/skills/bowser/SKILL.md +114 -0
  267. package/.versions/0.3.0/.version +1 -0
  268. package/.versions/0.3.0/agents/builder.md +6 -0
  269. package/.versions/0.3.0/agents/code-reviewer.md +93 -0
  270. package/.versions/0.3.0/agents/documenter.md +6 -0
  271. package/.versions/0.3.0/agents/plan-reviewer.md +22 -0
  272. package/.versions/0.3.0/agents/planner.md +6 -0
  273. package/.versions/0.3.0/agents/scout.md +6 -0
  274. package/.versions/0.3.0/agents/security-auditor.md +97 -0
  275. package/.versions/0.3.0/agents/test-engineer.md +89 -0
  276. package/.versions/0.3.0/hooks/SIMPLIFY-IGNORE.md +90 -0
  277. package/.versions/0.3.0/hooks/hooks.json +14 -0
  278. package/.versions/0.3.0/hooks/session-start.sh +74 -0
  279. package/.versions/0.3.0/hooks/simplify-ignore-test.sh +247 -0
  280. package/.versions/0.3.0/hooks/simplify-ignore.sh +302 -0
  281. package/.versions/0.3.0/references/accessibility-checklist.md +159 -0
  282. package/.versions/0.3.0/references/performance-checklist.md +121 -0
  283. package/.versions/0.3.0/references/prompting-patterns.md +380 -0
  284. package/.versions/0.3.0/references/security-checklist.md +134 -0
  285. package/.versions/0.3.0/references/testing-patterns.md +236 -0
  286. package/.versions/0.3.0/skills/api-and-interface-design/SKILL.md +294 -0
  287. package/.versions/0.3.0/skills/browser-testing-with-devtools/SKILL.md +335 -0
  288. package/.versions/0.3.0/skills/ci-cd-and-automation/SKILL.md +390 -0
  289. package/.versions/0.3.0/skills/code-review-and-quality/SKILL.md +347 -0
  290. package/.versions/0.3.0/skills/code-simplification/SKILL.md +331 -0
  291. package/.versions/0.3.0/skills/context-engineering/SKILL.md +291 -0
  292. package/.versions/0.3.0/skills/debugging-and-error-recovery/SKILL.md +300 -0
  293. package/.versions/0.3.0/skills/deprecation-and-migration/SKILL.md +206 -0
  294. package/.versions/0.3.0/skills/designing-agents/SKILL.md +394 -0
  295. package/.versions/0.3.0/skills/designing-agents/pi-harness-authoring.md +213 -0
  296. package/.versions/0.3.0/skills/documentation-and-adrs/SKILL.md +278 -0
  297. package/.versions/0.3.0/skills/frontend-ui-engineering/SKILL.md +322 -0
  298. package/.versions/0.3.0/skills/git-workflow-and-versioning/SKILL.md +316 -0
  299. package/.versions/0.3.0/skills/guided-workspace-setup/SKILL.md +331 -0
  300. package/.versions/0.3.0/skills/idea-refine/SKILL.md +178 -0
  301. package/.versions/0.3.0/skills/idea-refine/examples.md +238 -0
  302. package/.versions/0.3.0/skills/idea-refine/frameworks.md +99 -0
  303. package/.versions/0.3.0/skills/idea-refine/refinement-criteria.md +113 -0
  304. package/.versions/0.3.0/skills/idea-refine/scripts/idea-refine.sh +15 -0
  305. package/.versions/0.3.0/skills/incremental-implementation/SKILL.md +279 -0
  306. package/.versions/0.3.0/skills/performance-optimization/SKILL.md +350 -0
  307. package/.versions/0.3.0/skills/planning-and-task-breakdown/SKILL.md +237 -0
  308. package/.versions/0.3.0/skills/security-and-hardening/SKILL.md +349 -0
  309. package/.versions/0.3.0/skills/shipping-and-launch/SKILL.md +309 -0
  310. package/.versions/0.3.0/skills/source-driven-development/SKILL.md +194 -0
  311. package/.versions/0.3.0/skills/spec-driven-development/SKILL.md +237 -0
  312. package/.versions/0.3.0/skills/test-driven-development/SKILL.md +379 -0
  313. package/.versions/0.3.0/skills/using-agent-skills/SKILL.md +176 -0
  314. package/CHANGELOG.md +108 -0
  315. package/README.md +5 -5
  316. package/bin/cli.js +133 -22
  317. package/bin/lib/bootstrap.js +254 -0
  318. package/bin/lib/doctor.js +1 -1
  319. package/bin/lib/update-notifier.js +195 -0
  320. package/docs/getting-started.md +2 -2
  321. package/docs/npm-install.md +91 -8
  322. package/hooks/session-start.sh +66 -12
  323. package/package.json +1 -1
  324. package/skills/guided-workspace-setup/SKILL.md +41 -3
  325. /package/.claude/commands/{setup.md → setup-agent-skills.md} +0 -0
  326. /package/.opencode/commands/{as-doctor.md → as-doctor-agent-skills.md} +0 -0
  327. /package/.opencode/commands/{as-setup.md → as-setup-agent-skills.md} +0 -0
  328. /package/.pi/prompts/{setup.md → setup-agent-skills.md} +0 -0
@@ -0,0 +1,254 @@
1
+ // bootstrap.js — drop the minimum installer artifacts a coding agent needs
2
+ // to recognize `/setup-agent-skills` and `/doctor-agent-skills`.
3
+ //
4
+ // The CLI's `init` calls this before the handoff message. Without it, a
5
+ // fresh workspace has no `.claude/commands/setup-agent-skills.md`, `.pi/prompts/setup-agent-skills.md`,
6
+ // etc., so the agent has no idea what `/setup-agent-skills` is and the whole hand-off
7
+ // breaks silently.
8
+ //
9
+ // What we bootstrap (per agent):
10
+ // - The `setup` slash command (so the user can invoke it)
11
+ // - The `doctor` slash command (same)
12
+ // - The `guided-workspace-setup` skill body (the slash command says
13
+ // "load this skill" — the skill must be present somewhere the agent
14
+ // auto-discovers)
15
+ //
16
+ // What we do NOT bootstrap:
17
+ // - Any of the user-facing skills (spec-driven-development,
18
+ // test-driven-development, …). Those are picked by the user inside
19
+ // /setup-agent-skills, by design. The CLI never decides the workspace's catalogue
20
+ // for the user.
21
+ //
22
+ // Method:
23
+ // `copy` — safe default; works for npx caches that may be cleaned
24
+ // `symlink` — leaner; only safe when the source root is stable
25
+ // (global install / git clone). Warning printed if the
26
+ // source path looks like an npx cache.
27
+
28
+ import { existsSync, mkdirSync, copyFileSync, symlinkSync, unlinkSync, lstatSync, rmSync, readdirSync, rmdirSync } from "node:fs";
29
+ import { dirname, join, relative } from "node:path";
30
+
31
+ // (agent → list of {kind, src, dest}) — kind is just for the report.
32
+ //
33
+ // All installer slash commands are namespaced with `-agent-skills` so they
34
+ // don't collide with workspace-defined or other-tool slash commands. The
35
+ // short names (setup, doctor, as-setup, as-doctor) were used in 0.2.0 and
36
+ // earlier — cleanupLegacyNames() removes those if found.
37
+ function plan({ agent, sourceRoot, workspace }) {
38
+ const skillSrc = join(sourceRoot, "skills", "guided-workspace-setup", "SKILL.md");
39
+
40
+ switch (agent) {
41
+ case "claude-code":
42
+ return [
43
+ { kind: "command", src: join(sourceRoot, ".claude/commands/setup-agent-skills.md"),
44
+ dest: join(workspace, ".claude/commands/setup-agent-skills.md") },
45
+ { kind: "command", src: join(sourceRoot, ".claude/commands/doctor-agent-skills.md"),
46
+ dest: join(workspace, ".claude/commands/doctor-agent-skills.md") },
47
+ { kind: "skill", src: skillSrc,
48
+ dest: join(workspace, ".claude/skills/guided-workspace-setup/SKILL.md") },
49
+ ];
50
+
51
+ case "pi":
52
+ return [
53
+ { kind: "prompt", src: join(sourceRoot, ".pi/prompts/setup-agent-skills.md"),
54
+ dest: join(workspace, ".pi/prompts/setup-agent-skills.md") },
55
+ { kind: "prompt", src: join(sourceRoot, ".pi/prompts/doctor-agent-skills.md"),
56
+ dest: join(workspace, ".pi/prompts/doctor-agent-skills.md") },
57
+ // pi auto-discovers skills from .pi/skills/ and .agents/skills/ —
58
+ // we use .pi/skills/ to avoid polluting a shared .agents/ dir if
59
+ // the user has other tools there.
60
+ { kind: "skill", src: skillSrc,
61
+ dest: join(workspace, ".pi/skills/guided-workspace-setup/SKILL.md") },
62
+ ];
63
+
64
+ case "opencode":
65
+ // OpenCode discovers skills + commands from ~/.config/opencode/ (global)
66
+ // and references AGENTS.md. A project-local bootstrap is awkward — we
67
+ // drop the command file into .opencode/commands/ (which OpenCode does
68
+ // load from the project) and the skill alongside it, then flag the
69
+ // AGENTS.md gap for the user.
70
+ return [
71
+ { kind: "command", src: join(sourceRoot, ".opencode/commands/as-setup-agent-skills.md"),
72
+ dest: join(workspace, ".opencode/commands/as-setup-agent-skills.md") },
73
+ { kind: "command", src: join(sourceRoot, ".opencode/commands/as-doctor-agent-skills.md"),
74
+ dest: join(workspace, ".opencode/commands/as-doctor-agent-skills.md") },
75
+ { kind: "skill", src: skillSrc,
76
+ dest: join(workspace, ".opencode/skills/guided-workspace-setup/SKILL.md") },
77
+ ];
78
+
79
+ default:
80
+ throw new Error(`bootstrap: unknown agent "${agent}"`);
81
+ }
82
+ }
83
+
84
+ // Files that were the bootstrap targets in 0.2.0 and earlier (pre-rename).
85
+ // Removed during bootstrap so a workspace upgraded from 0.2.0 doesn't end
86
+ // up with both the old and new slash commands.
87
+ function legacyPaths({ agent, workspace }) {
88
+ switch (agent) {
89
+ case "claude-code":
90
+ return [
91
+ join(workspace, ".claude/commands/setup.md"),
92
+ join(workspace, ".claude/commands/doctor.md"),
93
+ ];
94
+ case "pi":
95
+ return [
96
+ join(workspace, ".pi/prompts/setup.md"),
97
+ join(workspace, ".pi/prompts/doctor.md"),
98
+ ];
99
+ case "opencode":
100
+ return [
101
+ join(workspace, ".opencode/commands/as-setup.md"),
102
+ join(workspace, ".opencode/commands/as-doctor.md"),
103
+ ];
104
+ default:
105
+ return [];
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Run the bootstrap.
111
+ *
112
+ * @param {object} opts
113
+ * @param {string} opts.agent claude-code | opencode | pi
114
+ * @param {string} opts.sourceRoot Absolute path to the installed package
115
+ * @param {string} opts.workspace Absolute path to the target workspace
116
+ * @param {"copy"|"symlink"} opts.method
117
+ * @param {boolean} [opts.dryRun]
118
+ * @returns {{written:Array, skipped:Array, warnings:Array}}
119
+ */
120
+ export function bootstrap({ agent, sourceRoot, workspace, method, dryRun = false }) {
121
+ const items = plan({ agent, sourceRoot, workspace });
122
+ const written = [], skipped = [], removed = [], warnings = [];
123
+
124
+ // Warn if the user asked for symlink against an unstable source.
125
+ if (method === "symlink" && /\/\.npm\/_npx\//.test(sourceRoot)) {
126
+ warnings.push(
127
+ "--method symlink against an npx cache path: links will break when " +
128
+ "the cache is cleaned. Consider --method copy or install globally " +
129
+ "with `npm install -g @chankov/agent-skills`.",
130
+ );
131
+ }
132
+
133
+ // Clean up pre-0.3.0 file names if present — they were renamed to
134
+ // *-agent-skills so they don't collide with other slash commands.
135
+ for (const oldPath of legacyPaths({ agent, workspace })) {
136
+ if (!existsSync(oldPath) && !isSymlink(oldPath)) continue;
137
+ if (dryRun) {
138
+ removed.push(oldPath);
139
+ continue;
140
+ }
141
+ try {
142
+ unlinkSync(oldPath);
143
+ removed.push(oldPath);
144
+ } catch (err) {
145
+ warnings.push(`could not remove legacy file ${relative(workspace, oldPath)}: ${err.message}`);
146
+ }
147
+ }
148
+
149
+ for (const item of items) {
150
+ if (!existsSync(item.src)) {
151
+ warnings.push(`missing source: ${relative(sourceRoot, item.src)} (skipping ${item.kind})`);
152
+ continue;
153
+ }
154
+
155
+ if (dryRun) {
156
+ written.push({ ...item, method });
157
+ continue;
158
+ }
159
+
160
+ try {
161
+ mkdirSync(dirname(item.dest), { recursive: true });
162
+
163
+ // Always replace — the bootstrap is installer scaffolding, not user
164
+ // data. If we left it stale, an upgraded package would still hand off
165
+ // to the old /setup-agent-skills command. Step 6 of guided-workspace-setup explicitly
166
+ // never offers these files in the install menu, so we are the only
167
+ // mechanism that refreshes them.
168
+ if (existsSync(item.dest) || isSymlink(item.dest)) {
169
+ unlinkSync(item.dest);
170
+ }
171
+
172
+ if (method === "symlink") {
173
+ symlinkSync(item.src, item.dest);
174
+ } else {
175
+ // copyFileSync handles plain files; for the SKILL.md case the source
176
+ // may have sibling support files in some skills — but
177
+ // guided-workspace-setup is a single-file skill, so copyFileSync is
178
+ // fine. Switch to cpSync if that ever changes.
179
+ copyFileSync(item.src, item.dest);
180
+ }
181
+ written.push({ ...item, method });
182
+ } catch (err) {
183
+ skipped.push({ ...item, error: err.message });
184
+ }
185
+ }
186
+
187
+ return { written, skipped, removed, warnings };
188
+ }
189
+
190
+ /**
191
+ * Remove every bootstrap artifact this module knows how to write. Called
192
+ * by guided-workspace-setup at the end of Step 10 unless the user chose
193
+ * to keep the installer commands. After cleanup, the only way back to
194
+ * /setup-agent-skills is to re-run `npx @chankov/agent-skills init`.
195
+ *
196
+ * The same `agent` value must be supplied that was used at bootstrap time —
197
+ * we don't have a tracking file, so we delete based on the plan map.
198
+ *
199
+ * @param {object} opts
200
+ * @param {string} opts.agent
201
+ * @param {string} opts.workspace
202
+ * @param {boolean} [opts.dryRun]
203
+ * @returns {{removed:string[], kept:string[], warnings:string[]}}
204
+ */
205
+ export function cleanupInstaller({ agent, workspace, dryRun = false }) {
206
+ const planned = plan({ agent, sourceRoot: workspace, workspace });
207
+ const removed = [], kept = [], warnings = [];
208
+
209
+ for (const item of planned) {
210
+ if (!existsSync(item.dest) && !isSymlink(item.dest)) {
211
+ kept.push(item.dest); // already gone — count it as a no-op, not an error
212
+ continue;
213
+ }
214
+ if (dryRun) {
215
+ removed.push(item.dest);
216
+ continue;
217
+ }
218
+ try {
219
+ const lst = lstatSync(item.dest);
220
+ if (lst.isDirectory() && !lst.isSymbolicLink()) {
221
+ rmSync(item.dest, { recursive: true });
222
+ } else {
223
+ unlinkSync(item.dest);
224
+ }
225
+ removed.push(item.dest);
226
+
227
+ // If we removed the only file in a parent directory we created
228
+ // (.claude/skills/guided-workspace-setup/), prune the directory too.
229
+ pruneEmptyDirsUpTo(dirname(item.dest), workspace);
230
+ } catch (err) {
231
+ warnings.push(`could not remove ${relative(workspace, item.dest)}: ${err.message}`);
232
+ }
233
+ }
234
+
235
+ return { removed, kept, warnings };
236
+ }
237
+
238
+ function pruneEmptyDirsUpTo(dir, workspace) {
239
+ // Walk upward removing empty parent dirs until we hit a non-empty one or
240
+ // the workspace root. Never delete the workspace itself.
241
+ try {
242
+ while (dir !== workspace && dir.startsWith(workspace)) {
243
+ const entries = readdirSync(dir);
244
+ if (entries.length > 0) return;
245
+ rmdirSync(dir);
246
+ dir = dirname(dir);
247
+ }
248
+ } catch { /* prune is best-effort */ }
249
+ }
250
+
251
+ function isSymlink(path) {
252
+ try { return lstatSync(path).isSymbolicLink(); }
253
+ catch { return false; }
254
+ }
package/bin/lib/doctor.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // Doctor scan — deterministic preflight extracted from
2
2
  // guided-workspace-setup Step 5. Both `agent-skills doctor` (CLI) and the
3
- // `/doctor` slash command call into this so behaviour cannot drift.
3
+ // `/doctor-agent-skills` slash command call into this so behaviour cannot drift.
4
4
  //
5
5
  // Two classes of findings:
6
6
  // 1. Broken symlinks — links whose source has been moved, renamed, or deleted
@@ -0,0 +1,195 @@
1
+ // update-notifier — zero-dependency check for newer versions on the npm
2
+ // registry, shared by the CLI, the Claude Code session hook, and the pi
3
+ // extension.
4
+ //
5
+ // Behaviour:
6
+ // - Cache lives at $XDG_CACHE_HOME/agent-skills/latest-version.json
7
+ // (falls back to ~/.cache/agent-skills/) with a 24h TTL.
8
+ // - The CLI invokes checkAndNotify() at the top of every command. If the
9
+ // cache is fresh and shows an upgrade, we print a banner immediately.
10
+ // If the cache is stale or absent, we start a background fetch (detached,
11
+ // non-blocking) and use whatever we have right now.
12
+ // - Network failures, JSON parse errors, and missing cache files are all
13
+ // swallowed silently — update checks must NEVER block the CLI or break
14
+ // a hook.
15
+ // - Opt-out: AGENT_SKILLS_NO_UPDATE_CHECK=1 in the environment disables
16
+ // everything in this module.
17
+
18
+ import { mkdirSync, readFileSync, writeFileSync, existsSync } from "node:fs";
19
+ import { homedir } from "node:os";
20
+ import { join } from "node:path";
21
+ import { request } from "node:https";
22
+ import { spawn } from "node:child_process";
23
+ import { fileURLToPath } from "node:url";
24
+
25
+ const PACKAGE_NAME = "@chankov/agent-skills";
26
+ const REGISTRY = "https://registry.npmjs.org";
27
+ const TTL_MS = 24 * 60 * 60 * 1000;
28
+
29
+ const CACHE_DIR = join(
30
+ process.env.XDG_CACHE_HOME || join(homedir(), ".cache"),
31
+ "agent-skills",
32
+ );
33
+ const CACHE_FILE = join(CACHE_DIR, "latest-version.json");
34
+
35
+ // ── Public surface ───────────────────────────────────────────────────────
36
+
37
+ /**
38
+ * Run the standard check + banner flow used by the CLI.
39
+ *
40
+ * @param {string} currentVersion The version of the running CLI
41
+ * @param {object} [opts]
42
+ * @param {boolean} [opts.silent] If true, return the banner string instead of printing
43
+ * @returns {string|null} The banner that would be (or was) printed
44
+ */
45
+ export function checkAndNotify(currentVersion, opts = {}) {
46
+ if (isDisabled()) return null;
47
+
48
+ const cached = readCache();
49
+ const fresh = cached && Date.now() - cached.checkedAt < TTL_MS;
50
+
51
+ if (!fresh) startBackgroundFetch();
52
+
53
+ const latest = cached?.latest;
54
+ if (!latest || !gt(latest, currentVersion)) return null;
55
+
56
+ const banner = formatBanner(currentVersion, latest);
57
+ if (!opts.silent) process.stderr.write(banner + "\n");
58
+ return banner;
59
+ }
60
+
61
+ /**
62
+ * Synchronously fetch the latest version, write the cache, and return it.
63
+ * Used by the standalone check-update entry point (hooks block on this
64
+ * intentionally — they need the answer before the session continues).
65
+ *
66
+ * @param {number} [timeoutMs] Default 2000ms — hooks must not stall the UI
67
+ * @returns {Promise<string|null>}
68
+ */
69
+ export async function fetchLatestSync(timeoutMs = 2000) {
70
+ if (isDisabled()) return null;
71
+ try {
72
+ const latest = await fetchLatest(timeoutMs);
73
+ writeCache({ latest, checkedAt: Date.now() });
74
+ return latest;
75
+ } catch {
76
+ return null;
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Read the cached latest version without touching the network. Hook scripts
82
+ * use this on the fast path — if the cache is fresh, no fetch is needed.
83
+ *
84
+ * @returns {{latest:string, checkedAt:number, stale:boolean}|null}
85
+ */
86
+ export function readCacheStatus() {
87
+ const c = readCache();
88
+ if (!c) return null;
89
+ return { ...c, stale: Date.now() - c.checkedAt >= TTL_MS };
90
+ }
91
+
92
+ export function formatBanner(current, latest) {
93
+ const lines = [
94
+ `agent-skills update available: ${current} → ${latest}`,
95
+ ` Run: npx ${PACKAGE_NAME}@latest update`,
96
+ ` Releases: https://github.com/chankov/agent-skills/releases`,
97
+ ];
98
+ const w = Math.max(...lines.map((l) => l.length)) + 2;
99
+ const bar = "─".repeat(w);
100
+ return [
101
+ `┌${bar}┐`,
102
+ ...lines.map((l) => `│ ${l.padEnd(w - 1)}│`),
103
+ `└${bar}┘`,
104
+ ].join("\n");
105
+ }
106
+
107
+ // ── Internals ────────────────────────────────────────────────────────────
108
+
109
+ function isDisabled() {
110
+ return process.env.AGENT_SKILLS_NO_UPDATE_CHECK === "1"
111
+ || process.env.CI === "true" // never spam CI logs
112
+ || process.env.NO_UPDATE_NOTIFIER === "1"; // honour the common convention
113
+ }
114
+
115
+ function readCache() {
116
+ try {
117
+ if (!existsSync(CACHE_FILE)) return null;
118
+ return JSON.parse(readFileSync(CACHE_FILE, "utf8"));
119
+ } catch {
120
+ return null;
121
+ }
122
+ }
123
+
124
+ function writeCache(payload) {
125
+ try {
126
+ mkdirSync(CACHE_DIR, { recursive: true });
127
+ writeFileSync(CACHE_FILE, JSON.stringify(payload, null, 2), "utf8");
128
+ } catch {
129
+ // Read-only home dir, full disk, etc. — caching is best-effort.
130
+ }
131
+ }
132
+
133
+ function fetchLatest(timeoutMs) {
134
+ return new Promise((resolve, reject) => {
135
+ const url = `${REGISTRY}/${encodeURIComponent(PACKAGE_NAME).replace("%40", "@")}/latest`;
136
+ const req = request(url, { method: "GET", headers: { accept: "application/json" } }, (res) => {
137
+ if (res.statusCode !== 200) {
138
+ reject(new Error(`registry returned ${res.statusCode}`));
139
+ res.resume();
140
+ return;
141
+ }
142
+ let body = "";
143
+ res.setEncoding("utf8");
144
+ res.on("data", (chunk) => { body += chunk; });
145
+ res.on("end", () => {
146
+ try {
147
+ const parsed = JSON.parse(body);
148
+ if (typeof parsed.version !== "string") throw new Error("missing version field");
149
+ resolve(parsed.version);
150
+ } catch (err) { reject(err); }
151
+ });
152
+ });
153
+ req.on("error", reject);
154
+ req.setTimeout(timeoutMs, () => {
155
+ req.destroy(new Error("timeout"));
156
+ });
157
+ req.end();
158
+ });
159
+ }
160
+
161
+ function startBackgroundFetch() {
162
+ // Detached worker: never blocks the CLI, never inherits stdio.
163
+ // We re-enter this module via dynamic import in a fresh node process and
164
+ // run fetchLatestSync there — keeps the parent CLI exit unaffected.
165
+ try {
166
+ const modPath = fileURLToPath(import.meta.url);
167
+ const child = spawn(process.execPath, [
168
+ "-e",
169
+ `import(${JSON.stringify(modPath)}).then(m => m.fetchLatestSync(8000)).catch(() => {})`,
170
+ ], { detached: true, stdio: "ignore" });
171
+ child.unref();
172
+ } catch {
173
+ // If spawn fails (e.g. restricted env), skip — the next CLI run will retry.
174
+ }
175
+ }
176
+
177
+ // ── Tiny semver-gt comparator ────────────────────────────────────────────
178
+ // Enough for X.Y.Z comparisons; anything pre-release falls back to string
179
+ // compare on the suffix, which is good enough for "is the user behind?"
180
+
181
+ export function gt(a, b) {
182
+ const [aMain, aPre = ""] = a.split("-", 2);
183
+ const [bMain, bPre = ""] = b.split("-", 2);
184
+ const aParts = aMain.split(".").map(Number);
185
+ const bParts = bMain.split(".").map(Number);
186
+ for (let i = 0; i < 3; i++) {
187
+ const ai = aParts[i] ?? 0;
188
+ const bi = bParts[i] ?? 0;
189
+ if (ai !== bi) return ai > bi;
190
+ }
191
+ // Equal main versions: a release (no prerelease) outranks a prerelease.
192
+ if (!aPre && bPre) return true;
193
+ if (aPre && !bPre) return false;
194
+ return aPre > bPre;
195
+ }
@@ -14,7 +14,7 @@ Each skill is a Markdown file (`SKILL.md`) that describes a specific engineering
14
14
  |---|---|---|
15
15
  | **Most users** — you want to use the skills in your projects | `npx @chankov/agent-skills init` | One command; semver updates; cross-platform; no source dir to babysit. See [docs/npm-install.md](npm-install.md). |
16
16
  | **Claude Code users** — you live in Claude Code and want plugin-managed updates | `/plugin marketplace add chankov/agent-skills` | Best UX inside Claude Code; marketplace handles the lifecycle. |
17
- | **Skill authors / contributors** — you want to edit the skills and have changes flow into every connected workspace | `git clone` + `symlink` mode in `/setup` | Edit-in-place; every connected workspace sees the change instantly. |
17
+ | **Skill authors / contributors** — you want to edit the skills and have changes flow into every connected workspace | `git clone` + `symlink` mode in `/setup-agent-skills` | Edit-in-place; every connected workspace sees the change instantly. |
18
18
 
19
19
  All three converge on the same `guided-workspace-setup` skill — they only differ in how the source files reach your workspace. None is being deprecated.
20
20
 
@@ -124,7 +124,7 @@ The `.claude/commands/` directory contains slash commands for Claude Code:
124
124
 
125
125
  | Command | Skill Invoked |
126
126
  |---------|---------------|
127
- | `/setup` | guided-workspace-setup |
127
+ | `/setup-agent-skills` | guided-workspace-setup |
128
128
  | `/spec` | spec-driven-development |
129
129
  | `/plan` | planning-and-task-breakdown |
130
130
  | `/build` | incremental-implementation + test-driven-development |
@@ -31,18 +31,41 @@ So:
31
31
  # In the workspace you want to configure:
32
32
  npx @chankov/agent-skills init
33
33
  # Then open your coding agent in this directory and run:
34
- # /setup
34
+ # /setup-agent-skills
35
35
  ```
36
36
 
37
37
  That's it. `npx` fetches the package, the CLI detects your coding agent and
38
- prints the next-step command, and `/setup` runs the full guided install
38
+ prints the next-step command, and `/setup-agent-skills` runs the full guided install
39
39
  inside your agent.
40
40
 
41
41
  ## Commands
42
42
 
43
43
  ### `npx @chankov/agent-skills init`
44
44
 
45
- Materializes the package and hands off to `/setup`.
45
+ Materializes the package, **bootstraps the installer artifacts** into the
46
+ workspace (so the agent has a `/setup-agent-skills` and `/doctor-agent-skills` command to invoke),
47
+ and hands off to `/setup-agent-skills`.
48
+
49
+ What `init` writes per agent:
50
+
51
+ | Agent | Files written to the workspace |
52
+ |---|---|
53
+ | `claude-code` | `.claude/commands/setup-agent-skills.md`, `.claude/commands/doctor-agent-skills.md`, `.claude/skills/guided-workspace-setup/SKILL.md` |
54
+ | `pi` | `.pi/prompts/setup-agent-skills.md`, `.pi/prompts/doctor-agent-skills.md`, `.pi/skills/guided-workspace-setup/SKILL.md` |
55
+ | `opencode` | `.opencode/commands/as-setup-agent-skills.md`, `.opencode/commands/as-doctor-agent-skills.md`, `.opencode/skills/guided-workspace-setup/SKILL.md` |
56
+
57
+ These are **just the plumbing** — the slash commands, plus the skill they
58
+ invoke. The actual catalogue (spec-driven-development, code-reviewer,
59
+ test-engineer, pi extensions, …) is picked by you inside `/setup-agent-skills`. Re-run
60
+ `init` to refresh the plumbing after a package upgrade; bootstrap files
61
+ are always overwritten because they're scaffolding, not user data.
62
+
63
+ After `/setup-agent-skills` finishes its install pass, **the bootstrap files
64
+ are removed by default** so they don't clutter your agent's slash-command
65
+ list. Re-run `npx @chankov/agent-skills init` whenever you want
66
+ `/setup-agent-skills` back. To keep them in place across runs, reply `keep`
67
+ to the Step 9 confirmation prompt — the skill will record
68
+ `keep-installer: true` in `.ai/agent-skills-setup.md`.
46
69
 
47
70
  | Flag | Default | Purpose |
48
71
  |------|---------|---------|
@@ -60,7 +83,7 @@ npx @chankov/agent-skills init --workspace ~/projects/foo --method symlink
60
83
 
61
84
  Deterministic preflight scan — walks every install-target directory, lists
62
85
  broken symlinks and stale persona references, and offers fixes. Same scan
63
- that `/doctor` runs inside the agent.
86
+ that `/doctor-agent-skills` runs inside the agent.
64
87
 
65
88
  | Flag | Default | Purpose |
66
89
  |------|---------|---------|
@@ -78,13 +101,13 @@ npx @chankov/agent-skills doctor -y
78
101
  Reads the workspace's `.ai/agent-skills-setup.md`, compares the recorded
79
102
  package version against the installed package version, and prints the next
80
103
  step. The actual diff-aware refresh runs inside the coding agent via
81
- `/setup`.
104
+ `/setup-agent-skills`.
82
105
 
83
106
  ```bash
84
107
  # Upgrade the package itself first, then check the delta:
85
108
  npm install -g @chankov/agent-skills@latest
86
109
  npx agent-skills update --workspace .
87
- # Then open your agent and run /setup to review per-artifact diffs.
110
+ # Then open your agent and run /setup-agent-skills to review per-artifact diffs.
88
111
  ```
89
112
 
90
113
  ## Versioning
@@ -137,7 +160,7 @@ npm is the recommended path for most users. The other two stay supported:
137
160
  - **[Claude Code plugin marketplace](../README.md#quick-start)** — best UX
138
161
  inside Claude Code. Same skills, marketplace-managed updates.
139
162
  - **Git clone + symlinks** — best for skill authors and contributors. Clone
140
- the repo, run `/setup` from there, choose `symlink` in Step 8. Updates
163
+ the repo, run `/setup-agent-skills` from there, choose `symlink` in Step 8. Updates
141
164
  flow through `git pull`. Symlinks need Developer Mode on Windows.
142
165
 
143
166
  All three paths converge on the same `guided-workspace-setup` skill — the
@@ -153,9 +176,69 @@ npx --yes @chankov/agent-skills@latest init --agent claude-code --method copy --
153
176
  ```
154
177
 
155
178
  `doctor` accepts `--yes` for non-interactive repair. Note that the
156
- LLM-driven `/setup` flow is not CI-runnable by design — confirmation gates
179
+ LLM-driven `/setup-agent-skills` flow is not CI-runnable by design — confirmation gates
157
180
  exist precisely so a human approves every write.
158
181
 
182
+ ## Receiving update notifications
183
+
184
+ Three independent mechanisms surface "a new version is published" without
185
+ you having to remember to check. All three share a single cache at
186
+ `$XDG_CACHE_HOME/agent-skills/latest-version.json` (24h TTL) so the
187
+ registry is hit at most once per day.
188
+
189
+ ### 1. CLI update-notifier (always on)
190
+
191
+ Every `npx @chankov/agent-skills <cmd>` invocation runs a fast cache read
192
+ on entry. If the cached latest version exceeds the running CLI version, a
193
+ banner prints to stderr before the command output:
194
+
195
+ ```
196
+ ┌──────────────────────────────────────────────────────────────┐
197
+ │ agent-skills update available: 0.1.0 → 0.2.0 │
198
+ │ Run: npx @chankov/agent-skills@latest update │
199
+ │ Releases: https://github.com/chankov/agent-skills/releases │
200
+ └──────────────────────────────────────────────────────────────┘
201
+ ```
202
+
203
+ If the cache is stale, a detached background process refreshes it for the
204
+ *next* invocation — the current run is never blocked.
205
+
206
+ ### 2. Claude Code session-start hook
207
+
208
+ When `hooks/session-start.sh` is installed (offered in Group 18 of `/setup-agent-skills`),
209
+ every new Claude Code session runs the check with a 3-second wall-clock cap.
210
+ If an upgrade is available, the banner is injected into the session context
211
+ so Claude can mention it on its first turn — e.g. *"Note: agent-skills 0.2.0
212
+ is available; want me to apply it via `/setup-agent-skills`?"*
213
+
214
+ ### 3. pi extension (`agent-skills-update-check`)
215
+
216
+ When installed (offered in Group 10 of `/setup-agent-skills`), the extension fires on the
217
+ first `agent_start` event of each pi session and emits a `ctx.ui.notify`
218
+ message in the pi UI if a newer version is published. Reads the same cache
219
+ as the CLI — no double-fetching.
220
+
221
+ ### Opting out
222
+
223
+ Any of these environment variables disables all three:
224
+
225
+ ```bash
226
+ export AGENT_SKILLS_NO_UPDATE_CHECK=1 # agent-skills-specific
227
+ export NO_UPDATE_NOTIFIER=1 # conventional, also honoured
228
+ # CI=true is auto-detected — banners never appear in CI logs
229
+ ```
230
+
231
+ ### Forcing a manual check
232
+
233
+ ```bash
234
+ # Block on a single registry fetch; print the banner if outdated
235
+ npx @chankov/agent-skills check-update
236
+
237
+ # Bypass the cache entirely
238
+ rm ~/.cache/agent-skills/latest-version.json
239
+ npx @chankov/agent-skills check-update
240
+ ```
241
+
159
242
  ## Troubleshooting
160
243
 
161
244
  - **"Could not auto-detect your coding agent."** Pass `--agent` or run