@pennyfarthing/core 11.2.0 → 11.2.2

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 (367) hide show
  1. package/README.md +100 -40
  2. package/package.json +2 -1
  3. package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
  4. package/packages/core/dist/cli/commands/doctor.js +474 -66
  5. package/packages/core/dist/cli/commands/doctor.js.map +1 -1
  6. package/packages/core/dist/cli/commands/init.js +4 -4
  7. package/packages/core/dist/cli/commands/init.js.map +1 -1
  8. package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
  9. package/packages/core/dist/cli/commands/update.js +4 -5
  10. package/packages/core/dist/cli/commands/update.js.map +1 -1
  11. package/packages/core/dist/cli/utils/constants.d.ts +3 -8
  12. package/packages/core/dist/cli/utils/constants.d.ts.map +1 -1
  13. package/packages/core/dist/cli/utils/constants.js +3 -4
  14. package/packages/core/dist/cli/utils/constants.js.map +1 -1
  15. package/packages/core/dist/cli/utils/settings.d.ts +7 -0
  16. package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
  17. package/packages/core/dist/cli/utils/settings.js +70 -29
  18. package/packages/core/dist/cli/utils/settings.js.map +1 -1
  19. package/packages/core/dist/cli/utils/symlinks.js +16 -16
  20. package/packages/core/dist/cli/utils/symlinks.js.map +1 -1
  21. package/packages/core/dist/consultation/dialogue-manager.d.ts +1 -1
  22. package/packages/core/dist/consultation/dialogue-manager.d.ts.map +1 -1
  23. package/packages/core/dist/consultation/dialogue-manager.js +1 -1
  24. package/packages/core/dist/consultation/dialogue-manager.js.map +1 -1
  25. package/packages/core/dist/consultation/dialogue-manager.test.js.map +1 -1
  26. package/packages/core/dist/consultation/tandem-metrics.d.ts +91 -0
  27. package/packages/core/dist/consultation/tandem-metrics.d.ts.map +1 -0
  28. package/packages/core/dist/consultation/tandem-metrics.js +131 -0
  29. package/packages/core/dist/consultation/tandem-metrics.js.map +1 -0
  30. package/packages/core/dist/consultation/tandem-metrics.test.d.ts +18 -0
  31. package/packages/core/dist/consultation/tandem-metrics.test.d.ts.map +1 -0
  32. package/packages/core/dist/consultation/tandem-metrics.test.js +457 -0
  33. package/packages/core/dist/consultation/tandem-metrics.test.js.map +1 -0
  34. package/packages/core/dist/public/css/react.css +1 -1
  35. package/packages/core/dist/public/js/react/react.js +14 -14
  36. package/packages/core/dist/server/api/agent-load.js +1 -1
  37. package/packages/core/dist/server/api/agent-load.js.map +1 -1
  38. package/packages/core/dist/server/api/git.d.ts.map +1 -1
  39. package/packages/core/dist/server/api/git.js +0 -1
  40. package/packages/core/dist/server/api/git.js.map +1 -1
  41. package/packages/core/dist/server/api/index.d.ts +2 -0
  42. package/packages/core/dist/server/api/index.d.ts.map +1 -1
  43. package/packages/core/dist/server/api/index.js +2 -0
  44. package/packages/core/dist/server/api/index.js.map +1 -1
  45. package/packages/core/dist/server/api/project-info.d.ts +11 -0
  46. package/packages/core/dist/server/api/project-info.d.ts.map +1 -0
  47. package/packages/core/dist/server/api/project-info.js +18 -0
  48. package/packages/core/dist/server/api/project-info.js.map +1 -0
  49. package/packages/core/dist/server/otlp-receiver.d.ts.map +1 -1
  50. package/packages/core/dist/server/otlp-receiver.js +18 -1
  51. package/packages/core/dist/server/otlp-receiver.js.map +1 -1
  52. package/packages/core/dist/server/otlp-receiver.test.js +1 -1
  53. package/packages/core/dist/server/otlp-receiver.test.js.map +1 -1
  54. package/packages/core/dist/server/server.d.ts +0 -3
  55. package/packages/core/dist/server/server.d.ts.map +1 -1
  56. package/packages/core/dist/server/server.js +5 -38
  57. package/packages/core/dist/server/server.js.map +1 -1
  58. package/packages/core/dist/server/server.test.d.ts +1 -1
  59. package/packages/core/dist/server/server.test.js +12 -23
  60. package/packages/core/dist/server/server.test.js.map +1 -1
  61. package/packages/core/dist/server/settings.d.ts +1 -0
  62. package/packages/core/dist/server/settings.d.ts.map +1 -1
  63. package/packages/core/dist/server/settings.js +13 -0
  64. package/packages/core/dist/server/settings.js.map +1 -1
  65. package/packages/core/dist/shared/capabilities.d.ts +88 -0
  66. package/packages/core/dist/shared/capabilities.d.ts.map +1 -0
  67. package/packages/core/dist/shared/capabilities.js +133 -0
  68. package/packages/core/dist/shared/capabilities.js.map +1 -0
  69. package/packages/core/dist/shared/capabilities.test.d.ts +2 -0
  70. package/packages/core/dist/shared/capabilities.test.d.ts.map +1 -0
  71. package/packages/core/dist/shared/capabilities.test.js +217 -0
  72. package/packages/core/dist/shared/capabilities.test.js.map +1 -0
  73. package/packages/core/dist/shared/spawn-prompt.d.ts +47 -0
  74. package/packages/core/dist/shared/spawn-prompt.d.ts.map +1 -0
  75. package/packages/core/dist/shared/spawn-prompt.js +82 -0
  76. package/packages/core/dist/shared/spawn-prompt.js.map +1 -0
  77. package/packages/core/dist/shared/spawn-prompt.test.d.ts +2 -0
  78. package/packages/core/dist/shared/spawn-prompt.test.d.ts.map +1 -0
  79. package/packages/core/dist/shared/spawn-prompt.test.js +251 -0
  80. package/packages/core/dist/shared/spawn-prompt.test.js.map +1 -0
  81. package/packages/core/dist/workflow/tandem-workflow-templates.test.d.ts +18 -0
  82. package/packages/core/dist/workflow/tandem-workflow-templates.test.d.ts.map +1 -0
  83. package/packages/core/dist/workflow/tandem-workflow-templates.test.js +434 -0
  84. package/packages/core/dist/workflow/tandem-workflow-templates.test.js.map +1 -0
  85. package/packages/core/dist/workflow/team-lifecycle.d.ts +169 -0
  86. package/packages/core/dist/workflow/team-lifecycle.d.ts.map +1 -0
  87. package/packages/core/dist/workflow/team-lifecycle.js +217 -0
  88. package/packages/core/dist/workflow/team-lifecycle.js.map +1 -0
  89. package/packages/core/dist/workflow/team-lifecycle.test.d.ts +20 -0
  90. package/packages/core/dist/workflow/team-lifecycle.test.d.ts.map +1 -0
  91. package/packages/core/dist/workflow/team-lifecycle.test.js +966 -0
  92. package/packages/core/dist/workflow/team-lifecycle.test.js.map +1 -0
  93. package/packages/core/dist/workflow/workflow-schema.d.ts +32 -0
  94. package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
  95. package/packages/core/dist/workflow/workflow-schema.js +120 -0
  96. package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
  97. package/packages/core/dist/workflow/workflow-schema.test.d.ts.map +1 -1
  98. package/packages/core/dist/workflow/workflow-schema.test.js +570 -1
  99. package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -1
  100. package/packages/core/dist/workflow/workflow-team-templates.test.d.ts +17 -0
  101. package/packages/core/dist/workflow/workflow-team-templates.test.d.ts.map +1 -0
  102. package/packages/core/dist/workflow/workflow-team-templates.test.js +275 -0
  103. package/packages/core/dist/workflow/workflow-team-templates.test.js.map +1 -0
  104. package/pennyfarthing-dist/agents/dev.md +21 -12
  105. package/pennyfarthing-dist/agents/reviewer.md +23 -4
  106. package/pennyfarthing-dist/agents/sm-finish.md +19 -2
  107. package/pennyfarthing-dist/agents/sm-setup.md +7 -7
  108. package/pennyfarthing-dist/agents/sm.md +12 -12
  109. package/pennyfarthing-dist/agents/tea.md +2 -2
  110. package/pennyfarthing-dist/agents/testing-runner.md +1 -1
  111. package/pennyfarthing-dist/commands/pf-architect.md +1 -1
  112. package/pennyfarthing-dist/commands/pf-ba.md +1 -1
  113. package/pennyfarthing-dist/commands/pf-chore.md +2 -2
  114. package/pennyfarthing-dist/commands/pf-dev.md +1 -1
  115. package/pennyfarthing-dist/commands/pf-devops.md +1 -1
  116. package/pennyfarthing-dist/commands/pf-epic.md +6 -6
  117. package/pennyfarthing-dist/commands/pf-git.md +12 -10
  118. package/pennyfarthing-dist/commands/pf-health-check.md +1 -1
  119. package/pennyfarthing-dist/commands/pf-help.md +12 -12
  120. package/pennyfarthing-dist/commands/pf-orchestrator.md +1 -1
  121. package/pennyfarthing-dist/commands/pf-pm.md +1 -1
  122. package/pennyfarthing-dist/commands/pf-prime.md +8 -8
  123. package/pennyfarthing-dist/commands/pf-reviewer.md +1 -1
  124. package/pennyfarthing-dist/commands/pf-session.md +7 -7
  125. package/pennyfarthing-dist/commands/pf-sm.md +1 -1
  126. package/pennyfarthing-dist/commands/pf-sprint.md +7 -7
  127. package/pennyfarthing-dist/commands/pf-tea.md +1 -1
  128. package/pennyfarthing-dist/commands/pf-tech-writer.md +1 -1
  129. package/pennyfarthing-dist/commands/pf-theme.md +9 -9
  130. package/pennyfarthing-dist/commands/pf-ux-designer.md +1 -1
  131. package/pennyfarthing-dist/commands/pf-work.md +1 -1
  132. package/pennyfarthing-dist/gates/approval.md +63 -0
  133. package/pennyfarthing-dist/gates/confidence-sm.md +71 -0
  134. package/pennyfarthing-dist/gates/context-ok.md +56 -0
  135. package/pennyfarthing-dist/gates/evaluations/confidence-sm.md +54 -0
  136. package/pennyfarthing-dist/gates/quality-pass.md +67 -0
  137. package/pennyfarthing-dist/gates/tests-fail.md +84 -0
  138. package/pennyfarthing-dist/gates/tests-pass.md +79 -0
  139. package/pennyfarthing-dist/guides/agent-behavior.md +84 -29
  140. package/pennyfarthing-dist/guides/agent-coordination.md +10 -10
  141. package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +6 -6
  142. package/pennyfarthing-dist/guides/agent-template-tactical.md +1 -1
  143. package/pennyfarthing-dist/guides/bell-mode.md +1 -1
  144. package/pennyfarthing-dist/guides/bikerack.md +10 -10
  145. package/pennyfarthing-dist/guides/brownfield-tools.md +24 -24
  146. package/pennyfarthing-dist/guides/command-tag-taxonomy.md +1 -1
  147. package/pennyfarthing-dist/guides/gate-schema.md +2 -2
  148. package/pennyfarthing-dist/guides/gates.md +3 -3
  149. package/pennyfarthing-dist/guides/handoff-cli.md +8 -8
  150. package/pennyfarthing-dist/guides/hooks.md +29 -29
  151. package/pennyfarthing-dist/guides/prime.md +2 -2
  152. package/pennyfarthing-dist/guides/reflector.md +1 -1
  153. package/pennyfarthing-dist/guides/skill-schema.md +6 -6
  154. package/pennyfarthing-dist/guides/tandem-protocol.md +3 -3
  155. package/pennyfarthing-dist/guides/workflow-schema.md +1 -1
  156. package/pennyfarthing-dist/guides/worktree-mode.md +3 -3
  157. package/pennyfarthing-dist/guides/xml-tags.md +8 -8
  158. package/pennyfarthing-dist/scripts/README.md +4 -4
  159. package/pennyfarthing-dist/scripts/core/agent-session.sh +2 -5
  160. package/pennyfarthing-dist/scripts/core/check-context.sh +3 -1
  161. package/pennyfarthing-dist/scripts/core/pf.sh +5 -0
  162. package/pennyfarthing-dist/scripts/core/phase-check-start.sh +4 -89
  163. package/pennyfarthing-dist/scripts/core/prime.sh +2 -25
  164. package/pennyfarthing-dist/scripts/git/README.md +14 -14
  165. package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +2 -3
  166. package/pennyfarthing-dist/scripts/git/git-status-all.sh +2 -3
  167. package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +2 -3
  168. package/pennyfarthing-dist/scripts/git/worktree-manager.sh +2 -4
  169. package/pennyfarthing-dist/scripts/hooks/README.md +6 -6
  170. package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +4 -183
  171. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +4 -95
  172. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +4 -65
  173. package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +3 -31
  174. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +5 -4
  175. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +29 -34
  176. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +4 -71
  177. package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +3 -19
  178. package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +4 -30
  179. package/pennyfarthing-dist/scripts/hooks/session-start.sh +3 -32
  180. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +4 -65
  181. package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +4 -78
  182. package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +3 -93
  183. package/pennyfarthing-dist/scripts/lib/env.sh +34 -0
  184. package/pennyfarthing-dist/scripts/lib/run-pf.sh +39 -0
  185. package/pennyfarthing-dist/scripts/misc/README.md +1 -1
  186. package/pennyfarthing-dist/scripts/misc/statusline.sh +4 -301
  187. package/pennyfarthing-dist/scripts/sprint/README.md +21 -21
  188. package/pennyfarthing-dist/scripts/workflow/README.md +2 -2
  189. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +2 -16
  190. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +3 -3
  191. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +3 -3
  192. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +3 -3
  193. package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +3 -3
  194. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +3 -3
  195. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +3 -3
  196. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +3 -3
  197. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +3 -3
  198. package/pennyfarthing-dist/skills/pf-bc/examples.md +23 -23
  199. package/pennyfarthing-dist/skills/pf-bc/skill.md +17 -17
  200. package/pennyfarthing-dist/skills/pf-bc/usage.md +8 -8
  201. package/pennyfarthing-dist/skills/pf-jira/SKILL.md +15 -15
  202. package/pennyfarthing-dist/skills/pf-jira/examples.md +48 -48
  203. package/pennyfarthing-dist/skills/pf-jira/usage.md +15 -15
  204. package/pennyfarthing-dist/skills/pf-sprint/examples.md +80 -80
  205. package/pennyfarthing-dist/skills/pf-sprint/skill.md +35 -35
  206. package/pennyfarthing-dist/skills/pf-sprint/usage.md +30 -30
  207. package/pennyfarthing-dist/skills/pf-theme/examples.md +15 -15
  208. package/pennyfarthing-dist/skills/pf-theme/skill.md +6 -6
  209. package/pennyfarthing-dist/skills/pf-theme/usage.md +5 -5
  210. package/pennyfarthing-dist/skills/pf-workflow/examples.md +27 -27
  211. package/pennyfarthing-dist/skills/pf-workflow/skill.md +11 -11
  212. package/pennyfarthing-dist/skills/pf-workflow/usage.md +11 -11
  213. package/pennyfarthing-dist/skills/skill-registry.yaml +19 -19
  214. package/pennyfarthing-dist/templates/settings.local.json.template +19 -10
  215. package/pennyfarthing-dist/workflows/bdd-team.yaml +89 -0
  216. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +1 -1
  217. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +1 -1
  218. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-04-verify.md +1 -1
  219. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +1 -1
  220. package/pennyfarthing-dist/workflows/project-setup/steps/step-01-discover.md +47 -0
  221. package/pennyfarthing-dist/workflows/tdd-team.yaml +80 -0
  222. package/pennyfarthing-dist/workflows/tdd.yaml +11 -2
  223. package/pennyfarthing_scripts/CLAUDE.md +19 -10
  224. package/pennyfarthing_scripts/__init__.py +1 -1
  225. package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
  226. package/pennyfarthing_scripts/__pycache__/bellmode_hook.cpython-314.pyc +0 -0
  227. package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
  228. package/pennyfarthing_scripts/__pycache__/context.cpython-314.pyc +0 -0
  229. package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
  230. package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
  231. package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
  232. package/pennyfarthing_scripts/__pycache__/session_start_hook.cpython-314.pyc +0 -0
  233. package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-314.pyc +0 -0
  234. package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-314.pyc +0 -0
  235. package/pennyfarthing_scripts/bc/__pycache__/split.cpython-314.pyc +0 -0
  236. package/pennyfarthing_scripts/bc/cli.py +2 -2
  237. package/pennyfarthing_scripts/bellmode_hook.py +9 -296
  238. package/pennyfarthing_scripts/bikerack/__pycache__/audit_log_panel.cpython-314.pyc +0 -0
  239. package/pennyfarthing_scripts/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
  240. package/pennyfarthing_scripts/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
  241. package/pennyfarthing_scripts/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
  242. package/pennyfarthing_scripts/bikerack/__pycache__/context_meter_footer.cpython-314.pyc +0 -0
  243. package/pennyfarthing_scripts/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
  244. package/pennyfarthing_scripts/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
  245. package/pennyfarthing_scripts/bikerack/__pycache__/events.cpython-314.pyc +0 -0
  246. package/pennyfarthing_scripts/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
  247. package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
  248. package/pennyfarthing_scripts/bikerack/__pycache__/portrait_resolver.cpython-314.pyc +0 -0
  249. package/pennyfarthing_scripts/bikerack/__pycache__/progress_panel.cpython-314.pyc +0 -0
  250. package/pennyfarthing_scripts/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
  251. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_data.cpython-314.pyc +0 -0
  252. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_screen.cpython-314.pyc +0 -0
  253. package/pennyfarthing_scripts/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
  254. package/pennyfarthing_scripts/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
  255. package/pennyfarthing_scripts/bikerack/audit_log_panel.py +161 -0
  256. package/pennyfarthing_scripts/bikerack/base_panel.py +27 -4
  257. package/pennyfarthing_scripts/bikerack/changed_panel.py +96 -4
  258. package/pennyfarthing_scripts/bikerack/context_meter_footer.py +88 -0
  259. package/pennyfarthing_scripts/bikerack/debug_panel.py +1 -1
  260. package/pennyfarthing_scripts/bikerack/diffs_panel.py +30 -0
  261. package/pennyfarthing_scripts/bikerack/events.py +28 -0
  262. package/pennyfarthing_scripts/bikerack/launcher.py +6 -6
  263. package/pennyfarthing_scripts/bikerack/portrait_resolver.py +139 -0
  264. package/pennyfarthing_scripts/bikerack/progress_panel.py +0 -1
  265. package/pennyfarthing_scripts/bikerack/sprint_panel.py +373 -142
  266. package/pennyfarthing_scripts/bikerack/story_detail_data.py +247 -0
  267. package/pennyfarthing_scripts/bikerack/story_detail_screen.py +177 -0
  268. package/pennyfarthing_scripts/bikerack/tui.py +304 -62
  269. package/pennyfarthing_scripts/bikerack/ws_client.py +2 -2
  270. package/pennyfarthing_scripts/cli.py +5 -0
  271. package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
  272. package/pennyfarthing_scripts/common/config.py +29 -2
  273. package/pennyfarthing_scripts/common/pr_config.py +38 -0
  274. package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
  275. package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-314.pyc +0 -0
  276. package/pennyfarthing_scripts/consultation/cli.py +3 -3
  277. package/pennyfarthing_scripts/context.py +3 -3
  278. package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
  279. package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
  280. package/pennyfarthing_scripts/git/__pycache__/repos.cpython-314.pyc +0 -0
  281. package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
  282. package/pennyfarthing_scripts/git/hooks_installer.py +2 -3
  283. package/pennyfarthing_scripts/git/status_all.py +1 -1
  284. package/pennyfarthing_scripts/git/worktree.py +2 -2
  285. package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-314.pyc +0 -0
  286. package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-314.pyc +0 -0
  287. package/pennyfarthing_scripts/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
  288. package/pennyfarthing_scripts/handoff/__pycache__/marker.cpython-314.pyc +0 -0
  289. package/pennyfarthing_scripts/handoff/__pycache__/phase_check.cpython-314.pyc +0 -0
  290. package/pennyfarthing_scripts/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
  291. package/pennyfarthing_scripts/handoff/cli.py +33 -1
  292. package/pennyfarthing_scripts/handoff/complete_phase.py +28 -0
  293. package/pennyfarthing_scripts/handoff/marker.py +15 -15
  294. package/pennyfarthing_scripts/handoff/phase_check.py +96 -0
  295. package/pennyfarthing_scripts/handoff/resolve_gate.py +13 -1
  296. package/pennyfarthing_scripts/hooks/__init__.py +442 -0
  297. package/pennyfarthing_scripts/hooks/__pycache__/__init__.cpython-314.pyc +0 -0
  298. package/pennyfarthing_scripts/hooks/__pycache__/bell_mode.cpython-314.pyc +0 -0
  299. package/pennyfarthing_scripts/hooks/__pycache__/cli.cpython-314.pyc +0 -0
  300. package/pennyfarthing_scripts/hooks/__pycache__/context_breaker.cpython-314.pyc +0 -0
  301. package/pennyfarthing_scripts/hooks/__pycache__/context_warning.cpython-314.pyc +0 -0
  302. package/pennyfarthing_scripts/hooks/__pycache__/cyclist_pretooluse.cpython-314.pyc +0 -0
  303. package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-314.pyc +0 -0
  304. package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-314.pyc +0 -0
  305. package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-314.pyc +0 -0
  306. package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-314.pyc +0 -0
  307. package/pennyfarthing_scripts/hooks/__pycache__/session_stop.cpython-314.pyc +0 -0
  308. package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-314.pyc +0 -0
  309. package/pennyfarthing_scripts/hooks/__pycache__/statusline.cpython-314.pyc +0 -0
  310. package/pennyfarthing_scripts/hooks/bell_mode.py +214 -0
  311. package/pennyfarthing_scripts/hooks/cli.py +96 -0
  312. package/pennyfarthing_scripts/hooks/context_breaker.py +104 -0
  313. package/pennyfarthing_scripts/hooks/context_warning.py +66 -0
  314. package/pennyfarthing_scripts/hooks/cyclist_pretooluse.py +129 -0
  315. package/pennyfarthing_scripts/hooks/pre_edit_check.py +77 -0
  316. package/pennyfarthing_scripts/hooks/reflector_check.py +270 -0
  317. package/pennyfarthing_scripts/hooks/schema_validation.py +202 -0
  318. package/pennyfarthing_scripts/hooks/session_start.py +294 -0
  319. package/pennyfarthing_scripts/hooks/session_stop.py +111 -0
  320. package/pennyfarthing_scripts/hooks/sprint_yaml_validation.py +97 -0
  321. package/pennyfarthing_scripts/hooks/statusline.py +429 -0
  322. package/pennyfarthing_scripts/hooks.py +27 -432
  323. package/pennyfarthing_scripts/pretooluse_hook.py +3 -185
  324. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  325. package/pennyfarthing_scripts/prime/heatmap.py +3 -15
  326. package/pennyfarthing_scripts/prime/workflow.py +2 -1
  327. package/pennyfarthing_scripts/schema_validation_hook.py +3 -298
  328. package/pennyfarthing_scripts/session_start_hook.py +4 -186
  329. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  330. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  331. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  332. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  333. package/pennyfarthing_scripts/sprint/cli.py +121 -0
  334. package/pennyfarthing_scripts/sprint/loader.py +154 -3
  335. package/pennyfarthing_scripts/sprint/story_update.py +26 -0
  336. package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
  337. package/pennyfarthing_scripts/tests/__pycache__/test_handoff_cli.cpython-314-pytest-9.0.2.pyc +0 -0
  338. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_list_team.cpython-314-pytest-9.0.2.pyc +0 -0
  339. package/pennyfarthing_scripts/tests/test_bikerack.py +26 -26
  340. package/pennyfarthing_scripts/tests/test_dialogue_manager.py +0 -1
  341. package/pennyfarthing_scripts/tests/test_sprint_panel.py +344 -265
  342. package/pennyfarthing_scripts/tests/test_workflow_list_team.py +147 -0
  343. package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
  344. package/pennyfarthing_scripts/validate/adapters/__pycache__/skill_command.cpython-314.pyc +0 -0
  345. package/pennyfarthing_scripts/validate/adapters/__pycache__/tandem_awareness.cpython-314.pyc +0 -0
  346. package/pennyfarthing_scripts/validate/adapters/__pycache__/team_mode.cpython-314.pyc +0 -0
  347. package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
  348. package/pennyfarthing_scripts/validate/adapters/team_mode.py +323 -0
  349. package/pennyfarthing_scripts/validate/adapters/workflow.py +19 -0
  350. package/pennyfarthing_scripts/welcome_hook.py +3 -149
  351. package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-314.pyc +0 -0
  352. package/pennyfarthing_scripts/workflow/__pycache__/cli.cpython-314.pyc +0 -0
  353. package/pennyfarthing_scripts/workflow/__pycache__/helpers.cpython-314.pyc +0 -0
  354. package/pennyfarthing_scripts/workflow/__pycache__/scale.cpython-314.pyc +0 -0
  355. package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-314.pyc +0 -0
  356. package/pennyfarthing_scripts/workflow/__pycache__/team_lifecycle.cpython-314.pyc +0 -0
  357. package/pennyfarthing_scripts/workflow/cli.py +22 -20
  358. package/pennyfarthing_scripts/workflow/state.py +0 -1
  359. package/pennyfarthing_scripts/workflow/team_lifecycle.py +256 -0
  360. package/packages/core/dist/cli/cyclist-migration.test.d.ts +0 -16
  361. package/packages/core/dist/cli/cyclist-migration.test.d.ts.map +0 -1
  362. package/packages/core/dist/cli/cyclist-migration.test.js +0 -229
  363. package/packages/core/dist/cli/cyclist-migration.test.js.map +0 -1
  364. package/packages/core/dist/scripts/theme-detail.test.d.ts +0 -10
  365. package/packages/core/dist/scripts/theme-detail.test.d.ts.map +0 -1
  366. package/packages/core/dist/scripts/theme-detail.test.js +0 -199
  367. package/packages/core/dist/scripts/theme-detail.test.js.map +0 -1
