@pennyfarthing/core 6.6.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 (599) hide show
  1. package/README.md +293 -0
  2. package/package.json +58 -0
  3. package/packages/core/bin/pennyfarthing.js +14 -0
  4. package/packages/core/dist/bmad/context-reader.d.ts +71 -0
  5. package/packages/core/dist/bmad/context-reader.d.ts.map +1 -0
  6. package/packages/core/dist/bmad/context-reader.js +369 -0
  7. package/packages/core/dist/bmad/context-reader.js.map +1 -0
  8. package/packages/core/dist/bmad/context-reader.test.d.ts +71 -0
  9. package/packages/core/dist/bmad/context-reader.test.d.ts.map +1 -0
  10. package/packages/core/dist/bmad/context-reader.test.js +878 -0
  11. package/packages/core/dist/bmad/context-reader.test.js.map +1 -0
  12. package/packages/core/dist/bmad/epics-parser.d.ts +61 -0
  13. package/packages/core/dist/bmad/epics-parser.d.ts.map +1 -0
  14. package/packages/core/dist/bmad/epics-parser.js +331 -0
  15. package/packages/core/dist/bmad/epics-parser.js.map +1 -0
  16. package/packages/core/dist/bmad/epics-parser.test.d.ts +7 -0
  17. package/packages/core/dist/bmad/epics-parser.test.d.ts.map +1 -0
  18. package/packages/core/dist/bmad/epics-parser.test.js +449 -0
  19. package/packages/core/dist/bmad/epics-parser.test.js.map +1 -0
  20. package/packages/core/dist/bmad/index.d.ts +11 -0
  21. package/packages/core/dist/bmad/index.d.ts.map +1 -0
  22. package/packages/core/dist/bmad/index.js +24 -0
  23. package/packages/core/dist/bmad/index.js.map +1 -0
  24. package/packages/core/dist/bmad/status-sync.d.ts +173 -0
  25. package/packages/core/dist/bmad/status-sync.d.ts.map +1 -0
  26. package/packages/core/dist/bmad/status-sync.js +463 -0
  27. package/packages/core/dist/bmad/status-sync.js.map +1 -0
  28. package/packages/core/dist/bmad/status-sync.test.d.ts +7 -0
  29. package/packages/core/dist/bmad/status-sync.test.d.ts.map +1 -0
  30. package/packages/core/dist/bmad/status-sync.test.js +702 -0
  31. package/packages/core/dist/bmad/status-sync.test.js.map +1 -0
  32. package/packages/core/dist/bmad/story-exporter.d.ts +55 -0
  33. package/packages/core/dist/bmad/story-exporter.d.ts.map +1 -0
  34. package/packages/core/dist/bmad/story-exporter.js +170 -0
  35. package/packages/core/dist/bmad/story-exporter.js.map +1 -0
  36. package/packages/core/dist/bmad/story-exporter.test.d.ts +51 -0
  37. package/packages/core/dist/bmad/story-exporter.test.d.ts.map +1 -0
  38. package/packages/core/dist/bmad/story-exporter.test.js +603 -0
  39. package/packages/core/dist/bmad/story-exporter.test.js.map +1 -0
  40. package/packages/core/dist/bmad/story-parser.d.ts +44 -0
  41. package/packages/core/dist/bmad/story-parser.d.ts.map +1 -0
  42. package/packages/core/dist/bmad/story-parser.js +307 -0
  43. package/packages/core/dist/bmad/story-parser.js.map +1 -0
  44. package/packages/core/dist/bmad/story-parser.test.d.ts +44 -0
  45. package/packages/core/dist/bmad/story-parser.test.d.ts.map +1 -0
  46. package/packages/core/dist/bmad/story-parser.test.js +693 -0
  47. package/packages/core/dist/bmad/story-parser.test.js.map +1 -0
  48. package/packages/core/dist/cli/commands/command.d.ts +28 -0
  49. package/packages/core/dist/cli/commands/command.d.ts.map +1 -0
  50. package/packages/core/dist/cli/commands/command.js +399 -0
  51. package/packages/core/dist/cli/commands/command.js.map +1 -0
  52. package/packages/core/dist/cli/commands/cyclist.d.ts +46 -0
  53. package/packages/core/dist/cli/commands/cyclist.d.ts.map +1 -0
  54. package/packages/core/dist/cli/commands/cyclist.js +191 -0
  55. package/packages/core/dist/cli/commands/cyclist.js.map +1 -0
  56. package/packages/core/dist/cli/commands/cyclist.test.d.ts +13 -0
  57. package/packages/core/dist/cli/commands/cyclist.test.d.ts.map +1 -0
  58. package/packages/core/dist/cli/commands/cyclist.test.js +243 -0
  59. package/packages/core/dist/cli/commands/cyclist.test.js.map +1 -0
  60. package/packages/core/dist/cli/commands/doctor.d.ts +9 -0
  61. package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -0
  62. package/packages/core/dist/cli/commands/doctor.js +652 -0
  63. package/packages/core/dist/cli/commands/doctor.js.map +1 -0
  64. package/packages/core/dist/cli/commands/init.d.ts +8 -0
  65. package/packages/core/dist/cli/commands/init.d.ts.map +1 -0
  66. package/packages/core/dist/cli/commands/init.js +524 -0
  67. package/packages/core/dist/cli/commands/init.js.map +1 -0
  68. package/packages/core/dist/cli/commands/skill.d.ts +28 -0
  69. package/packages/core/dist/cli/commands/skill.d.ts.map +1 -0
  70. package/packages/core/dist/cli/commands/skill.js +416 -0
  71. package/packages/core/dist/cli/commands/skill.js.map +1 -0
  72. package/packages/core/dist/cli/commands/theme.d.ts +21 -0
  73. package/packages/core/dist/cli/commands/theme.d.ts.map +1 -0
  74. package/packages/core/dist/cli/commands/theme.js +201 -0
  75. package/packages/core/dist/cli/commands/theme.js.map +1 -0
  76. package/packages/core/dist/cli/commands/uninstall.d.ts +8 -0
  77. package/packages/core/dist/cli/commands/uninstall.d.ts.map +1 -0
  78. package/packages/core/dist/cli/commands/uninstall.js +237 -0
  79. package/packages/core/dist/cli/commands/uninstall.js.map +1 -0
  80. package/packages/core/dist/cli/commands/update.d.ts +9 -0
  81. package/packages/core/dist/cli/commands/update.d.ts.map +1 -0
  82. package/packages/core/dist/cli/commands/update.js +545 -0
  83. package/packages/core/dist/cli/commands/update.js.map +1 -0
  84. package/packages/core/dist/cli/commands/version.d.ts +2 -0
  85. package/packages/core/dist/cli/commands/version.d.ts.map +1 -0
  86. package/packages/core/dist/cli/commands/version.js +28 -0
  87. package/packages/core/dist/cli/commands/version.js.map +1 -0
  88. package/packages/core/dist/cli/customization.test.d.ts +12 -0
  89. package/packages/core/dist/cli/customization.test.d.ts.map +1 -0
  90. package/packages/core/dist/cli/customization.test.js +84 -0
  91. package/packages/core/dist/cli/customization.test.js.map +1 -0
  92. package/packages/core/dist/cli/cyclist-migration.test.d.ts +16 -0
  93. package/packages/core/dist/cli/cyclist-migration.test.d.ts.map +1 -0
  94. package/packages/core/dist/cli/cyclist-migration.test.js +224 -0
  95. package/packages/core/dist/cli/cyclist-migration.test.js.map +1 -0
  96. package/packages/core/dist/cli/index.d.ts +3 -0
  97. package/packages/core/dist/cli/index.d.ts.map +1 -0
  98. package/packages/core/dist/cli/index.js +174 -0
  99. package/packages/core/dist/cli/index.js.map +1 -0
  100. package/packages/core/dist/cli/ocean-profiles.test.d.ts +13 -0
  101. package/packages/core/dist/cli/ocean-profiles.test.d.ts.map +1 -0
  102. package/packages/core/dist/cli/ocean-profiles.test.js +134 -0
  103. package/packages/core/dist/cli/ocean-profiles.test.js.map +1 -0
  104. package/packages/core/dist/cli/theme-maker.test.d.ts +11 -0
  105. package/packages/core/dist/cli/theme-maker.test.d.ts.map +1 -0
  106. package/packages/core/dist/cli/theme-maker.test.js +356 -0
  107. package/packages/core/dist/cli/theme-maker.test.js.map +1 -0
  108. package/packages/core/dist/cli/utils/constants.d.ts +60 -0
  109. package/packages/core/dist/cli/utils/constants.d.ts.map +1 -0
  110. package/packages/core/dist/cli/utils/constants.js +52 -0
  111. package/packages/core/dist/cli/utils/constants.js.map +1 -0
  112. package/packages/core/dist/cli/utils/files.d.ts +71 -0
  113. package/packages/core/dist/cli/utils/files.d.ts.map +1 -0
  114. package/packages/core/dist/cli/utils/files.js +162 -0
  115. package/packages/core/dist/cli/utils/files.js.map +1 -0
  116. package/packages/core/dist/cli/utils/logger.d.ts +26 -0
  117. package/packages/core/dist/cli/utils/logger.d.ts.map +1 -0
  118. package/packages/core/dist/cli/utils/logger.js +88 -0
  119. package/packages/core/dist/cli/utils/logger.js.map +1 -0
  120. package/packages/core/dist/cli/utils/manifest.d.ts +47 -0
  121. package/packages/core/dist/cli/utils/manifest.d.ts.map +1 -0
  122. package/packages/core/dist/cli/utils/manifest.js +90 -0
  123. package/packages/core/dist/cli/utils/manifest.js.map +1 -0
  124. package/packages/core/dist/cli/utils/node-modules.d.ts +6 -0
  125. package/packages/core/dist/cli/utils/node-modules.d.ts.map +1 -0
  126. package/packages/core/dist/cli/utils/node-modules.js +22 -0
  127. package/packages/core/dist/cli/utils/node-modules.js.map +1 -0
  128. package/packages/core/dist/cli/utils/prompts.d.ts +34 -0
  129. package/packages/core/dist/cli/utils/prompts.d.ts.map +1 -0
  130. package/packages/core/dist/cli/utils/prompts.js +93 -0
  131. package/packages/core/dist/cli/utils/prompts.js.map +1 -0
  132. package/packages/core/dist/cli/utils/symlinks.d.ts +29 -0
  133. package/packages/core/dist/cli/utils/symlinks.d.ts.map +1 -0
  134. package/packages/core/dist/cli/utils/symlinks.js +181 -0
  135. package/packages/core/dist/cli/utils/symlinks.js.map +1 -0
  136. package/packages/core/dist/cli/utils/themes.d.ts +104 -0
  137. package/packages/core/dist/cli/utils/themes.d.ts.map +1 -0
  138. package/packages/core/dist/cli/utils/themes.js +393 -0
  139. package/packages/core/dist/cli/utils/themes.js.map +1 -0
  140. package/packages/core/dist/cli/utils/themes.test.d.ts +12 -0
  141. package/packages/core/dist/cli/utils/themes.test.d.ts.map +1 -0
  142. package/packages/core/dist/cli/utils/themes.test.js +144 -0
  143. package/packages/core/dist/cli/utils/themes.test.js.map +1 -0
  144. package/packages/core/dist/cli/utils/version.d.ts +10 -0
  145. package/packages/core/dist/cli/utils/version.d.ts.map +1 -0
  146. package/packages/core/dist/cli/utils/version.js +63 -0
  147. package/packages/core/dist/cli/utils/version.js.map +1 -0
  148. package/packages/core/dist/cli/workspace.test.d.ts +8 -0
  149. package/packages/core/dist/cli/workspace.test.d.ts.map +1 -0
  150. package/packages/core/dist/cli/workspace.test.js +154 -0
  151. package/packages/core/dist/cli/workspace.test.js.map +1 -0
  152. package/packages/core/dist/index.d.ts +6 -0
  153. package/packages/core/dist/index.d.ts.map +1 -0
  154. package/packages/core/dist/index.js +10 -0
  155. package/packages/core/dist/index.js.map +1 -0
  156. package/packages/core/dist/permissions/index.d.ts +9 -0
  157. package/packages/core/dist/permissions/index.d.ts.map +1 -0
  158. package/packages/core/dist/permissions/index.js +13 -0
  159. package/packages/core/dist/permissions/index.js.map +1 -0
  160. package/packages/core/dist/permissions/permission-schema.d.ts +89 -0
  161. package/packages/core/dist/permissions/permission-schema.d.ts.map +1 -0
  162. package/packages/core/dist/permissions/permission-schema.js +120 -0
  163. package/packages/core/dist/permissions/permission-schema.js.map +1 -0
  164. package/packages/core/dist/permissions/permission-schema.test.d.ts +40 -0
  165. package/packages/core/dist/permissions/permission-schema.test.d.ts.map +1 -0
  166. package/packages/core/dist/permissions/permission-schema.test.js +367 -0
  167. package/packages/core/dist/permissions/permission-schema.test.js.map +1 -0
  168. package/packages/core/dist/scripts/add-ocean-profiles.d.ts +9 -0
  169. package/packages/core/dist/scripts/add-ocean-profiles.d.ts.map +1 -0
  170. package/packages/core/dist/scripts/add-ocean-profiles.js +695 -0
  171. package/packages/core/dist/scripts/add-ocean-profiles.js.map +1 -0
  172. package/packages/core/dist/scripts/benchmark-integration.d.ts +182 -0
  173. package/packages/core/dist/scripts/benchmark-integration.d.ts.map +1 -0
  174. package/packages/core/dist/scripts/benchmark-integration.js +691 -0
  175. package/packages/core/dist/scripts/benchmark-integration.js.map +1 -0
  176. package/packages/core/dist/scripts/benchmark-integration.test.d.ts +13 -0
  177. package/packages/core/dist/scripts/benchmark-integration.test.d.ts.map +1 -0
  178. package/packages/core/dist/scripts/benchmark-integration.test.js +680 -0
  179. package/packages/core/dist/scripts/benchmark-integration.test.js.map +1 -0
  180. package/packages/core/dist/scripts/debugging-scenarios.test.d.ts +18 -0
  181. package/packages/core/dist/scripts/debugging-scenarios.test.d.ts.map +1 -0
  182. package/packages/core/dist/scripts/debugging-scenarios.test.js +317 -0
  183. package/packages/core/dist/scripts/debugging-scenarios.test.js.map +1 -0
  184. package/packages/core/dist/scripts/generate-all-faces.d.ts +10 -0
  185. package/packages/core/dist/scripts/generate-all-faces.d.ts.map +1 -0
  186. package/packages/core/dist/scripts/generate-all-faces.js +256 -0
  187. package/packages/core/dist/scripts/generate-all-faces.js.map +1 -0
  188. package/packages/core/dist/scripts/generate-all-faces.test.d.ts +17 -0
  189. package/packages/core/dist/scripts/generate-all-faces.test.d.ts.map +1 -0
  190. package/packages/core/dist/scripts/generate-all-faces.test.js +372 -0
  191. package/packages/core/dist/scripts/generate-all-faces.test.js.map +1 -0
  192. package/packages/core/dist/scripts/generate-all-spiders.d.ts +10 -0
  193. package/packages/core/dist/scripts/generate-all-spiders.d.ts.map +1 -0
  194. package/packages/core/dist/scripts/generate-all-spiders.js +306 -0
  195. package/packages/core/dist/scripts/generate-all-spiders.js.map +1 -0
  196. package/packages/core/dist/scripts/generate-ascii-face.d.ts +52 -0
  197. package/packages/core/dist/scripts/generate-ascii-face.d.ts.map +1 -0
  198. package/packages/core/dist/scripts/generate-ascii-face.js +155 -0
  199. package/packages/core/dist/scripts/generate-ascii-face.js.map +1 -0
  200. package/packages/core/dist/scripts/generate-face.d.ts +52 -0
  201. package/packages/core/dist/scripts/generate-face.d.ts.map +1 -0
  202. package/packages/core/dist/scripts/generate-face.js +199 -0
  203. package/packages/core/dist/scripts/generate-face.js.map +1 -0
  204. package/packages/core/dist/scripts/generate-face.test.d.ts +13 -0
  205. package/packages/core/dist/scripts/generate-face.test.d.ts.map +1 -0
  206. package/packages/core/dist/scripts/generate-face.test.js +301 -0
  207. package/packages/core/dist/scripts/generate-face.test.js.map +1 -0
  208. package/packages/core/dist/scripts/generate-report.d.ts +65 -0
  209. package/packages/core/dist/scripts/generate-report.d.ts.map +1 -0
  210. package/packages/core/dist/scripts/generate-report.js +378 -0
  211. package/packages/core/dist/scripts/generate-report.js.map +1 -0
  212. package/packages/core/dist/scripts/generate-report.test.d.ts +13 -0
  213. package/packages/core/dist/scripts/generate-report.test.d.ts.map +1 -0
  214. package/packages/core/dist/scripts/generate-report.test.js +363 -0
  215. package/packages/core/dist/scripts/generate-report.test.js.map +1 -0
  216. package/packages/core/dist/scripts/generate-spider-report.d.ts +65 -0
  217. package/packages/core/dist/scripts/generate-spider-report.d.ts.map +1 -0
  218. package/packages/core/dist/scripts/generate-spider-report.js +366 -0
  219. package/packages/core/dist/scripts/generate-spider-report.js.map +1 -0
  220. package/packages/core/dist/scripts/generate-spider-report.test.d.ts +13 -0
  221. package/packages/core/dist/scripts/generate-spider-report.test.d.ts.map +1 -0
  222. package/packages/core/dist/scripts/generate-spider-report.test.js +367 -0
  223. package/packages/core/dist/scripts/generate-spider-report.test.js.map +1 -0
  224. package/packages/core/dist/scripts/generate-spider.d.ts +37 -0
  225. package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -0
  226. package/packages/core/dist/scripts/generate-spider.js +315 -0
  227. package/packages/core/dist/scripts/generate-spider.js.map +1 -0
  228. package/packages/core/dist/scripts/generate-spider.test.d.ts +14 -0
  229. package/packages/core/dist/scripts/generate-spider.test.d.ts.map +1 -0
  230. package/packages/core/dist/scripts/generate-spider.test.js +269 -0
  231. package/packages/core/dist/scripts/generate-spider.test.js.map +1 -0
  232. package/packages/core/dist/scripts/job-fair-aggregator.d.ts +150 -0
  233. package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +1 -0
  234. package/packages/core/dist/scripts/job-fair-aggregator.js +547 -0
  235. package/packages/core/dist/scripts/job-fair-aggregator.js.map +1 -0
  236. package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts +14 -0
  237. package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts.map +1 -0
  238. package/packages/core/dist/scripts/job-fair-aggregator.test.js +616 -0
  239. package/packages/core/dist/scripts/job-fair-aggregator.test.js.map +1 -0
  240. package/packages/core/dist/scripts/run-ci.test.d.ts +20 -0
  241. package/packages/core/dist/scripts/run-ci.test.d.ts.map +1 -0
  242. package/packages/core/dist/scripts/run-ci.test.js +127 -0
  243. package/packages/core/dist/scripts/run-ci.test.js.map +1 -0
  244. package/packages/core/dist/scripts/theme-detail.test.d.ts +10 -0
  245. package/packages/core/dist/scripts/theme-detail.test.d.ts.map +1 -0
  246. package/packages/core/dist/scripts/theme-detail.test.js +199 -0
  247. package/packages/core/dist/scripts/theme-detail.test.js.map +1 -0
  248. package/packages/core/dist/scripts/validate-ocean-profiles.d.ts +9 -0
  249. package/packages/core/dist/scripts/validate-ocean-profiles.d.ts.map +1 -0
  250. package/packages/core/dist/scripts/validate-ocean-profiles.js +130 -0
  251. package/packages/core/dist/scripts/validate-ocean-profiles.js.map +1 -0
  252. package/packages/core/dist/workflow/generic-handoff.d.ts +235 -0
  253. package/packages/core/dist/workflow/generic-handoff.d.ts.map +1 -0
  254. package/packages/core/dist/workflow/generic-handoff.js +358 -0
  255. package/packages/core/dist/workflow/generic-handoff.js.map +1 -0
  256. package/packages/core/dist/workflow/generic-handoff.test.d.ts +21 -0
  257. package/packages/core/dist/workflow/generic-handoff.test.d.ts.map +1 -0
  258. package/packages/core/dist/workflow/generic-handoff.test.js +499 -0
  259. package/packages/core/dist/workflow/generic-handoff.test.js.map +1 -0
  260. package/packages/core/dist/workflow/generic-sm-finish.d.ts +89 -0
  261. package/packages/core/dist/workflow/generic-sm-finish.d.ts.map +1 -0
  262. package/packages/core/dist/workflow/generic-sm-finish.js +157 -0
  263. package/packages/core/dist/workflow/generic-sm-finish.js.map +1 -0
  264. package/packages/core/dist/workflow/generic-sm-setup.d.ts +138 -0
  265. package/packages/core/dist/workflow/generic-sm-setup.d.ts.map +1 -0
  266. package/packages/core/dist/workflow/generic-sm-setup.js +382 -0
  267. package/packages/core/dist/workflow/generic-sm-setup.js.map +1 -0
  268. package/packages/core/dist/workflow/sm-subagents.test.d.ts +23 -0
  269. package/packages/core/dist/workflow/sm-subagents.test.d.ts.map +1 -0
  270. package/packages/core/dist/workflow/sm-subagents.test.js +727 -0
  271. package/packages/core/dist/workflow/sm-subagents.test.js.map +1 -0
  272. package/packages/core/dist/workflow/story-workflow-routing.test.d.ts +17 -0
  273. package/packages/core/dist/workflow/story-workflow-routing.test.d.ts.map +1 -0
  274. package/packages/core/dist/workflow/story-workflow-routing.test.js +559 -0
  275. package/packages/core/dist/workflow/story-workflow-routing.test.js.map +1 -0
  276. package/packages/core/dist/workflow/test-cache.d.ts +131 -0
  277. package/packages/core/dist/workflow/test-cache.d.ts.map +1 -0
  278. package/packages/core/dist/workflow/test-cache.js +226 -0
  279. package/packages/core/dist/workflow/test-cache.js.map +1 -0
  280. package/packages/core/dist/workflow/test-cache.test.d.ts +17 -0
  281. package/packages/core/dist/workflow/test-cache.test.d.ts.map +1 -0
  282. package/packages/core/dist/workflow/test-cache.test.js +438 -0
  283. package/packages/core/dist/workflow/test-cache.test.js.map +1 -0
  284. package/packages/core/dist/workflow/workflow-loader.d.ts +76 -0
  285. package/packages/core/dist/workflow/workflow-loader.d.ts.map +1 -0
  286. package/packages/core/dist/workflow/workflow-loader.js +133 -0
  287. package/packages/core/dist/workflow/workflow-loader.js.map +1 -0
  288. package/packages/core/dist/workflow/workflow-loader.test.d.ts +15 -0
  289. package/packages/core/dist/workflow/workflow-loader.test.d.ts.map +1 -0
  290. package/packages/core/dist/workflow/workflow-loader.test.js +354 -0
  291. package/packages/core/dist/workflow/workflow-loader.test.js.map +1 -0
  292. package/packages/core/dist/workflow/workflow-migration.test.d.ts +17 -0
  293. package/packages/core/dist/workflow/workflow-migration.test.d.ts.map +1 -0
  294. package/packages/core/dist/workflow/workflow-migration.test.js +372 -0
  295. package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -0
  296. package/packages/core/dist/workflow/workflow-router.d.ts +55 -0
  297. package/packages/core/dist/workflow/workflow-router.d.ts.map +1 -0
  298. package/packages/core/dist/workflow/workflow-router.js +245 -0
  299. package/packages/core/dist/workflow/workflow-router.js.map +1 -0
  300. package/packages/core/dist/workflow/workflow-router.test.d.ts +20 -0
  301. package/packages/core/dist/workflow/workflow-router.test.d.ts.map +1 -0
  302. package/packages/core/dist/workflow/workflow-router.test.js +607 -0
  303. package/packages/core/dist/workflow/workflow-router.test.js.map +1 -0
  304. package/packages/core/dist/workflow/workflow-schema.d.ts +98 -0
  305. package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -0
  306. package/packages/core/dist/workflow/workflow-schema.js +230 -0
  307. package/packages/core/dist/workflow/workflow-schema.js.map +1 -0
  308. package/packages/core/dist/workflow/workflow-schema.test.d.ts +45 -0
  309. package/packages/core/dist/workflow/workflow-schema.test.d.ts.map +1 -0
  310. package/packages/core/dist/workflow/workflow-schema.test.js +512 -0
  311. package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -0
  312. package/pennyfarthing-dist/agents/README.md +397 -0
  313. package/pennyfarthing-dist/agents/architect.md +171 -0
  314. package/pennyfarthing-dist/agents/dev.md +225 -0
  315. package/pennyfarthing-dist/agents/devops.md +183 -0
  316. package/pennyfarthing-dist/agents/generic-handoff.md +451 -0
  317. package/pennyfarthing-dist/agents/generic-sm-finish.md +261 -0
  318. package/pennyfarthing-dist/agents/generic-sm-setup.md +214 -0
  319. package/pennyfarthing-dist/agents/orchestrator.md +316 -0
  320. package/pennyfarthing-dist/agents/pm.md +153 -0
  321. package/pennyfarthing-dist/agents/reviewer-preflight.md +224 -0
  322. package/pennyfarthing-dist/agents/reviewer.md +315 -0
  323. package/pennyfarthing-dist/agents/sm-file-summary.md +109 -0
  324. package/pennyfarthing-dist/agents/sm-handoff.md +97 -0
  325. package/pennyfarthing-dist/agents/sm.md +480 -0
  326. package/pennyfarthing-dist/agents/tea.md +191 -0
  327. package/pennyfarthing-dist/agents/tech-writer.md +148 -0
  328. package/pennyfarthing-dist/agents/testing-runner.md +420 -0
  329. package/pennyfarthing-dist/agents/ux-designer.md +158 -0
  330. package/pennyfarthing-dist/agents/workflow-status-check.md +332 -0
  331. package/pennyfarthing-dist/commands/architect.md +62 -0
  332. package/pennyfarthing-dist/commands/benchmark-control.md +69 -0
  333. package/pennyfarthing-dist/commands/benchmark.md +467 -0
  334. package/pennyfarthing-dist/commands/brainstorm.md +91 -0
  335. package/pennyfarthing-dist/commands/check.md +156 -0
  336. package/pennyfarthing-dist/commands/chore.md +178 -0
  337. package/pennyfarthing-dist/commands/close-epic.md +136 -0
  338. package/pennyfarthing-dist/commands/continue-session.md +184 -0
  339. package/pennyfarthing-dist/commands/create-branches-from-story.md +374 -0
  340. package/pennyfarthing-dist/commands/create-theme.md +29 -0
  341. package/pennyfarthing-dist/commands/dev.md +60 -0
  342. package/pennyfarthing-dist/commands/devops.md +59 -0
  343. package/pennyfarthing-dist/commands/git-cleanup.md +340 -0
  344. package/pennyfarthing-dist/commands/health-check.md +108 -0
  345. package/pennyfarthing-dist/commands/help.md +264 -0
  346. package/pennyfarthing-dist/commands/job-fair.md +102 -0
  347. package/pennyfarthing-dist/commands/list-themes.md +17 -0
  348. package/pennyfarthing-dist/commands/new-work.md +127 -0
  349. package/pennyfarthing-dist/commands/orchestrator.md +56 -0
  350. package/pennyfarthing-dist/commands/parallel-work.md +71 -0
  351. package/pennyfarthing-dist/commands/party-mode.md +67 -0
  352. package/pennyfarthing-dist/commands/permissions.md +193 -0
  353. package/pennyfarthing-dist/commands/pm.md +60 -0
  354. package/pennyfarthing-dist/commands/prime.md +140 -0
  355. package/pennyfarthing-dist/commands/release.md +58 -0
  356. package/pennyfarthing-dist/commands/repo-status.md +49 -0
  357. package/pennyfarthing-dist/commands/retro.md +200 -0
  358. package/pennyfarthing-dist/commands/reviewer.md +64 -0
  359. package/pennyfarthing-dist/commands/run-ci.md +116 -0
  360. package/pennyfarthing-dist/commands/set-theme.md +52 -0
  361. package/pennyfarthing-dist/commands/show-theme.md +21 -0
  362. package/pennyfarthing-dist/commands/sm.md +70 -0
  363. package/pennyfarthing-dist/commands/solo.md +411 -0
  364. package/pennyfarthing-dist/commands/sprint-planning.md +109 -0
  365. package/pennyfarthing-dist/commands/start-epic.md +156 -0
  366. package/pennyfarthing-dist/commands/sync-epic-to-jira.md +184 -0
  367. package/pennyfarthing-dist/commands/sync-work-with-sprint.md +376 -0
  368. package/pennyfarthing-dist/commands/tea.md +63 -0
  369. package/pennyfarthing-dist/commands/tech-writer.md +53 -0
  370. package/pennyfarthing-dist/commands/theme-maker.md +671 -0
  371. package/pennyfarthing-dist/commands/update-domain-docs.md +83 -0
  372. package/pennyfarthing-dist/commands/ux-designer.md +62 -0
  373. package/pennyfarthing-dist/commands/work.md +111 -0
  374. package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +480 -0
  375. package/pennyfarthing-dist/guides/AGENT-SCOPES.md +201 -0
  376. package/pennyfarthing-dist/guides/HOOKS.md +230 -0
  377. package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +338 -0
  378. package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +193 -0
  379. package/pennyfarthing-dist/guides/agent-template-strategic.md +148 -0
  380. package/pennyfarthing-dist/guides/agent-template-tactical.md +162 -0
  381. package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +746 -0
  382. package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +574 -0
  383. package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +488 -0
  384. package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +402 -0
  385. package/pennyfarthing-dist/guides/permission-protocol.md +188 -0
  386. package/pennyfarthing-dist/guides/persona-loading.md +46 -0
  387. package/pennyfarthing-dist/guides/persona-system.md +294 -0
  388. package/pennyfarthing-dist/guides/shared-agent-behavior.md +388 -0
  389. package/pennyfarthing-dist/guides/shared-context.md +147 -0
  390. package/pennyfarthing-dist/guides/strategic-agent-behavior.md +348 -0
  391. package/pennyfarthing-dist/guides/tactical-agent-behavior.md +1041 -0
  392. package/pennyfarthing-dist/guides/workflow-schema.md +195 -0
  393. package/pennyfarthing-dist/guides/worktree-mode.md +113 -0
  394. package/pennyfarthing-dist/output-styles/teaching.md +33 -0
  395. package/pennyfarthing-dist/output-styles/terse.md +20 -0
  396. package/pennyfarthing-dist/output-styles/verbose.md +28 -0
  397. package/pennyfarthing-dist/personas/themes/1984.yaml +312 -0
  398. package/pennyfarthing-dist/personas/themes/a-team.yaml +207 -0
  399. package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +300 -0
  400. package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +330 -0
  401. package/pennyfarthing-dist/personas/themes/all-stars.yaml +332 -0
  402. package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +320 -0
  403. package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +306 -0
  404. package/pennyfarthing-dist/personas/themes/arcane.yaml +288 -0
  405. package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +331 -0
  406. package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +288 -0
  407. package/pennyfarthing-dist/personas/themes/babylon-5.yaml +288 -0
  408. package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +288 -0
  409. package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +288 -0
  410. package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +300 -0
  411. package/pennyfarthing-dist/personas/themes/black-sails.yaml +300 -0
  412. package/pennyfarthing-dist/personas/themes/blade-runner.yaml +295 -0
  413. package/pennyfarthing-dist/personas/themes/bobiverse.yaml +288 -0
  414. package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +327 -0
  415. package/pennyfarthing-dist/personas/themes/catch-22.yaml +316 -0
  416. package/pennyfarthing-dist/personas/themes/classical-composers.yaml +310 -0
  417. package/pennyfarthing-dist/personas/themes/control.yaml +197 -0
  418. package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +320 -0
  419. package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +323 -0
  420. package/pennyfarthing-dist/personas/themes/deadwood.yaml +300 -0
  421. package/pennyfarthing-dist/personas/themes/dickens.yaml +320 -0
  422. package/pennyfarthing-dist/personas/themes/discworld.yaml +332 -0
  423. package/pennyfarthing-dist/personas/themes/doctor-who.yaml +290 -0
  424. package/pennyfarthing-dist/personas/themes/don-quixote.yaml +320 -0
  425. package/pennyfarthing-dist/personas/themes/dune.yaml +307 -0
  426. package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +320 -0
  427. package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +288 -0
  428. package/pennyfarthing-dist/personas/themes/fargo.yaml +330 -0
  429. package/pennyfarthing-dist/personas/themes/film-auteurs.yaml +312 -0
  430. package/pennyfarthing-dist/personas/themes/firefly.yaml +328 -0
  431. package/pennyfarthing-dist/personas/themes/foundation.yaml +290 -0
  432. package/pennyfarthing-dist/personas/themes/futurama.yaml +321 -0
  433. package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +290 -0
  434. package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +243 -0
  435. package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +308 -0
  436. package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +308 -0
  437. package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +330 -0
  438. package/pennyfarthing-dist/personas/themes/hannibal.yaml +300 -0
  439. package/pennyfarthing-dist/personas/themes/harry-potter.yaml +324 -0
  440. package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +291 -0
  441. package/pennyfarthing-dist/personas/themes/historical-figures.yaml +288 -0
  442. package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +331 -0
  443. package/pennyfarthing-dist/personas/themes/house-md.yaml +321 -0
  444. package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +289 -0
  445. package/pennyfarthing-dist/personas/themes/inspector-morse.yaml +300 -0
  446. package/pennyfarthing-dist/personas/themes/jane-austen.yaml +287 -0
  447. package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +320 -0
  448. package/pennyfarthing-dist/personas/themes/justified.yaml +300 -0
  449. package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +219 -0
  450. package/pennyfarthing-dist/personas/themes/les-miserables.yaml +299 -0
  451. package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +334 -0
  452. package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +334 -0
  453. package/pennyfarthing-dist/personas/themes/mad-max.yaml +355 -0
  454. package/pennyfarthing-dist/personas/themes/mad-men.yaml +289 -0
  455. package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +300 -0
  456. package/pennyfarthing-dist/personas/themes/mash.yaml +334 -0
  457. package/pennyfarthing-dist/personas/themes/mass-effect.yaml +289 -0
  458. package/pennyfarthing-dist/personas/themes/military-commanders.yaml +306 -0
  459. package/pennyfarthing-dist/personas/themes/moby-dick.yaml +320 -0
  460. package/pennyfarthing-dist/personas/themes/monty-python.yaml +303 -0
  461. package/pennyfarthing-dist/personas/themes/neuromancer.yaml +300 -0
  462. package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +329 -0
  463. package/pennyfarthing-dist/personas/themes/parks-and-rec.yaml +242 -0
  464. package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +298 -0
  465. package/pennyfarthing-dist/personas/themes/princess-bride.yaml +220 -0
  466. package/pennyfarthing-dist/personas/themes/renaissance-masters.yaml +320 -0
  467. package/pennyfarthing-dist/personas/themes/rome.yaml +300 -0
  468. package/pennyfarthing-dist/personas/themes/russian-masters.yaml +318 -0
  469. package/pennyfarthing-dist/personas/themes/sandman.yaml +288 -0
  470. package/pennyfarthing-dist/personas/themes/scientific-revolutionaries.yaml +320 -0
  471. package/pennyfarthing-dist/personas/themes/shakespeare.yaml +301 -0
  472. package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +289 -0
  473. package/pennyfarthing-dist/personas/themes/snow-crash.yaml +288 -0
  474. package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +300 -0
  475. package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +230 -0
  476. package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +210 -0
  477. package/pennyfarthing-dist/personas/themes/star-wars.yaml +303 -0
  478. package/pennyfarthing-dist/personas/themes/succession.yaml +300 -0
  479. package/pennyfarthing-dist/personas/themes/superfriends.yaml +208 -0
  480. package/pennyfarthing-dist/personas/themes/ted-lasso.yaml +236 -0
  481. package/pennyfarthing-dist/personas/themes/the-americans.yaml +300 -0
  482. package/pennyfarthing-dist/personas/themes/the-crown.yaml +300 -0
  483. package/pennyfarthing-dist/personas/themes/the-expanse.yaml +213 -0
  484. package/pennyfarthing-dist/personas/themes/the-good-place.yaml +322 -0
  485. package/pennyfarthing-dist/personas/themes/the-matrix.yaml +353 -0
  486. package/pennyfarthing-dist/personas/themes/the-odyssey.yaml +300 -0
  487. package/pennyfarthing-dist/personas/themes/the-office.yaml +330 -0
  488. package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +308 -0
  489. package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +300 -0
  490. package/pennyfarthing-dist/personas/themes/the-wire.yaml +311 -0
  491. package/pennyfarthing-dist/personas/themes/the-witcher.yaml +300 -0
  492. package/pennyfarthing-dist/personas/themes/twin-peaks.yaml +302 -0
  493. package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +300 -0
  494. package/pennyfarthing-dist/personas/themes/watchmen.yaml +291 -0
  495. package/pennyfarthing-dist/personas/themes/west-wing.yaml +291 -0
  496. package/pennyfarthing-dist/personas/themes/world-explorers.yaml +320 -0
  497. package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +307 -0
  498. package/pennyfarthing-dist/personas/themes/x-files.yaml +302 -0
  499. package/pennyfarthing-dist/scripts/add-short-names.mjs +264 -0
  500. package/pennyfarthing-dist/scripts/agent-session.sh +367 -0
  501. package/pennyfarthing-dist/scripts/check-context.sh +187 -0
  502. package/pennyfarthing-dist/scripts/check.sh +497 -0
  503. package/pennyfarthing-dist/scripts/deploy.sh +284 -0
  504. package/pennyfarthing-dist/scripts/doctor-dogfood.sh +360 -0
  505. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +61 -0
  506. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +66 -0
  507. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +35 -0
  508. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +166 -0
  509. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +50 -0
  510. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +71 -0
  511. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +54 -0
  512. package/pennyfarthing-dist/scripts/hooks/session-start.sh +98 -0
  513. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +59 -0
  514. package/pennyfarthing-dist/scripts/install-git-hooks.sh +91 -0
  515. package/pennyfarthing-dist/scripts/prime.sh +161 -0
  516. package/pennyfarthing-dist/scripts/release.sh +198 -0
  517. package/pennyfarthing-dist/scripts/repo-utils.sh +778 -0
  518. package/pennyfarthing-dist/scripts/run-ci.sh +219 -0
  519. package/pennyfarthing-dist/scripts/run.sh +65 -0
  520. package/pennyfarthing-dist/scripts/statusline.sh +264 -0
  521. package/pennyfarthing-dist/scripts/tests/check.test.sh +582 -0
  522. package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +107 -0
  523. package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +597 -0
  524. package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +514 -0
  525. package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +517 -0
  526. package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +331 -0
  527. package/pennyfarthing-dist/scripts/uninstall.sh +271 -0
  528. package/pennyfarthing-dist/scripts/utils/background-tasks.sh +177 -0
  529. package/pennyfarthing-dist/scripts/utils/check-status.sh +251 -0
  530. package/pennyfarthing-dist/scripts/utils/checkpoint.sh +136 -0
  531. package/pennyfarthing-dist/scripts/utils/common.sh +157 -0
  532. package/pennyfarthing-dist/scripts/utils/create-feature-branches.sh +230 -0
  533. package/pennyfarthing-dist/scripts/utils/file-lock.sh +269 -0
  534. package/pennyfarthing-dist/scripts/utils/find-related-work.sh +231 -0
  535. package/pennyfarthing-dist/scripts/utils/find-root.sh +33 -0
  536. package/pennyfarthing-dist/scripts/utils/generate-skill-docs.sh +110 -0
  537. package/pennyfarthing-dist/scripts/utils/git-status-all.sh +127 -0
  538. package/pennyfarthing-dist/scripts/utils/ground-truth-judge.py +289 -0
  539. package/pennyfarthing-dist/scripts/utils/jira/jira-lib.mjs +443 -0
  540. package/pennyfarthing-dist/scripts/utils/jira/jira-sync-story.mjs +208 -0
  541. package/pennyfarthing-dist/scripts/utils/jira/jira-sync.mjs +198 -0
  542. package/pennyfarthing-dist/scripts/utils/jira-claim-story.sh +162 -0
  543. package/pennyfarthing-dist/scripts/utils/jira-lib.sh +463 -0
  544. package/pennyfarthing-dist/scripts/utils/jira-sync-story.sh +8 -0
  545. package/pennyfarthing-dist/scripts/utils/jira-sync.sh +8 -0
  546. package/pennyfarthing-dist/scripts/utils/log-skill-usage.sh +74 -0
  547. package/pennyfarthing-dist/scripts/utils/logging.sh +186 -0
  548. package/pennyfarthing-dist/scripts/utils/repo-scan.sh +141 -0
  549. package/pennyfarthing-dist/scripts/utils/retry.sh +76 -0
  550. package/pennyfarthing-dist/scripts/utils/run-timestamp.sh +7 -0
  551. package/pennyfarthing-dist/scripts/utils/session-cleanup.sh +319 -0
  552. package/pennyfarthing-dist/scripts/utils/skill-usage-report.sh +193 -0
  553. package/pennyfarthing-dist/scripts/utils/sprint-common.sh +286 -0
  554. package/pennyfarthing-dist/scripts/utils/sprint-metrics.sh +241 -0
  555. package/pennyfarthing-dist/scripts/utils/swebench-judge.py +400 -0
  556. package/pennyfarthing-dist/scripts/utils/sync-epic-to-jira.sh +16 -0
  557. package/pennyfarthing-dist/scripts/utils/test-setup.sh +337 -0
  558. package/pennyfarthing-dist/scripts/utils/validate-subagent-frontmatter.sh +160 -0
  559. package/pennyfarthing-dist/scripts/worktree-manager.sh +498 -0
  560. package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +236 -0
  561. package/pennyfarthing-dist/skills/changelog/SKILL.md +367 -0
  562. package/pennyfarthing-dist/skills/code-review/SKILL.md +168 -0
  563. package/pennyfarthing-dist/skills/context-engineering/SKILL.md +268 -0
  564. package/pennyfarthing-dist/skills/cyclist/SKILL.md +117 -0
  565. package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +421 -0
  566. package/pennyfarthing-dist/skills/finalize-run/SKILL.md +258 -0
  567. package/pennyfarthing-dist/skills/jira/SKILL.md +281 -0
  568. package/pennyfarthing-dist/skills/judge/SKILL.md +524 -0
  569. package/pennyfarthing-dist/skills/just/SKILL.md +160 -0
  570. package/pennyfarthing-dist/skills/mermaid/SKILL.md +240 -0
  571. package/pennyfarthing-dist/skills/otel/skill.md +222 -0
  572. package/pennyfarthing-dist/skills/permissions/skill.md +172 -0
  573. package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +173 -0
  574. package/pennyfarthing-dist/skills/skill-registry.schema.json +102 -0
  575. package/pennyfarthing-dist/skills/skill-registry.yaml +335 -0
  576. package/pennyfarthing-dist/skills/sprint-context/SKILL.md +120 -0
  577. package/pennyfarthing-dist/skills/story-management/SKILL.md +208 -0
  578. package/pennyfarthing-dist/skills/testing/SKILL.md +99 -0
  579. package/pennyfarthing-dist/skills/testing/references/troubleshooting.md +124 -0
  580. package/pennyfarthing-dist/skills/theme/skill.md +129 -0
  581. package/pennyfarthing-dist/skills/theme-creation/SKILL.md +169 -0
  582. package/pennyfarthing-dist/skills/workflow/SKILL.md +160 -0
  583. package/pennyfarthing-dist/skills/yq/SKILL.md +264 -0
  584. package/pennyfarthing-dist/templates/LEADERBOARD.schema.yaml +187 -0
  585. package/pennyfarthing-dist/templates/LEADERBOARD.template.md +59 -0
  586. package/pennyfarthing-dist/templates/agent-scopes.yaml.template +276 -0
  587. package/pennyfarthing-dist/templates/pennyfarthing-settings.yaml.template +61 -0
  588. package/pennyfarthing-dist/templates/persona-config.yaml.template +22 -0
  589. package/pennyfarthing-dist/templates/preferences.yaml.template +15 -0
  590. package/pennyfarthing-dist/templates/settings.local.json.template +90 -0
  591. package/pennyfarthing-dist/templates/setup-env.sh.template +18 -0
  592. package/pennyfarthing-dist/templates/shared-context.md.template +70 -0
  593. package/pennyfarthing-dist/templates/sidecar/decisions.md.template +40 -0
  594. package/pennyfarthing-dist/templates/sidecar/gotchas.md.template +37 -0
  595. package/pennyfarthing-dist/templates/sidecar/patterns.md.template +34 -0
  596. package/pennyfarthing-dist/workflows/agent-docs.yaml +70 -0
  597. package/pennyfarthing-dist/workflows/bdd.yaml +58 -0
  598. package/pennyfarthing-dist/workflows/tdd.yaml +50 -0
  599. package/pennyfarthing-dist/workflows/trivial.yaml +40 -0