@@ -3,23 +3,28 @@
3
3
 
4
4
  **Tests:** Use `testing-runner` subagent, never run directly.
5
5
 
6
- **Handoff:** Run `pf handoff resolve-gate` → gate check → `pf handoff complete-phase` → `pf handoff marker` → EXIT. See `<agent-exit-protocol>`.
6
+ **Handoff:** Run pf.sh `handoff resolve-gate` → gate check → pf.sh `handoff complete-phase` → pf.sh `handoff marker` → EXIT. See `<agent-exit-protocol>`.
7
7
 
8
8
  **Sidecars:** Write learnings BEFORE starting exit protocol.
9
9
 
10
10
  **Scripts:** Pennyfarthing scripts are Python-based (`pennyfarthing_scripts/`), not shell—check before assuming `.sh`.
11
+
12
+ **pf CLI:** Never call bare `pf` — it is not globally installed. Always use the wrapper:
13
+ ```bash
14
+ "$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh <command> [args...]
15
+ ```
11
16
  </critical>
12
17
 
13
18
  <critical>
14
19
  **Story completion is MANDATORY.** A story is NOT done until:
15
20
  1. Reviewer approves and merges the PR
16
- 2. SM runs `pf sprint story finish` (archive session, update Jira, clean up)
21
+ 2. SM runs pf.sh `sprint story finish` (archive session, update Jira, clean up)
17
22
 
18
23
  **Never** start new work while stories have open PRs. The merge gate blocks `/pf-sprint work` if open PRs exist.
19
24
 
20
25
  **If stuck in incomplete state:**
21
- - Open PRs? → Run `/reviewer` to complete reviews and merge
22
- - Merged but not finished? → Run `/sm` to trigger finish flow
26
+ - Open PRs? → Run `/pf-reviewer` to complete reviews and merge
27
+ - Merged but not finished? → Run `/pf-sm` to trigger finish flow
23
28
  </critical>
24
29
 
25
30
  ---
@@ -49,7 +54,7 @@ On activation, check session file for a `**Tandem:**` line (e.g., `**Tandem:** a
49
54
 
50
55
  **If tandem is configured:**
51
56
 
52
- 1. **Resolve backseat persona** from theme:
57
+ 1. **Resolve backseat persona** from theme using the `pf.sh theme`
53
58
  ```bash
54
59
  THEME=$(yq '.theme' .pennyfarthing/config.local.yaml)
55
60
  PARTNER_CHARACTER=$(yq ".agents.{PARTNER}.character" .pennyfarthing/personas/themes/${THEME}.yaml)
@@ -95,19 +100,65 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
95
100
 
96
101
  ---
97
102
 
103
+ <team-mode>
104
+ ## Team Mode Protocol
105
+
106
+ When a workflow phase has a `team:` configuration block, the phase agent acts as
107
+ **team lead** and spawns teammates for parallel collaboration within that phase.
108
+
109
+ ### Team Creation
110
+
111
+ On phase entry, detect the `team:` block in workflow YAML. Use `TeamCreate`
112
+ to create a phase-scoped team named after the phase (e.g., `"green-phase"`).
113
+
114
+ ### Teammate Spawning
115
+
116
+ Spawn teammates via the Task tool with `team_name` parameter. Each teammate
117
+ runs `pf agent start {agent}` for full Prime activation. Keep spawn prompts
118
+ under 500 tokens — teammates auto-load CLAUDE.md, MCP servers, and skills.
119
+
120
+ ### Communication
121
+
122
+ - **Inter-phase handoff:** Use Reflector markers (`<!-- CYCLIST:HANDOFF -->`)
123
+ for phase transitions — unchanged from sequential mode.
124
+ - **Intra-phase collaboration:** Use `SendMessage` for real-time teammate
125
+ communication. Never use markers for intra-phase messaging.
126
+
127
+ ### Teammate Behavior
128
+
129
+ Teammates know they are NOT the lead. They:
130
+ - Communicate via SendMessage (DMs to lead or other teammates)
131
+ - Go idle when their assigned task is complete
132
+ - Respond to shutdown requests with shutdown_response
133
+
134
+ ### Cleanup Before Handoff
135
+
136
+ Before starting the exit protocol, the lead MUST:
137
+ 1. Send `shutdown_request` to all teammates via SendMessage
138
+ 2. Wait for `shutdown_response` from each teammate
139
+ 3. Run `TeamDelete` to clean up the team
140
+ 4. Then proceed with normal handoff (resolve-gate → complete-phase → marker)
141
+
142
+ Teams are **phase-scoped** — created at phase start, destroyed at phase end.
143
+ Handoff between phases is unchanged.
144
+ </team-mode>
145
+
146
+ ---
147
+
98
148
  ## Reflector
99
149
 
100
150
  <critical>
101
- **EVERY TURN MUST END WITH A CYCLIST MARKER.** Stop hook enforces this.
102
-
103
- | Situation | Marker |
104
- |-----------|--------|
105
- | Workflow handoff | `<!-- CYCLIST:HANDOFF:/agent -->` |
106
- | Handoff + context >80% | `<!-- CYCLIST:CONTEXT_CLEAR:/agent -->` |
107
- | Yes/no question | `<!-- CYCLIST:QUESTION:yesno -->` |
108
- | Open-ended question | `<!-- CYCLIST:QUESTION:open -->` |
109
- | Multiple choice | `<!-- CYCLIST:CHOICES:a,b,c -->` |
110
- | Everything else | `<!-- CYCLIST:CONTINUE -->` |
151
+ **Cyclist only:** EVERY TURN MUST END WITH A CYCLIST MARKER. Stop hook enforces this.
152
+ **CLI mode:** Do NOT emit CYCLIST markers — they are inert outside Cyclist.
153
+
154
+ | Situation | Cyclist Marker | CLI Behavior |
155
+ |-----------|---------------|--------------|
156
+ | Workflow handoff | `<!-- CYCLIST:HANDOFF:/agent -->` | Use AGENT_COMMAND `action` field |
157
+ | Handoff + context >80% | `<!-- CYCLIST:CONTEXT_CLEAR:/agent -->` | Tell user to `/clear` then run agent |
158
+ | Yes/no question | `<!-- CYCLIST:QUESTION:yesno -->` | Ask user directly |
159
+ | Open-ended question | `<!-- CYCLIST:QUESTION:open -->` | Ask user directly |
160
+ | Multiple choice | `<!-- CYCLIST:CHOICES:a,b,c -->` | Ask user directly |
161
+ | Everything else | `<!-- CYCLIST:CONTINUE -->` | (no marker needed) |
111
162
  </critical>
112
163
 
113
164
  ---
@@ -117,14 +168,20 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
117
168
 
118
169
  1. Write assessment to session
119
170
  2. Terminate tandem backseat (if active)
120
- 3. `pf handoff resolve-gate {story-id} {workflow} {phase}`RESOLVE_RESULT
121
- 4. If blocked report error, STOP
122
- 5. If skipjump to step 7
123
- 6. If readyspawn gate subagent with gate file → GATE_RESULT
124
- - If failfix issues, retry from step 3 (max 3 retries)
171
+ 3. **If team is active:** Shut down all teammates `TeamDelete` to clean up
172
+ 4. `"$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh handoff resolve-gate {story-id} {workflow} {phase}` → RESOLVE_RESULT
173
+ 5. If blockedreport error, STOP
174
+ 6. If skipjump to step 8
175
+ 7. If readyspawn gate subagent with gate file GATE_RESULT
176
+ - If fail → fix issues, retry from step 4 (max 3 retries)
125
177
  - If pass → continue
126
- 7. `pf handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}`
127
- 8. `pf handoff marker {next_agent}` → emit marker → EXIT
178
+ 8. `"$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}`
179
+ 9. `"$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh handoff marker {next_agent}` → AGENT_COMMAND block
180
+ 10. **Act on AGENT_COMMAND:**
181
+ - Has `marker:` field → emit the CYCLIST marker (Cyclist path)
182
+ - `action: "inline_handoff"` → run `activation_command` via Bash, output result, adopt new agent identity
183
+ - `action: "tirepump_handoff"` → tell user: "Context is high. Run `/clear` then `{fallback}`"
184
+ - No action, no marker → output `fallback` text and EXIT
128
185
 
129
186
  **Agents drive exit directly — no handoff subagent.** Scripts handle routing and session updates atomically.
130
187
  </agent-exit-protocol>
@@ -135,14 +192,12 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
135
192
  On activation, check if story phase belongs to you:
136
193
 
137
194
  ```bash
138
- OWNER=$(pf workflow phase-check {workflow} {phase})
139
- # If OWNER != your agent → emit handoff marker and EXIT
195
+ "$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh handoff phase-check {your_agent_name}
140
196
  ```
141
197
 
142
- Output:
143
- ```
144
- <!-- CYCLIST:HANDOFF:/{OWNER} -->
198
+ If result has `action: "redirect"`:
145
199
 
146
- Run `/pf-{OWNER}` to continue
147
- ```
200
+ - **Cyclist:** Emit `<!-- CYCLIST:HANDOFF:/{phase_owner} -->` and EXIT
201
+ - **CLI + relay ON:** Run `source .pennyfarthing/scripts/lib/env.sh && source "$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/lib/run-pf.sh" && run_pf agent start {phase_owner} --tier handoff --quiet` via Bash, adopt new identity
202
+ - **CLI + relay OFF:** Output `Run /pf-{phase_owner} to continue` and EXIT
148
203
  </wrong-phase-detection>
@@ -4,7 +4,7 @@
4
4
 
5
5
  This document describes how Pennyfarthing agents are coordinated. The framework supports both single-repo and multi-repo projects.
6
6
 
7
- **Key Principle:** Single entry point (`/pf-session new` or `/work`), state detection via session files, handoffs via Haiku subagents.
7
+ **Key Principle:** Single entry point (`/pf-session new` or `/pf-work`), state detection via session files, handoffs via Haiku subagents.
8
8
 
9
9
  ## The TDD Flow
10
10
 
@@ -12,7 +12,7 @@ SM → TEA → Dev → Reviewer → SM (setup → red → green → review → f
12
12
 
13
13
  Handoffs between agents are managed by Haiku subagents.
14
14
 
15
- **Entry points:** `/pf-session new` (new story) or `/work` (smart resume/start)
15
+ **Entry points:** `/pf-session new` (new story) or `/pf-work` (smart resume/start)
16
16
  **State detection:** Agents read session file on activation
17
17
  **Handoffs:** Agents spawn Haiku subagents to update session file
18
18
  **Finish:** SM handles when status = `approved`
@@ -263,7 +263,7 @@ User: @/pm
263
263
  ### Tactical Agent Workflow (Dev Example)
264
264
 
265
265
  ```
266
- User: @/dev
266
+ User: @/pf-dev
267
267
 
268
268
  1. Load Dev agent definition (.pennyfarthing/agents/dev.md)
269
269
  2. Load base context:
@@ -428,7 +428,7 @@ Dev Agent Example (API story):
428
428
  - No subagent extraction
429
429
 
430
430
  ### Current Architecture (January 2026)
431
- - Smart entry point: `/work` (resumes or starts new)
431
+ - Smart entry point: `/pf-work` (resumes or starts new)
432
432
  - Alternative: `/pf-session new` (explicitly start new story)
433
433
  - State detection via session file in `.session/`
434
434
  - Handoffs via Haiku subagents in `.pennyfarthing/agents/`
@@ -447,17 +447,17 @@ sprint/ # Sprint tracking
447
447
  ### Commands Reference
448
448
  ```bash
449
449
  # Entry points
450
- /work # Smart entry - resume or start new
450
+ /pf-work # Smart entry - resume or start new
451
451
  /pf-session new # Explicitly start new story
452
452
 
453
453
  # TDD Flow agents
454
- /sm # Scrum Master (setup + finish)
455
- /tea # Test Engineer (RED phase)
456
- /dev # Developer (GREEN phase)
457
- /reviewer # Code Reviewer
454
+ /pf-sm # Scrum Master (setup + finish)
455
+ /pf-tea # Test Engineer (RED phase)
456
+ /pf-dev # Developer (GREEN phase)
457
+ /pf-reviewer # Code Reviewer
458
458
 
459
459
  # Support agents
460
- /architect # Architecture design
460
+ /pf-architect # Architecture design
461
461
  /tech-writer # Documentation
462
462
  /ux-designer # UI/UX design
463
463
  /devops # Infrastructure
@@ -106,7 +106,7 @@ High-priority instruction that MUST be followed.
106
106
  ```xml
107
107
  <critical>
108
108
  **HANDOFF REQUIRES MARKER OUTPUT.** After exit protocol completes:
109
- Run `pf handoff marker {next_agent}` as ABSOLUTE LAST ACTION, output result, EXIT.
109
+ Run `pf.sh handoff marker {next_agent}` as ABSOLUTE LAST ACTION, output result, EXIT.
110
110
  </critical>
111
111
  ```
112
112
  - **Validation:** First `<critical>` should be within line 30
@@ -175,10 +175,10 @@ Logic for checking if this agent owns the current phase.
175
175
 
176
176
  Read `**Workflow:**` and `**Phase:**` from session. Query:
177
177
  ```bash
178
- OWNER=$(pf workflow phase-check {workflow} {phase})
178
+ OWNER=$("$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh workflow phase-check {workflow} {phase})
179
179
  ```
180
180
 
181
- **If OWNER != "dev":** Run `pf handoff marker $OWNER`, output result, tell user.
181
+ **If OWNER != "dev":** Run `pf.sh handoff marker $OWNER`, output result, tell user.
182
182
  </phase-check>
183
183
  ```
184
184
 
@@ -250,9 +250,9 @@ Tags that contain checklists with `- [ ]` items.
250
250
  ## MANDATORY: Complete Before Exiting
251
251
 
252
252
  - [ ] Write Dev Assessment to session file
253
- - [ ] Run `pf handoff resolve-gate` — verify gate status
254
- - [ ] Run `pf handoff complete-phase` — atomic session update
255
- - [ ] Run `pf handoff marker {next_agent}` — emit marker and EXIT
253
+ - [ ] Run `pf.sh handoff resolve-gate` — verify gate status
254
+ - [ ] Run `pf.sh handoff complete-phase` — atomic session update
255
+ - [ ] Run `pf.sh handoff marker {next_agent}` — emit marker and EXIT
256
256
  </handoff-gate>
257
257
  ```
258
258
 
@@ -38,7 +38,7 @@ Auto-loaded by `agent-session.sh start` from theme config. See output above.
38
38
  </persona>
39
39
 
40
40
  <role>
41
- **Primary:** {When this agent is invoked, e.g., "via /tea for TDD test writing"}
41
+ **Primary:** {When this agent is invoked, e.g., "via /pf-tea for TDD test writing"}
42
42
  **Position:** {Where in TDD flow, e.g., "SM → **TEA** → Dev → Reviewer"}
43
43
  </role>
44
44
 
@@ -26,7 +26,7 @@ User queues message in Editor
26
26
  |------|---------|
27
27
  | `packages/cyclist/src/bell-mode.ts` | State management: `isBellModeEnabled()`, `setBellMode()`, `toggleBellMode()` |
28
28
  | `packages/cyclist/src/api/bell.ts` | WebSocket broadcast of bell-consumed events |
29
- | `pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh` | PostToolUse hook — reads queue, returns `additionalContext` |
29
+ | `pf.sh hooks bell-mode` | PostToolUse hook — reads queue, returns `additionalContext` |
30
30
  | `packages/cyclist/src/public/hooks/useMessageQueue.ts` | React hook: `queueMessage()`, `dequeueMessage()`, `injectMessage()`, `handleTurnComplete()` |
31
31
  | `packages/cyclist/src/public/contexts/MessageQueueContext.tsx` | Shared React context (single queue instance across components) |
32
32
  | `packages/cyclist/src/public/components/ControlBar.tsx` | Bell mode toggle button |
@@ -28,7 +28,7 @@ Cyclist bundles the conversation UI and dashboard panels into one Electron app.
28
28
 
29
29
  ```bash
30
30
  # Launch BikeRack + Claude CLI together
31
- pf bikerack start
31
+ pf.sh bikerack start
32
32
 
33
33
  # Or via just recipe
34
34
  just bikerack
@@ -37,10 +37,10 @@ just bikerack
37
37
  just bikerack dir=/path/to/project
38
38
 
39
39
  # Stop a running instance
40
- pf bikerack stop
40
+ pf.sh bikerack stop
41
41
 
42
42
  # Check status
43
- pf bikerack status
43
+ pf.sh bikerack status
44
44
  ```
45
45
 
46
46
  BikeRack opens a browser with the Dockview panel layout. Claude CLI runs in the foreground. When Claude exits, BikeRack shuts down automatically via `trap EXIT`.
@@ -71,7 +71,7 @@ BikeRack supports two modes:
71
71
 
72
72
  ## How It Works
73
73
 
74
- 1. **Launcher** (`pf bikerack start`) starts WheelHub with `IS_BIKERACK=1`
74
+ 1. **Launcher** (`pf.sh bikerack start`) starts WheelHub with `IS_BIKERACK=1`
75
75
  2. **WheelHub** listens on port 2898 (separate from Cyclist's 1898)
76
76
  3. **ClaudeService is skipped** — no `/ws/claude` WebSocket channel
77
77
  4. **OTEL telemetry** flows from Claude CLI to WheelHub's OTLP receiver
@@ -92,8 +92,8 @@ Client-side detection is URL-based: the presence of `?panel=X` triggers standalo
92
92
 
93
93
  | File | Purpose |
94
94
  |------|---------|
95
- | `.wheelhub-port` | Port number, written after `server.listen()` — readiness signal |
96
- | `.wheelhub-pid` | WheelHub PID, written by launcher — enables `pf bikerack stop` |
95
+ | `.bikerack-port` | Port number, written after `server.listen()` — readiness signal |
96
+ | `.wheelhub-pid` | WheelHub PID, written by launcher — enables `pf.sh bikerack stop` |
97
97
 
98
98
  Both are deleted on shutdown. Shared with Cyclist (single WheelHub namespace).
99
99
 
@@ -102,9 +102,9 @@ Both are deleted on shutdown. Shared with Cyclist (single WheelHub namespace).
102
102
  Save and restore BikeRack panel layouts:
103
103
 
104
104
  ```bash
105
- pf bc save my-layout # Save current layout
106
- pf bc load my-layout # Restore a saved layout
107
- pf bc list # List saved layouts
105
+ pf.sh bc save my-layout # Save current layout
106
+ pf.sh bc load my-layout # Restore a saved layout
107
+ pf.sh bc list # List saved layouts
108
108
  ```
109
109
 
110
110
  ## Key Files
@@ -115,7 +115,7 @@ pf bc list # List saved layouts
115
115
  | `packages/core/src/public/components/BikeRackWorkspace.tsx` | Dockview layout for BikeRack |
116
116
  | `packages/core/src/public/components/BikeRackIndex.tsx` | Panel listing index page |
117
117
  | `packages/core/src/public/components/StandalonePanel.tsx` | `?panel=X` routing + `PANEL_REGISTRY` |
118
- | `pennyfarthing_scripts/bikerack/cli.py` | `pf bikerack` launcher CLI |
118
+ | `pennyfarthing_scripts/bikerack/cli.py` | `pf.sh bikerack` launcher CLI |
119
119
 
120
120
  ## Constraints
121
121
 
@@ -6,7 +6,7 @@ CLI tools for analyzing existing codebases. Identify change hotspots, complexity
6
6
 
7
7
  ## Overview
8
8
 
9
- All tools are available under `pf debug` and share a consistent interface: `--format` (table/json/csv), `--output` (file), `--top` (result count), `--exclude` (patterns), and `--repo` (target).
9
+ All tools are available under `pf.sh debug` and share a consistent interface: `--format` (table/json/csv), `--output` (file), `--top` (result count), `--exclude` (patterns), and `--repo` (target).
10
10
 
11
11
  ## Tools
12
12
 
@@ -16,19 +16,19 @@ Find files that change most frequently — high churn often correlates with bugs
16
16
 
17
17
  ```bash
18
18
  # Full analysis (files + directories)
19
- pf debug hotspots analyze
19
+ pf.sh debug hotspots analyze
20
20
 
21
21
  # File-level only
22
- pf debug hotspots files
22
+ pf.sh debug hotspots files
23
23
 
24
24
  # Directory-level only
25
- pf debug hotspots dirs
25
+ pf.sh debug hotspots dirs
26
26
 
27
27
  # Options
28
- pf debug hotspots analyze --days 90 --top 20 --repo pennyfarthing
29
- pf debug hotspots analyze --format json --output hotspots.json
30
- pf debug hotspots analyze --exclude "*.test.ts" --branch main
31
- pf debug hotspots analyze --skip-type orchestrator
28
+ pf.sh debug hotspots analyze --days 90 --top 20 --repo pennyfarthing
29
+ pf.sh debug hotspots analyze --format json --output hotspots.json
30
+ pf.sh debug hotspots analyze --exclude "*.test.ts" --branch main
31
+ pf.sh debug hotspots analyze --skip-type orchestrator
32
32
  ```
33
33
 
34
34
  ### Complexity
@@ -36,9 +36,9 @@ pf debug hotspots analyze --skip-type orchestrator
36
36
  Measure code complexity metrics across files.
37
37
 
38
38
  ```bash
39
- pf debug complexity analyze
40
- pf debug complexity analyze --path ./packages/core/src
41
- pf debug complexity analyze --top 30 --format csv
39
+ pf.sh debug complexity analyze
40
+ pf.sh debug complexity analyze --path ./packages/core/src
41
+ pf.sh debug complexity analyze --top 30 --format csv
42
42
  ```
43
43
 
44
44
  ### Dead Code
@@ -47,12 +47,12 @@ Find unused code: stale files with no recent commits, and unused TypeScript expo
47
47
 
48
48
  ```bash
49
49
  # Files with no recent commits (default: 180 days)
50
- pf debug deadcode stale
51
- pf debug deadcode stale --days 90 --repo pennyfarthing
50
+ pf.sh debug deadcode stale
51
+ pf.sh debug deadcode stale --days 90 --repo pennyfarthing
52
52
 
53
53
  # Unused TypeScript exports (via ts-prune)
54
- pf debug deadcode exports
55
- pf debug deadcode exports --repo pennyfarthing --format json
54
+ pf.sh debug deadcode exports
55
+ pf.sh debug deadcode exports --repo pennyfarthing --format json
56
56
  ```
57
57
 
58
58
  ### Code Markers
@@ -61,16 +61,16 @@ Detect TODO, FIXME, HACK, and XXX comments with git blame data.
61
61
 
62
62
  ```bash
63
63
  # Full analysis with blame data
64
- pf debug codemarkers analyze
64
+ pf.sh debug codemarkers analyze
65
65
 
66
66
  # Only stale markers (older than threshold)
67
- pf debug codemarkers stale --days 90
67
+ pf.sh debug codemarkers stale --days 90
68
68
 
69
69
  # Summary counts by type
70
- pf debug codemarkers summary
70
+ pf.sh debug codemarkers summary
71
71
 
72
72
  # Deprecated symbol detection
73
- pf debug codemarkers deprecations
73
+ pf.sh debug codemarkers deprecations
74
74
  ```
75
75
 
76
76
  ### Dependencies
@@ -78,8 +78,8 @@ pf debug codemarkers deprecations
78
78
  Analyze dependency staleness and security advisories.
79
79
 
80
80
  ```bash
81
- pf debug dependencies analyze
82
- pf debug dependencies analyze --path ./pennyfarthing --format json
81
+ pf.sh debug dependencies analyze
82
+ pf.sh debug dependencies analyze --path ./pennyfarthing --format json
83
83
  ```
84
84
 
85
85
  ### Health Score
@@ -87,9 +87,9 @@ pf debug dependencies analyze --path ./pennyfarthing --format json
87
87
  Composite health score across all dimensions (hotspots, complexity, dead code, dependencies, markers).
88
88
 
89
89
  ```bash
90
- pf debug healthscore analyze
91
- pf debug healthscore analyze --no-cache # Bypass cache
92
- pf debug healthscore analyze --format json --output health.json
90
+ pf.sh debug healthscore analyze
91
+ pf.sh debug healthscore analyze --no-cache # Bypass cache
92
+ pf.sh debug healthscore analyze --format json --output health.json
93
93
  ```
94
94
 
95
95
  ## Common Options
@@ -61,7 +61,7 @@
61
61
 
62
62
  ### Conditional by Type
63
63
 
64
- **Workflow/Agent Commands (e.g., /sm, /dev, /tea)**
64
+ **Workflow/Agent Commands (e.g., /pf-sm, /pf-dev, /pf-tea)**
65
65
  - `<agent-activation>` — Required to show activation
66
66
  - `<instructions>` — Required for agent behavior
67
67
 
@@ -181,7 +181,7 @@ The `gate.file` value is resolved by the gate file discovery algorithm (project-
181
181
  Validate gate files before use:
182
182
 
183
183
  ```bash
184
- pf gate validate path/to/gate-file.md
184
+ pf.sh gate validate path/to/gate-file.md
185
185
  ```
186
186
 
187
187
  The validator checks:
@@ -215,7 +215,7 @@ Gate 'tests-pass' is valid
215
215
 
216
216
  6. **Add recovery steps.** The `recovery` array in failed results gives the agent a clear path to fix issues and retry.
217
217
 
218
- 7. **Test with the validator.** Run `pf gate validate` on your gate file before referencing it in a workflow.
218
+ 7. **Test with the validator.** Run `pf.sh gate validate` on your gate file before referencing it in a workflow.
219
219
 
220
220
  ## Related
221
221
 
@@ -78,14 +78,14 @@ Agents interact with gates through the handoff CLI during their exit sequence:
78
78
 
79
79
  ```
80
80
  1. Agent writes assessment to session file
81
- 2. pf handoff resolve-gate {story-id} {workflow} {phase}
81
+ 2. pf.sh handoff resolve-gate {story-id} {workflow} {phase}
82
82
  → Reads workflow YAML, finds gate for current phase
83
83
  → Returns RESOLVE_RESULT: {status: ready|skip|blocked, gate_file: ...}
84
84
  3. If ready → spawn Haiku subagent with gate file → GATE_RESULT
85
85
  4. If GATE_RESULT.status == fail → fix issues, retry (max 3)
86
86
  5. If GATE_RESULT.status == pass → continue to complete-phase
87
- 6. pf handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}
88
- 7. pf handoff marker {next-agent}
87
+ 6. pf.sh handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}
88
+ 7. pf.sh handoff marker {next-agent}
89
89
  ```
90
90
 
91
91
  If a phase has no `gate:` block, `resolve-gate` returns `status: skip` and the agent proceeds directly to `complete-phase`.
@@ -1,7 +1,7 @@
1
1
  # Handoff CLI
2
2
 
3
3
  <info>
4
- Python CLI for managing workflow phase transitions. Agents use `pf handoff` to resolve gates, complete phase transitions, and generate handoff markers during their exit protocol.
4
+ Python CLI for managing workflow phase transitions. Agents use `pf.sh handoff` to resolve gates, complete phase transitions, and generate handoff markers during their exit protocol.
5
5
  </info>
6
6
 
7
7
  ## Commands
@@ -11,7 +11,7 @@ Python CLI for managing workflow phase transitions. Agents use `pf handoff` to r
11
11
  Check whether the current phase has a gate and what state it's in.
12
12
 
13
13
  ```bash
14
- pf handoff resolve-gate STORY_ID WORKFLOW PHASE
14
+ pf.sh handoff resolve-gate STORY_ID WORKFLOW PHASE
15
15
  ```
16
16
 
17
17
  **Arguments:**
@@ -39,7 +39,7 @@ RESOLVE_RESULT:
39
39
  Atomically update the session file to record a phase transition.
40
40
 
41
41
  ```bash
42
- pf handoff complete-phase STORY_ID WORKFLOW FROM_PHASE TO_PHASE GATE_TYPE
42
+ pf.sh handoff complete-phase STORY_ID WORKFLOW FROM_PHASE TO_PHASE GATE_TYPE
43
43
  ```
44
44
 
45
45
  **Arguments:**
@@ -66,8 +66,8 @@ Updates the session file: `**Phase:**` line, timestamps, and phase history table
66
66
  Generate an environment-aware handoff marker block.
67
67
 
68
68
  ```bash
69
- pf handoff marker NEXT_AGENT
70
- pf handoff marker --error "Tests failing"
69
+ pf.sh handoff marker NEXT_AGENT
70
+ pf.sh handoff marker --error "Tests failing"
71
71
  ```
72
72
 
73
73
  **Arguments:**
@@ -88,14 +88,14 @@ The handoff CLI is used in sequence during agent exit:
88
88
 
89
89
  ```
90
90
  1. Write assessment to session file
91
- 2. pf handoff resolve-gate {story-id} {workflow} {phase}
91
+ 2. pf.sh handoff resolve-gate {story-id} {workflow} {phase}
92
92
  ├── blocked → report error, STOP
93
93
  ├── skip → jump to step 4
94
94
  └── ready → spawn gate subagent → GATE_RESULT
95
95
  ├── fail → fix issues, retry (max 3)
96
96
  └── pass → continue
97
- 3. pf handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}
98
- 4. pf handoff marker {next-agent} → emit marker → EXIT
97
+ 3. pf.sh handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}
98
+ 4. pf.sh handoff marker {next-agent} → emit marker → EXIT
99
99
  ```
100
100
 
101
101
  See `guides/gates.md` for gate file format and evaluation details.