@@ -0,0 +1,102 @@
1
+ ---
2
+ description: Discover which characters in a theme excel at each role
3
+ argument-hint: <theme> [--runs N] [--roles <list>]
4
+ ---
5
+
6
+ # Job Fair
7
+
8
+ Run every character in a theme against benchmarks to find hidden talents.
9
+
10
+ ## Usage
11
+
12
+ ```
13
+ /job-fair <theme>
14
+ /job-fair <theme> --runs 2
15
+ /job-fair <theme> --roles dev,reviewer
16
+ ```
17
+
18
+ ## On Invoke
19
+
20
+ **Arguments:** $ARGUMENTS
21
+
22
+ ### Step 1: Parse and Validate
23
+
24
+ ```bash
25
+ # Theme is first positional arg (strip any --flags)
26
+ THEME=$(echo "$ARGUMENTS" | awk '{print $1}' | sed 's/^--theme[= ]//')
27
+
28
+ # Check theme exists
29
+ ls pennyfarthing-dist/personas/themes/${THEME}.yaml
30
+ ```
31
+
32
+ If not found, list available themes and stop.
33
+
34
+ Extract `--runs N` (default: 4) and `--roles x,y` (default: all with baselines).
35
+
36
+ ### Step 2: Load Characters
37
+
38
+ Read `pennyfarthing-dist/personas/themes/${THEME}.yaml` and list agents:
39
+
40
+ | Role | Character |
41
+ |------|-----------|
42
+ | sm | {agents.sm.character} |
43
+ | dev | {agents.dev.character} |
44
+ | ... | ... |
45
+
46
+ ### Step 3: Find Baselines
47
+
48
+ Pick ONE scenario per role from `internal/results/baselines/`:
49
+
50
+ ```bash
51
+ # For each role, find first available baseline
52
+ for role in dev reviewer tea sm architect; do
53
+ baseline=$(ls -d internal/results/baselines/*/${role} 2>/dev/null | head -1)
54
+ if [ -n "$baseline" ]; then
55
+ scenario=$(basename $(dirname "$baseline"))
56
+ summary="$baseline/summary.yaml"
57
+ # Read statistics.mean and statistics.n from summary.yaml
58
+ fi
59
+ done
60
+ ```
61
+
62
+ Show table:
63
+
64
+ | Role | Scenario | Baseline | n |
65
+ |------|----------|----------|---|
66
+ | dev | race-condition-cache | 76.8 | 10 |
67
+
68
+ ### Step 4: Confirm
69
+
70
+ Show: `{characters} × {roles} × {runs} = {total} runs`
71
+
72
+ Ask user to confirm or cancel.
73
+
74
+ ### Step 5: Execute
75
+
76
+ For each role, for each character:
77
+
78
+ ```bash
79
+ # Native role
80
+ scripts/solo-runner.sh "${THEME}:${role}" "${scenario}" ${runs}
81
+
82
+ # Cross-role (character playing different role)
83
+ scripts/solo-runner.sh "${THEME}:${native_role}" "${scenario}" ${runs} --as ${target_role}
84
+ ```
85
+
86
+ Show progress as each completes.
87
+
88
+ ### Step 6: Report Results
89
+
90
+ Show champions per role and full matrix:
91
+
92
+ | Character | dev | reviewer | tea | sm | Avg |
93
+ |-----------|-----|----------|-----|-----|-----|
94
+ | ... | ... | ... | ... | ... | ... |
95
+
96
+ Save to `internal/results/job-fair/${THEME}-${timestamp}/summary.yaml`
97
+
98
+ ## Reference
99
+
100
+ - Theme files: `pennyfarthing-dist/personas/themes/*.yaml`
101
+ - Baselines: `internal/results/baselines/{scenario}/{role}/summary.yaml`
102
+ - Solo runner: `scripts/solo-runner.sh`
@@ -0,0 +1,17 @@
1
+ ---
2
+ description: List all available persona themes
3
+ ---
4
+
5
+ # List Themes
6
+
7
+ Show all available persona themes with the current theme highlighted.
8
+
9
+ ## Instructions
10
+
11
+ Run the pennyfarthing CLI to list themes:
12
+
13
+ ```bash
14
+ pennyfarthing theme list
15
+ ```
16
+
17
+ Report the available themes to the user, noting which one is currently active.
@@ -0,0 +1,127 @@
1
+ ---
2
+ description: Start a new work session with Pennyfarthing
3
+ ---
4
+
5
+ # Start New Work Session
6
+
7
+ <agent-activation>
8
+ **FIRST:** Use Bash tool to run:
9
+ ```bash
10
+ d="$PWD"; while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do d="$(dirname "$d")"; done; "$d/.pennyfarthing/scripts/run.sh" agent-session.sh start "sm"
11
+ ```
12
+ This finds the project root and loads your persona. Adopt the character shown in the output.
13
+ </agent-activation>
14
+
15
+ <purpose>
16
+ The blessed path for starting development work. Loads SM persona and coordinates story selection and TDD flow setup.
17
+ </purpose>
18
+
19
+ <critical-reminder>
20
+ **SM does NOT code.** SM coordinates story setup and hands off to Dev or TEA.
21
+ Even trivial 1-2 point stories require handoff - SM creates context, Dev implements.
22
+ </critical-reminder>
23
+
24
+ <on-invoke>
25
+ After loading persona, execute this sequence in order:
26
+
27
+ ## Step 1: Status Check (REQUIRED)
28
+ ```yaml
29
+ Task tool:
30
+ subagent_type: "workflow-status-check"
31
+ prompt: |
32
+ CALLING_AGENT: SM
33
+ ```
34
+
35
+ Based on result:
36
+ - `FINISH_STATE` → Go to Finish Flow
37
+ - `NEW_WORK_STATE` → Continue to Step 2
38
+ - `IN_PROGRESS_STATE` → Report status, ask user what to do
39
+
40
+ ## Step 2: Research Backlog
41
+ ```yaml
42
+ Task tool:
43
+ subagent_type: "generic-sm-setup"
44
+ prompt: |
45
+ MODE: research
46
+ ```
47
+
48
+ Present available stories to user, get selection.
49
+
50
+ ## Step 3: File Summary
51
+ ```yaml
52
+ Task tool:
53
+ subagent_type: "sm-file-summary"
54
+ prompt: |
55
+ STORY_ID: {selected-story}
56
+ FILE_LIST: |
57
+ {relevant files}
58
+ ```
59
+
60
+ ## Step 4: Write Story Context (SM does this directly)
61
+ Write `.session/context-story-{X-Y}.md` with:
62
+ - Story overview, technical approach, files to modify, ACs
63
+
64
+ ## Step 5: Story Setup
65
+ ```yaml
66
+ Task tool:
67
+ subagent_type: "generic-sm-setup"
68
+ prompt: |
69
+ MODE: setup
70
+ STORY_ID: {value}
71
+ JIRA_KEY: {value}
72
+ REPOS: {value}
73
+ SLUG: {value}
74
+ ASSIGNEE: {user name}
75
+ SESSION_CONTENT: |
76
+ {session file content}
77
+ ```
78
+
79
+ ## Step 6: Handoff
80
+ ```yaml
81
+ Task tool:
82
+ subagent_type: "sm-handoff"
83
+ prompt: |
84
+ STORY_ID: {value}
85
+ REPOS: {value}
86
+ TITLE: {value}
87
+ AC_COUNT: {value}
88
+ BRANCH_NAME: {value}
89
+ JIRA_KEY: {value}
90
+ ```
91
+
92
+ ## Step 7: Invoke Next Agent
93
+ After handoff complete:
94
+ - Trivial (1-2 pts): Invoke `/dev`
95
+ - Standard (3+ pts): Invoke `/tea`
96
+ </on-invoke>
97
+
98
+ <workflow-states>
99
+ | State | Action |
100
+ |-------|--------|
101
+ | MISSING_EPIC_CONTEXT | Prompt user to run `/start-epic` first |
102
+ | FINISH_STATE | SM handles finish flow (archive, Jira, cleanup) |
103
+ | NEW_WORK_STATE | Research → present stories → create context → setup → handoff |
104
+ </workflow-states>
105
+
106
+ <gates>
107
+ **Before handoff, verify:**
108
+ - [ ] Session file exists at `.session/{story-id}-session.md`
109
+ - [ ] Story context written with ACs
110
+ - [ ] Jira claimed (or explicitly skipped)
111
+ - [ ] Branch created
112
+
113
+ Do NOT proceed to coding. Always hand off.
114
+ </gates>
115
+
116
+ <tdd-flow>
117
+ | Points | Route |
118
+ |--------|-------|
119
+ | 1-2 pts | SM → Dev (skip TEA) |
120
+ | 3-5 pts | SM → TEA → Dev → Reviewer |
121
+ | 8+ pts | SM → TEA → Dev → Reviewer |
122
+ </tdd-flow>
123
+
124
+ <reference>
125
+ - **SM Agent:** `.pennyfarthing/agents/sm.md`
126
+ - **Subagents:** `workflow-status-check`, `generic-sm-setup`, `generic-sm-finish`, `sm-file-summary`, `sm-handoff`
127
+ </reference>
@@ -0,0 +1,56 @@
1
+ ---
2
+ description: Orchestrator - Coordinator of all agents and meta operations
3
+ ---
4
+
5
+ <agent-activation>
6
+ **FIRST:** Use Bash tool to run:
7
+ ```bash
8
+ d="$PWD"; while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do d="$(dirname "$d")"; done; "$d/.pennyfarthing/scripts/run.sh" agent-session.sh start "orchestrator"
9
+ ```
10
+ This finds the project root and loads your persona. Adopt the character shown in the output.
11
+
12
+ Then load and follow `.pennyfarthing/agents/orchestrator.md`
13
+ </agent-activation>
14
+
15
+ <agent-exit>
16
+ On exit: Capture learnings to sidecar, run `agent-session.sh stop`
17
+ </agent-exit>
18
+
19
+ <purpose>
20
+ Process architect who coordinates agents, improves workflows, and maintains system health.
21
+ </purpose>
22
+
23
+ <when-to-use>
24
+ - Process improvement and bottleneck analysis
25
+ - Agent behavior updates and alignment
26
+ - Skill creation or maintenance
27
+ - Sprint retrospectives and learnings capture
28
+ - Meta-level workflow debugging
29
+ </when-to-use>
30
+
31
+ <not-for>
32
+ - Story implementation (use `/dev`)
33
+ - Code review (use `/reviewer`)
34
+ - Bug fixes (use `/dev`)
35
+ - Sprint planning (use `/pm` or `/sm`)
36
+ </not-for>
37
+
38
+ <meta-operations>
39
+ **Process Improvement:** Analyze workflow bottlenecks, propose agent behavior updates, refine handoffs
40
+
41
+ **Agent Coordination:** Ensure agent files are consistent, resolve behavior conflicts, maintain alignment
42
+
43
+ **Skill Maintenance:** Create skills for common patterns, update existing knowledge, remove deprecated skills
44
+
45
+ **Retrospective Analysis:** Review completed sprints, capture learnings, update agent sidecars
46
+
47
+ **System Debugging:** Fix process issues when normal workflow breaks
48
+ </meta-operations>
49
+
50
+ <reference>
51
+ - **Agent:** `.pennyfarthing/agents/orchestrator.md`
52
+ - **Sidecar:** `.claude/project/agents/orchestrator-sidecar/`
53
+ - **Skills:** `/sprint-context`
54
+ - **Agent Files:** All `.pennyfarthing/agents/*.md`, `.core/commands/*.md`
55
+ - **Documentation:** Workflow specs, agent responsibilities, handoff protocols
56
+ </reference>
@@ -0,0 +1,71 @@
1
+ ---
2
+ description: Start parallel work in a new worktree
3
+ ---
4
+
5
+ ```bash
6
+ ./scripts/run.sh agent-session.sh start "parallel-work"
7
+ ```
8
+
9
+ <parallel-work-flow>
10
+ ## Parallel Work Setup
11
+
12
+ Start a new story in a worktree while keeping main checkout intact.
13
+
14
+ ### Step 1: Create Worktree
15
+
16
+ ```bash
17
+ # Get story info from user
18
+ read -p "Story ID (e.g., 5-3a): " STORY_ID
19
+ read -p "Branch name (e.g., feat/5-3a-feature): " BRANCH_NAME
20
+
21
+ # Create worktree
22
+ WORKTREE_NAME="wt-${STORY_ID}"
23
+ ./scripts/run.sh worktree-manager.sh create "$WORKTREE_NAME" "$BRANCH_NAME"
24
+
25
+ # Get port configuration
26
+ eval $(./scripts/run.sh worktree-manager.sh ports "$WORKTREE_NAME")
27
+ ```
28
+
29
+ ### Step 2: Create Session File
30
+
31
+ Create `.session/${STORY_ID}-session.md` with:
32
+
33
+ ```markdown
34
+ # Story ${STORY_ID}: [Title]
35
+
36
+ ## Worktree Context
37
+ worktree: ${WORKTREE_NAME}
38
+ path: ${WORKTREE_PATH}
39
+ api_port: ${API_PORT}
40
+ ui_port: ${UI_PORT}
41
+
42
+ ## Story Info
43
+ - **Epic:** [from sprint]
44
+ - **Points:** [from sprint]
45
+ - **Repos:** Both
46
+
47
+ ## Phase
48
+ sm
49
+
50
+ ## Status
51
+ setup
52
+
53
+ ## Acceptance Criteria
54
+ - [ ] AC1
55
+ - [ ] AC2
56
+ ```
57
+
58
+ ### Step 3: Hand to SM
59
+
60
+ Invoke SM to complete story setup in the worktree context.
61
+ </parallel-work-flow>
62
+
63
+ <agent-activation>
64
+ 1. Load persona from theme config → `agents.sm`
65
+ 2. Load and follow `.pennyfarthing/agents/sm.md`
66
+ 3. SM will detect worktree session and work in that context
67
+ </agent-activation>
68
+
69
+ <agent-exit>
70
+ On exit: Capture learnings to sidecar, run `agent-session.sh stop`
71
+ </agent-exit>
@@ -0,0 +1,67 @@
1
+ ---
2
+ description: Free-form creative brainstorming with all agents
3
+ ---
4
+
5
+ # Party Mode - Creative Brainstorming Session
6
+
7
+ You are now in **PARTY MODE** - a free-form creative brainstorming session where all Pennyfarthing agents contribute ideas without the usual constraints.
8
+
9
+ ## The Vibe
10
+
11
+ This is the "yes, and..." mode. No idea is too wild. We're exploring possibilities, not committing to implementations. The goal is to generate creative solutions and novel approaches.
12
+
13
+ ## How It Works
14
+
15
+ When a topic or problem is presented:
16
+
17
+ 1. **Each agent perspective contributes** (pick 3-4 relevant ones):
18
+ - **Vetinari (PM)**: Strategic implications, business value, political angles
19
+ - **Leonard (Architect)**: Technical possibilities, creative mechanisms, "what if we..."
20
+ - **Vimes (Manager)**: Practical concerns, team impact, "how would this actually work"
21
+ - **Carrot (Dev)**: Implementation ideas, "I could build that by..."
22
+ - **Igor (TEA)**: Quality angles, "we could verify that with..."
23
+ - **Sybil (UX)**: User experience, "users would love if..."
24
+ - **Sacharissa (Tech Writer)**: Communication, "we could explain it as..."
25
+ - **Lu-Tze (DevOps)**: Operational reality, "in production this would..."
26
+ - **DEATH (Pennyfarthing Master)**: THE LONG VIEW. WHAT MATTERS IN THE END.
27
+
28
+ 2. **Build on each other's ideas** - "Yes, and what if we also..."
29
+
30
+ 3. **No shooting down ideas** - Save criticism for later. Capture everything.
31
+
32
+ 4. **Wild ideas welcome** - The crazy idea might spark the brilliant one
33
+
34
+ ## Output Format
35
+
36
+ After the brainstorm, summarize:
37
+
38
+ ```markdown
39
+ ## Party Mode Results: [Topic]
40
+
41
+ ### Ideas Generated
42
+ 1. [Idea] - sparked by [agent perspective]
43
+ 2. [Idea] - built on idea #1 by adding...
44
+ ...
45
+
46
+ ### Most Promising
47
+ - [Top 3 ideas worth exploring further]
48
+
49
+ ### Wild Cards
50
+ - [Crazy ideas that might have something to them]
51
+
52
+ ### Next Steps
53
+ - [ ] Explore [idea] with /architect
54
+ - [ ] Prototype [idea] with /dev
55
+ - [ ] Get user feedback on [idea]
56
+ ```
57
+
58
+ ## Activation
59
+
60
+ To start party mode, present a topic:
61
+ - "Let's party mode on: how to improve the dashboard"
62
+ - "Party mode: what if we had real-time collaboration?"
63
+ - "Creative session: solving the notification spam problem"
64
+
65
+ ---
66
+
67
+ **THE PARTY HAS STARTED. WHAT SHALL WE BRAINSTORM?**
@@ -0,0 +1,193 @@
1
+ ---
2
+ description: View and manage runtime permission grants - list, grant, revoke, or show details
3
+ ---
4
+
5
+ # Permission Management
6
+
7
+ Manage runtime permission grants for tool access control.
8
+
9
+ ## Usage
10
+
11
+ ```
12
+ /permissions # List all active grants
13
+ /permissions grant <tool> "<scope>" [--type <type>] # Add permission
14
+ /permissions revoke <tool> # Remove all grants for tool
15
+ /permissions show <tool> # Show details for tool
16
+ ```
17
+
18
+ ## Subcommands
19
+
20
+ ### List Grants (default)
21
+
22
+ When invoked without arguments, list all active permission grants:
23
+
24
+ ```bash
25
+ # Read grants from settings
26
+ cat .claude/settings.local.json 2>/dev/null | jq -r '
27
+ if .permissions.grants then
28
+ .permissions.grants[] |
29
+ " \(.tool): \(.scope) [\(.grant_type)] - granted \(.granted_at)"
30
+ else
31
+ empty
32
+ end
33
+ ' || echo "No grants found"
34
+ ```
35
+
36
+ **Output format:**
37
+ ```
38
+ Active Permission Grants:
39
+ WebFetch: *.github.com [session] - granted 2026-01-13T15:00:00Z
40
+ Bash: git * [always] - granted 2026-01-13T14:30:00Z
41
+ ```
42
+
43
+ If no grants exist, display: "No active permission grants."
44
+
45
+ ### Grant Tool Access
46
+
47
+ Add a permission grant:
48
+
49
+ ```
50
+ /permissions grant <tool> "<scope>" [--type <once|session|always>]
51
+ ```
52
+
53
+ **Parameters:**
54
+ - `<tool>` - Tool name (WebFetch, Bash, Read, Edit, Write, Grep, Glob, etc.)
55
+ - `"<scope>"` - Scope pattern in quotes (e.g., `"*.github.com"`, `"git *"`)
56
+ - `--type` - Grant duration: `once`, `session` (default), or `always`
57
+
58
+ **Implementation:**
59
+
60
+ 1. Validate tool name is a known Claude Code tool
61
+ 2. Create grant object with timestamp:
62
+ ```json
63
+ {
64
+ "tool": "<tool>",
65
+ "scope": "<scope>",
66
+ "grant_type": "<type>",
67
+ "granted_at": "<ISO timestamp>"
68
+ }
69
+ ```
70
+ 3. Read existing settings, append to `permissions.grants` array
71
+ 4. Write updated settings back to `.claude/settings.local.json`
72
+ 5. Report success
73
+
74
+ **Example:**
75
+ ```bash
76
+ # Create/update grant
77
+ jq --arg tool "WebFetch" \
78
+ --arg scope "*.github.com" \
79
+ --arg type "session" \
80
+ --arg time "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
81
+ '.permissions.grants += [{"tool": $tool, "scope": $scope, "grant_type": $type, "granted_at": $time}]' \
82
+ .claude/settings.local.json > .claude/settings.local.json.tmp \
83
+ && mv .claude/settings.local.json.tmp .claude/settings.local.json
84
+ ```
85
+
86
+ ### Revoke Tool Access
87
+
88
+ Remove all grants for a specific tool:
89
+
90
+ ```
91
+ /permissions revoke <tool>
92
+ ```
93
+
94
+ **Implementation:**
95
+
96
+ 1. Read current grants from settings
97
+ 2. Filter out grants matching the tool name
98
+ 3. Write updated grants back
99
+ 4. Report how many grants were removed
100
+
101
+ **Example:**
102
+ ```bash
103
+ # Remove grants for tool
104
+ jq --arg tool "WebFetch" \
105
+ '.permissions.grants = (.permissions.grants // [] | map(select(.tool != $tool)))' \
106
+ .claude/settings.local.json > .claude/settings.local.json.tmp \
107
+ && mv .claude/settings.local.json.tmp .claude/settings.local.json
108
+ ```
109
+
110
+ ### Show Grant Details
111
+
112
+ Display detailed information about grants for a specific tool:
113
+
114
+ ```
115
+ /permissions show <tool>
116
+ ```
117
+
118
+ **Output includes:**
119
+ - All grants for the specified tool
120
+ - Scope patterns
121
+ - Grant types
122
+ - Timestamps
123
+ - Remaining uses (for `once` type)
124
+
125
+ **Example:**
126
+ ```bash
127
+ cat .claude/settings.local.json | jq --arg tool "WebFetch" '
128
+ .permissions.grants // [] | map(select(.tool == $tool))
129
+ '
130
+ ```
131
+
132
+ ## Grant Types
133
+
134
+ | Type | Duration | Persistence |
135
+ |------|----------|-------------|
136
+ | `once` | Single use, then removed | Memory only |
137
+ | `session` | Until conversation ends | Memory only |
138
+ | `always` | Persists forever | `.claude/settings.local.json` |
139
+
140
+ ## Storage
141
+
142
+ Grants are stored in `.claude/settings.local.json` under `permissions.grants`:
143
+
144
+ ```json
145
+ {
146
+ "permissions": {
147
+ "allow": ["Read", "Bash", ...],
148
+ "grants": [
149
+ {
150
+ "tool": "WebFetch",
151
+ "scope": "*.github.com",
152
+ "grant_type": "session",
153
+ "granted_at": "2026-01-13T15:00:00Z"
154
+ }
155
+ ]
156
+ }
157
+ }
158
+ ```
159
+
160
+ ## Valid Tool Names
161
+
162
+ - `Read`, `Write`, `Edit`
163
+ - `Bash`
164
+ - `Glob`, `Grep`
165
+ - `WebFetch`, `WebSearch`
166
+ - `Task`
167
+ - `Skill`
168
+ - `NotebookEdit`
169
+
170
+ ## Examples
171
+
172
+ ```bash
173
+ # List all grants
174
+ /permissions
175
+
176
+ # Grant WebFetch access to GitHub (session-scoped)
177
+ /permissions grant WebFetch "*.github.com"
178
+
179
+ # Grant Bash access to git commands (permanent)
180
+ /permissions grant Bash "git *" --type always
181
+
182
+ # Show all WebFetch grants
183
+ /permissions show WebFetch
184
+
185
+ # Revoke all Bash grants
186
+ /permissions revoke Bash
187
+ ```
188
+
189
+ ## Reference
190
+
191
+ - **Skill:** `.claude/skills/permissions/skill.md`
192
+ - **Settings:** `.claude/settings.local.json`
193
+ - **Related:** Story 33-1 (Permission Request Protocol), Story 33-3 (Cyclist Permission UI)
@@ -0,0 +1,60 @@
1
+ ---
2
+ description: Product Manager - Strategic planning and prioritization
3
+ ---
4
+
5
+ <agent-activation>
6
+ **FIRST:** Use Bash tool to run:
7
+ ```bash
8
+ d="$PWD"; while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do d="$(dirname "$d")"; done; "$d/.pennyfarthing/scripts/run.sh" agent-session.sh start "pm"
9
+ ```
10
+ This finds the project root and loads your persona. Adopt the character shown in the output.
11
+
12
+ Then load and follow `.pennyfarthing/agents/pm.md`
13
+ </agent-activation>
14
+
15
+ <agent-exit>
16
+ On exit: Capture learnings to sidecar, run `agent-session.sh stop`
17
+ </agent-exit>
18
+
19
+ <purpose>
20
+ Strategic planning and prioritization leader who sets direction outside the TDD flow.
21
+ </purpose>
22
+
23
+ <when-to-use>
24
+ - Sprint planning and goal setting
25
+ - Backlog grooming and epic prioritization
26
+ - Roadmap planning (2-3 sprints ahead)
27
+ - Value assessment and feature scoping
28
+ - Stakeholder communication on priorities
29
+ </when-to-use>
30
+
31
+ <not-for>
32
+ - NOT in TDD flow (SM → TEA → Dev → Reviewer handles implementation)
33
+ - NOT for tactical bug fixes or test writing
34
+ - NOT for code review or technical architecture decisions
35
+ </not-for>
36
+
37
+ <key-workflows>
38
+ **1. Sprint Planning** - Review velocity, select stories, set sprint goal
39
+ **2. Backlog Grooming** - Prioritize epics, refine stories, assess dependencies
40
+ **3. Epic Prioritization** - Rank candidates by business value, risk, effort, strategic fit
41
+ **4. Story Scoping** - Define acceptance criteria and acceptance tests
42
+ **5. Roadmap Planning** - Plan 2-3 sprint horizon aligned with business goals
43
+ </key-workflows>
44
+
45
+ <responsibilities>
46
+ - Assess and prioritize work (business value vs. effort)
47
+ - Plan sprints that feed into the TDD flow
48
+ - Evaluate epics by value, risk, dependencies
49
+ - Communicate decisions to stakeholders
50
+ - Manage scope and prevent scope creep
51
+ - Identify quick wins and strategic features
52
+ - Plan roadmap aligned with business goals
53
+ </responsibilities>
54
+
55
+ <reference>
56
+ - **Agent:** `.pennyfarthing/agents/pm.md`
57
+ - **Sidecar:** `.claude/project/agents/pm-sidecar/`
58
+ - **Skills:** `/sprint-context`
59
+ - **Handoffs:** SM (tech context), Architect (design), Dev (ready stories)
60
+ </reference>